зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1341304 - Emit "selection-changed" event on the DevTools toolbox object. r=jdescottes,ochameau
MozReview-Commit-ID: G2jRxqDH9wx --HG-- extra : rebase_source : 732de8680b935e6a0d4bee6e4b614ac462badc12
This commit is contained in:
Родитель
f1266850f7
Коммит
6f0dbffd3d
|
@ -91,6 +91,7 @@ run-if = e10s
|
||||||
[browser_toolbox_select_event.js]
|
[browser_toolbox_select_event.js]
|
||||||
skip-if = e10s # Bug 1069044 - destroyInspector may hang during shutdown
|
skip-if = e10s # Bug 1069044 - destroyInspector may hang during shutdown
|
||||||
[browser_toolbox_selected_tool_unavailable.js]
|
[browser_toolbox_selected_tool_unavailable.js]
|
||||||
|
[browser_toolbox_selectionchanged_event.js]
|
||||||
[browser_toolbox_sidebar.js]
|
[browser_toolbox_sidebar.js]
|
||||||
[browser_toolbox_sidebar_events.js]
|
[browser_toolbox_sidebar_events.js]
|
||||||
[browser_toolbox_sidebar_existing_tabs.js]
|
[browser_toolbox_sidebar_existing_tabs.js]
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||||
|
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||||
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const PAGE_URL = "data:text/html;charset=utf-8,<body><div></div></body>";
|
||||||
|
|
||||||
|
add_task(function* () {
|
||||||
|
let tab = yield addTab(PAGE_URL);
|
||||||
|
let toolbox = yield openToolboxForTab(tab, "inspector", "bottom");
|
||||||
|
let inspector = toolbox.getCurrentPanel();
|
||||||
|
|
||||||
|
let root = yield inspector.walker.getRootNode();
|
||||||
|
let body = yield inspector.walker.querySelector(root, "body");
|
||||||
|
let node = yield inspector.walker.querySelector(root, "div");
|
||||||
|
|
||||||
|
is(inspector.selection.nodeFront, body, "Body is selected by default");
|
||||||
|
|
||||||
|
// Listen to selection changed
|
||||||
|
let onSelectionChanged = toolbox.once("selection-changed");
|
||||||
|
|
||||||
|
info("Select the div and wait for the selection-changed event to be fired.");
|
||||||
|
inspector.selection.setNodeFront(node, "browser-context-menu");
|
||||||
|
|
||||||
|
yield onSelectionChanged;
|
||||||
|
|
||||||
|
is(inspector.selection.nodeFront, node, "Div is now selected");
|
||||||
|
|
||||||
|
// Listen to cleared selection changed
|
||||||
|
let onClearSelectionChanged = toolbox.once("selection-changed");
|
||||||
|
|
||||||
|
info("Clear the selection and wait for the selection-changed event to be fired.");
|
||||||
|
inspector.selection.setNodeFront(undefined, "browser-context-menu");
|
||||||
|
|
||||||
|
yield onClearSelectionChanged;
|
||||||
|
|
||||||
|
is(inspector.selection.nodeFront, undefined, "The selection is undefined as expected");
|
||||||
|
});
|
||||||
|
|
|
@ -137,6 +137,7 @@ function Toolbox(target, selectedTool, hostType, contentWindow, frameId) {
|
||||||
this._onPickerStarted = this._onPickerStarted.bind(this);
|
this._onPickerStarted = this._onPickerStarted.bind(this);
|
||||||
this._onPickerStopped = this._onPickerStopped.bind(this);
|
this._onPickerStopped = this._onPickerStopped.bind(this);
|
||||||
this._onInspectObject = this._onInspectObject.bind(this);
|
this._onInspectObject = this._onInspectObject.bind(this);
|
||||||
|
this._onNewSelectedNodeFront = this._onNewSelectedNodeFront.bind(this);
|
||||||
this.selectTool = this.selectTool.bind(this);
|
this.selectTool = this.selectTool.bind(this);
|
||||||
|
|
||||||
this._target.on("close", this.destroy);
|
this._target.on("close", this.destroy);
|
||||||
|
@ -2219,6 +2220,7 @@ Toolbox.prototype = {
|
||||||
let showAllAnonymousContent = Services.prefs.getBoolPref(pref);
|
let showAllAnonymousContent = Services.prefs.getBoolPref(pref);
|
||||||
this._walker = yield this._inspector.getWalker({ showAllAnonymousContent });
|
this._walker = yield this._inspector.getWalker({ showAllAnonymousContent });
|
||||||
this._selection = new Selection(this._walker);
|
this._selection = new Selection(this._walker);
|
||||||
|
this._selection.on("new-node-front", this._onNewSelectedNodeFront);
|
||||||
|
|
||||||
if (this.highlighterUtils.isRemoteHighlightable()) {
|
if (this.highlighterUtils.isRemoteHighlightable()) {
|
||||||
this.walker.on("highlighter-ready", this._highlighterReady);
|
this.walker.on("highlighter-ready", this._highlighterReady);
|
||||||
|
@ -2232,6 +2234,13 @@ Toolbox.prototype = {
|
||||||
return this._initInspector;
|
return this._initInspector;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onNewSelectedNodeFront: function (evt) {
|
||||||
|
// Emit a "selection-changed" event when the toolbox.selection has been set
|
||||||
|
// to a new node (or cleared). Currently used in the WebExtensions APIs (to
|
||||||
|
// provide the `devtools.panels.elements.onSelectionChanged` event).
|
||||||
|
this.emit("selection-changed");
|
||||||
|
},
|
||||||
|
|
||||||
_onInspectObject: function (evt, packet) {
|
_onInspectObject: function (evt, packet) {
|
||||||
this.inspectObjectActor(packet.objectActor, packet.inspectFromAnnotation);
|
this.inspectObjectActor(packet.objectActor, packet.inspectFromAnnotation);
|
||||||
},
|
},
|
||||||
|
@ -2303,6 +2312,7 @@ Toolbox.prototype = {
|
||||||
yield this._highlighter.destroy();
|
yield this._highlighter.destroy();
|
||||||
}
|
}
|
||||||
if (this._selection) {
|
if (this._selection) {
|
||||||
|
this._selection.off("new-node-front", this._onNewSelectedNodeFront);
|
||||||
this._selection.destroy();
|
this._selection.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче