gecko/browser/components/sessionstore/content/content-sessionStore.js
Ryan VanderMeulen 59d81139f5 Backed out 5 changesets (bug 894595) for causing new mochitest-bc intermittent failures.
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)
2013-09-17 13:35:58 -04:00

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();