Index: Source/platform/weborigin/SchemeRegistry.cpp |
diff --git a/Source/platform/weborigin/SchemeRegistry.cpp b/Source/platform/weborigin/SchemeRegistry.cpp |
index 099dbbb17a03895397bf9870779e686e6c41353c..46964fa41cf75e84717c4e74ee3e34721516e65c 100644 |
--- a/Source/platform/weborigin/SchemeRegistry.cpp |
+++ b/Source/platform/weborigin/SchemeRegistry.cpp |
@@ -189,6 +189,13 @@ static URLSchemesSet& fetchAPISchemes() |
return fetchAPISchemes; |
} |
+static URLSchemesSet& firstPartyWhenTopLevelSchemes() |
+{ |
+ assertLockHeld(); |
+ DEFINE_STATIC_LOCAL_NOASSERT(URLSchemesSet, firstPartyWhenTopLevelSchemes, ()); |
+ return firstPartyWhenTopLevelSchemes; |
+} |
+ |
static URLSchemesMap<SchemeRegistry::PolicyAreas>& ContentSecurityPolicyBypassingSchemes() |
{ |
assertLockHeld(); |
@@ -380,6 +387,20 @@ bool SchemeRegistry::shouldTreatURLSchemeAsSupportingFetchAPI(const String& sche |
return fetchAPISchemes().contains(scheme); |
} |
+void SchemeRegistry::registerURLSchemeAsFirstPartyWhenTopLevel(const String& scheme) |
+{ |
+ MutexLocker locker(mutex()); |
+ firstPartyWhenTopLevelSchemes().add(scheme); |
+} |
+ |
+bool SchemeRegistry::shouldTreatURLSchemeAsFirstPartyWhenTopLevel(const String& scheme) |
+{ |
+ if (scheme.isEmpty()) |
+ return false; |
+ MutexLocker locker(mutex()); |
+ return firstPartyWhenTopLevelSchemes().contains(scheme); |
+} |
+ |
void SchemeRegistry::registerURLSchemeAsBypassingContentSecurityPolicy(const String& scheme, PolicyAreas policyAreas) |
{ |
MutexLocker locker(mutex()); |