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

Side by Side Diff: chrome/browser/browsing_data/passwords_counter_browsertest.cc

Issue 2855623005: Move browsing_data counter sync tests to separate file (Closed)
Patch Set: fixes Created 3 years, 7 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) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 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 "components/browsing_data/core/counters/passwords_counter.h" 5 #include "components/browsing_data/core/counters/passwords_counter.h"
6 6
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "base/synchronization/waitable_event.h" 9 #include "base/synchronization/waitable_event.h"
10 #include "chrome/browser/password_manager/password_store_factory.h" 10 #include "chrome/browser/password_manager/password_store_factory.h"
11 #include "chrome/browser/sync/profile_sync_service_factory.h" 11 #include "chrome/browser/sync/profile_sync_service_factory.h"
12 #include "chrome/browser/sync/test/integration/passwords_helper.h" 12 #include "chrome/browser/sync/test/integration/passwords_helper.h"
13 #include "chrome/browser/sync/test/integration/sync_test.h"
14 #include "chrome/browser/ui/browser.h" 13 #include "chrome/browser/ui/browser.h"
15 #include "chrome/test/base/in_process_browser_test.h" 14 #include "chrome/test/base/in_process_browser_test.h"
16 #include "components/autofill/core/common/password_form.h" 15 #include "components/autofill/core/common/password_form.h"
17 #include "components/browser_sync/profile_sync_service.h" 16 #include "components/browser_sync/profile_sync_service.h"
18 #include "components/browser_sync/profile_sync_service_mock.h"
19 #include "components/browsing_data/core/browsing_data_utils.h" 17 #include "components/browsing_data/core/browsing_data_utils.h"
20 #include "components/browsing_data/core/pref_names.h" 18 #include "components/browsing_data/core/pref_names.h"
21 #include "components/prefs/pref_service.h" 19 #include "components/prefs/pref_service.h"
22 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
23 21
24 namespace { 22 namespace {
25 23
26 using autofill::PasswordForm; 24 using autofill::PasswordForm;
25 using browsing_data::BrowsingDataCounter;
27 26
28 // TODO(crbug.com/553421): Only RestartOnSyncChange is a SyncTest. 27 class PasswordsCounterTest : public InProcessBrowserTest {
29 // Extract it together with HistoryCounterTest.RestartOnSyncChange.
30 class PasswordsCounterTest : public SyncTest {
31 public: 28 public:
32 PasswordsCounterTest() : SyncTest(SINGLE_CLIENT) {} 29 PasswordsCounterTest() {}
33 30
34 void SetUpOnMainThread() override { 31 void SetUpOnMainThread() override {
35 finished_ = false; 32 finished_ = false;
36 time_ = base::Time::Now(); 33 time_ = base::Time::Now();
37 store_ = PasswordStoreFactory::GetForProfile( 34 store_ = PasswordStoreFactory::GetForProfile(
38 browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS); 35 browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS);
39 SetPasswordsDeletionPref(true); 36 SetPasswordsDeletionPref(true);
40 SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); 37 SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME);
41 } 38 }
42 39
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 base::Unretained(&waitable_event))); 78 base::Unretained(&waitable_event)));
82 waitable_event.Wait(); 79 waitable_event.Wait();
83 80
84 // At this point, the calculation on DB thread should have finished, and 81 // At this point, the calculation on DB thread should have finished, and
85 // a callback should be scheduled on the UI thread. Process the tasks until 82 // a callback should be scheduled on the UI thread. Process the tasks until
86 // we get a finished result. 83 // we get a finished result.
87 run_loop_.reset(new base::RunLoop()); 84 run_loop_.reset(new base::RunLoop());
88 run_loop_->Run(); 85 run_loop_->Run();
89 } 86 }
90 87
91 bool CountingFinishedSinceLastAsked() { 88 BrowsingDataCounter::ResultInt GetResult() {
92 bool result = finished_;
93 finished_ = false;
94 return result;
95 }
96
97 void WaitForCountingOrConfirmFinished() {
98 if (CountingFinishedSinceLastAsked())
99 return;
100
101 WaitForCounting();
102 CountingFinishedSinceLastAsked();
103 }
104
105 browsing_data::BrowsingDataCounter::ResultInt GetResult() {
106 DCHECK(finished_); 89 DCHECK(finished_);
107 return result_; 90 return result_;
108 } 91 }
109 92
110 bool PasswordSyncEnabled() { return password_sync_enabled_; } 93 void Callback(std::unique_ptr<BrowsingDataCounter::Result> result) {
111
112 void Callback(
113 std::unique_ptr<browsing_data::BrowsingDataCounter::Result> result) {
114 DCHECK(result); 94 DCHECK(result);
115 finished_ = result->Finished(); 95 finished_ = result->Finished();
116 96
117 if (finished_) { 97 if (finished_) {
118 auto* password_result = 98 auto* password_result =
119 static_cast<browsing_data::PasswordsCounter::PasswordResult*>( 99 static_cast<BrowsingDataCounter::SyncResult*>(result.get());
120 result.get());
121 result_ = password_result->Value(); 100 result_ = password_result->Value();
122
123 password_sync_enabled_ = password_result->password_sync_enabled();
124 } 101 }
125 if (run_loop_ && finished_) 102 if (run_loop_ && finished_)
126 run_loop_->Quit(); 103 run_loop_->Quit();
127 } 104 }
128 105
129 void WaitForUICallbacksFromAddingLogins() { 106 void WaitForUICallbacksFromAddingLogins() {
130 base::RunLoop loop; 107 base::RunLoop loop;
131 loop.RunUntilIdle(); 108 loop.RunUntilIdle();
132 } 109 }
133 110
(...skipping 10 matching lines...) Expand all
144 result.date_created = time_; 121 result.date_created = time_;
145 return result; 122 return result;
146 } 123 }
147 124
148 scoped_refptr<password_manager::PasswordStore> store_; 125 scoped_refptr<password_manager::PasswordStore> store_;
149 126
150 std::unique_ptr<base::RunLoop> run_loop_; 127 std::unique_ptr<base::RunLoop> run_loop_;
151 base::Time time_; 128 base::Time time_;
152 129
153 bool finished_; 130 bool finished_;
154 browsing_data::BrowsingDataCounter::ResultInt result_; 131 BrowsingDataCounter::ResultInt result_;
155 bool password_sync_enabled_;
156 }; 132 };
157 133
158 // Tests that the counter correctly counts each individual credential on 134 // Tests that the counter correctly counts each individual credential on
159 // the same domain. 135 // the same domain.
160 IN_PROC_BROWSER_TEST_F(PasswordsCounterTest, SameDomain) { 136 IN_PROC_BROWSER_TEST_F(PasswordsCounterTest, SameDomain) {
161 AddLogin("https://www.google.com", "user1", false); 137 AddLogin("https://www.google.com", "user1", false);
162 AddLogin("https://www.google.com", "user2", false); 138 AddLogin("https://www.google.com", "user2", false);
163 AddLogin("https://www.google.com", "user3", false); 139 AddLogin("https://www.google.com", "user3", false);
164 AddLogin("https://www.chrome.com", "user1", false); 140 AddLogin("https://www.chrome.com", "user1", false);
165 AddLogin("https://www.chrome.com", "user2", false); 141 AddLogin("https://www.chrome.com", "user2", false);
166 WaitForUICallbacksFromAddingLogins(); 142 WaitForUICallbacksFromAddingLogins();
167 143
168 Profile* profile = browser()->profile(); 144 Profile* profile = browser()->profile();
169 browsing_data::PasswordsCounter counter( 145 browsing_data::PasswordsCounter counter(
170 PasswordStoreFactory::GetForProfile(profile, 146 PasswordStoreFactory::GetForProfile(profile,
171 ServiceAccessType::EXPLICIT_ACCESS), 147 ServiceAccessType::EXPLICIT_ACCESS),
172 ProfileSyncServiceFactory::GetForProfile(profile)); 148 ProfileSyncServiceFactory::GetForProfile(profile));
173 counter.Init( 149 counter.Init(
174 profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, 150 profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED,
175 base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this))); 151 base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this)));
176 counter.Restart(); 152 counter.Restart();
177 153
178 WaitForCounting(); 154 WaitForCounting();
179 EXPECT_EQ(5u, GetResult()); 155 EXPECT_EQ(5u, GetResult());
180 EXPECT_FALSE(PasswordSyncEnabled());
181 } 156 }
182 157
183 // Tests that the counter doesn't count blacklisted entries. 158 // Tests that the counter doesn't count blacklisted entries.
184 IN_PROC_BROWSER_TEST_F(PasswordsCounterTest, Blacklisted) { 159 IN_PROC_BROWSER_TEST_F(PasswordsCounterTest, Blacklisted) {
185 AddLogin("https://www.google.com", "user1", false); 160 AddLogin("https://www.google.com", "user1", false);
186 AddLogin("https://www.google.com", "user2", true); 161 AddLogin("https://www.google.com", "user2", true);
187 AddLogin("https://www.chrome.com", "user3", true); 162 AddLogin("https://www.chrome.com", "user3", true);
188 WaitForUICallbacksFromAddingLogins(); 163 WaitForUICallbacksFromAddingLogins();
189 164
190 Profile* profile = browser()->profile(); 165 Profile* profile = browser()->profile();
191 browsing_data::PasswordsCounter counter( 166 browsing_data::PasswordsCounter counter(
192 PasswordStoreFactory::GetForProfile(profile, 167 PasswordStoreFactory::GetForProfile(profile,
193 ServiceAccessType::EXPLICIT_ACCESS), 168 ServiceAccessType::EXPLICIT_ACCESS),
194 ProfileSyncServiceFactory::GetForProfile(profile)); 169 ProfileSyncServiceFactory::GetForProfile(profile));
195 170
196 counter.Init( 171 counter.Init(
197 profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, 172 profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED,
198 base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this))); 173 base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this)));
199 counter.Restart(); 174 counter.Restart();
200 175
201 WaitForCounting(); 176 WaitForCounting();
202 EXPECT_EQ(1u, GetResult()); 177 EXPECT_EQ(1u, GetResult());
203 EXPECT_FALSE(PasswordSyncEnabled());
204 } 178 }
205 179
206 // Tests that the counter starts counting automatically when the deletion 180 // Tests that the counter starts counting automatically when the deletion
207 // pref changes to true. 181 // pref changes to true.
208 IN_PROC_BROWSER_TEST_F(PasswordsCounterTest, PrefChanged) { 182 IN_PROC_BROWSER_TEST_F(PasswordsCounterTest, PrefChanged) {
209 SetPasswordsDeletionPref(false); 183 SetPasswordsDeletionPref(false);
210 AddLogin("https://www.google.com", "user", false); 184 AddLogin("https://www.google.com", "user", false);
211 AddLogin("https://www.chrome.com", "user", false); 185 AddLogin("https://www.chrome.com", "user", false);
212 WaitForUICallbacksFromAddingLogins(); 186 WaitForUICallbacksFromAddingLogins();
213 187
214 Profile* profile = browser()->profile(); 188 Profile* profile = browser()->profile();
215 browsing_data::PasswordsCounter counter( 189 browsing_data::PasswordsCounter counter(
216 PasswordStoreFactory::GetForProfile(profile, 190 PasswordStoreFactory::GetForProfile(profile,
217 ServiceAccessType::EXPLICIT_ACCESS), 191 ServiceAccessType::EXPLICIT_ACCESS),
218 ProfileSyncServiceFactory::GetForProfile(profile)); 192 ProfileSyncServiceFactory::GetForProfile(profile));
219 counter.Init( 193 counter.Init(
220 profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED, 194 profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED,
221 base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this))); 195 base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this)));
222 SetPasswordsDeletionPref(true); 196 SetPasswordsDeletionPref(true);
223 197
224 WaitForCounting(); 198 WaitForCounting();
225 EXPECT_EQ(2u, GetResult()); 199 EXPECT_EQ(2u, GetResult());
226 EXPECT_FALSE(PasswordSyncEnabled());
227 } 200 }
228 201
229 // Tests that the counter starts counting automatically when 202 // Tests that the counter starts counting automatically when
230 // the password store changes. 203 // the password store changes.
231 IN_PROC_BROWSER_TEST_F(PasswordsCounterTest, StoreChanged) { 204 IN_PROC_BROWSER_TEST_F(PasswordsCounterTest, StoreChanged) {
232 AddLogin("https://www.google.com", "user", false); 205 AddLogin("https://www.google.com", "user", false);
233 WaitForUICallbacksFromAddingLogins(); 206 WaitForUICallbacksFromAddingLogins();
234 207
235 Profile* profile = browser()->profile(); 208 Profile* profile = browser()->profile();
236 browsing_data::PasswordsCounter counter( 209 browsing_data::PasswordsCounter counter(
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 262
290 SetDeletionPeriodPref(browsing_data::TimePeriod::FOUR_WEEKS); 263 SetDeletionPeriodPref(browsing_data::TimePeriod::FOUR_WEEKS);
291 WaitForCounting(); 264 WaitForCounting();
292 EXPECT_EQ(3u, GetResult()); 265 EXPECT_EQ(3u, GetResult());
293 266
294 SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME); 267 SetDeletionPeriodPref(browsing_data::TimePeriod::ALL_TIME);
295 WaitForCounting(); 268 WaitForCounting();
296 EXPECT_EQ(4u, GetResult()); 269 EXPECT_EQ(4u, GetResult());
297 } 270 }
298 271
299 // Test that the counting restarts when password sync state changes.
300 // TODO(crbug.com/553421): Move this to the sync/test/integration directory?
301 IN_PROC_BROWSER_TEST_F(PasswordsCounterTest, RestartOnSyncChange) {
302 // Set up the Sync client.
303 ASSERT_TRUE(SetupClients());
304 static const int kFirstProfileIndex = 0;
305 browser_sync::ProfileSyncService* sync_service =
306 GetSyncService(kFirstProfileIndex);
307 Profile* profile = GetProfile(kFirstProfileIndex);
308 // Set up the counter.
309 browsing_data::PasswordsCounter counter(
310 PasswordStoreFactory::GetForProfile(profile,
311 ServiceAccessType::EXPLICIT_ACCESS),
312 sync_service);
313
314 counter.Init(
315 profile->GetPrefs(), browsing_data::ClearBrowsingDataTab::ADVANCED,
316 base::Bind(&PasswordsCounterTest::Callback, base::Unretained(this)));
317
318 // Note that some Sync operations notify observers immediately (and thus there
319 // is no need to call |WaitForCounting()|; in fact, it would block the test),
320 // while other operations only post the task on UI thread's message loop
321 // (which requires calling |WaitForCounting()| for them to run). Therefore,
322 // this test always checks if the callback has already run and only waits
323 // if it has not.
324
325 // We sync all datatypes by default, so starting Sync means that we start
326 // syncing passwords, and this should restart the counter.
327 ASSERT_TRUE(SetupSync());
328 ASSERT_TRUE(sync_service->IsSyncActive());
329 ASSERT_TRUE(sync_service->GetPreferredDataTypes().Has(syncer::PASSWORDS));
330 WaitForCountingOrConfirmFinished();
331 EXPECT_TRUE(PasswordSyncEnabled());
332
333 // We stop syncing passwords in particular. This restarts the counter.
334 syncer::ModelTypeSet everything_except_passwords =
335 syncer::UserSelectableTypes();
336 everything_except_passwords.Remove(syncer::PASSWORDS);
337 auto sync_blocker = sync_service->GetSetupInProgressHandle();
338 sync_service->OnUserChoseDatatypes(/*sync_everything=*/false,
339 everything_except_passwords);
340 ASSERT_FALSE(sync_service->GetPreferredDataTypes().Has(syncer::PASSWORDS));
341 sync_blocker.reset();
342 WaitForCountingOrConfirmFinished();
343 ASSERT_FALSE(sync_service->GetPreferredDataTypes().Has(syncer::PASSWORDS));
344 EXPECT_FALSE(PasswordSyncEnabled());
345
346 // If password sync is not affected, the counter is not restarted.
347 syncer::ModelTypeSet only_history(syncer::HISTORY_DELETE_DIRECTIVES);
348 sync_service->ChangePreferredDataTypes(only_history);
349 sync_blocker = sync_service->GetSetupInProgressHandle();
350 sync_service->ChangePreferredDataTypes(only_history);
351 sync_blocker.reset();
352 EXPECT_FALSE(CountingFinishedSinceLastAsked());
353
354 // We start syncing passwords again. This restarts the counter.
355 sync_blocker = sync_service->GetSetupInProgressHandle();
356 sync_service->ChangePreferredDataTypes(syncer::ModelTypeSet::All());
357 sync_blocker.reset();
358 WaitForCountingOrConfirmFinished();
359 EXPECT_TRUE(PasswordSyncEnabled());
360
361 // Stopping the Sync service triggers a restart.
362 sync_service->RequestStop(syncer::SyncService::CLEAR_DATA);
363 WaitForCountingOrConfirmFinished();
364 EXPECT_FALSE(PasswordSyncEnabled());
365 }
366
367 } // namespace 272 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698