mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
59d81139f5
Backed out changeset 778adbf10481 (bug 894595) Backed out changeset 5b621d8eb5e9 (bug 894595) Backed out changeset 91303ff403ac (bug 894595) Backed out changeset 3caa785122bf (bug 894595) Backed out changeset 108e2b8e177c (bug 894595)
78 lines
2.4 KiB
JavaScript
78 lines
2.4 KiB
JavaScript
/* 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/. */
|
|
|
|
function debug(msg) {
|
|
Services.console.logStringMessage("SessionStoreContent: " + msg);
|
|
}
|
|
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
|
|
|
|
/**
|
|
* Listens for and handles content events that we need for the
|
|
* session store service to be notified of state changes in content.
|
|
*/
|
|
let EventListener = {
|
|
|
|
DOM_EVENTS: [
|
|
"pageshow", "change", "input", "MozStorageChanged"
|
|
],
|
|
|
|
init: function () {
|
|
this.DOM_EVENTS.forEach(e => addEventListener(e, this, true));
|
|
},
|
|
|
|
handleEvent: function (event) {
|
|
switch (event.type) {
|
|
case "pageshow":
|
|
if (event.persisted)
|
|
sendAsyncMessage("SessionStore:pageshow");
|
|
break;
|
|
case "input":
|
|
case "change":
|
|
sendAsyncMessage("SessionStore:input");
|
|
break;
|
|
case "MozStorageChanged": {
|
|
let isSessionStorage = true;
|
|
// We are only interested in sessionStorage events
|
|
try {
|
|
if (event.storageArea != content.sessionStorage) {
|
|
isSessionStorage = false;
|
|
}
|
|
} catch (ex) {
|
|
// This page does not even have sessionStorage
|
|
// (this is typically the case of about: pages)
|
|
isSessionStorage = false;
|
|
}
|
|
if (isSessionStorage) {
|
|
sendAsyncMessage("SessionStore:MozStorageChanged");
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
debug("received unknown event '" + event.type + "'");
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
EventListener.init();
|
|
|
|
let ProgressListener = {
|
|
init: function() {
|
|
let webProgress = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
|
|
.getInterface(Ci.nsIWebProgress);
|
|
webProgress.addProgressListener(this, Ci.nsIWebProgress.NOTIFY_LOCATION);
|
|
},
|
|
onLocationChange: function(aWebProgress, aRequest, aLocation, aFlags) {
|
|
// We are changing page, so time to invalidate the state of the tab
|
|
sendAsyncMessage("SessionStore:loadStart");
|
|
},
|
|
onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {},
|
|
onProgressChange: function() {},
|
|
onStatusChange: function() {},
|
|
onSecurityChange: function() {},
|
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener,
|
|
Ci.nsISupportsWeakReference])
|
|
};
|
|
ProgressListener.init();
|