Index: components/password_manager/core/browser/password_manager_unittest.cc |
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc |
index 6fb28b50c74ea92074b4e8265f75e375a15f5cc3..d6b90e581494e9c386146545730ed7b9e33ca81d 100644 |
--- a/components/password_manager/core/browser/password_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_manager_unittest.cc |
@@ -11,6 +11,8 @@ |
#include "base/message_loop/message_loop.h" |
#include "base/strings/string_util.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "components/password_manager/core/browser/log_receiver.h" |
+#include "components/password_manager/core/browser/log_router.h" |
#include "components/password_manager/core/browser/mock_password_store.h" |
#include "components/password_manager/core/browser/password_autofill_manager.h" |
#include "components/password_manager/core/browser/password_manager_driver.h" |
@@ -35,6 +37,8 @@ namespace password_manager { |
namespace { |
+const char kTestText[] = "abcd1234"; |
+ |
class MockStoreResultFilter : public CredentialsFilter { |
public: |
MOCK_CONST_METHOD1(FilterResultsPtr, |
@@ -67,6 +71,7 @@ class MockPasswordManagerClient : public StubPasswordManagerClient { |
MOCK_METHOD0(GetPrefs, PrefService*()); |
MOCK_METHOD0(GetDriver, PasswordManagerDriver*()); |
MOCK_CONST_METHOD0(GetStoreResultFilter, const CredentialsFilter*()); |
+ MOCK_CONST_METHOD0(GetLogRouter, LogRouter*()); |
// Workaround for scoped_ptr<> lacking a copy constructor. |
bool PromptUserToSaveOrUpdatePassword( |
@@ -95,6 +100,11 @@ class MockPasswordManagerDriver : public StubPasswordManagerDriver { |
MOCK_METHOD0(GetPasswordAutofillManager, PasswordAutofillManager*()); |
}; |
+class MockLogReceiver : public password_manager::LogReceiver { |
+ public: |
+ MOCK_METHOD1(LogSavePasswordProgress, void(const std::string&)); |
+}; |
+ |
// Invokes the password store consumer with a single copy of |form|. |
ACTION_P(InvokeConsumer, form) { |
ScopedVector<PasswordForm> result; |
@@ -121,6 +131,8 @@ class PasswordManagerTest : public testing::Test { |
.WillRepeatedly(Return(store_.get())); |
EXPECT_CALL(*store_, GetSiteStatsMock(_)).Times(AnyNumber()); |
EXPECT_CALL(client_, GetDriver()).WillRepeatedly(Return(&driver_)); |
+ // Prepare the LogRouter before constructing |manager_|. |
+ ON_CALL(client_, GetLogRouter()).WillByDefault(Return(&router_)); |
manager_.reset(new PasswordManager(&client_)); |
password_autofill_manager_.reset( |
@@ -137,6 +149,7 @@ class PasswordManagerTest : public testing::Test { |
void TearDown() override { |
store_->Shutdown(); |
store_ = nullptr; |
+ manager_.reset(); // Destruct before LogRouter. |
} |
PasswordForm MakeSimpleForm() { |
@@ -213,8 +226,10 @@ class PasswordManagerTest : public testing::Test { |
MockPasswordManagerClient client_; |
MockPasswordManagerDriver driver_; |
scoped_ptr<PasswordAutofillManager> password_autofill_manager_; |
- scoped_ptr<PasswordManager> manager_; |
PasswordForm submitted_form_; |
+ testing::StrictMock<MockLogReceiver> receiver_; |
+ LogRouter router_; |
+ scoped_ptr<PasswordManager> manager_; |
}; |
MATCHER_P(FormMatches, form, "") { |
@@ -1304,4 +1319,45 @@ TEST_F(PasswordManagerTest, AutofillingOfAffiliatedCredentials) { |
EXPECT_EQ(android_form.signon_realm, form_data.preferred_realm); |
} |
+TEST_F(PasswordManagerTest, LogSavePasswordProgressNoReceiver) { |
+ EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText)).Times(0); |
vasilii
2015/11/12 16:27:34
LogSavePasswordProgress(_)
vabr (Chromium)
2015/11/12 21:55:43
Done.
|
+ // Before attaching the receiver, no text should be passed. |
+ manager()->LogSavePasswordProgress(kTestText); |
+ EXPECT_FALSE(manager()->IsLoggingActive()); |
+} |
+ |
+TEST_F(PasswordManagerTest, LogSavePasswordProgressAttachReceiver) { |
+ EXPECT_FALSE(manager()->IsLoggingActive()); |
+ |
+ // After attaching the logger, text should be passed. |
+ router_.RegisterReceiver(&receiver_); |
+ EXPECT_TRUE(manager()->IsLoggingActive()); |
+ EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText)); |
+ manager()->LogSavePasswordProgress(kTestText); |
+ router_.UnregisterReceiver(&receiver_); |
+ EXPECT_FALSE(manager()->IsLoggingActive()); |
+} |
+ |
+TEST_F(PasswordManagerTest, LogSavePasswordProgressDetachReceiver) { |
+ router_.RegisterReceiver(&receiver_); |
+ EXPECT_TRUE(manager()->IsLoggingActive()); |
+ router_.UnregisterReceiver(&receiver_); |
+ EXPECT_FALSE(manager()->IsLoggingActive()); |
+ |
+ // After detaching the logger, no text should be passed. |
+ EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText)).Times(0); |
vasilii
2015/11/12 16:27:35
LogSavePasswordProgress(_)
vabr (Chromium)
2015/11/12 21:55:43
Done.
|
+ manager()->LogSavePasswordProgress(kTestText); |
+} |
+ |
+TEST_F(PasswordManagerTest, LogToAReceiver) { |
vasilii
2015/11/12 16:27:34
I don't see any difference with LogSavePasswordPr
vabr (Chromium)
2015/11/12 21:55:43
Good call, removed.
|
+ router_.RegisterReceiver(&receiver_); |
+ EXPECT_TRUE(manager()->IsLoggingActive()); |
+ |
+ EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText)); |
+ manager()->LogSavePasswordProgress(kTestText); |
+ |
+ router_.UnregisterReceiver(&receiver_); |
+ EXPECT_FALSE(manager()->IsLoggingActive()); |
+} |
+ |
} // namespace password_manager |