Commit aa36cbaa authored by ltian's avatar ltian Committed by Commit bot

Implement native functions to query custom search engines for Android

1. Enable SearchEngineTabHelper on Android to auto-detect and fetch OpenSearch description document.
2. Add native function to retrieve recent visited search engines.
3. Allow recent visited search engine to be selected as default search engine.

BUG=348360

Review-Url: https://codereview.chromium.org/2349473002
Cr-Commit-Position: refs/heads/master@{#419569}
parent 3ac5672b
...@@ -47,16 +47,17 @@ public class TemplateUrlService { ...@@ -47,16 +47,17 @@ public class TemplateUrlService {
public static class TemplateUrl { public static class TemplateUrl {
private final int mIndex; private final int mIndex;
private final String mShortName; private final String mShortName;
private boolean mIsPrepopulated;
@CalledByNative("TemplateUrl") @CalledByNative("TemplateUrl")
public static TemplateUrl create( public static TemplateUrl create(int id, String shortName, boolean isPrepopulated) {
int id, String shortName) { return new TemplateUrl(id, shortName, isPrepopulated);
return new TemplateUrl(id, shortName);
} }
public TemplateUrl(int index, String shortName) { public TemplateUrl(int index, String shortName, boolean isPrepopulated) {
mIndex = index; mIndex = index;
mShortName = shortName; mShortName = shortName;
mIsPrepopulated = isPrepopulated;
} }
public int getIndex() { public int getIndex() {
...@@ -128,9 +129,8 @@ public class TemplateUrlService { ...@@ -128,9 +129,8 @@ public class TemplateUrlService {
int templateUrlCount = nativeGetTemplateUrlCount(mNativeTemplateUrlServiceAndroid); int templateUrlCount = nativeGetTemplateUrlCount(mNativeTemplateUrlServiceAndroid);
List<TemplateUrl> templateUrls = new ArrayList<TemplateUrl>(templateUrlCount); List<TemplateUrl> templateUrls = new ArrayList<TemplateUrl>(templateUrlCount);
for (int i = 0; i < templateUrlCount; i++) { for (int i = 0; i < templateUrlCount; i++) {
TemplateUrl templateUrl = nativeGetPrepopulatedTemplateUrlAt( TemplateUrl templateUrl = nativeGetTemplateUrlAt(mNativeTemplateUrlServiceAndroid, i);
mNativeTemplateUrlServiceAndroid, i); if (templateUrl != null && templateUrl.mIsPrepopulated) {
if (templateUrl != null) {
templateUrls.add(templateUrl); templateUrls.add(templateUrl);
} }
} }
...@@ -176,8 +176,7 @@ public class TemplateUrlService { ...@@ -176,8 +176,7 @@ public class TemplateUrlService {
assert defaultSearchEngineIndex < nativeGetTemplateUrlCount( assert defaultSearchEngineIndex < nativeGetTemplateUrlCount(
mNativeTemplateUrlServiceAndroid); mNativeTemplateUrlServiceAndroid);
return nativeGetPrepopulatedTemplateUrlAt( return nativeGetTemplateUrlAt(mNativeTemplateUrlServiceAndroid, defaultSearchEngineIndex);
mNativeTemplateUrlServiceAndroid, defaultSearchEngineIndex);
} }
public void setSearchEngine(int selectedIndex) { public void setSearchEngine(int selectedIndex) {
...@@ -306,8 +305,7 @@ public class TemplateUrlService { ...@@ -306,8 +305,7 @@ public class TemplateUrlService {
private native void nativeLoad(long nativeTemplateUrlServiceAndroid); private native void nativeLoad(long nativeTemplateUrlServiceAndroid);
private native boolean nativeIsLoaded(long nativeTemplateUrlServiceAndroid); private native boolean nativeIsLoaded(long nativeTemplateUrlServiceAndroid);
private native int nativeGetTemplateUrlCount(long nativeTemplateUrlServiceAndroid); private native int nativeGetTemplateUrlCount(long nativeTemplateUrlServiceAndroid);
private native TemplateUrl nativeGetPrepopulatedTemplateUrlAt( private native TemplateUrl nativeGetTemplateUrlAt(long nativeTemplateUrlServiceAndroid, int i);
long nativeTemplateUrlServiceAndroid, int i);
private native void nativeSetUserSelectedDefaultSearchProvider( private native void nativeSetUserSelectedDefaultSearchProvider(
long nativeTemplateUrlServiceAndroid, int selectedIndex); long nativeTemplateUrlServiceAndroid, int selectedIndex);
private native int nativeGetDefaultSearchProvider(long nativeTemplateUrlServiceAndroid); private native int nativeGetDefaultSearchProvider(long nativeTemplateUrlServiceAndroid);
......
...@@ -65,8 +65,6 @@ void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider( ...@@ -65,8 +65,6 @@ void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider(
"Wrong index for search engine"; "Wrong index for search engine";
TemplateURL* template_url = template_urls[selected_index_size_t]; TemplateURL* template_url = template_urls[selected_index_size_t];
DCHECK_GT(template_url->prepopulate_id(), 0) <<
"Tried to select non-prepopulated search engine";
template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); template_url_service_->SetUserSelectedDefaultSearchProvider(template_url);
} }
...@@ -123,18 +121,15 @@ jboolean TemplateUrlServiceAndroid::IsDefaultSearchEngineGoogle( ...@@ -123,18 +121,15 @@ jboolean TemplateUrlServiceAndroid::IsDefaultSearchEngineGoogle(
} }
base::android::ScopedJavaLocalRef<jobject> base::android::ScopedJavaLocalRef<jobject>
TemplateUrlServiceAndroid::GetPrepopulatedTemplateUrlAt( TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env,
JNIEnv* env,
const JavaParamRef<jobject>& obj, const JavaParamRef<jobject>& obj,
jint index) { jint index) {
TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index];
if (!IsPrepopulatedTemplate(template_url) &&
!template_url->created_by_policy())
return ScopedJavaLocalRef<jobject>();
return Java_TemplateUrl_create( return Java_TemplateUrl_create(
env, index, env, index,
base::android::ConvertUTF16ToJavaString(env, template_url->short_name())); base::android::ConvertUTF16ToJavaString(env, template_url->short_name()),
IsPrepopulatedTemplate(template_url) ||
template_url->created_by_policy());
} }
bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) { bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) {
......
...@@ -35,7 +35,7 @@ class TemplateUrlServiceAndroid : public TemplateURLServiceObserver { ...@@ -35,7 +35,7 @@ class TemplateUrlServiceAndroid : public TemplateURLServiceObserver {
const base::android::JavaParamRef<jobject>& obj); const base::android::JavaParamRef<jobject>& obj);
jboolean IsLoaded(JNIEnv* env, jboolean IsLoaded(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj); const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jobject> GetPrepopulatedTemplateUrlAt( base::android::ScopedJavaLocalRef<jobject> GetTemplateUrlAt(
JNIEnv* env, JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj, const base::android::JavaParamRef<jobject>& obj,
jint index); jint index);
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#include "chrome/browser/ui/pdf/chrome_pdf_web_contents_helper_client.h" #include "chrome/browser/ui/pdf/chrome_pdf_web_contents_helper_client.h"
#include "chrome/browser/ui/prefs/prefs_tab_helper.h" #include "chrome/browser/ui/prefs/prefs_tab_helper.h"
#include "chrome/browser/ui/search/search_tab_helper.h" #include "chrome/browser/ui/search/search_tab_helper.h"
#include "chrome/browser/ui/search_engines/search_engine_tab_helper.h"
#include "chrome/browser/ui/tab_contents/core_tab_helper.h" #include "chrome/browser/ui/tab_contents/core_tab_helper.h"
#include "chrome/browser/ui/tab_dialogs.h" #include "chrome/browser/ui/tab_dialogs.h"
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
...@@ -81,7 +82,6 @@ ...@@ -81,7 +82,6 @@
#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h" #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
#include "chrome/browser/ui/hung_plugin_tab_helper.h" #include "chrome/browser/ui/hung_plugin_tab_helper.h"
#include "chrome/browser/ui/sad_tab_helper.h" #include "chrome/browser/ui/sad_tab_helper.h"
#include "chrome/browser/ui/search_engines/search_engine_tab_helper.h"
#include "chrome/browser/ui/sync/tab_contents_synced_tab_delegate.h" #include "chrome/browser/ui/sync/tab_contents_synced_tab_delegate.h"
#include "components/pdf/browser/pdf_web_contents_helper.h" #include "components/pdf/browser/pdf_web_contents_helper.h"
#include "components/web_modal/web_contents_modal_dialog_manager.h" #include "components/web_modal/web_contents_modal_dialog_manager.h"
...@@ -187,6 +187,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { ...@@ -187,6 +187,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
prerender::PrerenderTabHelper::CreateForWebContents(web_contents); prerender::PrerenderTabHelper::CreateForWebContents(web_contents);
PreviewsInfoBarTabHelper::CreateForWebContents(web_contents); PreviewsInfoBarTabHelper::CreateForWebContents(web_contents);
SearchTabHelper::CreateForWebContents(web_contents); SearchTabHelper::CreateForWebContents(web_contents);
SearchEngineTabHelper::CreateForWebContents(web_contents);
ChromeSecurityStateModelClient::CreateForWebContents(web_contents); ChromeSecurityStateModelClient::CreateForWebContents(web_contents);
if (SiteEngagementService::IsEnabled()) if (SiteEngagementService::IsEnabled())
SiteEngagementService::Helper::CreateForWebContents(web_contents); SiteEngagementService::Helper::CreateForWebContents(web_contents);
...@@ -228,7 +229,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { ...@@ -228,7 +229,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
PluginObserver::CreateForWebContents(web_contents); PluginObserver::CreateForWebContents(web_contents);
SadTabHelper::CreateForWebContents(web_contents); SadTabHelper::CreateForWebContents(web_contents);
safe_browsing::SafeBrowsingTabObserver::CreateForWebContents(web_contents); safe_browsing::SafeBrowsingTabObserver::CreateForWebContents(web_contents);
SearchEngineTabHelper::CreateForWebContents(web_contents);
TabContentsSyncedTabDelegate::CreateForWebContents(web_contents); TabContentsSyncedTabDelegate::CreateForWebContents(web_contents);
TabDialogs::CreateForWebContents(web_contents); TabDialogs::CreateForWebContents(web_contents);
ThumbnailTabHelper::CreateForWebContents(web_contents); ThumbnailTabHelper::CreateForWebContents(web_contents);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment