author Bevis Tseng <>
Tue, 31 May 2016 18:08:20 +0800
changeset 304454 035505ea31497d0e07d51cda4711cebb385ca987
parent 291215 57f7f132083c4cf6182a5c0aaa9c7ba05e589b5e
child 345126 52f57ab9685b7cbcefae349ff305d899f884a223
permissions -rw-r--r--
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.

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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
 * The origin of this IDL file is
 * Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
 * liability, trademark and document use rules apply.

interface IDBDatabase : EventTarget {
    readonly    attribute DOMString          name;
    readonly    attribute unsigned long long version;

    readonly    attribute DOMStringList      objectStoreNames;

    IDBObjectStore createObjectStore (DOMString name, optional IDBObjectStoreParameters optionalParameters);

    void           deleteObjectStore (DOMString name);

    IDBTransaction transaction ((DOMString or sequence<DOMString>) storeNames,
                                optional IDBTransactionMode mode = "readonly");

    void           close ();

                attribute EventHandler       onabort;
                attribute EventHandler       onclose;
                attribute EventHandler       onerror;
                attribute EventHandler       onversionchange;

partial interface IDBDatabase {
    readonly    attribute StorageType        storage;

    [Exposed=Window, Throws]
    IDBRequest createMutableFile (DOMString name, optional DOMString type);

    // this is deprecated due to renaming in the spec
    [Exposed=Window, Throws]
    IDBRequest mozCreateFileHandle (DOMString name, optional DOMString type); // now createMutableFile