Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / android / autofill / autofill_dialog_controller_android.h
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.
4
5 #ifndef CHROME_BROWSER_UI_ANDROID_AUTOFILL_AUTOFILL_DIALOG_CONTROLLER_ANDROID_H_
6 #define CHROME_BROWSER_UI_ANDROID_AUTOFILL_AUTOFILL_DIALOG_CONTROLLER_ANDROID_H_
7
8 #include <jni.h>
9
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"
16
17 class Profile;
18
19 namespace autofill {
20
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 {
24  public:
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);
31
32   virtual ~AutofillDialogControllerAndroid();
33
34   // AutofillDialogController implementation:
35   virtual void Show() OVERRIDE;
36   virtual void Hide() OVERRIDE;
37   virtual void TabActivated() OVERRIDE;
38
39   // JNI bindings for Java-side AutofillDialogDelegate:
40   void DialogCancel(JNIEnv* env, jobject obj);
41   void DialogContinue(JNIEnv* env,
42                       jobject obj,
43                       jobject full_wallet,
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);
49
50   // Establishes JNI bindings.
51   static bool RegisterAutofillDialogControllerAndroid(JNIEnv* env);
52
53  private:
54   AutofillDialogControllerAndroid(
55       content::WebContents* contents,
56       const FormData& form_structure,
57       const GURL& source_url,
58       const AutofillClient::ResultCallback& callback);
59
60   const AutofillMetrics& GetMetricLogger() const {
61     return metric_logger_;
62   }
63
64   // Logs metrics when the dialog is submitted.
65   void LogOnFinishSubmitMetrics();
66
67   // Logs metrics when the dialog is canceled.
68   void LogOnCancelMetrics();
69
70   // The |profile| for |contents_|.
71   Profile* const profile_;
72
73   // The WebContents where the Autocomplete/Checkout action originated.
74   content::WebContents* const contents_;
75
76   // For logging UMA metrics.
77   const AutofillMetrics metric_logger_;
78   base::Time dialog_shown_timestamp_;
79   AutofillMetrics::DialogInitialUserStateMetric initial_user_state_;
80
81   FormStructure form_structure_;
82
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_;
86
87   // The URL of the invoking site.
88   GURL source_url_;
89
90   // The callback via which we return the collected data.
91   AutofillClient::ResultCallback callback_;
92
93   // Whether |form_structure_| has asked for any details that would indicate
94   // we should show a shipping section.
95   bool cares_about_shipping_;
96
97   // Whether the latency to display to the UI was logged to UMA yet.
98   bool was_ui_latency_logged_;
99
100   // The corresponding java object.
101   base::android::ScopedJavaGlobalRef<jobject> java_object_;
102
103   base::WeakPtrFactory<AutofillDialogControllerAndroid>
104       weak_ptr_factory_;
105
106   DISALLOW_COPY_AND_ASSIGN(AutofillDialogControllerAndroid);
107 };
108
109 }  // namespace autofill
110
111 #endif  // CHROME_BROWSER_UI_ANDROID_AUTOFILL_AUTOFILL_DIALOG_CONTROLLER_ANDROID_H_