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

Unified Diff: chrome/renderer/resources/extensions/web_view.js

Issue 427883002: <webview>: Move autosize from content to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_frame_url
Patch Set: Works Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/resources/extensions/web_view.js
diff --git a/chrome/renderer/resources/extensions/web_view.js b/chrome/renderer/resources/extensions/web_view.js
index 3bed13beaab9d30d95ea6ed93d57b8a732cbccef..f2a798ab273c1a67335314b3841a22c813bd61b8 100644
--- a/chrome/renderer/resources/extensions/web_view.js
+++ b/chrome/renderer/resources/extensions/web_view.js
@@ -19,6 +19,14 @@ var WEB_VIEW_ATTRIBUTE_MAXHEIGHT = 'maxheight';
var WEB_VIEW_ATTRIBUTE_MAXWIDTH = 'maxwidth';
var WEB_VIEW_ATTRIBUTE_MINHEIGHT = 'minheight';
var WEB_VIEW_ATTRIBUTE_MINWIDTH = 'minwidth';
+var AUTO_SIZE_ATTRIBUTES = [
+ 'autosize',
+ WEB_VIEW_ATTRIBUTE_MAXHEIGHT,
+ WEB_VIEW_ATTRIBUTE_MAXWIDTH,
+ WEB_VIEW_ATTRIBUTE_MINHEIGHT,
+ WEB_VIEW_ATTRIBUTE_MINWIDTH
+];
+
var WEB_VIEW_ATTRIBUTE_PARTITION = 'partition';
var PLUGIN_METHOD_ATTACH = '-internal-attach';
@@ -30,11 +38,6 @@ var ERROR_MSG_INVALID_PARTITION_ATTRIBUTE = 'Invalid partition attribute.';
/** @type {Array.<string>} */
var WEB_VIEW_ATTRIBUTES = [
'allowtransparency',
- 'autosize',
- WEB_VIEW_ATTRIBUTE_MINHEIGHT,
- WEB_VIEW_ATTRIBUTE_MINWIDTH,
- WEB_VIEW_ATTRIBUTE_MAXHEIGHT,
- WEB_VIEW_ATTRIBUTE_MAXWIDTH
];
/** @class representing state of storage partition. */
@@ -314,6 +317,22 @@ WebViewInternal.prototype.insertCSS = function(var_args) {
$Function.apply(WebView.insertCSS, null, args);
};
+WebViewInternal.prototype.setupAutoSizeProperties = function() {
+ var self = this;
+ $Array.forEach(AUTO_SIZE_ATTRIBUTES, function(attributeName) {
+ this[attributeName] = this.webviewNode.getAttribute(attributeName);
+ Object.defineProperty(this.webviewNode, attributeName, {
+ get: function() {
+ return self[attributeName];
+ },
+ set: function(value) {
+ self.webviewNode.setAttribute(attributeName, value);
+ },
+ enumerable: true
+ });
+ }, this);
+};
+
/**
* @private
*/
@@ -322,6 +341,7 @@ WebViewInternal.prototype.setupWebviewNodeProperties = function() {
'contentWindow is not available at this time. It will become available ' +
'when the page has finished loading.';
+ this.setupAutoSizeProperties();
var self = this;
var browserPluginNode = this.browserPluginNode;
// Expose getters and setters for the attributes.
@@ -445,7 +465,25 @@ WebViewInternal.prototype.handleWebviewAttributeMutation =
// a BrowserPlugin property will update the corresponding BrowserPlugin
// attribute, if necessary. See BrowserPlugin::UpdateDOMAttribute for more
// details.
- if (name == 'name') {
+ if (AUTO_SIZE_ATTRIBUTES.indexOf(name) > -1) {
+ this[name] = newValue;
+ if (!this.instanceId) {
+ return;
+ }
+ // Convert autosize attribute to boolean.
+ var autosize = (this.autosize + '').toLowerCase() == 'true' ? true : false;
lazyboy 2014/07/31 04:24:22 This is bad way of specifying attributes IIRC, don
Fady Samuel 2014/08/01 18:12:52 Fixed.
+ WebView.setAutoSize(this.instanceId, {
+ 'enableAutoSize': autosize,
+ 'min': {
+ 'width': parseInt(this.minwidth || 0),
+ 'height': parseInt(this.minheight || 0)
+ },
+ 'max': {
+ 'width': parseInt(this.maxwidth || 0),
+ 'height': parseInt(this.maxheight || 0)
+ }
+ });
+ } else if (name == 'name') {
// We treat null attribute (attribute removed) and the empty string as
// one case.
oldValue = oldValue || '';
@@ -783,8 +821,12 @@ WebViewInternal.prototype.getZoom = function(callback) {
WebViewInternal.prototype.buildAttachParams = function(isNewWindow) {
var params = {
- 'api': 'webview',
+ 'autosize': (this.autosize + '').toLowerCase() == 'true' ? true : false,
'instanceId': this.viewInstanceId,
+ 'maxheight': parseInt(this.maxheight || 0),
+ 'maxwidth': parseInt(this.maxwidth || 0),
+ 'minheight': parseInt(this.minheight || 0),
+ 'minwidth': parseInt(this.minwidth || 0),
'name': this.name,
// We don't need to navigate new window from here.
'src': isNewWindow ? undefined : this.src,

Powered by Google App Engine
This is Rietveld 408576698