⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 242729 in webkit


Ignore:
Timestamp:
Mar 11, 2019, 1:00:07 PM (7 years ago)
Author:
youenn@apple.com
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):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r242725 r242729  
     12019-03-11  Youenn Fablet  <youenn@apple.com>
     2
     3        Make IDBDatabaseIdentifier take a ClientOrigin as member
     4        https://bugs.webkit.org/show_bug.cgi?id=195544
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Instead of taking a top and a frame origin, make
     9        make IDBDatabaseIdentifier take a ClientOrigin.
     10
     11        This allows reusing some ClientOrigin code
     12        and will ease implementation of storage quota checking in
     13        NetworkProcess, as quota managers are keyed by client origins.
     14
     15        No change of behavior.
     16
     17        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
     18        (WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
     19        (WebCore::IDBDatabaseIdentifier::isolatedCopy const):
     20        (WebCore::IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot const):
     21        (WebCore::IDBDatabaseIdentifier::debugString const):
     22        * Modules/indexeddb/IDBDatabaseIdentifier.h:
     23        (WebCore::IDBDatabaseIdentifier::hash const):
     24        (WebCore::IDBDatabaseIdentifier::operator== const):
     25        (WebCore::IDBDatabaseIdentifier::origin const):
     26        (WebCore::IDBDatabaseIdentifier::isRelatedToOrigin const):
     27        (WebCore::IDBDatabaseIdentifier::encode const):
     28        (WebCore::IDBDatabaseIdentifier::decode):
     29        * page/ClientOrigin.h:
     30        (WebCore::ClientOrigin::isRelated const):
     31
    1322019-03-11  Zan Dobersek  <zdobersek@igalia.com>
    233
  • trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.cpp

    r240437 r242729  
    3939    : m_databaseName(databaseName)
    4040    , m_sessionID(sessionID)
    41     , m_openingOrigin(WTFMove(openingOrigin))
    42     , m_mainFrameOrigin(WTFMove(mainFrameOrigin))
    43 
     41    , m_origin { WTFMove(openingOrigin), WTFMove(mainFrameOrigin) }
    4442{
    4543    // The empty string is a valid database name, but a null string is not.
     
    5351    identifier.m_databaseName = m_databaseName.isolatedCopy();
    5452    identifier.m_sessionID = m_sessionID.isolatedCopy();
    55     identifier.m_openingOrigin = m_openingOrigin.isolatedCopy();
    56     identifier.m_mainFrameOrigin = m_mainFrameOrigin.isolatedCopy();
     53    identifier.m_origin = m_origin.isolatedCopy();
    5754
    5855    return identifier;
     
    6158String IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot(const String& rootDirectory) const
    6259{
    63     return databaseDirectoryRelativeToRoot(m_mainFrameOrigin, m_openingOrigin, rootDirectory);
     60    return databaseDirectoryRelativeToRoot(m_origin.topOrigin, m_origin.clientOrigin, rootDirectory);
    6461}
    6562
     
    7875String IDBDatabaseIdentifier::debugString() const
    7976{
    80     return makeString(m_databaseName, "@", m_openingOrigin.debugString(), ":", m_mainFrameOrigin.debugString());
     77    return makeString(m_databaseName, "@", m_origin.topOrigin.debugString(), ":", m_origin.clientOrigin.debugString());
    8178}
    8279#endif
  • trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.h

    r239461 r242729  
    2828#if ENABLE(INDEXED_DATABASE)
    2929
     30#include "ClientOrigin.h"
    3031#include "SecurityOriginData.h"
    3132#include <pal/SessionID.h>
     
    5859        unsigned nameHash = StringHash::hash(m_databaseName);
    5960        unsigned sessionIDHash = WTF::SessionIDHash::hash(m_sessionID);
    60         unsigned openingProtocolHash = StringHash::hash(m_openingOrigin.protocol);
    61         unsigned openingHostHash = StringHash::hash(m_openingOrigin.host);
    62         unsigned mainFrameProtocolHash = StringHash::hash(m_mainFrameOrigin.protocol);
    63         unsigned mainFrameHostHash = StringHash::hash(m_mainFrameOrigin.host);
    64        
    65         unsigned hashCodes[8] = { nameHash, sessionIDHash, openingProtocolHash, openingHostHash, m_openingOrigin.port.valueOr(0), mainFrameProtocolHash, mainFrameHostHash, m_mainFrameOrigin.port.valueOr(0) };
     61        unsigned originHash = m_origin.hash();
     62
     63        unsigned hashCodes[3] = { nameHash, sessionIDHash, originHash };
    6664        return StringHasher::hashMemory<sizeof(hashCodes)>(hashCodes);
    6765    }
     
    8078    bool operator==(const IDBDatabaseIdentifier& other) const
    8179    {
    82         return other.m_databaseName == m_databaseName
    83             && other.m_openingOrigin == m_openingOrigin
    84             && other.m_mainFrameOrigin == m_mainFrameOrigin;
     80        return other.m_databaseName == m_databaseName && other.m_origin == m_origin;
    8581    }
    8682
    8783    const String& databaseName() const { return m_databaseName; }
    8884    const PAL::SessionID& sessionID() const { return m_sessionID; }
     85    const ClientOrigin& origin() const { return m_origin; }
    8986
    9087    String databaseDirectoryRelativeToRoot(const String& rootDirectory) const;
     
    9895#endif
    9996
    100     bool isRelatedToOrigin(const SecurityOriginData& other) const
    101     {
    102         return m_openingOrigin == other || m_mainFrameOrigin == other;
    103     }
     97    bool isRelatedToOrigin(const SecurityOriginData& other) const { return m_origin.isRelated(other); }
    10498
    10599private:
    106100    String m_databaseName;
    107101    PAL::SessionID m_sessionID;
    108     SecurityOriginData m_openingOrigin;
     102    ClientOrigin m_origin;
    109103    SecurityOriginData m_mainFrameOrigin;
    110104};
     
    125119void IDBDatabaseIdentifier::encode(Encoder& encoder) const
    126120{
    127     encoder << m_databaseName << m_sessionID << m_openingOrigin << m_mainFrameOrigin;
     121    encoder << m_databaseName << m_sessionID << m_origin;
    128122}
    129123
     
    141135        return WTF::nullopt;
    142136   
    143     Optional<SecurityOriginData> openingOrigin;
    144     decoder >> openingOrigin;
    145     if (!openingOrigin)
    146         return WTF::nullopt;
    147 
    148     Optional<SecurityOriginData> mainFrameOrigin;
    149     decoder >> mainFrameOrigin;
    150     if (!mainFrameOrigin)
     137    Optional<ClientOrigin> origin;
     138    decoder >> origin;
     139    if (!origin)
    151140        return WTF::nullopt;
    152141
     
    154143    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.
    155144    identifier.m_sessionID = WTFMove(*sessionID);
    156     identifier.m_openingOrigin = WTFMove(*openingOrigin);
    157     identifier.m_mainFrameOrigin = WTFMove(*mainFrameOrigin);
     145    identifier.m_origin = WTFMove(*origin);
    158146    return WTFMove(identifier);
    159147}
  • trunk/Source/WebCore/page/ClientOrigin.h

    r242599 r242729  
    4242
    4343    ClientOrigin isolatedCopy() const;
     44    bool isRelated(const SecurityOriginData& other) const { return topOrigin == other || clientOrigin == other; }
    4445
    4546    SecurityOriginData topOrigin;
Note: See TracChangeset for help on using the changeset viewer.