mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
8087b03ca3
r=dietrich
115 lines
3.5 KiB
JavaScript
115 lines
3.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
Components.utils.import("resource://gre/modules/NetUtil.jsm");
|
|
|
|
/**
|
|
* Waits for completion of a clear history operation, before
|
|
* proceeding with aCallback.
|
|
*
|
|
* @param aCallback
|
|
* Function to be called when done.
|
|
*/
|
|
function waitForClearHistory(aCallback) {
|
|
Services.obs.addObserver(function observeCH(aSubject, aTopic, aData) {
|
|
Services.obs.removeObserver(observeCH, PlacesUtils.TOPIC_EXPIRATION_FINISHED);
|
|
aCallback();
|
|
}, PlacesUtils.TOPIC_EXPIRATION_FINISHED, false);
|
|
PlacesUtils.bhistory.removeAllPages();
|
|
}
|
|
|
|
/**
|
|
* Waits for all pending async statements on the default connection, before
|
|
* proceeding with aCallback.
|
|
*
|
|
* @param aCallback
|
|
* Function to be called when done.
|
|
* @param aScope
|
|
* Scope for the callback.
|
|
* @param aArguments
|
|
* Arguments array for the callback.
|
|
*
|
|
* @note The result is achieved by asynchronously executing a query requiring
|
|
* a write lock. Since all statements on the same connection are
|
|
* serialized, the end of this write operation means that all writes are
|
|
* complete. Note that WAL makes so that writers don't block readers, but
|
|
* this is a problem only across different connections.
|
|
*/
|
|
function waitForAsyncUpdates(aCallback, aScope, aArguments)
|
|
{
|
|
let scope = aScope || this;
|
|
let args = aArguments || [];
|
|
let db = PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
|
|
.DBConnection;
|
|
let begin = db.createAsyncStatement("BEGIN EXCLUSIVE");
|
|
begin.executeAsync();
|
|
begin.finalize();
|
|
|
|
let commit = db.createAsyncStatement("COMMIT");
|
|
commit.executeAsync({
|
|
handleResult: function() {},
|
|
handleError: function() {},
|
|
handleCompletion: function(aReason)
|
|
{
|
|
aCallback.apply(scope, args);
|
|
}
|
|
});
|
|
commit.finalize();
|
|
}
|
|
|
|
/**
|
|
* Returns a moz_places field value for a url.
|
|
*
|
|
* @param aURI
|
|
* The URI or spec to get field for.
|
|
* param aCallback
|
|
* Callback function that will get the property value.
|
|
*/
|
|
function fieldForUrl(aURI, aFieldName, aCallback)
|
|
{
|
|
let url = aURI instanceof Ci.nsIURI ? aURI.spec : aURI;
|
|
let stmt = PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
|
|
.DBConnection.createAsyncStatement(
|
|
"SELECT " + aFieldName + " FROM moz_places WHERE url = :page_url"
|
|
);
|
|
stmt.params.page_url = url;
|
|
stmt.executeAsync({
|
|
_value: -1,
|
|
handleResult: function(aResultSet) {
|
|
let row = aResultSet.getNextRow();
|
|
if (!row)
|
|
ok(false, "The page should exist in the database");
|
|
this._value = row.getResultByName(aFieldName);
|
|
},
|
|
handleError: function() {},
|
|
handleCompletion: function(aReason) {
|
|
if (aReason != Ci.mozIStorageStatementCallback.REASON_FINISHED)
|
|
ok(false, "The statement should properly succeed");
|
|
aCallback(this._value);
|
|
}
|
|
});
|
|
stmt.finalize();
|
|
}
|
|
|
|
function waitForAsyncUpdates(aCallback, aScope, aArguments)
|
|
{
|
|
let scope = aScope || this;
|
|
let args = aArguments || [];
|
|
let db = PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
|
|
.DBConnection;
|
|
let begin = db.createAsyncStatement("BEGIN EXCLUSIVE");
|
|
begin.executeAsync();
|
|
begin.finalize();
|
|
|
|
let commit = db.createAsyncStatement("COMMIT");
|
|
commit.executeAsync({
|
|
handleResult: function() {},
|
|
handleError: function() {},
|
|
handleCompletion: function(aReason)
|
|
{
|
|
aCallback.apply(scope, args);
|
|
}
|
|
});
|
|
commit.finalize();
|
|
}
|