1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ANDROID_OMNIBOX_AUTOCOMPLETE_CONTROLLER_ANDROID_H_
#define CHROME_BROWSER_ANDROID_OMNIBOX_AUTOCOMPLETE_CONTROLLER_ANDROID_H_
#include <string>
#include "base/android/jni_weak_ref.h"
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/singleton.h"
#include "chrome/browser/autocomplete/autocomplete_controller_delegate.h"
#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/metrics/proto/omnibox_event.pb.h"
#include "components/omnibox/autocomplete_input.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/notification_service.h"
class AutocompleteController;
struct AutocompleteMatch;
class AutocompleteResult;
class Profile;
class Tab;
// The native part of the Java AutocompleteController class.
class AutocompleteControllerAndroid : public AutocompleteControllerDelegate,
public KeyedService {
public:
explicit AutocompleteControllerAndroid(Profile* profile);
// Methods that forward to AutocompleteController:
void Start(JNIEnv* env,
jobject obj,
jstring j_text,
jint j_cursor_pos,
jstring j_desired_tld,
jstring j_current_url,
bool prevent_inline_autocomplete,
bool prefer_keyword,
bool allow_exact_keyword_match,
bool best_match_only);
base::android::ScopedJavaLocalRef<jobject> Classify(JNIEnv* env,
jobject obj,
jstring j_text);
void OnOmniboxFocused(JNIEnv* env,
jobject obj,
jstring j_omnibox_text,
jstring j_current_url,
jboolean is_query_in_omnibox,
jboolean focused_from_fakebox);
void Stop(JNIEnv* env, jobject obj, bool clear_result);
void ResetSession(JNIEnv* env, jobject obj);
void OnSuggestionSelected(JNIEnv* env,
jobject obj,
jint selected_index,
jstring j_current_url,
jboolean is_query_in_omnibox,
jboolean focused_from_fakebox,
jlong elapsed_time_since_first_modified,
jobject j_web_contents);
void DeleteSuggestion(JNIEnv* env, jobject obj, int selected_index);
base::android::ScopedJavaLocalRef<jstring>
UpdateMatchDestinationURLWithQueryFormulationTime(
JNIEnv* env,
jobject obj,
jint selected_index,
jlong elapsed_time_since_input_change);
base::android::ScopedJavaLocalRef<jobject> GetTopSynchronousMatch(
JNIEnv* env,
jobject obj,
jstring query);
// KeyedService:
virtual void Shutdown() override;
class Factory : public BrowserContextKeyedServiceFactory {
public:
static AutocompleteControllerAndroid* GetForProfile(Profile* profile,
JNIEnv* env,
jobject obj);
static Factory* GetInstance();
protected:
virtual content::BrowserContext* GetBrowserContextToUse(
content::BrowserContext* context) const override;
private:
friend struct DefaultSingletonTraits<Factory>;
Factory();
virtual ~Factory();
// BrowserContextKeyedServiceFactory
virtual KeyedService* BuildServiceInstanceFor(
content::BrowserContext* profile) const override;
};
private:
virtual ~AutocompleteControllerAndroid();
void InitJNI(JNIEnv* env, jobject obj);
// AutocompleteControllerDelegate implementation.
virtual void OnResultChanged(bool default_match_changed) override;
// Notifies the Java AutocompleteController that suggestions were received
// based on the text the user typed in last.
void NotifySuggestionsReceived(
const AutocompleteResult& autocomplete_result);
// Classifies the type of page we are on.
metrics::OmniboxEventProto::PageClassification ClassifyPage(
const GURL& gurl,
bool is_query_in_omnibox,
bool focused_from_fakebox) const;
base::android::ScopedJavaLocalRef<jobject> BuildOmniboxSuggestion(
JNIEnv* env, const AutocompleteMatch& match);
// Converts destination_url (which is in its canonical form or punycode) to a
// user-friendly URL by looking up accept languages of the current profile.
// e.g. http://xn--6q8b.kr/ --> 한.kr
base::string16 FormatURLUsingAcceptLanguages(GURL url);
// A helper method for fetching the top synchronous autocomplete result.
// The |prevent_inline_autocomplete| flag is passed to the AutocompleteInput
// object, see documentation there for its description.
base::android::ScopedJavaLocalRef<jobject> GetTopSynchronousResult(
JNIEnv* env,
jobject obj,
jstring j_text,
bool prevent_inline_autocomplete);
scoped_ptr<AutocompleteController> autocomplete_controller_;
// Last input we sent to the autocomplete controller.
AutocompleteInput input_;
// Whether we're currently inside a call to Start() that's called
// from GetTopSynchronousResult().
bool inside_synchronous_start_;
JavaObjectWeakGlobalRef weak_java_autocomplete_controller_android_;
Profile* profile_;
DISALLOW_COPY_AND_ASSIGN(AutocompleteControllerAndroid);
};
// Registers the LocationBar native method.
bool RegisterAutocompleteControllerAndroid(JNIEnv* env);
#endif // CHROME_BROWSER_ANDROID_OMNIBOX_AUTOCOMPLETE_CONTROLLER_ANDROID_H_
|