Bladeren bron

Updated OpenSearch patch to include fix for upstream bug

Fixes upstream issue with recently-added search engines not showing up
csagan5 3 jaren geleden
bovenliggende
commit
b4095e087a
1 gewijzigde bestanden met toevoegingen van 88 en 13 verwijderingen
  1. 88 13
      build/patches/OpenSearch-allow-paths-and-incognito-mode.patch

+ 88 - 13
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<network::mojom::URLLoaderFactory> 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<chrome::mojom::OpenSearchDescriptionDocumentHandler>
+         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<RequestDelegate>(
+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