Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 50 } | 50 } |
| 51 | 51 |
| 52 void TemplateUrlServiceAndroid::Load(JNIEnv* env, | 52 void TemplateUrlServiceAndroid::Load(JNIEnv* env, |
| 53 const JavaParamRef<jobject>& obj) { | 53 const JavaParamRef<jobject>& obj) { |
| 54 template_url_service_->Load(); | 54 template_url_service_->Load(); |
| 55 } | 55 } |
| 56 | 56 |
| 57 void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider( | 57 void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider( |
| 58 JNIEnv* env, | 58 JNIEnv* env, |
| 59 const JavaParamRef<jobject>& obj, | 59 const JavaParamRef<jobject>& obj, |
| 60 jint selected_index) { | 60 const JavaParamRef<jstring>& jkeyword) { |
| 61 std::vector<TemplateURL*> template_urls = | 61 base::string16 keyword( |
| 62 template_url_service_->GetTemplateURLs(); | 62 base::android::ConvertJavaStringToUTF16(env, jkeyword)); |
| 63 size_t selected_index_size_t = static_cast<size_t>(selected_index); | 63 TemplateURL* template_url = |
| 64 DCHECK_LT(selected_index_size_t, template_urls.size()) << | 64 template_url_service_->FindNonExtensionTemplateURLForKeyword(keyword); |
| 65 "Wrong index for search engine"; | |
| 66 | |
| 67 TemplateURL* template_url = template_urls[selected_index_size_t]; | |
| 68 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); | 65 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); |
| 69 } | 66 } |
| 70 | 67 |
| 71 jint TemplateUrlServiceAndroid::GetDefaultSearchProvider( | 68 jint TemplateUrlServiceAndroid::GetDefaultSearchProvider( |
| 72 JNIEnv* env, | 69 JNIEnv* env, |
| 73 const JavaParamRef<jobject>& obj) { | 70 const JavaParamRef<jobject>& obj) { |
| 71 size_t index = -1; | |
| 72 template_url_list.clear(); | |
| 74 std::vector<TemplateURL*> template_urls = | 73 std::vector<TemplateURL*> template_urls = |
| 75 template_url_service_->GetTemplateURLs(); | 74 template_url_service_->GetTemplateURLs(); |
| 76 TemplateURL* default_search_provider = | 75 TemplateURL* default_search_provider = |
| 77 template_url_service_->GetDefaultSearchProvider(); | 76 template_url_service_->GetDefaultSearchProvider(); |
| 77 std::vector<TemplateURL*> recent_visit_list; | |
| 78 for (size_t i = 0; i < template_urls.size(); ++i) { | 78 for (size_t i = 0; i < template_urls.size(); ++i) { |
| 79 if (default_search_provider == template_urls[i]) | 79 if (IsPrepopulatedTemplate(template_urls[i]) || |
| 80 return i; | 80 template_urls[i]->created_by_policy()) { |
| 81 template_url_list.push_back(template_urls[i]); | |
| 82 if (default_search_provider == template_urls[i]) | |
| 83 index = template_url_list.size() - 1; | |
|
Ian Wen
2016/10/17 23:32:21
Why is index always size() - 1? Shouldn't it be 1?
ltian
2016/10/18 01:01:55
Our plan is if the default search engine is a rece
| |
| 84 } else if (default_search_provider == template_urls[i]) { | |
| 85 continue; | |
| 86 } else { | |
| 87 recent_visit_list.push_back(template_urls[i]); | |
| 88 } | |
| 81 } | 89 } |
| 82 return -1; | 90 // If default search engine is recently visited one, force it |
|
Ian Wen
2016/10/17 23:32:21
Nit: force it *to* append
ltian
2016/10/18 01:01:55
Done.
| |
| 91 // append at the bottom of default list. | |
| 92 if (!IsPrepopulatedTemplate(default_search_provider) && | |
| 93 !default_search_provider->created_by_policy()) { | |
| 94 template_url_list.push_back(default_search_provider); | |
| 95 index = template_url_list.size() - 1; | |
| 96 } | |
| 97 for (size_t i = 0; i < recent_visit_list.size(); ++i) | |
| 98 template_url_list.push_back(recent_visit_list[i]); | |
| 99 return index; | |
| 83 } | 100 } |
| 84 | 101 |
| 85 jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env, | 102 jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env, |
| 86 const JavaParamRef<jobject>& obj) { | 103 const JavaParamRef<jobject>& obj) { |
| 87 return template_url_service_->loaded(); | 104 return template_url_service_->loaded(); |
| 88 } | 105 } |
| 89 | 106 |
| 90 jint TemplateUrlServiceAndroid::GetTemplateUrlCount( | 107 jint TemplateUrlServiceAndroid::GetTemplateUrlCount( |
| 91 JNIEnv* env, | 108 JNIEnv* env, |
| 92 const JavaParamRef<jobject>& obj) { | 109 const JavaParamRef<jobject>& obj) { |
| 93 return template_url_service_->GetTemplateURLs().size(); | 110 return template_url_list.size(); |
| 94 } | 111 } |
| 95 | 112 |
| 96 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged( | 113 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged( |
| 97 JNIEnv* env, | 114 JNIEnv* env, |
| 98 const JavaParamRef<jobject>& obj) { | 115 const JavaParamRef<jobject>& obj) { |
| 99 return template_url_service_->is_default_search_managed(); | 116 return template_url_service_->is_default_search_managed(); |
| 100 } | 117 } |
| 101 | 118 |
| 102 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( | 119 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( |
| 103 JNIEnv* env, | 120 JNIEnv* env, |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 117 template_url_service_->GetDefaultSearchProvider(); | 134 template_url_service_->GetDefaultSearchProvider(); |
| 118 return default_search_provider && | 135 return default_search_provider && |
| 119 default_search_provider->url_ref().HasGoogleBaseURLs( | 136 default_search_provider->url_ref().HasGoogleBaseURLs( |
| 120 template_url_service_->search_terms_data()); | 137 template_url_service_->search_terms_data()); |
| 121 } | 138 } |
| 122 | 139 |
| 123 base::android::ScopedJavaLocalRef<jobject> | 140 base::android::ScopedJavaLocalRef<jobject> |
| 124 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env, | 141 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env, |
| 125 const JavaParamRef<jobject>& obj, | 142 const JavaParamRef<jobject>& obj, |
| 126 jint index) { | 143 jint index) { |
| 127 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; | 144 TemplateURL* template_url = template_url_list[index]; |
|
Ian Wen
2016/10/17 23:32:21
Since this class does not own the template_urls th
ltian
2016/10/18 01:01:55
Done.
| |
| 128 return Java_TemplateUrl_create( | 145 return Java_TemplateUrl_create( |
| 129 env, index, | 146 env, index, |
| 130 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()), | 147 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()), |
| 131 IsPrepopulatedTemplate(template_url) || | 148 base::android::ConvertUTF8ToJavaString(env, template_url->url()), |
| 132 template_url->created_by_policy()); | 149 IsPrepopulatedTemplate(template_url) || template_url->created_by_policy(), |
| 150 base::android::ConvertUTF16ToJavaString(env, template_url->keyword())); | |
| 133 } | 151 } |
| 134 | 152 |
| 135 bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) { | 153 bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) { |
| 136 return url->prepopulate_id() > 0; | 154 return url->prepopulate_id() > 0; |
| 137 } | 155 } |
| 138 | 156 |
| 139 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { | 157 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { |
| 140 template_url_subscription_.reset(); | 158 template_url_subscription_.reset(); |
| 141 JNIEnv* env = base::android::AttachCurrentThread(); | 159 JNIEnv* env = base::android::AttachCurrentThread(); |
| 142 if (weak_java_obj_.get(env).is_null()) | 160 if (weak_java_obj_.get(env).is_null()) |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 253 url = gurl.spec(); | 271 url = gurl.spec(); |
| 254 } | 272 } |
| 255 | 273 |
| 256 return base::android::ConvertUTF8ToJavaString(env, url); | 274 return base::android::ConvertUTF8ToJavaString(env, url); |
| 257 } | 275 } |
| 258 | 276 |
| 259 base::android::ScopedJavaLocalRef<jstring> | 277 base::android::ScopedJavaLocalRef<jstring> |
| 260 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl( | 278 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl( |
| 261 JNIEnv* env, | 279 JNIEnv* env, |
| 262 const JavaParamRef<jobject>& obj, | 280 const JavaParamRef<jobject>& obj, |
| 263 jint index) { | 281 const JavaParamRef<jstring>& jkeyword) { |
| 264 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_->FindNonExtensionTemplateURLForKeyword(keyword); | |
| 265 std::string url(template_url->url_ref().ReplaceSearchTerms( | 286 std::string url(template_url->url_ref().ReplaceSearchTerms( |
| 266 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")), | 287 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")), |
| 267 template_url_service_->search_terms_data())); | 288 template_url_service_->search_terms_data())); |
| 268 return base::android::ConvertUTF8ToJavaString(env, url); | 289 return base::android::ConvertUTF8ToJavaString(env, url); |
| 269 } | 290 } |
| 270 | 291 |
| 271 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 292 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 272 TemplateUrlServiceAndroid* template_url_service_android = | 293 TemplateUrlServiceAndroid* template_url_service_android = |
| 273 new TemplateUrlServiceAndroid(env, obj); | 294 new TemplateUrlServiceAndroid(env, obj); |
| 274 return reinterpret_cast<intptr_t>(template_url_service_android); | 295 return reinterpret_cast<intptr_t>(template_url_service_android); |
| 275 } | 296 } |
| 276 | 297 |
| 277 // static | 298 // static |
| 278 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) { | 299 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) { |
| 279 return RegisterNativesImpl(env); | 300 return RegisterNativesImpl(env); |
| 280 } | 301 } |
| OLD | NEW |