blob: 250c46f7f5130b8064f5432fb85606e4310670cc [file] [log] [blame]
Avi Drissman047c7dc2022-09-27 23:23:141// Copyright 2020 The Chromium Authors
Javier Fernández García-Boente03816ca32021-08-06 15:41:372// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "third_party/blink/public/common/scheme_registry.h"
6
7#include <unordered_set>
8
Ho Cheunga03cfdf2023-08-21 00:25:529#include "base/containers/contains.h"
Javier Fernández García-Boente03816ca32021-08-06 15:41:3710#include "base/no_destructor.h"
11#include "base/strings/string_util.h"
12
13namespace blink {
14
15using URLSchemesSet = std::unordered_set<std::string>;
16
17URLSchemesSet& GetMutableExtensionSchemes() {
18 static base::NoDestructor<URLSchemesSet> extension_schemes;
19 return *extension_schemes;
20}
21
Andrew Rayskiy9ac9a3a2025-06-26 23:44:2822URLSchemesSet& GetMutableIsolatedAppSchemes() {
23 static base::NoDestructor<URLSchemesSet> iwa_schemes;
24 return *iwa_schemes;
25}
26
Javier Fernández García-Boente03816ca32021-08-06 15:41:3727const URLSchemesSet& GetExtensionSchemes() {
28 return GetMutableExtensionSchemes();
29}
30
Andrew Rayskiy9ac9a3a2025-06-26 23:44:2831const URLSchemesSet& GetIsolatedAppSchemes() {
32 return GetMutableIsolatedAppSchemes();
33}
34
Javier Fernández García-Boente03816ca32021-08-06 15:41:3735void CommonSchemeRegistry::RegisterURLSchemeAsExtension(
36 const std::string& scheme) {
37 DCHECK_EQ(scheme, base::ToLowerASCII(scheme));
38 GetMutableExtensionSchemes().insert(scheme);
39}
40
Andrew Rayskiy9ac9a3a2025-06-26 23:44:2841void CommonSchemeRegistry::RegisterURLSchemeAsIsolatedApp(
42 const std::string& scheme) {
43 DCHECK_EQ(scheme, base::ToLowerASCII(scheme));
44 GetMutableIsolatedAppSchemes().insert(scheme);
45}
46
Javier Fernández García-Boente03816ca32021-08-06 15:41:3747void CommonSchemeRegistry::RemoveURLSchemeAsExtensionForTest(
48 const std::string& scheme) {
49 GetMutableExtensionSchemes().erase(scheme);
50}
51
52bool CommonSchemeRegistry::IsExtensionScheme(const std::string& scheme) {
Andrew Rayskiy9ac9a3a2025-06-26 23:44:2853 if (scheme.empty()) {
Javier Fernández García-Boente03816ca32021-08-06 15:41:3754 return false;
Andrew Rayskiy9ac9a3a2025-06-26 23:44:2855 }
Javier Fernández García-Boente03816ca32021-08-06 15:41:3756 DCHECK_EQ(scheme, base::ToLowerASCII(scheme));
Ho Cheunga03cfdf2023-08-21 00:25:5257 return base::Contains(GetExtensionSchemes(), scheme);
Javier Fernández García-Boente03816ca32021-08-06 15:41:3758}
59
Andrew Rayskiy9ac9a3a2025-06-26 23:44:2860bool CommonSchemeRegistry::IsIsolatedAppScheme(const std::string& scheme) {
61 if (scheme.empty()) {
62 return false;
63 }
64 DCHECK_EQ(scheme, base::ToLowerASCII(scheme));
65 return base::Contains(GetIsolatedAppSchemes(), scheme);
66}
67
Javier Fernández García-Boente03816ca32021-08-06 15:41:3768} // namespace blink