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

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

Issue 11233065: Rename <browser> shim to <webview> (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged with ToT. No longer exposed to Extensions Created 8 years, 2 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
« no previous file with comments | « chrome/renderer/extensions/dispatcher.cc ('k') | chrome/renderer/resources/extensions/browser_tag_old.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/resources/extensions/browser_tag.js
diff --git a/chrome/renderer/resources/extensions/browser_tag.js b/chrome/renderer/resources/extensions/browser_tag.js
deleted file mode 100644
index f72af00f94073030660d61a78dab400bd42dbf74..0000000000000000000000000000000000000000
--- a/chrome/renderer/resources/extensions/browser_tag.js
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (c) 2012 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.
-
-// Shim that simulates a <browser> tag via Mutation Observers.
-//
-// The actual tag is implemented via the browser plugin. The internals of this
-// are hidden via Shadow DOM.
-
-var BROWSER_TAG_ATTRIBUTES = ['src', 'width', 'height'];
-
-var BROWSER_TAG_READONLY_ATTRIBUTES = ['contentWindow'];
-
-// All exposed api methods for <browser>, these are forwarded to the browser
-// plugin.
-var BROWSER_TAG_API_METHODS = [
- 'addEventListener',
- 'back',
- 'canGoBack',
- 'canGoForward',
- 'forward',
- 'getProcessId',
- 'go',
- 'reload',
- 'removeEventListener',
- 'stop',
- 'terminate'
- ];
-
-window.addEventListener('DOMContentLoaded', function() {
- // Handle <browser> tags already in the document.
- var browserNodes = document.body.querySelectorAll('browser');
- for (var i = 0, browserNode; browserNode = browserNodes[i]; i++) {
- new BrowserTag(browserNode);
- }
-
- // Handle <browser> tags added later.
- var documentObserver = new WebKitMutationObserver(function(mutations) {
- mutations.forEach(function(mutation) {
- for (var i = 0, addedNode; addedNode = mutation.addedNodes[i]; i++) {
- if (addedNode.tagName == 'BROWSER') {
- new BrowserTag(addedNode);
- }
- }
- });
- });
- documentObserver.observe(document, {subtree: true, childList: true});
-});
-
-/**
- * @constructor
- */
-function BrowserTag(node) {
- this.node_ = node;
- var shadowRoot = new WebKitShadowRoot(node);
-
- this.objectNode_ = document.createElement('object');
- this.objectNode_.type = 'application/browser-plugin';
- BROWSER_TAG_ATTRIBUTES.forEach(this.copyAttribute_, this);
-
- shadowRoot.appendChild(this.objectNode_);
-
- // this.objectNode_[apiMethod] are defined after the shadow object is appended
- // to the shadow root.
- BROWSER_TAG_API_METHODS.forEach(function(apiMethod) {
- node[apiMethod] = this.objectNode_[apiMethod].bind(this.objectNode_);
- }, this);
-
- // Map attribute modifications on the <browser> tag to changes on the
- // underlying <object> node.
- var handleMutation = this.handleMutation_.bind(this);
- var observer = new WebKitMutationObserver(function(mutations) {
- mutations.forEach(handleMutation);
- });
- observer.observe(
- this.node_,
- {attributes: true, attributeFilter: BROWSER_TAG_ATTRIBUTES});
-
- var objectNode = this.objectNode_;
- // Expose getters and setters for the attributes.
- BROWSER_TAG_ATTRIBUTES.forEach(function(attributeName) {
- Object.defineProperty(this.node_, attributeName, {
- get: function() {
- if (attributeName == 'src') {
- // Always read src attribute from the plugin <object> since: a) It can
- // have different value when empty src is set. b) BrowserPlugin
- // updates its src attribute on guest-initiated navigations.
- return objectNode.src;
- }
- var value = node.getAttribute(attributeName);
- var numericValue = parseInt(value, 10);
- return isNaN(numericValue) ? value : numericValue;
- },
- set: function(value) {
- node.setAttribute(attributeName, value);
- },
- enumerable: true
- });
- }, this);
-
- // We cannot use {writable: true} property descriptor because we want dynamic
- // getter value.
- BROWSER_TAG_READONLY_ATTRIBUTES.forEach(function(attributeName) {
- Object.defineProperty(this.node_, attributeName, {
- get: function() {
- // Read these attributes from the plugin <object>.
- return objectNode[attributeName];
- },
- // No setter.
- enumerable: true
- })
- }, this);
-};
-
-/**
- * @private
- */
-BrowserTag.prototype.handleMutation_ = function(mutation) {
- switch (mutation.attributeName) {
- case 'src':
- // We need to set .src directly on the shadow element so that
- // BrowserPluginBindings catches this as src attribute mutation. The
- // bindings would catch 'SetAttribute' method call with src as argument
- // otherwise.
- this.objectNode_.src = this.node_.getAttribute('src');
- break;
- default:
- this.copyAttribute_(mutation.attributeName);
- break;
- }
-};
-
-/**
- * @private
- */
-BrowserTag.prototype.copyAttribute_ = function(attributeName) {
- this.objectNode_.setAttribute(
- attributeName, this.node_.getAttribute(attributeName));
-};
« no previous file with comments | « chrome/renderer/extensions/dispatcher.cc ('k') | chrome/renderer/resources/extensions/browser_tag_old.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698