Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / Source / devtools / front_end / ui / Context.js
blobfa31c4abd74911bbe536bc7615664adf3ade75cb
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.Context = function()
10 this._flavors = new Map();
11 this._eventDispatchers = new Map();
14 /**
15 * @enum {string}
17 WebInspector.Context.Events = {
18 FlavorChanged: "FlavorChanged"
21 WebInspector.Context.prototype = {
22 /**
23 * @param {function(new:T, ...)} flavorType
24 * @param {?T} flavorValue
25 * @template T
27 setFlavor: function(flavorType, flavorValue)
29 var value = this._flavors.get(flavorType) || null;
30 if (value === flavorValue)
31 return;
32 if (flavorValue)
33 this._flavors.set(flavorType, flavorValue);
34 else
35 this._flavors.remove(flavorType);
37 this._dispatchFlavorChange(flavorType, flavorValue);
40 /**
41 * @param {function(new:T, ...)} flavorType
42 * @param {?T} flavorValue
43 * @template T
45 _dispatchFlavorChange: function(flavorType, flavorValue)
47 var dispatcher = this._eventDispatchers.get(flavorType);
48 if (!dispatcher)
49 return;
50 dispatcher.dispatchEventToListeners(WebInspector.Context.Events.FlavorChanged, flavorValue);
53 /**
54 * @param {function(new:Object, ...)} flavorType
55 * @param {function(!WebInspector.Event)} listener
56 * @param {!Object=} thisObject
58 addFlavorChangeListener: function(flavorType, listener, thisObject)
60 var dispatcher = this._eventDispatchers.get(flavorType);
61 if (!dispatcher) {
62 dispatcher = new WebInspector.Object();
63 this._eventDispatchers.set(flavorType, dispatcher);
65 dispatcher.addEventListener(WebInspector.Context.Events.FlavorChanged, listener, thisObject);
68 /**
69 * @param {function(new:Object, ...)} flavorType
70 * @param {function(!WebInspector.Event)} listener
71 * @param {!Object=} thisObject
73 removeFlavorChangeListener: function(flavorType, listener, thisObject)
75 var dispatcher = this._eventDispatchers.get(flavorType);
76 if (!dispatcher)
77 return;
78 dispatcher.removeEventListener(WebInspector.Context.Events.FlavorChanged, listener, thisObject);
79 if (!dispatcher.hasEventListeners(WebInspector.Context.Events.FlavorChanged))
80 this._eventDispatchers.remove(flavorType);
83 /**
84 * @param {function(new:T, ...)} flavorType
85 * @return {?T}
86 * @template T
88 flavor: function(flavorType)
90 return this._flavors.get(flavorType) || null;
93 /**
94 * @return {!Set.<function(new:Object, ...)>}
96 flavors: function()
98 return new Set(this._flavors.keys());
102 * @param {!Array.<!Runtime.Extension>} extensions
103 * @return {!Set.<!Runtime.Extension>}
105 applicableExtensions: function(extensions)
107 var targetExtensionSet = new Set();
109 var availableFlavors = this.flavors();
110 extensions.forEach(function(extension) {
111 if (self.runtime.isExtensionApplicableToContextTypes(extension, availableFlavors))
112 targetExtensionSet.add(extension);
115 return targetExtensionSet;
119 WebInspector.context = new WebInspector.Context();