manage_passwords_bubble_view_browsertest.cc revision 010d83a9304c5a91596085d917d248abff47903a
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Copyright 2014 The Chromium Authors. All rights reserved.
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Use of this source code is governed by a BSD-style license that can be
3c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt// found in the LICENSE file.
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt#include "chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h"
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "base/metrics/histogram_samples.h"
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "chrome/browser/ui/browser.h"
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "chrome/browser/ui/tabs/tab_strip_model.h"
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "chrome/browser/ui/views/passwords/manage_passwords_view_test.h"
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "components/password_manager/core/browser/password_manager_metrics_util.h"
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "components/password_manager/core/browser/stub_password_manager_client.h"
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "testing/gtest/include/gtest/gtest.h"
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtnamespace {
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtconst char kDisplayDispositionMetric[] = "PasswordBubble.DisplayDisposition";
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}  // namespace
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef ManagePasswordsViewTest ManagePasswordsBubbleViewTest;
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
23b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry ShmidtIN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest, BasicOpenAndClose) {
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_FALSE(ManagePasswordsBubbleView::IsShowing());
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ManagePasswordsBubbleView::ShowBubble(
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      browser()->tab_strip_model()->GetActiveWebContents(),
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      ManagePasswordsBubble::USER_ACTION);
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_TRUE(ManagePasswordsBubbleView::IsShowing());
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ManagePasswordsBubbleView::CloseBubble();
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_FALSE(ManagePasswordsBubbleView::IsShowing());
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
32391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt  // And, just for grins, ensure that we can re-open the bubble.
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ManagePasswordsBubbleView::ShowBubble(
34ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt      browser()->tab_strip_model()->GetActiveWebContents(),
35ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt      ManagePasswordsBubble::USER_ACTION);
36ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt  EXPECT_TRUE(ManagePasswordsBubbleView::IsShowing());
37ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt  ManagePasswordsBubbleView::CloseBubble();
38ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt  EXPECT_FALSE(ManagePasswordsBubbleView::IsShowing());
39ea69e84a6f4455c59348485895d3d5e3af77a65bDmitry Shmidt}
4068d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt
4168d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt// Same as 'BasicOpenAndClose', but use the command rather than the static
4268d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt// method directly.
4368d0e3ed07847339aedfac8e02f50db68c702e52Dmitry ShmidtIN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest, CommandControlsBubble) {
4468d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt  // The command only works if the icon is visible, so get into management mode.
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  SetupManagingPasswords();
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_FALSE(ManagePasswordsBubbleView::IsShowing());
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ExecuteManagePasswordsCommand();
488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_TRUE(ManagePasswordsBubbleView::IsShowing());
498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ManagePasswordsBubbleView::CloseBubble();
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_FALSE(ManagePasswordsBubbleView::IsShowing());
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // And, just for grins, ensure that we can re-open the bubble.
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ExecuteManagePasswordsCommand();
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_TRUE(ManagePasswordsBubbleView::IsShowing());
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ManagePasswordsBubbleView::CloseBubble();
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_FALSE(ManagePasswordsBubbleView::IsShowing());
57d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt}
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtIN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest,
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                       CommandExecutionInManagingState) {
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  SetupManagingPasswords();
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ExecuteManagePasswordsCommand();
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  scoped_ptr<base::HistogramSamples> samples(
6568d0e3ed07847339aedfac8e02f50db68c702e52Dmitry Shmidt      GetSamples(kDisplayDispositionMetric));
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_EQ(
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      0,
68b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt      samples->GetCount(
69b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt          password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING));
70b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt  EXPECT_EQ(0,
71b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt            samples->GetCount(
72b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt                password_manager::metrics_util::MANUAL_WITH_PASSWORD_PENDING));
73b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt  EXPECT_EQ(1,
74b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt            samples->GetCount(
75b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt                password_manager::metrics_util::MANUAL_MANAGE_PASSWORDS));
76b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt}
77b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt
78b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry ShmidtIN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest,
79391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt                       CommandExecutionInAutomaticState) {
80391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt  // Open with pending password: automagical!
81391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt  SetupPendingPassword();
82391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt
83391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt  scoped_ptr<base::HistogramSamples> samples(
84391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt      GetSamples(kDisplayDispositionMetric));
85391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt  EXPECT_EQ(
86391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt      1,
87391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt      samples->GetCount(
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt          password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING));
898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_EQ(0,
901f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt            samples->GetCount(
91c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt                password_manager::metrics_util::MANUAL_WITH_PASSWORD_PENDING));
921f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt  EXPECT_EQ(0,
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt            samples->GetCount(
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                password_manager::metrics_util::MANUAL_MANAGE_PASSWORDS));
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtIN_PROC_BROWSER_TEST_F(ManagePasswordsBubbleViewTest,
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                       CommandExecutionInPendingState) {
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // Open once with pending password: automagical!
1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  SetupPendingPassword();
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ManagePasswordsBubbleView::CloseBubble();
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // This opening should be measured as manual.
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ExecuteManagePasswordsCommand();
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  scoped_ptr<base::HistogramSamples> samples(
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      GetSamples(kDisplayDispositionMetric));
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_EQ(
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      1,
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      samples->GetCount(
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt          password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING));
1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_EQ(1,
1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt            samples->GetCount(
1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                password_manager::metrics_util::MANUAL_WITH_PASSWORD_PENDING));
1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  EXPECT_EQ(0,
1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt            samples->GetCount(
1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                password_manager::metrics_util::MANUAL_MANAGE_PASSWORDS));
1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt