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 // This module implements chrome-specific <webview> API. | 5 // This module implements chrome-specific <webview> API. |
6 // See web_view_api_methods.js for details. | 6 // See web_view_api_methods.js for details. |
7 | 7 |
8 var ChromeWebView = require('chromeWebViewInternal').ChromeWebView; | 8 var ChromeWebView = require('chromeWebViewInternal').ChromeWebView; |
9 var ChromeWebViewSchema = | 9 var ChromeWebViewSchema = |
10 requireNative('schema_registry').GetSchema('chromeWebViewInternal'); | 10 requireNative('schema_registry').GetSchema('chromeWebViewInternal'); |
11 var CreateEvent = require('guestViewEvents').CreateEvent; | 11 var CreateEvent = require('guestViewEvents').CreateEvent; |
12 var EventBindings = require('event_bindings'); | 12 var EventBindings = require('event_bindings'); |
13 var GuestViewInternalNatives = requireNative('guest_view_internal'); | 13 var GuestViewInternalNatives = requireNative('guest_view_internal'); |
14 var idGeneratorNatives = requireNative('id_generator'); | 14 var idGeneratorNatives = requireNative('id_generator'); |
15 var Utils = require('utils'); | 15 var utils = require('utils'); |
16 var WebViewImpl = require('webView').WebViewImpl; | 16 var WebViewImpl = require('webView').WebViewImpl; |
17 | 17 |
18 // This is the only "webViewInternal.onClicked" named event for this renderer. | 18 // This is the only "webViewInternal.onClicked" named event for this renderer. |
19 // | 19 // |
20 // Since we need an event per <webview>, we define events with suffix | 20 // Since we need an event per <webview>, we define events with suffix |
21 // (subEventName) in each of the <webview>. Behind the scenes, this event is | 21 // (subEventName) in each of the <webview>. Behind the scenes, this event is |
22 // registered as a ContextMenusEvent, with filter set to the webview's | 22 // registered as a ContextMenusEvent, with filter set to the webview's |
23 // |viewInstanceId|. Any time a ContextMenusEvent is dispatched, we re-dispatch | 23 // |viewInstanceId|. Any time a ContextMenusEvent is dispatched, we re-dispatch |
24 // it to the subEvent's listeners. This way | 24 // it to the subEvent's listeners. This way |
25 // <webview>.contextMenus.onClicked behave as a regular chrome Event type. | 25 // <webview>.contextMenus.onClicked behave as a regular chrome Event type. |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 WebViewContextMenusImpl.prototype.removeAll = function() { | 115 WebViewContextMenusImpl.prototype.removeAll = function() { |
116 var args = $Array.concat([this.viewInstanceId_], $Array.slice(arguments)); | 116 var args = $Array.concat([this.viewInstanceId_], $Array.slice(arguments)); |
117 return $Function.apply(ChromeWebView.contextMenusRemoveAll, null, args); | 117 return $Function.apply(ChromeWebView.contextMenusRemoveAll, null, args); |
118 }; | 118 }; |
119 | 119 |
120 WebViewContextMenusImpl.prototype.update = function() { | 120 WebViewContextMenusImpl.prototype.update = function() { |
121 var args = $Array.concat([this.viewInstanceId_], $Array.slice(arguments)); | 121 var args = $Array.concat([this.viewInstanceId_], $Array.slice(arguments)); |
122 return $Function.apply(ChromeWebView.contextMenusUpdate, null, args); | 122 return $Function.apply(ChromeWebView.contextMenusUpdate, null, args); |
123 }; | 123 }; |
124 | 124 |
125 var WebViewContextMenus = Utils.expose( | 125 function WebViewContextMenus() { |
126 'WebViewContextMenus', WebViewContextMenusImpl, | 126 privates(WebViewContextMenus).constructPrivate(this, arguments); |
127 { functions: ['create', 'remove', 'removeAll', 'update'] }); | 127 } |
| 128 utils.expose(WebViewContextMenus, WebViewContextMenusImpl, { |
| 129 functions: [ |
| 130 'create', |
| 131 'remove', |
| 132 'removeAll', |
| 133 'update', |
| 134 ], |
| 135 }); |
128 | 136 |
129 // ----------------------------------------------------------------------------- | 137 // ----------------------------------------------------------------------------- |
130 | 138 |
131 WebViewImpl.prototype.maybeSetupContextMenus = function() { | 139 WebViewImpl.prototype.maybeSetupContextMenus = function() { |
132 if (!this.contextMenusOnContextMenuEvent_) { | 140 if (!this.contextMenusOnContextMenuEvent_) { |
133 var eventName = 'chromeWebViewInternal.onContextMenuShow'; | 141 var eventName = 'chromeWebViewInternal.onContextMenuShow'; |
134 var eventSchema = | 142 var eventSchema = |
135 Utils.lookup(ChromeWebViewSchema.events, 'name', 'onShow'); | 143 utils.lookup(ChromeWebViewSchema.events, 'name', 'onShow'); |
136 var eventOptions = {supportsListeners: true}; | 144 var eventOptions = {supportsListeners: true}; |
137 this.contextMenusOnContextMenuEvent_ = new ContextMenusOnContextMenuEvent( | 145 this.contextMenusOnContextMenuEvent_ = new ContextMenusOnContextMenuEvent( |
138 this.viewInstanceId, eventName, eventSchema, eventOptions); | 146 this.viewInstanceId, eventName, eventSchema, eventOptions); |
139 } | 147 } |
140 | 148 |
141 var createContextMenus = function() { | 149 var createContextMenus = function() { |
142 return this.weakWrapper(function() { | 150 return this.weakWrapper(function() { |
143 if (this.contextMenus_) { | 151 if (this.contextMenus_) { |
144 return this.contextMenus_; | 152 return this.contextMenus_; |
145 } | 153 } |
146 | 154 |
147 this.contextMenus_ = new WebViewContextMenus(this.viewInstanceId); | 155 this.contextMenus_ = new WebViewContextMenus(this.viewInstanceId); |
148 | 156 |
149 // Define 'onClicked' event property on |this.contextMenus_|. | 157 // Define 'onClicked' event property on |this.contextMenus_|. |
150 var getOnClickedEvent = function() { | 158 var getOnClickedEvent = function() { |
151 return this.weakWrapper(function() { | 159 return this.weakWrapper(function() { |
152 if (!this.contextMenusOnClickedEvent_) { | 160 if (!this.contextMenusOnClickedEvent_) { |
153 var eventName = 'chromeWebViewInternal.onClicked'; | 161 var eventName = 'chromeWebViewInternal.onClicked'; |
154 var eventSchema = | 162 var eventSchema = |
155 Utils.lookup(ChromeWebViewSchema.events, 'name', 'onClicked'); | 163 utils.lookup(ChromeWebViewSchema.events, 'name', 'onClicked'); |
156 var eventOptions = {supportsListeners: true}; | 164 var eventOptions = {supportsListeners: true}; |
157 var onClickedEvent = new ContextMenusOnClickedEvent( | 165 var onClickedEvent = new ContextMenusOnClickedEvent( |
158 this.viewInstanceId, eventName, eventSchema, eventOptions); | 166 this.viewInstanceId, eventName, eventSchema, eventOptions); |
159 this.contextMenusOnClickedEvent_ = onClickedEvent; | 167 this.contextMenusOnClickedEvent_ = onClickedEvent; |
160 return onClickedEvent; | 168 return onClickedEvent; |
161 } | 169 } |
162 return this.contextMenusOnClickedEvent_; | 170 return this.contextMenusOnClickedEvent_; |
163 }); | 171 }); |
164 }.bind(this); | 172 }.bind(this); |
165 $Object.defineProperty( | 173 $Object.defineProperty( |
(...skipping 21 matching lines...) Expand all Loading... |
187 'contextMenus', | 195 'contextMenus', |
188 { | 196 { |
189 get: createContextMenus(), | 197 get: createContextMenus(), |
190 enumerable: true | 198 enumerable: true |
191 }); | 199 }); |
192 }; | 200 }; |
193 | 201 |
194 function GetUniqueSubEventName(eventName) { | 202 function GetUniqueSubEventName(eventName) { |
195 return eventName + '/' + idGeneratorNatives.GetNextId(); | 203 return eventName + '/' + idGeneratorNatives.GetNextId(); |
196 } | 204 } |
OLD | NEW |