diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-15 21:03:55 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-15 21:03:55 +0000 |
commit | 61e78f1855792814e87a777df59595edc9b163fe (patch) | |
tree | f889f061d425efcdb07d637ad9c7379881f7afa4 /chrome/browser/renderer_host | |
parent | 630dc91c5a4e97b1c3b33799978c6bd4c00678e7 (diff) | |
download | chromium_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.cc | 114 | ||||
-rw-r--r-- | chrome/browser/renderer_host/pepper_file_message_filter.h | 29 |
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_; |