Chromium Code Reviews| 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 the shared functionality for different guestview | 5 // This module implements the shared functionality for different guestview |
| 6 // containers, such as web_view, app_view, etc. | 6 // containers, such as web_view, app_view, etc. |
| 7 | 7 |
| 8 var DocumentNatives = requireNative('document_natives'); | 8 var DocumentNatives = requireNative('document_natives'); |
| 9 var EventBindings = require('event_bindings'); | |
| 9 var GuestView = require('guestView').GuestView; | 10 var GuestView = require('guestView').GuestView; |
| 11 var GuestViewInternalNatives = requireNative('guest_view_internal'); | |
| 10 var IdGenerator = requireNative('id_generator'); | 12 var IdGenerator = requireNative('id_generator'); |
| 11 | 13 |
| 12 function GuestViewContainer(element, viewType) { | 14 function GuestViewContainer(element, viewType) { |
| 13 privates(element).internal = this; | 15 privates(element).internal = this; |
| 14 this.element = element; | 16 this.element = element; |
| 15 this.elementAttached = false; | 17 this.elementAttached = false; |
| 16 this.guest = new GuestView(viewType); | 18 this.guest = new GuestView(viewType); |
| 17 this.viewInstanceId = IdGenerator.GetNextId(); | 19 this.viewInstanceId = IdGenerator.GetNextId(); |
| 18 this.viewType = viewType; | 20 this.viewType = viewType; |
| 19 | 21 |
| 20 privates(this).browserPluginElement = this.createBrowserPluginElement(); | 22 privates(this).browserPluginElement = this.createBrowserPluginElement(); |
| 21 this.setupFocusPropagation(); | 23 this.setupFocusPropagation(); |
| 22 | 24 |
| 23 var shadowRoot = this.element.createShadowRoot(); | 25 var shadowRoot = this.element.createShadowRoot(); |
| 24 shadowRoot.appendChild(privates(this).browserPluginElement); | 26 shadowRoot.appendChild(privates(this).browserPluginElement); |
| 27 | |
| 28 this.setupResizeEvents(); | |
| 25 } | 29 } |
| 26 | 30 |
| 27 // Forward public API methods from |proto| to their internal implementations. | 31 // Forward public API methods from |proto| to their internal implementations. |
| 28 GuestViewContainer.forwardApiMethods = function(proto, apiMethods) { | 32 GuestViewContainer.forwardApiMethods = function(proto, apiMethods) { |
| 29 var createProtoHandler = function(m) { | 33 var createProtoHandler = function(m) { |
| 30 return function(var_args) { | 34 return function(var_args) { |
| 31 var internal = privates(this).internal; | 35 var internal = privates(this).internal; |
| 32 return $Function.apply(internal[m], internal, arguments); | 36 return $Function.apply(internal[m], internal, arguments); |
| 33 }; | 37 }; |
| 34 }; | 38 }; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 74 this.element.addEventListener('focus', function(e) { | 78 this.element.addEventListener('focus', function(e) { |
| 75 // Focus the BrowserPlugin when the GuestViewContainer takes focus. | 79 // Focus the BrowserPlugin when the GuestViewContainer takes focus. |
| 76 privates(this).browserPluginElement.focus(); | 80 privates(this).browserPluginElement.focus(); |
| 77 }.bind(this)); | 81 }.bind(this)); |
| 78 this.element.addEventListener('blur', function(e) { | 82 this.element.addEventListener('blur', function(e) { |
| 79 // Blur the BrowserPlugin when the GuestViewContainer loses focus. | 83 // Blur the BrowserPlugin when the GuestViewContainer loses focus. |
| 80 privates(this).browserPluginElement.blur(); | 84 privates(this).browserPluginElement.blur(); |
| 81 }.bind(this)); | 85 }.bind(this)); |
| 82 }; | 86 }; |
| 83 | 87 |
| 88 GuestViewContainer.prototype.setupResizeEvents = function() { | |
| 89 // Track when the guest resizes using the onResize event. | |
| 90 var CreateEvent = function(name) { | |
| 91 var eventOpts = {supportsListeners: true, supportsFilters: true}; | |
| 92 return new EventBindings.Event(name, undefined, eventOpts); | |
| 93 }; | |
| 94 var resizeEvent = CreateEvent('guestViewInternal.onResize'); | |
|
Fady Samuel
2015/01/15 21:40:12
Remove this for now? This doesn't seem to do anyth
paulmeyer
2015/01/19 23:45:35
Moved to guest_view.js, as discussed offline.
| |
| 95 resizeEvent.addListener(function(e) { | |
| 96 this.onGuestResize(e.oldWidth, e.oldHeight, e.newWidth, e.newHeight); | |
| 97 }.bind(this), {instanceId: this.viewInstanceId}); | |
| 98 | |
| 99 // Track when the element resizes using the element resize callback. | |
| 100 GuestViewInternalNatives.RegisterElementResizeCallback( | |
| 101 this.internalInstanceId, this.onElementResize.bind(this)); | |
| 102 }; | |
| 103 | |
| 84 GuestViewContainer.prototype.attachWindow = function() { | 104 GuestViewContainer.prototype.attachWindow = function() { |
| 85 if (!this.internalInstanceId) { | 105 if (!this.internalInstanceId) { |
| 86 return true; | 106 return true; |
| 87 } | 107 } |
| 88 | 108 |
| 89 this.guest.attach(this.internalInstanceId, | 109 this.guest.attach(this.internalInstanceId, |
| 90 this.viewInstanceId, | 110 this.viewInstanceId, |
| 91 this.buildAttachParams()); | 111 this.buildAttachParams()); |
| 92 return true; | 112 return true; |
| 93 }; | 113 }; |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 107 } | 127 } |
| 108 }; | 128 }; |
| 109 | 129 |
| 110 // Implemented by the specific view type, if needed. | 130 // Implemented by the specific view type, if needed. |
| 111 GuestViewContainer.prototype.buildAttachParams = function() { return {}; }; | 131 GuestViewContainer.prototype.buildAttachParams = function() { return {}; }; |
| 112 GuestViewContainer.prototype.handleAttributeMutation = function() {}; | 132 GuestViewContainer.prototype.handleAttributeMutation = function() {}; |
| 113 GuestViewContainer.prototype.onElementAttached = function() {}; | 133 GuestViewContainer.prototype.onElementAttached = function() {}; |
| 114 GuestViewContainer.prototype.onElementDetached = function() { | 134 GuestViewContainer.prototype.onElementDetached = function() { |
| 115 this.guest.destroy(); | 135 this.guest.destroy(); |
| 116 }; | 136 }; |
| 137 GuestViewContainer.prototype.onElementResize = function(oldWidth, oldHeight, | |
| 138 newWidth, newHeight) {}; | |
| 139 GuestViewContainer.prototype.onGuestResize = function(oldWidth, oldHeight, | |
| 140 newWidth, newHeight) {}; | |
| 117 | 141 |
| 118 // Registers the browser plugin <object> custom element. |viewType| is the | 142 // Registers the browser plugin <object> custom element. |viewType| is the |
| 119 // name of the specific guestview container (e.g. 'webview'). | 143 // name of the specific guestview container (e.g. 'webview'). |
| 120 function registerBrowserPluginElement(viewType) { | 144 function registerBrowserPluginElement(viewType) { |
| 121 var proto = Object.create(HTMLObjectElement.prototype); | 145 var proto = Object.create(HTMLObjectElement.prototype); |
| 122 | 146 |
| 123 proto.createdCallback = function() { | 147 proto.createdCallback = function() { |
| 124 this.setAttribute('type', 'application/browser-plugin'); | 148 this.setAttribute('type', 'application/browser-plugin'); |
| 125 this.setAttribute('id', 'browser-plugin-' + IdGenerator.GetNextId()); | 149 this.setAttribute('id', 'browser-plugin-' + IdGenerator.GetNextId()); |
| 126 this.style.width = '100%'; | 150 this.style.width = '100%'; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 200 // Delete the callbacks so developers cannot call them and produce unexpected | 224 // Delete the callbacks so developers cannot call them and produce unexpected |
| 201 // behavior. | 225 // behavior. |
| 202 delete proto.createdCallback; | 226 delete proto.createdCallback; |
| 203 delete proto.attachedCallback; | 227 delete proto.attachedCallback; |
| 204 delete proto.detachedCallback; | 228 delete proto.detachedCallback; |
| 205 delete proto.attributeChangedCallback; | 229 delete proto.attributeChangedCallback; |
| 206 } | 230 } |
| 207 | 231 |
| 208 // Exports. | 232 // Exports. |
| 209 exports.GuestViewContainer = GuestViewContainer; | 233 exports.GuestViewContainer = GuestViewContainer; |
| OLD | NEW |