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 {
public static class TemplateUrl {
private final int mIndex;
private final String mShortName;
private boolean mIsPrepopulated;
@CalledByNative("TemplateUrl")
public static TemplateUrl create(
int id, String shortName) {
return new TemplateUrl(id, shortName);
public static TemplateUrl create(int id, String shortName, boolean isPrepopulated) {
return new TemplateUrl(id, shortName, isPrepopulated);
}
public TemplateUrl(int index, String shortName) {
public TemplateUrl(int index, String shortName, boolean isPrepopulated) {
mIndex = index;
mShortName = shortName;
mIsPrepopulated = isPrepopulated;
}
public int getIndex() {
......@@ -128,9 +129,8 @@ public class TemplateUrlService {
int templateUrlCount = nativeGetTemplateUrlCount(mNativeTemplateUrlServiceAndroid);
List<TemplateUrl> templateUrls = new ArrayList<TemplateUrl>(templateUrlCount);
for (int i = 0; i < templateUrlCount; i++) {
TemplateUrl templateUrl = nativeGetPrepopulatedTemplateUrlAt(
mNativeTemplateUrlServiceAndroid, i);
if (templateUrl != null) {
TemplateUrl templateUrl = nativeGetTemplateUrlAt(mNativeTemplateUrlServiceAndroid, i);
if (templateUrl != null && templateUrl.mIsPrepopulated) {
templateUrls.add(templateUrl);
}
}
......@@ -176,8 +176,7 @@ public class TemplateUrlService {
assert defaultSearchEngineIndex < nativeGetTemplateUrlCount(
mNativeTemplateUrlServiceAndroid);
return nativeGetPrepopulatedTemplateUrlAt(
mNativeTemplateUrlServiceAndroid, defaultSearchEngineIndex);
return nativeGetTemplateUrlAt(mNativeTemplateUrlServiceAndroid, defaultSearchEngineIndex);
}
public void setSearchEngine(int selectedIndex) {
......@@ -306,8 +305,7 @@ public class TemplateUrlService {
private native void nativeLoad(long nativeTemplateUrlServiceAndroid);
private native boolean nativeIsLoaded(long nativeTemplateUrlServiceAndroid);
private native int nativeGetTemplateUrlCount(long nativeTemplateUrlServiceAndroid);
private native TemplateUrl nativeGetPrepopulatedTemplateUrlAt(
long nativeTemplateUrlServiceAndroid, int i);
private native TemplateUrl nativeGetTemplateUrlAt(long nativeTemplateUrlServiceAndroid, int i);
private native void nativeSetUserSelectedDefaultSearchProvider(
long nativeTemplateUrlServiceAndroid, int selectedIndex);
private native int nativeGetDefaultSearchProvider(long nativeTemplateUrlServiceAndroid);
......
......@@ -65,8 +65,6 @@ void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider(
"Wrong index for search engine";
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);
}
......@@ -123,18 +121,15 @@ jboolean TemplateUrlServiceAndroid::IsDefaultSearchEngineGoogle(
}
base::android::ScopedJavaLocalRef<jobject>
TemplateUrlServiceAndroid::GetPrepopulatedTemplateUrlAt(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
jint index) {
TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jint 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(
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) {
......
......@@ -35,7 +35,7 @@ class TemplateUrlServiceAndroid : public TemplateURLServiceObserver {
const base::android::JavaParamRef<jobject>& obj);
jboolean IsLoaded(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jobject> GetPrepopulatedTemplateUrlAt(
base::android::ScopedJavaLocalRef<jobject> GetTemplateUrlAt(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jint index);
......
......@@ -46,6 +46,7 @@
#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/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_dialogs.h"
#include "chrome/common/chrome_switches.h"
......@@ -81,7 +82,6 @@
#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
#include "chrome/browser/ui/hung_plugin_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 "components/pdf/browser/pdf_web_contents_helper.h"
#include "components/web_modal/web_contents_modal_dialog_manager.h"
......@@ -187,6 +187,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
prerender::PrerenderTabHelper::CreateForWebContents(web_contents);
PreviewsInfoBarTabHelper::CreateForWebContents(web_contents);
SearchTabHelper::CreateForWebContents(web_contents);
SearchEngineTabHelper::CreateForWebContents(web_contents);
ChromeSecurityStateModelClient::CreateForWebContents(web_contents);
if (SiteEngagementService::IsEnabled())
SiteEngagementService::Helper::CreateForWebContents(web_contents);
......@@ -228,7 +229,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
PluginObserver::CreateForWebContents(web_contents);
SadTabHelper::CreateForWebContents(web_contents);
safe_browsing::SafeBrowsingTabObserver::CreateForWebContents(web_contents);
SearchEngineTabHelper::CreateForWebContents(web_contents);
TabContentsSyncedTabDelegate::CreateForWebContents(web_contents);
TabDialogs::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