blob: a40de7afb2c8e23f22f2be117abdb51b9bf92a92 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/browsing_data/browsing_data_helper.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/child_process_security_policy.h"
#include "extensions/common/constants.h"
#include "storage/browser/quota/special_storage_policy.h"
#include "url/gurl.h"
// Static
bool BrowsingDataHelper::IsWebScheme(const std::string& scheme) {
// All "web safe" schemes are valid, except `chrome-extension://`
// and `chrome-devtools://`.
content::ChildProcessSecurityPolicy* policy =
content::ChildProcessSecurityPolicy::GetInstance();
return (policy->IsWebSafeScheme(scheme) &&
!BrowsingDataHelper::IsExtensionScheme(scheme) &&
scheme != content::kChromeDevToolsScheme);
}
// Static
bool BrowsingDataHelper::HasWebScheme(const GURL& origin) {
return BrowsingDataHelper::IsWebScheme(origin.scheme());
}
// Static
bool BrowsingDataHelper::IsExtensionScheme(const std::string& scheme) {
return scheme == extensions::kExtensionScheme;
}
// Static
bool BrowsingDataHelper::HasExtensionScheme(const GURL& origin) {
return BrowsingDataHelper::IsExtensionScheme(origin.scheme());
}
// Static
bool BrowsingDataHelper::DoesOriginMatchMask(
const GURL& origin,
int origin_type_mask,
storage::SpecialStoragePolicy* policy) {
// Packaged apps and extensions match iff EXTENSION.
if (BrowsingDataHelper::HasExtensionScheme(origin.GetOrigin()) &&
origin_type_mask & EXTENSION)
return true;
// If a websafe origin is unprotected, it matches iff UNPROTECTED_WEB.
if ((!policy || !policy->IsStorageProtected(origin.GetOrigin())) &&
BrowsingDataHelper::HasWebScheme(origin.GetOrigin()) &&
origin_type_mask & UNPROTECTED_WEB)
return true;
// Hosted applications (protected and websafe origins) iff PROTECTED_WEB.
if (policy &&
policy->IsStorageProtected(origin.GetOrigin()) &&
BrowsingDataHelper::HasWebScheme(origin.GetOrigin()) &&
origin_type_mask & PROTECTED_WEB)
return true;
return false;
}