| 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 GuestView = require('guestView').GuestView; | 10 var GuestView = require('guestView').GuestView; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 createDefaultApiMethod(apiMethods[i]); | 48 createDefaultApiMethod(apiMethods[i]); |
| 49 } | 49 } |
| 50 } | 50 } |
| 51 | 51 |
| 52 // Forward proto.foo* method calls to WebViewImpl.foo*. | 52 // Forward proto.foo* method calls to WebViewImpl.foo*. |
| 53 GuestViewContainer.forwardApiMethods(proto, apiMethods); | 53 GuestViewContainer.forwardApiMethods(proto, apiMethods); |
| 54 }; | 54 }; |
| 55 | 55 |
| 56 // Initiates navigation once the <webview> element is attached to the DOM. | 56 // Initiates navigation once the <webview> element is attached to the DOM. |
| 57 WebViewImpl.prototype.onElementAttached = function() { | 57 WebViewImpl.prototype.onElementAttached = function() { |
| 58 // Mark all attributes as dirty on attachment. |
| 59 for (var i in this.attributes) { |
| 60 this.attributes[i].dirty = true; |
| 61 } |
| 58 for (var i in this.attributes) { | 62 for (var i in this.attributes) { |
| 59 this.attributes[i].attach(); | 63 this.attributes[i].attach(); |
| 60 } | 64 } |
| 61 }; | 65 }; |
| 62 | 66 |
| 63 // Resets some state upon detaching <webview> element from the DOM. | 67 // Resets some state upon detaching <webview> element from the DOM. |
| 64 WebViewImpl.prototype.onElementDetached = function() { | 68 WebViewImpl.prototype.onElementDetached = function() { |
| 65 this.guest.destroy(); | 69 this.guest.destroy(); |
| 66 for (var i in this.attributes) { | 70 for (var i in this.attributes) { |
| 71 this.attributes[i].dirty = false; |
| 72 } |
| 73 for (var i in this.attributes) { |
| 67 this.attributes[i].detach(); | 74 this.attributes[i].detach(); |
| 68 } | 75 } |
| 69 }; | 76 }; |
| 70 | 77 |
| 71 // Sets the <webview>.request property. | 78 // Sets the <webview>.request property. |
| 72 WebViewImpl.prototype.setRequestPropertyOnWebViewElement = function(request) { | 79 WebViewImpl.prototype.setRequestPropertyOnWebViewElement = function(request) { |
| 73 Object.defineProperty( | 80 Object.defineProperty( |
| 74 this.element, | 81 this.element, |
| 75 'request', | 82 'request', |
| 76 { | 83 { |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 }; | 167 }; |
| 161 | 168 |
| 162 WebViewImpl.prototype.onAttach = function(storagePartitionId) { | 169 WebViewImpl.prototype.onAttach = function(storagePartitionId) { |
| 163 this.attributes[WebViewConstants.ATTRIBUTE_PARTITION].setValueIgnoreMutation( | 170 this.attributes[WebViewConstants.ATTRIBUTE_PARTITION].setValueIgnoreMutation( |
| 164 storagePartitionId); | 171 storagePartitionId); |
| 165 }; | 172 }; |
| 166 | 173 |
| 167 WebViewImpl.prototype.buildContainerParams = function() { | 174 WebViewImpl.prototype.buildContainerParams = function() { |
| 168 var params = { 'userAgentOverride': this.userAgentOverride }; | 175 var params = { 'userAgentOverride': this.userAgentOverride }; |
| 169 for (var i in this.attributes) { | 176 for (var i in this.attributes) { |
| 170 params[i] = this.attributes[i].getValue(); | 177 var value = this.attributes[i].getValueIfDirty(); |
| 178 if (value) |
| 179 params[i] = value; |
| 171 } | 180 } |
| 172 return params; | 181 return params; |
| 173 }; | 182 }; |
| 174 | 183 |
| 175 WebViewImpl.prototype.attachWindow = function(opt_guestInstanceId) { | 184 WebViewImpl.prototype.attachWindow = function(opt_guestInstanceId) { |
| 176 // If |opt_guestInstanceId| was provided, then a different existing guest is | 185 // If |opt_guestInstanceId| was provided, then a different existing guest is |
| 177 // being attached to this webview, and the current one will get destroyed. | 186 // being attached to this webview, and the current one will get destroyed. |
| 178 if (opt_guestInstanceId) { | 187 if (opt_guestInstanceId) { |
| 179 if (this.guest.getId() == opt_guestInstanceId) { | 188 if (this.guest.getId() == opt_guestInstanceId) { |
| 180 return true; | 189 return true; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 211 }.bind(this)); | 220 }.bind(this)); |
| 212 }; | 221 }; |
| 213 | 222 |
| 214 // Implemented when the ChromeWebView API is available. | 223 // Implemented when the ChromeWebView API is available. |
| 215 WebViewImpl.prototype.maybeSetupContextMenus = function() {}; | 224 WebViewImpl.prototype.maybeSetupContextMenus = function() {}; |
| 216 | 225 |
| 217 GuestViewContainer.registerElement(WebViewImpl); | 226 GuestViewContainer.registerElement(WebViewImpl); |
| 218 | 227 |
| 219 // Exports. | 228 // Exports. |
| 220 exports.WebViewImpl = WebViewImpl; | 229 exports.WebViewImpl = WebViewImpl; |
| OLD | NEW |