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

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

Issue 378783002: Initial implementation of the <extensionoptions> GuestView tag (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix problems with attaching guest view, add extension function dispatcher 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/app_view.js b/chrome/renderer/resources/extensions/extension_options.js
similarity index 53%
copy from chrome/renderer/resources/extensions/app_view.js
copy to chrome/renderer/resources/extensions/extension_options.js
index 03174c62d6c627a052518cf5515552cd844bed0e..724ac40979ecf98a2be3f6d605902bb6f0a3d476 100644
--- a/chrome/renderer/resources/extensions/app_view.js
+++ b/chrome/renderer/resources/extensions/extension_options.js
@@ -1,4 +1,4 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
+// 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.
@@ -7,48 +7,55 @@ var GuestViewInternal =
require('binding').Binding.create('guestViewInternal').generate();
var IdGenerator = requireNative('id_generator');
-function AppViewInternal(appviewNode) {
- privates(appviewNode).internal = this;
- this.appviewNode = appviewNode;
+function ExtensionOptionsInternal(extensionoptionsNode) {
+ privates(extensionoptionsNode).internal = this;
+ this.extensionoptionsNode = extensionoptionsNode;
this.browserPluginNode = this.createBrowserPluginNode();
- var shadowRoot = this.appviewNode.createShadowRoot();
+ var shadowRoot = this.extensionoptionsNode.createShadowRoot();
shadowRoot.appendChild(this.browserPluginNode);
this.viewInstanceId = IdGenerator.GetNextId();
+
+ if (this.parseExtensionAttribute()) {
+ this.createGuest();
+ }
}
-AppViewInternal.prototype.createBrowserPluginNode = function() {
- // We create BrowserPlugin as a custom element in order to observe changes
- // to attributes synchronously.
- var browserPluginNode = new AppViewInternal.BrowserPlugin();
+ExtensionOptionsInternal.prototype.createBrowserPluginNode = function() {
+ var browserPluginNode = new ExtensionOptionsInternal.BrowserPlugin();
privates(browserPluginNode).internal = this;
return browserPluginNode;
-};
+}
-AppViewInternal.prototype.connect = function(src, callback) {
+ExtensionOptionsInternal.prototype.parseExtensionAttribute = function() {
+ if (this.extensionoptionsNode.hasAttribute('extension')) {
+ this.extensionId = this.extensionoptionsNode.getAttribute('extension');
+ return true;
+ }
+ return false;
+}
+
+ExtensionOptionsInternal.prototype.createGuest = function() {
var params = {
+ 'extensionId': this.extensionId,
};
var self = this;
GuestViewInternal.createGuest(
- 'appview',
- params,
- function(instanceId) {
- self.attachWindow(instanceId, src);
- if (callback) {
- callback();
- }
- }
- );
+ 'extensionoptions',
+ params,
+ function(instanceId) {
+ self.instanceId = instanceId;
+ self.attachWindow(instanceId);
+ });
};
-AppViewInternal.prototype.attachWindow = function(instanceId, src) {
+ExtensionOptionsInternal.prototype.attachWindow = function(instanceId) {
this.instanceId = instanceId;
var params = {
'instanceId': this.viewInstanceId,
- 'src': src
- };
+ }
return this.browserPluginNode['-internal-attach'](instanceId, params);
-};
+}
function registerBrowserPluginElement() {
var proto = Object.create(HTMLObjectElement.prototype);
@@ -64,36 +71,26 @@ function registerBrowserPluginElement() {
var unused = this.nonExistentAttribute;
};
- AppViewInternal.BrowserPlugin =
- DocumentNatives.RegisterElement('appplugin', {extends: 'object',
- prototype: proto});
-
+ ExtensionOptionsInternal.BrowserPlugin =
+ DocumentNatives.RegisterElement("extensionoptionsplugin",
+ {extends: 'object', prototype: proto});
delete proto.createdCallback;
delete proto.attachedCallback;
- delete proto.detachedCallback;
- delete proto.attributeChangedCallback;
Fady Samuel 2014/07/11 21:08:05 You want to delete these callbacks too.
ericzeng 2014/07/12 00:10:05 Done.
}
-function registerAppViewElement() {
+function registerExtensionOptionsElement() {
var proto = Object.create(HTMLElement.prototype);
proto.createdCallback = function() {
- new AppViewInternal(this);
- };
-
- proto.connect = function() {
- var internal = privates(this).internal;
- $Function.apply(internal.connect, internal, arguments);
+ new ExtensionOptionsInternal(this);
}
- window.AppView =
- DocumentNatives.RegisterElement('appview', {prototype: proto});
+
+ window.ExtensionOptions =
+ DocumentNatives.RegisterElement('extensionoptions', {prototype: proto});
// Delete the callbacks so developers cannot call them and produce unexpected
// behavior.
delete proto.createdCallback;
- delete proto.attachedCallback;
- delete proto.detachedCallback;
- delete proto.attributeChangedCallback;
Fady Samuel 2014/07/11 21:08:05 You want to delete these callbacks too.
ericzeng 2014/07/12 00:10:05 Done.
}
var useCapture = true;
@@ -102,6 +99,6 @@ window.addEventListener('readystatechange', function listener(event) {
return;
registerBrowserPluginElement();
- registerAppViewElement();
+ registerExtensionOptionsElement();
window.removeEventListener(event.type, listener, useCapture);
}, useCapture);

Powered by Google App Engine
This is Rietveld 408576698