| Index: chrome/browser/browsing_data/browsing_data_local_storage_helper.cc
|
| diff --git a/chrome/browser/browsing_data/browsing_data_local_storage_helper.cc b/chrome/browser/browsing_data/browsing_data_local_storage_helper.cc
|
| index c9dc1d0facb21e868a62251797f51322e474d40c..be83374cddc35314a670d439647086fa413d7c1d 100644
|
| --- a/chrome/browser/browsing_data/browsing_data_local_storage_helper.cc
|
| +++ b/chrome/browser/browsing_data/browsing_data_local_storage_helper.cc
|
| @@ -13,6 +13,8 @@
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/local_storage_usage_info.h"
|
| #include "content/public/browser/storage_partition.h"
|
| +#include "content/public/common/origin_util.h"
|
| +#include "content/public/common/url_constants.h"
|
|
|
| using content::BrowserContext;
|
| using content::BrowserThread;
|
| @@ -20,6 +22,13 @@ using content::DOMStorageContext;
|
|
|
| namespace {
|
|
|
| +// Only websafe state and suborigins are considered browsing data.
|
| +bool HasStorageScheme(const GURL& origin) {
|
| + return BrowsingDataHelper::HasWebScheme(origin) ||
|
| + origin.scheme() == content::kHttpSuboriginScheme ||
|
| + origin.scheme() == content::kHttpsSuboriginScheme;
|
| +}
|
| +
|
| void GetUsageInfoCallback(
|
| const BrowsingDataLocalStorageHelper::FetchCallback& callback,
|
| const std::vector<content::LocalStorageUsageInfo>& infos) {
|
| @@ -28,8 +37,8 @@ void GetUsageInfoCallback(
|
|
|
| std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo> result;
|
| for (const content::LocalStorageUsageInfo& info : infos) {
|
| - if (!BrowsingDataHelper::HasWebScheme(info.origin))
|
| - continue; // Non-websafe state is not considered browsing data.
|
| + if (!HasStorageScheme(info.origin))
|
| + continue;
|
| result.push_back(BrowsingDataLocalStorageHelper::LocalStorageInfo(
|
| info.origin, info.data_size, info.last_modified));
|
| }
|
| @@ -79,13 +88,18 @@ CannedBrowsingDataLocalStorageHelper::CannedBrowsingDataLocalStorageHelper(
|
|
|
| void CannedBrowsingDataLocalStorageHelper::AddLocalStorage(
|
| const GURL& origin) {
|
| - if (!BrowsingDataHelper::HasWebScheme(origin))
|
| - return; // Non-websafe state is not considered browsing data.
|
| + if (!HasStorageScheme(origin))
|
| + return;
|
| pending_local_storage_info_.insert(origin);
|
| + if (content::HasSuborigin(origin)) {
|
| + pending_origins_to_pending_suborigins_.insert(
|
| + std::make_pair(content::StripSuboriginFromUrl(origin), origin));
|
| + }
|
| }
|
|
|
| void CannedBrowsingDataLocalStorageHelper::Reset() {
|
| pending_local_storage_info_.clear();
|
| + pending_origins_to_pending_suborigins_.clear();
|
| }
|
|
|
| bool CannedBrowsingDataLocalStorageHelper::empty() const {
|
| @@ -116,7 +130,20 @@ void CannedBrowsingDataLocalStorageHelper::StartFetching(
|
|
|
| void CannedBrowsingDataLocalStorageHelper::DeleteOrigin(const GURL& origin) {
|
| pending_local_storage_info_.erase(origin);
|
| + // All suborigins associated with |origin| must be removed.
|
| + // BrowsingDataLocalStorageHelper::DeleteOrigin takes care of doing that on
|
| + // the backend so it's not necessary to call it for each suborigin, but it is
|
| + // necessary to clear up the pending storage here.
|
| BrowsingDataLocalStorageHelper::DeleteOrigin(origin);
|
| + if (pending_origins_to_pending_suborigins_.count(origin) > 0) {
|
| + auto it = pending_origins_to_pending_suborigins_.find(origin);
|
| + while (it != pending_origins_to_pending_suborigins_.end()) {
|
| + pending_local_storage_info_.erase(it->second);
|
| + pending_origins_to_pending_suborigins_.erase(it);
|
| + it = pending_origins_to_pending_suborigins_.find(origin);
|
| + }
|
| + }
|
| + pending_origins_to_pending_suborigins_.erase(origin);
|
| }
|
|
|
| CannedBrowsingDataLocalStorageHelper::~CannedBrowsingDataLocalStorageHelper() {}
|
|
|