Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Unified Diff: chrome/browser/android/offline_pages/offline_page_request_job.cc

Issue 2503853004: Support getting offline pages also by original URL (Closed)
Patch Set: Make NTP redirect work per comment Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/android/offline_pages/offline_page_request_job.cc
diff --git a/chrome/browser/android/offline_pages/offline_page_request_job.cc b/chrome/browser/android/offline_pages/offline_page_request_job.cc
index 1f207c96b1cf8e29f83ad50ec16537319786b3f6..545721dceda786a4a5790b3b99e9a9d109cc78f6 100644
--- a/chrome/browser/android/offline_pages/offline_page_request_job.cc
+++ b/chrome/browser/android/offline_pages/offline_page_request_job.cc
@@ -218,6 +218,15 @@ void NotifyOfflineFilePathOnIO(base::WeakPtr<OfflinePageRequestJob> job,
job->OnOfflineFilePathAvailable(offline_file_path);
}
+void NotifyOfflineRedirectOnIO(base::WeakPtr<OfflinePageRequestJob> job,
+ const GURL& redirected_url) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ if (!job)
+ return;
+ job->OnOfflineRedirectAvailabe(redirected_url);
+}
+
// Notifies OfflinePageRequestJob about the offline file path. Note that the
// file path may be empty if not found or on error.
void NotifyOfflineFilePathOnUI(base::WeakPtr<OfflinePageRequestJob> job,
@@ -232,6 +241,21 @@ void NotifyOfflineFilePathOnUI(base::WeakPtr<OfflinePageRequestJob> job,
base::Bind(&NotifyOfflineFilePathOnIO, job, offline_file_path));
}
+// Notifies OfflinePageRequestJob about the redirected URL. Note that
+// redirected_url should not be empty.
+void NotifyOfflineRedirectOnUI(base::WeakPtr<OfflinePageRequestJob> job,
+ const GURL& redirected_url) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ DCHECK(!redirected_url.is_empty());
+
+ // Delegates to IO thread since OfflinePageRequestJob should only be accessed
+ // from IO thread.
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&NotifyOfflineRedirectOnIO, job, redirected_url));
+}
+
// Finds the offline file path based on the select page result and network
// state and marks it as accessed.
RequestResult AccessOfflineFile(
@@ -286,6 +310,7 @@ RequestResult AccessOfflineFile(
// Handles the result of finding an offline page.
void SucceededToFindOfflinePage(
+ const GURL& url,
const OfflinePageHeader& offline_header,
NetworkState network_state,
base::WeakPtr<OfflinePageRequestJob> job,
@@ -293,6 +318,12 @@ void SucceededToFindOfflinePage(
const OfflinePageItem* offline_page) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ // If the match is for original URL, trigger the redirect.
+ if (offline_page && url == offline_page->original_url) {
+ NotifyOfflineRedirectOnUI(job, offline_page->url);
+ return;
+ }
+
base::FilePath offline_file_path;
RequestResult request_result = AccessOfflineFile(
offline_header, network_state, job, web_contents_getter, offline_page,
@@ -315,9 +346,9 @@ void FailedToFindOfflinePage(base::WeakPtr<OfflinePageRequestJob> job) {
NotifyOfflineFilePathOnUI(job, empty_file_path);
}
-// Tries to find the offline page to serve for |online_url|.
-void SelectPageForOnlineURL(
- const GURL& online_url,
+// Tries to find the offline page to serve for |url|.
+void SelectPageForURL(
+ const GURL& url,
const OfflinePageHeader& offline_header,
NetworkState network_state,
content::ResourceRequestInfo::WebContentsGetter web_contents_getter,
@@ -338,11 +369,13 @@ void SelectPageForOnlineURL(
return;
}
- OfflinePageUtils::SelectPageForOnlineURL(
+ OfflinePageUtils::SelectPageForURL(
web_contents->GetBrowserContext(),
- online_url,
+ url,
+ OfflinePageModel::URLSearchMode::SEARCH_BY_ALL_URLS,
tab_id,
base::Bind(&SucceededToFindOfflinePage,
+ url,
offline_header,
network_state,
job,
@@ -350,7 +383,7 @@ void SelectPageForOnlineURL(
}
void FindPageWithOfflineIDDone(
- const GURL& online_url,
+ const GURL& url,
const OfflinePageHeader& offline_header,
NetworkState network_state,
content::ResourceRequestInfo::WebContentsGetter web_contents_getter,
@@ -361,20 +394,21 @@ void FindPageWithOfflineIDDone(
// If the found offline page does not has same URL as the request URL, fall
// back to find the offline page based on the URL.
- if (!offline_page || offline_page->url != online_url) {
- SelectPageForOnlineURL(
- online_url, offline_header, network_state, web_contents_getter,
+ if (!offline_page || offline_page->url != url) {
+ SelectPageForURL(
+ url, offline_header, network_state, web_contents_getter,
tab_id_getter, job);
return;
}
SucceededToFindOfflinePage(
- offline_header, network_state, job, web_contents_getter, offline_page);
+ url, offline_header, network_state, job, web_contents_getter,
+ offline_page);
}
// Tries to find an offline page associated with |offline_id|.
void FindPageWithOfflineID(
- const GURL& online_url,
+ const GURL& url,
const OfflinePageHeader& offline_header,
int64_t offline_id,
NetworkState network_state,
@@ -393,7 +427,7 @@ void FindPageWithOfflineID(
offline_page_model->GetPageByOfflineId(
offline_id,
base::Bind(&FindPageWithOfflineIDDone,
- online_url,
+ url,
offline_header,
network_state,
web_contents_getter,
@@ -401,9 +435,9 @@ void FindPageWithOfflineID(
job));
}
-// Tries to find the offline page to serve for |online_url|.
+// Tries to find the offline page to serve for |url|.
void SelectPage(
- const GURL& online_url,
+ const GURL& url,
const OfflinePageHeader& offline_header,
NetworkState network_state,
content::ResourceRequestInfo::WebContentsGetter web_contents_getter,
@@ -415,18 +449,18 @@ void SelectPage(
// particular version.
if (!offline_header.id.empty()) {
// if the id string cannot be converted to int64 id, fall through to
- // select page via online URL.
+ // select page via URL.
int64_t offline_id;
if (base::StringToInt64(offline_header.id, &offline_id)) {
- FindPageWithOfflineID(online_url, offline_header, offline_id,
+ FindPageWithOfflineID(url, offline_header, offline_id,
network_state, web_contents_getter, tab_id_getter,
job);
return;
}
}
- SelectPageForOnlineURL(online_url, offline_header, network_state,
- web_contents_getter, tab_id_getter, job);
+ SelectPageForURL(url, offline_header, network_state, web_contents_getter,
+ tab_id_getter, job);
}
} // namespace
@@ -556,6 +590,12 @@ void OfflinePageRequestJob::OnOfflineFilePathAvailable(
URLRequestFileJob::Start();
}
+void OfflinePageRequestJob::OnOfflineRedirectAvailabe(
+ const GURL& redirected_url) {
+ // TODO(jianli): kicks off the redirect. For now, use the default.
+ FallbackToDefault();
+}
+
void OfflinePageRequestJob::SetDelegateForTesting(
std::unique_ptr<Delegate> delegate) {
delegate_ = std::move(delegate);

Powered by Google App Engine
This is Rietveld 408576698