Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / renderer / resources / extensions / extension_options_events.js
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.
4
5 var EventBindings = require('event_bindings');
6
7 var CreateEvent = function(name) {
8   var eventOpts = {supportsListeners: true, supportsFilters: true};
9   return new EventBindings.Event(name, undefined, eventOpts);
10 };
11
12 var EXTENSION_OPTIONS_EVENTS = {
13   'load': {
14     evt: CreateEvent('extensionOptionsInternal.onLoad'),
15     fields: []
16   },
17   'sizechanged': {
18     evt: CreateEvent('extensionOptionsInternal.onSizeChanged'),
19     customHandler: function(handler, event, webViewEvent) {
20       handler.handleSizeChangedEvent(event, webViewEvent);
21     },
22     fields:['width', 'height']
23   }
24 }
25
26 /**
27  * @constructor
28  */
29 function ExtensionOptionsEvents(extensionOptionsInternal, viewInstanceId) {
30   this.extensionOptionsInternal = extensionOptionsInternal;
31   this.viewInstanceId = viewInstanceId;
32   this.setup();
33 }
34
35 // Sets up events.
36 ExtensionOptionsEvents.prototype.setup = function() {
37   for (var eventName in EXTENSION_OPTIONS_EVENTS) {
38     this.setupEvent(eventName, EXTENSION_OPTIONS_EVENTS[eventName]);
39   }
40 };
41
42 ExtensionOptionsEvents.prototype.setupEvent = function(name, info) {
43   var self = this;
44   info.evt.addListener(function(e) {
45     var details = {bubbles:true};
46     if (info.cancelable)
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];
52       }
53     });
54     if (info.customHandler) {
55       info.customHandler(self, e, extensionOptionsEvent);
56       return;
57     }
58     self.extensionOptionsInternal.dispatchEvent(extensionOptionsEvent);
59   }, {instanceId: self.viewInstanceId});
60
61   this.extensionOptionsInternal.setupEventProperty(name);
62 };
63
64 ExtensionOptionsEvents.prototype.handleSizeChangedEvent = function(
65     event, extensionOptionsEvent) {
66   this.extensionOptionsInternal.onSizeChanged(extensionOptionsEvent.width,
67                                               extensionOptionsEvent.height);
68   this.extensionOptionsInternal.dispatchEvent(extensionOptionsEvent);
69 }
70
71 exports.ExtensionOptionsEvents = ExtensionOptionsEvents;
72 exports.CreateEvent = CreateEvent;