Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(697)

Unified Diff: third_party/WebKit/Source/devtools/front_end/ui/ContextMenu.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/ui/ContextMenu.js
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/ContextMenu.js b/third_party/WebKit/Source/devtools/front_end/ui/ContextMenu.js
index 979c8ef911efcd41e757159a936aa3807eda950a..a59ca5669f3eb8962f39f95ad05d902e69a30f88 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/ContextMenu.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/ContextMenu.js
@@ -27,281 +27,263 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
/**
- * @constructor
- * @param {?WebInspector.ContextMenu} topLevelMenu
- * @param {string} type
- * @param {string=} label
- * @param {boolean=} disabled
- * @param {boolean=} checked
+ * @unrestricted
*/
-WebInspector.ContextMenuItem = function(topLevelMenu, type, label, disabled, checked)
-{
+WebInspector.ContextMenuItem = class {
+ /**
+ * @param {?WebInspector.ContextMenu} topLevelMenu
+ * @param {string} type
+ * @param {string=} label
+ * @param {boolean=} disabled
+ * @param {boolean=} checked
+ */
+ constructor(topLevelMenu, type, label, disabled, checked) {
this._type = type;
this._label = label;
this._disabled = disabled;
this._checked = checked;
this._contextMenu = topLevelMenu;
- if (type === "item" || type === "checkbox")
- this._id = topLevelMenu ? topLevelMenu._nextId() : 0;
-};
-
-WebInspector.ContextMenuItem.prototype = {
- /**
- * @return {number}
- */
- id: function()
- {
- return this._id;
- },
-
- /**
- * @return {string}
- */
- type: function()
- {
- return this._type;
- },
-
- /**
- * @return {boolean}
- */
- isEnabled: function()
- {
- return !this._disabled;
- },
-
- /**
- * @param {boolean} enabled
- */
- setEnabled: function(enabled)
- {
- this._disabled = !enabled;
- },
-
- /**
- * @return {!InspectorFrontendHostAPI.ContextMenuDescriptor}
- */
- _buildDescriptor: function()
- {
- switch (this._type) {
- case "item":
- var result = { type: "item", id: this._id, label: this._label, enabled: !this._disabled };
- if (this._customElement)
- result.element = this._customElement;
- if (this._shortcut)
- result.shortcut = this._shortcut;
- return result;
- case "separator":
- return { type: "separator" };
- case "checkbox":
- return { type: "checkbox", id: this._id, label: this._label, checked: !!this._checked, enabled: !this._disabled };
- }
- throw new Error("Invalid item type:" + this._type);
- },
-
- /**
- * @param {string} shortcut
- */
- setShortcut: function(shortcut)
- {
- this._shortcut = shortcut;
+ if (type === 'item' || type === 'checkbox')
+ this._id = topLevelMenu ? topLevelMenu._nextId() : 0;
+ }
+
+ /**
+ * @return {number}
+ */
+ id() {
+ return this._id;
+ }
+
+ /**
+ * @return {string}
+ */
+ type() {
+ return this._type;
+ }
+
+ /**
+ * @return {boolean}
+ */
+ isEnabled() {
+ return !this._disabled;
+ }
+
+ /**
+ * @param {boolean} enabled
+ */
+ setEnabled(enabled) {
+ this._disabled = !enabled;
+ }
+
+ /**
+ * @return {!InspectorFrontendHostAPI.ContextMenuDescriptor}
+ */
+ _buildDescriptor() {
+ switch (this._type) {
+ case 'item':
+ var result = {type: 'item', id: this._id, label: this._label, enabled: !this._disabled};
+ if (this._customElement)
+ result.element = this._customElement;
+ if (this._shortcut)
+ result.shortcut = this._shortcut;
+ return result;
+ case 'separator':
+ return {type: 'separator'};
+ case 'checkbox':
+ return {type: 'checkbox', id: this._id, label: this._label, checked: !!this._checked, enabled: !this._disabled};
}
+ throw new Error('Invalid item type:' + this._type);
+ }
+
+ /**
+ * @param {string} shortcut
+ */
+ setShortcut(shortcut) {
+ this._shortcut = shortcut;
+ }
};
/**
- * @constructor
- * @extends {WebInspector.ContextMenuItem}
- * @param {?WebInspector.ContextMenu} topLevelMenu
- * @param {string=} label
- * @param {boolean=} disabled
+ * @unrestricted
*/
-WebInspector.ContextSubMenuItem = function(topLevelMenu, label, disabled)
-{
- WebInspector.ContextMenuItem.call(this, topLevelMenu, "subMenu", label, disabled);
+WebInspector.ContextSubMenuItem = class extends WebInspector.ContextMenuItem {
+ /**
+ * @param {?WebInspector.ContextMenu} topLevelMenu
+ * @param {string=} label
+ * @param {boolean=} disabled
+ */
+ constructor(topLevelMenu, label, disabled) {
+ super(topLevelMenu, 'subMenu', label, disabled);
/** @type {!Array.<!WebInspector.ContextMenuItem>} */
this._items = [];
-};
-
-WebInspector.ContextSubMenuItem.prototype = {
- /**
- * @param {string} label
- * @param {function(?)} handler
- * @param {boolean=} disabled
- * @return {!WebInspector.ContextMenuItem}
- */
- appendItem: function(label, handler, disabled)
- {
- var item = new WebInspector.ContextMenuItem(this._contextMenu, "item", label, disabled);
- this._pushItem(item);
- this._contextMenu._setHandler(item.id(), handler);
- return item;
- },
-
- /**
- * @param {!Element} element
- * @return {!WebInspector.ContextMenuItem}
- */
- appendCustomItem: function(element)
- {
- var item = new WebInspector.ContextMenuItem(this._contextMenu, "item", "<custom>");
- item._customElement = element;
- this._pushItem(item);
- return item;
- },
-
- /**
- * @param {string} actionId
- * @param {string=} label
- * @return {!WebInspector.ContextMenuItem}
- */
- appendAction: function(actionId, label)
- {
- var action = WebInspector.actionRegistry.action(actionId);
- if (!label)
- label = action.title();
- var result = this.appendItem(label, action.execute.bind(action));
- var shortcut = WebInspector.shortcutRegistry.shortcutTitleForAction(actionId);
- if (shortcut)
- result.setShortcut(shortcut);
- return result;
- },
-
- /**
- * @param {string} label
- * @param {boolean=} disabled
- * @param {string=} subMenuId
- * @return {!WebInspector.ContextSubMenuItem}
- */
- appendSubMenuItem: function(label, disabled, subMenuId)
- {
- var item = new WebInspector.ContextSubMenuItem(this._contextMenu, label, disabled);
- if (subMenuId)
- this._contextMenu._namedSubMenus.set(subMenuId, item);
- this._pushItem(item);
- return item;
- },
-
- /**
- * @param {string} label
- * @param {function()} handler
- * @param {boolean=} checked
- * @param {boolean=} disabled
- * @return {!WebInspector.ContextMenuItem}
- */
- appendCheckboxItem: function(label, handler, checked, disabled)
- {
- var item = new WebInspector.ContextMenuItem(this._contextMenu, "checkbox", label, disabled, checked);
- this._pushItem(item);
- this._contextMenu._setHandler(item.id(), handler);
- return item;
- },
-
- appendSeparator: function()
- {
- if (this._items.length)
- this._pendingSeparator = true;
- },
-
- /**
- * @param {!WebInspector.ContextMenuItem} item
- */
- _pushItem: function(item)
- {
- if (this._pendingSeparator) {
- this._items.push(new WebInspector.ContextMenuItem(this._contextMenu, "separator"));
- delete this._pendingSeparator;
- }
- this._items.push(item);
- },
-
- /**
- * @return {boolean}
- */
- isEmpty: function()
- {
- return !this._items.length;
- },
-
- /**
- * @override
- * @return {!InspectorFrontendHostAPI.ContextMenuDescriptor}
- */
- _buildDescriptor: function()
- {
- var result = { type: "subMenu", label: this._label, enabled: !this._disabled, subItems: [] };
- for (var i = 0; i < this._items.length; ++i)
- result.subItems.push(this._items[i]._buildDescriptor());
- return result;
- },
-
+ }
+
+ /**
+ * @param {string} label
+ * @param {function(?)} handler
+ * @param {boolean=} disabled
+ * @return {!WebInspector.ContextMenuItem}
+ */
+ appendItem(label, handler, disabled) {
+ var item = new WebInspector.ContextMenuItem(this._contextMenu, 'item', label, disabled);
+ this._pushItem(item);
+ this._contextMenu._setHandler(item.id(), handler);
+ return item;
+ }
+
+ /**
+ * @param {!Element} element
+ * @return {!WebInspector.ContextMenuItem}
+ */
+ appendCustomItem(element) {
+ var item = new WebInspector.ContextMenuItem(this._contextMenu, 'item', '<custom>');
+ item._customElement = element;
+ this._pushItem(item);
+ return item;
+ }
+
+ /**
+ * @param {string} actionId
+ * @param {string=} label
+ * @return {!WebInspector.ContextMenuItem}
+ */
+ appendAction(actionId, label) {
+ var action = WebInspector.actionRegistry.action(actionId);
+ if (!label)
+ label = action.title();
+ var result = this.appendItem(label, action.execute.bind(action));
+ var shortcut = WebInspector.shortcutRegistry.shortcutTitleForAction(actionId);
+ if (shortcut)
+ result.setShortcut(shortcut);
+ return result;
+ }
+
+ /**
+ * @param {string} label
+ * @param {boolean=} disabled
+ * @param {string=} subMenuId
+ * @return {!WebInspector.ContextSubMenuItem}
+ */
+ appendSubMenuItem(label, disabled, subMenuId) {
+ var item = new WebInspector.ContextSubMenuItem(this._contextMenu, label, disabled);
+ if (subMenuId)
+ this._contextMenu._namedSubMenus.set(subMenuId, item);
+ this._pushItem(item);
+ return item;
+ }
+
+ /**
+ * @param {string} label
+ * @param {function()} handler
+ * @param {boolean=} checked
+ * @param {boolean=} disabled
+ * @return {!WebInspector.ContextMenuItem}
+ */
+ appendCheckboxItem(label, handler, checked, disabled) {
+ var item = new WebInspector.ContextMenuItem(this._contextMenu, 'checkbox', label, disabled, checked);
+ this._pushItem(item);
+ this._contextMenu._setHandler(item.id(), handler);
+ return item;
+ }
+
+ appendSeparator() {
+ if (this._items.length)
+ this._pendingSeparator = true;
+ }
+
+ /**
+ * @param {!WebInspector.ContextMenuItem} item
+ */
+ _pushItem(item) {
+ if (this._pendingSeparator) {
+ this._items.push(new WebInspector.ContextMenuItem(this._contextMenu, 'separator'));
+ delete this._pendingSeparator;
+ }
+ this._items.push(item);
+ }
+
+ /**
+ * @return {boolean}
+ */
+ isEmpty() {
+ return !this._items.length;
+ }
+
+ /**
+ * @override
+ * @return {!InspectorFrontendHostAPI.ContextMenuDescriptor}
+ */
+ _buildDescriptor() {
+ var result = {type: 'subMenu', label: this._label, enabled: !this._disabled, subItems: []};
+ for (var i = 0; i < this._items.length; ++i)
+ result.subItems.push(this._items[i]._buildDescriptor());
+ return result;
+ }
+
+ /**
+ * @param {string} location
+ */
+ appendItemsAtLocation(location) {
/**
- * @param {string} location
+ * @param {!WebInspector.ContextSubMenuItem} menu
+ * @param {!Runtime.Extension} extension
*/
- appendItemsAtLocation: function(location)
- {
- /**
- * @param {!WebInspector.ContextSubMenuItem} menu
- * @param {!Runtime.Extension} extension
- */
- function appendExtension(menu, extension)
- {
- var subMenuId = extension.descriptor()["subMenuId"];
- if (subMenuId) {
- var subMenuItem = menu.appendSubMenuItem(extension.title(), false, subMenuId);
- subMenuItem.appendItemsAtLocation(subMenuId);
- } else {
- menu.appendAction(extension.descriptor()["actionId"]);
- }
- }
-
- // Hard-coded named groups for elements to maintain generic order.
- var groupWeights = ["new", "open", "clipboard", "navigate", "footer"];
-
- /** @type {!Map.<string, !Array.<!Runtime.Extension>>} */
- var groups = new Map();
- var extensions = self.runtime.extensions("context-menu-item");
- for (var extension of extensions) {
- var itemLocation = extension.descriptor()["location"] || "";
- if (!itemLocation.startsWith(location + "/"))
- continue;
-
- var itemGroup = itemLocation.substr(location.length + 1);
- if (!itemGroup || itemGroup.includes("/"))
- continue;
- var group = groups.get(itemGroup);
- if (!group) {
- group = [];
- groups.set(itemGroup, group);
- if (groupWeights.indexOf(itemGroup) === -1)
- groupWeights.splice(4, 0, itemGroup);
- }
- group.push(extension);
- }
- for (var groupName of groupWeights) {
- var group = groups.get(groupName);
- if (!group)
- continue;
- group.forEach(appendExtension.bind(null, this));
- this.appendSeparator();
- }
- },
+ function appendExtension(menu, extension) {
+ var subMenuId = extension.descriptor()['subMenuId'];
+ if (subMenuId) {
+ var subMenuItem = menu.appendSubMenuItem(extension.title(), false, subMenuId);
+ subMenuItem.appendItemsAtLocation(subMenuId);
+ } else {
+ menu.appendAction(extension.descriptor()['actionId']);
+ }
+ }
- __proto__: WebInspector.ContextMenuItem.prototype
+ // Hard-coded named groups for elements to maintain generic order.
+ var groupWeights = ['new', 'open', 'clipboard', 'navigate', 'footer'];
+
+ /** @type {!Map.<string, !Array.<!Runtime.Extension>>} */
+ var groups = new Map();
+ var extensions = self.runtime.extensions('context-menu-item');
+ for (var extension of extensions) {
+ var itemLocation = extension.descriptor()['location'] || '';
+ if (!itemLocation.startsWith(location + '/'))
+ continue;
+
+ var itemGroup = itemLocation.substr(location.length + 1);
+ if (!itemGroup || itemGroup.includes('/'))
+ continue;
+ var group = groups.get(itemGroup);
+ if (!group) {
+ group = [];
+ groups.set(itemGroup, group);
+ if (groupWeights.indexOf(itemGroup) === -1)
+ groupWeights.splice(4, 0, itemGroup);
+ }
+ group.push(extension);
+ }
+ for (var groupName of groupWeights) {
+ var group = groups.get(groupName);
+ if (!group)
+ continue;
+ group.forEach(appendExtension.bind(null, this));
+ this.appendSeparator();
+ }
+ }
};
/**
- * @constructor
- * @extends {WebInspector.ContextSubMenuItem}
- * @param {!Event} event
- * @param {boolean=} useSoftMenu
- * @param {number=} x
- * @param {number=} y
+ * @unrestricted
*/
-WebInspector.ContextMenu = function(event, useSoftMenu, x, y)
-{
- WebInspector.ContextSubMenuItem.call(this, null, "");
+WebInspector.ContextMenu = class extends WebInspector.ContextSubMenuItem {
+ /**
+ * @param {!Event} event
+ * @param {boolean=} useSoftMenu
+ * @param {number=} x
+ * @param {number=} y
+ */
+ constructor(event, useSoftMenu, x, y) {
+ super(null, '');
this._contextMenu = this;
/** @type {!Array.<!Promise.<!Array.<!WebInspector.ContextMenu.Provider>>>} */
this._pendingPromises = [];
@@ -315,203 +297,186 @@ WebInspector.ContextMenu = function(event, useSoftMenu, x, y)
this._id = 0;
/** @type {!Map<string, !WebInspector.ContextSubMenuItem>} */
this._namedSubMenus = new Map();
-};
+ }
-WebInspector.ContextMenu.initialize = function()
-{
+ static initialize() {
InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.SetUseSoftMenu, setUseSoftMenu);
/**
* @param {!WebInspector.Event} event
*/
- function setUseSoftMenu(event)
- {
- WebInspector.ContextMenu._useSoftMenu = /** @type {boolean} */ (event.data);
+ function setUseSoftMenu(event) {
+ WebInspector.ContextMenu._useSoftMenu = /** @type {boolean} */ (event.data);
}
-};
+ }
-/**
- * @param {!Document} doc
- */
-WebInspector.ContextMenu.installHandler = function(doc)
-{
- doc.body.addEventListener("contextmenu", handler, false);
+ /**
+ * @param {!Document} doc
+ */
+ static installHandler(doc) {
+ doc.body.addEventListener('contextmenu', handler, false);
/**
* @param {!Event} event
*/
- function handler(event)
- {
- var contextMenu = new WebInspector.ContextMenu(event);
- contextMenu.appendApplicableItems(/** @type {!Object} */ (event.deepElementFromPoint()));
- contextMenu.show();
+ function handler(event) {
+ var contextMenu = new WebInspector.ContextMenu(event);
+ contextMenu.appendApplicableItems(/** @type {!Object} */ (event.deepElementFromPoint()));
+ contextMenu.show();
}
-};
-
-WebInspector.ContextMenu.prototype = {
- /**
- * @return {number}
- */
- _nextId: function()
- {
- return this._id++;
- },
+ }
+
+ /**
+ * @return {number}
+ */
+ _nextId() {
+ return this._id++;
+ }
+
+ /**
+ * @param {function()} callback
+ */
+ beforeShow(callback) {
+ this._beforeShow = callback;
+ }
+
+ show() {
+ Promise.all(this._pendingPromises).then(populate.bind(this)).then(this._innerShow.bind(this));
+ WebInspector.ContextMenu._pendingMenu = this;
/**
- * @param {function()} callback
+ * @param {!Array.<!Array.<!WebInspector.ContextMenu.Provider>>} appendCallResults
+ * @this {WebInspector.ContextMenu}
*/
- beforeShow: function(callback)
- {
- this._beforeShow = callback;
- },
-
- show: function()
- {
- Promise.all(this._pendingPromises).then(populate.bind(this)).then(this._innerShow.bind(this));
- WebInspector.ContextMenu._pendingMenu = this;
-
- /**
- * @param {!Array.<!Array.<!WebInspector.ContextMenu.Provider>>} appendCallResults
- * @this {WebInspector.ContextMenu}
- */
- function populate(appendCallResults)
- {
- if (WebInspector.ContextMenu._pendingMenu !== this)
- return;
- delete WebInspector.ContextMenu._pendingMenu;
-
- for (var i = 0; i < appendCallResults.length; ++i) {
- var providers = appendCallResults[i];
- var target = this._pendingTargets[i];
-
- for (var j = 0; j < providers.length; ++j) {
- var provider = /** @type {!WebInspector.ContextMenu.Provider} */ (providers[j]);
- this.appendSeparator();
- provider.appendApplicableItems(this._event, this, target);
- this.appendSeparator();
- }
- }
-
- this._pendingPromises = [];
- this._pendingTargets = [];
- }
-
- this._event.consume(true);
- },
-
- discard: function()
- {
- if (this._softMenu)
- this._softMenu.discard();
- },
-
- _innerShow: function()
- {
- if (typeof this._beforeShow === "function") {
- this._beforeShow();
- delete this._beforeShow;
- }
-
- var menuObject = this._buildDescriptors();
-
- WebInspector._contextMenu = this;
- if (this._useSoftMenu || WebInspector.ContextMenu._useSoftMenu || InspectorFrontendHost.isHostedMode()) {
- this._softMenu = new WebInspector.SoftContextMenu(menuObject, this._itemSelected.bind(this));
- this._softMenu.show(this._event.target.ownerDocument, this._x, this._y);
- } else {
- InspectorFrontendHost.showContextMenuAtPoint(this._x, this._y, menuObject, this._event.target.ownerDocument);
-
- /**
- * @this {WebInspector.ContextMenu}
- */
- function listenToEvents()
- {
- InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.ContextMenuCleared, this._menuCleared, this);
- InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.ContextMenuItemSelected, this._onItemSelected, this);
- }
-
- // showContextMenuAtPoint call above synchronously issues a clear event for previous context menu (if any),
- // so we skip it before subscribing to the clear event.
- setImmediate(listenToEvents.bind(this));
+ function populate(appendCallResults) {
+ if (WebInspector.ContextMenu._pendingMenu !== this)
+ return;
+ delete WebInspector.ContextMenu._pendingMenu;
+
+ for (var i = 0; i < appendCallResults.length; ++i) {
+ var providers = appendCallResults[i];
+ var target = this._pendingTargets[i];
+
+ for (var j = 0; j < providers.length; ++j) {
+ var provider = /** @type {!WebInspector.ContextMenu.Provider} */ (providers[j]);
+ this.appendSeparator();
+ provider.appendApplicableItems(this._event, this, target);
+ this.appendSeparator();
}
- },
+ }
- /**
- * @param {number} id
- * @param {function(?)} handler
- */
- _setHandler: function(id, handler)
- {
- if (handler)
- this._handlers[id] = handler;
- },
-
- /**
- * @return {!Array.<!InspectorFrontendHostAPI.ContextMenuDescriptor>}
- */
- _buildDescriptors: function()
- {
- var result = [];
- for (var i = 0; i < this._items.length; ++i)
- result.push(this._items[i]._buildDescriptor());
- return result;
- },
-
- /**
- * @param {!WebInspector.Event} event
- */
- _onItemSelected: function(event)
- {
- this._itemSelected(/** @type {string} */ (event.data));
- },
+ this._pendingPromises = [];
+ this._pendingTargets = [];
+ }
- /**
- * @param {string} id
- */
- _itemSelected: function(id)
- {
- if (this._handlers[id])
- this._handlers[id].call(this);
- this._menuCleared();
- },
-
- _menuCleared: function()
- {
- InspectorFrontendHost.events.removeEventListener(InspectorFrontendHostAPI.Events.ContextMenuCleared, this._menuCleared, this);
- InspectorFrontendHost.events.removeEventListener(InspectorFrontendHostAPI.Events.ContextMenuItemSelected, this._onItemSelected, this);
- },
+ this._event.consume(true);
+ }
- /**
- * @param {!Object} target
- */
- appendApplicableItems: function(target)
- {
- this._pendingPromises.push(self.runtime.allInstances(WebInspector.ContextMenu.Provider, target));
- this._pendingTargets.push(target);
- },
+ discard() {
+ if (this._softMenu)
+ this._softMenu.discard();
+ }
- /**
- * @param {string} name
- * @return {?WebInspector.ContextSubMenuItem}
- */
- namedSubMenu: function(name)
- {
- return this._namedSubMenus.get(name) || null;
- },
+ _innerShow() {
+ if (typeof this._beforeShow === 'function') {
+ this._beforeShow();
+ delete this._beforeShow;
+ }
- __proto__: WebInspector.ContextSubMenuItem.prototype
+ var menuObject = this._buildDescriptors();
+
+ WebInspector._contextMenu = this;
+ if (this._useSoftMenu || WebInspector.ContextMenu._useSoftMenu || InspectorFrontendHost.isHostedMode()) {
+ this._softMenu = new WebInspector.SoftContextMenu(menuObject, this._itemSelected.bind(this));
+ this._softMenu.show(this._event.target.ownerDocument, this._x, this._y);
+ } else {
+ InspectorFrontendHost.showContextMenuAtPoint(this._x, this._y, menuObject, this._event.target.ownerDocument);
+
+ /**
+ * @this {WebInspector.ContextMenu}
+ */
+ function listenToEvents() {
+ InspectorFrontendHost.events.addEventListener(
+ InspectorFrontendHostAPI.Events.ContextMenuCleared, this._menuCleared, this);
+ InspectorFrontendHost.events.addEventListener(
+ InspectorFrontendHostAPI.Events.ContextMenuItemSelected, this._onItemSelected, this);
+ }
+
+ // showContextMenuAtPoint call above synchronously issues a clear event for previous context menu (if any),
+ // so we skip it before subscribing to the clear event.
+ setImmediate(listenToEvents.bind(this));
+ }
+ }
+
+ /**
+ * @param {number} id
+ * @param {function(?)} handler
+ */
+ _setHandler(id, handler) {
+ if (handler)
+ this._handlers[id] = handler;
+ }
+
+ /**
+ * @return {!Array.<!InspectorFrontendHostAPI.ContextMenuDescriptor>}
+ */
+ _buildDescriptors() {
+ var result = [];
+ for (var i = 0; i < this._items.length; ++i)
+ result.push(this._items[i]._buildDescriptor());
+ return result;
+ }
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _onItemSelected(event) {
+ this._itemSelected(/** @type {string} */ (event.data));
+ }
+
+ /**
+ * @param {string} id
+ */
+ _itemSelected(id) {
+ if (this._handlers[id])
+ this._handlers[id].call(this);
+ this._menuCleared();
+ }
+
+ _menuCleared() {
+ InspectorFrontendHost.events.removeEventListener(
+ InspectorFrontendHostAPI.Events.ContextMenuCleared, this._menuCleared, this);
+ InspectorFrontendHost.events.removeEventListener(
+ InspectorFrontendHostAPI.Events.ContextMenuItemSelected, this._onItemSelected, this);
+ }
+
+ /**
+ * @param {!Object} target
+ */
+ appendApplicableItems(target) {
+ this._pendingPromises.push(self.runtime.allInstances(WebInspector.ContextMenu.Provider, target));
+ this._pendingTargets.push(target);
+ }
+
+ /**
+ * @param {string} name
+ * @return {?WebInspector.ContextSubMenuItem}
+ */
+ namedSubMenu(name) {
+ return this._namedSubMenus.get(name) || null;
+ }
};
+
/**
* @interface
*/
-WebInspector.ContextMenu.Provider = function() {
-};
+WebInspector.ContextMenu.Provider = function() {};
WebInspector.ContextMenu.Provider.prototype = {
- /**
- * @param {!Event} event
- * @param {!WebInspector.ContextMenu} contextMenu
- * @param {!Object} target
- */
- appendApplicableItems: function(event, contextMenu, target) { }
+ /**
+ * @param {!Event} event
+ * @param {!WebInspector.ContextMenu} contextMenu
+ * @param {!Object} target
+ */
+ appendApplicableItems: function(event, contextMenu, target) {}
};

Powered by Google App Engine
This is Rietveld 408576698