diff options
author | jianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-14 00:21:47 +0000 |
---|---|---|
committer | jianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-14 00:21:47 +0000 |
commit | 564551a2ece790b22fd2a70aeb8591805fe943be (patch) | |
tree | 4a488ae255344ea3c84e34976816508a23d228e0 | |
parent | fa6797241c533cc2c2ce0504f68decdea990c59f (diff) | |
download | chromium_src-564551a2ece790b22fd2a70aeb8591805fe943be.zip chromium_src-564551a2ece790b22fd2a70aeb8591805fe943be.tar.gz chromium_src-564551a2ece790b22fd2a70aeb8591805fe943be.tar.bz2 |
Fix the problem that FileReader does not work on Mac/Linux. The fix
is to pass the file handle with magic FileDescriptor over IPC for POSIX.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/2123001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47227 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/renderer_host/resource_message_filter.cc | 20 | ||||
-rw-r--r-- | chrome/common/render_messages_internal.h | 2 | ||||
-rw-r--r-- | chrome/renderer/renderer_webkitclient_impl.cc | 10 |
3 files changed, 23 insertions, 9 deletions
diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc index 791cd5b..f27ee9b 100644 --- a/chrome/browser/renderer_host/resource_message_filter.cc +++ b/chrome/browser/renderer_host/resource_message_filter.cc @@ -7,6 +7,9 @@ #include "app/clipboard/clipboard.h" #include "base/callback.h" #include "base/command_line.h" +#if defined(OS_POSIX) +#include "base/file_descriptor_posix.h" +#endif #include "base/file_util.h" #include "base/histogram.h" #include "base/process_util.h" @@ -1385,7 +1388,13 @@ void ResourceMessageFilter::OnOpenFile(const FilePath& path, // TODO(jianli): Do we need separate permission to control opening the file? if (!ChildProcessSecurityPolicy::GetInstance()->CanUploadFile(id(), path)) { ViewHostMsg_OpenFile::WriteReplyParams( - reply_msg, base::kInvalidPlatformFileValue); + reply_msg, +#if defined(OS_WIN) + base::kInvalidPlatformFileValue +#elif defined(OS_POSIX) + base::FileDescriptor(base::kInvalidPlatformFileValue, true) +#endif + ); Send(reply_msg); return; } @@ -1424,7 +1433,14 @@ void ResourceMessageFilter::OnOpenFileOnFileThread(const FilePath& path, target_file_handle = file_handle; #endif - ViewHostMsg_OpenFile::WriteReplyParams(reply_msg, target_file_handle); + ViewHostMsg_OpenFile::WriteReplyParams( + reply_msg, +#if defined(OS_WIN) + target_file_handle +#elif defined(OS_POSIX) + base::FileDescriptor(target_file_handle, true) +#endif + ); ChromeThread::PostTask( ChromeThread::IO, FROM_HERE, diff --git a/chrome/common/render_messages_internal.h b/chrome/common/render_messages_internal.h index 109c8b7..a4646ae 100644 --- a/chrome/common/render_messages_internal.h +++ b/chrome/common/render_messages_internal.h @@ -2148,7 +2148,7 @@ IPC_BEGIN_MESSAGES(ViewHost) IPC_SYNC_MESSAGE_CONTROL2_1(ViewHostMsg_OpenFile, FilePath /* path */, int /* mode */, - base::PlatformFile /* result */) + IPC::PlatformFileForTransit /* result */) // Sent by the renderer process to acknowledge receipt of a // ViewMsg_CSSInsertRequest message and css has been inserted into the frame. diff --git a/chrome/renderer/renderer_webkitclient_impl.cc b/chrome/renderer/renderer_webkitclient_impl.cc index a1e8a30..0846df1 100644 --- a/chrome/renderer/renderer_webkitclient_impl.cc +++ b/chrome/renderer/renderer_webkitclient_impl.cc @@ -244,12 +244,10 @@ bool RendererWebKitClientImpl::FileSystem::getFileModificationTime( base::PlatformFile RendererWebKitClientImpl::FileSystem::openFile( const WebString& path, int mode) { - base::PlatformFile handle; - if (!SendSyncMessageFromAnyThread(new ViewHostMsg_OpenFile( - webkit_glue::WebStringToFilePath(path), mode, &handle))) { - handle = base::kInvalidPlatformFileValue; - } - return handle; + IPC::PlatformFileForTransit handle = IPC::InvalidPlatformFileForTransit(); + SendSyncMessageFromAnyThread(new ViewHostMsg_OpenFile( + webkit_glue::WebStringToFilePath(path), mode, &handle)); + return IPC::PlatformFileForTransitToPlatformFile(handle); } //------------------------------------------------------------------------------ |