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

Side by Side Diff: components/password_manager/core/browser/password_store_unittest.cc

Issue 866983003: GetLoginsRequest: Use ScopedVector to express ownership of forms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@324291_scopedvector
Patch Set: Second fix of the rebase Created 5 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/files/scoped_temp_dir.h" 7 #include "base/files/scoped_temp_dir.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/synchronization/waitable_event.h" 10 #include "base/synchronization/waitable_event.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "components/password_manager/core/browser/password_form_data.h" 12 #include "components/password_manager/core/browser/password_form_data.h"
13 #include "components/password_manager/core/browser/password_store_consumer.h" 13 #include "components/password_manager/core/browser/password_store_consumer.h"
14 #include "components/password_manager/core/browser/password_store_default.h" 14 #include "components/password_manager/core/browser/password_store_default.h"
15 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 17
18 using autofill::PasswordForm; 18 using autofill::PasswordForm;
19 using base::WaitableEvent; 19 using base::WaitableEvent;
20 using testing::_; 20 using testing::_;
21 using testing::DoAll; 21 using testing::DoAll;
22 using testing::WithArg; 22 using testing::WithArg;
23 23
24 namespace password_manager { 24 namespace password_manager {
25 25
26 namespace { 26 namespace {
27 27
28 class MockPasswordStoreConsumer : public PasswordStoreConsumer { 28 class MockPasswordStoreConsumer : public PasswordStoreConsumer {
29 public: 29 public:
30 MOCK_METHOD1(OnGetPasswordStoreResults, 30 MOCK_METHOD1(OnGetPasswordStoreResultsConstRef,
31 void(const std::vector<PasswordForm*>&)); 31 void(const std::vector<PasswordForm*>&));
32
33 // GMock cannot mock methods with move-only args.
34 void OnGetPasswordStoreResults(ScopedVector<PasswordForm> results) override {
35 OnGetPasswordStoreResultsConstRef(results.get());
36 }
32 }; 37 };
33 38
34 class StartSyncFlareMock { 39 class StartSyncFlareMock {
35 public: 40 public:
36 StartSyncFlareMock() {} 41 StartSyncFlareMock() {}
37 ~StartSyncFlareMock() {} 42 ~StartSyncFlareMock() {}
38 43
39 MOCK_METHOD1(StartSyncFlare, void(syncer::ModelType)); 44 MOCK_METHOD1(StartSyncFlare, void(syncer::ModelType));
40 }; 45 };
41 46
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 "http://bar.example.com/action", 128 "http://bar.example.com/action",
124 L"submit_element", 129 L"submit_element",
125 L"username_element", 130 L"username_element",
126 L"password_element", 131 L"password_element",
127 L"username_value", 132 L"username_value",
128 L"", 133 L"",
129 true, false, cutoff - 1 }, 134 true, false, cutoff - 1 },
130 }; 135 };
131 136
132 // Build the forms vector and add the forms to the store. 137 // Build the forms vector and add the forms to the store.
133 std::vector<PasswordForm*> all_forms; 138 ScopedVector<PasswordForm> all_forms;
134 for (size_t i = 0; i < arraysize(form_data); ++i) { 139 for (size_t i = 0; i < arraysize(form_data); ++i) {
135 PasswordForm* form = CreatePasswordFormFromData(form_data[i]); 140 all_forms.push_back(CreatePasswordFormFromData(form_data[i]).release());
136 all_forms.push_back(form); 141 store->AddLogin(*all_forms.back());
137 store->AddLogin(*form);
138 } 142 }
139 base::MessageLoop::current()->RunUntilIdle(); 143 base::MessageLoop::current()->RunUntilIdle();
140 144
141 // We expect to get back only the "recent" www.google.com login. 145 // We expect to get back only the "recent" www.google.com login.
142 // Theoretically these should never actually exist since there are no longer 146 // Theoretically these should never actually exist since there are no longer
143 // any login forms on www.google.com to save, but we technically allow them. 147 // any login forms on www.google.com to save, but we technically allow them.
144 // We should not get back the older saved password though. 148 // We should not get back the older saved password though.
145 PasswordForm www_google; 149 PasswordForm www_google;
146 www_google.scheme = PasswordForm::SCHEME_HTML; 150 www_google.scheme = PasswordForm::SCHEME_HTML;
147 www_google.signon_realm = "https://www.google.com"; 151 www_google.signon_realm = "https://www.google.com";
148 std::vector<PasswordForm*> www_google_expected; 152 std::vector<PasswordForm*> www_google_expected;
149 www_google_expected.push_back(all_forms[2]); 153 www_google_expected.push_back(all_forms[2]);
150 154
151 // We should still get the accounts.google.com login even though it's older 155 // We should still get the accounts.google.com login even though it's older
152 // than our cutoff - this is the new location of all Google login forms. 156 // than our cutoff - this is the new location of all Google login forms.
153 PasswordForm accounts_google; 157 PasswordForm accounts_google;
154 accounts_google.scheme = PasswordForm::SCHEME_HTML; 158 accounts_google.scheme = PasswordForm::SCHEME_HTML;
155 accounts_google.signon_realm = "https://accounts.google.com"; 159 accounts_google.signon_realm = "https://accounts.google.com";
156 std::vector<PasswordForm*> accounts_google_expected; 160 std::vector<PasswordForm*> accounts_google_expected;
157 accounts_google_expected.push_back(all_forms[3]); 161 accounts_google_expected.push_back(all_forms[3]);
158 162
159 // Same thing for a generic saved login. 163 // Same thing for a generic saved login.
160 PasswordForm bar_example; 164 PasswordForm bar_example;
161 bar_example.scheme = PasswordForm::SCHEME_HTML; 165 bar_example.scheme = PasswordForm::SCHEME_HTML;
162 bar_example.signon_realm = "http://bar.example.com"; 166 bar_example.signon_realm = "http://bar.example.com";
163 std::vector<PasswordForm*> bar_example_expected; 167 std::vector<PasswordForm*> bar_example_expected;
164 bar_example_expected.push_back(all_forms[4]); 168 bar_example_expected.push_back(all_forms[4]);
165 169
166 MockPasswordStoreConsumer consumer; 170 MockPasswordStoreConsumer consumer;
167 171 testing::InSequence s;
168 // Expect the appropriate replies, as above, in reverse order than we will 172 EXPECT_CALL(consumer, OnGetPasswordStoreResultsConstRef(
169 // issue the queries. Each retires on saturation to avoid matcher spew. 173 ContainsSamePasswordForms(www_google_expected)))
170 EXPECT_CALL(consumer, OnGetPasswordStoreResults(
171 ContainsAllPasswordForms(bar_example_expected)))
172 .WillOnce(WithArg<0>(STLDeleteElements0()))
173 .RetiresOnSaturation(); 174 .RetiresOnSaturation();
174 EXPECT_CALL(consumer, OnGetPasswordStoreResults( 175 EXPECT_CALL(consumer,
175 ContainsAllPasswordForms(accounts_google_expected))) 176 OnGetPasswordStoreResultsConstRef(ContainsSamePasswordForms(
176 .WillOnce(WithArg<0>(STLDeleteElements0())) 177 accounts_google_expected))).RetiresOnSaturation();
177 .RetiresOnSaturation(); 178 EXPECT_CALL(consumer, OnGetPasswordStoreResultsConstRef(
178 EXPECT_CALL(consumer, OnGetPasswordStoreResults( 179 ContainsSamePasswordForms(bar_example_expected)))
179 ContainsAllPasswordForms(www_google_expected)))
180 .WillOnce(WithArg<0>(STLDeleteElements0()))
181 .RetiresOnSaturation(); 180 .RetiresOnSaturation();
182 181
183 store->GetLogins(www_google, PasswordStore::ALLOW_PROMPT, &consumer); 182 store->GetLogins(www_google, PasswordStore::ALLOW_PROMPT, &consumer);
184 store->GetLogins(accounts_google, PasswordStore::ALLOW_PROMPT, &consumer); 183 store->GetLogins(accounts_google, PasswordStore::ALLOW_PROMPT, &consumer);
185 store->GetLogins(bar_example, PasswordStore::ALLOW_PROMPT, &consumer); 184 store->GetLogins(bar_example, PasswordStore::ALLOW_PROMPT, &consumer);
186 185
187 base::MessageLoop::current()->RunUntilIdle(); 186 base::MessageLoop::current()->RunUntilIdle();
188 187
189 STLDeleteElements(&all_forms);
190 store->Shutdown(); 188 store->Shutdown();
191 base::MessageLoop::current()->RunUntilIdle(); 189 base::MessageLoop::current()->RunUntilIdle();
192 } 190 }
193 191
194 TEST_F(PasswordStoreTest, StartSyncFlare) { 192 TEST_F(PasswordStoreTest, StartSyncFlare) {
195 scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault( 193 scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault(
196 base::MessageLoopProxy::current(), base::MessageLoopProxy::current(), 194 base::MessageLoopProxy::current(), base::MessageLoopProxy::current(),
197 make_scoped_ptr(new LoginDatabase(test_login_db_file_path())))); 195 make_scoped_ptr(new LoginDatabase(test_login_db_file_path()))));
198 StartSyncFlareMock mock; 196 StartSyncFlareMock mock;
199 store->Init( 197 store->Init(
200 base::Bind(&StartSyncFlareMock::StartSyncFlare, base::Unretained(&mock))); 198 base::Bind(&StartSyncFlareMock::StartSyncFlare, base::Unretained(&mock)));
201 { 199 {
202 PasswordForm form; 200 PasswordForm form;
203 form.origin = GURL("http://accounts.google.com/LoginAuth"); 201 form.origin = GURL("http://accounts.google.com/LoginAuth");
204 form.signon_realm = "http://accounts.google.com/"; 202 form.signon_realm = "http://accounts.google.com/";
205 EXPECT_CALL(mock, StartSyncFlare(syncer::PASSWORDS)); 203 EXPECT_CALL(mock, StartSyncFlare(syncer::PASSWORDS));
206 store->AddLogin(form); 204 store->AddLogin(form);
207 base::MessageLoop::current()->RunUntilIdle(); 205 base::MessageLoop::current()->RunUntilIdle();
208 } 206 }
209 store->Shutdown(); 207 store->Shutdown();
210 base::MessageLoop::current()->RunUntilIdle(); 208 base::MessageLoop::current()->RunUntilIdle();
211 } 209 }
212 210
213 } // namespace password_manager 211 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698