| Index: chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
|
| diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fae5371997c525d31495921df811931aafe5020e
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
|
| @@ -0,0 +1,174 @@
|
| +// Copyright (c) 2012 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.
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/message_loop.h"
|
| +#include "base/time.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/autofill/autofill_metrics.h"
|
| +#include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h"
|
| +#include "chrome/browser/ui/autofill/autofill_dialog_view.h"
|
| +#include "chrome/browser/ui/browser.h"
|
| +#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| +#include "chrome/common/form_data.h"
|
| +#include "chrome/common/form_field_data.h"
|
| +#include "chrome/test/base/in_process_browser_test.h"
|
| +#include "content/public/test/test_utils.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace autofill {
|
| +
|
| +namespace {
|
| +
|
| +void MockCallback(const FormStructure*) {}
|
| +
|
| +class MockAutofillMetrics : public AutofillMetrics {
|
| + public:
|
| + MockAutofillMetrics()
|
| + : dialog_type_(static_cast<DialogType>(-1)),
|
| + metric_(static_cast<AutofillMetrics::DialogDismissalAction>(-1)) {}
|
| + virtual ~MockAutofillMetrics() {}
|
| +
|
| + // AutofillMetrics:
|
| + virtual void LogRequestAutocompleteUiDuration(
|
| + const base::TimeDelta& duration,
|
| + DialogType dialog_type,
|
| + DialogDismissalAction dismissal_action) const OVERRIDE {
|
| + // Ignore constness for testing.
|
| + MockAutofillMetrics* mutable_this = const_cast<MockAutofillMetrics*>(this);
|
| + mutable_this->dialog_type_ = dialog_type;
|
| + mutable_this->metric_ = dismissal_action;
|
| + }
|
| +
|
| + DialogType dialog_type() const { return dialog_type_; }
|
| + AutofillMetrics::DialogDismissalAction metric() const { return metric_; }
|
| +
|
| + private:
|
| + DialogType dialog_type_;
|
| + AutofillMetrics::DialogDismissalAction metric_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MockAutofillMetrics);
|
| +};
|
| +
|
| +class TestAutofillDialogController : public AutofillDialogControllerImpl {
|
| + public:
|
| + TestAutofillDialogController(content::WebContents* contents,
|
| + const FormData& form_data,
|
| + const AutofillMetrics& metric_logger,
|
| + const DialogType dialog_type)
|
| + : AutofillDialogControllerImpl(contents,
|
| + form_data,
|
| + GURL(),
|
| + content::SSLStatus(),
|
| + metric_logger,
|
| + dialog_type,
|
| + base::Bind(&MockCallback)) {
|
| + }
|
| +
|
| + virtual ~TestAutofillDialogController() {}
|
| +
|
| + virtual void ViewClosed(DialogAction action) OVERRIDE {
|
| + AutofillDialogControllerImpl::ViewClosed(action);
|
| + MessageLoop::current()->Quit();
|
| + }
|
| +
|
| + virtual bool InputIsValid(AutofillFieldType type,
|
| + const string16& value) OVERRIDE {
|
| + return true;
|
| + }
|
| +
|
| + // Increase visibility for testing.
|
| + AutofillDialogView* view() { return AutofillDialogControllerImpl::view(); }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(TestAutofillDialogController);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class AutofillDialogControllerTest : public InProcessBrowserTest {
|
| + public:
|
| + AutofillDialogControllerTest() {}
|
| + virtual ~AutofillDialogControllerTest() {}
|
| +
|
| + content::WebContents* GetActiveWebContents() {
|
| + return browser()->tab_strip_model()->GetActiveWebContents();
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(AutofillDialogControllerTest);
|
| +};
|
| +
|
| +// TODO(isherman): Enable this test on other platforms once the UI is
|
| +// implemented on those platforms.
|
| +#if defined(TOOLKIT_VIEWS)
|
| +#define MAYBE_RequestAutocompleteUiDurationMetrics \
|
| + RequestAutocompleteUiDurationMetrics
|
| +#else
|
| +#define MAYBE_RequestAutocompleteUiDurationMetrics \
|
| + DISABLED_RequestAutocompleteUiDurationMetrics
|
| +#endif // defined(TOOLKIT_VIEWS)
|
| +IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest,
|
| + MAYBE_RequestAutocompleteUiDurationMetrics) {
|
| + FormData form;
|
| + form.name = ASCIIToUTF16("TestForm");
|
| + form.method = ASCIIToUTF16("POST");
|
| + form.origin = GURL("http://example.com/form.html");
|
| + form.action = GURL("http://example.com/submit.html");
|
| + form.user_submitted = true;
|
| +
|
| + FormFieldData field;
|
| + field.autocomplete_attribute = "email";
|
| + form.fields.push_back(field);
|
| +
|
| + // Submit the form data.
|
| + {
|
| + MockAutofillMetrics metric_logger;
|
| + TestAutofillDialogController* dialog_controller =
|
| + new TestAutofillDialogController(
|
| + GetActiveWebContents(), form, metric_logger,
|
| + DIALOG_TYPE_REQUEST_AUTOCOMPLETE);
|
| + dialog_controller->Show();
|
| + dialog_controller->view()->SubmitForTesting();
|
| +
|
| + content::RunMessageLoop();
|
| +
|
| + EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, metric_logger.metric());
|
| + EXPECT_EQ(DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric_logger.dialog_type());
|
| + }
|
| +
|
| + // Cancel out of the dialog.
|
| + {
|
| + MockAutofillMetrics metric_logger;
|
| + TestAutofillDialogController* dialog_controller =
|
| + new TestAutofillDialogController(
|
| + GetActiveWebContents(), form, metric_logger,
|
| + DIALOG_TYPE_AUTOCHECKOUT);
|
| + dialog_controller->Show();
|
| + dialog_controller->view()->CancelForTesting();
|
| +
|
| + content::RunMessageLoop();
|
| +
|
| + EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED, metric_logger.metric());
|
| + EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger.dialog_type());
|
| + }
|
| +
|
| + // Take some other action that dismisses the dialog.
|
| + {
|
| + MockAutofillMetrics metric_logger;
|
| + TestAutofillDialogController* dialog_controller =
|
| + new TestAutofillDialogController(
|
| + GetActiveWebContents(), form, metric_logger,
|
| + DIALOG_TYPE_AUTOCHECKOUT);
|
| + dialog_controller->Show();
|
| + dialog_controller->Hide();
|
| +
|
| + content::RunMessageLoop();
|
| +
|
| + EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED, metric_logger.metric());
|
| + EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger.dialog_type());
|
| + }
|
| +}
|
| +
|
| +} // namespace autofill
|
|
|