| 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 b459db7c136663deaba18a4427ad5c8edec157db..006ce49602719b6bedeaff7449c7484298cf1269 100644
|
| --- a/chrome/renderer/resources/extensions/extension_options.js
|
| +++ b/chrome/renderer/resources/extensions/extension_options.js
|
| @@ -26,6 +26,13 @@ function ExtensionOptionsInternal(extensionoptionsNode) {
|
|
|
| // on* Event handlers.
|
| this.eventHandlers = {};
|
| +
|
| + // setupEventProperty is normally called in extension_options_events.js to
|
| + // register events, but the createfailed event is registered here because
|
| + // the event is fired from here instead of through
|
| + // extension_options_events.js.
|
| + this.setupEventProperty('createfailed');
|
| +
|
| new ExtensionOptionsEvents(this, this.viewInstanceId);
|
|
|
| this.setupNodeProperties();
|
| @@ -62,7 +69,11 @@ ExtensionOptionsInternal.prototype.createGuest = function() {
|
| params,
|
| function(instanceId) {
|
| if (instanceId == 0) {
|
| + // Fire a createfailed event here rather than in ExtensionOptionsGuest
|
| + // because the guest will not be created, and cannot fire an event.
|
| this.initCalled = false;
|
| + var createFailedEvent = new Event('createfailed', { bubbles: true });
|
| + this.dispatchEvent(createFailedEvent);
|
| } else {
|
| this.attachWindow(instanceId);
|
| GuestViewInternal.setAutoSize(this.instanceId, {
|
| @@ -142,13 +153,8 @@ ExtensionOptionsInternal.prototype.onSizeChanged = function(width, height) {
|
|
|
| ExtensionOptionsInternal.prototype.parseExtensionAttribute = function() {
|
| if (this.extensionoptionsNode.hasAttribute('extension')) {
|
| - var extensionId = this.extensionoptionsNode.getAttribute('extension');
|
| - // Only allow extensions to embed their own options page (if it has one).
|
| - if (chrome.runtime.id == extensionId &&
|
| - chrome.runtime.getManifest().hasOwnProperty('options_page')) {
|
| - this.extensionId = extensionId;
|
| - return true;
|
| - }
|
| + this.extensionId = this.extensionoptionsNode.getAttribute('extension');
|
| + return true;
|
| }
|
| return false;
|
| };
|
| @@ -157,20 +163,19 @@ ExtensionOptionsInternal.prototype.parseExtensionAttribute = function() {
|
| // an event handler.
|
| ExtensionOptionsInternal.prototype.setupEventProperty = function(eventName) {
|
| var propertyName = 'on' + eventName.toLowerCase();
|
| - var self = this;
|
| var extensionoptionsNode = this.extensionoptionsNode;
|
| Object.defineProperty(extensionoptionsNode, propertyName, {
|
| get: function() {
|
| - return self.eventHandlers[propertyName];
|
| - },
|
| + return this.eventHandlers[propertyName];
|
| + }.bind(this),
|
| set: function(value) {
|
| - if (self.eventHandlers[propertyName])
|
| + if (this.eventHandlers[propertyName])
|
| extensionoptionsNode.removeEventListener(
|
| - eventName, self.eventHandlers[propertyName]);
|
| - self.eventHandlers[propertyName] = value;
|
| + eventName, this.eventHandlers[propertyName]);
|
| + this.eventHandlers[propertyName] = value;
|
| if (value)
|
| extensionoptionsNode.addEventListener(eventName, value);
|
| - },
|
| + }.bind(this),
|
| enumerable: true
|
| });
|
| };
|
|
|