Changeset 163020 in webkit
- Timestamp:
- Jan 29, 2014 8:17:51 AM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r163019 r163020 1 2014-01-29 Brady Eidson <beidson@apple.com> 2 3 IDB: Serialize IDBKeyDatas to disk, not IDBKeys 4 https://bugs.webkit.org/show_bug.cgi?id=127829 5 6 Reviewed by Tim Horton. 7 8 Move encode/decode from IDBKey to IDBKeyData. 9 10 * Modules/indexeddb/IDBKey.cpp: 11 * Modules/indexeddb/IDBKey.h: 12 13 * Modules/indexeddb/IDBKeyData.cpp: 14 (WebCore::IDBKeyData::IDBKeyData): 15 (WebCore::IDBKeyData::encode): 16 (WebCore::IDBKeyData::decode): 17 * Modules/indexeddb/IDBKeyData.h: 18 19 * WebCore.exp.in: 20 1 21 2014-01-29 Antti Koivisto <antti@apple.com> 2 22 -
trunk/Source/WebCore/Modules/indexeddb/IDBKey.cpp
r162566 r163020 29 29 #if ENABLE(INDEXED_DATABASE) 30 30 31 #include " KeyedCoding.h"31 #include "IDBKeyData.h" 32 32 33 33 namespace WebCore { … … 99 99 } 100 100 101 void IDBKey::encode(KeyedEncoder& encoder) const102 {103 encoder.encodeEnum("type", m_type);104 105 switch (m_type) {106 case InvalidType:107 return;108 case ArrayType:109 encoder.encodeObjects("array", m_array.begin(), m_array.end(), [](WebCore::KeyedEncoder& encoder, const RefPtr<IDBKey>& key) {110 encoder.encodeObject("idbKey", *key, [](KeyedEncoder& encoder, const IDBKey& key) {111 key.encode(encoder);112 });113 });114 return;115 case StringType:116 encoder.encodeString("string", m_string);117 return;118 case DateType:119 case NumberType:120 encoder.encodeDouble("number", m_number);121 return;122 case MinType:123 ASSERT_NOT_REACHED();124 return;125 }126 127 ASSERT_NOT_REACHED();128 }129 130 bool IDBKey::decode(KeyedDecoder&, IDBKey&)131 {132 // FIXME: Implement when IDB Get support is implemented (<rdar://problem/15779644>)133 return false;134 }135 136 101 } // namespace WebCore 137 102 -
trunk/Source/WebCore/Modules/indexeddb/IDBKey.h
r162566 r163020 35 35 36 36 namespace WebCore { 37 38 class KeyedDecoder;39 class KeyedEncoder;40 37 41 38 class IDBKey : public RefCounted<IDBKey> { … … 151 148 using RefCounted<IDBKey>::deref; 152 149 153 void encode(KeyedEncoder&) const;154 static bool decode(KeyedDecoder&, IDBKey&);155 156 150 private: 157 151 IDBKey() : m_type(InvalidType), m_number(0), m_sizeEstimate(OverheadSize) { } -
trunk/Source/WebCore/Modules/indexeddb/IDBKeyData.cpp
r162566 r163020 29 29 #if ENABLE(INDEXED_DATABASE) 30 30 31 #include "KeyedCoding.h" 32 31 33 namespace WebCore { 32 34 33 IDBKeyData::IDBKeyData( IDBKey* key)35 IDBKeyData::IDBKeyData(const IDBKey* key) 34 36 : type(IDBKey::InvalidType) 35 37 , numberValue(0) … … 127 129 } 128 130 131 void IDBKeyData::encode(KeyedEncoder& encoder) const 132 { 133 encoder.encodeBool("null", isNull); 134 if (isNull) 135 return; 136 137 encoder.encodeEnum("type", type); 138 139 switch (type) { 140 case IDBKey::InvalidType: 141 return; 142 case IDBKey::ArrayType: 143 encoder.encodeObjects("array", arrayValue.begin(), arrayValue.end(), [](KeyedEncoder& encoder, const IDBKeyData& key) { 144 encoder.encodeObject("idbKeyData", key, [](KeyedEncoder& encoder, const IDBKeyData& key) { 145 key.encode(encoder); 146 }); 147 }); 148 return; 149 case IDBKey::StringType: 150 encoder.encodeString("string", stringValue); 151 return; 152 case IDBKey::DateType: 153 case IDBKey::NumberType: 154 encoder.encodeDouble("number", numberValue); 155 return; 156 case IDBKey::MinType: 157 ASSERT_NOT_REACHED(); 158 return; 159 } 160 161 ASSERT_NOT_REACHED(); 162 } 163 164 bool IDBKeyData::decode(KeyedDecoder&, IDBKeyData&) 165 { 166 // FIXME: Implement when IDB Get support is implemented (<rdar://problem/15779644>) 167 return false; 168 } 169 129 170 } 130 171 -
trunk/Source/WebCore/Modules/indexeddb/IDBKeyData.h
r162566 r163020 33 33 namespace WebCore { 34 34 35 class KeyedDecoder; 36 class KeyedEncoder; 37 35 38 struct IDBKeyData { 36 39 IDBKeyData() … … 41 44 } 42 45 43 IDBKeyData( IDBKey*);46 IDBKeyData(const IDBKey*); 44 47 45 48 PassRefPtr<IDBKey> maybeCreateIDBKey() const; 46 49 47 50 IDBKeyData isolatedCopy() const; 51 52 void encode(KeyedEncoder&) const; 53 static bool decode(KeyedDecoder&, IDBKeyData&); 48 54 49 55 IDBKey::Type type; -
trunk/Source/WebCore/WebCore.exp.in
r162997 r163020 3077 3077 #if ENABLE(INDEXED_DATABASE) 3078 3078 __ZNK7WebCore10IDBKeyData17maybeCreateIDBKeyEv 3079 __ZNK7WebCore10IDBKeyData6encodeERNS_12KeyedEncoderE 3079 3080 __ZNK7WebCore10IDBKeyPath6encodeERNS_12KeyedEncoderE 3080 3081 __ZNK7WebCore11IDBKeyRange9isOnlyKeyEv 3081 3082 __ZNK7WebCore15IDBKeyRangeData22maybeCreateIDBKeyRangeEv 3082 __ZNK7WebCore6IDBKey6encodeERNS_12KeyedEncoderE3083 3083 __ZNK7WebCore6IDBKey7isValidEv 3084 __ZN7WebCore10IDBKeyDataC1EP NS_6IDBKeyE3084 __ZN7WebCore10IDBKeyDataC1EPKNS_6IDBKeyE 3085 3085 __ZN7WebCore10IDBKeyPathC1ERKN3WTF6StringE 3086 3086 __ZN7WebCore10IDBKeyPathC1ERKN3WTF6VectorINS1_6StringELm0ENS1_15CrashOnOverflowEEE -
trunk/Source/WebKit2/ChangeLog
r163011 r163020 1 2014-01-29 Brady Eidson <beidson@apple.com> 2 3 IDB: Serialize IDBKeyDatas to disk, not IDBKeys 4 https://bugs.webkit.org/show_bug.cgi?id=127829 5 6 Reviewed by Tim Horton. 7 8 Serialize IDBKeyDatas, not IDBKeys. 9 10 * DatabaseProcess/IndexedDB/IDBSerialization.cpp: 11 (WebKit::deserializeIDBKeyPath): 12 (WebKit::serializeIDBKeyData): 13 * DatabaseProcess/IndexedDB/IDBSerialization.h: 14 15 * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp: 16 (WebKit::UniqueIDBDatabaseBackingStoreSQLite::extractExistingMetadata): 17 (WebKit::UniqueIDBDatabaseBackingStoreSQLite::putRecord): 18 (WebKit::UniqueIDBDatabaseBackingStoreSQLite::getKeyRecordFromObjectStore): 19 (WebKit::UniqueIDBDatabaseBackingStoreSQLite::getKeyRangeRecordFromObjectStore): 20 1 21 2014-01-29 Carlos Garcia Campos <cgarcia@igalia.com> 2 22 -
trunk/Source/WebKit2/DatabaseProcess/IndexedDB/IDBSerialization.cpp
r162566 r163020 31 31 #include "KeyedDecoder.h" 32 32 #include "KeyedEncoder.h" 33 #include <WebCore/IDBKey .h>33 #include <WebCore/IDBKeyData.h> 34 34 #include <WebCore/IDBKeyPath.h> 35 35 … … 45 45 } 46 46 47 std::unique_ptr<WebCore::IDBKeyPath> deserializeIDBKeyPath(const uint8_t* data, size_t size)47 bool deserializeIDBKeyPath(const uint8_t* data, size_t size, IDBKeyPath& result) 48 48 { 49 49 KeyedDecoder decoder(data, size); 50 std::unique_ptr<IDBKeyPath> result = std::make_unique<IDBKeyPath>(); 51 if (!IDBKeyPath::decode(decoder, *result)) 52 return nullptr; 53 54 return result; 50 return IDBKeyPath::decode(decoder, result); 55 51 } 56 52 57 RefPtr<WebCore::SharedBuffer> serializeIDBKey (const IDBKey& key)53 RefPtr<WebCore::SharedBuffer> serializeIDBKeyData(const IDBKeyData& key) 58 54 { 59 55 KeyedEncoder encoder; -
trunk/Source/WebKit2/DatabaseProcess/IndexedDB/IDBSerialization.h
r162566 r163020 33 33 34 34 namespace WebCore { 35 class IDBKey;36 35 class IDBKeyPath; 36 37 struct IDBKeyData; 37 38 } 38 39 … … 40 41 41 42 RefPtr<WebCore::SharedBuffer> serializeIDBKeyPath(const WebCore::IDBKeyPath&); 42 std::unique_ptr<WebCore::IDBKeyPath> deserializeIDBKeyPath(const uint8_t* buffer, size_t bufferSize);43 bool deserializeIDBKeyPath(const uint8_t* buffer, size_t bufferSize, WebCore::IDBKeyPath&); 43 44 44 RefPtr<WebCore::SharedBuffer> serializeIDBKey (const WebCore::IDBKey&);45 PassRefPtr<WebCore::IDBKey> deserializeIDBKey(const uint8_t* buffer, size_t bufferSize);45 RefPtr<WebCore::SharedBuffer> serializeIDBKeyData(const WebCore::IDBKeyData&); 46 bool deserializeIDBKey(const uint8_t* buffer, size_t bufferSize, WebCore::IDBKeyData&); 46 47 47 48 } // namespace WebKit -
trunk/Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp
r162948 r163020 199 199 const uint8_t* keyPathBuffer = static_cast<const uint8_t*>(sql.getColumnBlob(2, keyPathSize)); 200 200 201 std::unique_ptr<IDBKeyPath> keyPath = deserializeIDBKeyPath(keyPathBuffer, keyPathSize); 202 203 if (!keyPath) { 201 202 if (!deserializeIDBKeyPath(keyPathBuffer, keyPathSize, metadata.keyPath)) { 204 203 LOG_ERROR("Unable to extract key path metadata from database"); 205 204 return nullptr; 206 205 } 207 206 208 metadata.keyPath = *keyPath;209 207 metadata.autoIncrement = sql.getColumnInt(3); 210 208 metadata.maxIndexId = sql.getColumnInt64(4); … … 584 582 } 585 583 586 RefPtr<SharedBuffer> keyBuffer = serializeIDBKey (key);584 RefPtr<SharedBuffer> keyBuffer = serializeIDBKeyData(IDBKeyData(&key)); 587 585 if (!keyBuffer) { 588 586 LOG_ERROR("Unable to serialize IDBKey to be stored in the database"); … … 622 620 } 623 621 624 RefPtr<SharedBuffer> keyBuffer = serializeIDBKey (key);622 RefPtr<SharedBuffer> keyBuffer = serializeIDBKeyData(IDBKeyData(&key)); 625 623 if (!keyBuffer) { 626 624 LOG_ERROR("Unable to serialize IDBKey to be stored in the database"); … … 668 666 } 669 667 670 RefPtr<SharedBuffer> lowerBuffer = serializeIDBKey (*keyRange.lower());668 RefPtr<SharedBuffer> lowerBuffer = serializeIDBKeyData(IDBKeyData(keyRange.lower().get())); 671 669 if (!lowerBuffer) { 672 670 LOG_ERROR("Unable to serialize IDBKey to be stored in the database"); … … 674 672 } 675 673 676 RefPtr<SharedBuffer> upperBuffer = serializeIDBKey (*keyRange.upper());674 RefPtr<SharedBuffer> upperBuffer = serializeIDBKeyData(IDBKeyData(keyRange.upper().get())); 677 675 if (!upperBuffer) { 678 676 LOG_ERROR("Unable to serialize IDBKey to be stored in the database");
Note: See TracChangeset
for help on using the changeset viewer.