Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(457)

Side by Side Diff: content/renderer/pepper/pepper_plugin_delegate_impl.cc

Issue 10541113: Notify CloseFile from Pepper to FileSystem. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reflect review comments. Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/pepper/pepper_plugin_delegate_impl.h" 5 #include "content/renderer/pepper/pepper_plugin_delegate_impl.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <cstddef> 8 #include <cstddef>
9 #include <map> 9 #include <map>
10 #include <queue> 10 #include <queue>
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 virtual bool HandleMouseLockedInputEvent( 186 virtual bool HandleMouseLockedInputEvent(
187 const WebKit::WebMouseEvent &event) OVERRIDE { 187 const WebKit::WebMouseEvent &event) OVERRIDE {
188 plugin_->HandleMouseLockedInputEvent(event); 188 plugin_->HandleMouseLockedInputEvent(event);
189 return true; 189 return true;
190 } 190 }
191 191
192 private: 192 private:
193 webkit::ppapi::PluginInstance* plugin_; 193 webkit::ppapi::PluginInstance* plugin_;
194 }; 194 };
195 195
196 class AsyncOpenFileSystemURLCallbackTranslator
197 : public fileapi::FileSystemCallbackDispatcher {
198 public:
199 AsyncOpenFileSystemURLCallbackTranslator(
200 const webkit::ppapi::PluginDelegate::AsyncOpenFileSystemURLCallback&
201 callback,
202 const webkit::ppapi::PluginDelegate::NotifyCloseFileCallback&
203 close_file_callback)
204 : callback_(callback),
205 close_file_callback_(close_file_callback) {
206 }
207
208 virtual ~AsyncOpenFileSystemURLCallbackTranslator() {}
209
210 virtual void DidSucceed() {
211 NOTREACHED();
212 }
213 virtual void DidReadMetadata(
214 const base::PlatformFileInfo& file_info,
215 const FilePath& platform_path) {
216 NOTREACHED();
217 }
218 virtual void DidReadDirectory(
219 const std::vector<base::FileUtilProxy::Entry>& entries,
220 bool has_more) {
221 NOTREACHED();
222 }
223 virtual void DidOpenFileSystem(const std::string& name,
224 const GURL& root) {
225 NOTREACHED();
226 }
227
228 virtual void DidFail(base::PlatformFileError error_code) {
229 base::PlatformFile invalid_file = base::kInvalidPlatformFileValue;
230 callback_.Run(error_code,
231 base::PassPlatformFile(&invalid_file),
232 webkit::ppapi::PluginDelegate::NotifyCloseFileCallback());
233 }
234
235 virtual void DidWrite(int64 bytes, bool complete) {
236 NOTREACHED();
237 }
238
239 virtual void DidOpenFile(
240 base::PlatformFile file) {
yzshen1 2012/07/03 17:26:31 nit: No need to put it on a separate line.
kinaba 2012/07/04 04:26:22 Done.
241 callback_.Run(base::PLATFORM_FILE_OK,
242 base::PassPlatformFile(&file),
243 close_file_callback_);
244 // Make sure we won't leak file handle if the requester has died.
245 if (file != base::kInvalidPlatformFileValue) {
246 base::FileUtilProxy::Close(
247 RenderThreadImpl::current()->GetFileThreadMessageLoopProxy(), file,
248 close_file_callback_);
249 }
250 }
251
252 private:
253 webkit::ppapi::PluginDelegate::AsyncOpenFileSystemURLCallback callback_;
254 webkit::ppapi::PluginDelegate::NotifyCloseFileCallback close_file_callback_;
255 };
256
257 void DoNotifyCloseFile(const GURL& path, base::PlatformFileError /* unused */) {
258 ChildThread::current()->file_system_dispatcher()->NotifyCloseFile(path);
259 }
260
196 } // namespace 261 } // namespace
197 262
198 PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderViewImpl* render_view) 263 PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderViewImpl* render_view)
199 : RenderViewObserver(render_view), 264 : RenderViewObserver(render_view),
200 render_view_(render_view), 265 render_view_(render_view),
201 has_saved_context_menu_action_(false), 266 has_saved_context_menu_action_(false),
202 saved_context_menu_action_(0), 267 saved_context_menu_action_(0),
203 focused_plugin_(NULL), 268 focused_plugin_(NULL),
204 last_mouse_event_target_(NULL), 269 last_mouse_event_target_(NULL),
205 device_enumeration_event_handler_( 270 device_enumeration_event_handler_(
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 } 909 }
845 910
846 void PepperPluginDelegateImpl::WillUpdateFile(const GURL& path) { 911 void PepperPluginDelegateImpl::WillUpdateFile(const GURL& path) {
847 ChildThread::current()->Send(new FileSystemHostMsg_WillUpdate(path)); 912 ChildThread::current()->Send(new FileSystemHostMsg_WillUpdate(path));
848 } 913 }
849 914
850 void PepperPluginDelegateImpl::DidUpdateFile(const GURL& path, int64_t delta) { 915 void PepperPluginDelegateImpl::DidUpdateFile(const GURL& path, int64_t delta) {
851 ChildThread::current()->Send(new FileSystemHostMsg_DidUpdate(path, delta)); 916 ChildThread::current()->Send(new FileSystemHostMsg_DidUpdate(path, delta));
852 } 917 }
853 918
854 class AsyncOpenFileSystemURLCallbackTranslator
855 : public fileapi::FileSystemCallbackDispatcher {
856 public:
857 AsyncOpenFileSystemURLCallbackTranslator(
858 const webkit::ppapi::PluginDelegate::AsyncOpenFileCallback& callback)
859 : callback_(callback) {
860 }
861
862 virtual ~AsyncOpenFileSystemURLCallbackTranslator() {}
863
864 virtual void DidSucceed() {
865 NOTREACHED();
866 }
867 virtual void DidReadMetadata(
868 const base::PlatformFileInfo& file_info,
869 const FilePath& platform_path) {
870 NOTREACHED();
871 }
872 virtual void DidReadDirectory(
873 const std::vector<base::FileUtilProxy::Entry>& entries,
874 bool has_more) {
875 NOTREACHED();
876 }
877 virtual void DidOpenFileSystem(const std::string& name,
878 const GURL& root) {
879 NOTREACHED();
880 }
881
882 virtual void DidFail(base::PlatformFileError error_code) {
883 base::PlatformFile invalid_file = base::kInvalidPlatformFileValue;
884 callback_.Run(error_code, base::PassPlatformFile(&invalid_file));
885 }
886
887 virtual void DidWrite(int64 bytes, bool complete) {
888 NOTREACHED();
889 }
890
891 virtual void DidOpenFile(
892 base::PlatformFile file) {
893 callback_.Run(base::PLATFORM_FILE_OK, base::PassPlatformFile(&file));
894 // Make sure we won't leak file handle if the requester has died.
895 if (file != base::kInvalidPlatformFileValue) {
896 base::FileUtilProxy::Close(
897 RenderThreadImpl::current()->GetFileThreadMessageLoopProxy(), file,
898 base::FileUtilProxy::StatusCallback());
899 }
900 }
901
902 private: // TODO(ericu): Delete this?
903 webkit::ppapi::PluginDelegate::AsyncOpenFileCallback callback_;
904 };
905
906 bool PepperPluginDelegateImpl::AsyncOpenFileSystemURL( 919 bool PepperPluginDelegateImpl::AsyncOpenFileSystemURL(
907 const GURL& path, int flags, const AsyncOpenFileCallback& callback) { 920 const GURL& path,
921 int flags,
922 const AsyncOpenFileSystemURLCallback& callback) {
908 923
909 FileSystemDispatcher* file_system_dispatcher = 924 FileSystemDispatcher* file_system_dispatcher =
910 ChildThread::current()->file_system_dispatcher(); 925 ChildThread::current()->file_system_dispatcher();
911 return file_system_dispatcher->OpenFile(path, flags, 926 return file_system_dispatcher->OpenFile(path, flags,
912 new AsyncOpenFileSystemURLCallbackTranslator(callback)); 927 new AsyncOpenFileSystemURLCallbackTranslator(
928 callback,
929 base::Bind(&DoNotifyCloseFile, path)));
913 } 930 }
914 931
915 base::PlatformFileError PepperPluginDelegateImpl::OpenFile( 932 base::PlatformFileError PepperPluginDelegateImpl::OpenFile(
916 const ppapi::PepperFilePath& path, 933 const ppapi::PepperFilePath& path,
917 int flags, 934 int flags,
918 base::PlatformFile* file) { 935 base::PlatformFile* file) {
919 IPC::PlatformFileForTransit transit_file; 936 IPC::PlatformFileForTransit transit_file;
920 base::PlatformFileError error; 937 base::PlatformFileError error;
921 IPC::Message* msg = new PepperFileMsg_OpenFile( 938 IPC::Message* msg = new PepperFileMsg_OpenFile(
922 path, flags, &error, &transit_file); 939 path, flags, &error, &transit_file);
(...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after
1705 else 1722 else
1706 return render_view_->mouse_lock_dispatcher(); 1723 return render_view_->mouse_lock_dispatcher();
1707 } 1724 }
1708 1725
1709 webkit_glue::ClipboardClient* 1726 webkit_glue::ClipboardClient*
1710 PepperPluginDelegateImpl::CreateClipboardClient() const { 1727 PepperPluginDelegateImpl::CreateClipboardClient() const {
1711 return new RendererClipboardClient; 1728 return new RendererClipboardClient;
1712 } 1729 }
1713 1730
1714 } // namespace content 1731 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698