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 var EventBindings = require('event_bindings');
7 var CreateEvent = function(name) {
8 var eventOpts = {supportsListeners: true, supportsFilters: true};
9 return new EventBindings.Event(name, undefined, eventOpts);
12 var EXTENSION_OPTIONS_EVENTS = {
14 evt: CreateEvent('extensionOptionsInternal.onLoad'),
18 evt: CreateEvent('extensionOptionsInternal.onSizeChanged'),
19 customHandler: function(handler, event, webViewEvent) {
20 handler.handleSizeChangedEvent(event, webViewEvent);
22 fields:['width', 'height']
29 function ExtensionOptionsEvents(extensionOptionsInternal, viewInstanceId) {
30 this.extensionOptionsInternal = extensionOptionsInternal;
31 this.viewInstanceId = viewInstanceId;
36 ExtensionOptionsEvents.prototype.setup = function() {
37 for (var eventName in EXTENSION_OPTIONS_EVENTS) {
38 this.setupEvent(eventName, EXTENSION_OPTIONS_EVENTS[eventName]);
42 ExtensionOptionsEvents.prototype.setupEvent = function(name, info) {
44 info.evt.addListener(function(e) {
45 var details = {bubbles:true};
47 details.cancelable = true;
48 var extensionOptionsEvent = new Event(name, details);
49 $Array.forEach(info.fields, function(field) {
50 if (e.hasOwnProperty(field)) {
51 extensionOptionsEvent[field] = e[field];
54 if (info.customHandler) {
55 info.customHandler(self, e, extensionOptionsEvent);
58 self.extensionOptionsInternal.dispatchEvent(extensionOptionsEvent);
59 }, {instanceId: self.viewInstanceId});
61 this.extensionOptionsInternal.setupEventProperty(name);
64 ExtensionOptionsEvents.prototype.handleSizeChangedEvent = function(
65 event, extensionOptionsEvent) {
66 this.extensionOptionsInternal.onSizeChanged(extensionOptionsEvent.width,
67 extensionOptionsEvent.height);
68 this.extensionOptionsInternal.dispatchEvent(extensionOptionsEvent);
71 exports.ExtensionOptionsEvents = ExtensionOptionsEvents;
72 exports.CreateEvent = CreateEvent;