Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(505)

Side by Side Diff: chrome/browser/search_engines/template_url_service_android.cc

Issue 2367373003: [Android] Allow setting recently visited search engines as default search engine (Closed)
Patch Set: Update based on Dan and Peter's comments. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/search_engines/template_url_service_android.h" 5 #include "chrome/browser/search_engines/template_url_service_android.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/android/jni_string.h" 9 #include "base/android/jni_string.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 24 matching lines...) Expand all
35 TemplateUrlServiceAndroid::TemplateUrlServiceAndroid(JNIEnv* env, 35 TemplateUrlServiceAndroid::TemplateUrlServiceAndroid(JNIEnv* env,
36 jobject obj) 36 jobject obj)
37 : weak_java_obj_(env, obj), 37 : weak_java_obj_(env, obj),
38 template_url_service_( 38 template_url_service_(
39 TemplateURLServiceFactory::GetForProfile(GetOriginalProfile())) { 39 TemplateURLServiceFactory::GetForProfile(GetOriginalProfile())) {
40 template_url_subscription_ = 40 template_url_subscription_ =
41 template_url_service_->RegisterOnLoadedCallback( 41 template_url_service_->RegisterOnLoadedCallback(
42 base::Bind(&TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded, 42 base::Bind(&TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded,
43 base::Unretained(this))); 43 base::Unretained(this)));
44 template_url_service_->AddObserver(this); 44 template_url_service_->AddObserver(this);
45 if (template_url_service_->loaded() && template_urls_.size() == 0) {
Peter Kasting 2016/11/29 03:32:18 Nit: Prefer .empty() to .size() == 0. {} not nece
ltian 2016/11/30 06:36:17 Done.
46 LoadTemplateURLs();
47 }
45 } 48 }
46 49
47 TemplateUrlServiceAndroid::~TemplateUrlServiceAndroid() { 50 TemplateUrlServiceAndroid::~TemplateUrlServiceAndroid() {
48 template_url_service_->RemoveObserver(this); 51 template_url_service_->RemoveObserver(this);
49 } 52 }
50 53
51 void TemplateUrlServiceAndroid::Load(JNIEnv* env, 54 void TemplateUrlServiceAndroid::Load(JNIEnv* env,
52 const JavaParamRef<jobject>& obj) { 55 const JavaParamRef<jobject>& obj) {
53 template_url_service_->Load(); 56 template_url_service_->Load();
54 } 57 }
55 58
56 void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider( 59 void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider(
57 JNIEnv* env, 60 JNIEnv* env,
58 const JavaParamRef<jobject>& obj, 61 const JavaParamRef<jobject>& obj,
59 jint selected_index) { 62 const JavaParamRef<jstring>& jkeyword) {
60 std::vector<TemplateURL*> template_urls = 63 base::string16 keyword(
61 template_url_service_->GetTemplateURLs(); 64 base::android::ConvertJavaStringToUTF16(env, jkeyword));
62 size_t selected_index_size_t = static_cast<size_t>(selected_index); 65 TemplateURL* template_url =
63 DCHECK_LT(selected_index_size_t, template_urls.size()) << 66 template_url_service_->GetTemplateURLForKeyword(keyword);
64 "Wrong index for search engine";
65
66 TemplateURL* template_url = template_urls[selected_index_size_t];
67 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); 67 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url);
68 } 68 }
69 69
70 jint TemplateUrlServiceAndroid::GetDefaultSearchProvider( 70 jint TemplateUrlServiceAndroid::GetDefaultSearchProviderIndex(
71 JNIEnv* env, 71 JNIEnv* env,
72 const JavaParamRef<jobject>& obj) { 72 const base::android::JavaParamRef<jobject>& obj) const {
73 std::vector<TemplateURL*> template_urls =
74 template_url_service_->GetTemplateURLs();
75 TemplateURL* default_search_provider = 73 TemplateURL* default_search_provider =
76 template_url_service_->GetDefaultSearchProvider(); 74 template_url_service_->GetDefaultSearchProvider();
77 for (size_t i = 0; i < template_urls.size(); ++i) { 75 auto it = std::find(template_urls_.begin(), template_urls_.end(),
78 if (default_search_provider == template_urls[i]) 76 default_search_provider);
79 return i; 77 size_t default_search_provider_index_ = (it == template_urls_.end())
80 } 78 ? -1
81 return -1; 79 : (it - template_urls_.begin());
Peter Kasting 2016/11/29 03:32:18 Nit: Indenting looks a bit odd. Is this what git
ltian 2016/11/30 06:36:17 Sorry the Eclipse setting and git cl format do in
80 return default_search_provider_index_;
82 } 81 }
83 82
84 jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env, 83 jboolean TemplateUrlServiceAndroid::IsLoaded(
85 const JavaParamRef<jobject>& obj) { 84 JNIEnv* env,
85 const JavaParamRef<jobject>& obj) const {
86 return template_url_service_->loaded(); 86 return template_url_service_->loaded();
87 } 87 }
88 88
89 jint TemplateUrlServiceAndroid::GetTemplateUrlCount( 89 jint TemplateUrlServiceAndroid::GetTemplateUrlCount(
90 JNIEnv* env, 90 JNIEnv* env,
91 const JavaParamRef<jobject>& obj) { 91 const JavaParamRef<jobject>& obj) const {
92 return template_url_service_->GetTemplateURLs().size(); 92 return template_urls_.size();
93 } 93 }
94 94
95 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged( 95 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged(
96 JNIEnv* env, 96 JNIEnv* env,
97 const JavaParamRef<jobject>& obj) { 97 const JavaParamRef<jobject>& obj) {
98 return template_url_service_->is_default_search_managed(); 98 return template_url_service_->is_default_search_managed();
99 } 99 }
100 100
101 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( 101 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable(
102 JNIEnv* env, 102 JNIEnv* env,
(...skipping 12 matching lines...) Expand all
115 TemplateURL* default_search_provider = 115 TemplateURL* default_search_provider =
116 template_url_service_->GetDefaultSearchProvider(); 116 template_url_service_->GetDefaultSearchProvider();
117 return default_search_provider && 117 return default_search_provider &&
118 default_search_provider->url_ref().HasGoogleBaseURLs( 118 default_search_provider->url_ref().HasGoogleBaseURLs(
119 template_url_service_->search_terms_data()); 119 template_url_service_->search_terms_data());
120 } 120 }
121 121
122 base::android::ScopedJavaLocalRef<jobject> 122 base::android::ScopedJavaLocalRef<jobject>
123 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env, 123 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env,
124 const JavaParamRef<jobject>& obj, 124 const JavaParamRef<jobject>& obj,
125 jint index) { 125 jint index) const {
126 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; 126 TemplateURL* template_url = template_urls_[index];
127 return Java_TemplateUrl_create( 127 return Java_TemplateUrl_create(
128 env, index, 128 env, index,
129 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()), 129 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()),
130 IsPrepopulatedTemplate(template_url) || 130 base::android::ConvertUTF8ToJavaString(env, template_url->url()),
131 template_url->created_by_policy()); 131 template_url_service_->ShowInPrepopulatedList(template_url),
132 } 132 base::android::ConvertUTF16ToJavaString(env, template_url->keyword()));
133
134 bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) {
135 return url->prepopulate_id() > 0;
136 } 133 }
137 134
138 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { 135 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() {
139 template_url_subscription_.reset(); 136 template_url_subscription_.reset();
140 JNIEnv* env = base::android::AttachCurrentThread(); 137 JNIEnv* env = base::android::AttachCurrentThread();
141 if (weak_java_obj_.get(env).is_null()) 138 if (weak_java_obj_.get(env).is_null())
142 return; 139 return;
140 LoadTemplateURLs();
143 141
144 Java_TemplateUrlService_templateUrlServiceLoaded(env, 142 Java_TemplateUrlService_templateUrlServiceLoaded(env,
145 weak_java_obj_.get(env)); 143 weak_java_obj_.get(env));
146 } 144 }
147 145
146 void TemplateUrlServiceAndroid::LoadTemplateURLs() {
147 template_urls_.clear();
Peter Kasting 2016/11/29 03:32:18 This call is unnecessary, since you reset template
ltian 2016/11/30 06:36:17 Done.
148
149 template_urls_ = template_url_service_->GetTemplateURLs();
150 TemplateURL* default_search_provider =
151 template_url_service_->GetDefaultSearchProvider();
152
153 auto typeCompare = [&] (const TemplateURL* lhs, const TemplateURL* rhs)
Peter Kasting 2016/11/29 03:32:18 Nit: Use normal variable capitalization scheme. I
ltian 2016/11/30 06:36:17 Done.
154 -> bool {
Peter Kasting 2016/11/29 03:32:18 Nit: Is the return type necessary for compilation?
ltian 2016/11/30 06:36:17 Done.
155 if (template_url_service_->ShowInPrepopulatedList(lhs)) {
156 return !template_url_service_->ShowInPrepopulatedList(rhs) ||
Peter Kasting 2016/11/29 03:32:18 Nit: This call is verbose and you make it regardle
ltian 2016/11/30 06:36:17 Done.
157 (lhs->prepopulate_id() < rhs->prepopulate_id());
158 }
159 return (lhs == default_search_provider &&
160 !template_url_service_->ShowInPrepopulatedList(rhs));
161 };
162
Peter Kasting 2016/11/29 03:32:18 Nit: I'd avoid this blank line, since the lambda j
ltian 2016/11/30 06:36:17 Done.
163 std::sort(template_urls_.begin(), template_urls_.end(), typeCompare);
164 }
165
148 void TemplateUrlServiceAndroid::OnTemplateURLServiceChanged() { 166 void TemplateUrlServiceAndroid::OnTemplateURLServiceChanged() {
149 JNIEnv* env = base::android::AttachCurrentThread(); 167 JNIEnv* env = base::android::AttachCurrentThread();
150 if (weak_java_obj_.get(env).is_null()) 168 if (weak_java_obj_.get(env).is_null())
151 return; 169 return;
170 LoadTemplateURLs();
152 171
153 Java_TemplateUrlService_onTemplateURLServiceChanged(env, 172 Java_TemplateUrlService_onTemplateURLServiceChanged(env,
154 weak_java_obj_.get(env)); 173 weak_java_obj_.get(env));
155 } 174 }
156 175
157 base::android::ScopedJavaLocalRef<jstring> 176 base::android::ScopedJavaLocalRef<jstring>
158 TemplateUrlServiceAndroid::GetUrlForSearchQuery( 177 TemplateUrlServiceAndroid::GetUrlForSearchQuery(
159 JNIEnv* env, 178 JNIEnv* env,
160 const JavaParamRef<jobject>& obj, 179 const JavaParamRef<jobject>& obj,
161 const JavaParamRef<jstring>& jquery) { 180 const JavaParamRef<jstring>& jquery) {
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 url = gurl.spec(); 271 url = gurl.spec();
253 } 272 }
254 273
255 return base::android::ConvertUTF8ToJavaString(env, url); 274 return base::android::ConvertUTF8ToJavaString(env, url);
256 } 275 }
257 276
258 base::android::ScopedJavaLocalRef<jstring> 277 base::android::ScopedJavaLocalRef<jstring>
259 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl( 278 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl(
260 JNIEnv* env, 279 JNIEnv* env,
261 const JavaParamRef<jobject>& obj, 280 const JavaParamRef<jobject>& obj,
262 jint index) { 281 const JavaParamRef<jstring>& jkeyword) {
263 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; 282 base::string16 keyword =
283 base::android::ConvertJavaStringToUTF16(env, jkeyword);
284 TemplateURL* template_url =
285 template_url_service_->GetTemplateURLForKeyword(keyword);
264 std::string url(template_url->url_ref().ReplaceSearchTerms( 286 std::string url(template_url->url_ref().ReplaceSearchTerms(
265 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")), 287 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")),
266 template_url_service_->search_terms_data())); 288 template_url_service_->search_terms_data()));
267 return base::android::ConvertUTF8ToJavaString(env, url); 289 return base::android::ConvertUTF8ToJavaString(env, url);
268 } 290 }
269 291
270 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { 292 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
271 TemplateUrlServiceAndroid* template_url_service_android = 293 TemplateUrlServiceAndroid* template_url_service_android =
272 new TemplateUrlServiceAndroid(env, obj); 294 new TemplateUrlServiceAndroid(env, obj);
273 return reinterpret_cast<intptr_t>(template_url_service_android); 295 return reinterpret_cast<intptr_t>(template_url_service_android);
274 } 296 }
275 297
276 // static 298 // static
277 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) { 299 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) {
278 return RegisterNativesImpl(env); 300 return RegisterNativesImpl(env);
279 } 301 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698