From b4095e087a3aad4e1e6c4d3a890873b1cdd5fed1 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Mon, 11 Apr 2022 16:31:51 +0200 Subject: [PATCH] Updated OpenSearch patch to include fix for upstream bug Fixes upstream issue with recently-added search engines not showing up --- ...earch-allow-paths-and-incognito-mode.patch | 101 +++++++++++++++--- 1 file changed, 88 insertions(+), 13 deletions(-) diff --git a/build/patches/OpenSearch-allow-paths-and-incognito-mode.patch b/build/patches/OpenSearch-allow-paths-and-incognito-mode.patch index 370335ac..83d0374f 100644 --- a/build/patches/OpenSearch-allow-paths-and-incognito-mode.patch +++ b/build/patches/OpenSearch-allow-paths-and-incognito-mode.patch @@ -2,13 +2,33 @@ From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 6 Mar 2022 18:55:58 +0100 Subject: OpenSearch: allow paths and incognito mode +Fix bug with recently added engines prematurely discarded +because they have no last-visit timestamp Allow adding search engines in incognito mode Allow using search engine URLs with non-empty paths -Add debug logging +Add verbose logging --- - .../search_engine_tab_helper.cc | 37 +++++++++++++------ - 1 file changed, 26 insertions(+), 11 deletions(-) + .../settings/SearchEngineAdapter.java | 4 ++- + .../search_engine_tab_helper.cc | 34 +++++++++++++------ + .../renderer/chrome_render_frame_observer.cc | 2 ++ + .../search_engines/template_url_fetcher.cc | 19 ++++++++--- + .../search_engines/template_url_service.cc | 1 - + 5 files changed, 44 insertions(+), 16 deletions(-) +diff --git a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java b/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java +--- a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java ++++ b/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java +@@ -247,7 +247,9 @@ public class SearchEngineAdapter extends BaseAdapter + continue; + } + if (recentEngineNum < MAX_RECENT_ENGINE_NUM +- && templateUrl.getLastVisitedTime() > displayTime) { ++ // just-added search engines have never been visited ++ && (templateUrl.getLastVisitedTime() == 0 || ++ templateUrl.getLastVisitedTime() > displayTime)) { + recentEngineNum++; + } else { + iterator.remove(); diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chrome/browser/ui/search_engines/search_engine_tab_helper.cc --- a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc +++ b/chrome/browser/ui/search_engines/search_engine_tab_helper.cc @@ -90,7 +110,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro // If the current page is a form submit, find the last page that was not a // form submit and use its url to generate the keyword from. -@@ -141,14 +152,17 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( +@@ -141,8 +152,10 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( (index > 0) && IsFormSubmit(entry); entry = controller.GetEntryAtIndex(index)) --index; @@ -102,15 +122,7 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro // Autogenerate a keyword for the autodetected case; in the other cases we'll // generate a keyword later after fetching the OSDD. - std::u16string keyword = GenerateKeywordFromNavigationEntry(entry); -- if (keyword.empty()) -+ if (keyword.empty()) { - return; -+ } - - auto* frame = web_contents()->GetMainFrame(); - mojo::Remote url_loader_factory; -@@ -157,6 +171,7 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( +@@ -157,6 +170,7 @@ void SearchEngineTabHelper::PageHasOpenSearchDescriptionDocument( // Download the OpenSearch description document. If this is successful, a // new keyword will be created when done. @@ -118,5 +130,68 @@ diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper.cc b/chro TemplateURLFetcherFactory::GetForProfile(profile)->ScheduleDownload( keyword, osdd_url, entry->GetFavicon().url, frame->GetLastCommittedOrigin(), url_loader_factory.get(), +diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc +--- a/chrome/renderer/chrome_render_frame_observer.cc ++++ b/chrome/renderer/chrome_render_frame_observer.cc +@@ -13,6 +13,7 @@ + + #include "base/bind.h" + #include "base/command_line.h" ++#include "base/logging.h" + #include "base/metrics/histogram_macros.h" + #include "base/no_destructor.h" + #include "base/strings/string_number_conversions.h" +@@ -202,6 +203,7 @@ void ChromeRenderFrameObserver::DidFinishLoad() { + + GURL osdd_url = frame->GetDocument().OpenSearchDescriptionURL(); + if (!osdd_url.is_empty()) { ++ LOG(INFO) << "OpenSearch: found OSDD URL: " << osdd_url; + mojo::AssociatedRemote + osdd_handler; + render_frame()->GetRemoteAssociatedInterfaces()->GetInterface( +diff --git a/components/search_engines/template_url_fetcher.cc b/components/search_engines/template_url_fetcher.cc +--- a/components/search_engines/template_url_fetcher.cc ++++ b/components/search_engines/template_url_fetcher.cc +@@ -260,14 +260,25 @@ void TemplateURLFetcher::ScheduleDownload( + + const TemplateURL* template_url = + template_url_service_->GetTemplateURLForKeyword(keyword); +- if (template_url && (!template_url->safe_for_autoreplace() || +- template_url->originating_url() == osdd_url)) +- return; ++ if (template_url) { ++ if (!template_url->safe_for_autoreplace()) { ++ LOG(INFO) << "OpenSearch: OSDD URL not safe for autoreplace: " << osdd_url; ++ return; ++ } ++ if (template_url->originating_url() == osdd_url) { ++ // Either there is a user created TemplateURL for this keyword, or the ++ // keyword has the same OSDD url and we've parsed it. ++ LOG(INFO) << "OpenSearch: OSDD URL was already parsed: " << osdd_url; ++ return; ++ } ++ } + + // Make sure we aren't already downloading this request. + for (const auto& request : requests_) { +- if ((request->url() == osdd_url) || (request->keyword() == keyword)) ++ if ((request->url() == osdd_url) || (request->keyword() == keyword)) { ++ LOG(INFO) << "OpenSearch: already downloading OSDD URL: " << osdd_url; + return; ++ } + } + + requests_.push_back(std::make_unique( +diff --git a/components/search_engines/template_url_service.cc b/components/search_engines/template_url_service.cc +--- a/components/search_engines/template_url_service.cc ++++ b/components/search_engines/template_url_service.cc +@@ -462,7 +462,6 @@ TemplateURL* TemplateURLService::Add( + (!FindTemplateURLForExtension(template_url->extension_info_->extension_id, + template_url->type()) && + template_url->id() == kInvalidTemplateURLID)); +- + return Add(std::move(template_url), true); + } + -- 2.25.1