Index: chrome/browser/password_manager/chrome_password_manager_client_unittest.cc |
diff --git a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc |
index 26b4bf1c858e0c0061bf04e07fa331d3fbf2d490..699aae9a360d57f072eff44750e3c31d50f35b6f 100644 |
--- a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc |
+++ b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc |
@@ -5,9 +5,11 @@ |
#include "chrome/browser/password_manager/chrome_password_manager_client.h" |
#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
+#include "components/autofill/content/common/autofill_messages.h" |
#include "components/password_manager/core/browser/password_manager_logger.h" |
#include "content/public/browser/browser_context.h" |
#include "content/public/browser/web_contents.h" |
+#include "content/public/test/mock_render_process_host.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -35,7 +37,12 @@ class ChromePasswordManagerClientTest : public ChromeRenderViewHostTestHarness { |
protected: |
ChromePasswordManagerClient* GetClient(); |
- testing::StrictMock<MockPasswordManagerLogger> logger; |
+ // If the test IPC sink contains an AutofillMsg_ChangeLoggingState message, |
+ // then copies its argument into |activation_flag| and returns true. Otherwise |
+ // returns false. |
+ bool WasLoggingActivationMessageSent(bool* activation_flag); |
+ |
+ testing::StrictMock<MockPasswordManagerLogger> logger_; |
}; |
void ChromePasswordManagerClientTest::SetUp() { |
@@ -48,10 +55,24 @@ ChromePasswordManagerClient* ChromePasswordManagerClientTest::GetClient() { |
return ChromePasswordManagerClient::FromWebContents(web_contents()); |
} |
+bool ChromePasswordManagerClientTest::WasLoggingActivationMessageSent( |
+ bool* activation_flag) { |
+ const uint32 kMsgID = AutofillMsg_ChangeLoggingState::ID; |
+ const IPC::Message* message = |
+ process()->sink().GetFirstMessageMatching(kMsgID); |
+ if (!message) |
+ return false; |
+ Tuple1<bool> param; |
+ AutofillMsg_ChangeLoggingState::Read(message, ¶m); |
+ *activation_flag = param.a; |
+ process()->sink().ClearMessages(); |
+ return true; |
+} |
+ |
TEST_F(ChromePasswordManagerClientTest, LogSavePasswordProgressNoLogger) { |
ChromePasswordManagerClient* client = GetClient(); |
- EXPECT_CALL(logger, LogSavePasswordProgress(kTestText)).Times(0); |
+ EXPECT_CALL(logger_, LogSavePasswordProgress(kTestText)).Times(0); |
// Before attaching the logger, no text should be passed. |
client->LogSavePasswordProgress(kTestText); |
EXPECT_FALSE(client->IsLoggingActive()); |
@@ -61,8 +82,8 @@ TEST_F(ChromePasswordManagerClientTest, LogSavePasswordProgressAttachLogger) { |
ChromePasswordManagerClient* client = GetClient(); |
// After attaching the logger, text should be passed. |
- client->SetLogger(&logger); |
- EXPECT_CALL(logger, LogSavePasswordProgress(kTestText)).Times(1); |
+ client->SetLogger(&logger_); |
+ EXPECT_CALL(logger_, LogSavePasswordProgress(kTestText)).Times(1); |
client->LogSavePasswordProgress(kTestText); |
EXPECT_TRUE(client->IsLoggingActive()); |
} |
@@ -70,10 +91,26 @@ TEST_F(ChromePasswordManagerClientTest, LogSavePasswordProgressAttachLogger) { |
TEST_F(ChromePasswordManagerClientTest, LogSavePasswordProgressDetachLogger) { |
ChromePasswordManagerClient* client = GetClient(); |
- client->SetLogger(&logger); |
+ client->SetLogger(&logger_); |
// After detaching the logger, no text should be passed. |
client->SetLogger(NULL); |
- EXPECT_CALL(logger, LogSavePasswordProgress(kTestText)).Times(0); |
+ EXPECT_CALL(logger_, LogSavePasswordProgress(kTestText)).Times(0); |
client->LogSavePasswordProgress(kTestText); |
EXPECT_FALSE(client->IsLoggingActive()); |
} |
+ |
+TEST_F(ChromePasswordManagerClientTest, LogSavePasswordProgressNotifyRenderer) { |
+ ChromePasswordManagerClient* client = GetClient(); |
+ bool logging_active = false; |
+ |
+ // Initially, the logging should be off, so no IPC messages. |
+ EXPECT_FALSE(WasLoggingActivationMessageSent(&logging_active)); |
+ |
+ client->SetLogger(&logger_); |
+ EXPECT_TRUE(WasLoggingActivationMessageSent(&logging_active)); |
+ EXPECT_TRUE(logging_active); |
+ |
+ client->SetLogger(NULL); |
+ EXPECT_TRUE(WasLoggingActivationMessageSent(&logging_active)); |
+ EXPECT_FALSE(logging_active); |
+} |