summaryrefslogtreecommitdiff
path: root/chromium/components/guest_view/browser/guest_view_message_filter.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/guest_view/browser/guest_view_message_filter.cc')
-rw-r--r--chromium/components/guest_view/browser/guest_view_message_filter.cc177
1 files changed, 0 insertions, 177 deletions
diff --git a/chromium/components/guest_view/browser/guest_view_message_filter.cc b/chromium/components/guest_view/browser/guest_view_message_filter.cc
deleted file mode 100644
index 9a762e36d22..00000000000
--- a/chromium/components/guest_view/browser/guest_view_message_filter.cc
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2015 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 "components/guest_view/browser/guest_view_message_filter.h"
-
-#include <memory>
-
-#include "base/memory/singleton.h"
-#include "components/guest_view/browser/bad_message.h"
-#include "components/guest_view/browser/guest_view_base.h"
-#include "components/guest_view/browser/guest_view_manager.h"
-#include "components/guest_view/browser/guest_view_manager_delegate.h"
-#include "components/guest_view/common/guest_view_messages.h"
-#include "components/keyed_service/content/browser_context_keyed_service_shutdown_notifier_factory.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
-#include "ipc/ipc_message_macros.h"
-
-using content::BrowserContext;
-using content::BrowserThread;
-using content::RenderFrameHost;
-using content::WebContents;
-
-namespace guest_view {
-
-namespace {
-
-class ShutdownNotifierFactory
- : public BrowserContextKeyedServiceShutdownNotifierFactory {
- public:
- static ShutdownNotifierFactory* GetInstance() {
- return base::Singleton<ShutdownNotifierFactory>::get();
- }
-
- private:
- friend struct base::DefaultSingletonTraits<ShutdownNotifierFactory>;
-
- ShutdownNotifierFactory()
- : BrowserContextKeyedServiceShutdownNotifierFactory(
- "GuestViewMessageFilter") {}
- ~ShutdownNotifierFactory() override = default;
-};
-
-} // namespace
-
-GuestViewMessageFilter::GuestViewMessageFilter(
- const uint32_t* message_classes_to_filter,
- size_t num_message_classes_to_filter,
- int render_process_id,
- BrowserContext* context)
- : BrowserMessageFilter(message_classes_to_filter,
- num_message_classes_to_filter),
- render_process_id_(render_process_id),
- browser_context_(context) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- browser_context_shutdown_subscription_ =
- ShutdownNotifierFactory::GetInstance()->Get(context)->Subscribe(
- base::BindRepeating(&GuestViewMessageFilter::OnBrowserContextShutdown,
- base::Unretained(this)));
-}
-
-GuestViewMessageFilter::~GuestViewMessageFilter() {
- // The filter is destroyed on the UI thread as
- // |browser_context_shutdown_subscription_| was created there.
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-}
-
-void GuestViewMessageFilter::EnsureShutdownNotifierFactoryBuilt() {
- ShutdownNotifierFactory::GetInstance();
-}
-
-void GuestViewMessageFilter::OnBrowserContextShutdown() {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- browser_context_ = nullptr;
- browser_context_shutdown_subscription_ = {};
-}
-
-GuestViewManager* GuestViewMessageFilter::GetOrCreateGuestViewManager() {
- DCHECK(browser_context_);
- auto* manager = GuestViewManager::FromBrowserContext(browser_context_);
- if (!manager) {
- manager = GuestViewManager::CreateWithDelegate(
- browser_context_, std::make_unique<GuestViewManagerDelegate>());
- }
- return manager;
-}
-
-GuestViewManager* GuestViewMessageFilter::GetGuestViewManagerOrKill() {
- DCHECK(browser_context_);
- auto* manager = GuestViewManager::FromBrowserContext(browser_context_);
- if (!manager) {
- bad_message::ReceivedBadMessage(
- this, bad_message::GVMF_UNEXPECTED_MESSAGE_BEFORE_GVM_CREATION);
- }
- return manager;
-}
-
-void GuestViewMessageFilter::OverrideThreadForMessage(
- const IPC::Message& message,
- BrowserThread::ID* thread) {
- if (IPC_MESSAGE_CLASS(message) == GuestViewMsgStart)
- *thread = BrowserThread::UI;
-}
-
-void GuestViewMessageFilter::OnDestruct() const {
- BrowserThread::DeleteOnUIThread::Destruct(this);
-}
-
-bool GuestViewMessageFilter::OnMessageReceived(const IPC::Message& message) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(GuestViewMessageFilter, message)
- IPC_MESSAGE_HANDLER(GuestViewHostMsg_AttachToEmbedderFrame,
- OnAttachToEmbedderFrame)
- IPC_MESSAGE_HANDLER(GuestViewHostMsg_ViewCreated, OnViewCreated)
- IPC_MESSAGE_HANDLER(GuestViewHostMsg_ViewGarbageCollected,
- OnViewGarbageCollected)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
-void GuestViewMessageFilter::OnViewCreated(int view_instance_id,
- const std::string& view_type) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- if (!browser_context_)
- return;
- GetOrCreateGuestViewManager()->ViewCreated(render_process_id_,
- view_instance_id, view_type);
-}
-
-void GuestViewMessageFilter::OnViewGarbageCollected(int view_instance_id) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- if (!browser_context_)
- return;
- GetOrCreateGuestViewManager()->ViewGarbageCollected(render_process_id_,
- view_instance_id);
-}
-
-void GuestViewMessageFilter::OnAttachToEmbedderFrame(
- int embedder_local_render_frame_id,
- int element_instance_id,
- int guest_instance_id,
- const base::DictionaryValue& params) {
- if (!browser_context_)
- return;
-
- // We should have a GuestViewManager at this point. If we don't then the
- // embedder is misbehaving.
- auto* manager = GetGuestViewManagerOrKill();
- if (!manager)
- return;
-
- content::WebContents* guest_web_contents =
- manager->GetGuestByInstanceIDSafely(guest_instance_id,
- render_process_id_);
- if (!guest_web_contents)
- return;
-
- auto* guest = GuestViewBase::FromWebContents(guest_web_contents);
- content::WebContents* owner_web_contents = guest->owner_web_contents();
- DCHECK(owner_web_contents);
- auto* embedder_frame = RenderFrameHost::FromID(
- render_process_id_, embedder_local_render_frame_id);
-
- // Update the guest manager about the attachment.
- // This sets up the embedder and guest pairing information inside
- // the manager.
- manager->AttachGuest(render_process_id_, element_instance_id,
- guest_instance_id, params);
-
- guest->AttachToOuterWebContentsFrame(embedder_frame, element_instance_id,
- false /* is_full_page_plugin */);
-}
-
-} // namespace guest_view