| // 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; |
| } |