OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * @constructor | 6 * @constructor |
7 */ | 7 */ |
8 WebInspector.Context = function() | 8 WebInspector.Context = function() |
9 { | 9 { |
10 this._flavors = new Map(); | 10 this._flavors = new Map(); |
11 this._eventDispatchers = new Map(); | 11 this._eventDispatchers = new Map(); |
12 } | 12 } |
13 | 13 |
14 /** | 14 /** |
15 * @enum {string} | 15 * @enum {string} |
16 */ | 16 */ |
17 WebInspector.Context.Events = { | 17 WebInspector.Context.Events = { |
18 FlavorChanged: "FlavorChanged" | 18 FlavorChanged: "FlavorChanged" |
19 } | 19 } |
20 | 20 |
21 WebInspector.Context.prototype = { | 21 WebInspector.Context.prototype = { |
22 /** | 22 /** |
23 * @param {function(new:T)} flavorType | 23 * @param {function(new:T, ...)} flavorType |
24 * @param {?T} flavorValue | 24 * @param {?T} flavorValue |
25 * @template T | 25 * @template T |
26 */ | 26 */ |
27 setFlavor: function(flavorType, flavorValue) | 27 setFlavor: function(flavorType, flavorValue) |
28 { | 28 { |
29 var value = this._flavors.get(flavorType) || null; | 29 var value = this._flavors.get(flavorType) || null; |
30 if (value === flavorValue) | 30 if (value === flavorValue) |
31 return; | 31 return; |
32 if (flavorValue) | 32 if (flavorValue) |
33 this._flavors.put(flavorType, flavorValue); | 33 this._flavors.put(flavorType, flavorValue); |
34 else | 34 else |
35 this._flavors.remove(flavorType); | 35 this._flavors.remove(flavorType); |
36 | 36 |
37 this._dispatchFlavorChange(flavorType, flavorValue); | 37 this._dispatchFlavorChange(flavorType, flavorValue); |
38 }, | 38 }, |
39 | 39 |
40 /** | 40 /** |
41 * @param {function(new:T)} flavorType | 41 * @param {function(new:T, ...)} flavorType |
42 * @param {?T} flavorValue | 42 * @param {?T} flavorValue |
43 * @template T | 43 * @template T |
44 */ | 44 */ |
45 _dispatchFlavorChange: function(flavorType, flavorValue) | 45 _dispatchFlavorChange: function(flavorType, flavorValue) |
46 { | 46 { |
47 var dispatcher = this._eventDispatchers.get(flavorType); | 47 var dispatcher = this._eventDispatchers.get(flavorType); |
48 if (!dispatcher) | 48 if (!dispatcher) |
49 return; | 49 return; |
50 dispatcher.dispatchEventToListeners(WebInspector.Context.Events.FlavorCh
anged, flavorValue); | 50 dispatcher.dispatchEventToListeners(WebInspector.Context.Events.FlavorCh
anged, flavorValue); |
51 }, | 51 }, |
52 | 52 |
53 /** | 53 /** |
54 * @param {function(new:Object)} flavorType | 54 * @param {function(new:Object, ...)} flavorType |
55 * @param {function(!WebInspector.Event)} listener | 55 * @param {function(!WebInspector.Event)} listener |
56 * @param {!Object=} thisObject | 56 * @param {!Object=} thisObject |
57 */ | 57 */ |
58 addFlavorChangeListener: function(flavorType, listener, thisObject) | 58 addFlavorChangeListener: function(flavorType, listener, thisObject) |
59 { | 59 { |
60 var dispatcher = this._eventDispatchers.get(flavorType); | 60 var dispatcher = this._eventDispatchers.get(flavorType); |
61 if (!dispatcher) { | 61 if (!dispatcher) { |
62 dispatcher = new WebInspector.Object(); | 62 dispatcher = new WebInspector.Object(); |
63 this._eventDispatchers.put(flavorType, dispatcher); | 63 this._eventDispatchers.put(flavorType, dispatcher); |
64 } | 64 } |
65 dispatcher.addEventListener(WebInspector.Context.Events.FlavorChanged, l
istener, thisObject); | 65 dispatcher.addEventListener(WebInspector.Context.Events.FlavorChanged, l
istener, thisObject); |
66 }, | 66 }, |
67 | 67 |
68 /** | 68 /** |
69 * @param {function(new:Object)} flavorType | 69 * @param {function(new:Object, ...)} flavorType |
70 * @param {function(!WebInspector.Event)} listener | 70 * @param {function(!WebInspector.Event)} listener |
71 * @param {!Object=} thisObject | 71 * @param {!Object=} thisObject |
72 */ | 72 */ |
73 removeFlavorChangeListener: function(flavorType, listener, thisObject) | 73 removeFlavorChangeListener: function(flavorType, listener, thisObject) |
74 { | 74 { |
75 var dispatcher = this._eventDispatchers.get(flavorType); | 75 var dispatcher = this._eventDispatchers.get(flavorType); |
76 if (!dispatcher) | 76 if (!dispatcher) |
77 return; | 77 return; |
78 dispatcher.removeEventListener(WebInspector.Context.Events.FlavorChanged
, listener, thisObject); | 78 dispatcher.removeEventListener(WebInspector.Context.Events.FlavorChanged
, listener, thisObject); |
79 if (!dispatcher.hasEventListeners(WebInspector.Context.Events.FlavorChan
ged)) | 79 if (!dispatcher.hasEventListeners(WebInspector.Context.Events.FlavorChan
ged)) |
80 this._eventDispatchers.remove(flavorType); | 80 this._eventDispatchers.remove(flavorType); |
81 }, | 81 }, |
82 | 82 |
83 /** | 83 /** |
84 * @param {function(new:T)} flavorType | 84 * @param {function(new:T, ...)} flavorType |
85 * @return {?T} | 85 * @return {?T} |
86 * @template T | 86 * @template T |
87 */ | 87 */ |
88 flavor: function(flavorType) | 88 flavor: function(flavorType) |
89 { | 89 { |
90 return this._flavors.get(flavorType) || null; | 90 return this._flavors.get(flavorType) || null; |
91 }, | 91 }, |
92 | 92 |
93 /** | 93 /** |
94 * @return {!Array.<function(new:Object)>} | 94 * @return {!Array.<function(new:Object, ...)>} |
95 */ | 95 */ |
96 flavors: function() | 96 flavors: function() |
97 { | 97 { |
98 return this._flavors.keys(); | 98 return this._flavors.keys(); |
| 99 }, |
| 100 |
| 101 /** |
| 102 * @param {!Array.<!WebInspector.ModuleManager.Extension>} extensions |
| 103 * @return {!Set.<!WebInspector.ModuleManager.Extension>} |
| 104 */ |
| 105 applicableExtensions: function(extensions) |
| 106 { |
| 107 var targetExtensionSet = new Set(); |
| 108 |
| 109 var availableFlavors = Set.fromArray(this.flavors()); |
| 110 extensions.forEach(function(extension) { |
| 111 if (WebInspector.ModuleManager.isExtensionApplicableToContextTypes(e
xtension, availableFlavors)) |
| 112 targetExtensionSet.add(extension); |
| 113 }); |
| 114 |
| 115 return targetExtensionSet; |
99 } | 116 } |
100 } | 117 } |
101 | 118 |
102 WebInspector.context = new WebInspector.Context(); | 119 WebInspector.context = new WebInspector.Context(); |
OLD | NEW |