Arquivos
evan@chromium.org 78cd3e9132 mac/linux: rework plugin channel file descriptor creation
This CL fixes a bug where the same renderer could open several channels to the same plugin process, which end up having the same name. This CL makes it that there is only one channel for each (plugin, renderer) pair, just like on Windows.
The socketpair is created in the plugin process (which can ensure that only one channel per renderer gets created), and sends the renderer side through the browser process.

Note: this should essentially be a noop on Windows.

Review URL: http://codereview.chromium.org/149062
Patch from Antoine Labour <piman@google.com>.

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19448 0039d316-1c4b-4281-b951-d872f2087c98
2009-06-27 01:43:51 +00:00

57 linhas
1.6 KiB
C++

// Copyright (c) 2006-2008 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.
#ifndef CHROME_PLUGIN_PLUGIN_THREAD_H_
#define CHROME_PLUGIN_PLUGIN_THREAD_H_
#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
// live. Communication occurs between WebPluginDelegateProxy in the renderer
// process and WebPluginDelegateStub in this thread through IPC messages.
class PluginThread : public ChildThread {
public:
PluginThread();
~PluginThread();
// Returns the one plugin thread.
static PluginThread* current();
private:
virtual void OnControlMessageReceived(const IPC::Message& msg);
// Thread implementation:
virtual void Init();
virtual void CleanUp();
// Callback for when a channel has been created.
void OnCreateChannel(
int process_id,
bool off_the_record);
void OnPluginMessage(const std::vector<uint8> &data);
scoped_ptr<NotificationService> notification_service_;
// The plugin module which is preloaded in Init
base::NativeLibrary preloaded_plugin_module_;
// Points to the plugin file that this process hosts.
FilePath plugin_path_;
DISALLOW_EVIL_CONSTRUCTORS(PluginThread);
};
#endif // CHROME_PLUGIN_PLUGIN_THREAD_H_