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
158
159
160
|
// 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/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/singleton.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/browser/autocomplete_controller_delegate.h"
#include "components/omnibox/browser/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,
const base::android::JavaRef<jobject>& obj,
const base::android::JavaRef<jstring>& j_text,
jint j_cursor_pos,
const base::android::JavaRef<jstring>& j_desired_tld,
const base::android::JavaRef<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,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& j_text);
void OnOmniboxFocused(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& j_omnibox_text,
const base::android::JavaParamRef<jstring>& j_current_url,
jboolean is_query_in_omnibox,
jboolean focused_from_fakebox);
void Stop(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
bool clear_result);
void ResetSession(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void OnSuggestionSelected(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jint selected_index,
const base::android::JavaParamRef<jstring>& j_current_url,
jboolean is_query_in_omnibox,
jboolean focused_from_fakebox,
jlong elapsed_time_since_first_modified,
const base::android::JavaParamRef<jobject>& j_web_contents);
void DeleteSuggestion(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
int selected_index);
base::android::ScopedJavaLocalRef<jstring>
UpdateMatchDestinationURLWithQueryFormulationTime(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jint selected_index,
jlong elapsed_time_since_input_change);
// KeyedService:
void Shutdown() override;
class Factory : public BrowserContextKeyedServiceFactory {
public:
static AutocompleteControllerAndroid* GetForProfile(Profile* profile,
JNIEnv* env,
jobject obj);
static Factory* GetInstance();
protected:
content::BrowserContext* GetBrowserContextToUse(
content::BrowserContext* context) const override;
private:
friend struct base::DefaultSingletonTraits<Factory>;
Factory();
~Factory() override;
// BrowserContextKeyedServiceFactory
KeyedService* BuildServiceInstanceFor(
content::BrowserContext* profile) const override;
};
private:
~AutocompleteControllerAndroid() override;
void InitJNI(JNIEnv* env, jobject obj);
// AutocompleteControllerDelegate implementation.
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,
const base::android::JavaRef<jobject>& obj,
const base::android::JavaRef<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_
|