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