Title: [242729] trunk/Source/WebCore
Revision
242729
Author
[email protected]
Date
2019-03-11 13:00:07 -0700 (Mon, 11 Mar 2019)

Log Message

Make IDBDatabaseIdentifier take a ClientOrigin as member
https://bugs.webkit.org/show_bug.cgi?id=195544

Reviewed by Geoffrey Garen.

Instead of taking a top and a frame origin, make
make IDBDatabaseIdentifier take a ClientOrigin.

This allows reusing some ClientOrigin code
and will ease implementation of storage quota checking in
NetworkProcess, as quota managers are keyed by client origins.

No change of behavior.

* Modules/indexeddb/IDBDatabaseIdentifier.cpp:
(WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
(WebCore::IDBDatabaseIdentifier::isolatedCopy const):
(WebCore::IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot const):
(WebCore::IDBDatabaseIdentifier::debugString const):
* Modules/indexeddb/IDBDatabaseIdentifier.h:
(WebCore::IDBDatabaseIdentifier::hash const):
(WebCore::IDBDatabaseIdentifier::operator== const):
(WebCore::IDBDatabaseIdentifier::origin const):
(WebCore::IDBDatabaseIdentifier::isRelatedToOrigin const):
(WebCore::IDBDatabaseIdentifier::encode const):
(WebCore::IDBDatabaseIdentifier::decode):
* page/ClientOrigin.h:
(WebCore::ClientOrigin::isRelated const):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (242728 => 242729)


--- trunk/Source/WebCore/ChangeLog	2019-03-11 19:51:25 UTC (rev 242728)
+++ trunk/Source/WebCore/ChangeLog	2019-03-11 20:00:07 UTC (rev 242729)
@@ -1,3 +1,34 @@
+2019-03-11  Youenn Fablet  <[email protected]>
+
+        Make IDBDatabaseIdentifier take a ClientOrigin as member
+        https://bugs.webkit.org/show_bug.cgi?id=195544
+
+        Reviewed by Geoffrey Garen.
+
+        Instead of taking a top and a frame origin, make
+        make IDBDatabaseIdentifier take a ClientOrigin.
+
+        This allows reusing some ClientOrigin code
+        and will ease implementation of storage quota checking in
+        NetworkProcess, as quota managers are keyed by client origins.
+
+        No change of behavior.
+
+        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
+        (WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
+        (WebCore::IDBDatabaseIdentifier::isolatedCopy const):
+        (WebCore::IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot const):
+        (WebCore::IDBDatabaseIdentifier::debugString const):
+        * Modules/indexeddb/IDBDatabaseIdentifier.h:
+        (WebCore::IDBDatabaseIdentifier::hash const):
+        (WebCore::IDBDatabaseIdentifier::operator== const):
+        (WebCore::IDBDatabaseIdentifier::origin const):
+        (WebCore::IDBDatabaseIdentifier::isRelatedToOrigin const):
+        (WebCore::IDBDatabaseIdentifier::encode const):
+        (WebCore::IDBDatabaseIdentifier::decode):
+        * page/ClientOrigin.h:
+        (WebCore::ClientOrigin::isRelated const):
+
 2019-03-11  Zan Dobersek  <[email protected]>
 
         Unreviewed. Manually rolling out r242701 and r242703 since the changes

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.cpp (242728 => 242729)


--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.cpp	2019-03-11 19:51:25 UTC (rev 242728)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.cpp	2019-03-11 20:00:07 UTC (rev 242729)
@@ -38,9 +38,7 @@
 IDBDatabaseIdentifier::IDBDatabaseIdentifier(const String& databaseName, const PAL::SessionID& sessionID, SecurityOriginData&& openingOrigin, SecurityOriginData&& mainFrameOrigin)
     : m_databaseName(databaseName)
     , m_sessionID(sessionID)
-    , m_openingOrigin(WTFMove(openingOrigin))
-    , m_mainFrameOrigin(WTFMove(mainFrameOrigin))
-
+    , m_origin { WTFMove(openingOrigin), WTFMove(mainFrameOrigin) }
 {
     // The empty string is a valid database name, but a null string is not.
     ASSERT(!databaseName.isNull());
@@ -52,8 +50,7 @@
 
     identifier.m_databaseName = m_databaseName.isolatedCopy();
     identifier.m_sessionID = m_sessionID.isolatedCopy();
-    identifier.m_openingOrigin = m_openingOrigin.isolatedCopy();
-    identifier.m_mainFrameOrigin = m_mainFrameOrigin.isolatedCopy();
+    identifier.m_origin = m_origin.isolatedCopy();
 
     return identifier;
 }
@@ -60,7 +57,7 @@
 
 String IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot(const String& rootDirectory) const
 {
-    return databaseDirectoryRelativeToRoot(m_mainFrameOrigin, m_openingOrigin, rootDirectory);
+    return databaseDirectoryRelativeToRoot(m_origin.topOrigin, m_origin.clientOrigin, rootDirectory);
 }
 
 String IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot(const SecurityOriginData& topLevelOrigin, const SecurityOriginData& openingOrigin, const String& rootDirectory)
@@ -77,7 +74,7 @@
 #if !LOG_DISABLED
 String IDBDatabaseIdentifier::debugString() const
 {
-    return makeString(m_databaseName, "@", m_openingOrigin.debugString(), ":", m_mainFrameOrigin.debugString());
+    return makeString(m_databaseName, "@", m_origin.topOrigin.debugString(), ":", m_origin.clientOrigin.debugString());
 }
 #endif
 

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.h (242728 => 242729)


--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.h	2019-03-11 19:51:25 UTC (rev 242728)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.h	2019-03-11 20:00:07 UTC (rev 242729)
@@ -27,6 +27,7 @@
 
 #if ENABLE(INDEXED_DATABASE)
 
+#include "ClientOrigin.h"
 #include "SecurityOriginData.h"
 #include <pal/SessionID.h>
 #include <wtf/text/StringHash.h>
@@ -57,12 +58,9 @@
     {
         unsigned nameHash = StringHash::hash(m_databaseName);
         unsigned sessionIDHash = WTF::SessionIDHash::hash(m_sessionID);
-        unsigned openingProtocolHash = StringHash::hash(m_openingOrigin.protocol);
-        unsigned openingHostHash = StringHash::hash(m_openingOrigin.host);
-        unsigned mainFrameProtocolHash = StringHash::hash(m_mainFrameOrigin.protocol);
-        unsigned mainFrameHostHash = StringHash::hash(m_mainFrameOrigin.host);
-        
-        unsigned hashCodes[8] = { nameHash, sessionIDHash, openingProtocolHash, openingHostHash, m_openingOrigin.port.valueOr(0), mainFrameProtocolHash, mainFrameHostHash, m_mainFrameOrigin.port.valueOr(0) };
+        unsigned originHash = m_origin.hash();
+
+        unsigned hashCodes[3] = { nameHash, sessionIDHash, originHash };
         return StringHasher::hashMemory<sizeof(hashCodes)>(hashCodes);
     }
 
@@ -79,13 +77,12 @@
 
     bool operator==(const IDBDatabaseIdentifier& other) const
     {
-        return other.m_databaseName == m_databaseName
-            && other.m_openingOrigin == m_openingOrigin
-            && other.m_mainFrameOrigin == m_mainFrameOrigin;
+        return other.m_databaseName == m_databaseName && other.m_origin == m_origin;
     }
 
     const String& databaseName() const { return m_databaseName; }
     const PAL::SessionID& sessionID() const { return m_sessionID; }
+    const ClientOrigin& origin() const { return m_origin; }
 
     String databaseDirectoryRelativeToRoot(const String& rootDirectory) const;
     static String databaseDirectoryRelativeToRoot(const SecurityOriginData& topLevelOrigin, const SecurityOriginData& openingOrigin, const String& rootDirectory);
@@ -97,15 +94,12 @@
     String debugString() const;
 #endif
 
-    bool isRelatedToOrigin(const SecurityOriginData& other) const
-    {
-        return m_openingOrigin == other || m_mainFrameOrigin == other;
-    }
+    bool isRelatedToOrigin(const SecurityOriginData& other) const { return m_origin.isRelated(other); }
 
 private:
     String m_databaseName;
     PAL::SessionID m_sessionID;
-    SecurityOriginData m_openingOrigin;
+    ClientOrigin m_origin;
     SecurityOriginData m_mainFrameOrigin;
 };
 
@@ -124,7 +118,7 @@
 template<class Encoder>
 void IDBDatabaseIdentifier::encode(Encoder& encoder) const
 {
-    encoder << m_databaseName << m_sessionID << m_openingOrigin << m_mainFrameOrigin;
+    encoder << m_databaseName << m_sessionID << m_origin;
 }
 
 template<class Decoder>
@@ -140,21 +134,15 @@
     if (!sessionID)
         return WTF::nullopt;
     
-    Optional<SecurityOriginData> openingOrigin;
-    decoder >> openingOrigin;
-    if (!openingOrigin)
+    Optional<ClientOrigin> origin;
+    decoder >> origin;
+    if (!origin)
         return WTF::nullopt;
 
-    Optional<SecurityOriginData> mainFrameOrigin;
-    decoder >> mainFrameOrigin;
-    if (!mainFrameOrigin)
-        return WTF::nullopt;
-
     IDBDatabaseIdentifier identifier;
     identifier.m_databaseName = WTFMove(*databaseName); // FIXME: When decoding from IPC, databaseName can be null, and the non-empty constructor asserts that this is not the case.
     identifier.m_sessionID = WTFMove(*sessionID);
-    identifier.m_openingOrigin = WTFMove(*openingOrigin);
-    identifier.m_mainFrameOrigin = WTFMove(*mainFrameOrigin);
+    identifier.m_origin = WTFMove(*origin);
     return WTFMove(identifier);
 }
 

Modified: trunk/Source/WebCore/page/ClientOrigin.h (242728 => 242729)


--- trunk/Source/WebCore/page/ClientOrigin.h	2019-03-11 19:51:25 UTC (rev 242728)
+++ trunk/Source/WebCore/page/ClientOrigin.h	2019-03-11 20:00:07 UTC (rev 242729)
@@ -41,6 +41,7 @@
     template<class Decoder> static Optional<ClientOrigin> decode(Decoder&);
 
     ClientOrigin isolatedCopy() const;
+    bool isRelated(const SecurityOriginData& other) const { return topOrigin == other || clientOrigin == other; }
 
     SecurityOriginData topOrigin;
     SecurityOriginData clientOrigin;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to