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

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

Issue 431503002: Implement autosizing for <extensionoptions> (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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/extension_options.js
diff --git a/chrome/renderer/resources/extensions/extension_options.js b/chrome/renderer/resources/extensions/extension_options.js
index cc42d7fb4b156bcff285dafd53e8e03a7e999bbb..51fc7d1bf84721f5be04fcd5c9c397f39fc75dcd 100644
--- a/chrome/renderer/resources/extensions/extension_options.js
+++ b/chrome/renderer/resources/extensions/extension_options.js
@@ -9,6 +9,18 @@ var GuestViewInternal =
require('binding').Binding.create('guestViewInternal').generate();
var IdGenerator = requireNative('id_generator');
+var EXTENSION_OPTIONS_ATTRIBUTE_MAXHEIGHT = 'maxheight';
not at google - send to devlin 2014/07/30 17:44:57 just inline each of these?
+var EXTENSION_OPTIONS_ATTRIBUTE_MAXWIDTH = 'maxwidth';
+var EXTENSION_OPTIONS_ATTRIBUTE_MINHEIGHT = 'minheight';
+var EXTENSION_OPTIONS_ATTRIBUTE_MINWIDTH = 'minwidth';
+
+var EXTENSION_OPTIONS_ATTRIBUTES = [
+ EXTENSION_OPTIONS_ATTRIBUTE_MAXHEIGHT,
not at google - send to devlin 2014/07/30 17:44:57 can this be a map of name --> default value (poten
ericzeng 2014/07/30 23:29:26 Done.
+ EXTENSION_OPTIONS_ATTRIBUTE_MAXWIDTH,
+ EXTENSION_OPTIONS_ATTRIBUTE_MINHEIGHT,
+ EXTENSION_OPTIONS_ATTRIBUTE_MINWIDTH
+];
+
function ExtensionOptionsInternal(extensionoptionsNode) {
privates(extensionoptionsNode).internal = this;
this.extensionoptionsNode = extensionoptionsNode;
@@ -34,7 +46,20 @@ ExtensionOptionsInternal.prototype.attachWindow = function(instanceId) {
ExtensionOptionsInternal.prototype.createBrowserPluginNode = function() {
var browserPluginNode = new ExtensionOptionsInternal.BrowserPlugin();
+ browserPluginNode.setAttribute('autosize', 'on');
+ browserPluginNode.setAttribute('minwidth', 80);
+ browserPluginNode.setAttribute('minheight', 30);
privates(browserPluginNode).internal = this;
+
+ $Array.forEach(EXTENSION_OPTIONS_ATTRIBUTES, function(attributeName) {
+ // Only copy attributes that have been assigned values, rather than copying
+ // a series of undefined attributes to BrowserPlugin.
+ if (this.extensionoptionsNode.hasAttribute(attributeName)) {
+ browserPluginNode.setAttribute(
+ attributeName, this.extensionoptionsNode.getAttribute(attributeName));
not at google - send to devlin 2014/07/30 17:44:57 indentation += 2
ericzeng 2014/07/30 23:29:26 Done.
+ }
+ }, this);
+
return browserPluginNode;
};
@@ -62,8 +87,6 @@ ExtensionOptionsInternal.prototype.dispatchEvent =
ExtensionOptionsInternal.prototype.handleExtensionOptionsAttributeMutation =
function(name, oldValue, newValue) {
- if (name != 'extension')
- return;
// We treat null attribute (attribute removed) and the empty string as
// one case.
oldValue = oldValue || '';
@@ -71,13 +94,22 @@ ExtensionOptionsInternal.prototype.handleExtensionOptionsAttributeMutation =
if (oldValue === newValue)
return;
- this.extensionId = newValue;
- // Create new guest view if one hasn't been created for this element.
- if (!this.instanceId && this.parseExtensionAttribute())
- this.init();
- // TODO(ericzeng): Implement navigation to another guest view if we want
- // that functionality.
+ if (name == 'extension') {
+ this.extensionId = newValue;
+ // Create new guest view if one hasn't been created for this element.
+ if (!this.instanceId && this.parseExtensionAttribute())
+ this.init();
+ // TODO(ericzeng): Implement navigation to another guest view if we want
+ // that functionality.
+ return;
+ }
+
+ if (this.browserPluginNode.hasOwnProperty(name)) {
+ this.browserPluginNode[name] = newValue;
+ } else {
+ this.browserPluginNode.setAttribute(name, newValue);
+ }
};
ExtensionOptionsInternal.prototype.init = function() {
@@ -91,6 +123,11 @@ ExtensionOptionsInternal.prototype.init = function() {
this.createGuest();
};
+ExtensionOptionsInternal.prototype.onSizeChanged = function(width, height) {
+ this.browserPluginNode.style.width = width + 'px';
+ this.browserPluginNode.style.height = height + 'px';
+};
+
ExtensionOptionsInternal.prototype.parseExtensionAttribute = function() {
if (this.extensionoptionsNode.hasAttribute('extension')) {
var extensionId = this.extensionoptionsNode.getAttribute('extension');
@@ -127,8 +164,30 @@ ExtensionOptionsInternal.prototype.setupEventProperty = function(eventName) {
};
ExtensionOptionsInternal.prototype.setupNodeProperties = function() {
+ $Array.forEach(EXTENSION_OPTIONS_ATTRIBUTES, function(attributeName) {
+ Object.defineProperty(this.extensionoptionsNode, attributeName, {
+ get: function() {
+ if (this.browserPluginNode.hasOwnProperty(attributeName)) {
+ return this.browserPluginNode[attributeName];
+ } else {
not at google - send to devlin 2014/07/30 17:44:57 no else after return.
ericzeng 2014/07/30 23:29:26 Done.
+ return this.browserPluginNode.getAttribute(attributeName);
+ }
+ },
+ set: function(value) {
+ if (this.browserPluginNode.hasOwnProperty(attributeName)) {
+ // Give the BrowserPlugin first stab at the attribute so that it can
+ // throw an exception if there is a problem. This attribute will then
+ // be propagated back to the <extensionoptions>.
+ this.browserPluginNode[attributeName] = value;
+ } else {
+ this.browserPluginNode.setAttribute(attributeName, value);
+ }
+ },
+ enumerable: true
+ });
+ }, this);
+
var self = this;
- this.extensionId = this.extensionoptionsNode.getAttribute('extension');
Object.defineProperty(this.extensionoptionsNode, 'extension', {
get: function() {
return self.extensionId;

Powered by Google App Engine
This is Rietveld 408576698