summaryrefslogtreecommitdiff
path: root/chromium/components/browsing_data
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/browsing_data')
-rw-r--r--chromium/components/browsing_data/content/appcache_helper.cc5
-rw-r--r--chromium/components/browsing_data/content/browsing_data_helper_browsertest.h2
-rw-r--r--chromium/components/browsing_data/content/cache_storage_helper.cc5
-rw-r--r--chromium/components/browsing_data/content/cookie_helper.cc16
-rw-r--r--chromium/components/browsing_data/content/cookie_helper.h3
-rw-r--r--chromium/components/browsing_data/content/database_helper.cc4
-rw-r--r--chromium/components/browsing_data/content/file_system_helper.cc9
-rw-r--r--chromium/components/browsing_data/content/indexed_db_helper.cc5
-rw-r--r--chromium/components/browsing_data/content/local_storage_helper.cc9
-rw-r--r--chromium/components/browsing_data/content/service_worker_helper.cc5
-rw-r--r--chromium/components/browsing_data/content/shared_worker_helper.cc9
-rw-r--r--chromium/components/browsing_data/core/browsing_data_utils.cc132
-rw-r--r--chromium/components/browsing_data/core/browsing_data_utils_unittest.cc59
-rw-r--r--chromium/components/browsing_data/core/counters/history_counter.cc6
-rw-r--r--chromium/components/browsing_data/core/counters/history_counter.h3
-rw-r--r--chromium/components/browsing_data/core/counters/passwords_counter.cc217
-rw-r--r--chromium/components/browsing_data/core/counters/passwords_counter.h49
17 files changed, 346 insertions, 192 deletions
diff --git a/chromium/components/browsing_data/content/appcache_helper.cc b/chromium/components/browsing_data/content/appcache_helper.cc
index 2843d6610b7..3a687538115 100644
--- a/chromium/components/browsing_data/content/appcache_helper.cc
+++ b/chromium/components/browsing_data/content/appcache_helper.cc
@@ -10,7 +10,6 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/location.h"
-#include "base/task/post_task.h"
#include "base/time/time.h"
#include "components/browsing_data/content/browsing_data_helper.h"
#include "content/public/browser/browser_context.h"
@@ -120,8 +119,8 @@ void CannedAppCacheHelper::StartFetching(FetchCallback callback) {
for (const auto& origin : pending_origins_)
result.emplace_back(origin, 0, base::Time());
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
void CannedAppCacheHelper::DeleteAppCaches(const url::Origin& origin) {
diff --git a/chromium/components/browsing_data/content/browsing_data_helper_browsertest.h b/chromium/components/browsing_data/content/browsing_data_helper_browsertest.h
index d390cf450a2..1f5e7bb9886 100644
--- a/chromium/components/browsing_data/content/browsing_data_helper_browsertest.h
+++ b/chromium/components/browsing_data/content/browsing_data_helper_browsertest.h
@@ -9,7 +9,7 @@
#include <list>
-#include "base/logging.h"
+#include "base/check.h"
#include "base/macros.h"
#include "base/run_loop.h"
diff --git a/chromium/components/browsing_data/content/cache_storage_helper.cc b/chromium/components/browsing_data/content/cache_storage_helper.cc
index 1827b765037..f4d6a547764 100644
--- a/chromium/components/browsing_data/content/cache_storage_helper.cc
+++ b/chromium/components/browsing_data/content/cache_storage_helper.cc
@@ -9,7 +9,6 @@
#include "base/bind.h"
#include "base/location.h"
-#include "base/task/post_task.h"
#include "components/browsing_data/content/browsing_data_helper.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
@@ -99,8 +98,8 @@ void CannedCacheStorageHelper::StartFetching(FetchCallback callback) {
for (const auto& origin : pending_origins_)
result.emplace_back(origin, 0, base::Time());
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
void CannedCacheStorageHelper::DeleteCacheStorage(const url::Origin& origin) {
diff --git a/chromium/components/browsing_data/content/cookie_helper.cc b/chromium/components/browsing_data/content/cookie_helper.cc
index c65b9936f5d..6b5cbdd1568 100644
--- a/chromium/components/browsing_data/content/cookie_helper.cc
+++ b/chromium/components/browsing_data/content/cookie_helper.cc
@@ -94,12 +94,7 @@ size_t CannedCookieHelper::GetCookieCount() const {
void CannedCookieHelper::StartFetching(FetchCallback callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- net::CookieList cookie_list;
- for (const auto& pair : origin_cookie_set_map_) {
- cookie_list.insert(cookie_list.begin(), pair.second->begin(),
- pair.second->end());
- }
- std::move(callback).Run(cookie_list);
+ std::move(callback).Run(GetCookieList());
}
void CannedCookieHelper::DeleteCookie(const net::CanonicalCookie& cookie) {
@@ -108,6 +103,15 @@ void CannedCookieHelper::DeleteCookie(const net::CanonicalCookie& cookie) {
CookieHelper::DeleteCookie(cookie);
}
+net::CookieList CannedCookieHelper::GetCookieList() {
+ net::CookieList cookie_list;
+ for (const auto& pair : origin_cookie_set_map_) {
+ cookie_list.insert(cookie_list.begin(), pair.second->begin(),
+ pair.second->end());
+ }
+ return cookie_list;
+}
+
bool CannedCookieHelper::DeleteMatchingCookie(
const net::CanonicalCookie& add_cookie,
canonical_cookie::CookieHashSet* cookie_set) {
diff --git a/chromium/components/browsing_data/content/cookie_helper.h b/chromium/components/browsing_data/content/cookie_helper.h
index 1abd0b4616c..99bd6da1335 100644
--- a/chromium/components/browsing_data/content/cookie_helper.h
+++ b/chromium/components/browsing_data/content/cookie_helper.h
@@ -99,6 +99,9 @@ class CannedCookieHelper : public CookieHelper {
// Returns the number of stored cookies.
size_t GetCookieCount() const;
+ // Directly returns stored cookies.
+ net::CookieList GetCookieList();
+
// Returns the map that contains the cookie lists for all frame urls.
const OriginCookieSetMap& origin_cookie_set_map() {
return origin_cookie_set_map_;
diff --git a/chromium/components/browsing_data/content/database_helper.cc b/chromium/components/browsing_data/content/database_helper.cc
index 7cf61910146..f8d55b638d5 100644
--- a/chromium/components/browsing_data/content/database_helper.cc
+++ b/chromium/components/browsing_data/content/database_helper.cc
@@ -113,8 +113,8 @@ void CannedDatabaseHelper::StartFetching(FetchCallback callback) {
result.emplace_back(origin, 0, base::Time());
}
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
void CannedDatabaseHelper::DeleteDatabase(const url::Origin& origin) {
diff --git a/chromium/components/browsing_data/content/file_system_helper.cc b/chromium/components/browsing_data/content/file_system_helper.cc
index dfe4beabaad..f7b7017bdd2 100644
--- a/chromium/components/browsing_data/content/file_system_helper.cc
+++ b/chromium/components/browsing_data/content/file_system_helper.cc
@@ -11,7 +11,6 @@
#include "base/location.h"
#include "base/sequenced_task_runner.h"
#include "base/stl_util.h"
-#include "base/task/post_task.h"
#include "components/browsing_data/content/browsing_data_helper.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
@@ -87,8 +86,8 @@ void FileSystemHelper::FetchFileSystemInfoInFileThread(FetchCallback callback) {
for (const auto& iter : file_system_info_map)
result.push_back(iter.second);
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
void FileSystemHelper::DeleteFileSystemOriginInFileThread(
@@ -147,8 +146,8 @@ void CannedFileSystemHelper::StartFetching(FetchCallback callback) {
for (const auto& origin : pending_origins_)
result.emplace_back(origin);
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
void CannedFileSystemHelper::DeleteFileSystemOrigin(const url::Origin& origin) {
diff --git a/chromium/components/browsing_data/content/indexed_db_helper.cc b/chromium/components/browsing_data/content/indexed_db_helper.cc
index 787ec701958..c7dcee56aad 100644
--- a/chromium/components/browsing_data/content/indexed_db_helper.cc
+++ b/chromium/components/browsing_data/content/indexed_db_helper.cc
@@ -11,7 +11,6 @@
#include "base/bind.h"
#include "base/location.h"
#include "base/memory/scoped_refptr.h"
-#include "base/task/post_task.h"
#include "base/time/time.h"
#include "components/browsing_data/content/browsing_data_helper.h"
#include "components/services/storage/public/mojom/indexed_db_control.mojom.h"
@@ -99,8 +98,8 @@ void CannedIndexedDBHelper::StartFetching(FetchCallback callback) {
for (const auto& origin : pending_origins_)
result.emplace_back(origin, 0, base::Time());
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
void CannedIndexedDBHelper::DeleteIndexedDB(
diff --git a/chromium/components/browsing_data/content/local_storage_helper.cc b/chromium/components/browsing_data/content/local_storage_helper.cc
index 5dabe426343..62830c440be 100644
--- a/chromium/components/browsing_data/content/local_storage_helper.cc
+++ b/chromium/components/browsing_data/content/local_storage_helper.cc
@@ -10,7 +10,6 @@
#include "base/bind.h"
#include "base/location.h"
#include "base/stl_util.h"
-#include "base/task/post_task.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
@@ -44,8 +43,8 @@ void GetUsageInfoCallback(LocalStorageHelper::FetchCallback callback,
result.push_back(info);
}
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
} // namespace
@@ -106,8 +105,8 @@ void CannedLocalStorageHelper::StartFetching(FetchCallback callback) {
for (const auto& origin : pending_origins_)
result.emplace_back(origin, 0, base::Time());
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
void CannedLocalStorageHelper::DeleteOrigin(const url::Origin& origin,
diff --git a/chromium/components/browsing_data/content/service_worker_helper.cc b/chromium/components/browsing_data/content/service_worker_helper.cc
index cb64f988c1d..d6243cc627f 100644
--- a/chromium/components/browsing_data/content/service_worker_helper.cc
+++ b/chromium/components/browsing_data/content/service_worker_helper.cc
@@ -11,7 +11,6 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/location.h"
-#include "base/task/post_task.h"
#include "components/browsing_data/content/browsing_data_helper.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
@@ -121,8 +120,8 @@ void CannedServiceWorkerHelper::StartFetching(FetchCallback callback) {
for (const auto& origin : pending_origins_)
result.emplace_back(origin, 0, base::Time());
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
void CannedServiceWorkerHelper::DeleteServiceWorkers(const GURL& origin) {
diff --git a/chromium/components/browsing_data/content/shared_worker_helper.cc b/chromium/components/browsing_data/content/shared_worker_helper.cc
index f8df596ffce..0ae69676549 100644
--- a/chromium/components/browsing_data/content/shared_worker_helper.cc
+++ b/chromium/components/browsing_data/content/shared_worker_helper.cc
@@ -9,7 +9,6 @@
#include "base/bind.h"
#include "base/location.h"
-#include "base/task/post_task.h"
#include "components/browsing_data/content/browsing_data_helper.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
@@ -50,8 +49,8 @@ void SharedWorkerHelper::StartFetching(FetchCallback callback) {
// We always return an empty list, as there are no "persistent" shared
// workers.
std::list<SharedWorkerInfo> result;
- base::PostTask(FROM_HERE, {content::BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
void SharedWorkerHelper::DeleteSharedWorker(
const GURL& worker,
@@ -104,8 +103,8 @@ void CannedSharedWorkerHelper::StartFetching(FetchCallback callback) {
std::list<SharedWorkerInfo> result;
for (auto& it : pending_shared_worker_info_)
result.push_back(it);
- base::PostTask(FROM_HERE, {content::BrowserThread::UI},
- base::BindOnce(std::move(callback), result));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), result));
}
void CannedSharedWorkerHelper::DeleteSharedWorker(
diff --git a/chromium/components/browsing_data/core/browsing_data_utils.cc b/chromium/components/browsing_data/core/browsing_data_utils.cc
index df660844a7f..9b3cb6d47de 100644
--- a/chromium/components/browsing_data/core/browsing_data_utils.cc
+++ b/chromium/components/browsing_data/core/browsing_data_utils.cc
@@ -22,6 +22,33 @@
namespace browsing_data {
+// Creates a string like "for a.com, b.com, and 4 more".
+base::string16 CreateDomainExamples(
+ int password_count,
+ const std::vector<std::string> domain_examples) {
+ DCHECK_GE(password_count,
+ base::checked_cast<browsing_data::BrowsingDataCounter::ResultInt>(
+ domain_examples.size()));
+ DCHECK_EQ(domain_examples.empty(), password_count == 0);
+ std::vector<base::string16> replacements;
+
+ replacements.emplace_back(base::UTF8ToUTF16(domain_examples[0]));
+ if (domain_examples.size() > 1) {
+ replacements.emplace_back(base::UTF8ToUTF16(domain_examples[1]));
+ }
+ if (password_count > 2 && domain_examples.size() > 1) {
+ replacements.emplace_back(l10n_util::GetPluralStringFUTF16(
+ IDS_DEL_PASSWORDS_COUNTER_AND_X_MORE, password_count - 2));
+ }
+ base::string16 domains_list = base::ReplaceStringPlaceholders(
+ l10n_util::GetPluralStringFUTF16(IDS_DEL_PASSWORDS_DOMAINS_DISPLAY,
+ (domain_examples.size() > 1)
+ ? password_count
+ : domain_examples.size()),
+ replacements, nullptr);
+ return domains_list;
+}
+
base::Time CalculateBeginDeleteTime(TimePeriod time_period) {
base::TimeDelta diff;
base::Time delete_begin_time = base::Time::Now();
@@ -110,81 +137,91 @@ void RecordTimePeriodChange(TimePeriod period) {
base::string16 GetCounterTextFromResult(
const BrowsingDataCounter::Result* result) {
- base::string16 text;
std::string pref_name = result->source()->GetPrefName();
if (!result->Finished()) {
// The counter is still counting.
- text = l10n_util::GetStringUTF16(IDS_CLEAR_BROWSING_DATA_CALCULATING);
+ return l10n_util::GetStringUTF16(IDS_CLEAR_BROWSING_DATA_CALCULATING);
+ }
- } else if (pref_name == prefs::kDeletePasswords) {
+ if (pref_name == prefs::kDeletePasswords) {
const PasswordsCounter::PasswordsResult* password_result =
static_cast<const PasswordsCounter::PasswordsResult*>(result);
- BrowsingDataCounter::ResultInt password_count = password_result->Value();
- const std::vector<std::string>& domain_examples =
- password_result->domain_examples();
-
- DCHECK_GE(password_count,
- base::checked_cast<browsing_data::BrowsingDataCounter::ResultInt>(
- domain_examples.size()));
- DCHECK_EQ(domain_examples.empty(), password_count == 0);
+ std::vector<base::string16> parts;
+ BrowsingDataCounter::ResultInt profile_passwords = password_result->Value();
- std::vector<base::string16> replacements;
- if (domain_examples.size()) {
- replacements.emplace_back(base::UTF8ToUTF16(domain_examples[0]));
- if (domain_examples.size() > 1) {
- replacements.emplace_back(base::UTF8ToUTF16(domain_examples[1]));
- }
- if (password_count > 2 && domain_examples.size() > 1) {
- replacements.emplace_back(l10n_util::GetPluralStringFUTF16(
- IDS_DEL_PASSWORDS_COUNTER_AND_X_MORE, password_count - 2));
- }
- const base::string16& domains_list = base::ReplaceStringPlaceholders(
- l10n_util::GetPluralStringFUTF16(IDS_DEL_PASSWORDS_DOMAINS_DISPLAY,
- (domain_examples.size() > 1)
- ? password_count
- : domain_examples.size()),
- replacements, nullptr);
- text = base::ReplaceStringPlaceholders(
+ if (profile_passwords) {
+ parts.emplace_back(base::ReplaceStringPlaceholders(
l10n_util::GetPluralStringFUTF16(
password_result->is_sync_enabled()
? IDS_DEL_PASSWORDS_COUNTER_SYNCED
: IDS_DEL_PASSWORDS_COUNTER,
- password_count),
- {domains_list}, nullptr);
- } else {
- text = l10n_util::GetStringUTF16(
- IDS_DEL_PASSWORDS_AND_SIGNIN_DATA_COUNTER_NONE);
+ profile_passwords),
+ {CreateDomainExamples(profile_passwords,
+ password_result->domain_examples())},
+ nullptr));
+ }
+
+ if (password_result->account_passwords()) {
+ parts.emplace_back(base::ReplaceStringPlaceholders(
+ l10n_util::GetPluralStringFUTF16(
+ IDS_DEL_ACCOUNT_PASSWORDS_COUNTER,
+ password_result->account_passwords()),
+ {CreateDomainExamples(password_result->account_passwords(),
+ password_result->account_domain_examples())},
+ nullptr));
+ }
+
+ switch (parts.size()) {
+ case 0:
+ return l10n_util::GetStringUTF16(
+ IDS_DEL_PASSWORDS_AND_SIGNIN_DATA_COUNTER_NONE);
+ case 1:
+ return parts[0];
+ case 2:
+ return l10n_util::GetStringFUTF16(
+ IDS_DEL_PASSWORDS_AND_SIGNIN_DATA_COUNTER_COMBINATION, parts[0],
+ parts[1]);
+ default:
+ NOTREACHED();
}
+ }
- } else if (pref_name == prefs::kDeleteDownloadHistory) {
+ if (pref_name == prefs::kDeleteDownloadHistory) {
BrowsingDataCounter::ResultInt count =
static_cast<const BrowsingDataCounter::FinishedResult*>(result)
->Value();
- text = l10n_util::GetPluralStringFUTF16(IDS_DEL_DOWNLOADS_COUNTER, count);
- } else if (pref_name == prefs::kDeleteSiteSettings) {
+ return l10n_util::GetPluralStringFUTF16(IDS_DEL_DOWNLOADS_COUNTER, count);
+ }
+
+ if (pref_name == prefs::kDeleteSiteSettings) {
BrowsingDataCounter::ResultInt count =
static_cast<const BrowsingDataCounter::FinishedResult*>(result)
->Value();
- text =
- l10n_util::GetPluralStringFUTF16(IDS_DEL_SITE_SETTINGS_COUNTER, count);
- } else if (pref_name == prefs::kDeleteBrowsingHistoryBasic) {
+ return l10n_util::GetPluralStringFUTF16(IDS_DEL_SITE_SETTINGS_COUNTER,
+ count);
+ }
+
+ if (pref_name == prefs::kDeleteBrowsingHistoryBasic) {
// The basic tab doesn't show history counter results.
NOTREACHED();
- } else if (pref_name == prefs::kDeleteBrowsingHistory) {
+ }
+
+ if (pref_name == prefs::kDeleteBrowsingHistory) {
// History counter.
const HistoryCounter::HistoryResult* history_result =
static_cast<const HistoryCounter::HistoryResult*>(result);
BrowsingDataCounter::ResultInt local_item_count = history_result->Value();
bool has_synced_visits = history_result->has_synced_visits();
- text = has_synced_visits
+ return has_synced_visits
? l10n_util::GetPluralStringFUTF16(
IDS_DEL_BROWSING_HISTORY_COUNTER_SYNCED, local_item_count)
: l10n_util::GetPluralStringFUTF16(
IDS_DEL_BROWSING_HISTORY_COUNTER, local_item_count);
+ }
- } else if (pref_name == prefs::kDeleteFormData) {
+ if (pref_name == prefs::kDeleteFormData) {
// Autofill counter.
const AutofillCounter::AutofillResult* autofill_result =
static_cast<const AutofillCounter::AutofillResult*>(result);
@@ -229,22 +266,22 @@ base::string16 GetCounterTextFromResult(
// Construct the resulting string from the sections in |displayed_strings|.
switch (displayed_strings.size()) {
case 0:
- text = l10n_util::GetStringUTF16(IDS_DEL_AUTOFILL_COUNTER_EMPTY);
+ return l10n_util::GetStringUTF16(IDS_DEL_AUTOFILL_COUNTER_EMPTY);
break;
case 1:
- text = synced ? l10n_util::GetStringFUTF16(
+ return synced ? l10n_util::GetStringFUTF16(
IDS_DEL_AUTOFILL_COUNTER_ONE_TYPE_SYNCED,
displayed_strings[0])
: displayed_strings[0];
break;
case 2:
- text = l10n_util::GetStringFUTF16(
+ return l10n_util::GetStringFUTF16(
synced ? IDS_DEL_AUTOFILL_COUNTER_TWO_TYPES_SYNCED
: IDS_DEL_AUTOFILL_COUNTER_TWO_TYPES,
displayed_strings[0], displayed_strings[1]);
break;
case 3:
- text = l10n_util::GetStringFUTF16(
+ return l10n_util::GetStringFUTF16(
synced ? IDS_DEL_AUTOFILL_COUNTER_THREE_TYPES_SYNCED
: IDS_DEL_AUTOFILL_COUNTER_THREE_TYPES,
displayed_strings[0], displayed_strings[1], displayed_strings[2]);
@@ -254,7 +291,8 @@ base::string16 GetCounterTextFromResult(
}
}
- return text;
+ NOTREACHED();
+ return base::string16();
}
const char* GetTimePeriodPreferenceName(
diff --git a/chromium/components/browsing_data/core/browsing_data_utils_unittest.cc b/chromium/components/browsing_data/core/browsing_data_utils_unittest.cc
index 78f79bf795d..e217276791d 100644
--- a/chromium/components/browsing_data/core/browsing_data_utils_unittest.cc
+++ b/chromium/components/browsing_data/core/browsing_data_utils_unittest.cc
@@ -33,15 +33,14 @@ class FakeWebDataService : public autofill::AutofillWebDataService {
base::ThreadTaskRunnerHandle::Get()) {}
protected:
- ~FakeWebDataService() override {}
+ ~FakeWebDataService() override = default;
};
} // namespace
class BrowsingDataUtilsTest : public testing::Test {
public:
- BrowsingDataUtilsTest() {}
- ~BrowsingDataUtilsTest() override {}
+ ~BrowsingDataUtilsTest() override = default;
void SetUp() override {
browsing_data::prefs::RegisterBrowserUserPrefs(prefs_.registry());
@@ -105,36 +104,48 @@ TEST_F(BrowsingDataUtilsTest, PasswordsCounterResult) {
scoped_refptr<password_manager::TestPasswordStore> store(
new password_manager::TestPasswordStore());
PasswordsCounter counter(
- scoped_refptr<password_manager::PasswordStore>(store), nullptr);
+ scoped_refptr<password_manager::PasswordStore>(store), nullptr, nullptr);
- const struct TestCase {
+ // Use a separate struct for input to make test cases easier to read after
+ // auto formatting.
+ struct TestInput {
int num_passwords;
+ int num_account_passwords;
int is_synced;
std::vector<std::string> domain_examples;
+ std::vector<std::string> account_domain_examples;
+ };
+ const struct TestCase {
+ TestInput input;
std::string expected_output;
} kTestCases[] = {
- {0, false, {}, "None"},
- {0, true, {}, "None"},
- {1, false, {"domain1.com"}, "1 password (for domain1.com)"},
- {1, true, {"domain1.com"}, "1 password (for domain1.com, synced)"},
- {5,
- false,
- {"domain1.com", "domain2.com", "domain3.com", "domain4.com"},
- "5 passwords (for domain1.com, domain2.com, and 3 more)"},
- {5,
- true,
- {"domain1.com", "domain2.com", "domain3.com", "domain4.com",
- "domain5.com"},
- "5 passwords (for domain1.com, domain2.com, and 3 more, synced)"},
+ {{0, 0, false, {}, {}}, "None"},
+ {{0, 0, true, {}, {}}, "None"},
+ {{1, 0, false, {"a.com"}, {}}, "1 password (for a.com)"},
+ {{1, 0, true, {"a.com"}, {}}, "1 password (for a.com, synced)"},
+ {{5, 0, false, {"a.com", "b.com", "c.com", "d.com"}, {}},
+ "5 passwords (for a.com, b.com, and 3 more)"},
+ {{2, 0, false, {"a.com", "b.com"}, {}}, "2 passwords (for a.com, b.com)"},
+ {{5, 0, true, {"a.com", "b.com", "c.com", "d.com", "e.com"}, {}},
+ "5 passwords (for a.com, b.com, and 3 more, synced)"},
+ {{0, 1, false, {}, {"a.com"}}, "1 password in your account (for a.com)"},
+ {{0, 2, false, {}, {"a.com", "b.com"}},
+ "2 passwords in your account (for a.com, b.com)"},
+ {{0, 3, false, {}, {"a.com", "b.com", "c.com"}},
+ "3 passwords in your account (for a.com, b.com, and 1 more)"},
+ {{2, 1, false, {"a.com", "b.com"}, {"c.com"}},
+ "2 passwords (for a.com, b.com); 1 password in your account (for "
+ "c.com)"},
};
for (const TestCase& test_case : kTestCases) {
- PasswordsCounter::PasswordsResult result(&counter, test_case.num_passwords,
- test_case.is_synced,
- test_case.domain_examples);
- SCOPED_TRACE(base::StringPrintf("Test params: %d password(s), %d is_synced",
- test_case.num_passwords,
- test_case.is_synced));
+ auto& input = test_case.input;
+ PasswordsCounter::PasswordsResult result(
+ &counter, input.num_passwords, input.num_account_passwords,
+ input.is_synced, input.domain_examples, input.account_domain_examples);
+ SCOPED_TRACE(base::StringPrintf(
+ "Test params: %d password(s), %d account password(s), %d is_synced",
+ input.num_passwords, input.num_account_passwords, input.is_synced));
base::string16 output = browsing_data::GetCounterTextFromResult(&result);
EXPECT_EQ(output, base::ASCIIToUTF16(test_case.expected_output));
}
diff --git a/chromium/components/browsing_data/core/counters/history_counter.cc b/chromium/components/browsing_data/core/counters/history_counter.cc
index a54e8a6a023..2cb0043e9b7 100644
--- a/chromium/components/browsing_data/core/counters/history_counter.cc
+++ b/chromium/components/browsing_data/core/counters/history_counter.cc
@@ -124,7 +124,7 @@ void HistoryCounter::OnGetLocalHistoryCount(
history::HistoryCountResult result) {
// Ensure that all callbacks are on the same thread, so that we do not need
// a mutex for |MergeResults|.
- DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (!result.success) {
return;
@@ -140,7 +140,7 @@ void HistoryCounter::OnGetWebHistoryCount(
const base::DictionaryValue* result) {
// Ensure that all callbacks are on the same thread, so that we do not need
// a mutex for |MergeResults|.
- DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
// If the timeout for this request already fired, ignore the result.
if (!web_history_timeout_.IsRunning())
@@ -161,7 +161,7 @@ void HistoryCounter::OnGetWebHistoryCount(
void HistoryCounter::OnWebHistoryTimeout() {
// Ensure that all callbacks are on the same thread, so that we do not need
// a mutex for |MergeResults|.
- DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
// If the query timed out, err on the safe side and inform the user that they
// may have history items stored in Sync.
diff --git a/chromium/components/browsing_data/core/counters/history_counter.h b/chromium/components/browsing_data/core/counters/history_counter.h
index 11be1d01cec..b80a8e8aabd 100644
--- a/chromium/components/browsing_data/core/counters/history_counter.h
+++ b/chromium/components/browsing_data/core/counters/history_counter.h
@@ -7,6 +7,7 @@
#include <memory>
+#include "base/sequence_checker.h"
#include "base/task/cancelable_task_tracker.h"
#include "base/timer/timer.h"
#include "components/browsing_data/core/counters/browsing_data_counter.h"
@@ -76,7 +77,7 @@ class HistoryCounter : public browsing_data::BrowsingDataCounter {
std::unique_ptr<history::WebHistoryService::Request> web_history_request_;
base::OneShotTimer web_history_timeout_;
- base::ThreadChecker thread_checker_;
+ SEQUENCE_CHECKER(sequence_checker_);
BrowsingDataCounter::ResultInt local_result_;
diff --git a/chromium/components/browsing_data/core/counters/passwords_counter.cc b/chromium/components/browsing_data/core/counters/passwords_counter.cc
index 61490d42871..f8b47a33c30 100644
--- a/chromium/components/browsing_data/core/counters/passwords_counter.cc
+++ b/chromium/components/browsing_data/core/counters/passwords_counter.cc
@@ -12,79 +12,104 @@
#include "components/browsing_data/core/pref_names.h"
#include "components/password_manager/core/browser/password_manager_util.h"
#include "components/password_manager/core/browser/password_store.h"
+#include "components/password_manager/core/browser/password_store_change.h"
#include "components/sync/driver/sync_service.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "url/gurl.h"
+namespace browsing_data {
namespace {
bool IsPasswordSyncEnabled(const syncer::SyncService* sync_service) {
if (!sync_service)
return false;
- return password_manager_util::GetPasswordSyncState(sync_service) !=
- password_manager::SyncState::NOT_SYNCING;
+ switch (password_manager_util::GetPasswordSyncState(sync_service)) {
+ case password_manager::NOT_SYNCING:
+ case password_manager::ACCOUNT_PASSWORDS_ACTIVE_NORMAL_ENCRYPTION:
+ return false;
+ case password_manager::SYNCING_NORMAL_ENCRYPTION:
+ case password_manager::SYNCING_WITH_CUSTOM_PASSPHRASE:
+ return true;
+ }
}
-} // namespace
-
-namespace browsing_data {
-
-// PasswordsCounter::PasswordsResult ----------------------------------
-PasswordsCounter::PasswordsResult::PasswordsResult(
- const BrowsingDataCounter* source,
- BrowsingDataCounter::ResultInt value,
- bool sync_enabled,
- std::vector<std::string> domain_examples)
- : SyncResult(source, value, sync_enabled),
- domain_examples_(std::move(domain_examples)) {}
-
-PasswordsCounter::PasswordsResult::~PasswordsResult() {}
-
-PasswordsCounter::PasswordsCounter(
+// PasswordStoreFetcher ----------------------------------
+
+// Fetches passswords and observes a PasswordStore.
+class PasswordStoreFetcher : public password_manager::PasswordStoreConsumer,
+ public password_manager::PasswordStore::Observer {
+ public:
+ PasswordStoreFetcher(scoped_refptr<password_manager::PasswordStore> store,
+ base::RepeatingClosure logins_changed_closure);
+ ~PasswordStoreFetcher() override;
+ void Fetch(base::Time start,
+ base::Time end,
+ base::OnceClosure fetch_complete);
+
+ void OnGetPasswordStoreResults(
+ std::vector<std::unique_ptr<autofill::PasswordForm>> results) override;
+
+ // Called when the contents of the password store change. Triggers new
+ // counting.
+ void OnLoginsChanged(
+ const password_manager::PasswordStoreChangeList& changes) override;
+
+ int num_passwords() { return num_passwords_; }
+ const std::vector<std::string>& domain_examples() { return domain_examples_; }
+
+ private:
+ scoped_refptr<password_manager::PasswordStore> store_;
+ base::RepeatingClosure logins_changed_closure_;
+ base::OnceClosure fetch_complete_;
+ base::Time start_;
+ base::Time end_;
+
+ int num_passwords_ = 0;
+ std::vector<std::string> domain_examples_;
+};
+
+PasswordStoreFetcher::PasswordStoreFetcher(
scoped_refptr<password_manager::PasswordStore> store,
- syncer::SyncService* sync_service)
- : store_(store), sync_tracker_(this, sync_service) {
- DCHECK(store_);
+ base::RepeatingClosure logins_changed_closure)
+ : store_(store), logins_changed_closure_(logins_changed_closure) {
+ if (store_)
+ store_->AddObserver(this);
}
-PasswordsCounter::~PasswordsCounter() {
- store_->RemoveObserver(this);
-}
-
-void PasswordsCounter::OnInitialized() {
- sync_tracker_.OnInitialized(base::BindRepeating(&IsPasswordSyncEnabled));
- store_->AddObserver(this);
+PasswordStoreFetcher::~PasswordStoreFetcher() {
+ if (store_)
+ store_->RemoveObserver(this);
}
-const char* PasswordsCounter::GetPrefName() const {
- return browsing_data::prefs::kDeletePasswords;
+void PasswordStoreFetcher::OnLoginsChanged(
+ const password_manager::PasswordStoreChangeList& changes) {
+ logins_changed_closure_.Run();
}
-void PasswordsCounter::Count() {
+void PasswordStoreFetcher::Fetch(base::Time start,
+ base::Time end,
+ base::OnceClosure fetch_complete) {
CancelAllRequests();
- domain_examples_.clear();
- // TODO(msramek): We don't actually need the logins themselves, just their
- // count. Consider implementing |PasswordStore::CountAutofillableLogins|.
- // This custom request should also allow us to specify the time range, so that
- // we can use it to filter the login creation date in the database.
- store_->GetAutofillableLogins(this);
-}
-
-std::unique_ptr<PasswordsCounter::PasswordsResult>
-PasswordsCounter::MakeResult() {
- return std::make_unique<PasswordsCounter::PasswordsResult>(
- this, num_passwords_, is_sync_active(), domain_examples_);
+ start_ = start;
+ end_ = end;
+ fetch_complete_ = std::move(fetch_complete);
+
+ if (store_) {
+ store_->GetAutofillableLogins(this);
+ } else {
+ std::move(fetch_complete_).Run();
+ }
}
-void PasswordsCounter::OnGetPasswordStoreResults(
+void PasswordStoreFetcher::OnGetPasswordStoreResults(
std::vector<std::unique_ptr<autofill::PasswordForm>> results) {
- base::Time start = GetPeriodStart();
- base::Time end = GetPeriodEnd();
+ domain_examples_.clear();
+
results.erase(
std::remove_if(
results.begin(), results.end(),
- [start, end](const std::unique_ptr<autofill::PasswordForm>& form) {
- return (form->date_created < start || form->date_created >= end);
+ [this](const std::unique_ptr<autofill::PasswordForm>& form) {
+ return (form->date_created < start_ || form->date_created >= end_);
}),
results.end());
num_passwords_ = results.size();
@@ -97,10 +122,10 @@ void PasswordsCounter::OnGetPasswordStoreResults(
std::vector<std::string> sorted_domains;
for (const auto& result : results) {
std::string domain = net::registry_controlled_domains::GetDomainAndRegistry(
- result->origin,
+ result->url,
net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
if (domain.empty())
- domain = result->origin.host();
+ domain = result->url.host();
sorted_domains.emplace_back(domain);
}
// Only consecutive duplicates are removed below. Since we're only listing two
@@ -110,18 +135,94 @@ void PasswordsCounter::OnGetPasswordStoreResults(
sorted_domains.erase(
std::unique(sorted_domains.begin(), sorted_domains.end()),
sorted_domains.end());
- if (sorted_domains.size() > 0) {
+ if (sorted_domains.size() > 0)
domain_examples_.emplace_back(sorted_domains[0]);
- }
- if (sorted_domains.size() > 1) {
+ if (sorted_domains.size() > 1)
domain_examples_.emplace_back(sorted_domains[1]);
- }
- ReportResult(MakeResult());
+
+ std::move(fetch_complete_).Run();
}
-void PasswordsCounter::OnLoginsChanged(
- const password_manager::PasswordStoreChangeList& changes) {
- Restart();
+} // namespace
+
+// PasswordsCounter::PasswordsResult ----------------------------------
+PasswordsCounter::PasswordsResult::PasswordsResult(
+ const BrowsingDataCounter* source,
+ ResultInt profile_passwords,
+ ResultInt account_passwords,
+ bool sync_enabled,
+ std::vector<std::string> domain_examples,
+ std::vector<std::string> account_domain_examples)
+ : SyncResult(source, profile_passwords, sync_enabled),
+ account_passwords_(account_passwords),
+ domain_examples_(std::move(domain_examples)),
+ account_domain_examples_(std::move(account_domain_examples)) {}
+
+PasswordsCounter::PasswordsResult::~PasswordsResult() = default;
+
+// PasswordsCounter ----------------------------------
+
+PasswordsCounter::PasswordsCounter(
+ scoped_refptr<password_manager::PasswordStore> profile_store,
+ scoped_refptr<password_manager::PasswordStore> account_store,
+ syncer::SyncService* sync_service)
+ : sync_tracker_(this, sync_service) {
+ profile_store_fetcher_ = std::make_unique<PasswordStoreFetcher>(
+ profile_store,
+ base::BindRepeating(&PasswordsCounter::Restart, base::Unretained(this))),
+ account_store_fetcher_ = std::make_unique<PasswordStoreFetcher>(
+ account_store,
+ base::BindRepeating(&PasswordsCounter::Restart, base::Unretained(this)));
+ DCHECK(profile_store);
+ // |account_store| may be null.
+}
+
+PasswordsCounter::~PasswordsCounter() = default;
+
+int PasswordsCounter::num_passwords() {
+ return profile_store_fetcher_->num_passwords();
+}
+
+int PasswordsCounter::num_account_passwords() {
+ return account_store_fetcher_->num_passwords();
+}
+
+const std::vector<std::string>& PasswordsCounter::domain_examples() {
+ return profile_store_fetcher_->domain_examples();
+}
+const std::vector<std::string>& PasswordsCounter::account_domain_examples() {
+ return account_store_fetcher_->domain_examples();
+}
+
+void PasswordsCounter::OnInitialized() {
+ sync_tracker_.OnInitialized(base::BindRepeating(&IsPasswordSyncEnabled));
+}
+
+const char* PasswordsCounter::GetPrefName() const {
+ return browsing_data::prefs::kDeletePasswords;
+}
+
+void PasswordsCounter::Count() {
+ remaining_tasks_ = 2;
+ profile_store_fetcher_->Fetch(
+ GetPeriodStart(), GetPeriodEnd(),
+ base::BindOnce(&PasswordsCounter::OnFetchDone, base::Unretained(this)));
+ account_store_fetcher_->Fetch(
+ GetPeriodStart(), GetPeriodEnd(),
+ base::BindOnce(&PasswordsCounter::OnFetchDone, base::Unretained(this)));
+}
+
+std::unique_ptr<PasswordsCounter::PasswordsResult>
+PasswordsCounter::MakeResult() {
+ DCHECK(!(is_sync_active() && num_account_passwords() > 0));
+ return std::make_unique<PasswordsCounter::PasswordsResult>(
+ this, num_passwords(), num_account_passwords(), is_sync_active(),
+ domain_examples(), account_domain_examples());
+}
+
+void PasswordsCounter::OnFetchDone() {
+ if (--remaining_tasks_ == 0)
+ ReportResult(MakeResult());
}
} // namespace browsing_data
diff --git a/chromium/components/browsing_data/core/counters/passwords_counter.h b/chromium/components/browsing_data/core/counters/passwords_counter.h
index 6324a803e62..49a20368204 100644
--- a/chromium/components/browsing_data/core/counters/passwords_counter.h
+++ b/chromium/components/browsing_data/core/counters/passwords_counter.h
@@ -15,10 +15,10 @@
#include "components/password_manager/core/browser/password_store_consumer.h"
namespace browsing_data {
-
-class PasswordsCounter : public browsing_data::BrowsingDataCounter,
- public password_manager::PasswordStoreConsumer,
- public password_manager::PasswordStore::Observer {
+namespace {
+class PasswordStoreFetcher;
+}
+class PasswordsCounter : public browsing_data::BrowsingDataCounter {
public:
// A subclass of SyncResult that stores the result value, a boolean
// representing whether the datatype is synced, and a vector of example
@@ -26,55 +26,58 @@ class PasswordsCounter : public browsing_data::BrowsingDataCounter,
class PasswordsResult : public SyncResult {
public:
PasswordsResult(const BrowsingDataCounter* source,
- ResultInt value,
+ ResultInt profile_passwords,
+ ResultInt account_passwords,
bool sync_enabled,
- std::vector<std::string> domain_examples);
+ std::vector<std::string> domain_examples,
+ std::vector<std::string> account_domain_examples);
~PasswordsResult() override;
+ ResultInt account_passwords() const { return account_passwords_; }
+
const std::vector<std::string>& domain_examples() const {
return domain_examples_;
}
+ const std::vector<std::string>& account_domain_examples() const {
+ return account_domain_examples_;
+ }
+
private:
+ ResultInt account_passwords_ = 0;
std::vector<std::string> domain_examples_;
+ std::vector<std::string> account_domain_examples_;
DISALLOW_COPY_AND_ASSIGN(PasswordsResult);
};
explicit PasswordsCounter(
- scoped_refptr<password_manager::PasswordStore> store,
+ scoped_refptr<password_manager::PasswordStore> profile_store,
+ scoped_refptr<password_manager::PasswordStore> account_store,
syncer::SyncService* sync_service);
~PasswordsCounter() override;
const char* GetPrefName() const override;
-
protected:
virtual std::unique_ptr<PasswordsResult> MakeResult();
bool is_sync_active() { return sync_tracker_.IsSyncActive(); }
- int num_passwords() { return num_passwords_; }
- const std::vector<std::string>& domain_examples() { return domain_examples_; }
+ int num_passwords();
+ int num_account_passwords();
+ const std::vector<std::string>& domain_examples();
+ const std::vector<std::string>& account_domain_examples();
private:
void OnInitialized() override;
-
- // Counting is done asynchronously in a request to PasswordStore.
- // This callback returns the results, which are subsequently reported.
- void OnGetPasswordStoreResults(
- std::vector<std::unique_ptr<autofill::PasswordForm>> results) override;
-
- // Called when the contents of the password store change. Triggers new
- // counting.
- void OnLoginsChanged(
- const password_manager::PasswordStoreChangeList& changes) override;
+ void OnFetchDone();
void Count() override;
base::CancelableTaskTracker cancelable_task_tracker_;
- scoped_refptr<password_manager::PasswordStore> store_;
+ std::unique_ptr<PasswordStoreFetcher> profile_store_fetcher_;
+ std::unique_ptr<PasswordStoreFetcher> account_store_fetcher_;
SyncTracker sync_tracker_;
- int num_passwords_;
- std::vector<std::string> domain_examples_;
+ int remaining_tasks_ = 0;
};
} // namespace browsing_data