Chromium Code Reviews| 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 887a2eaf08afa4a10d6072523b0f83da40f61187..aa08da4ecdbc5169eb7867496c3453ca09e08e26 100644 |
| --- a/chrome/browser/android/offline_pages/offline_page_utils.cc |
| +++ b/chrome/browser/android/offline_pages/offline_page_utils.cc |
| @@ -30,37 +30,54 @@ |
| namespace offline_pages { |
| namespace { |
| -void OnGetPagesByOnlineURLDone( |
| +void OnGetPagesByURLDone( |
| + const GURL& url, |
| + bool search_by_final_url_only, |
| int tab_id, |
| const std::vector<std::string>& namespaces_to_show_in_original_tab, |
| const base::Callback<void(const OfflinePageItem*)>& callback, |
| const MultipleOfflinePageItemResult& pages) { |
| - const OfflinePageItem* selected_page = nullptr; |
| + const OfflinePageItem* selected_page_for_final_url = nullptr; |
| + const OfflinePageItem* selected_page_for_original_url = nullptr; |
| std::string tab_id_str = base::IntToString(tab_id); |
| - for (const auto& offline_page : pages) { |
| + for (const auto& page : pages) { |
| auto result = std::find(namespaces_to_show_in_original_tab.begin(), |
| namespaces_to_show_in_original_tab.end(), |
| - offline_page.client_id.name_space); |
| + page.client_id.name_space); |
| if (result != namespaces_to_show_in_original_tab.end() && |
| - offline_page.client_id.id != tab_id_str) { |
| + page.client_id.id != tab_id_str) { |
| continue; |
| } |
| - if (!selected_page || |
| - offline_page.creation_time > selected_page->creation_time) { |
| - selected_page = &offline_page; |
| + if (OfflinePageUtils::EqualsIgnoringFragment(url, page.url)) { |
| + if (!selected_page_for_final_url || |
| + page.creation_time > selected_page_for_final_url->creation_time) { |
| + selected_page_for_final_url = &page; |
| + } |
| + } else { |
| + DCHECK(!search_by_final_url_only); |
| + DCHECK(url == page.original_url); |
|
fgorski
2016/11/16 23:43:46
what about the fragment here?
Why is there no symm
jianli
2016/11/17 01:12:14
With more thought, I decided to change to do match
|
| + if (!selected_page_for_original_url || |
| + page.creation_time > selected_page_for_original_url->creation_time) { |
| + selected_page_for_original_url = &page; |
| + } |
| } |
| } |
| - callback.Run(selected_page); |
| + |
| + // Match for final URL should take high priority than matching for original |
| + // URL. |
| + callback.Run(selected_page_for_final_url ? selected_page_for_final_url |
| + : selected_page_for_original_url); |
| } |
| } // namespace |
| // static |
| -void OfflinePageUtils::SelectPageForOnlineURL( |
| +void OfflinePageUtils::SelectPageForURL( |
| content::BrowserContext* browser_context, |
| - const GURL& online_url, |
| + const GURL& url, |
| + bool search_by_final_url_only, |
| int tab_id, |
| const base::Callback<void(const OfflinePageItem*)>& callback) { |
| OfflinePageModel* offline_page_model = |
| @@ -71,11 +88,13 @@ void OfflinePageUtils::SelectPageForOnlineURL( |
| return; |
| } |
| - offline_page_model->GetPagesByOnlineURL( |
| - online_url, base::Bind(&OnGetPagesByOnlineURLDone, tab_id, |
| - offline_page_model->GetPolicyController() |
| - ->GetNamespacesRestrictedToOriginalTab(), |
| - callback)); |
| + offline_page_model->GetPagesByURL( |
| + url, |
| + search_by_final_url_only, |
| + base::Bind(&OnGetPagesByURLDone, url, search_by_final_url_only, tab_id, |
| + offline_page_model->GetPolicyController() |
| + ->GetNamespacesRestrictedToOriginalTab(), |
| + callback)); |
| } |
| const OfflinePageItem* OfflinePageUtils::GetOfflinePageFromWebContents( |
| @@ -147,8 +166,10 @@ void OfflinePageUtils::CheckExistenceOfPagesWithURL( |
| callback.Run(false); |
| }; |
| - offline_page_model->GetPagesByOnlineURL( |
| - offline_page_url, base::Bind(continuation, name_space, callback)); |
| + offline_page_model->GetPagesByURL( |
| + offline_page_url, |
| + true /* search_by_final_url_only */, |
| + base::Bind(continuation, name_space, callback)); |
| } |
| // static |