Backed out changeset 8a0b81f6263e (bug 1606862) for causing devtools failures at devtools/client/framework/test/browser_toolbox_toolbar_reorder_with_extension.js

CLOSED TREE
This commit is contained in:
Daniel Varga 2020-04-30 06:05:20 +03:00
parent 053f3b98ca
commit 63b9840733
7 changed files with 8 additions and 194 deletions

View File

@ -29,7 +29,9 @@ function getDevToolsPrefBranchName(extensionId) {
}
/**
* Retrieve the tabId for the given devtools toolbox.
* Retrieve the devtools target for the devtools extension proxy context
* (lazily cloned from the target of the toolbox associated to the context
* the first time that it is accessed).
*
* @param {Toolbox} toolbox
* A devtools toolbox instance.
@ -255,7 +257,6 @@ class DevToolsPageDefinition {
if (this.devtoolsPageForToolbox.size === 0) {
DevToolsShim.off("theme-changed", this.onThemeChanged);
}
this.extension.emit("devtools-page-shutdown", toolbox);
}
}
@ -310,30 +311,11 @@ this.devtools = class extends ExtensionAPI {
constructor(extension) {
super(extension);
this._initialized = false;
// DevToolsPageDefinition instance (created in onManifestEntry).
this.pageDefinition = null;
this.onToolboxCreated = this.onToolboxCreated.bind(this);
this.onToolboxDestroy = this.onToolboxDestroy.bind(this);
/* eslint-disable mozilla/balanced-listeners */
extension.on("add-permissions", (ignoreEvent, permissions) => {
if (permissions.permissions.includes("devtools")) {
this._initialize();
}
});
extension.on("remove-permissions", (ignoreEvent, permissions) => {
Services.prefs.setBoolPref(
`${getDevToolsPrefBranchName(extension.id)}.enabled`,
false
);
if (permissions.permissions.includes("devtools")) {
this._uninitialize();
}
});
extension.on("startup", this._initialize.bind(this));
}
static onUninstall(extensionId) {
@ -345,13 +327,9 @@ this.devtools = class extends ExtensionAPI {
prefBranch.deleteBranch("");
}
_initialize() {
onManifestEntry(entryName) {
const { extension } = this;
if (!extension.hasPermission("devtools") || this._initialized) {
return;
}
this.initDevToolsPref();
// Create the devtools_page definition.
@ -368,17 +346,9 @@ this.devtools = class extends ExtensionAPI {
DevToolsShim.on("toolbox-created", this.onToolboxCreated);
DevToolsShim.on("toolbox-destroy", this.onToolboxDestroy);
this._initialized = true;
}
_uninitialize() {
// devtoolsPrefBranch is set in onManifestEntry, and nullified
// later in onShutdown. If it isn't set, then onManifestEntry
// did not initialize devtools for the extension.
if (!this._initialized) {
return;
}
onShutdown() {
DevToolsShim.off("toolbox-created", this.onToolboxCreated);
DevToolsShim.off("toolbox-destroy", this.onToolboxDestroy);
@ -392,15 +362,6 @@ this.devtools = class extends ExtensionAPI {
}
this.uninitDevToolsPref();
this._initialized = false;
}
onStartup() {
this._initialize();
}
onShutdown() {
this._uninitialize();
}
getAPI(context) {

View File

@ -12,7 +12,7 @@
}
},
{
"$extend": "OptionalPermission",
"$extend": "Permission",
"choices": [{
"type": "string",
"enum": [

View File

@ -119,7 +119,6 @@ support-files = !/browser/components/places/tests/browser/head.js
[browser_ext_devtools_inspectedWindow_targetSwitch.js]
[browser_ext_devtools_network.js]
skip-if = fission || os == 'linux' || (os == 'mac' && debug) || (debug && os == 'win' && bits == 64) # Bug1570478
[browser_ext_devtools_optional.js]
[browser_ext_devtools_page.js]
[browser_ext_devtools_page_incognito.js]
[browser_ext_devtools_panel.js]

View File

@ -1,114 +0,0 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
loadTestSubscript("head_devtools.js");
/**
* This test file ensures that:
*
* - the devtools_page property creates a new WebExtensions context
* - the devtools_page can exchange messages with the background page
*/
add_task(async function test_devtools_page_runtime_api_messaging() {
Services.prefs.setBoolPref(
"extensions.webextOptionalPermissionPrompts",
false
);
registerCleanupFunction(() => {
Services.prefs.clearUserPref("extensions.webextOptionalPermissionPrompts");
});
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"http://mochi.test:8888/"
);
function background() {
let perm = { permissions: ["devtools"], origins: [] };
browser.test.onMessage.addListener(async (msg, sender) => {
if (msg === "request") {
let granted = await new Promise(resolve => {
browser.test.withHandlingUserInput(() => {
resolve(browser.permissions.request(perm));
});
});
browser.test.assertTrue(granted, "permission request succeeded");
browser.test.sendMessage("done");
} else if (msg === "revoke") {
browser.permissions.remove(perm);
browser.test.sendMessage("done");
}
});
}
function devtools_page() {
browser.test.sendMessage("devtools_page_loaded");
}
let extension = ExtensionTestUtils.loadExtension({
background,
manifest: {
optional_permissions: ["devtools"],
devtools_page: "devtools_page.html",
},
files: {
"devtools_page.html": `<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script src="devtools_page.js"></script>
</body>
</html>`,
"devtools_page.js": devtools_page,
},
});
await extension.startup();
function checkEnabled(expect = false) {
Assert.equal(
expect,
Services.prefs.getBoolPref(
`devtools.webextensions.${extension.id}.enabled`,
false
),
"devtools enabled pref is correct"
);
}
checkEnabled(false);
// Open the devtools first, then request permission
info("Open the developer toolbox");
await openToolboxForTab(tab);
assertDevToolsExtensionEnabled(extension.uuid, false);
extension.sendMessage("request");
await extension.awaitMessage("done");
checkEnabled(true);
info("Wait the devtools page load");
await extension.awaitMessage("devtools_page_loaded");
assertDevToolsExtensionEnabled(extension.uuid, true);
let policy = WebExtensionPolicy.getByID(extension.id);
let closed = new Promise(resolve => {
// eslint-disable-next-line mozilla/balanced-listeners
policy.extension.on("devtools-page-shutdown", resolve);
});
extension.sendMessage("revoke");
await extension.awaitMessage("done");
await closed;
checkEnabled(false);
assertDevToolsExtensionEnabled(extension.uuid, false);
await extension.unload();
await closeToolboxForTab(tab);
BrowserTestUtils.removeTab(tab);
});

View File

@ -3,7 +3,7 @@
"use strict";
/* exported openToolboxForTab, closeToolboxForTab, getToolboxTargetForTab,
registerBlankToolboxPanel, TOOLBOX_BLANK_PANEL_ID, assertDevToolsExtensionEnabled */
registerBlankToolboxPanel, TOOLBOX_BLANK_PANEL_ID */
ChromeUtils.defineModuleGetter(
this,
@ -19,12 +19,6 @@ XPCOMUtils.defineLazyGetter(this, "TargetFactory", () => {
return TargetFactory;
});
ChromeUtils.defineModuleGetter(
this,
"DevToolsShim",
"chrome://devtools-startup/content/DevToolsShim.jsm"
);
const TOOLBOX_BLANK_PANEL_ID = "testBlankPanel";
// Register a blank custom tool so that we don't need to wait the webconsole
@ -92,13 +86,3 @@ async function closeToolboxForTab(tab) {
})}`
);
}
function assertDevToolsExtensionEnabled(uuid, enabled) {
for (let toolbox of DevToolsShim.getToolboxes()) {
is(
enabled,
!!toolbox.isWebExtensionEnabled(uuid),
`extension is ${enabled ? "enabled" : "disabled"} on toolbox`
);
}
}

View File

@ -635,10 +635,7 @@ class ExtensionData {
this.manifest.permissions
);
if (
this.manifest.devtools_page &&
!this.manifest.optional_permissions.includes("devtools")
) {
if (this.manifest.devtools_page) {
permissions.add("devtools");
}
@ -2438,18 +2435,6 @@ class Extension extends ExtensionData {
}
}
// Ensure devtools permission is set
if (
this.manifest.devtools_page &&
!this.manifest.optional_permissions.includes("devtools")
) {
ExtensionPermissions.add(this.id, {
permissions: ["devtools"],
origins: [],
});
this.permissions.add("devtools");
}
GlobalManager.init(this);
this.initSharedData();

View File

@ -50,7 +50,6 @@ add_task(async function setup() {
"activeTab",
"clipboardRead",
"clipboardWrite",
"devtools",
"downloads.open",
"geolocation",
"management",