Have window.indexedDB.deleteDatabase return an IDBOpenDBRequest.
[WebKit-https.git] / Source / WebCore / Modules / indexeddb / IDBDatabaseIdentifier.h
1 /*
2  * Copyright (C) 2015 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef IDBDatabaseIdentifier_h
27 #define IDBDatabaseIdentifier_h
28
29 #if ENABLE(INDEXED_DATABASE)
30
31 #include "SecurityOriginData.h"
32 #include <wtf/Ref.h>
33 #include <wtf/RefCounted.h>
34 #include <wtf/text/StringHash.h>
35 #include <wtf/text/WTFString.h>
36
37 namespace WebCore {
38
39 class SecurityOrigin;
40
41 class IDBDatabaseIdentifier {
42 public:
43     IDBDatabaseIdentifier()
44     {
45     }
46
47     IDBDatabaseIdentifier(WTF::HashTableDeletedValueType)
48     {
49         m_openingOrigin.port = -1;
50         m_mainFrameOrigin.port = -1;
51     }
52
53     bool isHashTableDeletedValue() const
54     {
55         return m_openingOrigin.port == -1 && m_mainFrameOrigin.port == -1;
56     }
57
58     unsigned hash() const
59     {
60         unsigned nameHash = StringHash::hash(m_databaseName);
61         unsigned openingProtocolHash = StringHash::hash(m_openingOrigin.protocol);
62         unsigned openingHostHash = StringHash::hash(m_openingOrigin.host);
63         unsigned mainFrameProtocolHash = StringHash::hash(m_mainFrameOrigin.protocol);
64         unsigned mainFrameHostHash = StringHash::hash(m_mainFrameOrigin.host);
65         
66         unsigned hashCodes[7] = { nameHash, openingProtocolHash, openingHostHash, static_cast<unsigned>(m_openingOrigin.port), mainFrameProtocolHash, mainFrameHostHash, static_cast<unsigned>(m_mainFrameOrigin.port) };
67         return StringHasher::hashMemory<sizeof(hashCodes)>(hashCodes);
68     }
69
70     IDBDatabaseIdentifier(const String& databaseName, const SecurityOrigin& openingOrigin, const SecurityOrigin& mainFrameOrigin);
71
72     bool isValid() const
73     {
74         return !m_databaseName.isNull() && m_openingOrigin.port >= 0 && m_mainFrameOrigin.port >= 0;
75     }
76
77     bool operator==(const IDBDatabaseIdentifier& other) const
78     {
79         return other.m_databaseName == m_databaseName
80             && other.m_openingOrigin == m_openingOrigin
81             && other.m_mainFrameOrigin == m_mainFrameOrigin;
82     }
83
84     const String& databaseName() const { return m_databaseName; }
85
86 private:
87     String m_databaseName;
88     SecurityOriginData m_openingOrigin;
89     SecurityOriginData m_mainFrameOrigin;
90 };
91
92 struct IDBDatabaseIdentifierHash {
93     static unsigned hash(const IDBDatabaseIdentifier& a) { return a.hash(); }
94     static bool equal(const IDBDatabaseIdentifier& a, const IDBDatabaseIdentifier& b) { return a == b; }
95     static const bool safeToCompareToEmptyOrDeleted = false;
96 };
97
98 struct IDBDatabaseIdentifierHashTraits : WTF::SimpleClassHashTraits<IDBDatabaseIdentifier> {
99     static const bool hasIsEmptyValueFunction = true;
100     static bool isEmptyValue(const IDBDatabaseIdentifier& info) { return !info.isValid(); }
101 };
102
103 } // namespace WebCore
104
105 namespace WTF {
106
107 template<> struct HashTraits<WebCore::IDBDatabaseIdentifier> : WebCore::IDBDatabaseIdentifierHashTraits { };
108 template<> struct DefaultHash<WebCore::IDBDatabaseIdentifier> {
109     typedef WebCore::IDBDatabaseIdentifierHash Hash;
110 };
111
112 } // namespace WTF
113
114 #endif // ENABLE(INDEXED_DATABASE)
115 #endif // IDBDatabaseIdentifier_h