Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(488)

Unified Diff: components/nacl/browser/nacl_process_host.cc

Issue 2514323004: Convert NaCl renderer-browser messages to mojo. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/nacl/browser/nacl_process_host.h ('k') | components/nacl/browser/pnacl_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/nacl/browser/nacl_process_host.cc
diff --git a/components/nacl/browser/nacl_process_host.cc b/components/nacl/browser/nacl_process_host.cc
index 989de24b838bc903583c3c09e3ceacae8309c453..7ec911be79ab024ca00858eeca3413108fb93c18 100644
--- a/components/nacl/browser/nacl_process_host.cc
+++ b/components/nacl/browser/nacl_process_host.cc
@@ -12,6 +12,7 @@
#include "base/base_switches.h"
#include "base/bind.h"
+#include "base/callback_helpers.h"
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/location.h"
@@ -35,16 +36,15 @@
#include "build/build_config.h"
#include "components/nacl/browser/nacl_browser.h"
#include "components/nacl/browser/nacl_browser_delegate.h"
-#include "components/nacl/browser/nacl_host_message_filter.h"
#include "components/nacl/common/nacl_cmd_line.h"
#include "components/nacl/common/nacl_constants.h"
-#include "components/nacl/common/nacl_host_messages.h"
#include "components/nacl/common/nacl_messages.h"
#include "components/nacl/common/nacl_process_type.h"
#include "components/nacl/common/nacl_switches.h"
#include "components/url_formatter/url_formatter.h"
#include "content/public/browser/browser_child_process_host.h"
#include "content/public/browser/browser_ppapi_host.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/child_process_data.h"
#include "content/public/browser/plugin_service.h"
#include "content/public/browser/render_process_host.h"
@@ -56,6 +56,7 @@
#include "content/public/common/sandboxed_process_launcher_delegate.h"
#include "ipc/ipc_channel.h"
#include "mojo/edk/embedder/embedder.h"
+#include "mojo/public/cpp/system/platform_handle.h"
#include "net/socket/socket_descriptor.h"
#include "ppapi/host/host_factory.h"
#include "ppapi/host/ppapi_host.h"
@@ -205,6 +206,7 @@ NaClProcessHost::NaClProcessHost(
const NaClFileToken& nexe_token,
const std::vector<NaClResourcePrefetchResult>& prefetched_resource_files,
ppapi::PpapiPermissions permissions,
+ int render_process_id,
int render_view_id,
uint32_t permission_bits,
bool uses_nonsfi_mode,
@@ -219,7 +221,6 @@ NaClProcessHost::NaClProcessHost(
#if defined(OS_WIN)
process_launched_by_broker_(false),
#endif
- reply_msg_(NULL),
#if defined(OS_WIN)
debug_exception_handler_requested_(false),
#endif
@@ -229,6 +230,7 @@ NaClProcessHost::NaClProcessHost(
off_the_record_(off_the_record),
process_type_(process_type),
profile_directory_(profile_directory),
+ render_process_id_(render_process_id),
render_view_id_(render_view_id),
weak_factory_(this) {
process_.reset(content::BrowserChildProcessHost::Create(
@@ -283,11 +285,10 @@ NaClProcessHost::~NaClProcessHost() {
FROM_HERE, base::Bind(&CloseFile, base::Passed(std::move(nexe_file_))));
}
- if (reply_msg_) {
+ if (!launch_callback_.is_null()) {
// The process failed to launch for some reason.
// Don't keep the renderer hanging.
- reply_msg_->set_reply_error();
- nacl_host_message_filter_->Send(reply_msg_);
+ SendMessageToRenderer(mojom::NaClLaunchResultPtr(), "");
}
#if defined(OS_WIN)
if (process_launched_by_broker_) {
@@ -350,11 +351,9 @@ void NaClProcessHost::SetPpapiKeepAliveThrottleForTesting(
}
void NaClProcessHost::Launch(
- NaClHostMessageFilter* nacl_host_message_filter,
- IPC::Message* reply_msg,
- const base::FilePath& manifest_path) {
- nacl_host_message_filter_ = nacl_host_message_filter;
- reply_msg_ = reply_msg;
+ const base::FilePath& manifest_path,
+ const mojom::NaClHost::LaunchNaClCallback& callback) {
+ launch_callback_ = callback;
manifest_path_ = manifest_path;
// Do not launch the requested NaCl module if NaCl is marked "unstable" due
@@ -405,7 +404,7 @@ void NaClProcessHost::Launch(
#if defined(OS_CHROMEOS) && \
(defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARMEL))
nonsfi_mode_allowed = NaClBrowser::GetDelegate()->IsNonSfiModeAllowed(
- nacl_host_message_filter->profile_directory(), manifest_url_);
+ profile_directory_, manifest_url_);
#endif
#endif
bool nonsfi_mode_enabled =
@@ -635,30 +634,17 @@ void NaClProcessHost::ReplyToRenderer(
mojo::ScopedMessagePipeHandle ppapi_channel_handle,
mojo::ScopedMessagePipeHandle trusted_channel_handle,
mojo::ScopedMessagePipeHandle manifest_service_channel_handle) {
- // Hereafter, we always send an IPC message with handles created above
- // which, on Windows, are not closable in this process.
- std::string error_message;
- base::SharedMemoryHandle crash_info_shmem_renderer_handle;
- if (!crash_info_shmem_.ShareToProcess(nacl_host_message_filter_->PeerHandle(),
- &crash_info_shmem_renderer_handle)) {
- // On error, we do not send "IPC::ChannelHandle"s to the renderer process.
- // Note that some other FDs/handles still get sent to the renderer, but
- // will be closed there.
- ppapi_channel_handle.reset();
- trusted_channel_handle.reset();
- manifest_service_channel_handle.reset();
- error_message = "ShareToProcess() failed";
- }
-
const ChildProcessData& data = process_->GetData();
SendMessageToRenderer(
- NaClLaunchResult(ppapi_channel_handle.release(),
- trusted_channel_handle.release(),
- manifest_service_channel_handle.release(),
- base::GetProcId(data.handle),
- data.id,
- crash_info_shmem_renderer_handle),
- error_message);
+ mojom::NaClLaunchResult::New(
+ std::move(ppapi_channel_handle),
+ mojo::MakeRequest<mojom::NaClRendererHost>(
+ std::move(trusted_channel_handle)),
+ std::move(manifest_service_channel_handle),
+ base::GetProcId(data.handle), data.id,
+ mojo::WrapSharedMemoryHandle(crash_info_shmem_.TakeHandle(),
+ kNaClCrashInfoShmemSize, false)),
+ "");
// Now that the crash information shmem handles have been shared with the
// plugin and the renderer, the browser can close its handle.
@@ -667,26 +653,18 @@ void NaClProcessHost::ReplyToRenderer(
void NaClProcessHost::SendErrorToRenderer(const std::string& error_message) {
LOG(ERROR) << "NaCl process launch failed: " << error_message;
- SendMessageToRenderer(NaClLaunchResult(), error_message);
+ SendMessageToRenderer(mojom::NaClLaunchResultPtr(), error_message);
}
-void NaClProcessHost::SendMessageToRenderer(
- const NaClLaunchResult& result,
- const std::string& error_message) {
- DCHECK(nacl_host_message_filter_.get());
- DCHECK(reply_msg_);
- if (nacl_host_message_filter_.get() == NULL || reply_msg_ == NULL) {
+void NaClProcessHost::SendMessageToRenderer(mojom::NaClLaunchResultPtr result,
+ const std::string& error_message) {
+ DCHECK(!launch_callback_.is_null());
+ if (launch_callback_.is_null()) {
// As DCHECKed above, this case should not happen in general.
- // Though, in this case, unfortunately there is no proper way to release
- // resources which are already created in |result|. We just give up on
- // releasing them, and leak them.
return;
}
- NaClHostMsg_LaunchNaCl::WriteReplyParams(reply_msg_, result, error_message);
- nacl_host_message_filter_->Send(reply_msg_);
- nacl_host_message_filter_ = NULL;
- reply_msg_ = NULL;
+ base::ResetAndReturn(&launch_callback_).Run(std::move(result), error_message);
}
void NaClProcessHost::SetDebugStubPort(int port) {
@@ -927,17 +905,13 @@ bool NaClProcessHost::StartPPAPIProxy(
// browser process.
ppapi_host_.reset(content::BrowserPpapiHost::CreateExternalPluginProcess(
ipc_proxy_channel_.get(), // sender
- permissions_,
- process_->GetData().handle,
- ipc_proxy_channel_.get(),
- nacl_host_message_filter_->render_process_id(),
- render_view_id_,
- profile_directory_));
+ permissions_, process_->GetData().handle, ipc_proxy_channel_.get(),
+ render_process_id_, render_view_id_, profile_directory_));
ppapi_host_->SetOnKeepaliveCallback(
NaClBrowser::GetDelegate()->GetOnKeepaliveCallback());
ppapi::PpapiNaClPluginArgs args;
- args.off_the_record = nacl_host_message_filter_->off_the_record();
+ args.off_the_record = off_the_record_;
args.permissions = permissions_;
args.keepalive_throttle_interval_milliseconds =
keepalive_throttle_interval_milliseconds_;
« no previous file with comments | « components/nacl/browser/nacl_process_host.h ('k') | components/nacl/browser/pnacl_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698