Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / devtools / front_end / common / Object.js
1 /*
2  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 /**
27  * @constructor
28  * @implements {WebInspector.EventTarget}
29  */
30 WebInspector.Object = function() {
31 }
32
33 WebInspector.Object.prototype = {
34     /**
35      * @param {string} eventType
36      * @param {function(!WebInspector.Event)} listener
37      * @param {!Object=} thisObject
38      */
39     addEventListener: function(eventType, listener, thisObject)
40     {
41         if (!listener)
42             console.assert(false);
43
44         if (!this._listeners)
45             this._listeners = new Map();
46         if (!this._listeners.has(eventType))
47             this._listeners.set(eventType, []);
48         this._listeners.get(eventType).push({ thisObject: thisObject, listener: listener });
49     },
50
51     /**
52      * @param {string} eventType
53      * @param {function(!WebInspector.Event)} listener
54      * @param {!Object=} thisObject
55      */
56     removeEventListener: function(eventType, listener, thisObject)
57     {
58         console.assert(listener);
59
60         if (!this._listeners || !this._listeners.has(eventType))
61             return;
62         var listeners = this._listeners.get(eventType);
63         for (var i = 0; i < listeners.length; ++i) {
64             if (listeners[i].listener === listener && listeners[i].thisObject === thisObject)
65                 listeners.splice(i--, 1);
66         }
67
68         if (!listeners.length)
69             this._listeners.delete(eventType);
70     },
71
72     removeAllListeners: function()
73     {
74         delete this._listeners;
75     },
76
77     /**
78      * @param {string} eventType
79      * @return {boolean}
80      */
81     hasEventListeners: function(eventType)
82     {
83         if (!this._listeners || !this._listeners.has(eventType))
84             return false;
85         return true;
86     },
87
88     /**
89      * @param {string} eventType
90      * @param {*=} eventData
91      * @return {boolean}
92      */
93     dispatchEventToListeners: function(eventType, eventData)
94     {
95         if (!this._listeners || !this._listeners.has(eventType))
96             return false;
97
98         var event = new WebInspector.Event(this, eventType, eventData);
99         var listeners = this._listeners.get(eventType).slice(0);
100         for (var i = 0; i < listeners.length; ++i) {
101             listeners[i].listener.call(listeners[i].thisObject, event);
102             if (event._stoppedPropagation)
103                 break;
104         }
105
106         return event.defaultPrevented;
107     }
108 }
109
110 /**
111  * @constructor
112  * @param {!WebInspector.EventTarget} target
113  * @param {string} type
114  * @param {*=} data
115  */
116 WebInspector.Event = function(target, type, data)
117 {
118     this.target = target;
119     this.type = type;
120     this.data = data;
121     this.defaultPrevented = false;
122     this._stoppedPropagation = false;
123 }
124
125 WebInspector.Event.prototype = {
126     stopPropagation: function()
127     {
128         this._stoppedPropagation = true;
129     },
130
131     preventDefault: function()
132     {
133         this.defaultPrevented = true;
134     },
135
136     /**
137      * @param {boolean=} preventDefault
138      */
139     consume: function(preventDefault)
140     {
141         this.stopPropagation();
142         if (preventDefault)
143             this.preventDefault();
144     }
145 }
146
147 /**
148  * @interface
149  */
150 WebInspector.EventTarget = function()
151 {
152 }
153
154 WebInspector.EventTarget.prototype = {
155     /**
156      * @param {string} eventType
157      * @param {function(!WebInspector.Event)} listener
158      * @param {!Object=} thisObject
159      */
160     addEventListener: function(eventType, listener, thisObject) { },
161
162     /**
163      * @param {string} eventType
164      * @param {function(!WebInspector.Event)} listener
165      * @param {!Object=} thisObject
166      */
167     removeEventListener: function(eventType, listener, thisObject) { },
168
169     removeAllListeners: function() { },
170
171     /**
172      * @param {string} eventType
173      * @return {boolean}
174      */
175     hasEventListeners: function(eventType) { },
176
177     /**
178      * @param {string} eventType
179      * @param {*=} eventData
180      * @return {boolean}
181      */
182     dispatchEventToListeners: function(eventType, eventData) { },
183 }