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

Unified Diff: chrome/renderer/autofill/password_generation_agent_browsertest.cc

Issue 2216463002: [Autofill] Migrate ContentPasswordManagerDriver<-->Password{Autofill,Generation}Agent IPCs to mojo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix win trybots Created 4 years, 4 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
Index: chrome/renderer/autofill/password_generation_agent_browsertest.cc
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
index 30306f0fd41851276d05c0790b7a9d58c5df6b29..77bc1ddc372b91a2b4ab73ef8814ef6e92f071c8 100644
--- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -7,6 +7,7 @@
#include <memory>
#include "base/macros.h"
+#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/histogram_tester.h"
#include "chrome/renderer/autofill/password_generation_test_utils.h"
@@ -16,6 +17,10 @@
#include "components/autofill/content/renderer/test_password_generation_agent.h"
#include "components/autofill/core/common/form_data.h"
#include "components/autofill/core/common/password_generation_util.h"
+#include "content/public/renderer/render_frame.h"
+#include "content/public/renderer/render_view.h"
+#include "mojo/public/cpp/bindings/binding_set.h"
+#include "services/shell/public/cpp/interface_provider.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/WebString.h"
#include "third_party/WebKit/public/web/WebDocument.h"
@@ -29,12 +34,121 @@ using blink::WebInputElement;
using blink::WebNode;
using blink::WebString;
+namespace {
+
+class FakeContentPasswordManagerDriver
vabr (Chromium) 2016/08/09 17:36:17 Would it make sense to separate the definition of
leonhsl(Using Gerrit) 2016/08/10 13:22:02 Yeah agree. Put FakeContentPasswordManagerDriver i
+ : public autofill::mojom::PasswordManagerDriver {
+ public:
+ FakeContentPasswordManagerDriver() {}
+
+ ~FakeContentPasswordManagerDriver() override {}
+
+ void BindRequest(autofill::mojom::PasswordManagerDriverRequest request) {
+ bindings_.AddBinding(this, std::move(request));
+ }
+
+ bool called_save_generation_field() const {
+ return called_save_generation_field_;
+ }
+
+ const base::Optional<base::string16>& save_generation_field() const {
+ return save_generation_field_;
+ }
+
+ void reset_save_generation_field() {
+ called_save_generation_field_ = false;
+ save_generation_field_ = base::nullopt;
+ }
+
+ bool called_password_no_longer_generated() const {
+ return called_password_no_longer_generated_;
+ }
+
+ void reset_called_password_no_longer_generated() {
+ called_password_no_longer_generated_ = false;
+ }
+
+ bool called_presave_generated_password() const {
+ return called_presave_generated_password_;
+ }
+
+ void reset_called_presave_generated_password() {
+ called_presave_generated_password_ = false;
+ }
+
+ private:
+ // mojom::PasswordManagerDriver:
+ void PasswordFormsParsed(
+ const std::vector<autofill::PasswordForm>& forms) override {}
+
+ void PasswordFormsRendered(
+ const std::vector<autofill::PasswordForm>& visible_forms,
+ bool did_stop_loading) override {}
+
+ void PasswordFormSubmitted(
+ const autofill::PasswordForm& password_form) override {}
+
+ void InPageNavigation(const autofill::PasswordForm& password_form) override {}
+
+ void PresaveGeneratedPassword(
+ const autofill::PasswordForm& password_form) override {
+ called_presave_generated_password_ = true;
+ }
+
+ void PasswordNoLongerGenerated(
+ const autofill::PasswordForm& password_form) override {
+ called_password_no_longer_generated_ = true;
+ }
+
+ void ShowPasswordSuggestions(int key,
+ base::i18n::TextDirection text_direction,
+ const base::string16& typed_username,
+ int options,
+ const gfx::RectF& bounds) override {}
+
+ void PasswordAutofillAgentConstructed() override {}
+
+ void RecordSavePasswordProgress(const std::string& log) override {}
+
+ void SaveGenerationFieldDetectedByClassifier(
+ const autofill::PasswordForm& password_form,
+ const base::string16& generation_field) override {
+ called_save_generation_field_ = true;
+ save_generation_field_ = generation_field;
+ }
+
+ // Records whether SaveGenerationFieldDetectedByClassifier() gets called.
+ bool called_save_generation_field_ = false;
+ // Records data received via SaveGenerationFieldDetectedByClassifier() call.
+ base::Optional<base::string16> save_generation_field_;
+ // Records whether PasswordNoLongerGenerated() gets called.
+ bool called_password_no_longer_generated_ = false;
+ // Records whether PresaveGeneratedPassword() gets called.
+ bool called_presave_generated_password_ = false;
+
+ mojo::BindingSet<autofill::mojom::PasswordManagerDriver> bindings_;
+};
+
+} // namespace
+
namespace autofill {
class PasswordGenerationAgentTest : public ChromeRenderViewTest {
public:
PasswordGenerationAgentTest() {}
+ void RegisterMainFrameRemoteInterfaces() override {
+ // We only use the fake driver for main frame
+ // because our test cases only involve the main frame.
+ shell::InterfaceProvider* remote_interfaces =
+ view_->GetMainRenderFrame()->GetRemoteInterfaces();
+ shell::InterfaceProvider::TestApi test_api(remote_interfaces);
+ test_api.SetBinderForName(
+ mojom::PasswordManagerDriver::Name_,
+ base::Bind(&PasswordGenerationAgentTest::BindPasswordManagerDriver,
+ base::Unretained(this)));
+ }
+
void TearDown() override {
LoadHTML("");
ChromeRenderViewTest::TearDown();
@@ -73,35 +187,36 @@ class PasswordGenerationAgentTest : public ChromeRenderViewTest {
}
void AllowToRunFormClassifier() {
- AutofillMsg_AllowToRunFormClassifier msg(0);
- static_cast<IPC::Listener*>(password_generation_)->OnMessageReceived(msg);
+ password_generation_->AllowToRunFormClassifier();
}
void ExpectFormClassifierVoteReceived(
bool received,
const base::string16& expected_generation_element) {
- const IPC::Message* message =
- render_thread_->sink().GetFirstMessageMatching(
- AutofillHostMsg_SaveGenerationFieldDetectedByClassifier::ID);
+ base::RunLoop().RunUntilIdle();
if (received) {
- ASSERT_TRUE(message);
- std::tuple<autofill::PasswordForm, base::string16> actual_parameters;
- AutofillHostMsg_SaveGenerationFieldDetectedByClassifier::Read(
- message, &actual_parameters);
- EXPECT_EQ(expected_generation_element, std::get<1>(actual_parameters));
+ ASSERT_TRUE(fake_driver_.called_save_generation_field());
+ EXPECT_EQ(expected_generation_element,
+ fake_driver_.save_generation_field());
} else {
- ASSERT_FALSE(message);
+ ASSERT_FALSE(fake_driver_.called_save_generation_field());
}
- render_thread_->sink().ClearMessages();
+ fake_driver_.reset_save_generation_field();
}
void ShowGenerationPopUpManually(const char* element_id) {
FocusField(element_id);
- AutofillMsg_UserTriggeredGeneratePassword msg(0);
- static_cast<IPC::Listener*>(password_generation_)->OnMessageReceived(msg);
+ password_generation_->UserTriggeredGeneratePassword();
}
+ void BindPasswordManagerDriver(mojo::ScopedMessagePipeHandle handle) {
+ fake_driver_.BindRequest(
+ mojo::MakeRequest<mojom::PasswordManagerDriver>(std::move(handle)));
+ }
+
+ FakeContentPasswordManagerDriver fake_driver_;
+
private:
DISALLOW_COPY_AND_ASSIGN(PasswordGenerationAgentTest);
};
@@ -288,8 +403,7 @@ TEST_F(PasswordGenerationAgentTest, FillTest) {
EXPECT_TRUE(second_password_element.value().isNull());
base::string16 password = base::ASCIIToUTF16("random_password");
- AutofillMsg_GeneratedPasswordAccepted msg(0, password);
- static_cast<IPC::Listener*>(password_generation_)->OnMessageReceived(msg);
+ password_generation_->GeneratedPasswordAccepted(password);
// Password fields are filled out and set as being autofilled.
EXPECT_EQ(password, first_password_element.value());
@@ -335,8 +449,7 @@ TEST_F(PasswordGenerationAgentTest, EditingTest) {
WebInputElement second_password_element = element.to<WebInputElement>();
base::string16 password = base::ASCIIToUTF16("random_password");
- AutofillMsg_GeneratedPasswordAccepted msg(0, password);
- static_cast<IPC::Listener*>(password_generation_)->OnMessageReceived(msg);
+ password_generation_->GeneratedPasswordAccepted(password);
// Passwords start out the same.
EXPECT_EQ(password, first_password_element.value());
@@ -352,6 +465,7 @@ TEST_F(PasswordGenerationAgentTest, EditingTest) {
// Clear any uninteresting sent messages.
render_thread_->sink().ClearMessages();
+ fake_driver_.reset_called_password_no_longer_generated();
// Verify that password mirroring works correctly even when the password
// is deleted.
@@ -361,8 +475,8 @@ TEST_F(PasswordGenerationAgentTest, EditingTest) {
// Should have notified the browser that the password is no longer generated
// and trigger generation again.
- EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching(
- AutofillHostMsg_PasswordNoLongerGenerated::ID));
+ base::RunLoop().RunUntilIdle();
+ EXPECT_TRUE(fake_driver_.called_password_no_longer_generated());
EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching(
AutofillHostMsg_ShowPasswordGenerationPopup::ID));
}
@@ -650,24 +764,23 @@ TEST_F(PasswordGenerationAgentTest, PresavingGeneratedPassword) {
ExpectGenerationAvailable(test_case.generation_element, true);
base::string16 password = base::ASCIIToUTF16("random_password");
- AutofillMsg_GeneratedPasswordAccepted msg(0, password);
- static_cast<IPC::Listener*>(password_generation_)->OnMessageReceived(msg);
- EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching(
- AutofillHostMsg_PresaveGeneratedPassword::ID));
- render_thread_->sink().ClearMessages();
+ password_generation_->GeneratedPasswordAccepted(password);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_TRUE(fake_driver_.called_presave_generated_password());
+ fake_driver_.reset_called_presave_generated_password();
FocusField(test_case.generation_element);
SimulateUserTypingASCIICharacter('a', true);
- EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching(
- AutofillHostMsg_PresaveGeneratedPassword::ID));
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ EXPECT_TRUE(fake_driver_.called_presave_generated_password());
+ fake_driver_.reset_called_presave_generated_password();
for (size_t i = 0; i < password.length(); ++i)
SimulateUserTypingASCIICharacter(ui::VKEY_BACK, false);
SimulateUserTypingASCIICharacter(ui::VKEY_BACK, true);
- EXPECT_TRUE(render_thread_->sink().GetFirstMessageMatching(
- AutofillHostMsg_PasswordNoLongerGenerated::ID));
- render_thread_->sink().ClearMessages();
+ base::RunLoop().RunUntilIdle();
+ EXPECT_TRUE(fake_driver_.called_password_no_longer_generated());
+ fake_driver_.reset_called_password_no_longer_generated();
}
}

Powered by Google App Engine
This is Rietveld 408576698