| // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "ppapi/cpp/private/flash_file.h" | |
| #include "ppapi/c/pp_bool.h" | |
| #include "ppapi/c/pp_errors.h" | |
| #include "ppapi/cpp/file_ref.h" | |
| #include "ppapi/cpp/instance_handle.h" | |
| #include "ppapi/cpp/module_impl.h" | |
| namespace pp { | |
| // FileModuleLocal ------------------------------------------------------------- | |
| namespace { | |
| template <> const char* interface_name<PPB_Flash_File_ModuleLocal_3_0>() { | |
| return PPB_FLASH_FILE_MODULELOCAL_INTERFACE_3_0; | |
| } | |
| } // namespace | |
| namespace flash { | |
| static FileModuleLocal::DirEntry ConvertDirEntry(const PP_DirEntry_Dev& entry) { | |
| FileModuleLocal::DirEntry rv = { entry.name, PP_ToBool(entry.is_dir) }; | |
| return rv; | |
| } | |
| // static | |
| bool FileModuleLocal::IsAvailable() { | |
| return has_interface<PPB_Flash_File_ModuleLocal_3_0>(); | |
| } | |
| // static | |
| PP_FileHandle FileModuleLocal::OpenFile(const InstanceHandle& instance, | |
| const std::string& path, | |
| int32_t mode) { | |
| PP_FileHandle file_handle = PP_kInvalidFileHandle; | |
| int32_t result = PP_ERROR_FAILED; | |
| if (has_interface<PPB_Flash_File_ModuleLocal_3_0>()) { | |
| result = get_interface<PPB_Flash_File_ModuleLocal_3_0>()-> | |
| OpenFile(instance.pp_instance(), path.c_str(), mode, &file_handle); | |
| } | |
| return (result == PP_OK) ? file_handle : PP_kInvalidFileHandle; | |
| } | |
| // static | |
| bool FileModuleLocal::RenameFile(const InstanceHandle& instance, | |
| const std::string& path_from, | |
| const std::string& path_to) { | |
| int32_t result = PP_ERROR_FAILED; | |
| if (has_interface<PPB_Flash_File_ModuleLocal_3_0>()) { | |
| result = get_interface<PPB_Flash_File_ModuleLocal_3_0>()-> | |
| RenameFile(instance.pp_instance(), path_from.c_str(), path_to.c_str()); | |
| } | |
| return result == PP_OK; | |
| } | |
| // static | |
| bool FileModuleLocal::DeleteFileOrDir(const InstanceHandle& instance, | |
| const std::string& path, | |
| bool recursive) { | |
| int32_t result = PP_ERROR_FAILED; | |
| if (has_interface<PPB_Flash_File_ModuleLocal_3_0>()) { | |
| result = get_interface<PPB_Flash_File_ModuleLocal_3_0>()-> | |
| DeleteFileOrDir(instance.pp_instance(), path.c_str(), | |
| PP_FromBool(recursive)); | |
| } | |
| return result == PP_OK; | |
| } | |
| // static | |
| bool FileModuleLocal::CreateDir(const InstanceHandle& instance, | |
| const std::string& path) { | |
| int32_t result = PP_ERROR_FAILED; | |
| if (has_interface<PPB_Flash_File_ModuleLocal_3_0>()) { | |
| result = get_interface<PPB_Flash_File_ModuleLocal_3_0>()-> | |
| CreateDir(instance.pp_instance(), path.c_str()); | |
| } | |
| return result == PP_OK; | |
| } | |
| // static | |
| bool FileModuleLocal::QueryFile(const InstanceHandle& instance, | |
| const std::string& path, | |
| PP_FileInfo* info) { | |
| int32_t result = PP_ERROR_FAILED; | |
| if (has_interface<PPB_Flash_File_ModuleLocal_3_0>()) { | |
| result = get_interface<PPB_Flash_File_ModuleLocal_3_0>()-> | |
| QueryFile(instance.pp_instance(), path.c_str(), info); | |
| } | |
| return result == PP_OK; | |
| } | |
| // static | |
| bool FileModuleLocal::GetDirContents( | |
| const InstanceHandle& instance, | |
| const std::string& path, | |
| std::vector<DirEntry>* dir_contents) { | |
| dir_contents->clear(); | |
| int32_t result = PP_ERROR_FAILED; | |
| if (has_interface<PPB_Flash_File_ModuleLocal_3_0>()) { | |
| PP_DirContents_Dev* contents = NULL; | |
| result = get_interface<PPB_Flash_File_ModuleLocal_3_0>()-> | |
| GetDirContents(instance.pp_instance(), path.c_str(), &contents); | |
| if (result == PP_OK && contents) { | |
| for (int32_t i = 0; i < contents->count; i++) | |
| dir_contents->push_back(ConvertDirEntry(contents->entries[i])); | |
| } | |
| if (contents) { | |
| get_interface<PPB_Flash_File_ModuleLocal_3_0>()-> | |
| FreeDirContents(instance.pp_instance(), contents); | |
| } | |
| } | |
| return result == PP_OK; | |
| } | |
| // static | |
| PP_FileHandle FileModuleLocal::CreateTemporaryFile( | |
| const InstanceHandle& instance) { | |
| PP_FileHandle file_handle = PP_kInvalidFileHandle; | |
| int32_t result = PP_ERROR_FAILED; | |
| if (has_interface<PPB_Flash_File_ModuleLocal_3_0>()) { | |
| result = get_interface<PPB_Flash_File_ModuleLocal_3_0>()-> | |
| CreateTemporaryFile(instance.pp_instance(), &file_handle); | |
| } | |
| return (result == PP_OK) ? file_handle : PP_kInvalidFileHandle; | |
| } | |
| } // namespace flash | |
| // FileFileRef ----------------------------------------------------------------- | |
| namespace { | |
| template <> const char* interface_name<PPB_Flash_File_FileRef>() { | |
| return PPB_FLASH_FILE_FILEREF_INTERFACE; | |
| } | |
| } // namespace | |
| namespace flash { | |
| // static | |
| bool FileFileRef::IsAvailable() { | |
| return has_interface<PPB_Flash_File_FileRef>(); | |
| } | |
| // static | |
| PP_FileHandle FileFileRef::OpenFile(const pp::FileRef& resource, | |
| int32_t mode) { | |
| PP_FileHandle file_handle = PP_kInvalidFileHandle; | |
| int32_t result = PP_ERROR_FAILED; | |
| if (has_interface<PPB_Flash_File_FileRef>()) { | |
| result = get_interface<PPB_Flash_File_FileRef>()-> | |
| OpenFile(resource.pp_resource(), mode, &file_handle); | |
| } | |
| return (result == PP_OK) ? file_handle : PP_kInvalidFileHandle; | |
| } | |
| // static | |
| bool FileFileRef::QueryFile(const pp::FileRef& resource, | |
| PP_FileInfo* info) { | |
| int32_t result = PP_ERROR_FAILED; | |
| if (has_interface<PPB_Flash_File_FileRef>()) { | |
| result = get_interface<PPB_Flash_File_FileRef>()-> | |
| QueryFile(resource.pp_resource(), info); | |
| } | |
| return result == PP_OK; | |
| } | |
| } // namespace flash | |
| } // namespace pp |