Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: extensions/renderer/resources/guest_view/guest_view_container.js

Issue 1026703004: Refactored extensionOptions to use the new guestViewAttributes module. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comment. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 GuestView = require('guestView').GuestView; 9 var GuestView = require('guestView').GuestView;
10 var GuestViewInternalNatives = requireNative('guest_view_internal'); 10 var GuestViewInternalNatives = requireNative('guest_view_internal');
11 var IdGenerator = requireNative('id_generator'); 11 var IdGenerator = requireNative('id_generator');
12 12
13 function GuestViewContainer(element, viewType) { 13 function GuestViewContainer(element, viewType) {
14 privates(element).internal = this; 14 privates(element).internal = this;
15 this.attributes = {};
15 this.element = element; 16 this.element = element;
16 this.elementAttached = false; 17 this.elementAttached = false;
17 this.viewInstanceId = IdGenerator.GetNextId(); 18 this.viewInstanceId = IdGenerator.GetNextId();
18 this.viewType = viewType; 19 this.viewType = viewType;
19 20
20 this.setupGuestProperty(); 21 this.setupGuestProperty();
21 this.guest = new GuestView(viewType); 22 this.guest = new GuestView(viewType);
23 this.setupAttributes();
22 24
23 privates(this).browserPluginElement = this.createBrowserPluginElement(); 25 privates(this).browserPluginElement = this.createBrowserPluginElement();
24 this.setupFocusPropagation(); 26 this.setupFocusPropagation();
25
26 var shadowRoot = this.element.createShadowRoot(); 27 var shadowRoot = this.element.createShadowRoot();
27 shadowRoot.appendChild(privates(this).browserPluginElement); 28 shadowRoot.appendChild(privates(this).browserPluginElement);
28 } 29 }
29 30
30 // Forward public API methods from |proto| to their internal implementations. 31 // Forward public API methods from |proto| to their internal implementations.
31 GuestViewContainer.forwardApiMethods = function(proto, apiMethods) { 32 GuestViewContainer.forwardApiMethods = function(proto, apiMethods) {
32 var createProtoHandler = function(m) { 33 var createProtoHandler = function(m) {
33 return function(var_args) { 34 return function(var_args) {
34 var internal = privates(this).internal; 35 var internal = privates(this).internal;
35 return $Function.apply(internal[m], internal, arguments); 36 return $Function.apply(internal[m], internal, arguments);
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 params['elementHeight'] = parseInt(elementRect.height); 162 params['elementHeight'] = parseInt(elementRect.height);
162 return params; 163 return params;
163 }; 164 };
164 165
165 GuestViewContainer.prototype.dispatchEvent = function(event) { 166 GuestViewContainer.prototype.dispatchEvent = function(event) {
166 return this.element.dispatchEvent(event); 167 return this.element.dispatchEvent(event);
167 } 168 }
168 169
169 // Implemented by the specific view type, if needed. 170 // Implemented by the specific view type, if needed.
170 GuestViewContainer.prototype.buildContainerParams = function() { return {}; }; 171 GuestViewContainer.prototype.buildContainerParams = function() { return {}; };
171 // TODO(paulmeyer): remove once all view types use attribute objects.
172 GuestViewContainer.prototype.handleAttributeMutation = function(
173 attributeName, oldValue, newValue) {};
174 GuestViewContainer.prototype.onElementAttached = function() {}; 172 GuestViewContainer.prototype.onElementAttached = function() {};
175 GuestViewContainer.prototype.onElementDetached = function() {}; 173 GuestViewContainer.prototype.onElementDetached = function() {};
174 GuestViewContainer.prototype.setupAttributes = function() {};
176 175
177 // Registers the browser plugin <object> custom element. |viewType| is the 176 // Registers the browser plugin <object> custom element. |viewType| is the
178 // name of the specific guestview container (e.g. 'webview'). 177 // name of the specific guestview container (e.g. 'webview').
179 function registerBrowserPluginElement(viewType) { 178 function registerBrowserPluginElement(viewType) {
180 var proto = Object.create(HTMLObjectElement.prototype); 179 var proto = Object.create(HTMLObjectElement.prototype);
181 180
182 proto.createdCallback = function() { 181 proto.createdCallback = function() {
183 this.setAttribute('type', 'application/browser-plugin'); 182 this.setAttribute('type', 'application/browser-plugin');
184 this.setAttribute('id', 'browser-plugin-' + IdGenerator.GetNextId()); 183 this.setAttribute('id', 'browser-plugin-' + IdGenerator.GetNextId());
185 this.style.width = '100%'; 184 this.style.width = '100%';
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 var internal = privates(this).internal; 222 var internal = privates(this).internal;
224 if (!internal) { 223 if (!internal) {
225 return; 224 return;
226 } 225 }
227 internal.elementAttached = true; 226 internal.elementAttached = true;
228 internal.onElementAttached(); 227 internal.onElementAttached();
229 }; 228 };
230 229
231 proto.attributeChangedCallback = function(name, oldValue, newValue) { 230 proto.attributeChangedCallback = function(name, oldValue, newValue) {
232 var internal = privates(this).internal; 231 var internal = privates(this).internal;
233 if (!internal) { 232 if (!internal || !internal.attributes[name]) {
234 return; 233 return;
235 } 234 }
236 internal.handleAttributeMutation(name, oldValue, newValue); 235
236 // Let the changed attribute handle its own mutation.
237 internal.attributes[name].maybeHandleMutation(oldValue, newValue);
237 }; 238 };
238 239
239 proto.detachedCallback = function() { 240 proto.detachedCallback = function() {
240 var internal = privates(this).internal; 241 var internal = privates(this).internal;
241 if (!internal) { 242 if (!internal) {
242 return; 243 return;
243 } 244 }
244 internal.elementAttached = false; 245 internal.elementAttached = false;
245 internal.internalInstanceId = 0; 246 internal.internalInstanceId = 0;
246 internal.guest.destroy(); 247 internal.guest.destroy();
(...skipping 14 matching lines...) Expand all
261 // Delete the callbacks so developers cannot call them and produce unexpected 262 // Delete the callbacks so developers cannot call them and produce unexpected
262 // behavior. 263 // behavior.
263 delete proto.createdCallback; 264 delete proto.createdCallback;
264 delete proto.attachedCallback; 265 delete proto.attachedCallback;
265 delete proto.detachedCallback; 266 delete proto.detachedCallback;
266 delete proto.attributeChangedCallback; 267 delete proto.attributeChangedCallback;
267 } 268 }
268 269
269 // Exports. 270 // Exports.
270 exports.GuestViewContainer = GuestViewContainer; 271 exports.GuestViewContainer = GuestViewContainer;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698