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 attributes of the <webview> tag. | 5 // This module implements the attributes of the <webview> tag. |
6 | 6 |
7 var GuestViewInternal = | 7 var GuestViewInternal = |
8 require('binding').Binding.create('guestViewInternal').generate(); | 8 require('binding').Binding.create('guestViewInternal').generate(); |
9 var WebViewImpl = require('webView').WebViewImpl; | 9 var WebViewImpl = require('webView').WebViewImpl; |
10 var WebViewConstants = require('webViewConstants').WebViewConstants; | 10 var WebViewConstants = require('webViewConstants').WebViewConstants; |
(...skipping 17 matching lines...) Expand all Loading... |
28 }; | 28 }; |
29 | 29 |
30 // Sets the attribute's value. | 30 // Sets the attribute's value. |
31 WebViewAttribute.prototype.setValue = function(value) { | 31 WebViewAttribute.prototype.setValue = function(value) { |
32 this.webViewImpl.element.setAttribute(this.name, value || ''); | 32 this.webViewImpl.element.setAttribute(this.name, value || ''); |
33 }; | 33 }; |
34 | 34 |
35 // Changes the attribute's value without triggering its mutation handler. | 35 // Changes the attribute's value without triggering its mutation handler. |
36 WebViewAttribute.prototype.setValueIgnoreMutation = function(value) { | 36 WebViewAttribute.prototype.setValueIgnoreMutation = function(value) { |
37 this.ignoreMutation = true; | 37 this.ignoreMutation = true; |
38 this.webViewImpl.element.setAttribute(this.name, value || ''); | 38 this.setValue(value); |
39 this.ignoreMutation = false; | 39 this.ignoreMutation = false; |
40 } | 40 } |
41 | 41 |
42 // Defines this attribute as a property on the webview node. | 42 // Defines this attribute as a property on the webview node. |
43 WebViewAttribute.prototype.defineProperty = function() { | 43 WebViewAttribute.prototype.defineProperty = function() { |
44 Object.defineProperty(this.webViewImpl.element, this.name, { | 44 Object.defineProperty(this.webViewImpl.element, this.name, { |
45 get: function() { | 45 get: function() { |
46 return this.getValue(); | 46 return this.getValue(); |
47 }.bind(this), | 47 }.bind(this), |
48 set: function(value) { | 48 set: function(value) { |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 } | 204 } |
205 | 205 |
206 SrcAttribute.prototype.__proto__ = WebViewAttribute.prototype; | 206 SrcAttribute.prototype.__proto__ = WebViewAttribute.prototype; |
207 | 207 |
208 SrcAttribute.prototype.setValueIgnoreMutation = function(value) { | 208 SrcAttribute.prototype.setValueIgnoreMutation = function(value) { |
209 // takeRecords() is needed to clear queued up src mutations. Without it, it is | 209 // takeRecords() is needed to clear queued up src mutations. Without it, it is |
210 // possible for this change to get picked up asyncronously by src's mutation | 210 // possible for this change to get picked up asyncronously by src's mutation |
211 // observer |observer|, and then get handled even though we do not want to | 211 // observer |observer|, and then get handled even though we do not want to |
212 // handle this mutation. | 212 // handle this mutation. |
213 this.observer.takeRecords(); | 213 this.observer.takeRecords(); |
214 this.ignoreMutation = true; | 214 WebViewAttribute.prototype.setValueIgnoreMutation.call(this, value); |
215 this.webViewImpl.element.setAttribute(this.name, value || ''); | |
216 this.ignoreMutation = false; | |
217 } | 215 } |
218 | 216 |
219 SrcAttribute.prototype.handleMutation = function(oldValue, newValue) { | 217 SrcAttribute.prototype.handleMutation = function(oldValue, newValue) { |
220 // Once we have navigated, we don't allow clearing the src attribute. | 218 // Once we have navigated, we don't allow clearing the src attribute. |
221 // Once <webview> enters a navigated state, it cannot return to a | 219 // Once <webview> enters a navigated state, it cannot return to a |
222 // placeholder state. | 220 // placeholder state. |
223 if (!newValue && oldValue) { | 221 if (!newValue && oldValue) { |
224 // src attribute changes normally initiate a navigation. We suppress | 222 // src attribute changes normally initiate a navigation. We suppress |
225 // the next src attribute handler call to avoid reloading the page | 223 // the next src attribute handler call to avoid reloading the page |
226 // on every guest-initiated navigation. | 224 // on every guest-initiated navigation. |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 | 295 |
298 var autosizeAttributes = [WebViewConstants.ATTRIBUTE_MAXHEIGHT, | 296 var autosizeAttributes = [WebViewConstants.ATTRIBUTE_MAXHEIGHT, |
299 WebViewConstants.ATTRIBUTE_MAXWIDTH, | 297 WebViewConstants.ATTRIBUTE_MAXWIDTH, |
300 WebViewConstants.ATTRIBUTE_MINHEIGHT, | 298 WebViewConstants.ATTRIBUTE_MINHEIGHT, |
301 WebViewConstants.ATTRIBUTE_MINWIDTH]; | 299 WebViewConstants.ATTRIBUTE_MINWIDTH]; |
302 for (var i = 0; autosizeAttributes[i]; ++i) { | 300 for (var i = 0; autosizeAttributes[i]; ++i) { |
303 this.attributes[autosizeAttributes[i]] = | 301 this.attributes[autosizeAttributes[i]] = |
304 new AutosizeDimensionAttribute(autosizeAttributes[i], this); | 302 new AutosizeDimensionAttribute(autosizeAttributes[i], this); |
305 } | 303 } |
306 }; | 304 }; |
OLD | NEW |