Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc

Issue 338103003: Password bubble: Ensure that the bubble stays open for at least 1 second. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed base. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/metrics/histogram_samples.h" 5 #include "base/metrics/histogram_samples.h"
6 #include "base/prefs/pref_service.h" 6 #include "base/prefs/pref_service.h"
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "base/test/statistics_delta_reader.h" 8 #include "base/test/statistics_delta_reader.h"
9 #include "base/time/time.h"
9 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h" 10 #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_bubble_model.h"
11 #include "chrome/browser/ui/passwords/manage_passwords_icon.h" 12 #include "chrome/browser/ui/passwords/manage_passwords_icon.h"
12 #include "chrome/browser/ui/passwords/manage_passwords_icon_mock.h" 13 #include "chrome/browser/ui/passwords/manage_passwords_icon_mock.h"
13 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h" 14 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h"
14 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 15 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
15 #include "chrome/test/base/testing_profile.h" 16 #include "chrome/test/base/testing_profile.h"
16 #include "components/autofill/core/common/password_form.h" 17 #include "components/autofill/core/common/password_form.h"
17 #include "components/password_manager/core/browser/password_form_manager.h" 18 #include "components/password_manager/core/browser/password_form_manager.h"
18 #include "components/password_manager/core/browser/stub_password_manager_client. h" 19 #include "components/password_manager/core/browser/stub_password_manager_client. h"
19 #include "components/password_manager/core/browser/stub_password_manager_driver. h" 20 #include "components/password_manager/core/browser/stub_password_manager_driver. h"
20 #include "components/password_manager/core/common/password_manager_ui.h" 21 #include "components/password_manager/core/common/password_manager_ui.h"
21 #include "content/public/test/test_browser_thread_bundle.h" 22 #include "content/public/test/test_browser_thread_bundle.h"
22 #include "content/public/test/web_contents_tester.h" 23 #include "content/public/test/web_contents_tester.h"
23 #include "testing/gmock/include/gmock/gmock.h" 24 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
25 26
27 namespace {
28
29 const int64 kSlowNavigationDelayInMS = 2000;
30 const int64 kQuickNavigationDelayInMS = 500;
31
32 class MockElapsedTimer : public base::ElapsedTimer {
33 public:
34 MockElapsedTimer() {}
35 virtual base::TimeDelta Elapsed() const OVERRIDE { return delta_; }
36
37 void Advance(int64 ms) { delta_ = base::TimeDelta::FromMilliseconds(ms); }
38
39 private:
40 base::TimeDelta delta_;
41
42 DISALLOW_COPY_AND_ASSIGN(MockElapsedTimer);
43 };
44
45 } // namespace
46
26 class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness { 47 class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness {
27 public: 48 public:
28 ManagePasswordsUIControllerTest() {} 49 ManagePasswordsUIControllerTest() {}
29 50
30 virtual void SetUp() OVERRIDE { 51 virtual void SetUp() OVERRIDE {
31 ChromeRenderViewHostTestHarness::SetUp(); 52 ChromeRenderViewHostTestHarness::SetUp();
32 53
33 // Create the test UIController here so that it's bound to 54 // Create the test UIController here so that it's bound to
34 // |test_web_contents_|, and will be retrieved correctly via 55 // |test_web_contents_|, and will be retrieved correctly via
35 // ManagePasswordsUIController::FromWebContents in |controller()|. 56 // ManagePasswordsUIController::FromWebContents in |controller()|.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 // TODO(mkwst): This should be the value of test_form().origin, but 113 // TODO(mkwst): This should be the value of test_form().origin, but
93 // it's being masked by the stub implementation of 114 // it's being masked by the stub implementation of
94 // ManagePasswordsUIControllerMock::PendingCredentials. 115 // ManagePasswordsUIControllerMock::PendingCredentials.
95 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); 116 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin());
96 117
97 ManagePasswordsIconMock mock; 118 ManagePasswordsIconMock mock;
98 controller()->UpdateIconAndBubbleState(&mock); 119 controller()->UpdateIconAndBubbleState(&mock);
99 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state()); 120 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state());
100 } 121 }
101 122
123 TEST_F(ManagePasswordsUIControllerTest, QuickNavigations) {
124 password_manager::StubPasswordManagerClient client;
125 password_manager::StubPasswordManagerDriver driver;
126 password_manager::PasswordFormManager* test_form_manager =
127 new password_manager::PasswordFormManager(
128 NULL, &client, &driver, test_form(), false);
129 controller()->OnPasswordSubmitted(test_form_manager);
130 ManagePasswordsIconMock mock;
131 controller()->UpdateIconAndBubbleState(&mock);
132 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state());
133
134 // Fake-navigate within a second. We expect the bubble's state to persist
135 // if a navigation occurs too quickly for a user to reasonably have been
136 // able to interact with the bubble. This happens on `accounts.google.com`,
137 // for instance.
138 scoped_ptr<MockElapsedTimer> timer(new MockElapsedTimer());
139 timer->Advance(kQuickNavigationDelayInMS);
140 controller()->SetTimer(timer.release());
141 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(),
142 content::FrameNavigateParams());
143 controller()->UpdateIconAndBubbleState(&mock);
144
145 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state());
146 }
147
148 TEST_F(ManagePasswordsUIControllerTest, SlowNavigations) {
149 password_manager::StubPasswordManagerClient client;
150 password_manager::StubPasswordManagerDriver driver;
151 password_manager::PasswordFormManager* test_form_manager =
152 new password_manager::PasswordFormManager(
153 NULL, &client, &driver, test_form(), false);
154 controller()->OnPasswordSubmitted(test_form_manager);
155 ManagePasswordsIconMock mock;
156 controller()->UpdateIconAndBubbleState(&mock);
157 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state());
158
159 // Fake-navigate after a second. We expect the bubble's state to be reset
160 // if a navigation occurs after this limit.
161 scoped_ptr<MockElapsedTimer> timer(new MockElapsedTimer());
162 timer->Advance(kSlowNavigationDelayInMS);
163 controller()->SetTimer(timer.release());
164 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(),
165 content::FrameNavigateParams());
166 controller()->UpdateIconAndBubbleState(&mock);
167
168 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state());
169 }
170
102 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) { 171 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) {
103 // Navigate to a non-webby URL, then see what happens! 172 // Navigate to a non-webby URL, then see what happens!
104 content::WebContentsTester::For(web_contents()) 173 content::WebContentsTester::For(web_contents())
105 ->NavigateAndCommit(GURL("chrome://sign-in")); 174 ->NavigateAndCommit(GURL("chrome://sign-in"));
106 175
107 password_manager::StubPasswordManagerClient client; 176 password_manager::StubPasswordManagerClient client;
108 password_manager::StubPasswordManagerDriver driver; 177 password_manager::StubPasswordManagerDriver driver;
109 password_manager::PasswordFormManager* test_form_manager = 178 password_manager::PasswordFormManager* test_form_manager =
110 new password_manager::PasswordFormManager( 179 new password_manager::PasswordFormManager(
111 NULL, &client, &driver, test_form(), false); 180 NULL, &client, &driver, test_form(), false);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 259
191 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); 260 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state());
192 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); 261 EXPECT_FALSE(controller()->PasswordPendingUserDecision());
193 EXPECT_EQ(test_form().origin, controller()->origin()); 262 EXPECT_EQ(test_form().origin, controller()->origin());
194 263
195 ManagePasswordsIconMock mock; 264 ManagePasswordsIconMock mock;
196 controller()->UpdateIconAndBubbleState(&mock); 265 controller()->UpdateIconAndBubbleState(&mock);
197 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); 266 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state());
198 } 267 }
199 268
OLDNEW
« no previous file with comments | « chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698