| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 // Event management for GuestViewContainers. | 5 // Event management for GuestViewContainers. |
| 6 | 6 |
| 7 var EventBindings = require('event_bindings'); | 7 var EventBindings = require('event_bindings'); |
| 8 | 8 |
| 9 var CreateEvent = function(name) { | 9 var CreateEvent = function(name) { |
| 10 var eventOpts = {supportsListeners: true, supportsFilters: true}; | 10 var eventOpts = {supportsListeners: true, supportsFilters: true}; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 // meaningful. | 34 // meaningful. |
| 35 // |evt| specifies a descriptor object for the extension event. An event | 35 // |evt| specifies a descriptor object for the extension event. An event |
| 36 // listener will be attached to this descriptor. | 36 // listener will be attached to this descriptor. |
| 37 // |fields| (default: none) specifies the public-facing fields in the DOM event | 37 // |fields| (default: none) specifies the public-facing fields in the DOM event |
| 38 // that are accessible to developers. | 38 // that are accessible to developers. |
| 39 // |handler| specifies the name of a handler function to be called each time | 39 // |handler| specifies the name of a handler function to be called each time |
| 40 // that extension event is caught by its event listener. The DOM event | 40 // that extension event is caught by its event listener. The DOM event |
| 41 // should be dispatched within this handler function (if desired). With no | 41 // should be dispatched within this handler function (if desired). With no |
| 42 // handler function, the DOM event will be dispatched by default each time | 42 // handler function, the DOM event will be dispatched by default each time |
| 43 // the extension event is caught. | 43 // the extension event is caught. |
| 44 // |internal| (default: false) specifies that the event will not be dispatched |
| 45 // as a DOM event, and will also not appear as an on* property on the view’s |
| 46 // element. A |handler| should be specified for all internal events, and |
| 47 // |fields| and |cancelable| should be left unspecified (as they are only |
| 48 // meaningful for DOM events). |
| 44 GuestViewEvents.EVENTS = {}; | 49 GuestViewEvents.EVENTS = {}; |
| 45 | 50 |
| 46 // Sets up the handling of events. | 51 // Sets up the handling of events. |
| 47 GuestViewEvents.prototype.setupEvents = function() { | 52 GuestViewEvents.prototype.setupEvents = function() { |
| 48 for (var eventName in GuestViewEvents.EVENTS) { | 53 for (var eventName in GuestViewEvents.EVENTS) { |
| 49 this.setupEvent(eventName, GuestViewEvents.EVENTS[eventName]); | 54 this.setupEvent(eventName, GuestViewEvents.EVENTS[eventName]); |
| 50 } | 55 } |
| 51 | 56 |
| 52 var events = this.getEvents(); | 57 var events = this.getEvents(); |
| 53 for (var eventName in events) { | 58 for (var eventName in events) { |
| 54 this.setupEvent(eventName, events[eventName]); | 59 this.setupEvent(eventName, events[eventName]); |
| 55 } | 60 } |
| 56 }; | 61 }; |
| 57 | 62 |
| 58 // Sets up the handling of the |eventName| event. | 63 // Sets up the handling of the |eventName| event. |
| 59 GuestViewEvents.prototype.setupEvent = function(eventName, eventInfo) { | 64 GuestViewEvents.prototype.setupEvent = function(eventName, eventInfo) { |
| 60 this.setupEventProperty(eventName); | 65 if (!eventInfo.internal) { |
| 66 this.setupEventProperty(eventName); |
| 67 } |
| 61 | 68 |
| 62 var listenerOpts = { instanceId: this.view.viewInstanceId }; | 69 var listenerOpts = { instanceId: this.view.viewInstanceId }; |
| 63 if (eventInfo.handler) { | 70 if (eventInfo.handler) { |
| 64 eventInfo.evt.addListener(function(e) { | 71 eventInfo.evt.addListener(function(e) { |
| 65 this[eventInfo.handler](e, eventName); | 72 this[eventInfo.handler](e, eventName); |
| 66 }.bind(this), listenerOpts); | 73 }.bind(this), listenerOpts); |
| 67 return; | 74 return; |
| 68 } | 75 } |
| 69 | 76 |
| 77 // Internal events are not dispatched as DOM events. |
| 78 if (eventInfo.internal) { |
| 79 return; |
| 80 } |
| 81 |
| 70 eventInfo.evt.addListener(function(e) { | 82 eventInfo.evt.addListener(function(e) { |
| 71 var domEvent = this.makeDomEvent(e, eventName); | 83 var domEvent = this.makeDomEvent(e, eventName); |
| 72 this.view.dispatchEvent(domEvent); | 84 this.view.dispatchEvent(domEvent); |
| 73 }.bind(this), listenerOpts); | 85 }.bind(this), listenerOpts); |
| 74 }; | 86 }; |
| 75 | 87 |
| 76 // Constructs a DOM event based on the info for the |eventName| event provided | 88 // Constructs a DOM event based on the info for the |eventName| event provided |
| 77 // in either |GuestViewEvents.EVENTS| or getEvents(). | 89 // in either |GuestViewEvents.EVENTS| or getEvents(). |
| 78 GuestViewEvents.prototype.makeDomEvent = function(event, eventName) { | 90 GuestViewEvents.prototype.makeDomEvent = function(event, eventName) { |
| 79 var eventInfo = | 91 var eventInfo = |
| 80 GuestViewEvents.EVENTS[eventName] || this.getEvents()[eventName]; | 92 GuestViewEvents.EVENTS[eventName] || this.getEvents()[eventName]; |
| 81 | 93 |
| 94 // Internal events are not dispatched as DOM events. |
| 95 if (eventInfo.internal) { |
| 96 return null; |
| 97 } |
| 98 |
| 82 var details = { bubbles: true }; | 99 var details = { bubbles: true }; |
| 83 if (eventInfo.cancelable) { | 100 if (eventInfo.cancelable) { |
| 84 details.cancelable = true; | 101 details.cancelable = true; |
| 85 } | 102 } |
| 86 var domEvent = new Event(eventName, details); | 103 var domEvent = new Event(eventName, details); |
| 87 if (eventInfo.fields) { | 104 if (eventInfo.fields) { |
| 88 $Array.forEach(eventInfo.fields, function(field) { | 105 $Array.forEach(eventInfo.fields, function(field) { |
| 89 if (event[field] !== undefined) { | 106 if (event[field] !== undefined) { |
| 90 domEvent[field] = event[field]; | 107 domEvent[field] = event[field]; |
| 91 } | 108 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 115 enumerable: true | 132 enumerable: true |
| 116 }); | 133 }); |
| 117 }; | 134 }; |
| 118 | 135 |
| 119 // Implemented by the derived event manager, if one exists. | 136 // Implemented by the derived event manager, if one exists. |
| 120 GuestViewEvents.prototype.getEvents = function() { return {}; }; | 137 GuestViewEvents.prototype.getEvents = function() { return {}; }; |
| 121 | 138 |
| 122 // Exports. | 139 // Exports. |
| 123 exports.GuestViewEvents = GuestViewEvents; | 140 exports.GuestViewEvents = GuestViewEvents; |
| 124 exports.CreateEvent = CreateEvent; | 141 exports.CreateEvent = CreateEvent; |
| OLD | NEW |