| Index: content/renderer/pepper/pepper_plugin_delegate_impl.cc
|
| diff --git a/content/renderer/pepper/pepper_plugin_delegate_impl.cc b/content/renderer/pepper/pepper_plugin_delegate_impl.cc
|
| index b88a01cecfd591ec00a3db147178f66fc4430232..28b5577e258cf83cdf2bad2d79a5cb3569438874 100644
|
| --- a/content/renderer/pepper/pepper_plugin_delegate_impl.cc
|
| +++ b/content/renderer/pepper/pepper_plugin_delegate_impl.cc
|
| @@ -194,6 +194,70 @@ class PluginInstanceLockTarget : public MouseLockDispatcher::LockTarget {
|
| webkit::ppapi::PluginInstance* plugin_;
|
| };
|
|
|
| +class AsyncOpenFileSystemURLCallbackTranslator
|
| + : public fileapi::FileSystemCallbackDispatcher {
|
| + public:
|
| + AsyncOpenFileSystemURLCallbackTranslator(
|
| + const webkit::ppapi::PluginDelegate::AsyncOpenFileSystemURLCallback&
|
| + callback,
|
| + const webkit::ppapi::PluginDelegate::NotifyCloseFileCallback&
|
| + close_file_callback)
|
| + : callback_(callback),
|
| + close_file_callback_(close_file_callback) {
|
| + }
|
| +
|
| + virtual ~AsyncOpenFileSystemURLCallbackTranslator() {}
|
| +
|
| + virtual void DidSucceed() {
|
| + NOTREACHED();
|
| + }
|
| + virtual void DidReadMetadata(
|
| + const base::PlatformFileInfo& file_info,
|
| + const FilePath& platform_path) {
|
| + NOTREACHED();
|
| + }
|
| + virtual void DidReadDirectory(
|
| + const std::vector<base::FileUtilProxy::Entry>& entries,
|
| + bool has_more) {
|
| + NOTREACHED();
|
| + }
|
| + virtual void DidOpenFileSystem(const std::string& name,
|
| + const GURL& root) {
|
| + NOTREACHED();
|
| + }
|
| +
|
| + virtual void DidFail(base::PlatformFileError error_code) {
|
| + base::PlatformFile invalid_file = base::kInvalidPlatformFileValue;
|
| + callback_.Run(error_code,
|
| + base::PassPlatformFile(&invalid_file),
|
| + webkit::ppapi::PluginDelegate::NotifyCloseFileCallback());
|
| + }
|
| +
|
| + virtual void DidWrite(int64 bytes, bool complete) {
|
| + NOTREACHED();
|
| + }
|
| +
|
| + virtual void DidOpenFile(base::PlatformFile file) {
|
| + callback_.Run(base::PLATFORM_FILE_OK,
|
| + base::PassPlatformFile(&file),
|
| + close_file_callback_);
|
| + // Make sure we won't leak file handle if the requester has died.
|
| + if (file != base::kInvalidPlatformFileValue) {
|
| + base::FileUtilProxy::Close(
|
| + RenderThreadImpl::current()->GetFileThreadMessageLoopProxy(), file,
|
| + close_file_callback_);
|
| + }
|
| + }
|
| +
|
| + private:
|
| + webkit::ppapi::PluginDelegate::AsyncOpenFileSystemURLCallback callback_;
|
| + webkit::ppapi::PluginDelegate::NotifyCloseFileCallback close_file_callback_;
|
| +};
|
| +
|
| +void DoNotifyCloseFile(const GURL& path, base::PlatformFileError /* unused */) {
|
| + ChildThread::current()->file_system_dispatcher()->NotifyCloseFile(path);
|
| +}
|
| +
|
| } // namespace
|
|
|
| PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderViewImpl* render_view)
|
| @@ -859,65 +923,17 @@ void PepperPluginDelegateImpl::DidUpdateFile(const GURL& path, int64_t delta) {
|
| ChildThread::current()->Send(new FileSystemHostMsg_DidUpdate(path, delta));
|
| }
|
|
|
| -class AsyncOpenFileSystemURLCallbackTranslator
|
| - : public fileapi::FileSystemCallbackDispatcher {
|
| - public:
|
| - AsyncOpenFileSystemURLCallbackTranslator(
|
| - const webkit::ppapi::PluginDelegate::AsyncOpenFileCallback& callback)
|
| - : callback_(callback) {
|
| - }
|
| -
|
| - virtual ~AsyncOpenFileSystemURLCallbackTranslator() {}
|
| -
|
| - virtual void DidSucceed() {
|
| - NOTREACHED();
|
| - }
|
| - virtual void DidReadMetadata(
|
| - const base::PlatformFileInfo& file_info,
|
| - const FilePath& platform_path) {
|
| - NOTREACHED();
|
| - }
|
| - virtual void DidReadDirectory(
|
| - const std::vector<base::FileUtilProxy::Entry>& entries,
|
| - bool has_more) {
|
| - NOTREACHED();
|
| - }
|
| - virtual void DidOpenFileSystem(const std::string& name,
|
| - const GURL& root) {
|
| - NOTREACHED();
|
| - }
|
| -
|
| - virtual void DidFail(base::PlatformFileError error_code) {
|
| - base::PlatformFile invalid_file = base::kInvalidPlatformFileValue;
|
| - callback_.Run(error_code, base::PassPlatformFile(&invalid_file));
|
| - }
|
| -
|
| - virtual void DidWrite(int64 bytes, bool complete) {
|
| - NOTREACHED();
|
| - }
|
| -
|
| - virtual void DidOpenFile(
|
| - base::PlatformFile file) {
|
| - callback_.Run(base::PLATFORM_FILE_OK, base::PassPlatformFile(&file));
|
| - // Make sure we won't leak file handle if the requester has died.
|
| - if (file != base::kInvalidPlatformFileValue) {
|
| - base::FileUtilProxy::Close(
|
| - RenderThreadImpl::current()->GetFileThreadMessageLoopProxy(), file,
|
| - base::FileUtilProxy::StatusCallback());
|
| - }
|
| - }
|
| -
|
| -private: // TODO(ericu): Delete this?
|
| - webkit::ppapi::PluginDelegate::AsyncOpenFileCallback callback_;
|
| -};
|
| -
|
| bool PepperPluginDelegateImpl::AsyncOpenFileSystemURL(
|
| - const GURL& path, int flags, const AsyncOpenFileCallback& callback) {
|
| + const GURL& path,
|
| + int flags,
|
| + const AsyncOpenFileSystemURLCallback& callback) {
|
|
|
| FileSystemDispatcher* file_system_dispatcher =
|
| ChildThread::current()->file_system_dispatcher();
|
| return file_system_dispatcher->OpenFile(path, flags,
|
| - new AsyncOpenFileSystemURLCallbackTranslator(callback));
|
| + new AsyncOpenFileSystemURLCallbackTranslator(
|
| + callback,
|
| + base::Bind(&DoNotifyCloseFile, path)));
|
| }
|
|
|
| base::PlatformFileError PepperPluginDelegateImpl::OpenFile(
|
|
|