Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / passwords / manage_passwords_bubble_model_unittest.cc
1 // Copyright 2014 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 #include "base/metrics/histogram_samples.h"
6 #include "base/prefs/pref_service.h"
7 #include "base/strings/utf_string_conversions.h"
8 #include "base/test/statistics_delta_reader.h"
9 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h"
10 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
11 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h"
12 #include "chrome/test/base/testing_profile.h"
13 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
14 #include "components/password_manager/core/common/password_manager_ui.h"
15 #include "content/public/test/test_browser_thread_bundle.h"
16 #include "content/public/test/web_contents_tester.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 const char kUIDismissalReasonMetric[] = "PasswordManager.UIDismissalReason";
20
21 class ManagePasswordsBubbleModelTest : public testing::Test {
22  public:
23   ManagePasswordsBubbleModelTest()
24       : test_web_contents_(
25             content::WebContentsTester::CreateTestWebContents(&profile_,
26                                                               NULL)) {}
27
28   virtual void SetUp() OVERRIDE {
29     // Create the test UIController here so that it's bound to
30     // |test_web_contents_| and therefore accessible to the model.
31     new ManagePasswordsUIControllerMock(test_web_contents_.get());
32
33     model_.reset(new ManagePasswordsBubbleModel(test_web_contents_.get()));
34   }
35
36   virtual void TearDown() OVERRIDE { model_.reset(); }
37
38   void PretendPasswordWaiting() {
39     model_->set_state(password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE);
40     model_->OnBubbleShown(ManagePasswordsBubble::AUTOMATIC);
41     controller()->SetState(
42         password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE);
43   }
44
45   void PretendManagingPasswords() {
46     model_->set_state(password_manager::ui::MANAGE_STATE);
47     model_->OnBubbleShown(ManagePasswordsBubble::USER_ACTION);
48     controller()->SetState(password_manager::ui::MANAGE_STATE);
49   }
50
51   void PretendBlacklisted() {
52     model_->set_state(password_manager::ui::BLACKLIST_STATE);
53     model_->OnBubbleShown(ManagePasswordsBubble::USER_ACTION);
54
55     base::string16 kTestUsername = base::ASCIIToUTF16("test_username");
56     autofill::ConstPasswordFormMap map;
57     map[kTestUsername] = &test_form_;
58     controller()->SetPasswordFormMap(map);
59     controller()->SetState(password_manager::ui::BLACKLIST_STATE);
60   }
61
62   ManagePasswordsUIControllerMock* controller() {
63     return static_cast<ManagePasswordsUIControllerMock*>(
64         ManagePasswordsUIController::FromWebContents(
65             test_web_contents_.get()));
66   }
67
68  protected:
69   scoped_ptr<ManagePasswordsBubbleModel> model_;
70   autofill::PasswordForm test_form_;
71
72  private:
73   content::TestBrowserThreadBundle thread_bundle_;
74   TestingProfile profile_;
75   scoped_ptr<content::WebContents> test_web_contents_;
76 };
77
78 TEST_F(ManagePasswordsBubbleModelTest, DefaultValues) {
79   EXPECT_EQ(model_->display_disposition(),
80             password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING);
81   EXPECT_EQ(model_->dismissal_reason(),
82             password_manager::metrics_util::NOT_DISPLAYED);
83   EXPECT_FALSE(controller()->saved_password());
84   EXPECT_FALSE(controller()->never_saved_password());
85 }
86
87 TEST_F(ManagePasswordsBubbleModelTest, CloseWithoutLogging) {
88   base::StatisticsDeltaReader statistics_delta_reader;
89   model_->OnBubbleHidden();
90   EXPECT_EQ(model_->dismissal_reason(),
91             password_manager::metrics_util::NOT_DISPLAYED);
92   EXPECT_FALSE(controller()->saved_password());
93   EXPECT_FALSE(controller()->never_saved_password());
94
95   scoped_ptr<base::HistogramSamples> samples(
96       statistics_delta_reader.GetHistogramSamplesSinceCreation(
97           kUIDismissalReasonMetric));
98   EXPECT_EQ(NULL, samples.get());
99 }
100
101 TEST_F(ManagePasswordsBubbleModelTest, CloseWithoutInteraction) {
102   base::StatisticsDeltaReader statistics_delta_reader;
103   PretendPasswordWaiting();
104   model_->OnBubbleHidden();
105   EXPECT_EQ(model_->dismissal_reason(),
106             password_manager::metrics_util::NO_DIRECT_INTERACTION);
107   EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE,
108             model_->state());
109   EXPECT_FALSE(controller()->saved_password());
110   EXPECT_FALSE(controller()->never_saved_password());
111
112   scoped_ptr<base::HistogramSamples> samples(
113       statistics_delta_reader.GetHistogramSamplesSinceCreation(
114           kUIDismissalReasonMetric));
115   EXPECT_EQ(
116       1,
117       samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
118   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
119   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
120   EXPECT_EQ(0,
121             samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
122   EXPECT_EQ(0,
123             samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
124   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
125   EXPECT_EQ(
126       0,
127       samples->GetCount(password_manager::metrics_util::CLICKED_UNBLACKLIST));
128 }
129
130 TEST_F(ManagePasswordsBubbleModelTest, ClickSave) {
131   base::StatisticsDeltaReader statistics_delta_reader;
132   PretendPasswordWaiting();
133   model_->OnSaveClicked();
134   model_->OnBubbleHidden();
135   EXPECT_EQ(model_->dismissal_reason(),
136             password_manager::metrics_util::CLICKED_SAVE);
137   EXPECT_EQ(password_manager::ui::MANAGE_STATE, model_->state());
138   EXPECT_TRUE(controller()->saved_password());
139   EXPECT_FALSE(controller()->never_saved_password());
140
141   scoped_ptr<base::HistogramSamples> samples(
142       statistics_delta_reader.GetHistogramSamplesSinceCreation(
143           kUIDismissalReasonMetric));
144   EXPECT_EQ(
145       0,
146       samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
147   EXPECT_EQ(1, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
148   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
149   EXPECT_EQ(0,
150             samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
151   EXPECT_EQ(0,
152             samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
153   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
154   EXPECT_EQ(
155       0,
156       samples->GetCount(password_manager::metrics_util::CLICKED_UNBLACKLIST));
157 }
158
159 TEST_F(ManagePasswordsBubbleModelTest, ClickNope) {
160   base::StatisticsDeltaReader statistics_delta_reader;
161   PretendPasswordWaiting();
162   model_->OnNopeClicked();
163   model_->OnBubbleHidden();
164   EXPECT_EQ(model_->dismissal_reason(),
165             password_manager::metrics_util::CLICKED_NOPE);
166   EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, model_->state());
167   EXPECT_FALSE(controller()->saved_password());
168   EXPECT_FALSE(controller()->never_saved_password());
169
170   scoped_ptr<base::HistogramSamples> samples(
171       statistics_delta_reader.GetHistogramSamplesSinceCreation(
172           kUIDismissalReasonMetric));
173   EXPECT_EQ(
174       0,
175       samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
176   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
177   EXPECT_EQ(1, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
178   EXPECT_EQ(0,
179             samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
180   EXPECT_EQ(0,
181             samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
182   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
183   EXPECT_EQ(
184       0,
185       samples->GetCount(password_manager::metrics_util::CLICKED_UNBLACKLIST));
186 }
187
188 TEST_F(ManagePasswordsBubbleModelTest, ClickNever) {
189   base::StatisticsDeltaReader statistics_delta_reader;
190   PretendPasswordWaiting();
191   model_->OnNeverForThisSiteClicked();
192   model_->OnBubbleHidden();
193   EXPECT_EQ(model_->dismissal_reason(),
194             password_manager::metrics_util::CLICKED_NEVER);
195   EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, model_->state());
196   EXPECT_FALSE(controller()->saved_password());
197   EXPECT_TRUE(controller()->never_saved_password());
198
199   scoped_ptr<base::HistogramSamples> samples(
200       statistics_delta_reader.GetHistogramSamplesSinceCreation(
201           kUIDismissalReasonMetric));
202   EXPECT_EQ(
203       0,
204       samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
205   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
206   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
207   EXPECT_EQ(1,
208             samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
209   EXPECT_EQ(0,
210             samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
211   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
212   EXPECT_EQ(
213       0,
214       samples->GetCount(password_manager::metrics_util::CLICKED_UNBLACKLIST));
215 }
216
217 TEST_F(ManagePasswordsBubbleModelTest, ClickManage) {
218   base::StatisticsDeltaReader statistics_delta_reader;
219   PretendManagingPasswords();
220   model_->OnManageLinkClicked();
221   model_->OnBubbleHidden();
222   EXPECT_EQ(model_->dismissal_reason(),
223             password_manager::metrics_util::CLICKED_MANAGE);
224   EXPECT_EQ(password_manager::ui::MANAGE_STATE, model_->state());
225   EXPECT_FALSE(controller()->saved_password());
226   EXPECT_FALSE(controller()->never_saved_password());
227
228   scoped_ptr<base::HistogramSamples> samples(
229       statistics_delta_reader.GetHistogramSamplesSinceCreation(
230           kUIDismissalReasonMetric));
231   EXPECT_EQ(
232       0,
233       samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
234   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
235   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
236   EXPECT_EQ(0,
237             samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
238   EXPECT_EQ(1,
239             samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
240   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
241   EXPECT_EQ(
242       0,
243       samples->GetCount(password_manager::metrics_util::CLICKED_UNBLACKLIST));
244 }
245
246 TEST_F(ManagePasswordsBubbleModelTest, ClickDone) {
247   base::StatisticsDeltaReader statistics_delta_reader;
248   PretendManagingPasswords();
249   model_->OnDoneClicked();
250   model_->OnBubbleHidden();
251   EXPECT_EQ(model_->dismissal_reason(),
252             password_manager::metrics_util::CLICKED_DONE);
253   EXPECT_EQ(password_manager::ui::MANAGE_STATE, model_->state());
254   EXPECT_FALSE(controller()->saved_password());
255   EXPECT_FALSE(controller()->never_saved_password());
256
257   scoped_ptr<base::HistogramSamples> samples(
258       statistics_delta_reader.GetHistogramSamplesSinceCreation(
259           kUIDismissalReasonMetric));
260   EXPECT_EQ(
261       0,
262       samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
263   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
264   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
265   EXPECT_EQ(0,
266             samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
267   EXPECT_EQ(0,
268             samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
269   EXPECT_EQ(1, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
270   EXPECT_EQ(
271       0,
272       samples->GetCount(password_manager::metrics_util::CLICKED_UNBLACKLIST));
273 }
274
275 TEST_F(ManagePasswordsBubbleModelTest, ClickUnblacklist) {
276   base::StatisticsDeltaReader statistics_delta_reader;
277   PretendBlacklisted();
278   model_->OnUnblacklistClicked();
279   model_->OnBubbleHidden();
280   EXPECT_EQ(model_->dismissal_reason(),
281             password_manager::metrics_util::CLICKED_UNBLACKLIST);
282   EXPECT_EQ(password_manager::ui::MANAGE_STATE, model_->state());
283   EXPECT_FALSE(controller()->saved_password());
284   EXPECT_FALSE(controller()->never_saved_password());
285
286   scoped_ptr<base::HistogramSamples> samples(
287       statistics_delta_reader.GetHistogramSamplesSinceCreation(
288           kUIDismissalReasonMetric));
289   EXPECT_EQ(
290       0,
291       samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
292   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
293   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
294   EXPECT_EQ(0,
295             samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
296   EXPECT_EQ(0,
297             samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
298   EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
299   EXPECT_EQ(
300       1,
301       samples->GetCount(password_manager::metrics_util::CLICKED_UNBLACKLIST));
302 }
303
304 TEST_F(ManagePasswordsBubbleModelTest, PasswordPendingUserDecision) {
305   EXPECT_FALSE(password_manager::ui::IsPendingState(model_->state()));
306
307   model_->set_state(password_manager::ui::INACTIVE_STATE);
308   EXPECT_FALSE(password_manager::ui::IsPendingState(model_->state()));
309   model_->set_state(password_manager::ui::MANAGE_STATE);
310   EXPECT_FALSE(password_manager::ui::IsPendingState(model_->state()));
311   model_->set_state(password_manager::ui::BLACKLIST_STATE);
312   EXPECT_FALSE(password_manager::ui::IsPendingState(model_->state()));
313
314   model_->set_state(password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE);
315   EXPECT_TRUE(password_manager::ui::IsPendingState(model_->state()));
316   model_->set_state(password_manager::ui::PENDING_PASSWORD_STATE);
317   EXPECT_TRUE(password_manager::ui::IsPendingState(model_->state()));
318 }