| // Copyright (c) 2012 The Chromium Embedded Framework Authors. |
| // Portions (c) 2011 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 "libcef/browser/browser_message_filter.h" |
| |
| #include "libcef/browser/browser_info_manager.h" |
| #include "libcef/browser/origin_whitelist_impl.h" |
| #include "libcef/common/cef_messages.h" |
| #include "libcef/common/content_client.h" |
| #include "libcef/common/values_impl.h" |
| |
| #include "base/bind.h" |
| #include "base/compiler_specific.h" |
| #include "content/public/common/child_process_host.h" |
| |
| CefBrowserMessageFilter::CefBrowserMessageFilter(int render_process_id) |
| : content::BrowserMessageFilter(ExtensionMsgStart), |
| render_process_id_(render_process_id) {} |
| |
| CefBrowserMessageFilter::~CefBrowserMessageFilter() {} |
| |
| void CefBrowserMessageFilter::OnFilterRemoved() { |
| render_process_id_ = content::ChildProcessHost::kInvalidUniqueID; |
| content::BrowserMessageFilter::OnFilterRemoved(); |
| } |
| |
| bool CefBrowserMessageFilter::OnMessageReceived(const IPC::Message& message) { |
| bool handled = true; |
| |
| IPC_BEGIN_MESSAGE_MAP(CefBrowserMessageFilter, message) |
| IPC_MESSAGE_HANDLER(CefProcessHostMsg_GetNewRenderThreadInfo, |
| OnGetNewRenderThreadInfo) |
| IPC_MESSAGE_HANDLER_DELAY_REPLY(CefProcessHostMsg_GetNewBrowserInfo, |
| OnGetNewBrowserInfo) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| } |
| |
| void CefBrowserMessageFilter::OnGetNewRenderThreadInfo( |
| CefProcessHostMsg_GetNewRenderThreadInfo_Params* params) { |
| GetCrossOriginWhitelistEntries(¶ms->cross_origin_whitelist_entries); |
| |
| CefRefPtr<CefApp> app = CefContentClient::Get()->application(); |
| if (app.get()) { |
| CefRefPtr<CefBrowserProcessHandler> handler = |
| app->GetBrowserProcessHandler(); |
| if (handler.get()) { |
| CefRefPtr<CefListValueImpl> listValuePtr( |
| new CefListValueImpl(¶ms->extra_info, false, false)); |
| handler->OnRenderProcessThreadCreated(listValuePtr.get()); |
| listValuePtr->Detach(nullptr); |
| } |
| } |
| } |
| |
| void CefBrowserMessageFilter::OnGetNewBrowserInfo(int render_frame_routing_id, |
| IPC::Message* reply_msg) { |
| if (render_process_id_ != content::ChildProcessHost::kInvalidUniqueID) { |
| CefBrowserInfoManager::GetInstance()->OnGetNewBrowserInfo( |
| render_process_id_, render_frame_routing_id, reply_msg); |
| } else { |
| delete reply_msg; |
| } |
| } |