Index: chrome/browser/android/offline_pages/offline_page_utils.cc |
diff --git a/chrome/browser/android/offline_pages/offline_page_utils.cc b/chrome/browser/android/offline_pages/offline_page_utils.cc |
index e53d52440a79732ef9929bf96a6737f86c1aca09..ac75cfa615373639d1540968f7fa85849c83bffc 100644 |
--- a/chrome/browser/android/offline_pages/offline_page_utils.cc |
+++ b/chrome/browser/android/offline_pages/offline_page_utils.cc |
@@ -4,9 +4,13 @@ |
#include "chrome/browser/android/offline_pages/offline_page_utils.h" |
+#include "base/bind.h" |
+#include "base/location.h" |
+#include "base/optional.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_piece.h" |
#include "base/strings/string_util.h" |
+#include "base/threading/thread_task_runner_handle.h" |
#include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" |
#include "chrome/browser/android/offline_pages/offline_page_model_factory.h" |
#include "components/offline_pages/offline_page_feature.h" |
@@ -58,6 +62,24 @@ const OfflinePageItem* GetOfflinePageForOfflineURL( |
return offline_page_model->MaybeGetPageByOfflineURL(offline_url); |
} |
+void OnGetPageByOfflineURLDone( |
+ const base::Callback<void(const GURL&)>& callback, |
+ const base::Optional<OfflinePageItem>& item) { |
+ GURL result_url; |
+ if (item) |
+ result_url = item->url; |
+ callback.Run(result_url); |
+} |
+ |
+void OnGetBestPageForOnlineURLDone( |
+ const base::Callback<void(const GURL&)>& callback, |
+ const base::Optional<OfflinePageItem>& item) { |
+ GURL result_url; |
+ if (item) |
+ result_url = item->GetOfflineURL(); |
+ callback.Run(result_url); |
+} |
+ |
} // namespace |
// static |
@@ -70,7 +92,7 @@ bool OfflinePageUtils::MightBeOfflineURL(const GURL& url) { |
} |
// static |
-GURL OfflinePageUtils::GetOfflineURLForOnlineURL( |
+GURL OfflinePageUtils::MaybeGetOfflineURLForOnlineURL( |
content::BrowserContext* browser_context, |
const GURL& online_url) { |
const OfflinePageItem* offline_page = |
@@ -82,7 +104,25 @@ GURL OfflinePageUtils::GetOfflineURLForOnlineURL( |
} |
// static |
-GURL OfflinePageUtils::GetOnlineURLForOfflineURL( |
+void OfflinePageUtils::GetOfflineURLForOnlineURL( |
+ content::BrowserContext* browser_context, |
+ const GURL& online_url, |
+ const base::Callback<void(const GURL&)>& callback) { |
+ OfflinePageModel* offline_page_model = |
+ OfflinePageModelFactory::GetForBrowserContext(browser_context); |
+ if (!offline_page_model) { |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&OnGetPageByOfflineURLDone, callback, base::nullopt)); |
+ return; |
+ } |
+ |
+ offline_page_model->GetBestPageForOnlineURL( |
+ online_url, base::Bind(&OnGetBestPageForOnlineURLDone, callback)); |
+} |
+ |
+// static |
+GURL OfflinePageUtils::MaybeGetOnlineURLForOfflineURL( |
content::BrowserContext* browser_context, |
const GURL& offline_url) { |
const OfflinePageItem* offline_page = |
@@ -94,6 +134,24 @@ GURL OfflinePageUtils::GetOnlineURLForOfflineURL( |
} |
// static |
+void OfflinePageUtils::GetOnlineURLForOfflineURL( |
+ content::BrowserContext* browser_context, |
+ const GURL& offline_url, |
+ const base::Callback<void(const GURL&)>& callback) { |
+ OfflinePageModel* offline_page_model = |
+ OfflinePageModelFactory::GetForBrowserContext(browser_context); |
+ if (!offline_page_model) { |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&OnGetPageByOfflineURLDone, callback, base::nullopt)); |
+ return; |
+ } |
+ |
+ offline_page_model->GetPageByOfflineURL( |
+ offline_url, base::Bind(&OnGetPageByOfflineURLDone, callback)); |
+} |
+ |
+// static |
bool OfflinePageUtils::IsOfflinePage(content::BrowserContext* browser_context, |
const GURL& offline_url) { |
return GetOfflinePageForOfflineURL(browser_context, offline_url) != nullptr; |