Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / Source / devtools / front_end / ui / ActionRegistry.js
blob712e4b9f3f063e14ea7b7ca55ccab973ef8f9eb5
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 /**
6 * @constructor
7 */
8 WebInspector.ActionRegistry = function()
10 /** @type {!Map.<string, !Runtime.Extension>} */
11 this._actionsById = new Map();
12 this._registerActions();
15 WebInspector.ActionRegistry.prototype = {
16 _registerActions: function()
18 self.runtime.extensions(WebInspector.ActionDelegate).forEach(registerExtension, this);
20 /**
21 * @param {!Runtime.Extension} extension
22 * @this {WebInspector.ActionRegistry}
24 function registerExtension(extension)
26 var actionId = extension.descriptor()["actionId"];
27 console.assert(actionId);
28 console.assert(!this._actionsById.get(actionId));
29 this._actionsById.set(actionId, extension);
33 /**
34 * @param {!Array.<string>} actionIds
35 * @param {!WebInspector.Context} context
36 * @return {!Array.<string>}
38 applicableActions: function(actionIds, context)
40 var extensions = [];
41 actionIds.forEach(function(actionId) {
42 var extension = this._actionsById.get(actionId);
43 if (extension)
44 extensions.push(extension);
45 }, this);
46 return context.applicableExtensions(extensions).valuesArray().map(function(extension) {
47 return extension.descriptor()["actionId"];
48 });
51 /**
52 * @param {string} actionId
53 * @return {!Promise.<undefined>}
55 execute: function(actionId)
57 var extension = this._actionsById.get(actionId);
58 console.assert(extension, "No action found for actionId '" + actionId + "'");
59 return extension.instancePromise().then(handleAction);
61 /**
62 * @param {!Object} actionDelegate
64 function handleAction(actionDelegate)
66 /** @type {!WebInspector.ActionDelegate} */(actionDelegate).handleAction(WebInspector.context, actionId);
70 /**
71 * @param {string} actionId
72 * @return {string}
74 actionTitle: function(actionId)
76 var extension = this._actionsById.get(actionId);
77 console.assert(extension, "No action found for actionId '" + actionId + "'");
78 return extension.descriptor()["title"] || "";
81 /**
82 * @param {string} actionId
83 * @return {string}
85 actionIcon: function(actionId)
87 var extension = this._actionsById.get(actionId);
88 console.assert(extension, "No action found for actionId '" + actionId + "'");
89 return extension.descriptor()["iconClass"] || "";
93 /**
94 * @interface
96 WebInspector.ActionDelegate = function()
100 WebInspector.ActionDelegate.prototype = {
102 * @param {!WebInspector.Context} context
103 * @param {string} actionId
105 handleAction: function(context, actionId) {}
108 /** @type {!WebInspector.ActionRegistry} */
109 WebInspector.actionRegistry;