autofill_dialog_controller_android.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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
17class Profile;
18
19namespace autofill {
20
21// This class defines the form-filling host and JNI glue for the Java-side
22// implementation of the requestAutocomplete dialog.
23class 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  base::WeakPtrFactory<AutofillDialogControllerAndroid>
98      weak_ptr_factory_;
99
100  // Whether the latency to display to the UI was logged to UMA yet.
101  bool was_ui_latency_logged_;
102
103  // The corresponding java object.
104  base::android::ScopedJavaGlobalRef<jobject> java_object_;
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_
112