Bug 997561 - Uplift Add-on SDK to Firefox (CLOSED TREE) r=me

This commit is contained in:
Erik Vold 2014-04-17 02:07:49 -07:00
parent c3a93c2128
commit 4abbe6385a
7 changed files with 52 additions and 80 deletions

View File

@ -65,8 +65,12 @@ exports.install = function install(xpiPath) {
// Order AddonManager to install the addon
AddonManager.getInstallForFile(file, function(install) {
install.addListener(listener);
install.install();
if (install.error != null) {
install.addListener(listener);
install.install();
} else {
reject(install.error);
}
});
return promise;

View File

@ -286,17 +286,6 @@ const ContentWorker = Object.freeze({
value: self
});
// Deprecated use of on/postMessage from globals
exports.postMessage = function deprecatedPostMessage() {
console.error("DEPRECATED: The global `postMessage()` function in " +
"content scripts is deprecated in favor of the " +
"`self.postMessage()` function, which works the same. " +
"Replace calls to `postMessage()` with calls to " +
"`self.postMessage()`." +
"For more info on `self.on`, see " +
"<https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/addon-development/web-content.html>.");
return self.postMessage.apply(null, arguments);
};
exports.on = function deprecatedOn() {
console.error("DEPRECATED: The global `on()` function in content " +
"scripts is deprecated in favor of the `self.on()` " +

View File

@ -46,9 +46,11 @@ function onDocumentReady2Translate(event) {
try {
// Finally display document when we finished replacing all text content
let winUtils = document.defaultView.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils);
winUtils.removeSheet(hideSheetUri, winUtils.USER_SHEET);
if (document.defaultView) {
let winUtils = document.defaultView.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils);
winUtils.removeSheet(hideSheetUri, winUtils.USER_SHEET);
}
}
catch(e) {
console.exception(e);

View File

@ -223,7 +223,6 @@ exports.show = show
function setupPanelFrame(frame) {
frame.setAttribute("flex", 1);
frame.setAttribute("transparent", "transparent");
frame.setAttribute("showcaret", true);
frame.setAttribute("autocompleteenabled", true);
if (platform === "darwin") {
frame.style.borderRadius = "6px";

View File

@ -191,9 +191,6 @@ exports["test postMessage"] = createProxyTest(html, function (helper, assert) {
helper.createWorker(
'new ' + function ContentScriptScope() {
assert(postMessage === postMessage,
"verify that we doesn't generate multiple functions for the same method");
var json = JSON.stringify({foo : "bar\n \"escaped\"."});
document.getElementById("iframe").contentWindow.postMessage(json, "*");

View File

@ -26,7 +26,13 @@ const DEPRECATE_PREF = "devtools.errorconsole.deprecation_warnings";
const DEFAULT_CONTENT_URL = "data:text/html;charset=utf-8,foo";
function makeWindow(contentURL) {
const WINDOW_SCRIPT_URL = "data:text/html;charset=utf-8," +
"<script>window.addEventListener('message', function (e) {" +
" if (e.data === 'from -> content-script')" +
" window.postMessage('from -> window', '*');" +
"});</script>";
function makeWindow() {
let content =
"<?xml version=\"1.0\"?>" +
"<window " +
@ -782,50 +788,6 @@ exports["test:check worker API with page history"] = WorkerTest(
}
);
exports["test:global postMessage"] = WorkerTest(
DEFAULT_CONTENT_URL,
function(assert, browser, done) {
let { loader } = LoaderWithHookedConsole(module, onMessage);
setPref(DEPRECATE_PREF, true);
// Intercept all console method calls
let seenMessages = 0;
function onMessage(type, message) {
seenMessages++;
assert.equal(type, "error", "Should be an error");
assert.equal(message, "DEPRECATED: The global `postMessage()` function in " +
"content scripts is deprecated in favor of the " +
"`self.postMessage()` function, which works the same. " +
"Replace calls to `postMessage()` with calls to " +
"`self.postMessage()`." +
"For more info on `self.on`, see " +
"<https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/addon-development/web-content.html>.",
"Should have seen the deprecation message")
}
assert.notEqual(browser.contentWindow.location.href, "about:blank",
"window is now on the right document");
let window = browser.contentWindow
let worker = loader.require("sdk/content/worker").Worker({
window: window,
contentScript: "new " + function WorkerScope() {
postMessage("success");
},
contentScriptWhen: "ready",
onMessage: function(msg) {
assert.equal("success", msg, "Should have seen the right postMessage call");
assert.equal(1, seenMessages, "Should have seen the deprecation message");
done();
}
});
assert.equal(worker.url, window.location.href,
"worker.url works");
worker.postMessage("hi!");
}
);
exports['test:conentScriptFile as URL instance'] = WorkerTest(
DEFAULT_CONTENT_URL,
function(assert, browser, done) {
@ -889,8 +851,8 @@ exports["test:onDetach in contentScript on destroy"] = WorkerTest(
})
},
});
browser.contentWindow.addEventListener('hashchange', _ => {
assert.equal(browser.contentWindow.location.hash, '#detach!',
browser.contentWindow.addEventListener('hashchange', _ => {
assert.equal(browser.contentWindow.location.hash, '#detach!',
"location.href is as expected");
done();
})
@ -910,8 +872,8 @@ exports["test:onDetach in contentScript on unload"] = WorkerTest(
})
},
});
browser.contentWindow.addEventListener('hashchange', _ => {
assert.equal(browser.contentWindow.location.hash, '#detach!shutdown',
browser.contentWindow.addEventListener('hashchange', _ => {
assert.equal(browser.contentWindow.location.hash, '#detach!shutdown',
"location.href is as expected");
done();
})
@ -954,4 +916,25 @@ exports["test:console method log functions properly"] = WorkerTest(
}
);
exports["test:global postMessage"] = WorkerTest(
WINDOW_SCRIPT_URL,
function(assert, browser, done) {
let contentScript = "window.addEventListener('message', function (e) {" +
" if (e.data === 'from -> window')" +
" self.port.emit('response', e.data, e.origin);" +
"});" +
"postMessage('from -> content-script', '*');";
let { loader } = LoaderWithHookedConsole(module);
let worker = loader.require("sdk/content/worker").Worker({
window: browser.contentWindow,
contentScriptWhen: "ready",
contentScript: contentScript
});
worker.port.on("response", (data, origin) => {
assert.equal(data, "from -> window", "Communication from content-script to window completed");
done();
});
});
require("test").run(exports);

View File

@ -1,12 +1,10 @@
/* 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/. */
"use strict";
const { Loader } = require('sdk/test/loader');
const Pages = require("sdk/page-worker");
const Page = Pages.Page;
const { Page } = require("sdk/page-worker");
const { URL } = require("sdk/url");
const fixtures = require("./fixtures");
const testURI = fixtures.url("test.html");
@ -93,17 +91,17 @@ exports.testPageProperties = function(assert) {
exports.testConstructorAndDestructor = function(assert, done) {
let loader = Loader(module);
let Pages = loader.require("sdk/page-worker");
let { Page } = loader.require("sdk/page-worker");
let global = loader.sandbox("sdk/page-worker");
let pagesReady = 0;
let page1 = Pages.Page({
let page1 = Page({
contentScript: "self.postMessage('')",
contentScriptWhen: "end",
onMessage: pageReady
});
let page2 = Pages.Page({
let page2 = Page({
contentScript: "self.postMessage('')",
contentScriptWhen: "end",
onMessage: pageReady
@ -128,9 +126,9 @@ exports.testConstructorAndDestructor = function(assert, done) {
exports.testAutoDestructor = function(assert, done) {
let loader = Loader(module);
let Pages = loader.require("sdk/page-worker");
let { Page } = loader.require("sdk/page-worker");
let page = Pages.Page({
let page = Page({
contentScript: "self.postMessage('')",
contentScriptWhen: "end",
onMessage: function() {
@ -316,12 +314,12 @@ exports.testPingPong = function(assert, done) {
exports.testRedirect = function (assert, done) {
let page = Page({
contentURL: 'data:text/html;charset=utf-8,first-page',
contentScript: '(function () {' +
contentScriptWhen: "end",
contentScript: '' +
'if (/first-page/.test(document.location.href)) ' +
' document.location.href = "data:text/html;charset=utf-8,redirect";' +
'else ' +
' self.port.emit("redirect", document.location.href);' +
'})();'
' self.port.emit("redirect", document.location.href);'
});
page.port.on('redirect', function (url) {