diff options
Diffstat (limited to 'chrome/plugin')
-rw-r--r-- | chrome/plugin/plugin_channel.cc | 14 | ||||
-rw-r--r-- | chrome/plugin/plugin_channel.h | 8 | ||||
-rw-r--r-- | chrome/plugin/plugin_thread.cc | 13 | ||||
-rw-r--r-- | chrome/plugin/plugin_thread.h | 14 | ||||
-rw-r--r-- | chrome/plugin/webplugin_delegate_stub.cc | 6 |
5 files changed, 46 insertions, 9 deletions
diff --git a/chrome/plugin/plugin_channel.cc b/chrome/plugin/plugin_channel.cc index 4ff7b2b..b9e7a52 100644 --- a/chrome/plugin/plugin_channel.cc +++ b/chrome/plugin/plugin_channel.cc @@ -7,17 +7,29 @@ #include "base/command_line.h" #include "base/process_util.h" #include "base/string_util.h" +#include "build/build_config.h" #include "chrome/common/child_process.h" #include "chrome/common/plugin_messages.h" #include "chrome/common/chrome_switches.h" #include "chrome/plugin/plugin_thread.h" +#if defined(OS_POSIX) +#include "chrome/common/ipc_channel_posix.h" +#endif + PluginChannel* PluginChannel::GetPluginChannel( - int process_id, MessageLoop* ipc_message_loop) { + int process_id, MessageLoop* ipc_message_loop, int channel_fd) { // map renderer's process id to a (single) channel to that process std::string channel_name = StringPrintf( "%d.r%d", base::GetCurrentProcId(), process_id); +#if defined(OS_POSIX) + // If we were provided an already-open channel, associate it with + // the channel name in this process's name<->socket map. + if (channel_fd > 0) + IPC::AddChannelSocket(channel_name, channel_fd); +#endif + return static_cast<PluginChannel*>(PluginChannelBase::GetChannel( channel_name, IPC::Channel::MODE_SERVER, diff --git a/chrome/plugin/plugin_channel.h b/chrome/plugin/plugin_channel.h index f0bba80..21373fb 100644 --- a/chrome/plugin/plugin_channel.h +++ b/chrome/plugin/plugin_channel.h @@ -15,8 +15,12 @@ // process. On the renderer side there's a corresponding PluginChannelHost. class PluginChannel : public PluginChannelBase { public: - static PluginChannel* GetPluginChannel( - int process_id, MessageLoop* ipc_message_loop); + // Get a new PluginChannel object for the current process. + // POSIX only: If |channel_fd| > 0, use that file descriptor for the + // channel socket. + static PluginChannel* GetPluginChannel(int process_id, + MessageLoop* ipc_message_loop, + int channel_fd); ~PluginChannel(); diff --git a/chrome/plugin/plugin_thread.cc b/chrome/plugin/plugin_thread.cc index cb92de4..2f9c2ec 100644 --- a/chrome/plugin/plugin_thread.cc +++ b/chrome/plugin/plugin_thread.cc @@ -102,10 +102,19 @@ void PluginThread::CleanUp() { lazy_tls.Pointer()->Set(NULL); } -void PluginThread::OnCreateChannel(int process_id, bool off_the_record) { +void PluginThread::OnCreateChannel( +#if defined(OS_POSIX) + base::FileDescriptor socket, +#endif + int process_id, + bool off_the_record) { + int fd = -1; +#if defined(OS_POSIX) + fd = socket.fd; +#endif std::string channel_name; scoped_refptr<PluginChannel> channel = - PluginChannel::GetPluginChannel(process_id, owner_loop()); + PluginChannel::GetPluginChannel(process_id, owner_loop(), fd); if (channel.get()) { channel_name = channel->channel_name(); channel->set_off_the_record(off_the_record); diff --git a/chrome/plugin/plugin_thread.h b/chrome/plugin/plugin_thread.h index 052be0a..911940a 100644 --- a/chrome/plugin/plugin_thread.h +++ b/chrome/plugin/plugin_thread.h @@ -7,10 +7,15 @@ #include "base/file_path.h" #include "base/native_library.h" +#include "build/build_config.h" #include "chrome/common/child_thread.h" #include "chrome/plugin/plugin_channel.h" #include "webkit/glue/plugins/plugin_lib.h" +#if defined(OS_POSIX) +#include "base/file_descriptor_posix.h" +#endif + class NotificationService; // The PluginThread class represents a background thread where plugin instances @@ -31,7 +36,14 @@ class PluginThread : public ChildThread { virtual void Init(); virtual void CleanUp(); - void OnCreateChannel(int process_id, bool off_the_record); + // Callback for when a channel has been created. + // On POSIX, |socket| is the channel endpoint socket. + void OnCreateChannel( +#if defined(OS_POSIX) + base::FileDescriptor socket, +#endif + int process_id, + bool off_the_record); void OnPluginMessage(const std::vector<uint8> &data); scoped_ptr<NotificationService> notification_service_; diff --git a/chrome/plugin/webplugin_delegate_stub.cc b/chrome/plugin/webplugin_delegate_stub.cc index 800db41..8cc3273 100644 --- a/chrome/plugin/webplugin_delegate_stub.cc +++ b/chrome/plugin/webplugin_delegate_stub.cc @@ -135,9 +135,9 @@ void WebPluginDelegateStub::OnInit(const PluginMsg_Init_Params& params, delegate_ = WebPluginDelegate::Create( path, mime_type_, gfx::NativeViewFromId(params.containing_window)); #else - // We don't have gfx::NativeViewFromId on Linux - NOTIMPLEMENTED(); - delegate_ = NULL; + NOTIMPLEMENTED() << " need to figure out nativeview id business"; + delegate_ = WebPluginDelegate::Create( + path, mime_type_, NULL); #endif if (delegate_) { |