1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_ANDROID_AUTOFILL_AUTOFILL_DIALOG_CONTROLLER_ANDROID_H_
6 #define CHROME_BROWSER_UI_ANDROID_AUTOFILL_AUTOFILL_DIALOG_CONTROLLER_ANDROID_H_
10 #include "base/android/jni_string.h"
11 #include "base/android/scoped_java_ref.h"
12 #include "base/time/time.h"
13 #include "chrome/browser/ui/autofill/autofill_dialog_controller.h"
14 #include "chrome/browser/ui/autofill/autofill_dialog_types.h"
15 #include "components/autofill/core/browser/autofill_client.h"
21 // This class defines the form-filling host and JNI glue for the Java-side
22 // implementation of the requestAutocomplete dialog.
23 class AutofillDialogControllerAndroid : public AutofillDialogController {
25 // Creates an instance of the AutofillDialogControllerAndroid.
26 static base::WeakPtr<AutofillDialogController> Create(
27 content::WebContents* contents,
28 const FormData& form_structure,
29 const GURL& source_url,
30 const AutofillClient::ResultCallback& callback);
32 virtual ~AutofillDialogControllerAndroid();
34 // AutofillDialogController implementation:
35 virtual void Show() OVERRIDE;
36 virtual void Hide() OVERRIDE;
37 virtual void TabActivated() OVERRIDE;
39 // JNI bindings for Java-side AutofillDialogDelegate:
40 void DialogCancel(JNIEnv* env, jobject obj);
41 void DialogContinue(JNIEnv* env,
44 jboolean last_used_choice_is_autofill,
45 jstring last_used_account_name,
46 jstring last_used_billing,
47 jstring last_used_shipping,
48 jstring last_used_credit_card);
50 // Establishes JNI bindings.
51 static bool RegisterAutofillDialogControllerAndroid(JNIEnv* env);
54 AutofillDialogControllerAndroid(
55 content::WebContents* contents,
56 const FormData& form_structure,
57 const GURL& source_url,
58 const AutofillClient::ResultCallback& callback);
60 const AutofillMetrics& GetMetricLogger() const {
61 return metric_logger_;
64 // Logs metrics when the dialog is submitted.
65 void LogOnFinishSubmitMetrics();
67 // Logs metrics when the dialog is canceled.
68 void LogOnCancelMetrics();
70 // The |profile| for |contents_|.
71 Profile* const profile_;
73 // The WebContents where the Autocomplete/Checkout action originated.
74 content::WebContents* const contents_;
76 // For logging UMA metrics.
77 const AutofillMetrics metric_logger_;
78 base::Time dialog_shown_timestamp_;
79 AutofillMetrics::DialogInitialUserStateMetric initial_user_state_;
81 FormStructure form_structure_;
83 // Whether the URL visible to the user when this dialog was requested to be
84 // invoked is the same as |source_url_|.
85 bool invoked_from_same_origin_;
87 // The URL of the invoking site.
90 // The callback via which we return the collected data.
91 AutofillClient::ResultCallback callback_;
93 // Whether |form_structure_| has asked for any details that would indicate
94 // we should show a shipping section.
95 bool cares_about_shipping_;
97 // Whether the latency to display to the UI was logged to UMA yet.
98 bool was_ui_latency_logged_;
100 // The corresponding java object.
101 base::android::ScopedJavaGlobalRef<jobject> java_object_;
103 base::WeakPtrFactory<AutofillDialogControllerAndroid>
106 DISALLOW_COPY_AND_ASSIGN(AutofillDialogControllerAndroid);
109 } // namespace autofill
111 #endif // CHROME_BROWSER_UI_ANDROID_AUTOFILL_AUTOFILL_DIALOG_CONTROLLER_ANDROID_H_