gecko-dev/dom/indexedDB/PBackgroundIDBDatabase.ipdl
Bevis Tseng 44deb08f5c Bug 1151017 - Support the 'close' Event on Databases. r=khuey
Outline of this patch:

1. Define a new ipdl message called |CloseAfterInvalidationComplete| to trigger the close event after all transactions are complete only if the database is invalidated by the user agent.
2. Make sure the following event sequence is consistent during invalidation according to the steps in |5.2. Closing a database| by the following 2 solutions:
     IDBRequest.onerror -> IDBTransaction.onerror -> IDBTransaction.onabort -> IDBDatabase.onclose.
   2.1. In parent process, do not force to abort the transactions after invalidation but wait for all the transactions in its child process are complete.
   2.2. In child process, make sure that each IDBTransaction will notify its completion to the parent after all its pending IDBRequests are finished.
3. Add test_database_onclose.js to test the close event especially when read/write operation is ongoing.
4. Add test_database_close_without_onclose.js as a XPCShell test because setTimeout() is not preferred in Mochitest to ensure that the IDBDatabase.onclose event won't be sent after closed normally.
2016-05-31 18:08:20 +08:00

88 lines
2.1 KiB
Plaintext

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
include protocol PBackgroundIDBDatabaseFile;
include protocol PBackgroundIDBDatabaseRequest;
include protocol PBackgroundIDBFactory;
include protocol PBackgroundIDBTransaction;
include protocol PBackgroundIDBVersionChangeTransaction;
include protocol PBackgroundMutableFile;
include protocol PBlob;
include InputStreamParams;
include PBackgroundIDBSharedTypes;
include "mozilla/dom/indexedDB/SerializationHelpers.h";
using struct mozilla::null_t
from "ipc/IPCMessageUtils.h";
using mozilla::dom::IDBTransaction::Mode
from "mozilla/dom/IDBTransaction.h";
namespace mozilla {
namespace dom {
namespace indexedDB {
struct CreateFileParams
{
nsString name;
nsString type;
};
union DatabaseRequestParams
{
CreateFileParams;
};
union NullableVersion
{
null_t;
uint64_t;
};
sync protocol PBackgroundIDBDatabase
{
manager PBackgroundIDBFactory;
manages PBackgroundIDBDatabaseFile;
manages PBackgroundIDBDatabaseRequest;
manages PBackgroundIDBTransaction;
manages PBackgroundIDBVersionChangeTransaction;
manages PBackgroundMutableFile;
parent:
async DeleteMe();
async Blocked();
async Close();
async PBackgroundIDBDatabaseFile(PBlob blob);
async PBackgroundIDBDatabaseRequest(DatabaseRequestParams params);
async PBackgroundIDBTransaction(nsString[] objectStoreNames, Mode mode);
child:
async __delete__();
async VersionChange(uint64_t oldVersion, NullableVersion newVersion);
async Invalidate();
async CloseAfterInvalidationComplete();
async PBackgroundIDBVersionChangeTransaction(uint64_t currentVersion,
uint64_t requestedVersion,
int64_t nextObjectStoreId,
int64_t nextIndexId);
async PBackgroundMutableFile(nsString name, nsString type);
};
} // namespace indexedDB
} // namespace dom
} // namespace mozilla