mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Support the setting and getting of version information.
This commit is contained in:
parent
7318105b8e
commit
9aeb1b0a64
@ -93,6 +93,23 @@ private:
|
||||
nsTArray<nsCOMPtr<nsISupports> > mDoomedObjects;
|
||||
};
|
||||
|
||||
class SetVersionHelper : public AsyncConnectionHelper
|
||||
{
|
||||
public:
|
||||
SetVersionHelper(IDBDatabaseRequest* aDatabase,
|
||||
IDBRequest* aRequest,
|
||||
const nsAString& aVersion)
|
||||
: AsyncConnectionHelper(aDatabase, aRequest), mVersion(aVersion)
|
||||
{ }
|
||||
|
||||
PRUint16 DoDatabaseWork(mozIStorageConnection* aConnection);
|
||||
PRUint16 OnSuccess(nsIDOMEventTarget* aTarget);
|
||||
|
||||
private:
|
||||
// In-params
|
||||
nsString mVersion;
|
||||
};
|
||||
|
||||
class CreateObjectStoreHelper : public AsyncConnectionHelper
|
||||
{
|
||||
public:
|
||||
@ -377,6 +394,12 @@ IDBDatabaseRequest::FireCloseConnectionRunnable()
|
||||
NS_ASSERTION(doomedObjects.Length() == 0, "Should have swapped!");
|
||||
}
|
||||
|
||||
void
|
||||
IDBDatabaseRequest::OnVersionSet(const nsString& aVersion)
|
||||
{
|
||||
mVersion = aVersion;
|
||||
}
|
||||
|
||||
void
|
||||
IDBDatabaseRequest::OnObjectStoreCreated(const nsAString& aName)
|
||||
{
|
||||
@ -478,7 +501,7 @@ IDBDatabaseRequest::GetIndexes(nsIDOMDOMStringList** aIndexes)
|
||||
NS_ENSURE_TRUE(list->Add(mIndexNames[index]), NS_ERROR_OUT_OF_MEMORY);
|
||||
}
|
||||
|
||||
|
||||
|
||||
list.forget(aIndexes);
|
||||
return NS_OK;
|
||||
}
|
||||
@ -677,11 +700,15 @@ IDBDatabaseRequest::SetVersion(const nsAString& aVersion,
|
||||
nsIIDBRequest** _retval)
|
||||
{
|
||||
NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
|
||||
NS_NOTYETIMPLEMENTED("Implement me!");
|
||||
|
||||
nsCOMPtr<nsIIDBRequest> request(GenerateRequest());
|
||||
nsRefPtr<IDBRequest> request = GenerateRequest();
|
||||
|
||||
nsRefPtr<SetVersionHelper> helper =
|
||||
new SetVersionHelper(this, request, aVersion);
|
||||
nsresult rv = helper->Dispatch(mConnectionThread);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
request.forget(_retval);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -717,6 +744,36 @@ IDBDatabaseRequest::Observe(nsISupports* aSubject,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRUint16
|
||||
SetVersionHelper::DoDatabaseWork(mozIStorageConnection* aConnection)
|
||||
{
|
||||
NS_PRECONDITION(aConnection, "Passing a null connection!");
|
||||
|
||||
nsCOMPtr<mozIStorageStatement> stmt;
|
||||
nsresult rv = aConnection->CreateStatement(NS_LITERAL_CSTRING(
|
||||
"UPDATE database "
|
||||
"SET version = :version"
|
||||
), getter_AddRefs(stmt));
|
||||
NS_ENSURE_SUCCESS(rv, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
|
||||
rv = stmt->BindStringByName(NS_LITERAL_CSTRING("version"), mVersion);
|
||||
NS_ENSURE_SUCCESS(rv, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
|
||||
if (NS_FAILED(stmt->Execute())) {
|
||||
return nsIIDBDatabaseException::CONSTRAINT_ERR;
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
PRUint16
|
||||
SetVersionHelper::OnSuccess(nsIDOMEventTarget* aTarget)
|
||||
{
|
||||
mDatabase->OnVersionSet(mVersion);
|
||||
|
||||
return AsyncConnectionHelper::OnSuccess(aTarget);
|
||||
}
|
||||
|
||||
PRUint16
|
||||
CreateObjectStoreHelper::DoDatabaseWork(mozIStorageConnection* aConnection)
|
||||
{
|
||||
|
@ -124,6 +124,7 @@ public:
|
||||
|
||||
void FireCloseConnectionRunnable();
|
||||
|
||||
void OnVersionSet(const nsString& aVersion);
|
||||
void OnObjectStoreCreated(const nsAString& aName);
|
||||
void OnIndexCreated(const nsAString& aName);
|
||||
void OnObjectStoreRemoved(const nsAString& aName);
|
||||
|
@ -111,8 +111,7 @@ CreateTables(mozIStorageConnection* aDBConn)
|
||||
"CREATE TABLE database ("
|
||||
"name TEXT NOT NULL, "
|
||||
"description TEXT NOT NULL, "
|
||||
"version TEXT DEFAULT NULL, "
|
||||
"UNIQUE (name)"
|
||||
"version TEXT DEFAULT NULL"
|
||||
");"
|
||||
));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
@ -177,9 +176,33 @@ CreateTables(mozIStorageConnection* aDBConn)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
CreateMetaData(mozIStorageConnection* aConnection,
|
||||
const nsAString& aName,
|
||||
const nsAString& aDescription)
|
||||
{
|
||||
NS_PRECONDITION(!NS_IsMainThread(), "Wrong thread!");
|
||||
NS_PRECONDITION(aConnection, "Null database!");
|
||||
|
||||
nsCOMPtr<mozIStorageStatement> stmt;
|
||||
nsresult rv = aConnection->CreateStatement(NS_LITERAL_CSTRING(
|
||||
"INSERT OR REPLACE INTO database (name, description) "
|
||||
"VALUES (:name, :description)"
|
||||
), getter_AddRefs(stmt));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = stmt->BindStringByName(NS_LITERAL_CSTRING("name"), aName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
rv = stmt->BindStringByName(NS_LITERAL_CSTRING("description"), aDescription);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return stmt->Execute();
|
||||
}
|
||||
|
||||
nsresult
|
||||
CreateDatabaseConnection(const nsACString& aASCIIOrigin,
|
||||
const nsAString& aName,
|
||||
const nsAString& aDescription,
|
||||
nsAString& aDatabaseFilePath,
|
||||
mozIStorageConnection** aConnection)
|
||||
{
|
||||
@ -275,6 +298,9 @@ CreateDatabaseConnection(const nsACString& aASCIIOrigin,
|
||||
|
||||
rv = CreateTables(connection);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = CreateMetaData(connection, aName, aDescription);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
@ -419,28 +445,52 @@ OpenDatabaseHelper::DoDatabaseWork(mozIStorageConnection* aConnection)
|
||||
#endif
|
||||
NS_ASSERTION(!aConnection, "Huh?!");
|
||||
|
||||
nsresult rv = CreateDatabaseConnection(mASCIIOrigin, mName, mDatabaseFilePath,
|
||||
nsresult rv = CreateDatabaseConnection(mASCIIOrigin, mName, mDescription,
|
||||
mDatabaseFilePath,
|
||||
getter_AddRefs(mConnection));
|
||||
NS_ENSURE_SUCCESS(rv, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
|
||||
nsCOMPtr<mozIStorageStatement> stmt;
|
||||
rv = mConnection->CreateStatement(NS_LITERAL_CSTRING(
|
||||
"SELECT name "
|
||||
"FROM object_store"
|
||||
), getter_AddRefs(stmt));
|
||||
NS_ENSURE_SUCCESS(rv, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
|
||||
PRBool hasResult;
|
||||
while (NS_SUCCEEDED(stmt->ExecuteStep(&hasResult)) && hasResult) {
|
||||
nsString* name = mObjectStoreNames.AppendElement();
|
||||
NS_ENSURE_TRUE(name, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
|
||||
rv = stmt->GetString(0, *name);
|
||||
{ // Load object store names.
|
||||
nsCOMPtr<mozIStorageStatement> stmt;
|
||||
rv = mConnection->CreateStatement(NS_LITERAL_CSTRING(
|
||||
"SELECT name "
|
||||
"FROM object_store"
|
||||
), getter_AddRefs(stmt));
|
||||
NS_ENSURE_SUCCESS(rv, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
|
||||
PRBool hasResult;
|
||||
while (NS_SUCCEEDED(stmt->ExecuteStep(&hasResult)) && hasResult) {
|
||||
nsString* name = mObjectStoreNames.AppendElement();
|
||||
NS_ENSURE_TRUE(name, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
|
||||
rv = stmt->GetString(0, *name);
|
||||
NS_ENSURE_SUCCESS(rv, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
}
|
||||
}
|
||||
|
||||
NS_WARNING("Need to load index names here!");
|
||||
NS_WARNING("Need to load version here!");
|
||||
{ // Load index names.
|
||||
NS_WARNING("Need to load index names here!");
|
||||
}
|
||||
|
||||
{ // Load version information.
|
||||
nsCOMPtr<mozIStorageStatement> stmt;
|
||||
rv = mConnection->CreateStatement(NS_LITERAL_CSTRING(
|
||||
"SELECT version "
|
||||
"FROM database"
|
||||
), getter_AddRefs(stmt));
|
||||
NS_ENSURE_SUCCESS(rv, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
|
||||
PRBool hasResult;
|
||||
rv = stmt->ExecuteStep(&hasResult);
|
||||
NS_ENSURE_SUCCESS(rv, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
NS_ENSURE_TRUE(hasResult, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
|
||||
rv = stmt->GetString(0, mVersion);
|
||||
NS_ENSURE_SUCCESS(rv, nsIIDBDatabaseException::UNKNOWN_ERR);
|
||||
if (mVersion.IsVoid()) {
|
||||
mVersion.Assign(EmptyString());
|
||||
}
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
@ -56,6 +56,7 @@ _TEST_FILES = \
|
||||
test_objectStore_remove_values.html \
|
||||
test_event_source.html \
|
||||
test_objectStore_inline_autoincrement_key_added_on_put.html \
|
||||
test_setVersion.html \
|
||||
$(NULL)
|
||||
|
||||
libs:: $(_TEST_FILES)
|
||||
|
64
dom/indexedDB/test/test_setVersion.html
Normal file
64
dom/indexedDB/test/test_setVersion.html
Normal file
@ -0,0 +1,64 @@
|
||||
<!--
|
||||
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="/MochiKit/packed.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript" src="helpers.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
|
||||
<script type="text/javascript;version=1.7">
|
||||
|
||||
function testSteps()
|
||||
{
|
||||
const name = window.location.pathname;
|
||||
const description = "My Test Database";
|
||||
|
||||
var request = indexedDB.open(name, description);
|
||||
request.onerror = errorHandler;
|
||||
request.onsuccess = continueTest;
|
||||
var event = yield;
|
||||
|
||||
var db = event.result;
|
||||
|
||||
// Check default state.
|
||||
SimpleTest.is(db.version, "", "Correct default version for a new database.");
|
||||
|
||||
const versions = [
|
||||
"",
|
||||
"1.0",
|
||||
];
|
||||
|
||||
for (let i = 0; i < versions.length; i++) {
|
||||
let version = versions[i];
|
||||
let request = db.setVersion(version);
|
||||
request.onerror = errorHandler;
|
||||
request.onsuccess = continueTest;
|
||||
event = yield;
|
||||
|
||||
SimpleTest.is(db.version, version,
|
||||
"Database version number updated correctly");
|
||||
}
|
||||
|
||||
SimpleTest.executeSoon(finishTest);
|
||||
yield;
|
||||
}
|
||||
|
||||
var gGen = testSteps();
|
||||
function run_test()
|
||||
{
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
continueTest();
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body onload="run_test();">
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user