This commit removes the `nsICancelable` return values from all `mozIBridgedSyncEngine` methods, and replaces them with a `mozIInterruptible` interface that can be implemented by store classes that support interrupting. The `nsICancelable` pattern was intended to make each operation interruptible, without affecting the others. But we can't guarantee that with SQLite, because it only has a way to interrupt all running statements on a connection, not specific ones. Further, this pattern doesn't match what we currently do in a-s, where we create an internal "interrupt scope" for each operation, and hand out an "interrupt handle" for interrupting all in-progress operations. Storage classes like `StorageSyncArea` can opt in to interruption by implementing `mozIInterruptible`. It's a separate interface to protect against accidental misuse: because it interrupts all statements on the connection, it might lose writes if the current operation is a `set`, for example. But it's useful for testing and debugging, so we still expose it. This commit also changes Golden Gate ferries to hold weak references to the `BridgedEngine`, so that they don't block teardown. Differential Revision: https://phabricator.services.mozilla.com/D73413
14 lines
588 B
Plaintext
14 lines
588 B
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 "nsISupports.idl"
|
|
|
|
// Interrupts all pending operations on a data store, if possible. This is
|
|
// provided as a separate interface because the store may want to hide this
|
|
// implementation from callers, as interrupting a write can cause data loss.
|
|
[scriptable, uuid(1c06bfd3-76b1-46fa-a64a-db682d478374)]
|
|
interface mozIInterruptible : nsISupports {
|
|
void interrupt();
|
|
};
|