зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1289273: Resolve URLs passed to windows.create relative to the caller. r=aswan a=al
MozReview-Commit-ID: 3TUIK6EvO3q --HG-- extra : rebase_source : cccf23ce3edc1543f15223c677645c42be0ff7a6 extra : histedit_source : 42bdc39ad4c4bdc01e3d094f8d62eae11f3532ba
This commit is contained in:
Родитель
78fe5d0ec3
Коммит
a4e557a57b
|
@ -273,10 +273,10 @@
|
|||
"description": "A URL or array of URLs to open as tabs in the window. Fully-qualified URLs must include a scheme (i.e. 'http://www.google.com', not 'www.google.com'). Relative URLs will be relative to the current page within the extension. Defaults to the New Tab Page.",
|
||||
"optional": true,
|
||||
"choices": [
|
||||
{ "type": "string" },
|
||||
{ "type": "string", "format": "relativeUrl" },
|
||||
{
|
||||
"type": "array",
|
||||
"items": { "type": "string" }
|
||||
"items": { "type": "string", "format": "relativeUrl" }
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
@ -92,6 +92,7 @@ tags = webextensions
|
|||
[browser_ext_windows_create.js]
|
||||
tags = fullscreen
|
||||
[browser_ext_windows_create_tabId.js]
|
||||
[browser_ext_windows_create_url.js]
|
||||
[browser_ext_windows_events.js]
|
||||
[browser_ext_windows_size.js]
|
||||
skip-if = os == 'mac' # Fails when windows are randomly opened in fullscreen mode
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set sts=2 sw=2 et tw=80: */
|
||||
"use strict";
|
||||
|
||||
add_task(function* testWindowCreate() {
|
||||
let extension = ExtensionTestUtils.loadExtension({
|
||||
manifest: {
|
||||
permissions: ["tabs"],
|
||||
},
|
||||
|
||||
background() {
|
||||
const EXTENSION_URL = browser.runtime.getURL("test.html");
|
||||
const REMOTE_URL = browser.runtime.getURL("test.html");
|
||||
|
||||
let windows = new class extends Map { // eslint-disable-line new-parens
|
||||
get(id) {
|
||||
if (!this.has(id)) {
|
||||
let window = {
|
||||
tabs: new Map(),
|
||||
};
|
||||
window.promise = new Promise(resolve => {
|
||||
window.resolvePromise = resolve;
|
||||
});
|
||||
|
||||
this.set(id, window);
|
||||
}
|
||||
|
||||
return super.get(id);
|
||||
}
|
||||
};
|
||||
|
||||
browser.tabs.onUpdated.addListener((tabId, changed, tab) => {
|
||||
if (changed.status == "complete" && tab.url !== "about:blank") {
|
||||
let window = windows.get(tab.windowId);
|
||||
window.tabs.set(tab.index, tab);
|
||||
|
||||
if (window.tabs.size === window.expectedTabs) {
|
||||
window.resolvePromise(window);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function create(options) {
|
||||
return browser.windows.create(options).then(window => {
|
||||
let win = windows.get(window.id);
|
||||
|
||||
win.expectedTabs = Array.isArray(options.url) ? options.url.length : 1;
|
||||
|
||||
return win.promise;
|
||||
});
|
||||
}
|
||||
|
||||
Promise.all([
|
||||
create({url: REMOTE_URL}),
|
||||
create({url: "test.html"}),
|
||||
create({url: EXTENSION_URL}),
|
||||
create({url: [REMOTE_URL, "test.html", EXTENSION_URL]}),
|
||||
]).then(windows => {
|
||||
browser.test.assertEq(REMOTE_URL, windows[0].tabs.get(0).url, "Single, absolute, remote URL");
|
||||
|
||||
browser.test.assertEq(REMOTE_URL, windows[1].tabs.get(0).url, "Single, relative URL");
|
||||
|
||||
browser.test.assertEq(REMOTE_URL, windows[2].tabs.get(0).url, "Single, absolute, extension URL");
|
||||
|
||||
browser.test.assertEq(REMOTE_URL, windows[3].tabs.get(0).url, "url[0]: Absolute, remote URL");
|
||||
browser.test.assertEq(EXTENSION_URL, windows[3].tabs.get(1).url, "url[1]: Relative URL");
|
||||
browser.test.assertEq(EXTENSION_URL, windows[3].tabs.get(2).url, "url[2]: Absolute, extension URL");
|
||||
}).then(() => {
|
||||
browser.test.notifyPass("window-create-url");
|
||||
}).catch(e => {
|
||||
browser.test.fail(`${e} :: ${e.stack}`);
|
||||
browser.test.notifyFail("window-create-url");
|
||||
});
|
||||
},
|
||||
|
||||
files: {
|
||||
"test.html": `<DOCTYPE html><html><head><meta charset="utf-8"></head></html>`,
|
||||
},
|
||||
});
|
||||
|
||||
yield extension.startup();
|
||||
yield extension.awaitFinish("window-create-url");
|
||||
yield extension.unload();
|
||||
});
|
|
@ -687,6 +687,10 @@ GlobalManager = {
|
|||
let schemaWrapper = {
|
||||
isChromeCompat,
|
||||
|
||||
get url() {
|
||||
return context.uri.spec;
|
||||
},
|
||||
|
||||
get principal() {
|
||||
return context.principal;
|
||||
},
|
||||
|
|
Загрузка…
Ссылка в новой задаче