| 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 4108e0eeaae6aac90fc3b6bd9bf223ee1fda912f..dcfefe6e007a784314f8d5cb39ee4462229db8d5 100644 | 
| --- a/extensions/renderer/resources/guest_view/guest_view_container.js | 
| +++ b/extensions/renderer/resources/guest_view/guest_view_container.js | 
| @@ -23,6 +23,7 @@ function GuestViewContainer(element, viewType) { | 
| this.setupAttributes(); | 
|  | 
| privates(this).browserPluginElement = this.createBrowserPluginElement(); | 
| +  this.guest.setBrowserPluginElement(privates(this).browserPluginElement); | 
| this.setupFocusPropagation(); | 
| var shadowRoot = this.element.createShadowRoot(); | 
| shadowRoot.appendChild(privates(this).browserPluginElement); | 
| @@ -91,6 +92,10 @@ GuestViewContainer.prototype.createBrowserPluginElement = function() { | 
| return browserPluginElement; | 
| }; | 
|  | 
| +GuestViewContainer.prototype.getBrowserPluginElement = function() { | 
| +  return privates(this).browserPluginElement; | 
| +}; | 
| + | 
| GuestViewContainer.prototype.setupFocusPropagation = function() { | 
| if (!this.element.hasAttribute('tabIndex')) { | 
| // GuestViewContainer needs a tabIndex in order to be focusable. | 
| @@ -120,22 +125,30 @@ GuestViewContainer.prototype.attachWindow = function() { | 
| return true; | 
| }; | 
|  | 
| +GuestViewContainer.prototype.onInternalInstanceID = function( | 
| +    internalInstanceId) { | 
| +  window.console.log('onInternalInstanceID: ' + internalInstanceId); | 
| +  this.internalInstanceId = internalInstanceId; | 
| + | 
| +  // Track when the element resizes using the element resize callback. | 
| +  GuestViewInternalNatives.RegisterElementResizeCallback( | 
| +      this.internalInstanceId, this.onElementResize.bind(this)); | 
| + | 
| +  window.console.log('this.guest.getId() = ' + | 
| +      this.guest.getId()); | 
| +  if (!this.guest.getId()) { | 
| +    return; | 
| +  } | 
| +  this.guest.attach(this.internalInstanceId, | 
| +                    this.viewInstanceId, | 
| +                    this.buildParams()); | 
| +}; | 
| + | 
| GuestViewContainer.prototype.handleBrowserPluginAttributeMutation = | 
| function(name, oldValue, newValue) { | 
| if (name == 'internalinstanceid' && !oldValue && !!newValue) { | 
| privates(this).browserPluginElement.removeAttribute('internalinstanceid'); | 
| -    this.internalInstanceId = parseInt(newValue); | 
| - | 
| -    // Track when the element resizes using the element resize callback. | 
| -    GuestViewInternalNatives.RegisterElementResizeCallback( | 
| -        this.internalInstanceId, this.onElementResize.bind(this)); | 
| - | 
| -    if (!this.guest.getId()) { | 
| -      return; | 
| -    } | 
| -    this.guest.attach(this.internalInstanceId, | 
| -                      this.viewInstanceId, | 
| -                      this.buildParams()); | 
| +    this.onInternalInstanceID(parseInt(newValue)); | 
| } | 
| }; | 
|  | 
| @@ -175,11 +188,17 @@ GuestViewContainer.prototype.setupAttributes = function() {}; | 
| // Registers the browser plugin <object> custom element. |viewType| is the | 
| // name of the specific guestview container (e.g. 'webview'). | 
| function registerBrowserPluginElement(viewType) { | 
| -  var proto = $Object.create(HTMLElement.prototype); | 
| +  var isSitePerProcess = GuestViewInternalNatives.IsSitePerProcess(); | 
| +  var proto = $Object.create(isSitePerProcess ? HTMLIFrameElement.prototype | 
| +                                              : HTMLElement.prototype); | 
| + | 
| +  window.console.log('isSitePerProcess: ' + isSitePerProcess); | 
|  | 
| proto.createdCallback = function() { | 
| -    this.setAttribute('type', 'application/browser-plugin'); | 
| -    this.setAttribute('id', 'browser-plugin-' + IdGenerator.GetNextId()); | 
| +    if (!isSitePerProcess) { | 
| +      this.setAttribute('type', 'application/browser-plugin'); | 
| +      this.setAttribute('id', 'browser-plugin-' + IdGenerator.GetNextId()); | 
| +    } | 
| this.style.width = '100%'; | 
| this.style.height = '100%'; | 
| }; | 
| @@ -189,17 +208,20 @@ function registerBrowserPluginElement(viewType) { | 
| var unused = this.nonExistentAttribute; | 
| }; | 
|  | 
| -  proto.attributeChangedCallback = function(name, oldValue, newValue) { | 
| -    var internal = privates(this).internal; | 
| -    if (!internal) { | 
| -      return; | 
| -    } | 
| -    internal.handleBrowserPluginAttributeMutation(name, oldValue, newValue); | 
| -  }; | 
| +  if (!isSitePerProcess) { | 
| +    proto.attributeChangedCallback = function(name, oldValue, newValue) { | 
| +      var internal = privates(this).internal; | 
| +      if (!internal) { | 
| +        return; | 
| +      } | 
| +      internal.handleBrowserPluginAttributeMutation(name, oldValue, newValue); | 
| +    }; | 
| +  } | 
|  | 
| +  var options = {prototype: proto}; | 
| +  options.extends = isSitePerProcess ? 'iframe' : 'object'; | 
| GuestViewContainer[viewType + 'BrowserPlugin'] = | 
| -      DocumentNatives.RegisterElement(viewType + 'browserplugin', | 
| -                                      {extends: 'object', prototype: proto}); | 
| +      DocumentNatives.RegisterElement(viewType + 'browserplugin', options); | 
|  | 
| delete proto.createdCallback; | 
| delete proto.attachedCallback; | 
|  |