Index: extensions/renderer/resources/guest_view/guest_view_container.js |
diff --git a/extensions/renderer/resources/guest_view/guest_view_container.js b/extensions/renderer/resources/guest_view/guest_view_container.js |
index 3a3f837c7ad46d64f0183113d3aa63acc50158d7..35c6991039cec6152b94e483f75a1c3e0cc547fa 100644 |
--- a/extensions/renderer/resources/guest_view/guest_view_container.js |
+++ b/extensions/renderer/resources/guest_view/guest_view_container.js |
@@ -12,6 +12,7 @@ var IdGenerator = requireNative('id_generator'); |
function GuestViewContainer(element, viewType) { |
privates(element).internal = this; |
+ this.attributes = {}; |
this.element = element; |
this.elementAttached = false; |
this.viewInstanceId = IdGenerator.GetNextId(); |
@@ -19,10 +20,10 @@ function GuestViewContainer(element, viewType) { |
this.setupGuestProperty(); |
this.guest = new GuestView(viewType); |
+ this.setupAttributes(); |
privates(this).browserPluginElement = this.createBrowserPluginElement(); |
this.setupFocusPropagation(); |
- |
var shadowRoot = this.element.createShadowRoot(); |
shadowRoot.appendChild(privates(this).browserPluginElement); |
} |
@@ -168,11 +169,9 @@ GuestViewContainer.prototype.dispatchEvent = function(event) { |
// Implemented by the specific view type, if needed. |
GuestViewContainer.prototype.buildContainerParams = function() { return {}; }; |
-// TODO(paulmeyer): remove once all view types use attribute objects. |
-GuestViewContainer.prototype.handleAttributeMutation = function( |
- attributeName, oldValue, newValue) {}; |
GuestViewContainer.prototype.onElementAttached = function() {}; |
GuestViewContainer.prototype.onElementDetached = function() {}; |
+GuestViewContainer.prototype.setupAttributes = function() {}; |
// Registers the browser plugin <object> custom element. |viewType| is the |
// name of the specific guestview container (e.g. 'webview'). |
@@ -230,10 +229,12 @@ function registerGuestViewElement(guestViewContainerType) { |
proto.attributeChangedCallback = function(name, oldValue, newValue) { |
var internal = privates(this).internal; |
- if (!internal) { |
+ if (!internal || !internal.attributes[name]) { |
return; |
} |
- internal.handleAttributeMutation(name, oldValue, newValue); |
+ |
+ // Let the changed attribute handle its own mutation. |
+ internal.attributes[name].maybeHandleMutation(oldValue, newValue); |
}; |
proto.detachedCallback = function() { |