michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this file, michael@0: * You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: 'use strict'; michael@0: michael@0: let Cu = Components.utils; michael@0: let Cc = Components.classes; michael@0: let Ci = Components.interfaces; michael@0: michael@0: dump("############ ErrorPage.js\n"); michael@0: michael@0: let ErrorPageHandler = { michael@0: _reload: function() { michael@0: docShell.QueryInterface(Ci.nsIWebNavigation).reload(Ci.nsIWebNavigation.LOAD_FLAGS_NONE); michael@0: }, michael@0: michael@0: _certErrorPageEventHandler: function(e) { michael@0: let target = e.originalTarget; michael@0: let errorDoc = target.ownerDocument; michael@0: michael@0: // If the event came from an ssl error page, it is one of the "Add michael@0: // Exception…" buttons. michael@0: if (/^about:certerror\?e=nssBadCert/.test(errorDoc.documentURI)) { michael@0: let permanent = errorDoc.getElementById("permanentExceptionButton"); michael@0: let temp = errorDoc.getElementById("temporaryExceptionButton"); michael@0: if (target == temp || target == permanent) { michael@0: sendAsyncMessage("ErrorPage:AddCertException", { michael@0: url: errorDoc.location.href, michael@0: isPermanent: target == permanent michael@0: }); michael@0: } michael@0: } michael@0: }, michael@0: michael@0: _bindPageEvent: function(target) { michael@0: if (!target) { michael@0: return; michael@0: } michael@0: michael@0: if (/^about:certerror/.test(target.documentURI)) { michael@0: let errorPageEventHandler = this._certErrorPageEventHandler.bind(this); michael@0: addEventListener("click", errorPageEventHandler, true, false); michael@0: let listener = function() { michael@0: removeEventListener("click", errorPageEventHandler, true); michael@0: removeEventListener("pagehide", listener, true); michael@0: }.bind(this); michael@0: michael@0: addEventListener("pagehide", listener, true); michael@0: } michael@0: }, michael@0: michael@0: domContentLoadedHandler: function(e) { michael@0: let target = e.originalTarget; michael@0: let targetDocShell = target.defaultView michael@0: .QueryInterface(Ci.nsIInterfaceRequestor) michael@0: .getInterface(Ci.nsIWebNavigation); michael@0: if (targetDocShell != docShell) { michael@0: return; michael@0: } michael@0: this._bindPageEvent(target); michael@0: }, michael@0: michael@0: init: function() { michael@0: addMessageListener("ErrorPage:ReloadPage", this._reload.bind(this)); michael@0: addEventListener('DOMContentLoaded', michael@0: this.domContentLoadedHandler.bind(this), michael@0: true); michael@0: this._bindPageEvent(content.document); michael@0: } michael@0: }; michael@0: michael@0: ErrorPageHandler.init();