diff options
Diffstat (limited to 'webkit/plugins/ppapi/ppb_directory_reader_impl.cc')
-rw-r--r-- | webkit/plugins/ppapi/ppb_directory_reader_impl.cc | 59 |
1 files changed, 22 insertions, 37 deletions
diff --git a/webkit/plugins/ppapi/ppb_directory_reader_impl.cc b/webkit/plugins/ppapi/ppb_directory_reader_impl.cc index 33ca825..cba21d5 100644 --- a/webkit/plugins/ppapi/ppb_directory_reader_impl.cc +++ b/webkit/plugins/ppapi/ppb_directory_reader_impl.cc @@ -9,6 +9,8 @@ #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/pp_errors.h" #include "ppapi/c/dev/ppb_directory_reader_dev.h" +#include "ppapi/thunk/enter.h" +#include "ppapi/thunk/ppb_file_ref_api.h" #include "webkit/plugins/ppapi/common.h" #include "webkit/plugins/ppapi/file_callbacks.h" #include "webkit/plugins/ppapi/plugin_delegate.h" @@ -18,6 +20,10 @@ #include "webkit/plugins/ppapi/ppb_file_system_impl.h" #include "webkit/plugins/ppapi/resource_tracker.h" +using ::ppapi::thunk::EnterResourceNoLock; +using ::ppapi::thunk::PPB_DirectoryReader_API; +using ::ppapi::thunk::PPB_FileRef_API; + namespace webkit { namespace ppapi { @@ -43,38 +49,6 @@ FilePath::StringType UTF8StringToFilePathString(const std::string& str) { #endif } -PP_Resource Create(PP_Resource directory_ref_id) { - scoped_refptr<PPB_FileRef_Impl> directory_ref( - Resource::GetAs<PPB_FileRef_Impl>(directory_ref_id)); - if (!directory_ref) - return 0; - - PPB_DirectoryReader_Impl* reader = - new PPB_DirectoryReader_Impl(directory_ref); - return reader->GetReference(); -} - -PP_Bool IsDirectoryReader(PP_Resource resource) { - return BoolToPPBool(!!Resource::GetAs<PPB_DirectoryReader_Impl>(resource)); -} - -int32_t GetNextEntry(PP_Resource reader_id, - PP_DirectoryEntry_Dev* entry, - PP_CompletionCallback callback) { - scoped_refptr<PPB_DirectoryReader_Impl> reader( - Resource::GetAs<PPB_DirectoryReader_Impl>(reader_id)); - if (!reader) - return PP_ERROR_BADRESOURCE; - - return reader->GetNextEntry(entry, callback); -} - -const PPB_DirectoryReader_Dev ppb_directoryreader = { - &Create, - &IsDirectoryReader, - &GetNextEntry -}; - } // namespace PPB_DirectoryReader_Impl::PPB_DirectoryReader_Impl( @@ -88,8 +62,15 @@ PPB_DirectoryReader_Impl::PPB_DirectoryReader_Impl( PPB_DirectoryReader_Impl::~PPB_DirectoryReader_Impl() { } -const PPB_DirectoryReader_Dev* PPB_DirectoryReader_Impl::GetInterface() { - return &ppb_directoryreader; +// static +PP_Resource PPB_DirectoryReader_Impl::Create(PP_Resource directory_ref) { + EnterResourceNoLock<PPB_FileRef_API> enter(directory_ref, true); + if (enter.failed()) + return 0; + + PPB_DirectoryReader_Impl* reader = new PPB_DirectoryReader_Impl( + static_cast<PPB_FileRef_Impl*>(enter.object())); + return reader->GetReference(); } PPB_DirectoryReader_Impl* @@ -97,6 +78,10 @@ PPB_DirectoryReader_Impl::AsPPB_DirectoryReader_Impl() { return this; } +PPB_DirectoryReader_API* PPB_DirectoryReader_Impl::AsPPB_DirectoryReader_API() { + return this; +} + int32_t PPB_DirectoryReader_Impl::GetNextEntry( PP_DirectoryEntry_Dev* entry, PP_CompletionCallback callback) { @@ -109,7 +94,7 @@ int32_t PPB_DirectoryReader_Impl::GetNextEntry( return PP_OK; } - PluginInstance* instance = directory_ref_->GetFileSystem()->instance(); + PluginInstance* instance = directory_ref_->instance(); PP_Resource resource_id = GetReferenceNoAddRef(); DCHECK(resource_id != 0); if (!instance->delegate()->ReadDirectory( @@ -126,7 +111,7 @@ void PPB_DirectoryReader_Impl::AddNewEntries( const std::vector<base::FileUtilProxy::Entry>& entries, bool has_more) { DCHECK(!entries.empty() || !has_more); has_more_ = has_more; - std::string dir_path = directory_ref_->GetPath(); + std::string dir_path = directory_ref_->virtual_path(); if (dir_path[dir_path.size() - 1] != '/') dir_path += '/'; FilePath::StringType dir_file_path = UTF8StringToFilePathString(dir_path); @@ -150,7 +135,7 @@ bool PPB_DirectoryReader_Impl::FillUpEntry() { if (entry_->file_ref) ResourceTracker::Get()->UnrefResource(entry_->file_ref); PPB_FileRef_Impl* file_ref = - new PPB_FileRef_Impl(instance(), directory_ref_->GetFileSystem(), + new PPB_FileRef_Impl(instance(), directory_ref_->file_system(), FilePathStringToUTF8String(dir_entry.name)); entry_->file_ref = file_ref->GetReference(); entry_->file_type = |