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

Unified Diff: content/renderer/pepper/ppb_broker_impl.cc

Issue 22300003: Move broker creation out of PepperHelperImpl to PPB_Broker_Impl in the effort to eliminate PepperHe… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 4 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
Index: content/renderer/pepper/ppb_broker_impl.cc
===================================================================
--- content/renderer/pepper/ppb_broker_impl.cc (revision 215720)
+++ content/renderer/pepper/ppb_broker_impl.cc (working copy)
@@ -5,12 +5,15 @@
#include "content/renderer/pepper/ppb_broker_impl.h"
#include "base/logging.h"
+#include "content/common/view_messages.h"
#include "content/renderer/pepper/common.h"
#include "content/renderer/pepper/host_globals.h"
#include "content/renderer/pepper/pepper_broker.h"
#include "content/renderer/pepper/pepper_helper_impl.h"
#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
#include "content/renderer/pepper/plugin_module.h"
+#include "content/renderer/render_thread_impl.h"
+#include "content/renderer/render_view_impl.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/shared_impl/platform_file.h"
#include "third_party/WebKit/public/web/WebDocument.h"
@@ -29,7 +32,9 @@
: Resource(::ppapi::OBJECT_IS_IMPL, instance),
broker_(NULL),
connect_callback_(),
- pipe_handle_(PlatformFileToInt(base::kInvalidPlatformFileValue)) {
+ pipe_handle_(PlatformFileToInt(base::kInvalidPlatformFileValue)),
+ routing_id_(RenderThreadImpl::current()->GenerateRoutingID()) {
+ ChildThread::current()->AddRoute(routing_id_, this);
}
PPB_Broker_Impl::~PPB_Broker_Impl() {
@@ -40,6 +45,7 @@
// The plugin owns the handle.
pipe_handle_ = PlatformFileToInt(base::kInvalidPlatformFileValue);
+ ChildThread::current()->RemoveRoute(routing_id_);
}
PPB_Broker_API* PPB_Broker_Impl::AsPPB_Broker_API() {
@@ -59,6 +65,8 @@
HostGlobals::Get()->GetInstance(pp_instance());
if (!plugin_instance)
return PP_ERROR_FAILED;
+ PluginModule* module = plugin_instance->module();
+ const base::FilePath& broker_path = module->path();
// The callback must be populated now in case we are connected to the broker
// and BrokerConnected is called before ConnectToBroker returns.
@@ -66,12 +74,26 @@
// ConnectToBroker fails.
connect_callback_ = connect_callback;
- broker_ = plugin_instance->helper()->ConnectToBroker(this);
+ broker_ = module->GetBroker();
if (!broker_) {
- connect_callback_->Abort();
- return PP_ERROR_FAILED;
+ broker_ = new PepperBroker(module);
+
+ // Have the browser start the broker process for us.
+ RenderThreadImpl::current()->Send(new ViewHostMsg_OpenChannelToPpapiBroker(
+ routing_id_, broker_path));
}
+ RenderThreadImpl::current()->Send(
+ new ViewHostMsg_RequestPpapiBrokerPermission(
+ plugin_instance->render_view()->GetRoutingID(),
+ routing_id_,
+ GetDocumentUrl(),
+ broker_path));
+
+ // Adds a reference, ensuring that the broker is not deleted when
+ // |broker| goes out of scope.
+ broker_->AddPendingConnect(this);
dmichael (off chromium) 2013/08/06 18:43:31 The comment is not quite right now; broker_ is jus
jam 2013/08/06 19:34:09 I believe that comment (which I moved) is referrin
dmichael(do not use this one) 2013/08/06 19:48:05 The old comment referred to a stack variable named
jam 2013/08/06 19:55:45 ah, I missed that. i'll update in my next cl, than
+
return PP_OK_COMPLETIONPENDING;
}
@@ -103,4 +125,26 @@
connect_callback_->Run(result);
}
+bool PPB_Broker_Impl::OnMessageReceived(const IPC::Message& message) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(PPB_Broker_Impl, message)
+ IPC_MESSAGE_HANDLER(ViewMsg_PpapiBrokerChannelCreated,
+ OnPpapiBrokerChannelCreated)
+ IPC_MESSAGE_HANDLER(ViewMsg_PpapiBrokerPermissionResult,
+ OnPpapiBrokerPermissionResult)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+void PPB_Broker_Impl::OnPpapiBrokerChannelCreated(
+ base::ProcessId broker_pid,
+ const IPC::ChannelHandle& handle) {
+ broker_->OnBrokerChannelConnected(broker_pid, handle);
+}
+
+void PPB_Broker_Impl::OnPpapiBrokerPermissionResult(bool result) {
+ broker_->OnBrokerPermissionResult(this, result);
dmichael (off chromium) 2013/08/06 18:43:31 nit: indentation is off
jam 2013/08/06 19:34:09 Done.
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698