diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-11-18 16:35:47 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-11-18 15:45:54 +0000 |
commit | 32f5a1c56531e4210bc4cf8d8c7825d66e081888 (patch) | |
tree | eeeec6822f4d738d8454525233fd0e2e3a659e6d /chromium/components/search_engines | |
parent | 99677208ff3b216fdfec551fbe548da5520cd6fb (diff) | |
download | qtwebengine-chromium-32f5a1c56531e4210bc4cf8d8c7825d66e081888.tar.gz |
BASELINE: Update Chromium to 87.0.4280.67
Change-Id: Ib157360be8c2ffb2c73125751a89f60e049c1d54
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/search_engines')
12 files changed, 138 insertions, 568 deletions
diff --git a/chromium/components/search_engines/BUILD.gn b/chromium/components/search_engines/BUILD.gn index aa65c005837..eb66a2d9456 100644 --- a/chromium/components/search_engines/BUILD.gn +++ b/chromium/components/search_engines/BUILD.gn @@ -50,7 +50,9 @@ static_library("search_engines") { ] public_deps = [ + ":prepopulated_engines", ":search_engine_type", + ":search_engine_utils", "//base", "//components/google/core/common", "//components/keyed_service/core", @@ -61,7 +63,6 @@ static_library("search_engines") { ] deps = [ - ":prepopulated_engines", "//base:i18n", "//components/country_codes", "//components/database_utils", @@ -100,6 +101,28 @@ static_library("search_engines") { } } +source_set("search_engine_utils") { + sources = [ + "search_engine_utils.cc", + "search_engine_utils.h", + ] + + public_deps = [ + ":prepopulated_engines", + ":search_engine_type", + "//components/google/core/common", + ] + + deps = [ "//url" ] + + if (is_android) { + deps += [ + "//components/search_engines/android:jni_headers", + "//url:gurl_android", + ] + } +} + source_set("search_engine_type") { sources = [ "search_engine_type.h" ] } diff --git a/chromium/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java b/chromium/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java deleted file mode 100644 index 83ffb83ca48..00000000000 --- a/chromium/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrl.java +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -package org.chromium.components.search_engines; - -import org.chromium.base.annotations.CalledByNative; -import org.chromium.base.annotations.NativeMethods; - -import java.util.Locale; - -/** - * Represents object of a search engine. It only caches the native pointer of TemplateURL object - * from native side. Any class uses this need to register a {@link TemplateUrlServiceObserver} on - * {@link TemplatUrlService} to listen the native changes in case the native pointer is destroyed. - */ -public class TemplateUrl { - private final long mTemplateUrlPtr; - - @CalledByNative - private static TemplateUrl create(long templateUrlPtr) { - return new TemplateUrl(templateUrlPtr); - } - - protected TemplateUrl(long templateUrlPtr) { - mTemplateUrlPtr = templateUrlPtr; - } - - /** - * @return The name of the search engine. - */ - public String getShortName() { - return TemplateUrlJni.get().getShortName(mTemplateUrlPtr); - } - - /** - * @return The prepopulated id of the search engine. For predefined engines, this field is a - * non-zero, for custom search engines, it will return 0. - */ - public int getPrepopulatedId() { - return TemplateUrlJni.get().getPrepopulatedId(mTemplateUrlPtr); - } - - /** - * @return Whether a search engine is prepopulated or created by policy. - */ - public boolean getIsPrepopulated() { - return TemplateUrlJni.get().isPrepopulatedOrCreatedByPolicy(mTemplateUrlPtr); - } - - /** - * @return The keyword of the search engine. - */ - public String getKeyword() { - return TemplateUrlJni.get().getKeyword(mTemplateUrlPtr); - } - - /** - * @return The last time used this search engine. If a search engine hasn't been used, it will - * return 0. - */ - public long getLastVisitedTime() { - return TemplateUrlJni.get().getLastVisitedTime(mTemplateUrlPtr); - } - - /** - * @return The template URL of the search engine. The format can be looked up in - * prepopulated_engines.json. - */ - public String getURL() { - return TemplateUrlJni.get().getURL(mTemplateUrlPtr); - } - - @Override - public boolean equals(Object other) { - if (!(other instanceof TemplateUrl)) return false; - TemplateUrl otherTemplateUrl = (TemplateUrl) other; - return mTemplateUrlPtr == otherTemplateUrl.mTemplateUrlPtr; - } - - @Override - public String toString() { - return String.format(Locale.US, - "TemplateURL -- keyword: %s, short name: %s, " - + "prepopulated: %b", - getKeyword(), getShortName(), getIsPrepopulated()); - } - - @NativeMethods - public interface Natives { - String getShortName(long templateUrlPtr); - String getKeyword(long templateUrlPtr); - boolean isPrepopulatedOrCreatedByPolicy(long templateUrlPtr); - long getLastVisitedTime(long templateUrlPtr); - int getPrepopulatedId(long templateUrlPtr); - String getURL(long templateUrlPtr); - } -} diff --git a/chromium/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrlService.java b/chromium/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrlService.java deleted file mode 100644 index 9c672597714..00000000000 --- a/chromium/components/search_engines/android/java/src/org/chromium/components/search_engines/TemplateUrlService.java +++ /dev/null @@ -1,405 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.components.search_engines; - -import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; - -import org.chromium.base.ObserverList; -import org.chromium.base.ThreadUtils; -import org.chromium.base.annotations.CalledByNative; -import org.chromium.base.annotations.NativeMethods; -import org.chromium.base.task.PostTask; -import org.chromium.content_public.browser.UiThreadTaskTraits; -import org.chromium.url.GURL; - -import java.util.ArrayList; -import java.util.List; - -/** - * Android wrapper of the TemplateUrlService which provides access from the Java - * layer. - * - * Only usable from the UI thread as it's primary purpose is for supporting the Android - * preferences UI. - * - * See components/search_engines/template_url_service.h for more details. - */ -public class TemplateUrlService { - /** - * This listener will be notified when template url service is done loading. - */ - public interface LoadListener { void onTemplateUrlServiceLoaded(); } - - /** - * Observer to be notified whenever the set of TemplateURLs are modified. - */ - public interface TemplateUrlServiceObserver { - /** - * Notification that the template url model has changed in some way. - */ - void onTemplateURLServiceChanged(); - } - - private final ObserverList<LoadListener> mLoadListeners = new ObserverList<>(); - private final ObserverList<TemplateUrlServiceObserver> mObservers = new ObserverList<>(); - private long mNativeTemplateUrlServiceAndroid; - - private TemplateUrlService(long nativeTemplateUrlServiceAndroid) { - // Note that this technically leaks the native object, however, TemplateUrlService - // is a singleton that lives forever and there's no clean shutdown of Chrome on Android. - mNativeTemplateUrlServiceAndroid = nativeTemplateUrlServiceAndroid; - } - - @CalledByNative - private static TemplateUrlService create(long nativeTemplateUrlServiceAndroid) { - return new TemplateUrlService(nativeTemplateUrlServiceAndroid); - } - - @CalledByNative - private void clearNativePtr() { - mNativeTemplateUrlServiceAndroid = 0; - } - - public boolean isLoaded() { - ThreadUtils.assertOnUiThread(); - return TemplateUrlServiceJni.get().isLoaded( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this); - } - - public void load() { - ThreadUtils.assertOnUiThread(); - TemplateUrlServiceJni.get().load(mNativeTemplateUrlServiceAndroid, TemplateUrlService.this); - } - - /** - * Ensure the TemplateUrlService is loaded before running the specified action. If the service - * is already loaded, then run the action immediately. - * <p> - * Because this can introduce an arbitrary delay in the action being executed, ensure the state - * is still valid in the action before interacting with anything that might no longer be - * available (i.e. an Activity that has since been destroyed). - * - * @param action The action to be run. - */ - public void runWhenLoaded(final Runnable action) { - if (isLoaded()) { - action.run(); - } else { - registerLoadListener(new LoadListener() { - @Override - public void onTemplateUrlServiceLoaded() { - unregisterLoadListener(this); - action.run(); - } - }); - load(); - } - } - - /** - * Returns a list of the all available search engines. - */ - public List<TemplateUrl> getTemplateUrls() { - ThreadUtils.assertOnUiThread(); - List<TemplateUrl> templateUrls = new ArrayList<>(); - TemplateUrlServiceJni.get().getTemplateUrls( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this, templateUrls); - return templateUrls; - } - - /** - * Called from native to populate the list of all available search engines. - * @param templateUrls The list of {@link TemplateUrl} to be added. - * @param templateUrl The {@link TemplateUrl} would add to the list. - */ - @CalledByNative - private static void addTemplateUrlToList( - List<TemplateUrl> templateUrls, TemplateUrl templateUrl) { - templateUrls.add(templateUrl); - } - - /** - * Called from native when template URL service is done loading. - */ - @CalledByNative - private void templateUrlServiceLoaded() { - ThreadUtils.assertOnUiThread(); - for (LoadListener listener : mLoadListeners) { - listener.onTemplateUrlServiceLoaded(); - } - } - - @CalledByNative - private void onTemplateURLServiceChanged() { - for (TemplateUrlServiceObserver observer : mObservers) { - observer.onTemplateURLServiceChanged(); - } - } - - /** - * @return {@link TemplateUrl} for the default search engine. This can - * be null if DSEs are disabled entirely by administrators. - */ - public @Nullable TemplateUrl getDefaultSearchEngineTemplateUrl() { - if (!isLoaded()) return null; - return TemplateUrlServiceJni.get().getDefaultSearchEngine( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this); - } - - public void setSearchEngine(String selectedKeyword) { - ThreadUtils.assertOnUiThread(); - TemplateUrlServiceJni.get().setUserSelectedDefaultSearchProvider( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this, selectedKeyword); - } - - /** - * @return Whether the default search engine is managed and controlled by policy. If true, the - * DSE can not be modified by the user. - */ - public boolean isDefaultSearchManaged() { - return TemplateUrlServiceJni.get().isDefaultSearchManaged( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this); - } - - /** - * @return Whether or not the default search engine has search by image support. - */ - public boolean isSearchByImageAvailable() { - ThreadUtils.assertOnUiThread(); - return TemplateUrlServiceJni.get().isSearchByImageAvailable( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this); - } - - /** - * @return Whether the default configured search engine is for a Google property. - */ - public boolean isDefaultSearchEngineGoogle() { - return TemplateUrlServiceJni.get().isDefaultSearchEngineGoogle( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this); - } - - /** - * Checks whether a search result page is from a default search provider. - * @param url The url for the search result page. - * @return Whether the search result page with the given url from the default search provider. - */ - public boolean isSearchResultsPageFromDefaultSearchProvider(String url) { - ThreadUtils.assertOnUiThread(); - return TemplateUrlServiceJni.get().isSearchResultsPageFromDefaultSearchProvider( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this, url); - } - - /** - * Registers a listener for the callback that indicates that the - * TemplateURLService has loaded. - */ - public void registerLoadListener(final LoadListener listener) { - ThreadUtils.assertOnUiThread(); - boolean added = mLoadListeners.addObserver(listener); - assert added; - - // If the load has already been completed, post a load complete to the observer. Done - // as an asynchronous call to keep the client code predictable in the loaded/unloaded state. - if (isLoaded()) { - PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> { - if (!mLoadListeners.hasObserver(listener)) return; - - listener.onTemplateUrlServiceLoaded(); - }); - } - } - - /** - * Unregisters a listener for the callback that indicates that the - * TemplateURLService has loaded. - */ - public void unregisterLoadListener(LoadListener listener) { - ThreadUtils.assertOnUiThread(); - boolean removed = mLoadListeners.removeObserver(listener); - assert removed; - } - - /** - * Adds an observer to be notified on changes to the template URLs. - * @param observer The observer to be added. - */ - public void addObserver(TemplateUrlServiceObserver observer) { - mObservers.addObserver(observer); - } - - /** - * Removes an observer for changes to the template URLs. - * @param observer The observer to be removed. - */ - public void removeObserver(TemplateUrlServiceObserver observer) { - mObservers.removeObserver(observer); - } - - /** - * Finds the default search engine for the default provider and returns the url query - * {@link String} for {@code query}. - * @param query The {@link String} that represents the text query the search url should - * represent. - * @return A {@link String} that contains the url of the default search engine with - * {@code query} inserted as the search parameter. - */ - public String getUrlForSearchQuery(String query) { - return getUrlForSearchQuery(query, null); - } - - /** - * Finds the default search engine for the default provider and returns the url query - * {@link String} for {@code query}. - * @param query The {@link String} that represents the text query the search url should - * represent. - * @param searchParams A list of search params to be appended to the query. - * @return A {@link String} that contains the url of the default search engine with - * {@code query} inserted as the search parameter. - */ - public String getUrlForSearchQuery(String query, List<String> searchParams) { - return TemplateUrlServiceJni.get().getUrlForSearchQuery(mNativeTemplateUrlServiceAndroid, - TemplateUrlService.this, query, - searchParams == null ? null : searchParams.toArray(new String[0])); - } - - /** - * See {@link #getSearchQueryForUrl(GURL)}. - * - * @deprecated Please use {@link #getSearchQueryForUrl(GURL)} instead. - */ - @Deprecated - public String getSearchQueryForUrl(String url) { - return getSearchQueryForUrl(new GURL(url)); - } - - /** - * Finds the query in the url, if any. Returns empty if no query is present. - */ - public String getSearchQueryForUrl(GURL url) { - return TemplateUrlServiceJni.get().getSearchQueryForUrl( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this, url); - } - - /** - * Finds the default search engine for the default provider and returns the url query - * {@link String} for {@code query} with voice input source param set. - * @param query The {@link String} that represents the text query the search url should - * represent. - * @return A {@link String} that contains the url of the default search engine with - * {@code query} inserted as the search parameter and voice input source param set. - */ - public GURL getUrlForVoiceSearchQuery(String query) { - return TemplateUrlServiceJni.get().getUrlForVoiceSearchQuery( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this, query); - } - - /** - * Finds the default search engine for the default provider and returns the url query - * {@link String} for {@code query} with the contextual search version param set. - * @param query The search term to use as the main query in the returned search url. - * @param alternateTerm The alternate search term to use as an alternate suggestion. - * @param shouldPrefetch Whether the returned url should include a prefetch parameter. - * @param protocolVersion The version of the Contextual Search API protocol to use. - * @return A {@link String} that contains the url of the default search engine with - * {@code query} and {@code alternateTerm} inserted as parameters and contextual - * search and prefetch parameters conditionally set. - */ - public GURL getUrlForContextualSearchQuery( - String query, String alternateTerm, boolean shouldPrefetch, String protocolVersion) { - return TemplateUrlServiceJni.get().getUrlForContextualSearchQuery( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this, query, alternateTerm, - shouldPrefetch, protocolVersion); - } - - /** - * Finds the URL for the search engine for the given keyword. - * @param keyword The templateUrl keyword to look up. - * @return A {@link String} that contains the url of the specified search engine. - */ - public String getSearchEngineUrlFromTemplateUrl(String keyword) { - return TemplateUrlServiceJni.get().getSearchEngineUrlFromTemplateUrl( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this, keyword); - } - - /** - * Finds the search engine type for the given keyword. - * @param keyword The templateUrl keyword to look up. - * @return The search engine type of the specified search engine that contains the keyword. - */ - public int getSearchEngineTypeFromTemplateUrl(String keyword) { - return TemplateUrlServiceJni.get().getSearchEngineTypeFromTemplateUrl( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this, keyword); - } - - /** - * Adds a search engine, set by Play API. - * @param name The name of the search engine to be added. - * @param keyword The keyword of the search engine to be added. - * @param searchUrl Search url of the search engine to be added. - * @param suggestUrl Url for retrieving search suggestions. - * @param faviconUrl Favicon url of the search engine to be added. - * @param setAsDefault If true, set as default search provider. - * @return True if search engine was successfully added, false if search engine from Play API - * with such keyword already existed (e.g. from previous attempt to set search engine). - */ - public boolean setPlayAPISearchEngine(String name, String keyword, String searchUrl, - String suggestUrl, String faviconUrl, boolean setAsDefault) { - return TemplateUrlServiceJni.get().setPlayAPISearchEngine(mNativeTemplateUrlServiceAndroid, - TemplateUrlService.this, name, keyword, searchUrl, suggestUrl, faviconUrl, - setAsDefault); - } - // TODO(crbug/1002271): This API is called from clank repo. Helper function below will be - // removed once clank repo is updated. - public boolean setPlayAPISearchEngine( - String name, String keyword, String searchUrl, String suggestUrl, String faviconUrl) { - return TemplateUrlServiceJni.get().setPlayAPISearchEngine(mNativeTemplateUrlServiceAndroid, - TemplateUrlService.this, name, keyword, searchUrl, suggestUrl, faviconUrl, true); - } - - @VisibleForTesting - public String addSearchEngineForTesting(String keyword, int ageInDays) { - return TemplateUrlServiceJni.get().addSearchEngineForTesting( - mNativeTemplateUrlServiceAndroid, TemplateUrlService.this, keyword, ageInDays); - } - - @NativeMethods - interface Natives { - void load(long nativeTemplateUrlServiceAndroid, TemplateUrlService caller); - boolean isLoaded(long nativeTemplateUrlServiceAndroid, TemplateUrlService caller); - void setUserSelectedDefaultSearchProvider(long nativeTemplateUrlServiceAndroid, - TemplateUrlService caller, String selectedKeyword); - boolean isDefaultSearchManaged( - long nativeTemplateUrlServiceAndroid, TemplateUrlService caller); - boolean isSearchResultsPageFromDefaultSearchProvider( - long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, String url); - boolean isSearchByImageAvailable( - long nativeTemplateUrlServiceAndroid, TemplateUrlService caller); - boolean isDefaultSearchEngineGoogle( - long nativeTemplateUrlServiceAndroid, TemplateUrlService caller); - String getUrlForSearchQuery(long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, - String query, String[] searchParams); - String getSearchQueryForUrl( - long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, GURL url); - GURL getUrlForVoiceSearchQuery( - long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, String query); - GURL getUrlForContextualSearchQuery(long nativeTemplateUrlServiceAndroid, - TemplateUrlService caller, String query, String alternateTerm, - boolean shouldPrefetch, String protocolVersion); - String getSearchEngineUrlFromTemplateUrl( - long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, String keyword); - int getSearchEngineTypeFromTemplateUrl( - long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, String keyword); - String addSearchEngineForTesting(long nativeTemplateUrlServiceAndroid, - TemplateUrlService caller, String keyword, int offset); - boolean setPlayAPISearchEngine(long nativeTemplateUrlServiceAndroid, - TemplateUrlService caller, String name, String keyword, String searchUrl, - String suggestUrl, String faviconUrl, boolean setAsDefault); - void getTemplateUrls(long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, - List<TemplateUrl> templateUrls); - TemplateUrl getDefaultSearchEngine( - long nativeTemplateUrlServiceAndroid, TemplateUrlService caller); - } -} diff --git a/chromium/components/search_engines/android/template_url_service_android.cc b/chromium/components/search_engines/android/template_url_service_android.cc index 3f986b9404a..ab52b89d5eb 100644 --- a/chromium/components/search_engines/android/template_url_service_android.cc +++ b/chromium/components/search_engines/android/template_url_service_android.cc @@ -112,10 +112,10 @@ jboolean TemplateUrlServiceAndroid::IsSearchResultsPageFromDefaultSearchProvider( JNIEnv* env, const base::android::JavaParamRef<jobject>& obj, - const base::android::JavaParamRef<jstring>& jurl) { - GURL url(base::android::ConvertJavaStringToUTF8(env, jurl)); + const base::android::JavaParamRef<jobject>& jurl) { + std::unique_ptr<GURL> url = url::GURLAndroid::ToNativeGURL(env, jurl); return template_url_service_->IsSearchResultsPageFromDefaultSearchProvider( - url); + *url); } void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { diff --git a/chromium/components/search_engines/android/template_url_service_android.h b/chromium/components/search_engines/android/template_url_service_android.h index fe1ac78158b..715bbeb2bba 100644 --- a/chromium/components/search_engines/android/template_url_service_android.h +++ b/chromium/components/search_engines/android/template_url_service_android.h @@ -40,7 +40,7 @@ class TemplateUrlServiceAndroid : public TemplateURLServiceObserver { jboolean IsSearchResultsPageFromDefaultSearchProvider( JNIEnv* env, const base::android::JavaParamRef<jobject>& obj, - const base::android::JavaParamRef<jstring>& jurl); + const base::android::JavaParamRef<jobject>& jurl); base::android::ScopedJavaLocalRef<jstring> GetUrlForSearchQuery( JNIEnv* env, const base::android::JavaParamRef<jobject>& obj, diff --git a/chromium/components/search_engines/prepopulated_engines.json b/chromium/components/search_engines/prepopulated_engines.json index bc5fb3f15a9..cb4bc61f0c6 100644 --- a/chromium/components/search_engines/prepopulated_engines.json +++ b/chromium/components/search_engines/prepopulated_engines.json @@ -28,7 +28,7 @@ // Increment this if you change the data in ways that mean users with // existing data should get a new version. Otherwise, existing data may // continue to be used and updates made here will not always appear. - "kCurrentDataVersion": 121 + "kCurrentDataVersion": 123 }, // The following engines are included in country lists and are added to the @@ -538,7 +538,7 @@ "favicon_url": "https://yastatic.net/lego/_/pDu9OWAQKB0s2J9IojKpiS_Eho.ico", "logo_url": "https://storage.ape.yandex.net/get/browser/Doodles/yandex/drawable-xxhdpi/yandex.png", "search_url": "https://yandex.by/{yandex:searchPath}?text={searchTerms}", - "suggest_url": "https://suggest.yandex.by/suggest-ff.cgi?part={searchTerms}", + "suggest_url": "https://suggest.yandex.by/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}", "image_url": "https://yandex.by/images/search/?rpt=imageview", "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", "new_tab_url": "https://www.yandex.by/chrome/newtab", @@ -551,7 +551,7 @@ "keyword": "yandex.com", "favicon_url": "https://yastatic.net/lego/_/rBTjd6UOPk5913OSn5ZQVYMTQWQ.ico", "search_url": "https://yandex.com/search/?text={searchTerms}&from=os&clid=1836588", - "suggest_url": "https://suggest.yandex.com/suggest-ff.cgi?part={searchTerms}&uil=en&v=3&sn=5", + "suggest_url": "https://suggest.yandex.com/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}&uil=en&v=3&sn=5", "image_url": "https://yandex.com/images/search?rpt=imageview", "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", "type": "SEARCH_ENGINE_YANDEX", @@ -564,7 +564,7 @@ "favicon_url": "https://yastatic.net/lego/_/pDu9OWAQKB0s2J9IojKpiS_Eho.ico", "logo_url": "https://storage.ape.yandex.net/get/browser/Doodles/yandex/drawable-xxhdpi/yandex.png", "search_url": "https://yandex.kz/{yandex:searchPath}?text={searchTerms}", - "suggest_url": "https://suggest.yandex.kz/suggest-ff.cgi?part={searchTerms}", + "suggest_url": "https://suggest.yandex.kz/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}", "image_url": "https://yandex.kz/images/search/?rpt=imageview", "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", "new_tab_url": "https://www.yandex.kz/chrome/newtab", @@ -578,7 +578,7 @@ "favicon_url": "https://yastatic.net/lego/_/pDu9OWAQKB0s2J9IojKpiS_Eho.ico", "logo_url": "https://storage.ape.yandex.net/get/browser/Doodles/yandex/drawable-xxhdpi/yandex.png", "search_url": "https://yandex.ru/{yandex:searchPath}?text={searchTerms}&{yandex:referralID}", - "suggest_url": "https://suggest.yandex.ru/suggest-ff.cgi?part={searchTerms}", + "suggest_url": "https://suggest.yandex.ru/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}", "image_url": "https://yandex.ru/images/search/?rpt=imageview", "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", "new_tab_url": "https://www.yandex.ru/chrome/newtab", @@ -591,7 +591,7 @@ "keyword": "yandex.com.tr", "favicon_url": "https://yastatic.net/lego/_/rBTjd6UOPk5913OSn5ZQVYMTQWQ.ico", "search_url": "https://www.yandex.com.tr/{yandex:searchPath}?text={searchTerms}", - "suggest_url": "https://suggest.yandex.com.tr/suggest-ff.cgi?part={searchTerms}", + "suggest_url": "https://suggest.yandex.com.tr/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}", "image_url": "https://yandex.com.tr/gorsel/search?rpt=imageview", "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", "new_tab_url": "https://www.yandex.com.tr/chrome/newtab", @@ -605,7 +605,7 @@ "favicon_url": "https://yastatic.net/lego/_/pDu9OWAQKB0s2J9IojKpiS_Eho.ico", "logo_url": "https://storage.ape.yandex.net/get/browser/Doodles/yandex/drawable-xxhdpi/yandex.png", "search_url": "https://yandex.ua/{yandex:searchPath}?text={searchTerms}", - "suggest_url": "https://suggest.yandex.ua/suggest-ff.cgi?part={searchTerms}", + "suggest_url": "https://suggest.yandex.ua/suggest-ff.cgi?part={searchTerms}&{google:cursorPosition}", "image_url": "https://yandex.ua/images/search/?rpt=imageview", "image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1", "new_tab_url": "https://www.yandex.ua/chrome/newtab", diff --git a/chromium/components/search_engines/search_engine_utils.cc b/chromium/components/search_engines/search_engine_utils.cc new file mode 100644 index 00000000000..ecbd15614ef --- /dev/null +++ b/chromium/components/search_engines/search_engine_utils.cc @@ -0,0 +1,60 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/search_engines/search_engine_utils.h" + +#include "components/google/core/common/google_util.h" +#include "components/search_engines/prepopulated_engines.h" +#include "net/base/registry_controlled_domains/registry_controlled_domain.h" +#include "url/gurl.h" + +namespace SearchEngineUtils { + +namespace { + +bool SameDomain(const GURL& given_url, const GURL& prepopulated_url) { + return prepopulated_url.is_valid() && + net::registry_controlled_domains::SameDomainOrHost( + given_url, prepopulated_url, + net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); +} + +} // namespace + +// Global functions ----------------------------------------------------------- + +SearchEngineType GetEngineType(const GURL& url) { + DCHECK(url.is_valid()); + + // Check using TLD+1s, in order to more aggressively match search engine types + // for data imported from other browsers. + // + // First special-case Google, because the prepopulate URL for it will not + // convert to a GURL and thus won't have an origin. Instead see if the + // incoming URL's host is "[*.]google.<TLD>". + if (google_util::IsGoogleHostname(url.host(), + google_util::DISALLOW_SUBDOMAIN)) + return TemplateURLPrepopulateData::google.type; + + // Now check the rest of the prepopulate data. + for (size_t i = 0; i < TemplateURLPrepopulateData::kAllEnginesLength; ++i) { + // First check the main search URL. + if (SameDomain( + url, GURL(TemplateURLPrepopulateData::kAllEngines[i]->search_url))) + return TemplateURLPrepopulateData::kAllEngines[i]->type; + + // Then check the alternate URLs. + for (size_t j = 0; + j < TemplateURLPrepopulateData::kAllEngines[i]->alternate_urls_size; + ++j) { + if (SameDomain(url, GURL(TemplateURLPrepopulateData::kAllEngines[i] + ->alternate_urls[j]))) + return TemplateURLPrepopulateData::kAllEngines[i]->type; + } + } + + return SEARCH_ENGINE_OTHER; +} + +} // namespace SearchEngineUtils diff --git a/chromium/components/search_engines/search_engine_utils.h b/chromium/components/search_engines/search_engine_utils.h new file mode 100644 index 00000000000..83e0dd43dac --- /dev/null +++ b/chromium/components/search_engines/search_engine_utils.h @@ -0,0 +1,20 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_SEARCH_ENGINES_SEARCH_ENGINE_UTILS_H_ +#define COMPONENTS_SEARCH_ENGINES_SEARCH_ENGINE_UTILS_H_ + +#include "components/search_engines/search_engine_type.h" + +class GURL; + +namespace SearchEngineUtils { + +// Like the above, but takes a GURL which is expected to represent a search URL. +// This may be called on any thread. +SearchEngineType GetEngineType(const GURL& url); + +} // namespace SearchEngineUtils + +#endif // COMPONENTS_SEARCH_ENGINES_SEARCH_ENGINE_UTILS_H_ diff --git a/chromium/components/search_engines/template_url.cc b/chromium/components/search_engines/template_url.cc index e881a988315..2a4c441162f 100644 --- a/chromium/components/search_engines/template_url.cc +++ b/chromium/components/search_engines/template_url.cc @@ -26,9 +26,9 @@ #include "base/trace_event/memory_usage_estimator.h" #include "build/build_config.h" #include "components/google/core/common/google_util.h" +#include "components/search_engines/search_engine_utils.h" #include "components/search_engines/search_engines_switches.h" #include "components/search_engines/search_terms_data.h" -#include "components/search_engines/template_url_prepopulate_data.h" #include "components/url_formatter/url_formatter.h" #include "google_apis/google_api_keys.h" #include "net/base/escape.h" @@ -1410,8 +1410,8 @@ SearchEngineType TemplateURL::GetEngineType( const SearchTermsData& search_terms_data) const { if (engine_type_ == SEARCH_ENGINE_UNKNOWN) { const GURL url = GenerateSearchURL(search_terms_data); - engine_type_ = url.is_valid() ? - TemplateURLPrepopulateData::GetEngineType(url) : SEARCH_ENGINE_OTHER; + engine_type_ = url.is_valid() ? SearchEngineUtils::GetEngineType(url) + : SEARCH_ENGINE_OTHER; DCHECK_NE(SEARCH_ENGINE_UNKNOWN, engine_type_); } return engine_type_; diff --git a/chromium/components/search_engines/template_url_data_util.cc b/chromium/components/search_engines/template_url_data_util.cc index 12bfdf64db7..891daf5a08f 100644 --- a/chromium/components/search_engines/template_url_data_util.cc +++ b/chromium/components/search_engines/template_url_data_util.cc @@ -7,6 +7,7 @@ #include <string> #include "base/strings/string_number_conversions.h" +#include "base/strings/string_piece.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "components/search_engines/default_search_manager.h" @@ -14,6 +15,16 @@ #include "components/search_engines/template_url_data.h" #include "url/gurl.h" +namespace { + +// Converts the C-style string `str` to a base::StringPiece making sure to avoid +// dereferencing nullptrs. +base::StringPiece ToStringPiece(const char* str) { + return str ? base::StringPiece(str) : base::StringPiece(); +} + +} // namespace + std::unique_ptr<TemplateURLData> TemplateURLDataFromDictionary( const base::DictionaryValue& dict) { std::string search_url; @@ -187,11 +198,15 @@ std::unique_ptr<TemplateURLData> TemplateURLDataFromPrepopulatedEngine( return std::make_unique<TemplateURLData>( base::WideToUTF16(engine.name), base::WideToUTF16(engine.keyword), - engine.search_url, engine.suggest_url, engine.image_url, - engine.new_tab_url, engine.contextual_search_url, engine.logo_url, - engine.doodle_url, engine.search_url_post_params, - engine.suggest_url_post_params, engine.image_url_post_params, - engine.favicon_url, engine.encoding, alternate_urls, engine.id); + ToStringPiece(engine.search_url), ToStringPiece(engine.suggest_url), + ToStringPiece(engine.image_url), ToStringPiece(engine.new_tab_url), + ToStringPiece(engine.contextual_search_url), + ToStringPiece(engine.logo_url), ToStringPiece(engine.doodle_url), + ToStringPiece(engine.search_url_post_params), + ToStringPiece(engine.suggest_url_post_params), + ToStringPiece(engine.image_url_post_params), + ToStringPiece(engine.favicon_url), ToStringPiece(engine.encoding), + alternate_urls, engine.id); } std::unique_ptr<TemplateURLData> TemplateURLDataFromOverrideDictionary( diff --git a/chromium/components/search_engines/template_url_prepopulate_data.cc b/chromium/components/search_engines/template_url_prepopulate_data.cc index 60c60a4d09e..c1368c64f91 100644 --- a/chromium/components/search_engines/template_url_prepopulate_data.cc +++ b/chromium/components/search_engines/template_url_prepopulate_data.cc @@ -8,15 +8,12 @@ #include "base/stl_util.h" #include "build/build_config.h" #include "components/country_codes/country_codes.h" -#include "components/google/core/common/google_util.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" #include "components/search_engines/prepopulated_engines.h" #include "components/search_engines/search_engines_pref_names.h" #include "components/search_engines/template_url_data.h" #include "components/search_engines/template_url_data_util.h" -#include "net/base/registry_controlled_domains/registry_controlled_domain.h" -#include "url/gurl.h" namespace TemplateURLPrepopulateData { @@ -1356,13 +1353,6 @@ std::vector<std::unique_ptr<TemplateURLData>> GetPrepopulatedTemplateURLData( return t_urls; } -bool SameDomain(const GURL& given_url, const GURL& prepopulated_url) { - return prepopulated_url.is_valid() && - net::registry_controlled_domains::SameDomainOrHost( - given_url, prepopulated_url, - net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); -} - } // namespace // Global functions ----------------------------------------------------------- @@ -1452,33 +1442,4 @@ std::unique_ptr<TemplateURLData> GetPrepopulatedDefaultSearch( : nullptr; } -SearchEngineType GetEngineType(const GURL& url) { - DCHECK(url.is_valid()); - - // Check using TLD+1s, in order to more aggressively match search engine types - // for data imported from other browsers. - // - // First special-case Google, because the prepopulate URL for it will not - // convert to a GURL and thus won't have an origin. Instead see if the - // incoming URL's host is "[*.]google.<TLD>". - if (google_util::IsGoogleHostname(url.host(), - google_util::DISALLOW_SUBDOMAIN)) - return google.type; - - // Now check the rest of the prepopulate data. - for (size_t i = 0; i < kAllEnginesLength; ++i) { - // First check the main search URL. - if (SameDomain(url, GURL(kAllEngines[i]->search_url))) - return kAllEngines[i]->type; - - // Then check the alternate URLs. - for (size_t j = 0; j < kAllEngines[i]->alternate_urls_size; ++j) { - if (SameDomain(url, GURL(kAllEngines[i]->alternate_urls[j]))) - return kAllEngines[i]->type; - } - } - - return SEARCH_ENGINE_OTHER; -} - } // namespace TemplateURLPrepopulateData diff --git a/chromium/components/search_engines/template_url_prepopulate_data.h b/chromium/components/search_engines/template_url_prepopulate_data.h index 159263ac147..682060b859d 100644 --- a/chromium/components/search_engines/template_url_prepopulate_data.h +++ b/chromium/components/search_engines/template_url_prepopulate_data.h @@ -11,9 +11,6 @@ #include <string> #include <vector> -#include "components/search_engines/search_engine_type.h" - -class GURL; class PrefService; struct TemplateURLData; @@ -65,10 +62,6 @@ void ClearPrepopulatedEnginesInPrefs(PrefService* prefs); std::unique_ptr<TemplateURLData> GetPrepopulatedDefaultSearch( PrefService* prefs); -// Like the above, but takes a GURL which is expected to represent a search URL. -// This may be called on any thread. -SearchEngineType GetEngineType(const GURL& url); - } // namespace TemplateURLPrepopulateData #endif // COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_PREPOPULATE_DATA_H_ |