Chromium Code Reviews| Index: chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc |
| diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..10bad76e6b2b638cc2c65fd7f212c5e6235a7524 |
| --- /dev/null |
| +++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc |
| @@ -0,0 +1,278 @@ |
| +// Copyright 2014 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/metrics/histogram_samples.h" |
| +#include "base/prefs/pref_service.h" |
| +#include "base/test/statistics_delta_reader.h" |
| +#include "chrome/browser/ui/passwords/manage_passwords_bubble.h" |
| +#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" |
| +#include "chrome/browser/ui/passwords/test_manage_passwords_bubble_ui_controller.h" |
| +#include "chrome/test/base/testing_profile.h" |
| +#include "components/password_manager/core/browser/password_manager_metrics_util.h" |
| +#include "content/public/test/test_browser_thread_bundle.h" |
| +#include "content/public/test/web_contents_tester.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +const char kUIDismissalReasonMetric[] = "PasswordManager.UIDismissalReason"; |
| + |
| +class ManagePasswordsBubbleModelTest : public testing::Test { |
| + public: |
| + ManagePasswordsBubbleModelTest() |
| + : test_web_contents_( |
| + content::WebContentsTester::CreateTestWebContents(&profile_, |
| + NULL)) {} |
| + |
| + virtual void SetUp() OVERRIDE { |
| + // Create the test UIController here so that it's bound to |
| + // |test_web_contents_| and therefore accessible to the model. |
| + new TestManagePasswordsBubbleUIController(test_web_contents_.get()); |
| + |
| + model_.reset(new ManagePasswordsBubbleModel(test_web_contents_.get())); |
| + } |
| + |
| + virtual void TearDown() OVERRIDE { model_.reset(); } |
| + |
| + void PretendPasswordWaiting() { |
| + model_->set_manage_passwords_bubble_state( |
| + ManagePasswordsBubbleModel::PASSWORD_TO_BE_SAVED); |
| + model_->OnBubbleShown(ManagePasswordsBubble::AUTOMATIC); |
| + } |
| + |
| + void PretendManagingPasswords() { |
| + model_->set_manage_passwords_bubble_state( |
| + ManagePasswordsBubbleModel::MANAGE_PASSWORDS); |
| + model_->OnBubbleShown(ManagePasswordsBubble::USER_ACTION); |
| + } |
| + |
| + TestManagePasswordsBubbleUIController* controller() { |
| + return reinterpret_cast<TestManagePasswordsBubbleUIController*>( |
| + ManagePasswordsBubbleUIController::FromWebContents( |
| + test_web_contents_.get())); |
| + } |
| + |
| + protected: |
| + scoped_ptr<ManagePasswordsBubbleModel> model_; |
| + |
| + private: |
| + content::TestBrowserThreadBundle thread_bundle_; |
| + TestingProfile profile_; |
| + scoped_ptr<content::WebContents> test_web_contents_; |
| +}; |
| + |
| +TEST_F(ManagePasswordsBubbleModelTest, DefaultValues) { |
| + EXPECT_EQ(model_->display_disposition(), |
| + password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::NOT_DISPLAYED); |
| + EXPECT_FALSE(controller()->saved_password()); |
| + EXPECT_FALSE(controller()->never_saved_password()); |
| +} |
| + |
| +TEST_F(ManagePasswordsBubbleModelTest, CloseWithoutLogging) { |
| + base::StatisticsDeltaReader statistics_delta_reader; |
| + model_->OnCloseWithoutLogging(); |
| + model_->OnBubbleHidden(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::NOT_DISPLAYED); |
| + EXPECT_FALSE(controller()->saved_password()); |
| + EXPECT_FALSE(controller()->never_saved_password()); |
| + |
| + scoped_ptr<base::HistogramSamples> samples( |
| + statistics_delta_reader.GetHistogramSamplesSinceCreation( |
| + kUIDismissalReasonMetric)); |
| + EXPECT_EQ(NULL, samples.get()); |
| +} |
| + |
| +TEST_F(ManagePasswordsBubbleModelTest, CloseWithoutInteraction) { |
| + base::StatisticsDeltaReader statistics_delta_reader; |
| + PretendPasswordWaiting(); |
| + model_->OnBubbleHidden(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::NO_DIRECT_INTERACTION); |
| + EXPECT_FALSE(controller()->saved_password()); |
| + EXPECT_FALSE(controller()->never_saved_password()); |
| + |
| + scoped_ptr<base::HistogramSamples> samples( |
| + statistics_delta_reader.GetHistogramSamplesSinceCreation( |
| + kUIDismissalReasonMetric)); |
| + EXPECT_EQ( |
| + 1, |
| + samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE)); |
| + EXPECT_EQ(0, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_NEVER)); |
| + EXPECT_EQ(0, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE)); |
| +} |
| + |
| +TEST_F(ManagePasswordsBubbleModelTest, ClickSave) { |
| + base::StatisticsDeltaReader statistics_delta_reader; |
| + PretendPasswordWaiting(); |
| + model_->OnSaveClicked(); |
| + model_->OnBubbleHidden(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::CLICKED_SAVE); |
| + EXPECT_TRUE(controller()->saved_password()); |
| + EXPECT_FALSE(controller()->never_saved_password()); |
| + |
| + scoped_ptr<base::HistogramSamples> samples( |
| + statistics_delta_reader.GetHistogramSamplesSinceCreation( |
| + kUIDismissalReasonMetric)); |
| + EXPECT_EQ( |
| + 0, |
| + samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION)); |
| + EXPECT_EQ(1, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE)); |
| + EXPECT_EQ(0, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_NEVER)); |
| + EXPECT_EQ(0, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE)); |
| +} |
| + |
| +TEST_F(ManagePasswordsBubbleModelTest, ClickNope) { |
| + base::StatisticsDeltaReader statistics_delta_reader; |
| + PretendPasswordWaiting(); |
| + model_->OnNopeClicked(); |
| + model_->OnBubbleHidden(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::CLICKED_NOPE); |
| + EXPECT_FALSE(controller()->saved_password()); |
| + EXPECT_FALSE(controller()->never_saved_password()); |
| + |
| + scoped_ptr<base::HistogramSamples> samples( |
| + statistics_delta_reader.GetHistogramSamplesSinceCreation( |
| + kUIDismissalReasonMetric)); |
| + EXPECT_EQ( |
| + 0, |
| + samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE)); |
| + EXPECT_EQ(1, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE)); |
| + EXPECT_EQ(0, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_NEVER)); |
| + EXPECT_EQ(0, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE)); |
| +} |
| + |
| +TEST_F(ManagePasswordsBubbleModelTest, ClickNever) { |
| + base::StatisticsDeltaReader statistics_delta_reader; |
| + PretendPasswordWaiting(); |
| + model_->OnNeverForThisSiteClicked(); |
| + model_->OnBubbleHidden(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::CLICKED_NEVER); |
| + EXPECT_FALSE(controller()->saved_password()); |
| + EXPECT_TRUE(controller()->never_saved_password()); |
| + |
| + scoped_ptr<base::HistogramSamples> samples( |
| + statistics_delta_reader.GetHistogramSamplesSinceCreation( |
| + kUIDismissalReasonMetric)); |
| + EXPECT_EQ( |
| + 0, |
| + samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE)); |
| + EXPECT_EQ(1, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_NEVER)); |
| + EXPECT_EQ(0, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE)); |
| +} |
| + |
| +TEST_F(ManagePasswordsBubbleModelTest, ClickManage) { |
| + base::StatisticsDeltaReader statistics_delta_reader; |
| + PretendManagingPasswords(); |
| + model_->OnManageLinkClicked(); |
| + model_->OnBubbleHidden(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::CLICKED_MANAGE); |
| + EXPECT_FALSE(controller()->saved_password()); |
| + EXPECT_FALSE(controller()->never_saved_password()); |
| + |
| + scoped_ptr<base::HistogramSamples> samples( |
| + statistics_delta_reader.GetHistogramSamplesSinceCreation( |
| + kUIDismissalReasonMetric)); |
| + EXPECT_EQ( |
| + 0, |
| + samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE)); |
| + EXPECT_EQ(0, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_NEVER)); |
| + EXPECT_EQ(1, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE)); |
| +} |
| + |
| +TEST_F(ManagePasswordsBubbleModelTest, ClickDone) { |
| + base::StatisticsDeltaReader statistics_delta_reader; |
| + PretendManagingPasswords(); |
| + model_->OnDoneClicked(); |
| + model_->OnBubbleHidden(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::CLICKED_DONE); |
| + EXPECT_FALSE(controller()->saved_password()); |
| + EXPECT_FALSE(controller()->never_saved_password()); |
| + |
| + scoped_ptr<base::HistogramSamples> samples( |
| + statistics_delta_reader.GetHistogramSamplesSinceCreation( |
| + kUIDismissalReasonMetric)); |
| + EXPECT_EQ( |
| + 0, |
| + samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE)); |
| + EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE)); |
| + EXPECT_EQ(0, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_NEVER)); |
| + EXPECT_EQ(0, |
| + samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE)); |
| + EXPECT_EQ(1, samples->GetCount(password_manager::metrics_util::CLICKED_DONE)); |
| +} |
| + |
| +TEST_F(ManagePasswordsBubbleModelTest, DismissalReasons) { |
|
vabr (Chromium)
2014/04/10 12:35:14
optional: these EXPECT_EQ calls could be included
Mike West
2014/04/10 12:46:43
Indeed. I meant to remove this test after creating
|
| + |
|
vabr (Chromium)
2014/04/10 12:35:14
nit: please remove the blank line
Mike West
2014/04/10 12:46:43
Done.
|
| + model_->OnDoneClicked(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::CLICKED_DONE); |
| + |
| + model_->OnManageLinkClicked(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::CLICKED_MANAGE); |
| + |
| + model_->OnNeverForThisSiteClicked(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::CLICKED_NEVER); |
| + |
| + model_->OnNopeClicked(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::CLICKED_NOPE); |
| + |
| + model_->OnSaveClicked(); |
| + EXPECT_EQ(model_->dismissal_reason(), |
| + password_manager::metrics_util::CLICKED_SAVE); |
| +} |
| + |
| +TEST_F(ManagePasswordsBubbleModelTest, WaitingToSavePassword) { |
| + EXPECT_FALSE(model_->WaitingToSavePassword()); |
| + |
| + model_->set_manage_passwords_bubble_state( |
| + ManagePasswordsBubbleModel::PASSWORD_TO_BE_SAVED); |
| + EXPECT_TRUE(model_->WaitingToSavePassword()); |
| +} |
| + |
| +/* |
|
vabr (Chromium)
2014/04/10 12:35:14
Did you mean to remove this?
If you meant to disab
Mike West
2014/04/10 12:46:43
Meant to kill this, thanks!
|
| +TEST_F(ManagePasswordsBubbleModelTest, DismissalMetrics) { |
| + |
| + |
| + scoped_ptr<base::HistogramSamples> samples( |
| + statistics_delta_reader.GetHistogramSamplesSinceCreation( |
| + kRequestThrottledHistogramName)); |
| + ASSERT_EQ(2, samples->GetCount(0)); |
| + ASSERT_EQ(0, samples->GetCount(1)); |
| + |
| +} |
| +*/ |