gecko/browser/components/uitour/content-UITour.js

100 lines
2.8 KiB
JavaScript
Raw Normal View History

Bug 1098071 - Move uitour.js library out of test directory. r=MattN --HG-- rename : browser/modules/test/uitour.js => browser/components/uitour/UITour-lib.js rename : browser/modules/UITour.jsm => browser/components/uitour/UITour.jsm rename : browser/base/content/content-UITour.js => browser/components/uitour/content-UITour.js rename : browser/modules/test/browser_UITour.js => browser/components/uitour/test/browser_UITour.js rename : browser/modules/test/browser_UITour2.js => browser/components/uitour/test/browser_UITour2.js rename : browser/modules/test/browser_UITour3.js => browser/components/uitour/test/browser_UITour3.js rename : browser/modules/test/browser_UITour_annotation_size_attributes.js => browser/components/uitour/test/browser_UITour_annotation_size_attributes.js rename : browser/modules/test/browser_UITour_availableTargets.js => browser/components/uitour/test/browser_UITour_availableTargets.js rename : browser/modules/test/browser_UITour_detach_tab.js => browser/components/uitour/test/browser_UITour_detach_tab.js rename : browser/modules/test/browser_UITour_loop.js => browser/components/uitour/test/browser_UITour_loop.js rename : browser/modules/test/browser_UITour_modalDialog.js => browser/components/uitour/test/browser_UITour_modalDialog.js rename : browser/modules/test/browser_UITour_observe.js => browser/components/uitour/test/browser_UITour_observe.js rename : browser/modules/test/browser_UITour_panel_close_annotation.js => browser/components/uitour/test/browser_UITour_panel_close_annotation.js rename : browser/modules/test/browser_UITour_registerPageID.js => browser/components/uitour/test/browser_UITour_registerPageID.js rename : browser/modules/test/browser_UITour_resetProfile.js => browser/components/uitour/test/browser_UITour_resetProfile.js rename : browser/modules/test/browser_UITour_sync.js => browser/components/uitour/test/browser_UITour_sync.js rename : browser/modules/test/head.js => browser/components/uitour/test/head.js rename : browser/modules/test/image.png => browser/components/uitour/test/image.png rename : browser/modules/test/uitour.html => browser/components/uitour/test/uitour.html
2015-01-05 22:13:46 -08:00
/* 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/. */
let {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
const PREF_TEST_WHITELIST = "browser.uitour.testingOrigins";
const UITOUR_PERMISSION = "uitour";
let UITourListener = {
handleEvent: function (event) {
if (!Services.prefs.getBoolPref("browser.uitour.enabled")) {
return;
}
if (!this.ensureTrustedOrigin()) {
return;
}
addMessageListener("UITour:SendPageCallback", this);
addMessageListener("UITour:SendPageNotification", this);
sendAsyncMessage("UITour:onPageEvent", {
detail: event.detail,
type: event.type,
pageVisibilityState: content.document.visibilityState,
});
},
isTestingOrigin: function(aURI) {
if (Services.prefs.getPrefType(PREF_TEST_WHITELIST) != Services.prefs.PREF_STRING) {
return false;
}
// Add any testing origins (comma-seperated) to the whitelist for the session.
for (let origin of Services.prefs.getCharPref(PREF_TEST_WHITELIST).split(",")) {
try {
let testingURI = Services.io.newURI(origin, null, null);
if (aURI.prePath == testingURI.prePath) {
return true;
}
} catch (ex) {
Cu.reportError(ex);
}
}
return false;
},
// This function is copied from UITour.jsm.
isSafeScheme: function(aURI) {
let allowedSchemes = new Set(["https", "about"]);
if (!Services.prefs.getBoolPref("browser.uitour.requireSecure"))
allowedSchemes.add("http");
if (!allowedSchemes.has(aURI.scheme))
return false;
return true;
},
ensureTrustedOrigin: function() {
if (content.top != content)
return false;
let uri = content.document.documentURIObject;
if (uri.schemeIs("chrome"))
return true;
if (!this.isSafeScheme(uri))
return false;
let permission = Services.perms.testPermission(uri, UITOUR_PERMISSION);
if (permission == Services.perms.ALLOW_ACTION)
return true;
return this.isTestingOrigin(uri);
},
receiveMessage: function(aMessage) {
switch (aMessage.name) {
case "UITour:SendPageCallback":
this.sendPageEvent("Response", aMessage.data);
break;
case "UITour:SendPageNotification":
this.sendPageEvent("Notification", aMessage.data);
break;
}
},
sendPageEvent: function (type, detail) {
let doc = content.document;
let eventName = "mozUITour" + type;
let event = new doc.defaultView.CustomEvent(eventName, {
bubbles: true,
detail: Cu.cloneInto(detail, doc.defaultView)
});
doc.dispatchEvent(event);
}
};
addEventListener("mozUITour", UITourListener, false, true);