From 2c7a2e1beace229133138b7705edfb02dd99e92b Mon Sep 17 00:00:00 2001 From: Kyle Huey Date: Wed, 2 Nov 2011 08:53:12 -0400 Subject: [PATCH] Bug 698440: Implement IndexedDB optional version syntax. r=bent --- dom/indexedDB/IDBFactory.cpp | 3 ++- dom/indexedDB/OpenDatabaseHelper.cpp | 14 ++++++++++++++ dom/indexedDB/nsIIDBFactory.idl | 7 ++++--- dom/indexedDB/test/browser_forgetThisSite.js | 4 +--- dom/indexedDB/test/browser_forgetThisSiteGet.html | 2 +- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/dom/indexedDB/IDBFactory.cpp b/dom/indexedDB/IDBFactory.cpp index 75bf9ff9ee6d..9b68a1524490 100644 --- a/dom/indexedDB/IDBFactory.cpp +++ b/dom/indexedDB/IDBFactory.cpp @@ -381,11 +381,12 @@ NS_IMETHODIMP IDBFactory::Open(const nsAString& aName, PRInt64 aVersion, JSContext* aCx, + PRUint8 aOptionalArgCount, nsIIDBOpenDBRequest** _retval) { NS_ASSERTION(NS_IsMainThread(), "Wrong thread!"); - if (aVersion < 1) { + if (aVersion < 1 && aOptionalArgCount) { return NS_ERROR_DOM_INDEXEDDB_NON_TRANSIENT_ERR; } diff --git a/dom/indexedDB/OpenDatabaseHelper.cpp b/dom/indexedDB/OpenDatabaseHelper.cpp index c8c0178637f5..9fe3ea05df81 100644 --- a/dom/indexedDB/OpenDatabaseHelper.cpp +++ b/dom/indexedDB/OpenDatabaseHelper.cpp @@ -746,6 +746,20 @@ OpenDatabaseHelper::DoDatabaseWork() } // See if we need to do a VERSION_CHANGE transaction + + // Optional version semantics. + if (!mRequestedVersion) { + // If the requested version was not specified and the database was created, + // treat it as if version 1 were requested. + if (mCurrentVersion == 0) { + mRequestedVersion = 1; + } + else { + // Otherwise, treat it as if the current version were requested. + mRequestedVersion = mCurrentVersion; + } + } + if (mCurrentVersion > mRequestedVersion) { return NS_ERROR_DOM_INDEXEDDB_VERSION_ERR; } diff --git a/dom/indexedDB/nsIIDBFactory.idl b/dom/indexedDB/nsIIDBFactory.idl index 8ed0fe18af16..5441f7677bfb 100644 --- a/dom/indexedDB/nsIIDBFactory.idl +++ b/dom/indexedDB/nsIIDBFactory.idl @@ -49,10 +49,11 @@ interface nsIVariant; * http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#idl-def-IDBFactory * for more information. */ -[scriptable, uuid(4b23254a-ce6d-4442-8c90-9d8744d3c633)] +[scriptable, uuid(d2889b8f-662a-42d3-8a8f-ac5179b9d5b0)] interface nsIIDBFactory : nsISupports { - [implicit_jscontext] + [implicit_jscontext, optional_argc] nsIIDBOpenDBRequest - open(in AString name, in long long version); + open(in AString name, + [optional] in long long version); }; diff --git a/dom/indexedDB/test/browser_forgetThisSite.js b/dom/indexedDB/test/browser_forgetThisSite.js index 8478369d0ac7..38b87cf9aa6e 100644 --- a/dom/indexedDB/test/browser_forgetThisSite.js +++ b/dom/indexedDB/test/browser_forgetThisSite.js @@ -97,9 +97,7 @@ function test5() gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true); setFinishedCallback(function(result, exception) { - // XXXkhuey this isn't really testing anything until we get the default - // version behavior implemented ... - ok(result == 11, "Got correct version on database in " + testPageURL4); + ok(result == 1, "Got correct version on database in " + testPageURL4); ok(!exception, "No exception"); gBrowser.removeCurrentTab(); diff --git a/dom/indexedDB/test/browser_forgetThisSiteGet.html b/dom/indexedDB/test/browser_forgetThisSiteGet.html index ec3bf6fc0db2..b53455cb512e 100644 --- a/dom/indexedDB/test/browser_forgetThisSiteGet.html +++ b/dom/indexedDB/test/browser_forgetThisSiteGet.html @@ -9,7 +9,7 @@