Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/android/omnibox/autocomplete_controller_android.h" | 5 #include "chrome/browser/android/omnibox/autocomplete_controller_android.h" |
| 6 | 6 |
| 7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
| 8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
| 9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
| 10 #include "base/strings/string16.h" | 10 #include "base/strings/string16.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 108 // Nothing to do here, the results have been cached. | 108 // Nothing to do here, the results have been cached. |
| 109 // We don't want to trigger deletion here because this is being called by the | 109 // We don't want to trigger deletion here because this is being called by the |
| 110 // AutocompleteController object. | 110 // AutocompleteController object. |
| 111 } | 111 } |
| 112 | 112 |
| 113 } // namespace | 113 } // namespace |
| 114 | 114 |
| 115 AutocompleteControllerAndroid::AutocompleteControllerAndroid(Profile* profile) | 115 AutocompleteControllerAndroid::AutocompleteControllerAndroid(Profile* profile) |
| 116 : autocomplete_controller_(new AutocompleteController( | 116 : autocomplete_controller_(new AutocompleteController( |
| 117 profile, this, kAndroidAutocompleteProviders)), | 117 profile, this, kAndroidAutocompleteProviders)), |
| 118 inside_classify_(false), | 118 inside_synchronous_start_(false), |
| 119 profile_(profile) { | 119 profile_(profile) { |
| 120 } | 120 } |
| 121 | 121 |
| 122 void AutocompleteControllerAndroid::Start(JNIEnv* env, | 122 void AutocompleteControllerAndroid::Start(JNIEnv* env, |
| 123 jobject obj, | 123 jobject obj, |
| 124 jstring j_text, | 124 jstring j_text, |
| 125 jstring j_desired_tld, | 125 jstring j_desired_tld, |
| 126 jstring j_current_url, | 126 jstring j_current_url, |
| 127 bool prevent_inline_autocomplete, | 127 bool prevent_inline_autocomplete, |
| 128 bool prefer_keyword, | 128 bool prefer_keyword, |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 152 autocomplete_controller_->Start(input_); | 152 autocomplete_controller_->Start(input_); |
| 153 } | 153 } |
| 154 | 154 |
| 155 ScopedJavaLocalRef<jobject> AutocompleteControllerAndroid::Classify( | 155 ScopedJavaLocalRef<jobject> AutocompleteControllerAndroid::Classify( |
| 156 JNIEnv* env, | 156 JNIEnv* env, |
| 157 jobject obj, | 157 jobject obj, |
| 158 jstring j_text) { | 158 jstring j_text) { |
| 159 if (!autocomplete_controller_) | 159 if (!autocomplete_controller_) |
| 160 return ScopedJavaLocalRef<jobject>(); | 160 return ScopedJavaLocalRef<jobject>(); |
| 161 | 161 |
| 162 inside_classify_ = true; | 162 inside_synchronous_start_ = true; |
| 163 Start(env, obj, j_text, NULL, NULL, true, false, false, false); | 163 Start(env, obj, j_text, NULL, NULL, true, false, false, false); |
| 164 inside_classify_ = false; | 164 inside_synchronous_start_ = false; |
| 165 DCHECK(autocomplete_controller_->done()); | 165 DCHECK(autocomplete_controller_->done()); |
| 166 const AutocompleteResult& result = autocomplete_controller_->result(); | 166 const AutocompleteResult& result = autocomplete_controller_->result(); |
| 167 if (result.empty()) | 167 if (result.empty()) |
| 168 return ScopedJavaLocalRef<jobject>(); | 168 return ScopedJavaLocalRef<jobject>(); |
| 169 | 169 |
| 170 return BuildOmniboxSuggestion(env, *result.begin()); | 170 return BuildOmniboxSuggestion(env, *result.begin()); |
| 171 } | 171 } |
| 172 | 172 |
| 173 void AutocompleteControllerAndroid::StartZeroSuggest( | 173 void AutocompleteControllerAndroid::StartZeroSuggest( |
| 174 JNIEnv* env, | 174 JNIEnv* env, |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 267 return ScopedJavaLocalRef<jstring>(); | 267 return ScopedJavaLocalRef<jstring>(); |
| 268 | 268 |
| 269 AutocompleteMatch match( | 269 AutocompleteMatch match( |
| 270 autocomplete_controller_->result().match_at(selected_index)); | 270 autocomplete_controller_->result().match_at(selected_index)); |
| 271 autocomplete_controller_->UpdateMatchDestinationURL( | 271 autocomplete_controller_->UpdateMatchDestinationURL( |
| 272 base::TimeDelta::FromMilliseconds(elapsed_time_since_input_change), | 272 base::TimeDelta::FromMilliseconds(elapsed_time_since_input_change), |
| 273 &match); | 273 &match); |
| 274 return ConvertUTF8ToJavaString(env, match.destination_url.spec()); | 274 return ConvertUTF8ToJavaString(env, match.destination_url.spec()); |
| 275 } | 275 } |
| 276 | 276 |
| 277 ScopedJavaLocalRef<jobject> | |
| 278 AutocompleteControllerAndroid::GetTopSynchronousMatch(JNIEnv* env, | |
|
Yusuf
2014/06/05 21:56:06
One question is the difference between this and cl
| |
| 279 jobject obj, | |
| 280 jstring query) { | |
| 281 if (!autocomplete_controller_) | |
| 282 return ScopedJavaLocalRef<jobject>(); | |
| 283 | |
| 284 base::string16 text(ConvertJavaStringToUTF16(env, query)); | |
| 285 // Request synchronous matches only. | |
| 286 AutocompleteInput input(text, | |
| 287 base::string16::npos, | |
| 288 base::string16(), | |
| 289 GURL(), | |
| 290 AutocompleteInput::INVALID_SPEC, | |
| 291 false, | |
| 292 false, | |
| 293 false, | |
| 294 false); | |
| 295 inside_synchronous_start_ = true; | |
| 296 autocomplete_controller_->Start(input); | |
| 297 inside_synchronous_start_ = false; | |
| 298 DCHECK(autocomplete_controller_->done()); | |
| 299 const AutocompleteResult& result = autocomplete_controller_->result(); | |
| 300 if (result.empty()) | |
| 301 return ScopedJavaLocalRef<jobject>(); | |
| 302 | |
| 303 return BuildOmniboxSuggestion(env, *result.begin()); | |
| 304 } | |
| 305 | |
| 277 void AutocompleteControllerAndroid::Shutdown() { | 306 void AutocompleteControllerAndroid::Shutdown() { |
| 278 autocomplete_controller_.reset(); | 307 autocomplete_controller_.reset(); |
| 279 | 308 |
| 280 JNIEnv* env = AttachCurrentThread(); | 309 JNIEnv* env = AttachCurrentThread(); |
| 281 ScopedJavaLocalRef<jobject> java_bridge = | 310 ScopedJavaLocalRef<jobject> java_bridge = |
| 282 weak_java_autocomplete_controller_android_.get(env); | 311 weak_java_autocomplete_controller_android_.get(env); |
| 283 if (java_bridge.obj()) | 312 if (java_bridge.obj()) |
| 284 Java_AutocompleteController_notifyNativeDestroyed(env, java_bridge.obj()); | 313 Java_AutocompleteController_notifyNativeDestroyed(env, java_bridge.obj()); |
| 285 | 314 |
| 286 weak_java_autocomplete_controller_android_.reset(); | 315 weak_java_autocomplete_controller_android_.reset(); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 326 AutocompleteControllerAndroid::~AutocompleteControllerAndroid() { | 355 AutocompleteControllerAndroid::~AutocompleteControllerAndroid() { |
| 327 } | 356 } |
| 328 | 357 |
| 329 void AutocompleteControllerAndroid::InitJNI(JNIEnv* env, jobject obj) { | 358 void AutocompleteControllerAndroid::InitJNI(JNIEnv* env, jobject obj) { |
| 330 weak_java_autocomplete_controller_android_ = | 359 weak_java_autocomplete_controller_android_ = |
| 331 JavaObjectWeakGlobalRef(env, obj); | 360 JavaObjectWeakGlobalRef(env, obj); |
| 332 } | 361 } |
| 333 | 362 |
| 334 void AutocompleteControllerAndroid::OnResultChanged( | 363 void AutocompleteControllerAndroid::OnResultChanged( |
| 335 bool default_match_changed) { | 364 bool default_match_changed) { |
| 336 if (autocomplete_controller_.get() != NULL && !inside_classify_) | 365 if (autocomplete_controller_.get() != NULL && !inside_synchronous_start_) |
| 337 NotifySuggestionsReceived(autocomplete_controller_->result()); | 366 NotifySuggestionsReceived(autocomplete_controller_->result()); |
| 338 } | 367 } |
| 339 | 368 |
| 340 void AutocompleteControllerAndroid::NotifySuggestionsReceived( | 369 void AutocompleteControllerAndroid::NotifySuggestionsReceived( |
| 341 const AutocompleteResult& autocomplete_result) { | 370 const AutocompleteResult& autocomplete_result) { |
| 342 JNIEnv* env = AttachCurrentThread(); | 371 JNIEnv* env = AttachCurrentThread(); |
| 343 ScopedJavaLocalRef<jobject> java_bridge = | 372 ScopedJavaLocalRef<jobject> java_bridge = |
| 344 weak_java_autocomplete_controller_android_.get(env); | 373 weak_java_autocomplete_controller_android_.get(env); |
| 345 if (!java_bridge.obj()) | 374 if (!java_bridge.obj()) |
| 346 return; | 375 return; |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 499 return; | 528 return; |
| 500 | 529 |
| 501 // ZeroSuggestPrefetcher deletes itself after it's done prefetching. | 530 // ZeroSuggestPrefetcher deletes itself after it's done prefetching. |
| 502 new ZeroSuggestPrefetcher(profile); | 531 new ZeroSuggestPrefetcher(profile); |
| 503 } | 532 } |
| 504 | 533 |
| 505 // Register native methods | 534 // Register native methods |
| 506 bool RegisterAutocompleteControllerAndroid(JNIEnv* env) { | 535 bool RegisterAutocompleteControllerAndroid(JNIEnv* env) { |
| 507 return RegisterNativesImpl(env); | 536 return RegisterNativesImpl(env); |
| 508 } | 537 } |
| OLD | NEW |