| // Copyright 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. |
| |
| #include "extensions/renderer/guest_view/guest_view_container.h" |
| |
| #include "components/guest_view/common/guest_view_constants.h" |
| #include "components/guest_view/common/guest_view_messages.h" |
| #include "content/public/renderer/render_frame.h" |
| #include "content/public/renderer/render_frame_observer.h" |
| #include "content/public/renderer/render_view.h" |
| #include "extensions/common/guest_view/extensions_guest_view_messages.h" |
| |
| namespace extensions { |
| |
| class GuestViewContainer::RenderFrameLifetimeObserver |
| : public content::RenderFrameObserver { |
| public: |
| RenderFrameLifetimeObserver(GuestViewContainer* container, |
| content::RenderFrame* render_frame); |
| |
| // content::RenderFrameObserver overrides. |
| void OnDestruct() override; |
| |
| private: |
| GuestViewContainer* container_; |
| |
| DISALLOW_COPY_AND_ASSIGN(RenderFrameLifetimeObserver); |
| }; |
| |
| GuestViewContainer::RenderFrameLifetimeObserver::RenderFrameLifetimeObserver( |
| GuestViewContainer* container, |
| content::RenderFrame* render_frame) |
| : content::RenderFrameObserver(render_frame), |
| container_(container) {} |
| |
| void GuestViewContainer::RenderFrameLifetimeObserver::OnDestruct() { |
| container_->RenderFrameDestroyed(); |
| } |
| |
| GuestViewContainer::GuestViewContainer(content::RenderFrame* render_frame) |
| : element_instance_id_(guest_view::kInstanceIDNone), |
| render_frame_(render_frame) { |
| render_frame_lifetime_observer_.reset( |
| new RenderFrameLifetimeObserver(this, render_frame_)); |
| } |
| |
| GuestViewContainer::~GuestViewContainer() {} |
| |
| // static. |
| bool GuestViewContainer::HandlesMessage(const IPC::Message& msg) { |
| switch (msg.type()) { |
| case ExtensionsGuestViewMsg_CreateMimeHandlerViewGuestACK::ID: |
| case ExtensionsGuestViewMsg_MimeHandlerViewGuestOnLoadCompleted::ID: |
| case GuestViewMsg_GuestAttached::ID: |
| case GuestViewMsg_GuestDetached::ID: |
| return true; |
| default: |
| return false; |
| } |
| } |
| |
| void GuestViewContainer::RenderFrameDestroyed() { |
| OnRenderFrameDestroyed(); |
| render_frame_ = nullptr; |
| } |
| |
| void GuestViewContainer::SetElementInstanceID(int element_instance_id) { |
| DCHECK_EQ(element_instance_id_, guest_view::kInstanceIDNone); |
| element_instance_id_ = element_instance_id; |
| } |
| |
| } // namespace extensions |