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