summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-15 21:03:55 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-15 21:03:55 +0000
commit61e78f1855792814e87a777df59595edc9b163fe (patch)
treef889f061d425efcdb07d637ad9c7379881f7afa4 /chrome/browser/renderer_host
parent630dc91c5a4e97b1c3b33799978c6bd4c00678e7 (diff)
downloadchromium_src-61e78f1855792814e87a777df59595edc9b163fe.zip
chromium_src-61e78f1855792814e87a777df59595edc9b163fe.tar.gz
chromium_src-61e78f1855792814e87a777df59595edc9b163fe.tar.bz2
Make PepperFileMessageFilter be a BrowserMessageFilter.
Review URL: http://codereview.chromium.org/5877002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69313 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
-rw-r--r--chrome/browser/renderer_host/pepper_file_message_filter.cc114
-rw-r--r--chrome/browser/renderer_host/pepper_file_message_filter.h29
2 files changed, 30 insertions, 113 deletions
diff --git a/chrome/browser/renderer_host/pepper_file_message_filter.cc b/chrome/browser/renderer_host/pepper_file_message_filter.cc
index 10554b5..62fad79 100644
--- a/chrome/browser/renderer_host/pepper_file_message_filter.cc
+++ b/chrome/browser/renderer_host/pepper_file_message_filter.cc
@@ -13,7 +13,7 @@
#include "chrome/browser/renderer_host/browser_render_process_host.h"
#include "chrome/common/child_process_host.h"
#include "chrome/common/chrome_switches.h"
-#include "chrome/common/render_messages.h"
+#include "chrome/common/pepper_file_messages.h"
#include "ipc/ipc_platform_file.h"
#if defined(OS_POSIX)
@@ -21,86 +21,36 @@
#endif
PepperFileMessageFilter::PepperFileMessageFilter(
- int child_id, Profile* profile)
- : handle_(base::kNullProcessHandle),
- channel_(NULL) {
+ int child_id, Profile* profile) {
pepper_path_ = profile->GetPath().Append(FILE_PATH_LITERAL("Pepper Data"));
}
PepperFileMessageFilter::~PepperFileMessageFilter() {
// This function should be called on the IO thread.
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- if (handle_)
- base::CloseProcessHandle(handle_);
-}
-
-// Called on the IPC thread:
-void PepperFileMessageFilter::OnFilterAdded(IPC::Channel* channel) {
- channel_ = channel;
}
-// Called on the IPC thread:
-void PepperFileMessageFilter::OnChannelConnected(int32 peer_pid) {
- DCHECK(!handle_) << " " << handle_;
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- if (!base::OpenProcessHandle(peer_pid, &handle_)) {
- NOTREACHED();
- }
-}
-
-void PepperFileMessageFilter::OnChannelError() {
-}
-
-// Called on the IPC thread:
-void PepperFileMessageFilter::OnChannelClosing() {
- channel_ = NULL;
-}
-
-// Called on the IPC thread:
-bool PepperFileMessageFilter::OnMessageReceived(const IPC::Message& msg) {
- switch (msg.type()) {
- case ViewHostMsg_PepperOpenFile::ID:
- case ViewHostMsg_PepperRenameFile::ID:
- case ViewHostMsg_PepperDeleteFileOrDir::ID:
- case ViewHostMsg_PepperCreateDir::ID:
- case ViewHostMsg_PepperQueryFile::ID:
- case ViewHostMsg_PepperGetDirContents::ID:
- break;
- default:
- return false;
- }
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- NewRunnableMethod(
- this, &PepperFileMessageFilter::OnMessageReceivedFileThread, msg));
-
- return true;
-}
-
-void PepperFileMessageFilter::OnMessageReceivedFileThread(
- const IPC::Message& msg) {
- bool msg_is_ok = true;
- IPC_BEGIN_MESSAGE_MAP_EX(PepperFileMessageFilter, msg, msg_is_ok)
- IPC_MESSAGE_HANDLER(ViewHostMsg_PepperOpenFile, OnPepperOpenFile)
- IPC_MESSAGE_HANDLER(ViewHostMsg_PepperRenameFile, OnPepperRenameFile)
- IPC_MESSAGE_HANDLER(ViewHostMsg_PepperDeleteFileOrDir,
- OnPepperDeleteFileOrDir)
- IPC_MESSAGE_HANDLER(ViewHostMsg_PepperCreateDir, OnPepperCreateDir)
- IPC_MESSAGE_HANDLER(ViewHostMsg_PepperQueryFile, OnPepperQueryFile)
- IPC_MESSAGE_HANDLER(ViewHostMsg_PepperGetDirContents,
- OnPepperGetDirContents)
- IPC_MESSAGE_UNHANDLED_ERROR()
+void PepperFileMessageFilter::OverrideThreadForMessage(
+ const IPC::Message& message,
+ BrowserThread::ID* thread) {
+ if (IPC_MESSAGE_CLASS(message) == PepperFileMsgStart)
+ *thread = BrowserThread::FILE;
+}
+
+bool PepperFileMessageFilter::OnMessageReceived(
+ const IPC::Message& message,
+ bool* message_was_ok) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP_EX(PepperFileMessageFilter, message, *message_was_ok)
+ IPC_MESSAGE_HANDLER(PepperFileMsg_OpenFile, OnPepperOpenFile)
+ IPC_MESSAGE_HANDLER(PepperFileMsg_RenameFile, OnPepperRenameFile)
+ IPC_MESSAGE_HANDLER(PepperFileMsg_DeleteFileOrDir, OnPepperDeleteFileOrDir)
+ IPC_MESSAGE_HANDLER(PepperFileMsg_CreateDir, OnPepperCreateDir)
+ IPC_MESSAGE_HANDLER(PepperFileMsg_QueryFile, OnPepperQueryFile)
+ IPC_MESSAGE_HANDLER(PepperFileMsg_GetDirContents, OnPepperGetDirContents)
+ IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP_EX()
-
- if (!msg_is_ok) {
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- NewRunnableFunction(
- &BrowserRenderProcessHost::BadMessageTerminateProcess,
- msg.type(), handle_));
- }
+ return handled;
}
void PepperFileMessageFilter::OnDestruct() const {
@@ -108,24 +58,6 @@ void PepperFileMessageFilter::OnDestruct() const {
}
// Called on the FILE thread:
-void PepperFileMessageFilter::Send(IPC::Message* message) {
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- NewRunnableMethod(
- this, &PepperFileMessageFilter::SendFromIOThread, message));
-}
-
-// Called on the IPC thread:
-bool PepperFileMessageFilter::SendFromIOThread(IPC::Message* message) {
- if (!channel_) {
- delete message;
- return false;
- }
-
- return channel_->Send(message);
-}
-
-// Called on the FILE thread:
void PepperFileMessageFilter::OnPepperOpenFile(
const FilePath& path,
int flags,
@@ -159,7 +91,7 @@ void PepperFileMessageFilter::OnPepperOpenFile(
#if defined(OS_WIN)
// Duplicate the file handle so that the renderer process can access the file.
if (!DuplicateHandle(GetCurrentProcess(), file_handle,
- handle_, file, 0, false,
+ peer_handle(), file, 0, false,
DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) {
// file_handle is closed whether or not DuplicateHandle succeeds.
*error = base::PLATFORM_FILE_ERROR_ACCESS_DENIED;
diff --git a/chrome/browser/renderer_host/pepper_file_message_filter.h b/chrome/browser/renderer_host/pepper_file_message_filter.h
index 003d258..d3cbfdc 100644
--- a/chrome/browser/renderer_host/pepper_file_message_filter.h
+++ b/chrome/browser/renderer_host/pepper_file_message_filter.h
@@ -14,40 +14,28 @@
#include "base/ref_counted.h"
#include "base/task.h"
#include "build/build_config.h"
-#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
-#include "ipc/ipc_channel_proxy.h"
+#include "chrome/browser/browser_message_filter.h"
#include "ipc/ipc_platform_file.h"
#include "webkit/glue/plugins/pepper_dir_contents.h"
class Profile;
// A message filter for Pepper-specific File I/O messages.
-//
-// NOTE: Contrary to most message filters, this one handles the messages (On*
-// functions) on the FILE thread instead of the IO thread: OnMessageReceived
-// forwards the mesage to the FILE thread, where it's handled by
-// OnMessageReceivedFileThread.
-class PepperFileMessageFilter : public IPC::ChannelProxy::MessageFilter {
+class PepperFileMessageFilter : public BrowserMessageFilter {
public:
PepperFileMessageFilter(int child_id, Profile* profile);
- // IPC::ChannelProxy::MessageFilter methods:
- virtual void OnFilterAdded(IPC::Channel* channel);
- virtual void OnChannelConnected(int32 peer_pid);
- virtual void OnChannelError();
- virtual void OnChannelClosing();
- virtual bool OnMessageReceived(const IPC::Message& message);
+ // BrowserMessageFilter methods:
+ virtual void OverrideThreadForMessage(const IPC::Message& message,
+ BrowserThread::ID* thread);
+ virtual bool OnMessageReceived(const IPC::Message& message,
+ bool* message_was_ok);
virtual void OnDestruct() const;
- // Called from the FILE thread.
- void Send(IPC::Message* message);
-
private:
friend class BrowserThread;
friend class DeleteTask<PepperFileMessageFilter>;
virtual ~PepperFileMessageFilter();
- void OnMessageReceivedFileThread(const IPC::Message& message);
- bool SendFromIOThread(IPC::Message* message);
// Called on the FILE thread:
void OnPepperOpenFile(const FilePath& path,
@@ -71,9 +59,6 @@ class PepperFileMessageFilter : public IPC::ChannelProxy::MessageFilter {
FilePath MakePepperPath(const FilePath& base_path);
- // The process handle for the peer.
- base::ProcessHandle handle_;
-
// The channel associated with the renderer connection. This pointer is not
// owned by this class.
IPC::Channel* channel_;