Diff
Modified: trunk/Source/WebCore/ChangeLog (134679 => 134680)
--- trunk/Source/WebCore/ChangeLog 2012-11-14 23:27:11 UTC (rev 134679)
+++ trunk/Source/WebCore/ChangeLog 2012-11-14 23:28:54 UTC (rev 134680)
@@ -1,3 +1,21 @@
+2012-11-14 Joshua Bell <jsb...@chromium.org>
+
+ IndexedDB: Remove magic numbers in record comparator, handle missing case
+ https://bugs.webkit.org/show_bug.cgi?id=102255
+
+ Reviewed by Tony Chang.
+
+ For some ranges of metadata entries, a simple type byte comparison is sufficient
+ for the backing store comparator. In two places those ranges used magic numbers,
+ one of which was incorrect - which could lead to failed reads/writes.
+
+ Test: webkit_unit_tests --gtest_filter='IDBLevelDBCodingTest.ComparisonTest'
+
+ * Modules/indexeddb/IDBLevelDBCoding.cpp:
+ (IDBLevelDBCoding):
+ (WebCore::IDBLevelDBCoding::compare):
+ * Modules/indexeddb/IDBLevelDBCoding.h:
+
2012-11-14 Dirk Schulze <k...@webkit.org>
Cleanup BasicShape blending check
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp (134679 => 134680)
--- trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp 2012-11-14 23:27:11 UTC (rev 134679)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp 2012-11-14 23:28:54 UTC (rev 134680)
@@ -61,6 +61,7 @@
// <database id, 0, 0, 1> => utf16 database name [DatabaseMetaDataKey]
// <database id, 0, 0, 2> => utf16 user version data [DatabaseMetaDataKey]
// <database id, 0, 0, 3> => maximum object store id ever allocated [DatabaseMetaDataKey]
+// <database id, 0, 0, 4> => user integer version (var int) [DatabaseMetaDataKey]
//
//
// Object store meta-data:
@@ -153,6 +154,7 @@
static const unsigned char SchemaVersionTypeByte = 0;
static const unsigned char MaxDatabaseIdTypeByte = 1;
+static const unsigned char MaxSimpleGlobalMetaDataTypeByte = 2; // Insert before this and increment.
static const unsigned char DatabaseFreeListTypeByte = 100;
static const unsigned char DatabaseNameTypeByte = 201;
@@ -857,9 +859,9 @@
if (int x = typeByteA - typeByteB)
return x;
-
- if (typeByteA <= 1)
+ if (typeByteA < MaxSimpleGlobalMetaDataTypeByte)
return 0;
+
if (typeByteA == DatabaseFreeListTypeByte)
return compare<DatabaseFreeListKey>(a, b);
if (typeByteA == DatabaseNameTypeByte)
@@ -875,9 +877,7 @@
if (int x = typeByteA - typeByteB)
return x;
-
- // FIXME: Replace this magic number. Should it account for UserIntVersion?
- if (typeByteA <= 3)
+ if (typeByteA < DatabaseMetaDataKey::MaxSimpleMetaDataType)
return 0;
if (typeByteA == ObjectStoreMetaDataTypeByte)
@@ -892,9 +892,6 @@
return compare<ObjectStoreNamesKey>(a, b);
if (typeByteA == IndexNamesKeyTypeByte)
return compare<IndexNamesKey>(a, b);
-
- // FIXME: Assert not reached here?
- return 0;
}
if (prefixA.type() == KeyPrefix::ObjectStoreData) {
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.h (134679 => 134680)
--- trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.h 2012-11-14 23:27:11 UTC (rev 134679)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.h 2012-11-14 23:28:54 UTC (rev 134680)
@@ -146,7 +146,8 @@
DatabaseName = 1,
UserVersion = 2,
MaxObjectStoreId = 3,
- UserIntVersion = 4
+ UserIntVersion = 4,
+ MaxSimpleMetaDataType = 5
};
static Vector<char> encode(int64_t databaseId, MetaDataType);
Modified: trunk/Source/WebKit/chromium/ChangeLog (134679 => 134680)
--- trunk/Source/WebKit/chromium/ChangeLog 2012-11-14 23:27:11 UTC (rev 134679)
+++ trunk/Source/WebKit/chromium/ChangeLog 2012-11-14 23:28:54 UTC (rev 134680)
@@ -1,3 +1,15 @@
+2012-11-14 Joshua Bell <jsb...@chromium.org>
+
+ IndexedDB: Remove magic numbers in record comparator, handle missing case
+ https://bugs.webkit.org/show_bug.cgi?id=102255
+
+ Reviewed by Tony Chang.
+
+ Add test keys for various metadata types.
+
+ * tests/IDBLevelDBCodingTest.cpp:
+ (IDBLevelDBCoding::TEST):
+
2012-11-14 Eric Uhrhane <er...@chromium.org>
[chromium] Don't let shift-click turn popup into tab.
Modified: trunk/Source/WebKit/chromium/tests/IDBLevelDBCodingTest.cpp (134679 => 134680)
--- trunk/Source/WebKit/chromium/tests/IDBLevelDBCodingTest.cpp 2012-11-14 23:27:11 UTC (rev 134679)
+++ trunk/Source/WebKit/chromium/tests/IDBLevelDBCodingTest.cpp 2012-11-14 23:28:54 UTC (rev 134680)
@@ -651,12 +651,25 @@
keys.append(DatabaseNameKey::encode("", "a"));
keys.append(DatabaseNameKey::encode("a", "a"));
keys.append(DatabaseMetaDataKey::encode(1, DatabaseMetaDataKey::OriginName));
- keys.append(ObjectStoreMetaDataKey::encode(1, 1, 0));
- keys.append(ObjectStoreMetaDataKey::encode(1, 1, 1));
+ keys.append(DatabaseMetaDataKey::encode(1, DatabaseMetaDataKey::DatabaseName));
+ keys.append(DatabaseMetaDataKey::encode(1, DatabaseMetaDataKey::UserVersion));
+ keys.append(DatabaseMetaDataKey::encode(1, DatabaseMetaDataKey::MaxObjectStoreId));
+ keys.append(DatabaseMetaDataKey::encode(1, DatabaseMetaDataKey::UserIntVersion));
+ keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::Name));
+ keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::KeyPath));
+ keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::AutoIncrement));
+ keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::Evictable));
+ keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::LastVersion));
+ keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::MaxIndexId));
+ keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::HasKeyPath));
+ keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::KeyGeneratorCurrentNumber));
keys.append(ObjectStoreMetaDataKey::encodeMaxKey(1, 1));
keys.append(ObjectStoreMetaDataKey::encodeMaxKey(1, 2));
keys.append(ObjectStoreMetaDataKey::encodeMaxKey(1));
- keys.append(IndexMetaDataKey::encode(1, 1, 30, 0));
+ keys.append(IndexMetaDataKey::encode(1, 1, 30, IndexMetaDataKey::Name));
+ keys.append(IndexMetaDataKey::encode(1, 1, 30, IndexMetaDataKey::Unique));
+ keys.append(IndexMetaDataKey::encode(1, 1, 30, IndexMetaDataKey::KeyPath));
+ keys.append(IndexMetaDataKey::encode(1, 1, 30, IndexMetaDataKey::MultiEntry));
keys.append(IndexMetaDataKey::encode(1, 1, 31, 0));
keys.append(IndexMetaDataKey::encode(1, 1, 31, 1));
keys.append(IndexMetaDataKey::encodeMaxKey(1, 1, 31));