Index: extensions/renderer/resources/guest_view/web_view_attributes.js |
diff --git a/extensions/renderer/resources/guest_view/web_view_attributes.js b/extensions/renderer/resources/guest_view/web_view_attributes.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..56f38740f5ed07244f3445ea9e367034919d6a4a |
--- /dev/null |
+++ b/extensions/renderer/resources/guest_view/web_view_attributes.js |
@@ -0,0 +1,97 @@ |
+// Copyright (c) 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// This module implements the attributes of the <webview> tag. |
+ |
+var WebView = require('webView').WebView; |
+var WebViewConstants = require('webViewConstants').WebViewConstants; |
+ |
+// ----------------------------------------------------------------------------- |
+// Attribute objects. |
+ |
+// Default implementation of a WebView attribute. |
+function WebViewAttribute(name, webViewImpl) { |
+ this.name = name; |
+ this.value = ''; |
+ this.webViewImpl = webViewImpl; |
+} |
+ |
+WebViewAttribute.prototype.getValue = function() { |
+ return this.value || ''; |
+}; |
+ |
+WebViewAttribute.prototype.setValue = function(value) { |
+ this.value = value; |
+}; |
+ |
+// Attribute representing the state of the storage partition. |
+function Partition(webViewImpl) { |
+ this.validPartitionId = true; |
+ this.persistStorage = false; |
+ this.storagePartitionId = ''; |
+ this.webViewImpl = webViewImpl; |
+} |
+ |
+Partition.prototype = new WebViewAttribute( |
+ WebViewConstants.ATTRIBUTE_PARTITION); |
+ |
+Partition.prototype.getValue = function() { |
+ if (!this.validPartitionId) { |
+ return ''; |
+ } |
+ return (this.persistStorage ? 'persist:' : '') + this.storagePartitionId; |
+}; |
+ |
+Partition.prototype.setValue = function(value) { |
+ var result = {}; |
+ var hasNavigated = !this.webViewImpl.beforeFirstNavigation; |
+ if (hasNavigated) { |
+ result.error = WebViewConstants.ERROR_MSG_ALREADY_NAVIGATED; |
+ return result; |
+ } |
+ if (!value) { |
+ value = ''; |
+ } |
+ |
+ var LEN = 'persist:'.length; |
+ if (value.substr(0, LEN) == 'persist:') { |
+ value = value.substr(LEN); |
+ if (!value) { |
+ this.validPartitionId = false; |
+ result.error = WebViewConstants.ERROR_MSG_INVALID_PARTITION_ATTRIBUTE; |
+ return result; |
+ } |
+ this.persistStorage = true; |
+ } else { |
+ this.persistStorage = false; |
+ } |
+ |
+ this.storagePartitionId = value; |
+ return result; |
+}; |
+ |
+// ----------------------------------------------------------------------------- |
+ |
+// Sets up all of the webview attributes. |
+WebView.prototype.setupWebViewAttributes = function() { |
+ this.attributes = {}; |
+ |
+ // Initialize the attributes with special behavior (and custom attribute |
+ // objects). |
+ this.attributes[WebViewConstants.ATTRIBUTE_PARTITION] = new Partition(this); |
+ |
+ // Initialize the remaining attributes, which have default behavior. |
+ var defaultAttributes = [WebViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY, |
+ WebViewConstants.ATTRIBUTE_AUTOSIZE, |
+ WebViewConstants.ATTRIBUTE_MAXHEIGHT, |
+ WebViewConstants.ATTRIBUTE_MAXWIDTH, |
+ WebViewConstants.ATTRIBUTE_MINHEIGHT, |
+ WebViewConstants.ATTRIBUTE_MINWIDTH, |
+ WebViewConstants.ATTRIBUTE_NAME, |
+ WebViewConstants.ATTRIBUTE_SRC]; |
+ for (var i = 0; defaultAttributes[i]; ++i) { |
+ this.attributes[defaultAttributes[i]] = |
+ new WebViewAttribute(defaultAttributes[i], this); |
+ } |
+}; |