author | Ben Turner <bent.mozilla@gmail.com> |
Tue, 08 Nov 2011 11:03:18 -0800 | |
changeset 80028 | 938630505470610b53542221129668df77255f52 |
parent 80027 | e0add41f9a8f140fa77b5d530fe3c7b7dd6745f9 |
child 80029 | b259af61fe3f2777f13565b97d4377851f1979ae |
push id | 3253 |
push user | bturner@mozilla.com |
push date | Tue, 08 Nov 2011 22:09:05 +0000 |
treeherder | mozilla-inbound@938630505470 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | sicking |
bugs | 692642 |
milestone | 10.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/indexedDB/IDBFactory.cpp +++ b/dom/indexedDB/IDBFactory.cpp @@ -62,16 +62,17 @@ #include "AsyncConnectionHelper.h" #include "CheckPermissionsHelper.h" #include "DatabaseInfo.h" #include "IDBDatabase.h" #include "IDBEvents.h" #include "IDBKeyRange.h" #include "IndexedDatabaseManager.h" +#include "Key.h" #include "LazyIdleThread.h" #include "nsIScriptSecurityManager.h" using namespace mozilla; USING_INDEXEDDB_NAMESPACE namespace { @@ -458,8 +459,29 @@ IDBFactory::Open(const nsAString& aName, } NS_IMETHODIMP IDBFactory::DeleteDatabase(const nsAString& aName, nsIIDBOpenDBRequest** _retval) { return OpenCommon(aName, 0, true, _retval); } + +NS_IMETHODIMP +IDBFactory::Cmp(const jsval& aFirst, + const jsval& aSecond, + JSContext* aCx, + PRInt16* _retval) +{ + Key first, second; + nsresult rv = first.SetFromJSVal(aCx, aFirst); + NS_ENSURE_SUCCESS(rv, rv); + + rv = second.SetFromJSVal(aCx, aSecond); + NS_ENSURE_SUCCESS(rv, rv); + + if (first.IsUnset() || second.IsUnset()) { + return NS_ERROR_DOM_INDEXEDDB_DATA_ERR; + } + + *_retval = first == second ? 0 : first < second ? -1 : 1; + return NS_OK; +}
--- a/dom/indexedDB/nsIIDBFactory.idl +++ b/dom/indexedDB/nsIIDBFactory.idl @@ -53,9 +53,14 @@ interface nsIIDBFactory : nsISupports { [optional_argc] nsIIDBOpenDBRequest open([Null(Stringify)] in DOMString name, [optional] in long long version); nsIIDBOpenDBRequest deleteDatabase(in AString name); + + [implicit_jscontext] + short + cmp(in jsval first, + in jsval second); };
--- a/dom/indexedDB/test/Makefile.in +++ b/dom/indexedDB/test/Makefile.in @@ -53,16 +53,17 @@ TEST_FILES = \ helpers.js \ leaving_page_iframe.html \ test_add_twice_failure.html \ test_advance.html \ test_autoIncrement_indexes.html \ test_bad_keypath.html \ test_bfcache.html \ test_clear.html \ + test_cmp.html \ test_count.html \ test_create_index.html \ test_create_index_with_integer_keys.html \ test_create_objectStore.html \ test_cursors.html \ test_cursor_mutation.html \ test_cursor_update_updates_indexes.html \ test_deleteDatabase.html \
new file mode 100644 --- /dev/null +++ b/dom/indexedDB/test/test_cmp.html @@ -0,0 +1,85 @@ +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <title>Indexed Database Property Test</title> + + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> + + <script type="text/javascript;version=1.7"> + function testSteps() + { + function compare(key1, key2, expected, exception) { + function maybeQuote(key) { + return typeof(key) == "string" ? "\"" + key + "\"" : key; + } + + var cmp = "cmp(" + maybeQuote(key1) + ", " + maybeQuote(key2) + ")"; + + if (exception) { + var caught; + try { + var result = mozIndexedDB.cmp(key1, key2); + } + catch(e) { + caught = e; + } + ok(caught, "Got an exception for " + cmp); + is(caught instanceof IDBDatabaseException, true, + "Got IDBDatabaseException for " + cmp); + is(caught.code, IDBDatabaseException.DATA_ERR, + "Got correct exception code for " + cmp); + } + else { + is(mozIndexedDB.cmp(key1, key2), expected, + "Correct result for " + cmp); + } + } + + compare(NaN, 0, 0, true); + compare(0, NaN, 0, true); + compare(undefined, 0, 0, true); + compare(0, undefined, 0, true); + compare(null, 0, 0, true); + compare(0, null, 0, true); + + compare(0, 0, 0); + compare(1, 0, 1); + compare(0, 1, -1); + compare(1, 1, 0); + compare(2, 1, 1); + compare(1, 2, -1); + compare(-1, -1, 0); + compare(0, -1, 1); + compare(-1, 0, -1); + + compare("", "", 0); + compare("a", "", 1); + compare("", "a", -1); + compare("a", "a", 0); + compare("a", "b", -1); + compare("b", "a", 1); + compare("a", "aa", -1); + compare("aa", "a", 1); + + compare(0, "", -1); + compare("", 0, 1); + compare(0, "a", -1); + compare("a", 0, 1); + compare(99999, "", -1); + compare("", 99999, 1); + + finishTest(); + yield; + } + </script> + <script type="text/javascript;version=1.7" src="helpers.js"></script> + +</head> + +<body onload="runTest();"></body> + +</html>