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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
index d4bb9e71f6d0b316071fd605bb040bd2f99634f2..08f78fdd2d0ad7bb726826307e97f91816f79355 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
@@ -6,6 +6,7 @@
#include "base/prefs/pref_service.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/statistics_delta_reader.h"
+#include "base/time/time.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/manage_passwords_icon.h"
@@ -23,6 +24,26 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+namespace {
+
+const int64 kSlowNavigationDelayInMS = 2000;
+const int64 kQuickNavigationDelayInMS = 500;
+
+class MockElapsedTimer : public base::ElapsedTimer {
+ public:
+ MockElapsedTimer() {}
+ virtual base::TimeDelta Elapsed() const OVERRIDE { return delta_; }
+
+ void Advance(int64 ms) { delta_ = base::TimeDelta::FromMilliseconds(ms); }
+
+ private:
+ base::TimeDelta delta_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockElapsedTimer);
+};
+
+} // namespace
+
class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness {
public:
ManagePasswordsUIControllerTest() {}
@@ -99,6 +120,54 @@ TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) {
EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state());
}
+TEST_F(ManagePasswordsUIControllerTest, QuickNavigations) {
+ password_manager::StubPasswordManagerClient client;
+ password_manager::StubPasswordManagerDriver driver;
+ password_manager::PasswordFormManager* test_form_manager =
+ new password_manager::PasswordFormManager(
+ NULL, &client, &driver, test_form(), false);
+ controller()->OnPasswordSubmitted(test_form_manager);
+ ManagePasswordsIconMock mock;
+ controller()->UpdateIconAndBubbleState(&mock);
+ EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state());
+
+ // Fake-navigate within a second. We expect the bubble's state to persist
+ // if a navigation occurs too quickly for a user to reasonably have been
+ // able to interact with the bubble. This happens on `accounts.google.com`,
+ // for instance.
+ scoped_ptr<MockElapsedTimer> timer(new MockElapsedTimer());
+ timer->Advance(kQuickNavigationDelayInMS);
+ controller()->SetTimer(timer.release());
+ controller()->DidNavigateMainFrame(content::LoadCommittedDetails(),
+ content::FrameNavigateParams());
+ controller()->UpdateIconAndBubbleState(&mock);
+
+ EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state());
+}
+
+TEST_F(ManagePasswordsUIControllerTest, SlowNavigations) {
+ password_manager::StubPasswordManagerClient client;
+ password_manager::StubPasswordManagerDriver driver;
+ password_manager::PasswordFormManager* test_form_manager =
+ new password_manager::PasswordFormManager(
+ NULL, &client, &driver, test_form(), false);
+ controller()->OnPasswordSubmitted(test_form_manager);
+ ManagePasswordsIconMock mock;
+ controller()->UpdateIconAndBubbleState(&mock);
+ EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, mock.state());
+
+ // Fake-navigate after a second. We expect the bubble's state to be reset
+ // if a navigation occurs after this limit.
+ scoped_ptr<MockElapsedTimer> timer(new MockElapsedTimer());
+ timer->Advance(kSlowNavigationDelayInMS);
+ controller()->SetTimer(timer.release());
+ controller()->DidNavigateMainFrame(content::LoadCommittedDetails(),
+ content::FrameNavigateParams());
+ controller()->UpdateIconAndBubbleState(&mock);
+
+ EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state());
+}
+
TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) {
// Navigate to a non-webby URL, then see what happens!
content::WebContentsTester::For(web_contents())
« 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