diff options
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/plugins/ppapi/mock_plugin_delegate.cc | 7 | ||||
-rw-r--r-- | webkit/plugins/ppapi/mock_plugin_delegate.h | 2 | ||||
-rw-r--r-- | webkit/plugins/ppapi/plugin_delegate.h | 4 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_file_ref_impl.h | 3 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_file_system_impl.h | 2 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_url_request_info_impl.cc | 25 |
6 files changed, 37 insertions, 6 deletions
diff --git a/webkit/plugins/ppapi/mock_plugin_delegate.cc b/webkit/plugins/ppapi/mock_plugin_delegate.cc index fb2d1a7..543c21e 100644 --- a/webkit/plugins/ppapi/mock_plugin_delegate.cc +++ b/webkit/plugins/ppapi/mock_plugin_delegate.cc @@ -188,6 +188,13 @@ base::PlatformFileError MockPluginDelegate::GetDirContents( return base::PLATFORM_FILE_ERROR_FAILED; } +void MockPluginDelegate::SyncGetFileSystemPlatformPath( + const GURL& url, + FilePath* platform_path) { + DCHECK(platform_path); + *platform_path = FilePath(); +} + void MockPluginDelegate::PublishPolicy(const std::string& policy_json) { } diff --git a/webkit/plugins/ppapi/mock_plugin_delegate.h b/webkit/plugins/ppapi/mock_plugin_delegate.h index 9de0218..3d4a034 100644 --- a/webkit/plugins/ppapi/mock_plugin_delegate.h +++ b/webkit/plugins/ppapi/mock_plugin_delegate.h @@ -84,6 +84,8 @@ class MockPluginDelegate : public PluginDelegate { base::PlatformFileInfo* info); virtual base::PlatformFileError GetDirContents(const PepperFilePath& path, DirContents* contents); + virtual void SyncGetFileSystemPlatformPath(const GURL& url, + FilePath* platform_path); virtual void PublishPolicy(const std::string& policy_json); virtual scoped_refptr<base::MessageLoopProxy> GetFileThreadMessageLoopProxy(); diff --git a/webkit/plugins/ppapi/plugin_delegate.h b/webkit/plugins/ppapi/plugin_delegate.h index 38e6591..fcbf296 100644 --- a/webkit/plugins/ppapi/plugin_delegate.h +++ b/webkit/plugins/ppapi/plugin_delegate.h @@ -363,6 +363,10 @@ class PluginDelegate { virtual base::PlatformFileError GetDirContents(const PepperFilePath& path, DirContents* contents) = 0; + // Synchronously returns the platform file path for a filesystem URL. + virtual void SyncGetFileSystemPlatformPath(const GURL& url, + FilePath* platform_path) = 0; + // Returns a MessageLoopProxy instance associated with the message loop // of the file thread in this renderer. virtual scoped_refptr<base::MessageLoopProxy> diff --git a/webkit/plugins/ppapi/ppb_file_ref_impl.h b/webkit/plugins/ppapi/ppb_file_ref_impl.h index b1b4d95..fa3bfbd 100644 --- a/webkit/plugins/ppapi/ppb_file_ref_impl.h +++ b/webkit/plugins/ppapi/ppb_file_ref_impl.h @@ -54,9 +54,10 @@ class PPB_FileRef_Impl : public Resource, PP_CompletionCallback callback) OVERRIDE; PPB_FileSystem_Impl* file_system() const { return file_system_.get(); } - const std::string& virtual_path() const { return virtual_path_; } // Returns the virtual path (i.e., the path that the pepper plugin sees) + const std::string& virtual_path() const { return virtual_path_; } + // Returns the system path corresponding to this file. FilePath GetSystemPath() const; diff --git a/webkit/plugins/ppapi/ppb_file_system_impl.h b/webkit/plugins/ppapi/ppb_file_system_impl.h index 4c425db..b14685d 100644 --- a/webkit/plugins/ppapi/ppb_file_system_impl.h +++ b/webkit/plugins/ppapi/ppb_file_system_impl.h @@ -32,7 +32,7 @@ class PPB_FileSystem_Impl : public Resource, virtual ::ppapi::thunk::PPB_FileSystem_API* AsPPB_FileSystem_API() OVERRIDE; PluginInstance* instance() { return instance_; } - PP_FileSystemType type() { return type_; } + PP_FileSystemType type() const { return type_; } const GURL& root_url() const { return root_url_; } void set_root_url(const GURL& root_url) { root_url_ = root_url; } bool opened() const { return opened_; } diff --git a/webkit/plugins/ppapi/ppb_url_request_info_impl.cc b/webkit/plugins/ppapi/ppb_url_request_info_impl.cc index 957d62b..8820a41 100644 --- a/webkit/plugins/ppapi/ppb_url_request_info_impl.cc +++ b/webkit/plugins/ppapi/ppb_url_request_info_impl.cc @@ -19,11 +19,13 @@ #include "third_party/WebKit/Source/WebKit/chromium/public/WebHTTPBody.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" +#include "webkit/glue/webkit_glue.h" #include "webkit/plugins/ppapi/common.h" #include "webkit/plugins/ppapi/plugin_module.h" +#include "webkit/plugins/ppapi/ppapi_plugin_instance.h" #include "webkit/plugins/ppapi/ppb_file_ref_impl.h" +#include "webkit/plugins/ppapi/ppb_file_system_impl.h" #include "webkit/plugins/ppapi/string.h" -#include "webkit/glue/webkit_glue.h" using ppapi::StringVar; using ppapi::thunk::EnterResourceNoLock; @@ -157,7 +159,7 @@ bool AreValidHeaders(const std::string& headers) { } // namespace struct PPB_URLRequestInfo_Impl::BodyItem { - BodyItem(const std::string& data) + explicit BodyItem(const std::string& data) : data(data), start_offset(0), number_of_bytes(-1), @@ -287,9 +289,24 @@ WebURLRequest PPB_URLRequestInfo_Impl::ToWebURLRequest(WebFrame* frame) const { http_body.initialize(); for (size_t i = 0; i < body_.size(); ++i) { if (body_[i].file_ref) { + FilePath platform_path; + switch (body_[i].file_ref->file_system()->type()) { + case PP_FILESYSTEMTYPE_LOCALTEMPORARY: + case PP_FILESYSTEMTYPE_LOCALPERSISTENT: + // TODO(kinuko): remove this sync IPC when we add more generic + // AppendURLRange solution that works for both Blob/FileSystem URL. + instance()->delegate()->SyncGetFileSystemPlatformPath( + body_[i].file_ref->GetFileSystemURL(), + &platform_path); + break; + case PP_FILESYSTEMTYPE_EXTERNAL: + platform_path = body_[i].file_ref->GetSystemPath(); + break; + default: + NOTREACHED(); + } http_body.appendFileRange( - webkit_glue::FilePathToWebString( - body_[i].file_ref->GetSystemPath()), + webkit_glue::FilePathToWebString(platform_path), body_[i].start_offset, body_[i].number_of_bytes, body_[i].expected_last_modified_time); |