Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 159 // already picked up a partition ID. Thus, we need to reset the initialization | 159 // already picked up a partition ID. Thus, we need to reset the initialization |
| 160 // state. However, it may be the case that beforeFirstNavigation is false BUT | 160 // state. However, it may be the case that beforeFirstNavigation is false BUT |
| 161 // guestInstanceId has yet to be initialized. This means that we have not | 161 // guestInstanceId has yet to be initialized. This means that we have not |
| 162 // heard back from createGuest yet. We will not reset the flag in this case so | 162 // heard back from createGuest yet. We will not reset the flag in this case so |
| 163 // that we don't end up allocating a second guest. | 163 // that we don't end up allocating a second guest. |
| 164 if (this.guestInstanceId) { | 164 if (this.guestInstanceId) { |
| 165 this.guestInstanceId = undefined; | 165 this.guestInstanceId = undefined; |
| 166 this.beforeFirstNavigation = true; | 166 this.beforeFirstNavigation = true; |
| 167 this.validPartitionId = true; | 167 this.validPartitionId = true; |
| 168 this.partition.validPartitionId = true; | 168 this.partition.validPartitionId = true; |
| 169 this.contentWindow = null; | |
|
lazyboy
2014/09/17 18:24:01
This should be done in the constructor as well.
Fady Samuel
2014/09/17 20:25:46
Done.
| |
| 169 } | 170 } |
| 170 this.internalInstanceId = 0; | 171 this.internalInstanceId = 0; |
| 171 }; | 172 }; |
| 172 | 173 |
| 173 // Sets <webview>.request property. | 174 // Sets <webview>.request property. |
| 174 WebViewInternal.prototype.setRequestPropertyOnWebViewNode = function(request) { | 175 WebViewInternal.prototype.setRequestPropertyOnWebViewNode = function(request) { |
| 175 Object.defineProperty( | 176 Object.defineProperty( |
| 176 this.webviewNode, | 177 this.webviewNode, |
| 177 'request', | 178 'request', |
| 178 { | 179 { |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 412 } | 413 } |
| 413 self.webviewNode.setAttribute('partition', value); | 414 self.webviewNode.setAttribute('partition', value); |
| 414 }, | 415 }, |
| 415 enumerable: true | 416 enumerable: true |
| 416 }); | 417 }); |
| 417 | 418 |
| 418 // We cannot use {writable: true} property descriptor because we want a | 419 // We cannot use {writable: true} property descriptor because we want a |
| 419 // dynamic getter value. | 420 // dynamic getter value. |
| 420 Object.defineProperty(this.webviewNode, 'contentWindow', { | 421 Object.defineProperty(this.webviewNode, 'contentWindow', { |
| 421 get: function() { | 422 get: function() { |
| 422 if (browserPluginNode.contentWindow) | 423 if (this.contentWindow) |
| 423 return browserPluginNode.contentWindow; | 424 return this.contentWindow; |
| 424 window.console.error(ERROR_MSG_CONTENTWINDOW_NOT_AVAILABLE); | 425 window.console.error(ERROR_MSG_CONTENTWINDOW_NOT_AVAILABLE); |
| 425 }, | 426 }.bind(this), |
| 426 // No setter. | 427 // No setter. |
| 427 enumerable: true | 428 enumerable: true |
| 428 }); | 429 }); |
| 429 }; | 430 }; |
| 430 | 431 |
| 431 /** | 432 /** |
| 432 * @private | 433 * @private |
| 433 */ | 434 */ |
| 434 WebViewInternal.prototype.setupWebviewNodeAttributes = function() { | 435 WebViewInternal.prototype.setupWebviewNodeAttributes = function() { |
| 435 this.setupWebViewSrcAttributeMutationObserver(); | 436 this.setupWebViewSrcAttributeMutationObserver(); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 568 } | 569 } |
| 569 | 570 |
| 570 if (!!this.guestInstanceId && this.guestInstanceId != 0) { | 571 if (!!this.guestInstanceId && this.guestInstanceId != 0) { |
| 571 window.setTimeout(function() { | 572 window.setTimeout(function() { |
| 572 var isNewWindow = this.deferredAttachState ? | 573 var isNewWindow = this.deferredAttachState ? |
| 573 this.deferredAttachState.isNewWindow : false; | 574 this.deferredAttachState.isNewWindow : false; |
| 574 var params = this.buildAttachParams(isNewWindow); | 575 var params = this.buildAttachParams(isNewWindow); |
| 575 guestViewInternalNatives.AttachGuest( | 576 guestViewInternalNatives.AttachGuest( |
| 576 this.internalInstanceId, | 577 this.internalInstanceId, |
| 577 this.guestInstanceId, | 578 this.guestInstanceId, |
| 578 params); | 579 params, |
| 580 function(w) { | |
| 581 this.contentWindow = w; | |
| 582 //window.console.log(w); | |
|
lazyboy
2014/09/17 18:24:01
Remove
Fady Samuel
2014/09/17 20:25:47
Done.
| |
| 583 }.bind(this)); | |
| 579 }.bind(this), 0); | 584 }.bind(this), 0); |
| 580 } | 585 } |
| 581 | 586 |
| 582 return; | 587 return; |
| 583 } | 588 } |
| 584 | 589 |
| 585 // This observer monitors mutations to attributes of the BrowserPlugin and | 590 // This observer monitors mutations to attributes of the BrowserPlugin and |
| 586 // updates the <webview> attributes accordingly. | 591 // updates the <webview> attributes accordingly. |
| 587 // |newValue| is null if the attribute |name| has been removed. | 592 // |newValue| is null if the attribute |name| has been removed. |
| 588 if (newValue != null) { | 593 if (newValue != null) { |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 872 | 877 |
| 873 if (!this.isPluginInRenderTree()) { | 878 if (!this.isPluginInRenderTree()) { |
| 874 this.deferredAttachState = {isNewWindow: isNewWindow}; | 879 this.deferredAttachState = {isNewWindow: isNewWindow}; |
| 875 return true; | 880 return true; |
| 876 } | 881 } |
| 877 | 882 |
| 878 this.deferredAttachState = null; | 883 this.deferredAttachState = null; |
| 879 return guestViewInternalNatives.AttachGuest( | 884 return guestViewInternalNatives.AttachGuest( |
| 880 this.internalInstanceId, | 885 this.internalInstanceId, |
| 881 this.guestInstanceId, | 886 this.guestInstanceId, |
| 882 params); | 887 params, function(w) { |
| 888 this.contentWindow = w; | |
| 889 }.bind(this)); | |
| 883 }; | 890 }; |
| 884 | 891 |
| 885 // Registers browser plugin <object> custom element. | 892 // Registers browser plugin <object> custom element. |
| 886 function registerBrowserPluginElement() { | 893 function registerBrowserPluginElement() { |
| 887 var proto = Object.create(HTMLObjectElement.prototype); | 894 var proto = Object.create(HTMLObjectElement.prototype); |
| 888 | 895 |
| 889 proto.createdCallback = function() { | 896 proto.createdCallback = function() { |
| 890 this.setAttribute('type', 'application/browser-plugin'); | 897 this.setAttribute('type', 'application/browser-plugin'); |
| 891 this.setAttribute('id', 'browser-plugin-' + IdGenerator.GetNextId()); | 898 this.setAttribute('id', 'browser-plugin-' + IdGenerator.GetNextId()); |
| 892 // The <object> node fills in the <webview> container. | 899 // The <object> node fills in the <webview> container. |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1038 | 1045 |
| 1039 /** | 1046 /** |
| 1040 * Implemented when the experimental API is available. | 1047 * Implemented when the experimental API is available. |
| 1041 * @private | 1048 * @private |
| 1042 */ | 1049 */ |
| 1043 WebViewInternal.prototype.setupExperimentalContextMenus = function() { | 1050 WebViewInternal.prototype.setupExperimentalContextMenus = function() { |
| 1044 }; | 1051 }; |
| 1045 | 1052 |
| 1046 exports.WebView = WebView; | 1053 exports.WebView = WebView; |
| 1047 exports.WebViewInternal = WebViewInternal; | 1054 exports.WebViewInternal = WebViewInternal; |
| OLD | NEW |