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
3 // found in the LICENSE file.
4
5 #include "components/autofill/content/renderer/renderer_save_password_progress_logger.h"
6
7 #include "base/optional.h"
8 #include "base/run_loop.h"
9 #include "base/test/task_environment.h"
10 #include "components/autofill/content/common/mojom/autofill_driver.mojom.h"
11 #include "mojo/public/cpp/bindings/pending_remote.h"
12 #include "mojo/public/cpp/bindings/receiver.h"
13 #include "mojo/public/cpp/bindings/remote.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace autofill {
17
18 namespace {
19
20 const char kTestText[] = "test";
21
22 class FakeContentPasswordManagerDriver : public mojom::PasswordManagerDriver {
23 public:
FakeContentPasswordManagerDriver()24 FakeContentPasswordManagerDriver() : called_record_save_(false) {}
~FakeContentPasswordManagerDriver()25 ~FakeContentPasswordManagerDriver() override {}
26
27 mojo::PendingRemote<mojom::PasswordManagerDriver>
CreatePendingRemoteAndBind()28 CreatePendingRemoteAndBind() {
29 return receiver_.BindNewPipeAndPassRemote();
30 }
31
GetLogMessage(std::string * log)32 bool GetLogMessage(std::string* log) {
33 if (!called_record_save_)
34 return false;
35
36 EXPECT_TRUE(log_);
37 *log = *log_;
38 return true;
39 }
40
41 private:
42 // autofill::mojom::PasswordManagerDriver:
PasswordFormsParsed(const std::vector<autofill::FormData> & form_data)43 void PasswordFormsParsed(
44 const std::vector<autofill::FormData>& form_data) override {}
45
PasswordFormsRendered(const std::vector<autofill::FormData> & visible_forms_data,bool did_stop_loading)46 void PasswordFormsRendered(
47 const std::vector<autofill::FormData>& visible_forms_data,
48 bool did_stop_loading) override {}
49
PasswordFormSubmitted(const autofill::FormData & form_data)50 void PasswordFormSubmitted(const autofill::FormData& form_data) override {}
51
ShowManualFallbackForSaving(const autofill::FormData & form_data)52 void ShowManualFallbackForSaving(
53 const autofill::FormData& form_data) override {}
54
HideManualFallbackForSaving()55 void HideManualFallbackForSaving() override {}
56
SameDocumentNavigation(autofill::mojom::SubmissionIndicatorEvent submission_indication_event)57 void SameDocumentNavigation(autofill::mojom::SubmissionIndicatorEvent
58 submission_indication_event) override {}
59
ShowPasswordSuggestions(base::i18n::TextDirection text_direction,const base::string16 & typed_username,int options,const gfx::RectF & bounds)60 void ShowPasswordSuggestions(base::i18n::TextDirection text_direction,
61 const base::string16& typed_username,
62 int options,
63 const gfx::RectF& bounds) override {}
64
ShowTouchToFill()65 void ShowTouchToFill() override {}
66
RecordSavePasswordProgress(const std::string & log)67 void RecordSavePasswordProgress(const std::string& log) override {
68 called_record_save_ = true;
69 log_ = log;
70 }
71
UserModifiedPasswordField()72 void UserModifiedPasswordField() override {}
73
UserModifiedNonPasswordField(uint32_t renderer_id,const base::string16 & value)74 void UserModifiedNonPasswordField(uint32_t renderer_id,
75 const base::string16& value) override {}
76
CheckSafeBrowsingReputation(const GURL & form_action,const GURL & frame_url)77 void CheckSafeBrowsingReputation(const GURL& form_action,
78 const GURL& frame_url) override {}
79
FocusedInputChanged(autofill::mojom::FocusedFieldType focused_field_type)80 void FocusedInputChanged(
81 autofill::mojom::FocusedFieldType focused_field_type) override {}
LogFirstFillingResult(uint32_t form_renderer_id,int32_t result)82 void LogFirstFillingResult(uint32_t form_renderer_id,
83 int32_t result) override {}
84
85 // Records whether RecordSavePasswordProgress() gets called.
86 bool called_record_save_;
87 // Records data received via RecordSavePasswordProgress() call.
88 base::Optional<std::string> log_;
89
90 mojo::Receiver<mojom::PasswordManagerDriver> receiver_{this};
91 };
92
93 class TestLogger : public RendererSavePasswordProgressLogger {
94 public:
TestLogger(mojom::PasswordManagerDriver * driver)95 TestLogger(mojom::PasswordManagerDriver* driver)
96 : RendererSavePasswordProgressLogger(driver) {}
97
98 using RendererSavePasswordProgressLogger::SendLog;
99 };
100
101 } // namespace
102
TEST(RendererSavePasswordProgressLoggerTest,SendLog)103 TEST(RendererSavePasswordProgressLoggerTest, SendLog) {
104 base::test::SingleThreadTaskEnvironment task_environment;
105 FakeContentPasswordManagerDriver fake_driver;
106 mojo::Remote<mojom::PasswordManagerDriver> driver_remote(
107 fake_driver.CreatePendingRemoteAndBind());
108 TestLogger logger(driver_remote.get());
109 logger.SendLog(kTestText);
110
111 base::RunLoop().RunUntilIdle();
112 std::string sent_log;
113 EXPECT_TRUE(fake_driver.GetLogMessage(&sent_log));
114 EXPECT_EQ(kTestText, sent_log);
115 }
116
117 } // namespace autofill
118