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 // Event management for WebView. | 5 // Event management for WebView. |
6 | 6 |
7 var DeclarativeWebRequestSchema = | 7 var DeclarativeWebRequestSchema = |
8 requireNative('schema_registry').GetSchema('declarativeWebRequest'); | 8 requireNative('schema_registry').GetSchema('declarativeWebRequest'); |
9 var EventBindings = require('event_bindings'); | 9 var EventBindings = require('event_bindings'); |
10 var IdGenerator = requireNative('id_generator'); | 10 var IdGenerator = requireNative('id_generator'); |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 | 175 |
176 DeclarativeWebRequestEvent.prototype = { | 176 DeclarativeWebRequestEvent.prototype = { |
177 __proto__: EventBindings.Event.prototype | 177 __proto__: EventBindings.Event.prototype |
178 }; | 178 }; |
179 | 179 |
180 // Constructor. | 180 // Constructor. |
181 function WebViewEvents(webViewImpl, viewInstanceId) { | 181 function WebViewEvents(webViewImpl, viewInstanceId) { |
182 this.webViewImpl = webViewImpl; | 182 this.webViewImpl = webViewImpl; |
183 this.viewInstanceId = viewInstanceId; | 183 this.viewInstanceId = viewInstanceId; |
184 | 184 |
| 185 // on* Event handlers. |
| 186 this.on = {}; |
| 187 |
185 // Set up the events. | 188 // Set up the events. |
186 this.setupFrameNameChangedEvent(); | 189 this.setupFrameNameChangedEvent(); |
187 this.setupWebRequestEvents(); | 190 this.setupWebRequestEvents(); |
188 this.webViewImpl.setupExperimentalContextMenus(); | 191 this.webViewImpl.setupExperimentalContextMenus(); |
189 var events = this.getEvents(); | 192 var events = this.getEvents(); |
190 for (var eventName in events) { | 193 for (var eventName in events) { |
191 this.setupEvent(eventName, events[eventName]); | 194 this.setupEvent(eventName, events[eventName]); |
192 } | 195 } |
193 } | 196 } |
194 | 197 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 webViewEvent[field] = e[field]; | 286 webViewEvent[field] = e[field]; |
284 } | 287 } |
285 }.bind(this)); | 288 }.bind(this)); |
286 if (info.customHandler) { | 289 if (info.customHandler) { |
287 info.customHandler(this, e, webViewEvent); | 290 info.customHandler(this, e, webViewEvent); |
288 return; | 291 return; |
289 } | 292 } |
290 this.webViewImpl.dispatchEvent(webViewEvent); | 293 this.webViewImpl.dispatchEvent(webViewEvent); |
291 }.bind(this), {instanceId: this.viewInstanceId}); | 294 }.bind(this), {instanceId: this.viewInstanceId}); |
292 | 295 |
293 this.webViewImpl.setupEventProperty(name); | 296 this.setupEventProperty(name); |
| 297 }; |
| 298 |
| 299 WebViewEvents.prototype.setupEventProperty = function(eventName) { |
| 300 var propertyName = 'on' + eventName.toLowerCase(); |
| 301 Object.defineProperty(this.webViewImpl.element, propertyName, { |
| 302 get: function() { |
| 303 return this.on[propertyName]; |
| 304 }.bind(this), |
| 305 set: function(value) { |
| 306 if (this.on[propertyName]) { |
| 307 this.webViewImpl.element.removeEventListener( |
| 308 eventName, this.on[propertyName]); |
| 309 } |
| 310 this.on[propertyName] = value; |
| 311 if (value) |
| 312 this.webViewImpl.element.addEventListener(eventName, value); |
| 313 }.bind(this), |
| 314 enumerable: true |
| 315 }); |
294 }; | 316 }; |
295 | 317 |
296 WebViewEvents.prototype.handleDialogEvent = function(event, webViewEvent) { | 318 WebViewEvents.prototype.handleDialogEvent = function(event, webViewEvent) { |
297 new WebViewActionRequests.Dialog(this.webViewImpl, event, webViewEvent); | 319 new WebViewActionRequests.Dialog(this.webViewImpl, event, webViewEvent); |
298 }; | 320 }; |
299 | 321 |
300 WebViewEvents.prototype.handleLoadAbortEvent = function(event, webViewEvent) { | 322 WebViewEvents.prototype.handleLoadAbortEvent = function(event, webViewEvent) { |
301 var showWarningMessage = function(reason) { | 323 var showWarningMessage = function(reason) { |
302 var WARNING_MSG_LOAD_ABORTED = '<webview>: ' + | 324 var WARNING_MSG_LOAD_ABORTED = '<webview>: ' + |
303 'The load has aborted with reason "%1".'; | 325 'The load has aborted with reason "%1".'; |
304 window.console.warn(WARNING_MSG_LOAD_ABORTED.replace('%1', reason)); | 326 window.console.warn(WARNING_MSG_LOAD_ABORTED.replace('%1', reason)); |
305 }; | 327 }; |
306 if (this.webViewImpl.dispatchEvent(webViewEvent)) { | 328 if (this.webViewImpl.dispatchEvent(webViewEvent)) { |
307 showWarningMessage(event.reason); | 329 showWarningMessage(event.reason); |
308 } | 330 } |
309 }; | 331 }; |
310 | 332 |
311 WebViewEvents.prototype.handleLoadCommitEvent = function(event, webViewEvent) { | 333 WebViewEvents.prototype.handleLoadCommitEvent = function(event, webViewEvent) { |
312 this.webViewImpl.onLoadCommit(event.baseUrlForDataUrl, | 334 this.webViewImpl.onLoadCommit(event.baseUrlForDataUrl, |
313 event.currentEntryIndex, event.entryCount, | 335 event.currentEntryIndex, |
314 event.processId, event.url, | 336 event.entryCount, |
315 event.isTopLevel); | 337 event.processId, |
| 338 event.url, |
| 339 event.isTopLevel); |
316 this.webViewImpl.dispatchEvent(webViewEvent); | 340 this.webViewImpl.dispatchEvent(webViewEvent); |
317 }; | 341 }; |
318 | 342 |
319 WebViewEvents.prototype.handleNewWindowEvent = function(event, webViewEvent) { | 343 WebViewEvents.prototype.handleNewWindowEvent = function(event, webViewEvent) { |
320 new WebViewActionRequests.NewWindow(this.webViewImpl, event, webViewEvent); | 344 new WebViewActionRequests.NewWindow(this.webViewImpl, event, webViewEvent); |
321 }; | 345 }; |
322 | 346 |
323 WebViewEvents.prototype.handlePermissionEvent = function(event, webViewEvent) { | 347 WebViewEvents.prototype.handlePermissionEvent = function(event, webViewEvent) { |
324 new WebViewActionRequests.PermissionRequest( | 348 new WebViewActionRequests.PermissionRequest( |
325 this.webViewImpl, event, webViewEvent); | 349 this.webViewImpl, event, webViewEvent); |
326 }; | 350 }; |
327 | 351 |
328 WebViewEvents.prototype.handleSizeChangedEvent = function( | 352 WebViewEvents.prototype.handleSizeChangedEvent = function( |
329 event, webViewEvent) { | 353 event, webViewEvent) { |
330 this.webViewImpl.onSizeChanged(webViewEvent); | 354 this.webViewImpl.onSizeChanged(webViewEvent); |
331 }; | 355 }; |
332 | 356 |
333 exports.WebViewEvents = WebViewEvents; | 357 exports.WebViewEvents = WebViewEvents; |
334 exports.CreateEvent = CreateEvent; | 358 exports.CreateEvent = CreateEvent; |
OLD | NEW |