| Index: content/browser/dom_storage/dom_storage_context_impl.cc
|
| diff --git a/content/browser/dom_storage/dom_storage_context_impl.cc b/content/browser/dom_storage/dom_storage_context_impl.cc
|
| index cd2cdbd49181b9fce9b888f912c708c41fc2096e..450e2c458e0ee4271102b23f00f6c62488750db9 100644
|
| --- a/content/browser/dom_storage/dom_storage_context_impl.cc
|
| +++ b/content/browser/dom_storage/dom_storage_context_impl.cc
|
| @@ -30,8 +30,9 @@
|
| #include "content/public/browser/dom_storage_context.h"
|
| #include "content/public/browser/local_storage_usage_info.h"
|
| #include "content/public/browser/session_storage_usage_info.h"
|
| -#include "content/public/common/origin_util.h"
|
| #include "storage/browser/quota/special_storage_policy.h"
|
| +#include "url/gurl.h"
|
| +#include "url/origin.h"
|
|
|
| namespace content {
|
| namespace {
|
| @@ -201,27 +202,30 @@ void DOMStorageContextImpl::GetSessionStorageUsage(
|
| }
|
| }
|
|
|
| -void DOMStorageContextImpl::DeleteLocalStorage(const GURL& origin) {
|
| +void DOMStorageContextImpl::DeleteLocalStorage(const GURL& origin_url) {
|
| DCHECK(!is_shutdown_);
|
| + url::Origin origin(origin_url);
|
| DOMStorageNamespace* local = GetStorageNamespace(kLocalStorageNamespaceId);
|
| std::vector<GURL> origins;
|
| local->GetOriginsWithAreas(&origins);
|
| // Suborigin storage should be deleted in tandem with the physical origin's
|
| // storage. https://w3c.github.io/webappsec-suborigins/
|
| - for (auto origin_candidate : origins) {
|
| + for (auto origin_candidate_url : origins) {
|
| + url::Origin origin_candidate(origin_candidate_url);
|
| // |origin| is guaranteed to be deleted below, so don't delete it until
|
| - // then.
|
| - if (origin_candidate == origin ||
|
| - StripSuboriginFromUrl(origin_candidate) != origin) {
|
| + // then. That is, only suborigins at the same physical origin as |origin|
|
| + // should be deleted at this point.
|
| + if (origin.IsSameOriginWith(origin) ||
|
| + !origin_candidate.IsSamePhysicalOriginWith(origin)) {
|
| continue;
|
| }
|
| - DeleteAndClearStorageNamespaceForOrigin(origin_candidate, local);
|
| + DeleteAndClearStorageNamespaceForOrigin(origin_candidate_url, local);
|
| }
|
| // It is important to always explicitly delete |origin|. If it does not appear
|
| // it |origins| above, there still may be a directory open in the namespace in
|
| // preparation for this storage, and this call will make sure that the
|
| // directory is deleted.
|
| - DeleteAndClearStorageNamespaceForOrigin(origin, local);
|
| + DeleteAndClearStorageNamespaceForOrigin(origin_url, local);
|
| }
|
|
|
| void DOMStorageContextImpl::DeleteSessionStorage(
|
| @@ -624,14 +628,14 @@ void DOMStorageContextImpl::DeleteNextUnusedNamespaceInCommitSequence() {
|
| }
|
|
|
| void DOMStorageContextImpl::DeleteAndClearStorageNamespaceForOrigin(
|
| - const GURL& origin,
|
| + const GURL& origin_url,
|
| DOMStorageNamespace* local) {
|
| - local->DeleteLocalStorageOrigin(origin);
|
| + local->DeleteLocalStorageOrigin(origin_url);
|
| // Synthesize a 'cleared' event if the area is open so CachedAreas in
|
| // renderers get emptied out too.
|
| - DOMStorageArea* area = local->GetOpenStorageArea(origin);
|
| + DOMStorageArea* area = local->GetOpenStorageArea(origin_url);
|
| if (area)
|
| - NotifyAreaCleared(area, origin);
|
| + NotifyAreaCleared(area, origin_url);
|
| }
|
|
|
| } // namespace content
|
|
|