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

Side by Side Diff: extensions/renderer/resources/web_view.js

Issue 584713002: Browser Plugin: Remove dependency on NPAPI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_content_window
Patch Set: Updated histograms.xml Created 6 years, 3 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
« no previous file with comments | « extensions/common/api/web_view_internal.json ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 Webview (<webview>) as a custom element that wraps a 5 // This module implements Webview (<webview>) as a custom element that wraps a
6 // BrowserPlugin object element. The object element is hidden within 6 // BrowserPlugin object element. The object element is hidden within
7 // the shadow DOM of the Webview element. 7 // the shadow DOM of the Webview element.
8 8
9 var DocumentNatives = requireNative('document_natives'); 9 var DocumentNatives = requireNative('document_natives');
10 var GuestViewInternal = 10 var GuestViewInternal =
(...skipping 11 matching lines...) Expand all
22 var WEB_VIEW_ATTRIBUTE_MINHEIGHT = 'minheight'; 22 var WEB_VIEW_ATTRIBUTE_MINHEIGHT = 'minheight';
23 var WEB_VIEW_ATTRIBUTE_MINWIDTH = 'minwidth'; 23 var WEB_VIEW_ATTRIBUTE_MINWIDTH = 'minwidth';
24 var AUTO_SIZE_ATTRIBUTES = [ 24 var AUTO_SIZE_ATTRIBUTES = [
25 WEB_VIEW_ATTRIBUTE_AUTOSIZE, 25 WEB_VIEW_ATTRIBUTE_AUTOSIZE,
26 WEB_VIEW_ATTRIBUTE_MAXHEIGHT, 26 WEB_VIEW_ATTRIBUTE_MAXHEIGHT,
27 WEB_VIEW_ATTRIBUTE_MAXWIDTH, 27 WEB_VIEW_ATTRIBUTE_MAXWIDTH,
28 WEB_VIEW_ATTRIBUTE_MINHEIGHT, 28 WEB_VIEW_ATTRIBUTE_MINHEIGHT,
29 WEB_VIEW_ATTRIBUTE_MINWIDTH 29 WEB_VIEW_ATTRIBUTE_MINWIDTH
30 ]; 30 ];
31 31
32 var WEB_VIEW_ATTRIBUTE_ALLOWTRANSPARENCY = "allowtransparency";
32 var WEB_VIEW_ATTRIBUTE_PARTITION = 'partition'; 33 var WEB_VIEW_ATTRIBUTE_PARTITION = 'partition';
33 34
34 var ERROR_MSG_ALREADY_NAVIGATED = 35 var ERROR_MSG_ALREADY_NAVIGATED =
35 'The object has already navigated, so its partition cannot be changed.'; 36 'The object has already navigated, so its partition cannot be changed.';
36 var ERROR_MSG_INVALID_PARTITION_ATTRIBUTE = 'Invalid partition attribute.'; 37 var ERROR_MSG_INVALID_PARTITION_ATTRIBUTE = 'Invalid partition attribute.';
37 38
38 /** @type {Array.<string>} */
39 var WEB_VIEW_ATTRIBUTES = [
40 'allowtransparency',
41 ];
42
43 /** @class representing state of storage partition. */ 39 /** @class representing state of storage partition. */
44 function Partition() { 40 function Partition() {
45 this.validPartitionId = true; 41 this.validPartitionId = true;
46 this.persistStorage = false; 42 this.persistStorage = false;
47 this.storagePartitionId = ''; 43 this.storagePartitionId = '';
48 }; 44 };
49 45
50 Partition.prototype.toAttribute = function() { 46 Partition.prototype.toAttribute = function() {
51 if (!this.validPartitionId) { 47 if (!this.validPartitionId) {
52 return ''; 48 return '';
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 } 117 }
122 118
123 /** 119 /**
124 * @private 120 * @private
125 */ 121 */
126 WebViewInternal.prototype.createBrowserPluginNode = function() { 122 WebViewInternal.prototype.createBrowserPluginNode = function() {
127 // We create BrowserPlugin as a custom element in order to observe changes 123 // We create BrowserPlugin as a custom element in order to observe changes
128 // to attributes synchronously. 124 // to attributes synchronously.
129 var browserPluginNode = new WebViewInternal.BrowserPlugin(); 125 var browserPluginNode = new WebViewInternal.BrowserPlugin();
130 privates(browserPluginNode).internal = this; 126 privates(browserPluginNode).internal = this;
131
132 $Array.forEach(WEB_VIEW_ATTRIBUTES, function(attributeName) {
133 // Only copy attributes that have been assigned values, rather than copying
134 // a series of undefined attributes to BrowserPlugin.
135 if (this.webviewNode.hasAttribute(attributeName)) {
136 browserPluginNode.setAttribute(
137 attributeName, this.webviewNode.getAttribute(attributeName));
138 } else if (this.webviewNode[attributeName]){
139 // Reading property using has/getAttribute does not work on
140 // document.DOMContentLoaded event (but works on
141 // window.DOMContentLoaded event).
142 // So copy from property if copying from attribute fails.
143 browserPluginNode.setAttribute(
144 attributeName, this.webviewNode[attributeName]);
145 }
146 }, this);
147
148 return browserPluginNode; 127 return browserPluginNode;
149 }; 128 };
150 129
151 WebViewInternal.prototype.getGuestInstanceId = function() { 130 WebViewInternal.prototype.getGuestInstanceId = function() {
152 return this.guestInstanceId; 131 return this.guestInstanceId;
153 }; 132 };
154 133
155 /** 134 /**
156 * Resets some state upon reattaching <webview> element to the DOM. 135 * Resets some state upon reattaching <webview> element to the DOM.
157 */ 136 */
(...skipping 30 matching lines...) Expand all
188 if (!this.webviewNode.hasAttribute('tabIndex')) { 167 if (!this.webviewNode.hasAttribute('tabIndex')) {
189 // <webview> needs a tabIndex in order to be focusable. 168 // <webview> needs a tabIndex in order to be focusable.
190 // TODO(fsamuel): It would be nice to avoid exposing a tabIndex attribute 169 // TODO(fsamuel): It would be nice to avoid exposing a tabIndex attribute
191 // to allow <webview> to be focusable. 170 // to allow <webview> to be focusable.
192 // See http://crbug.com/231664. 171 // See http://crbug.com/231664.
193 this.webviewNode.setAttribute('tabIndex', -1); 172 this.webviewNode.setAttribute('tabIndex', -1);
194 } 173 }
195 var self = this; 174 var self = this;
196 this.webviewNode.addEventListener('focus', function(e) { 175 this.webviewNode.addEventListener('focus', function(e) {
197 // Focus the BrowserPlugin when the <webview> takes focus. 176 // Focus the BrowserPlugin when the <webview> takes focus.
198 self.browserPluginNode.focus(); 177 this.browserPluginNode.focus();
199 }); 178 }.bind(this));
200 this.webviewNode.addEventListener('blur', function(e) { 179 this.webviewNode.addEventListener('blur', function(e) {
201 // Blur the BrowserPlugin when the <webview> loses focus. 180 // Blur the BrowserPlugin when the <webview> loses focus.
202 self.browserPluginNode.blur(); 181 this.browserPluginNode.blur();
203 }); 182 }.bind(this));
204 }; 183 };
205 184
206 /** 185 /**
207 * @private 186 * @private
208 */ 187 */
209 WebViewInternal.prototype.back = function() { 188 WebViewInternal.prototype.back = function() {
210 return this.go(-1); 189 return this.go(-1);
211 }; 190 };
212 191
213 /** 192 /**
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 * @private 301 * @private
323 */ 302 */
324 WebViewInternal.prototype.insertCSS = function(var_args) { 303 WebViewInternal.prototype.insertCSS = function(var_args) {
325 this.validateExecuteCodeCall(); 304 this.validateExecuteCodeCall();
326 var args = $Array.concat([this.guestInstanceId, this.src], 305 var args = $Array.concat([this.guestInstanceId, this.src],
327 $Array.slice(arguments)); 306 $Array.slice(arguments));
328 $Function.apply(WebView.insertCSS, null, args); 307 $Function.apply(WebView.insertCSS, null, args);
329 }; 308 };
330 309
331 WebViewInternal.prototype.setupAutoSizeProperties = function() { 310 WebViewInternal.prototype.setupAutoSizeProperties = function() {
332 var self = this;
333 $Array.forEach(AUTO_SIZE_ATTRIBUTES, function(attributeName) { 311 $Array.forEach(AUTO_SIZE_ATTRIBUTES, function(attributeName) {
334 this[attributeName] = this.webviewNode.getAttribute(attributeName); 312 this[attributeName] = this.webviewNode.getAttribute(attributeName);
335 Object.defineProperty(this.webviewNode, attributeName, { 313 Object.defineProperty(this.webviewNode, attributeName, {
336 get: function() { 314 get: function() {
337 return self[attributeName]; 315 return this[attributeName];
338 }, 316 }.bind(this),
339 set: function(value) { 317 set: function(value) {
340 self.webviewNode.setAttribute(attributeName, value); 318 this.webviewNode.setAttribute(attributeName, value);
341 }, 319 }.bind(this),
342 enumerable: true 320 enumerable: true
343 }); 321 });
344 }, this); 322 }.bind(this), this);
345 }; 323 };
346 324
347 /** 325 /**
348 * @private 326 * @private
349 */ 327 */
350 WebViewInternal.prototype.setupWebviewNodeProperties = function() { 328 WebViewInternal.prototype.setupWebviewNodeProperties = function() {
351 var ERROR_MSG_CONTENTWINDOW_NOT_AVAILABLE = '<webview>: ' + 329 var ERROR_MSG_CONTENTWINDOW_NOT_AVAILABLE = '<webview>: ' +
352 'contentWindow is not available at this time. It will become available ' + 330 'contentWindow is not available at this time. It will become available ' +
353 'when the page has finished loading.'; 331 'when the page has finished loading.';
354 332
355 this.setupAutoSizeProperties(); 333 this.setupAutoSizeProperties();
356 var self = this;
357 var browserPluginNode = this.browserPluginNode;
358 // Expose getters and setters for the attributes.
359 $Array.forEach(WEB_VIEW_ATTRIBUTES, function(attributeName) {
360 Object.defineProperty(this.webviewNode, attributeName, {
361 get: function() {
362 if (browserPluginNode.hasOwnProperty(attributeName)) {
363 return browserPluginNode[attributeName];
364 } else {
365 return browserPluginNode.getAttribute(attributeName);
366 }
367 },
368 set: function(value) {
369 if (browserPluginNode.hasOwnProperty(attributeName)) {
370 // Give the BrowserPlugin first stab at the attribute so that it can
371 // throw an exception if there is a problem. This attribute will then
372 // be propagated back to the <webview>.
373 browserPluginNode[attributeName] = value;
374 } else {
375 browserPluginNode.setAttribute(attributeName, value);
376 }
377 },
378 enumerable: true
379 });
380 }, this);
381 334
382 // <webview> src does not quite behave the same as BrowserPlugin src, and so 335 Object.defineProperty(this.webviewNode,
383 // we don't simply keep the two in sync. 336 WEB_VIEW_ATTRIBUTE_ALLOWTRANSPARENCY, {
384 this.src = this.webviewNode.getAttribute('src');
385 Object.defineProperty(this.webviewNode, 'src', {
386 get: function() { 337 get: function() {
387 return self.src; 338 return this.allowtransparency;
388 }, 339 }.bind(this),
389 set: function(value) { 340 set: function(value) {
390 self.webviewNode.setAttribute('src', value); 341 this.webviewNode.setAttribute(WEB_VIEW_ATTRIBUTE_ALLOWTRANSPARENCY,
391 }, 342 value);
392 // No setter. 343 }.bind(this),
393 enumerable: true
394 });
395
396 Object.defineProperty(this.webviewNode, 'name', {
397 get: function() {
398 return self.name;
399 },
400 set: function(value) {
401 self.webviewNode.setAttribute('name', value);
402 },
403 enumerable: true
404 });
405
406 Object.defineProperty(this.webviewNode, 'partition', {
407 get: function() {
408 return self.partition.toAttribute();
409 },
410 set: function(value) {
411 var result = self.partition.fromAttribute(value, self.hasNavigated());
412 if (result.error) {
413 throw result.error;
414 }
415 self.webviewNode.setAttribute('partition', value);
416 },
417 enumerable: true 344 enumerable: true
418 }); 345 });
419 346
420 // We cannot use {writable: true} property descriptor because we want a 347 // We cannot use {writable: true} property descriptor because we want a
421 // dynamic getter value. 348 // dynamic getter value.
422 Object.defineProperty(this.webviewNode, 'contentWindow', { 349 Object.defineProperty(this.webviewNode, 'contentWindow', {
423 get: function() { 350 get: function() {
424 if (this.contentWindow) { 351 if (this.contentWindow) {
425 return this.contentWindow; 352 return this.contentWindow;
426 } 353 }
427 window.console.error(ERROR_MSG_CONTENTWINDOW_NOT_AVAILABLE); 354 window.console.error(ERROR_MSG_CONTENTWINDOW_NOT_AVAILABLE);
428 }.bind(this), 355 }.bind(this),
429 // No setter. 356 // No setter.
430 enumerable: true 357 enumerable: true
358 });
359
360 Object.defineProperty(this.webviewNode, 'name', {
361 get: function() {
362 return this.name;
363 }.bind(this),
364 set: function(value) {
365 this.webviewNode.setAttribute('name', value);
366 }.bind(this),
367 enumerable: true
368 });
369
370 Object.defineProperty(this.webviewNode, 'partition', {
371 get: function() {
372 return this.partition.toAttribute();
373 }.bind(this),
374 set: function(value) {
375 var result = this.partition.fromAttribute(value, this.hasNavigated());
376 if (result.error) {
377 throw result.error;
378 }
379 this.webviewNode.setAttribute('partition', value);
380 }.bind(this),
381 enumerable: true
382 });
383
384 this.src = this.webviewNode.getAttribute('src');
385 Object.defineProperty(this.webviewNode, 'src', {
386 get: function() {
387 return this.src;
388 }.bind(this),
389 set: function(value) {
390 this.webviewNode.setAttribute('src', value);
391 }.bind(this),
392 // No setter.
393 enumerable: true
431 }); 394 });
432 }; 395 };
433 396
434 /** 397 /**
435 * @private 398 * @private
436 */ 399 */
437 WebViewInternal.prototype.setupWebviewNodeAttributes = function() { 400 WebViewInternal.prototype.setupWebviewNodeAttributes = function() {
438 this.setupWebViewSrcAttributeMutationObserver(); 401 this.setupWebViewSrcAttributeMutationObserver();
439 }; 402 };
440 403
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 'min': { 451 'min': {
489 'width': parseInt(this.minwidth || 0), 452 'width': parseInt(this.minwidth || 0),
490 'height': parseInt(this.minheight || 0) 453 'height': parseInt(this.minheight || 0)
491 }, 454 },
492 'max': { 455 'max': {
493 'width': parseInt(this.maxwidth || 0), 456 'width': parseInt(this.maxwidth || 0),
494 'height': parseInt(this.maxheight || 0) 457 'height': parseInt(this.maxheight || 0)
495 } 458 }
496 }); 459 });
497 return; 460 return;
461 } else if (name == WEB_VIEW_ATTRIBUTE_ALLOWTRANSPARENCY) {
462 // We treat null attribute (attribute removed) and the empty string as
463 // one case.
464 oldValue = oldValue || '';
465 newValue = newValue || '';
466
467 if (oldValue === newValue) {
468 return;
469 }
470 this.allowtransparency = newValue != '';
471
472 if (!this.guestInstanceId) {
473 return;
474 }
475
476 WebView.setAllowTransparency(this.guestInstanceId, this.allowtransparency);
477 return;
498 } else if (name == 'name') { 478 } else if (name == 'name') {
499 // We treat null attribute (attribute removed) and the empty string as 479 // We treat null attribute (attribute removed) and the empty string as
500 // one case. 480 // one case.
501 oldValue = oldValue || ''; 481 oldValue = oldValue || '';
502 newValue = newValue || ''; 482 newValue = newValue || '';
503 483
504 if (oldValue === newValue) { 484 if (oldValue === newValue) {
505 return; 485 return;
506 } 486 }
507 this.name = newValue; 487 this.name = newValue;
(...skipping 28 matching lines...) Expand all
536 var result = {}; 516 var result = {};
537 this.parseSrcAttribute(result); 517 this.parseSrcAttribute(result);
538 518
539 if (result.error) { 519 if (result.error) {
540 throw result.error; 520 throw result.error;
541 } 521 }
542 } else if (name == 'partition') { 522 } else if (name == 'partition') {
543 // Note that throwing error here won't synchronously propagate. 523 // Note that throwing error here won't synchronously propagate.
544 this.partition.fromAttribute(newValue, this.hasNavigated()); 524 this.partition.fromAttribute(newValue, this.hasNavigated());
545 } 525 }
546
547 // No <webview> -> <object> mutation propagation for these attributes.
548 if (name == 'src' || name == 'partition') {
549 return;
550 }
551
552 if (this.browserPluginNode.hasOwnProperty(name)) {
553 this.browserPluginNode[name] = newValue;
554 } else {
555 this.browserPluginNode.setAttribute(name, newValue);
556 }
557 }; 526 };
558 527
559 /** 528 /**
560 * @private 529 * @private
561 */ 530 */
562 WebViewInternal.prototype.handleBrowserPluginAttributeMutation = 531 WebViewInternal.prototype.handleBrowserPluginAttributeMutation =
563 function(name, oldValue, newValue) { 532 function(name, oldValue, newValue) {
564 if (name == 'internalinstanceid' && !oldValue && !!newValue) { 533 if (name == 'internalinstanceid' && !oldValue && !!newValue) {
565 this.browserPluginNode.removeAttribute('internalinstanceid'); 534 this.browserPluginNode.removeAttribute('internalinstanceid');
566 this.internalInstanceId = parseInt(newValue); 535 this.internalInstanceId = parseInt(newValue);
(...skipping 14 matching lines...) Expand all
581 params, 550 params,
582 function(w) { 551 function(w) {
583 this.contentWindow = w; 552 this.contentWindow = w;
584 }.bind(this) 553 }.bind(this)
585 ); 554 );
586 }.bind(this), 0); 555 }.bind(this), 0);
587 } 556 }
588 557
589 return; 558 return;
590 } 559 }
591
592 // This observer monitors mutations to attributes of the BrowserPlugin and
593 // updates the <webview> attributes accordingly.
594 // |newValue| is null if the attribute |name| has been removed.
595 if (newValue != null) {
596 // Update the <webview> attribute to match the BrowserPlugin attribute.
597 // Note: Calling setAttribute on <webview> will trigger its mutation
598 // observer which will then propagate that attribute to BrowserPlugin. In
599 // cases where we permit assigning a BrowserPlugin attribute the same value
600 // again (such as navigation when crashed), this could end up in an infinite
601 // loop. Thus, we avoid this loop by only updating the <webview> attribute
602 // if the BrowserPlugin attributes differs from it.
603 if (newValue != this.webviewNode.getAttribute(name)) {
604 this.webviewNode.setAttribute(name, newValue);
605 }
606 } else {
607 // If an attribute is removed from the BrowserPlugin, then remove it
608 // from the <webview> as well.
609 this.webviewNode.removeAttribute(name);
610 }
611 }; 560 };
612 561
613 WebViewInternal.prototype.onSizeChanged = function(webViewEvent) { 562 WebViewInternal.prototype.onSizeChanged = function(webViewEvent) {
614 var newWidth = webViewEvent.newWidth; 563 var newWidth = webViewEvent.newWidth;
615 var newHeight = webViewEvent.newHeight; 564 var newHeight = webViewEvent.newHeight;
616 565
617 var node = this.webviewNode; 566 var node = this.webviewNode;
618 567
619 var width = node.offsetWidth; 568 var width = node.offsetWidth;
620 var height = node.offsetHeight; 569 var height = node.offsetHeight;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 return this.guestInstanceId != undefined; 670 return this.guestInstanceId != undefined;
722 }; 671 };
723 672
724 WebViewInternal.prototype.allocateInstanceId = function() { 673 WebViewInternal.prototype.allocateInstanceId = function() {
725 var storagePartitionId = 674 var storagePartitionId =
726 this.webviewNode.getAttribute(WEB_VIEW_ATTRIBUTE_PARTITION) || 675 this.webviewNode.getAttribute(WEB_VIEW_ATTRIBUTE_PARTITION) ||
727 this.webviewNode[WEB_VIEW_ATTRIBUTE_PARTITION]; 676 this.webviewNode[WEB_VIEW_ATTRIBUTE_PARTITION];
728 var params = { 677 var params = {
729 'storagePartitionId': storagePartitionId, 678 'storagePartitionId': storagePartitionId,
730 }; 679 };
731 var self = this;
732 GuestViewInternal.createGuest( 680 GuestViewInternal.createGuest(
733 'webview', 681 'webview',
734 params, 682 params,
735 function(guestInstanceId) { 683 function(guestInstanceId) {
736 // TODO(lazyboy): Make sure this.autoNavigate_ stuff correctly updated 684 this.attachWindow(guestInstanceId, false);
737 // |self.src| at this point. 685 }.bind(this)
738 self.attachWindow(guestInstanceId, false); 686 );
739 });
740 }; 687 };
741 688
742 WebViewInternal.prototype.onFrameNameChanged = function(name) { 689 WebViewInternal.prototype.onFrameNameChanged = function(name) {
743 this.name = name || ''; 690 this.name = name || '';
744 if (this.name === '') { 691 if (this.name === '') {
745 this.webviewNode.removeAttribute('name'); 692 this.webviewNode.removeAttribute('name');
746 } else { 693 } else {
747 this.webviewNode.setAttribute('name', this.name); 694 this.webviewNode.setAttribute('name', this.name);
748 } 695 }
749 }; 696 };
(...skipping 11 matching lines...) Expand all
761 * an event handler. 708 * an event handler.
762 */ 709 */
763 WebViewInternal.prototype.setupEventProperty = function(eventName) { 710 WebViewInternal.prototype.setupEventProperty = function(eventName) {
764 var propertyName = 'on' + eventName.toLowerCase(); 711 var propertyName = 'on' + eventName.toLowerCase();
765 Object.defineProperty(this.webviewNode, propertyName, { 712 Object.defineProperty(this.webviewNode, propertyName, {
766 get: function() { 713 get: function() {
767 return this.on[propertyName]; 714 return this.on[propertyName];
768 }.bind(this), 715 }.bind(this),
769 set: function(value) { 716 set: function(value) {
770 if (this.on[propertyName]) 717 if (this.on[propertyName])
771 this.webviewNode.removeEventListener(eventName, self.on[propertyName]); 718 this.webviewNode.removeEventListener(eventName, this.on[propertyName]);
772 this.on[propertyName] = value; 719 this.on[propertyName] = value;
773 if (value) 720 if (value)
774 this.webviewNode.addEventListener(eventName, value); 721 this.webviewNode.addEventListener(eventName, value);
775 }.bind(this), 722 }.bind(this),
776 enumerable: true 723 enumerable: true
777 }); 724 });
778 }; 725 };
779 726
780 // Updates state upon loadcommit. 727 // Updates state upon loadcommit.
781 WebViewInternal.prototype.onLoadCommit = function( 728 WebViewInternal.prototype.onLoadCommit = function(
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 795
849 WebViewInternal.prototype.getZoom = function(callback) { 796 WebViewInternal.prototype.getZoom = function(callback) {
850 if (!this.guestInstanceId) { 797 if (!this.guestInstanceId) {
851 return; 798 return;
852 } 799 }
853 WebView.getZoom(this.guestInstanceId, callback); 800 WebView.getZoom(this.guestInstanceId, callback);
854 }; 801 };
855 802
856 WebViewInternal.prototype.buildAttachParams = function(isNewWindow) { 803 WebViewInternal.prototype.buildAttachParams = function(isNewWindow) {
857 var params = { 804 var params = {
805 'allowtransparency': this.allowtransparency || false,
858 'autosize': this.webviewNode.hasAttribute(WEB_VIEW_ATTRIBUTE_AUTOSIZE), 806 'autosize': this.webviewNode.hasAttribute(WEB_VIEW_ATTRIBUTE_AUTOSIZE),
859 'instanceId': this.viewInstanceId, 807 'instanceId': this.viewInstanceId,
860 'maxheight': parseInt(this.maxheight || 0), 808 'maxheight': parseInt(this.maxheight || 0),
861 'maxwidth': parseInt(this.maxwidth || 0), 809 'maxwidth': parseInt(this.maxwidth || 0),
862 'minheight': parseInt(this.minheight || 0), 810 'minheight': parseInt(this.minheight || 0),
863 'minwidth': parseInt(this.minwidth || 0), 811 'minwidth': parseInt(this.minwidth || 0),
864 'name': this.name, 812 'name': this.name,
865 // We don't need to navigate new window from here. 813 // We don't need to navigate new window from here.
866 'src': isNewWindow ? undefined : this.src, 814 'src': isNewWindow ? undefined : this.src,
867 // If we have a partition from the opener, that will also be already 815 // If we have a partition from the opener, that will also be already
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 996
1049 /** 997 /**
1050 * Implemented when the experimental API is available. 998 * Implemented when the experimental API is available.
1051 * @private 999 * @private
1052 */ 1000 */
1053 WebViewInternal.prototype.setupExperimentalContextMenus = function() { 1001 WebViewInternal.prototype.setupExperimentalContextMenus = function() {
1054 }; 1002 };
1055 1003
1056 exports.WebView = WebView; 1004 exports.WebView = WebView;
1057 exports.WebViewInternal = WebViewInternal; 1005 exports.WebViewInternal = WebViewInternal;
OLDNEW
« no previous file with comments | « extensions/common/api/web_view_internal.json ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698