Index: Source/platform/weborigin/SecurityOrigin.h |
diff --git a/Source/platform/weborigin/SecurityOrigin.h b/Source/platform/weborigin/SecurityOrigin.h |
index 9a490b6b42c28ffb1bf17732d95f08e4da2956d6..96617ffab2db6f57893ab56ff2af7a3b68ffd871 100644 |
--- a/Source/platform/weborigin/SecurityOrigin.h |
+++ b/Source/platform/weborigin/SecurityOrigin.h |
@@ -143,18 +143,18 @@ public: |
// WARNING: This is an extremely powerful ability. Use with caution! |
void grantUniversalAccess(); |
- bool canAccessDatabase() const { return !isUnique(); }; |
- bool canAccessLocalStorage() const { return !isUnique(); }; |
- bool canAccessSharedWorkers() const { return !isUnique(); } |
- bool canAccessCookies() const { return !isUnique(); } |
- bool canAccessPasswordManager() const { return !isUnique(); } |
- bool canAccessFileSystem() const { return !isUnique(); } |
+ bool canAccessDatabase() const { return !isUnique() && !hasSuborigin(); }; |
+ bool canAccessLocalStorage() const { return !isUnique() && !hasSuborigin(); }; |
+ bool canAccessSharedWorkers() const { return !isUnique() && !hasSuborigin(); } |
+ bool canAccessCookies() const { return !isUnique() && !hasSuborigin(); } |
+ bool canAccessPasswordManager() const { return !isUnique() && !hasSuborigin(); } |
+ bool canAccessFileSystem() const { return !isUnique() && !hasSuborigin(); } |
Policy canShowNotifications() const; |
// Technically, we should always allow access to sessionStorage, but we |
// currently don't handle creating a sessionStorage area for unique |
// origins. |
- bool canAccessSessionStorage() const { return !isUnique(); } |
+ bool canAccessSessionStorage() const { return !isUnique() && !hasSuborigin(); } |
// The local SecurityOrigin is the most privileged SecurityOrigin. |
// The local SecurityOrigin can script any document, navigate to local |
@@ -172,6 +172,14 @@ public: |
// addition, the SandboxOrigin flag is inherited by iframes. |
bool isUnique() const { return m_isUnique; } |
+ // Assigns a suborigin namespace to the SecurityOrigin. addSuborigin() must |
+ // only ever be called once per SecurityOrigin(). If it is called on a |
+ // SecurityOrigin that has already had a suborigin assigned, it will hit a |
+ // RELEASE_ASSERT(). |
+ void addSuborigin(const String&); |
+ bool hasSuborigin() const { return !m_suboriginName.isNull(); } |
+ const String& suboriginName() const { return m_suboriginName; } |
+ |
// Marks a file:// origin as being in a domain defined by its path. |
// FIXME 81578: The naming of this is confusing. Files with restricted access to other local files |
// still can have other privileges that can be remembered, thereby not making them unique. |
@@ -227,6 +235,7 @@ private: |
String m_host; |
String m_domain; |
String m_filePath; |
+ String m_suboriginName; |
unsigned short m_port; |
bool m_isUnique; |
bool m_universalAccess; |