// 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() { 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(); } // 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()) { result = get_interface()-> 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()) { result = get_interface()-> 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()) { result = get_interface()-> 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()) { result = get_interface()-> 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()) { result = get_interface()-> 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* dir_contents) { dir_contents->clear(); int32_t result = PP_ERROR_FAILED; if (has_interface()) { PP_DirContents_Dev* contents = NULL; result = get_interface()-> 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()-> 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()) { result = get_interface()-> CreateTemporaryFile(instance.pp_instance(), &file_handle); } return (result == PP_OK) ? file_handle : PP_kInvalidFileHandle; } } // namespace flash // FileFileRef ----------------------------------------------------------------- namespace { template <> const char* interface_name() { return PPB_FLASH_FILE_FILEREF_INTERFACE; } } // namespace namespace flash { // static bool FileFileRef::IsAvailable() { return has_interface(); } // 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()) { result = get_interface()-> 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()) { result = get_interface()-> QueryFile(resource.pp_resource(), info); } return result == PP_OK; } } // namespace flash } // namespace pp