Updated OpenSearch patch to include fix for upstream bug

Fixes upstream issue with recently-added search engines not showing up
This commit is contained in:
csagan5 2022-04-11 16:31:51 +02:00 committed by Yifeng Wu
parent cae6bd9dc0
commit af7e6222a1

View file

@ -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