diff --git a/bundle.json b/bundle.json index 70cea83e00c50c84a1a80b8bc719d4b33782796d..b8f3c2f08b27136cbfd786160ed71374e92890a5 100644 --- a/bundle.json +++ b/bundle.json @@ -67,8 +67,7 @@ "header_files": [ "file_access_ext_ability.h", "file_access_extension_info.h", - "file_access_ext_stub_impl.h", - "file_access_ext_proxy.h" + "file_access_ext_stub_impl.h" ], "header_base": "//foundation/filemanagement/user_file_service/interfaces/inner_api/file_access/include" } diff --git a/frameworks/js/napi/file_access_module/BUILD.gn b/frameworks/js/napi/file_access_module/BUILD.gn index b5c74e8a8cd245841e791a78d5234529b41b2370..45421e36af8a7421cb7824da1db47e8b3fdfeac1 100644 --- a/frameworks/js/napi/file_access_module/BUILD.gn +++ b/frameworks/js/napi/file_access_module/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2024 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -53,8 +53,10 @@ ohos_shared_library("fileaccess") { ] deps = [ + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", "${user_file_service_path}/services:file_access_service", + "${user_file_service_path}/services:file_access_service_base_include", ] external_deps = [ diff --git a/frameworks/js/napi/file_access_module/napi_observer_callback.cpp b/frameworks/js/napi/file_access_module/napi_observer_callback.cpp index 748d7e6b558a494a835cb2dc314ee4b79c19b4da..2529ebdcebe90f48a5e19878a56da58dc7ea53e1 100644 --- a/frameworks/js/napi/file_access_module/napi_observer_callback.cpp +++ b/frameworks/js/napi/file_access_module/napi_observer_callback.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 Huawei Device Co., Ltd. + * Copyright (C) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -119,7 +119,7 @@ void NapiObserver::NapiWorkScope(uv_work_t *work, int status) napi_close_handle_scope(param->napiObserver->env_, scope); } -void NapiObserver::OnChange(NotifyMessage ¬ifyMessage) +void NapiObserver::OnChange(const NotifyMessage ¬ifyMessage) { uv_loop_s *loop = nullptr; napi_status napiStatus = napi_get_uv_event_loop(env_, &loop); @@ -151,4 +151,4 @@ void NapiObserver::OnChange(NotifyMessage ¬ifyMessage) work_.release(); } } // namespace FileAccessFwk -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/frameworks/js/napi/file_access_module/napi_observer_callback.h b/frameworks/js/napi/file_access_module/napi_observer_callback.h index 553b383b93dd08c56b13d83c02c1ea27a49f5e63..032e6ac9b54c1068e3b7726ee879e0e842cc7216 100644 --- a/frameworks/js/napi/file_access_module/napi_observer_callback.h +++ b/frameworks/js/napi/file_access_module/napi_observer_callback.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -18,7 +18,7 @@ #include "file_access_framework_errno.h" #include "hilog_wrapper.h" -#include "observer_callback_stub.h" +#include "file_access_observer_stub.h" #include "napi/native_common.h" #include "napi/native_node_api.h" #include "napi/native_api.h" @@ -31,7 +31,7 @@ class NapiObserver { public: NapiObserver(napi_env env, napi_value callback); virtual ~NapiObserver(); - void OnChange(NotifyMessage ¬ifyMessage); + void OnChange(const NotifyMessage ¬ifyMessage); napi_ref cbOnRef_ = nullptr; private: struct CallbackParam { @@ -45,18 +45,19 @@ private: static void NapiWorkScope(uv_work_t *work, int status); }; -class NapiObserverCallback : public ObserverCallbackStub { +class NapiObserverCallback : public FileAccessObserverStub { public: - explicit NapiObserverCallback(std::shared_ptr observer): ObserverCallbackStub(), + explicit NapiObserverCallback(std::shared_ptr observer): FileAccessObserverStub(), observer_(observer) {} virtual ~NapiObserverCallback() = default; - void OnChange(NotifyMessage ¬ifyMessage) override + int OnChange(const NotifyMessage ¬ifyMessage) override { observer_->OnChange(notifyMessage); + return 0; } std::shared_ptr observer_ = nullptr; }; } // namespace FileAccessFwk } // namespace OHOS -#endif // NAPI_OBSERVER_CALLBACK_H \ No newline at end of file +#endif // NAPI_OBSERVER_CALLBACK_H diff --git a/interfaces/inner_api/file_access/BUILD.gn b/interfaces/inner_api/file_access/BUILD.gn index 01583d6f88d3d66ecd9f75aa695df1e2d061be04..380e0c096c05d5a1d431ad281bccfe062f0bf406 100644 --- a/interfaces/inner_api/file_access/BUILD.gn +++ b/interfaces/inner_api/file_access/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,9 +11,78 @@ # See the License for the specific language governing permissions and # limitations under the License. +import("//build/config/components/idl_tool/idl.gni") import("//build/ohos.gni") import("//foundation/filemanagement/user_file_service/filemanagement_aafwk.gni") +idl_gen_interface("IFile_Access_Ext_Base") { + src_idl = rebase_path("IFileAccessExtBase.idl") + hitrace = "HITRACE_TAG_FILEMANAGEMENT" + log_domainid = "0xD00430A" + log_tag = "filemanagement" +} + +config("IFile_Access_Ext_Base_config") { + visibility = [ ":*" ] + include_dirs = [ + "include", + "${user_file_service_path}/utils", + "${user_file_service_path}/services/native/file_access_service/include", + "${user_file_service_path}/interfaces/kits/js/src/common", + "${target_gen_dir}", + ] +} + +ohos_source_set("file_access_ext_base_source") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + public_configs = [ ":IFile_Access_Ext_Base_config" ] + output_values = get_target_outputs(":IFile_Access_Ext_Base") + sources = filter_include(output_values, [ "*.cpp" ]) + deps = [ ":IFile_Access_Ext_Base" ] + + external_deps = [ + "ability_base:want", + "ability_base:zuri", + "ability_runtime:ability_connect_callback_stub", + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "ipc:ipc_core", + "ipc:ipc_single", + ] + + subsystem_name = "filemanagement" + part_name = "user_file_service" +} + +ohos_source_set("file_access_ext_base_include") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + public_configs = [ ":IFile_Access_Ext_Base_config" ] + deps = [ ":IFile_Access_Ext_Base" ] + + external_deps = [ + "ability_base:want", + "ability_base:zuri", + "ability_runtime:ability_connect_callback_stub", + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "ipc:ipc_core", + "ipc:ipc_single", + ] + + subsystem_name = "filemanagement" + part_name = "user_file_service" +} + config("ability_config") { visibility = [ ":*" ] include_dirs = [ @@ -54,16 +123,20 @@ ohos_shared_library("file_access_extension_ability_kit") { "${user_file_service_path}/services/native/file_access_service/include", ] + deps = [ + ":file_access_ext_base_source", + "${user_file_service_path}/services:file_access_service_base_source", + ] + sources = [ - "${user_file_service_path}/services/native/file_access_service/src/file_access_service_proxy.cpp", + "${user_file_service_path}/services/native/file_access_service/src/file_access_service_client.cpp", "src/app_file_access_ext_connection.cpp", "src/file_access_ext_ability.cpp", - "src/file_access_ext_proxy.cpp", - "src/file_access_ext_stub.cpp", "src/file_access_ext_stub_impl.cpp", "src/file_access_helper.cpp", "src/js_file_access_ext_ability.cpp", "src/napi_common_fileaccess.cpp", + "src/uri_ext.cpp", ] configs = [ ":ability_config" ] diff --git a/interfaces/inner_api/file_access/IFileAccessExtBase.idl b/interfaces/inner_api/file_access/IFileAccessExtBase.idl new file mode 100644 index 0000000000000000000000000000000000000000..e90371e2398844dd3cc345b27157cda64b694f84 --- /dev/null +++ b/interfaces/inner_api/file_access/IFileAccessExtBase.idl @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +sequenceable FileAccessExtensionInfo..OHOS.FileAccessFwk.Result; +sequenceable FileAccessExtensionInfo..OHOS.FileAccessFwk.FileInfo; +sequenceable FileFilter..OHOS.FileAccessFwk.FileFilter; +sequenceable FileInfoSharedMemory..OHOS.FileAccessFwk.SharedMemoryInfo; +sequenceable FileAccessExtensionInfo..OHOS.FileAccessFwk.RootInfo; +sequenceable UriExt..OHOS.FileAccessFwk.Urie; +interface OHOS.FileAccessFwk.IFileAccessExtBase { + [ipccode 1] void OpenFile([in] Urie uri, [in] int flags, [out] FileDescriptor fd); + [ipccode 2] void CreateFile([in] Urie parent, [in] String displayName, [out] Urie newFile); + [ipccode 3] void Mkdir([in] Urie parent, [in] String displayName, [out] Urie newFile); + [ipccode 4] void Delete([in] Urie sourceFile); + [ipccode 5] void Move([in] Urie sourceFile, [in] Urie targetParent, [out] Urie newFile); + [ipccode 6] void Copy([in] Urie sourceUri, [in] Urie destUri, [out] Result[] copyResult, + [out] int retCode, [in] boolean force); + [ipccode 17] void CopyFile([in] Urie sourceUri, [in] Urie destUri, [in] String fileName, + [out] Urie newFileUri); + [ipccode 7] void Rename([in] Urie sourceFile, [in] String displayName, [out] Urie newFile); + [ipccode 8] void ListFile([in] FileInfo fileInfo, [in] long offset, [in] FileFilter filter, + [inout] SharedMemoryInfo meminfo); + [ipccode 9] void ScanFile([in] FileInfo fileInfo, [in] long offset, [in] long maxCount, + [in] FileFilter filter, [out] FileInfo[] fileInfoVec); + [ipccode 12] void Query([in] Urie uri, [in] List columns, [out] List results); + [ipccode 15] void GetFileInfoFromUri([in] Urie selectFile, [out] FileInfo fileInfo); + [ipccode 16] void GetFileInfoFromRelativePath([in] String selectFile, [out] FileInfo fileInfo); + [ipccode 13] void GetRoots([out] List rootInfoVec); + [ipccode 14] void Access([in] Urie uri, [out] boolean isExist); + [ipccode 10] void StartWatcher([in] Urie uri); + [ipccode 11] void StopWatcher([in] Urie uri); + [ipccode 18] void MoveItem([in] Urie sourceFile, [in] Urie targetParent, [out] Result[] moveResult, + [out] int retCode, [in] boolean force); + [ipccode 19] void MoveFile([in] Urie sourceFile, [in] Urie targetParent, [in] String fileName, [out] Urie newFile); +} diff --git a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h deleted file mode 100644 index 8fabc071de4063a98165336ed66b2c24407288bc..0000000000000000000000000000000000000000 --- a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FILE_ACCESS_EXT_PROXY_H -#define FILE_ACCESS_EXT_PROXY_H - -#include -#include -#include - -#include "file_access_extension_info.h" -#include "ifile_access_ext_base.h" -#include "iremote_broker.h" -#include "iremote_object.h" -#include "iremote_proxy.h" -#include "refbase.h" -#include "uri.h" - -namespace OHOS { -namespace FileAccessFwk { -class FileAccessExtProxy : public IRemoteProxy { -public: - explicit FileAccessExtProxy(const sptr &remote) : IRemoteProxy(remote) {} - - virtual ~FileAccessExtProxy() {} - - virtual int OpenFile(const Uri &uri, const int flags, int &fd) override; - virtual int CreateFile(const Uri &parent, const std::string &displayName, Uri &newFile) override; - virtual int Mkdir(const Uri &parent, const std::string &displayName, Uri &newFile) override; - virtual int Delete(const Uri &sourceFile) override; - virtual int Move(const Uri &sourceFile, const Uri &targetParent, Uri &newFile) override; - virtual int Copy(const Uri &sourceUri, const Uri &destUri, std::vector ©Result, - bool force = false) override; - virtual int CopyFile(const Uri &sourceUri, const Uri &destUri, const std::string &fileName, - Uri &newFileUri) override; - virtual int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; - virtual int ListFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, - SharedMemoryInfo &memInfo) override; - virtual int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) override; - virtual int Query(const Uri &uri, std::vector &columns, std::vector &results) override; - virtual int GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) override; - virtual int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo) override; - virtual int GetRoots(std::vector &rootInfoVec) override; - virtual int Access(const Uri &uri, bool &isExist) override; - virtual int StartWatcher(const Uri &uri) override; - virtual int StopWatcher(const Uri &uri) override; - virtual int MoveItem(const Uri &sourceFile, const Uri &targetParent, std::vector &moveResult, - bool force = false) override; - virtual int MoveFile(const Uri &sourceFile, const Uri &targetParent, std::string &fileName, Uri &newFile) override; -private: - static inline BrokerDelegator delegator_; -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // FILE_ACCESS_EXT_PROXY_H \ No newline at end of file diff --git a/interfaces/inner_api/file_access/include/file_access_ext_stub.h b/interfaces/inner_api/file_access/include/file_access_ext_stub.h deleted file mode 100644 index b32f54739fe536517ad6b59cafa1cd0b47014dc5..0000000000000000000000000000000000000000 --- a/interfaces/inner_api/file_access/include/file_access_ext_stub.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FILE_ACCESS_EXT_STUB_H -#define FILE_ACCESS_EXT_STUB_H - -#include - -#include -#include - -#include "ifile_access_ext_base.h" -#include "iremote_stub.h" -#include "message_option.h" -#include "message_parcel.h" -#include "refbase.h" - -namespace OHOS { -namespace FileAccessFwk { -class FileAccessExtStub : public IRemoteStub { -public: - FileAccessExtStub(); - virtual ~FileAccessExtStub(); - int OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) override; -private: - ErrCode CmdOpenFile(MessageParcel &data, MessageParcel &reply); - ErrCode CmdCreateFile(MessageParcel &data, MessageParcel &reply); - ErrCode CmdMkdir(MessageParcel &data, MessageParcel &reply); - ErrCode CmdDelete(MessageParcel &data, MessageParcel &reply); - ErrCode CmdMove(MessageParcel &data, MessageParcel &reply); - ErrCode CmdCopy(MessageParcel &data, MessageParcel &reply); - ErrCode CmdCopyFile(MessageParcel &data, MessageParcel &reply); - ErrCode CmdRename(MessageParcel &data, MessageParcel &reply); - ErrCode CmdListFile(MessageParcel &data, MessageParcel &reply); - ErrCode CmdScanFile(MessageParcel &data, MessageParcel &reply); - ErrCode CmdQuery(MessageParcel &data, MessageParcel &reply); - ErrCode CmdGetFileInfoFromUri(MessageParcel &data, MessageParcel &reply); - ErrCode CmdGetFileInfoFromRelativePath(MessageParcel &data, MessageParcel &reply); - ErrCode CmdGetRoots(MessageParcel &data, MessageParcel &reply); - ErrCode CmdAccess(MessageParcel &data, MessageParcel &reply); - ErrCode CmdStartWatcher(MessageParcel &data, MessageParcel &reply); - ErrCode CmdStopWatcher(MessageParcel &data, MessageParcel &reply); - ErrCode CmdMoveItem(MessageParcel &data, MessageParcel &reply); - ErrCode CmdMoveFile(MessageParcel &data, MessageParcel &reply); - bool CheckCallingPermission(const std::string &permission); - using RequestFuncType = int (FileAccessExtStub::*)(MessageParcel &data, MessageParcel &reply); - std::map stubFuncMap_; -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // FILE_ACCESS_EXT_STUB_H \ No newline at end of file diff --git a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h index 954b695e0714e2902b8bfcc4f21e32444df3f18f..121fe0b997f1f8f2271bf0f2995d57d9d543d06d 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -20,48 +20,50 @@ #include #include "file_access_ext_ability.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_extension_info.h" #include "js_native_api_types.h" #include "uri.h" +#include "uri_ext.h" namespace OHOS { namespace FileAccessFwk { -class FileAccessExtStubImpl : public FileAccessExtStub { +class FileAccessExtStubImpl : public FileAccessExtBaseStub { public: explicit FileAccessExtStubImpl(const std::shared_ptr& extension, napi_env env) : extension_(extension) {} virtual ~FileAccessExtStubImpl() {} - int OpenFile(const Uri &uri, const int flags, int &fd) override; - int CreateFile(const Uri &parent, const std::string &displayName, Uri &newFile) override; - int Mkdir(const Uri &parent, const std::string &displayName, Uri &newFile) override; - int Delete(const Uri &sourceFile) override; - int Move(const Uri &sourceFile, const Uri &targetParent, Uri &newFile) override; - int Copy(const Uri &sourceUri, const Uri &destUri, std::vector ©Result, - bool force = false) override; - int CopyFile(const Uri &sourceUri, const Uri &destUri, const std::string &fileName, - Uri &newFileUri) override; - int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; + bool CheckCallingPermission(const std::string &permission); + int OpenFile(const Urie &uri, const int flags, int &fd) override; + int CreateFile(const Urie &parent, const std::string &displayName, Urie &newFile) override; + int Mkdir(const Urie &parent, const std::string &displayName, Urie &newFile) override; + int Delete(const Urie &sourceFile) override; + int Move(const Urie &sourceFile, const Urie &targetParent, Urie &newFile) override; + int Copy(const Urie &sourceUri, const Urie &destUri, std::vector ©Result, + int32_t& retCode, bool force = false) override; + int CopyFile(const Urie &sourceUri, const Urie &destUri, const std::string &fileName, + Urie &newFileUri) override; + int Rename(const Urie &sourceFile, const std::string &displayName, Urie &newFile) override; int ListFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, SharedMemoryInfo &memInfo) override; int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) override; - int Query(const Uri &uri, std::vector &columns, std::vector &results) override; - int GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) override; + int Query(const Urie &uri, const std::vector &columns, std::vector &results) override; + int GetFileInfoFromUri(const Urie &selectFile, FileInfo &fileInfo) override; int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo) override; int GetRoots(std::vector &rootInfoVec) override; - int Access(const Uri &uri, bool &isExist) override; - int StartWatcher(const Uri &uri) override; - int StopWatcher(const Uri &uri) override; - int MoveItem(const Uri &sourceFile, const Uri &targetParent, std::vector &moveResult, - bool force = false) override; - int MoveFile(const Uri &sourceFile, const Uri &targetParent, std::string &fileName, Uri &newFile) override; + int Access(const Urie &uri, bool &isExist) override; + int StartWatcher(const Urie &uri) override; + int StopWatcher(const Urie &uri) override; + int MoveItem(const Urie &sourceFile, const Urie &targetParent, std::vector &moveResult, + int32_t& retCode, bool force = false) override; + int MoveFile(const Urie &sourceFile, const Urie &targetParent, const std::string &fileName, Urie &newFile) override; private: std::shared_ptr GetOwner(); std::shared_ptr extension_; }; } // namespace FileAccessFwk } // namespace OHOS -#endif // FILE_ACCESS_EXT_STUB_IMPL_H \ No newline at end of file +#endif // FILE_ACCESS_EXT_STUB_IMPL_H diff --git a/interfaces/inner_api/file_access/include/file_access_extension_info.h b/interfaces/inner_api/file_access/include/file_access_extension_info.h index 2be9daa5a0ec7da9862291b3f6edcee8c2b4be63..4585f003c152806769a9c383d6e6dc3560b833ab 100644 --- a/interfaces/inner_api/file_access/include/file_access_extension_info.h +++ b/interfaces/inner_api/file_access/include/file_access_extension_info.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -300,7 +300,7 @@ public: virtual bool ReadFromParcel(MessageParcel& parcel) = 0; }; -struct ConnectExtensionInfo : public MessageParcelable { +struct ConnectExtensionInfo : public Parcelable, public MessageParcelable { public: AAFwk::Want want = {}; sptr token = nullptr; @@ -308,6 +308,31 @@ public: ConnectExtensionInfo() = default; ConnectExtensionInfo(AAFwk::Want want, sptr token) : want(want), token(token) {} + virtual bool Marshalling(Parcel &parcel) const override + { + if (!parcel.WriteParcelable(&want)) { + return false; + } + if (!parcel.WriteRemoteObject(token)) { + return false; + } + return true; + } + + static ConnectExtensionInfo *Unmarshalling(Parcel &parcel) + { + ConnectExtensionInfo *result = new (std::nothrow)ConnectExtensionInfo(); + if (result == nullptr) { + return nullptr; + } + + if (!result->ReadFromParcelwithParcelInput(parcel)) { + delete result; + result = nullptr; + } + return result; + } + bool WriteToParcel(MessageParcel &parcel) const override { if (!parcel.WriteParcelable(&want)) { @@ -319,6 +344,17 @@ public: return true; } + bool ReadFromParcelwithParcelInput(Parcel &parcel) + { + MessageParcel& mParcel = static_cast(parcel); + std::shared_ptr wantPtr(parcel.ReadParcelable()); + token = mParcel.ReadRemoteObject(); + if (wantPtr == nullptr || token == nullptr) { + return false; + } + want = AAFwk::Want(*wantPtr); + return true; + } bool ReadFromParcel(MessageParcel &parcel) override { std::shared_ptr wantPtr(parcel.ReadParcelable()); @@ -332,4 +368,4 @@ public: }; } // namespace FileAccessFwk } // namespace OHOS -#endif // FILE_ACCESS_EXTENSION_INFO_H \ No newline at end of file +#endif // FILE_ACCESS_EXTENSION_INFO_H diff --git a/interfaces/inner_api/file_access/include/file_access_helper.h b/interfaces/inner_api/file_access/include/file_access_helper.h index ade315c631839a783a375b043c7f6532d21439fc..118bbaf196b4bd5989c0d02e9fa65607a78dfaf4 100644 --- a/interfaces/inner_api/file_access/include/file_access_helper.h +++ b/interfaces/inner_api/file_access/include/file_access_helper.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -28,7 +28,7 @@ #include "app_file_access_ext_connection.h" #include "file_access_extension_info.h" #include "ifile_access_ext_base.h" -#include "iobserver_callback.h" +#include "ifile_access_observer.h" #include "iremote_object.h" #include "refbase.h" #include "uri.h" @@ -115,4 +115,4 @@ private: }; } // namespace FileAccessFwk } // namespace OHOS -#endif // FILE_ACCESS_HELPER_H \ No newline at end of file +#endif // FILE_ACCESS_HELPER_H diff --git a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h deleted file mode 100644 index 1c9cfe0aea39a410fd9339483a51185c75f164e2..0000000000000000000000000000000000000000 --- a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef I_FILE_ACCESS_EXT_BASE_H -#define I_FILE_ACCESS_EXT_BASE_H - -#include -#include -#include -#include - -#include "file_access_extension_info.h" -#include "file_access_framework_errno.h" -#include "file_filter.h" -#include "file_info_shared_memory.h" -#include "uri.h" - -namespace OHOS { -namespace FileAccessFwk { - -class IFileAccessExtBase : public IRemoteBroker { -public: - DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.FileAccessFwk.IFileAccessExtBase"); - - enum { - CMD_OPEN_FILE = 1, - CMD_CREATE_FILE, - CMD_MKDIR, - CMD_DELETE, - CMD_MOVE, - CMD_COPY, - CMD_RENAME, - CMD_LIST_FILE, - CMD_SCAN_FILE, - CMD_START_WATCHER, - CMD_STOP_WATCHER, - CMD_QUERY, - CMD_GET_ROOTS, - CMD_ACCESS, - CMD_GET_FILEINFO_FROM_URI, - CMD_GET_FILEINFO_FROM_RELATIVE_PATH, - CMD_COPY_FILE, - CMD_MOVE_ITEM, - CMD_MOVE_FILE - }; - - virtual int OpenFile(const Uri &uri, const int flags, int &fd) = 0; - virtual int CreateFile(const Uri &parent, const std::string &displayName, Uri &newFile) = 0; - virtual int Mkdir(const Uri &parent, const std::string &displayName, Uri &newFile) = 0; - virtual int Delete(const Uri &sourceFile) = 0; - virtual int Move(const Uri &sourceFile, const Uri &targetParent, Uri &newFile) = 0; - virtual int Copy(const Uri &sourceUri, const Uri &destUri, std::vector ©Result, - bool force = false) = 0; - virtual int CopyFile(const Uri &sourceUri, const Uri &destUri, const std::string &fileName, - Uri &newFileUri) = 0; - virtual int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) = 0; - virtual int ListFile(const FileInfo &fileInfo, const int64_t offset, - const FileFilter &filter, SharedMemoryInfo &memInfo) = 0; - virtual int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) = 0; - virtual int Query(const Uri &uri, std::vector &columns, std::vector &results) = 0; - virtual int GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) = 0; - virtual int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo) = 0; - virtual int GetRoots(std::vector &rootInfoVec) = 0; - virtual int Access(const Uri &uri, bool &isExist) = 0; - virtual int StartWatcher(const Uri &uri) = 0; - virtual int StopWatcher(const Uri &uri) = 0; - virtual int MoveItem(const Uri &sourceFile, const Uri &targetParent, std::vector &moveResult, - bool force = false) = 0; - virtual int MoveFile(const Uri &sourceFile, const Uri &targetParent, std::string &fileName, Uri &newFile) = 0; -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // I_FILE_ACCESS_EXT_BASE_H \ No newline at end of file diff --git a/interfaces/inner_api/file_access/include/uri_ext.h b/interfaces/inner_api/file_access/include/uri_ext.h new file mode 100644 index 0000000000000000000000000000000000000000..5a15cce99f4190c2323be81b11853ee390fb565b --- /dev/null +++ b/interfaces/inner_api/file_access/include/uri_ext.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FILE_ACCESS_URI_EXT_H +#define FILE_ACCESS_URI_EXT_H + +#include +#include "uri.h" + +namespace OHOS { +namespace FileAccessFwk { +namespace { + const std::string NOT_CACHED = "NOT VALID"; + const std::string EMPTY = ""; + const std::size_t NOT_FOUND = std::string::npos; + const int NOT_CALCULATED = -2; + const int PORT_NONE = -1; + const char SCHEME_SEPARATOR = ':'; + const char SCHEME_FRAGMENT = '#'; + const char LEFT_SEPARATOR = '/'; + const char RIGHT_SEPARATOR = '\\'; + const char QUERY_FLAG = '?'; + const char USER_HOST_SEPARATOR = '@'; + const char PORT_SEPARATOR = ':'; + const std::size_t POS_INC = 1; + const std::size_t POS_INC_MORE = 2; + const std::size_t POS_INC_AGAIN = 3; +} // namespace + +class Urie : public OHOS::Uri { +public: + Urie(); + Urie(const std::string& uriString); + ~Urie(); + + OHOS::Uri ConvertToUri(Urie &urie); + std::string GetScheme(); + std::string GetSchemeSpecificPart(); + std::string GetAuthority(); + std::string GetHost(); + int GetPort(); + std::string GetUserInfo(); + std::string GetQuery(); + std::string GetPath(); + void GetPathSegments(std::vector& segments); + std::string GetFragment(); + bool IsHierarchical(); + bool IsAbsolute(); + bool IsRelative(); + bool Equals(const Urie& other) const; + int CompareTo(const Urie& other) const; + std::string ToString() const; + bool operator==(const Urie& other) const; + virtual bool Marshalling(Parcel& parcel) const override; + static Urie* Unmarshalling(Parcel& parcel); + +private: + bool CheckScheme(); + std::string ParseScheme(); + std::string ParseSsp(); + std::string ParseAuthority(); + std::string ParseUserInfo(); + std::string ParseHost(); + int ParsePort(); + std::string ParsePath(std::size_t ssi); + std::string ParsePath(); + std::string ParseQuery(); + std::string ParseFragment(); + std::size_t FindSchemeSeparator(); + std::size_t FindFragmentSeparator(); + + std::string uriString_; + std::string scheme_; + std::string ssp_; + std::string authority_; + std::string host_; + int port_; + std::string userInfo_; + std::string query_; + std::string path_; + std::string fragment_; + std::size_t cachedSsi_; + std::size_t cachedFsi_; +}; +} // namespace FileAccessFwk +} // namespace OHOS +#endif // FILE_ACCESS_URI_EXT_H diff --git a/interfaces/inner_api/file_access/libfile_access_extension_ability_kit.map b/interfaces/inner_api/file_access/libfile_access_extension_ability_kit.map index 78a0937aa832fb9365af857e1aa10a03d0777af8..246c7e3f99b1fd61274e081420988570599fd35c 100644 --- a/interfaces/inner_api/file_access/libfile_access_extension_ability_kit.map +++ b/interfaces/inner_api/file_access/libfile_access_extension_ability_kit.map @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -19,10 +19,10 @@ *OHOS::FileAccessFwk::UnwrapArrayWantFromJS*; *OHOS::FileAccessFwk::WrapArrayWantToJS*; *OHOS::FileAccessFwk::FileAccessNotifyManager*; - *OHOS::FileAccessFwk::FileAccessExtStub*; + *OHOS::FileAccessFwk::FileAccessExtBaseStub*; *OHOS::FileAccessFwk::FileAccessExtStubImpl*; - *OHOS::FileAccessFwk::FileAccessExtProxy*; + *OHOS::FileAccessFwk::FileAccessExtBaseProxy*; }; local: *; -}; \ No newline at end of file +}; diff --git a/interfaces/inner_api/file_access/src/app_file_access_ext_connection.cpp b/interfaces/inner_api/file_access/src/app_file_access_ext_connection.cpp index 5ce13649864951748b0033653621bfc7a8b84a1a..759035119bf44f7f5fab0c973060ad7de182a1e2 100644 --- a/interfaces/inner_api/file_access/src/app_file_access_ext_connection.cpp +++ b/interfaces/inner_api/file_access/src/app_file_access_ext_connection.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -20,7 +20,7 @@ #include "ability_connect_callback_interface.h" #include "ability_manager_client.h" -#include "file_access_service_proxy.h" +#include "file_access_service_client.h" #include "hilog_wrapper.h" #include "iremote_broker.h" @@ -66,9 +66,9 @@ void AppFileAccessExtConnection::ConnectFileExtAbility(const AAFwk::Want &want) fileExtProxy_ = nullptr; } isConnected_.store(false); - auto proxy = FileAccessServiceProxy::GetInstance(); + auto proxy = FileAccessServiceClient::GetInstance(); if (proxy == nullptr) { - HILOG_ERROR("ConnectFileExtAbility FileAccessServiceProxy GetInstance fail"); + HILOG_ERROR("ConnectFileExtAbility FileAccessServiceClient GetInstance fail"); return; } @@ -92,9 +92,9 @@ void AppFileAccessExtConnection::DisconnectFileExtAbility() if (fileExtProxy_ != nullptr) { RemoveFileAccessDeathRecipient(fileExtProxy_->AsObject()); } - auto proxy = FileAccessServiceProxy::GetInstance(); + auto proxy = FileAccessServiceClient::GetInstance(); if (proxy == nullptr) { - HILOG_ERROR("DisconnectFileExtAbility FileAccessServiceProxy GetInstance fail"); + HILOG_ERROR("DisconnectFileExtAbility FileAccessServiceClient GetInstance fail"); return; } ErrCode ret = proxy->DisConnectFileExtAbility(this); diff --git a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp deleted file mode 100644 index c130c52a82927a66ee0f9c503a53806e77c80731..0000000000000000000000000000000000000000 --- a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp +++ /dev/null @@ -1,1204 +0,0 @@ -/* - * Copyright (c) 2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "file_access_ext_proxy.h" - -#include "file_access_framework_errno.h" -#include "file_access_extension_info.h" -#include "hilog_wrapper.h" -#include "hitrace_meter.h" -#include "ipc_types.h" -#include "message_option.h" -#include "message_parcel.h" -#include "user_access_tracer.h" - -namespace OHOS { -namespace FileAccessFwk { -namespace { - constexpr int COPY_EXCEPTION = -1; - constexpr uint32_t MAX_COPY_ERROR_COUNT = 1000; -}; -int FileAccessExtProxy::OpenFile(const Uri &uri, const int flags, int &fd) -{ - UserAccessTracer trace; - trace.Start("OpenFile"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&uri)) { - HILOG_ERROR("fail to WriteParcelable uri"); - return E_IPCS; - } - - if (!data.WriteInt32(flags)) { - HILOG_ERROR("fail to WriteInt32 flags"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_OPEN_FILE, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("OpenFile operation failed ret : %{public}d", ret); - return ret; - } - - fd = reply.ReadFileDescriptor(); - if (fd < ERR_OK) { - HILOG_ERROR("fail to ReadFileDescriptor fd: %{public}d", fd); - return E_GETRESULT; - } - - return ERR_OK; -} - -int FileAccessExtProxy::CreateFile(const Uri &parent, const std::string &displayName, Uri &newFile) -{ - UserAccessTracer trace; - trace.Start("CreateFile"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&parent)) { - HILOG_ERROR("fail to WriteParcelable parent"); - return E_IPCS; - } - - if (!data.WriteString(displayName)) { - HILOG_ERROR("fail to WriteString displayName"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_CREATE_FILE, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("CreateFile operation failed ret : %{public}d", ret); - return ret; - } - - std::unique_ptr tempUri(reply.ReadParcelable()); - if (tempUri == nullptr) { - HILOG_ERROR("ReadParcelable value is nullptr."); - return E_IPCS; - } - - newFile = Uri(*tempUri); - if (newFile.ToString().empty()) { - HILOG_ERROR("get uri is empty."); - return E_GETRESULT; - } - - return ERR_OK; -} - -int FileAccessExtProxy::Mkdir(const Uri &parent, const std::string &displayName, Uri &newFile) -{ - UserAccessTracer trace; - trace.Start("Mkdir"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&parent)) { - HILOG_ERROR("fail to WriteParcelable parent"); - return E_IPCS; - } - - if (!data.WriteString(displayName)) { - HILOG_ERROR("fail to WriteString displayName"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_MKDIR, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("Mkdir operation failed ret : %{public}d", ret); - return ret; - } - - std::unique_ptr tempUri(reply.ReadParcelable()); - if (tempUri == nullptr) { - HILOG_ERROR("ReadParcelable value is nullptr."); - return E_IPCS; - } - - newFile = Uri(*tempUri); - if (newFile.ToString().empty()) { - HILOG_ERROR("get uri is empty."); - return E_GETRESULT; - } - - return ERR_OK; -} - -int FileAccessExtProxy::Delete(const Uri &sourceFile) -{ - UserAccessTracer trace; - trace.Start("Delete"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&sourceFile)) { - HILOG_ERROR("fail to WriteParcelable sourceFile"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_DELETE, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("Delete operation failed ret : %{public}d", ret); - return ret; - } - - return ERR_OK; -} - -int FileAccessExtProxy::Move(const Uri &sourceFile, const Uri &targetParent, Uri &newFile) -{ - UserAccessTracer trace; - trace.Start("Move"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&sourceFile)) { - HILOG_ERROR("fail to WriteParcelable sourceFile"); - return E_IPCS; - } - - if (!data.WriteParcelable(&targetParent)) { - HILOG_ERROR("fail to WriteParcelable targetParent"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_MOVE, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("Move operation failed ret : %{public}d", ret); - return ret; - } - - std::unique_ptr tempUri(reply.ReadParcelable()); - if (tempUri == nullptr) { - HILOG_ERROR("ReadParcelable value is nullptr."); - return E_IPCS; - } - - newFile = Uri(*tempUri); - if (newFile.ToString().empty()) { - HILOG_ERROR("get uri is empty."); - return E_GETRESULT; - } - - return ERR_OK; -} - -static int WriteCopyFuncArguments(OHOS::MessageParcel &data, const Uri &sourceUri, const Uri &destUri, bool force) -{ - UserAccessTracer trace; - trace.Start("WriteCopyFuncArguments"); - if (!data.WriteParcelable(&sourceUri)) { - HILOG_ERROR("fail to WriteParcelable uri"); - return E_IPCS; - } - - if (!data.WriteParcelable(&destUri)) { - HILOG_ERROR("fail to WriteParcelable targetParent"); - return E_IPCS; - } - - if (!data.WriteBool(force)) { - HILOG_ERROR("fail to WriteBool force"); - return E_IPCS; - } - return ERR_OK; -} - -static int WriteCopyFileFuncArguments(OHOS::MessageParcel &data, const Uri &sourceUri, const Uri &destUri, - const std::string &fileName) -{ - UserAccessTracer trace; - trace.Start("WriteCopyFuncArguments"); - if (!data.WriteString(sourceUri.ToString())) { - HILOG_ERROR("fail to WriteParcelable sourceUri"); - return E_IPCS; - } - if (!data.WriteString(destUri.ToString())) { - HILOG_ERROR("fail to WriteParcelable destUri"); - return E_IPCS; - } - if (!data.WriteString(fileName)) { - HILOG_ERROR("fail to WriteString fileName"); - return E_IPCS; - } - return ERR_OK; -} - -static int ReadCopyFuncResults(OHOS::MessageParcel &reply, std::vector ©Result) -{ - UserAccessTracer trace; - trace.Start("ReadCopyFuncResults"); - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - if (ret == ERR_OK) { - HILOG_ERROR("Copy operation success"); - return ret; - } - - uint32_t count = 0; - if (!reply.ReadUint32(count)) { - HILOG_ERROR("Copy operation failed to Read count"); - return E_IPCS; - } - if (count > MAX_COPY_ERROR_COUNT) { - HILOG_ERROR("Copy operation failed, count value greater than max count"); - Result result { "", "", E_COUNT, "Count value greater than max count"}; - copyResult.clear(); - copyResult.push_back(result); - return COPY_EXCEPTION; - } - - copyResult.clear(); - for (uint32_t i = 0; i < count; i++) { - std::unique_ptr copyResultPtr(reply.ReadParcelable()); - if (copyResultPtr != nullptr) { - copyResult.push_back(*copyResultPtr); - } - } - return ret; -} - -int FileAccessExtProxy::Copy(const Uri &sourceUri, const Uri &destUri, std::vector ©Result, bool force) -{ - UserAccessTracer trace; - trace.Start("Copy"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - int ret = WriteCopyFuncArguments(data, sourceUri, destUri, force); - if (ret != ERR_OK) { - HILOG_ERROR("Write copy function arguments error, code: %{public}d", ret); - return ret; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_COPY, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest, err: %{public}d", err); - return err; - } - - ret = ReadCopyFuncResults(reply, copyResult); - if (ret != ERR_OK) { - HILOG_ERROR("Read copy function result error, code: %{public}d", ret); - return ret; - } - - return ret; -} - -int FileAccessExtProxy::CopyFile(const Uri &sourceUri, const Uri &destUri, const std::string &fileName, Uri &newFileUri) -{ - UserAccessTracer trace; - trace.Start("CopyFile"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - int ret = WriteCopyFileFuncArguments(data, sourceUri, destUri, fileName); - if (ret != ERR_OK) { - HILOG_ERROR("Write copy file function arguments error, code: %{public}d", ret); - return ret; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_COPY_FILE, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest, err: %{public}d", err); - return err; - } - - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - if (ret != ERR_OK) { - HILOG_ERROR("Copy file error, code:%{public}d", ret); - return ret; - } - std::string tempUri = ""; - if (!reply.ReadString(tempUri)) { - HILOG_ERROR("fail to ReadString copyResult"); - return E_IPCS; - } - if (tempUri.empty()) { - HILOG_ERROR("get uri is empty"); - return E_GETRESULT; - } - newFileUri = Uri(tempUri); - return ERR_OK; -} - -int FileAccessExtProxy::Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) -{ - UserAccessTracer trace; - trace.Start("Rename"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&sourceFile)) { - HILOG_ERROR("fail to WriteParcelable sourceFile"); - return E_IPCS; - } - - if (!data.WriteString(displayName)) { - HILOG_ERROR("fail to WriteString displayName"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_RENAME, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("Rename operation failed ret : %{public}d", ret); - return ret; - } - - std::unique_ptr tempUri(reply.ReadParcelable()); - if (tempUri == nullptr) { - HILOG_ERROR("ReadParcelable value is nullptr."); - return E_IPCS; - } - - newFile = Uri(*tempUri); - if (newFile.ToString().empty()) { - HILOG_ERROR("get uri is empty."); - return E_GETRESULT; - } - - return ERR_OK; -} - -static int GetListFileResult(MessageParcel &reply, std::vector &fileInfoVec) -{ - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("ListFile operation failed ret : %{public}d", ret); - return ret; - } - - int64_t count = 0; - if (!reply.ReadInt64(count)) { - HILOG_ERROR("ListFile operation failed to Read count"); - return E_IPCS; - } - - fileInfoVec.clear(); - for (int64_t i = 0; i < count; i++) { - std::unique_ptr fileInfoPtr(reply.ReadParcelable()); - if (fileInfoPtr != nullptr) { - fileInfoVec.push_back(*fileInfoPtr); - } - } - return ERR_OK; -} - -static int WriteFileFilterFuncArguments(MessageParcel &data, - std::tuple args) -{ - const FileInfo *fileInfo; - int64_t offset; - const FileFilter *filter; - SharedMemoryInfo *memInfo; - std::tie(fileInfo, offset, filter, memInfo) = args; - - if (!data.WriteParcelable(fileInfo)) { - HILOG_ERROR("fail to WriteParcelable fileInfo"); - return E_IPCS; - } - - if (!data.WriteInt64(offset)) { - HILOG_ERROR("fail to WriteInt64 offset"); - return E_IPCS; - } - - if (!data.WriteParcelable(filter)) { - HILOG_ERROR("fail to WriteParcelable filter"); - return E_IPCS; - } - - if (!data.WriteParcelable(memInfo)) { - HILOG_ERROR("fail to WriteParcelable memInfo"); - return E_IPCS; - } - return ERR_OK; -} - -static int ReadFileFilterResults(MessageParcel &reply, SharedMemoryInfo &memInfo) -{ - if (!reply.ReadUint32(memInfo.dataCounts)) { - HILOG_ERROR("fail to ReadUnt64 dataCounts"); - return E_IPCS; - } - memInfo.totalDataCounts = memInfo.dataCounts; - - if (!reply.ReadUint64(memInfo.dataSize)) { - HILOG_ERROR("fail to ReadUnt64 dataSize"); - return E_IPCS; - } - - if (!reply.ReadUint32(memInfo.leftDataCounts)) { - HILOG_ERROR("fail to ReadUnt64 leftDataCounts"); - return E_IPCS; - } - - if (!reply.ReadBool(memInfo.isOver)) { - HILOG_ERROR("fail to ReadBool isOver"); - return E_IPCS; - } - return ERR_OK; -} - -int FileAccessExtProxy::ListFile(const FileInfo &fileInfo, const int64_t offset, - const FileFilter &filter, SharedMemoryInfo &memInfo) -{ - UserAccessTracer trace; - trace.Start("ListFile"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - int ret = WriteFileFilterFuncArguments(data, std::make_tuple(&fileInfo, offset, &filter, &memInfo)); - if (ret != ERR_OK) { - HILOG_ERROR("fail to WriteFileFilterFuncArguments. err: %{public}d", ret); - return ret; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_LIST_FILE, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - if (ret != ERR_OK) { - HILOG_ERROR("ListFile operation failed ret : %{public}d", ret); - return ret; - } - - ret = ReadFileFilterResults(reply, memInfo); - if (ret != ERR_OK) { - HILOG_ERROR("fail to read server return results. ret: %{public}d", ret); - return ret; - } - return ERR_OK; -} - -int FileAccessExtProxy::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) -{ - UserAccessTracer trace; - trace.Start("ScanFile"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&fileInfo)) { - HILOG_ERROR("fail to WriteParcelable fileInfo"); - return E_IPCS; - } - - if (!data.WriteInt64(offset)) { - HILOG_ERROR("fail to WriteInt64 offset"); - return E_IPCS; - } - - if (!data.WriteInt64(maxCount)) { - HILOG_ERROR("fail to WriteInt64 maxCount"); - return E_IPCS; - } - - if (!data.WriteParcelable(&filter)) { - HILOG_ERROR("fail to WriteParcelable filter"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_SCAN_FILE, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - err = GetListFileResult(reply, fileInfoVec); - if (err != ERR_OK) { - HILOG_ERROR("fail to GetListFileResult. err: %{public}d", err); - return err; - } - - return ERR_OK; -} - -static int GetQueryResult(MessageParcel &reply, std::vector &results) -{ - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("Query operation failed ret : %{public}d", ret); - return ret; - } - - int64_t count = 0; - if (!reply.ReadInt64(count)) { - HILOG_ERROR("Query operation failed to Read count"); - return E_IPCS; - } - - results.clear(); - for (int64_t i = 0; i < count; i++) { - results.push_back(reply.ReadString()); - } - return ERR_OK; -} - -int FileAccessExtProxy::Query(const Uri &uri, std::vector &columns, std::vector &results) -{ - UserAccessTracer trace; - trace.Start("Query"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&uri)) { - HILOG_ERROR("fail to WriteParcelable sourceFile"); - return E_IPCS; - } - size_t count = columns.size(); - if (!data.WriteInt64(count)) { - HILOG_ERROR("Parameter Query fail to WriteInt64 count"); - return E_IPCS; - } - if (count > FILE_RESULT_TYPE.size()) { - HILOG_ERROR(" The number of query operations exceeds %{public}zu ", FILE_RESULT_TYPE.size()); - return EINVAL; - } - - for (const auto &column : columns) { - if (!data.WriteString(column)) { - HILOG_ERROR("parameter Query fail to WriteParcelable column"); - return E_IPCS; - } - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_QUERY, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - err = GetQueryResult(reply, results); - if (err != ERR_OK) { - HILOG_ERROR("fail to GetQueryResult. err: %{public}d", err); - return err; - } - return ERR_OK; -} - -int FileAccessExtProxy::GetRoots(std::vector &rootInfoVec) -{ - UserAccessTracer trace; - trace.Start("GetRoots"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_GET_ROOTS, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("GetRoots operation failed ret : %{public}d", ret); - return ret; - } - - uint64_t count = 0; - if (!reply.ReadUint64(count)) { - HILOG_ERROR("GetRoots operation failed to Read count"); - return E_IPCS; - } - - rootInfoVec.clear(); - for (uint64_t i = 0; i < count; i++) { - std::unique_ptr rootInfoPtr(reply.ReadParcelable()); - if (rootInfoPtr != nullptr) { - rootInfoVec.push_back(*rootInfoPtr); - } - } - - return ERR_OK; -} - -int FileAccessExtProxy::GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) -{ - UserAccessTracer trace; - trace.Start("GetFileInfoFromUri"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&selectFile)) { - HILOG_ERROR("fail to WriteParcelable selectFile"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_GET_FILEINFO_FROM_URI, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("GetFileInfoFromUri operation failed ret : %{public}d", ret); - return ret; - } - - std::unique_ptr fileInfoTemp(reply.ReadParcelable()); - if (fileInfoTemp == nullptr) { - HILOG_ERROR("ReadParcelable value is nullptr."); - return E_IPCS; - } - - fileInfo = *fileInfoTemp; - return ERR_OK; -} - -int FileAccessExtProxy::GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo) -{ - UserAccessTracer trace; - trace.Start("GetFileInfoFromRelativePath"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteString(selectFile)) { - HILOG_ERROR("fail to WriteParcelable selectFile"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_GET_FILEINFO_FROM_RELATIVE_PATH, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("GetFileInfoFromRelativePath operation failed ret : %{public}d", ret); - return ret; - } - - std::unique_ptr fileInfoTemp(reply.ReadParcelable()); - if (fileInfoTemp == nullptr) { - HILOG_ERROR("ReadParcelable value is nullptr."); - return E_IPCS; - } - - fileInfo = *fileInfoTemp; - return ERR_OK; -} - -int FileAccessExtProxy::Access(const Uri &uri, bool &isExist) -{ - UserAccessTracer trace; - trace.Start("Access"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&uri)) { - HILOG_ERROR("fail to WriteParcelable uri"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_ACCESS, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("Access operation failed ret : %{public}d", ret); - return ret; - } - - if (!reply.ReadBool(isExist)) { - HILOG_ERROR("fail to ReadInt32 isExist"); - return E_IPCS; - } - - return ERR_OK; -} - -int FileAccessExtProxy::StartWatcher(const Uri &uri) -{ - UserAccessTracer trace; - trace.Start("StartWatcher"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - std::string uriString = uri.ToString(); - if (!data.WriteString(uriString)) { - HILOG_ERROR("fail to WriteParcelable uri"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_START_WATCHER, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("StartWatcher operation failed ret : %{public}d", ret); - return ret; - } - - return ERR_OK; -} - -int FileAccessExtProxy::StopWatcher(const Uri &uri) -{ - UserAccessTracer trace; - trace.Start("StopWatcher"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - std::string uriString = uri.ToString(); - if (!data.WriteString(uriString)) { - HILOG_ERROR("fail to WriteParcelable uri"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_STOP_WATCHER, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("StopWatcher operation failed ret : %{public}d", ret); - return ret; - } - - return ERR_OK; -} - -static int ReadMoveItemFuncResults(OHOS::MessageParcel &reply, std::vector &moveResult) -{ - UserAccessTracer trace; - trace.Start("ReadMoveItemFuncResults"); - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - if (ret == ERR_OK) { - HILOG_ERROR("Move operation success"); - return ret; - } - - uint32_t count = 0; - if (!reply.ReadUint32(count)) { - HILOG_ERROR("Move operation failed to Read count"); - return E_IPCS; - } - if (count > MAX_COPY_ERROR_COUNT) { - HILOG_ERROR("Move operation failed, count value greater than max count"); - Result result { "", "", E_COUNT, "Count value greater than max count"}; - moveResult.clear(); - moveResult.push_back(result); - return COPY_EXCEPTION; - } - - moveResult.clear(); - for (uint32_t i = 0; i < count; i++) { - std::unique_ptr moveResultPtr(reply.ReadParcelable()); - if (moveResultPtr != nullptr) { - moveResult.push_back(*moveResultPtr); - } - } - return ret; -} - -int FileAccessExtProxy::MoveItem(const Uri &sourceFile, const Uri &targetParent, std::vector &moveResult, - bool force) -{ - UserAccessTracer trace; - trace.Start("MoveItem"); - if (Remote() == nullptr) { - HILOG_ERROR("Remote is nullptr"); - return E_IPCS; - } - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - std::string insideInputSourceUri = sourceFile.ToString(); - if (!data.WriteString(insideInputSourceUri)) { - HILOG_ERROR("fail to WriteParcelable insideInputSourceUri"); - return E_IPCS; - } - - std::string insideInputTargetUri = targetParent.ToString(); - if (!data.WriteString(insideInputTargetUri)) { - HILOG_ERROR("fail to WriteParcelable insideInputTargetUri"); - return E_IPCS; - } - - if (!data.WriteBool(force)) { - HILOG_ERROR("fail to WriteBool force"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_MOVE_ITEM, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest, err: %{public}d", err); - return err; - } - - auto ret = ReadMoveItemFuncResults(reply, moveResult); - if (ret != ERR_OK) { - HILOG_ERROR("Read moveItem function result error, code: %{public}d", ret); - return ret; - } - - return ret; -} - -int FileAccessExtProxy::MoveFile(const Uri &sourceFile, const Uri &targetParent, std::string &fileName, Uri &newFile) -{ - UserAccessTracer trace; - trace.Start("MoveFile"); - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessExtProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - std::string insideInputSourceUri = sourceFile.ToString(); - if (!data.WriteString(insideInputSourceUri)) { - HILOG_ERROR("fail to WriteParcelable sourceFile"); - return E_IPCS; - } - - std::string insideInputTargetUri = targetParent.ToString(); - if (!data.WriteString(insideInputTargetUri)) { - HILOG_ERROR("fail to WriteParcelable targetParent"); - return E_IPCS; - } - - if (!data.WriteString(fileName)) { - HILOG_ERROR("fail to WriteParcelable fileName"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - int err = Remote()->SendRequest(CMD_MOVE_FILE, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("Move file operation failed ret : %{public}d", ret); - return ret; - } - - std::string tempUri; - if (!reply.ReadString(tempUri)) { - HILOG_ERROR("ReadParcelable value is nullptr."); - return E_IPCS; - }; - - if (tempUri.empty()) { - HILOG_ERROR("get uri is empty."); - return E_GETRESULT; - } - newFile = Uri(tempUri); - - return ERR_OK; -} -} // namespace FileAccessFwk -} // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp deleted file mode 100644 index 8bb930072b5d0abb6d11a3d21b171fd27c9225e8..0000000000000000000000000000000000000000 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp +++ /dev/null @@ -1,807 +0,0 @@ -/* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "file_access_ext_stub.h" - -#include -#include -#include -#include -#include -#include -#include "user_access_tracer.h" -#include "access_token.h" -#include "accesstoken_kit.h" -#include "file_access_extension_info.h" -#include "file_access_framework_errno.h" -#include "hilog_wrapper.h" -#include "hitrace_meter.h" -#include "ipc_object_stub.h" -#include "ipc_skeleton.h" -#include "ipc_types.h" -#include "unique_fd.h" -#include "uri.h" - -namespace OHOS { -namespace FileAccessFwk { -namespace { - const std::string FILE_ACCESS_PERMISSION = "ohos.permission.FILE_ACCESS_MANAGER"; -} -FileAccessExtStub::FileAccessExtStub() -{ - stubFuncMap_[CMD_OPEN_FILE] = &FileAccessExtStub::CmdOpenFile; - stubFuncMap_[CMD_CREATE_FILE] = &FileAccessExtStub::CmdCreateFile; - stubFuncMap_[CMD_START_WATCHER] = &FileAccessExtStub::CmdStartWatcher; - stubFuncMap_[CMD_STOP_WATCHER] = &FileAccessExtStub::CmdStopWatcher; - stubFuncMap_[CMD_MKDIR] = &FileAccessExtStub::CmdMkdir; - stubFuncMap_[CMD_DELETE] = &FileAccessExtStub::CmdDelete; - stubFuncMap_[CMD_MOVE] = &FileAccessExtStub::CmdMove; - stubFuncMap_[CMD_COPY] = &FileAccessExtStub::CmdCopy; - stubFuncMap_[CMD_RENAME] = &FileAccessExtStub::CmdRename; - stubFuncMap_[CMD_LIST_FILE] = &FileAccessExtStub::CmdListFile; - stubFuncMap_[CMD_SCAN_FILE] = &FileAccessExtStub::CmdScanFile; - stubFuncMap_[CMD_QUERY] = &FileAccessExtStub::CmdQuery; - stubFuncMap_[CMD_GET_ROOTS] = &FileAccessExtStub::CmdGetRoots; - stubFuncMap_[CMD_ACCESS] = &FileAccessExtStub::CmdAccess; - stubFuncMap_[CMD_GET_FILEINFO_FROM_URI] = &FileAccessExtStub::CmdGetFileInfoFromUri; - stubFuncMap_[CMD_GET_FILEINFO_FROM_RELATIVE_PATH] = &FileAccessExtStub::CmdGetFileInfoFromRelativePath; - stubFuncMap_[CMD_COPY_FILE] = &FileAccessExtStub::CmdCopyFile; - stubFuncMap_[CMD_MOVE_ITEM] = &FileAccessExtStub::CmdMoveItem; - stubFuncMap_[CMD_MOVE_FILE] = &FileAccessExtStub::CmdMoveFile; -} - -FileAccessExtStub::~FileAccessExtStub() -{ - stubFuncMap_.clear(); -} - -int FileAccessExtStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, - MessageOption& option) -{ - UserAccessTracer trace; - trace.Start("OnRemoteRequest"); - std::u16string descriptor = FileAccessExtStub::GetDescriptor(); - std::u16string remoteDescriptor = data.ReadInterfaceToken(); - if (descriptor != remoteDescriptor) { - return ERR_INVALID_STATE; - } - - if (!CheckCallingPermission(FILE_ACCESS_PERMISSION)) { - HILOG_ERROR("permission error"); - return E_PERMISSION; - } - - const auto &itFunc = stubFuncMap_.find(code); - if (itFunc != stubFuncMap_.end()) { - return (this->*(itFunc->second))(data, reply); - } - return IPCObjectStub::OnRemoteRequest(code, data, reply, option); -} - -ErrCode FileAccessExtStub::CmdOpenFile(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdOpenFile"); - std::shared_ptr uri(data.ReadParcelable()); - if (uri == nullptr) { - HILOG_ERROR("Parameter OpenFile fail to ReadParcelable uri"); - return E_IPCS; - } - - int flags = E_IPCS; - if (!data.ReadInt32(flags)) { - HILOG_ERROR("Parameter OpenFile fail to ReadInt32 flags"); - return E_IPCS; - } - - if (flags < 0) { - HILOG_ERROR("Parameter OpenFile flags is invalid"); - return EINVAL; - } - - int fd = -1; - int ret = OpenFile(*uri, flags, fd); - UniqueFd uniqueFd(fd); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter OpenFile fail to WriteInt32 ret"); - return E_IPCS; - } - - if (!reply.WriteFileDescriptor(fd)) { - HILOG_ERROR("Parameter OpenFile fail to WriteFileDescriptor fd"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdCreateFile(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdCreateFile"); - std::shared_ptr parent(data.ReadParcelable()); - if (parent == nullptr) { - HILOG_ERROR("Parameter CreateFile fail to ReadParcelable parent"); - return E_IPCS; - } - - std::string displayName = ""; - if (!data.ReadString(displayName)) { - HILOG_ERROR("Parameter CreateFile fail to ReadString displayName"); - return E_IPCS; - } - - if (displayName.empty()) { - HILOG_ERROR("Parameter CreateFile displayName is empty"); - return EINVAL; - } - - std::string newFile = ""; - OHOS::Uri newFileUri(newFile); - int ret = CreateFile(*parent, displayName, newFileUri); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter CreateFile fail to WriteInt32 ret"); - return E_IPCS; - } - - if (!reply.WriteParcelable(&newFileUri)) { - HILOG_ERROR("Parameter CreateFile fail to WriteParcelable newFileUri"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdMkdir(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdMkdir"); - std::shared_ptr parent(data.ReadParcelable()); - if (parent == nullptr) { - HILOG_ERROR("Parameter Mkdir fail to ReadParcelable parent"); - return E_IPCS; - } - - std::string displayName = ""; - if (!data.ReadString(displayName)) { - HILOG_ERROR("Parameter Mkdir fail to ReadString displayName"); - return E_IPCS; - } - - if (displayName.empty()) { - HILOG_ERROR("Parameter Mkdir displayName is empty"); - return EINVAL; - } - - std::string newFile = ""; - OHOS::Uri newFileUri(newFile); - int ret = Mkdir(*parent, displayName, newFileUri); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter Mkdir fail to WriteInt32 ret"); - return E_IPCS; - } - - if (!reply.WriteParcelable(&newFileUri)) { - HILOG_ERROR("Parameter Mkdir fail to WriteParcelable newFileUri"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdDelete(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdDelete"); - std::shared_ptr uri(data.ReadParcelable()); - if (uri == nullptr) { - HILOG_ERROR("Parameter Delete fail to ReadParcelable uri"); - return E_IPCS; - } - - int ret = Delete(*uri); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter Delete fail to WriteInt32 ret"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdMove(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdMove"); - std::shared_ptr sourceFile(data.ReadParcelable()); - if (sourceFile == nullptr) { - HILOG_ERROR("Parameter Move fail to ReadParcelable sourceFile"); - return E_IPCS; - } - - std::shared_ptr targetParent(data.ReadParcelable()); - if (targetParent == nullptr) { - HILOG_ERROR("Parameter Move fail to ReadParcelable targetParent"); - return E_IPCS; - } - - std::string newFile = ""; - OHOS::Uri newFileUri(newFile); - int ret = Move(*sourceFile, *targetParent, newFileUri); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter Move fail to WriteInt32 ret"); - return E_IPCS; - } - - if (!reply.WriteParcelable(&newFileUri)) { - HILOG_ERROR("Parameter Move fail to WriteParcelable newFileUri"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdCopy(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdCopy"); - std::shared_ptr sourceUri(data.ReadParcelable()); - if (sourceUri == nullptr) { - HILOG_ERROR("Parameter Copy fail to ReadParcelable sourceUri"); - return E_IPCS; - } - - std::shared_ptr destUri(data.ReadParcelable()); - if (destUri == nullptr) { - HILOG_ERROR("Parameter Copy fail to ReadParcelable destUri"); - return E_IPCS; - } - - bool force = false; - if (!data.ReadBool(force)) { - HILOG_ERROR("Parameter Copy fail to ReadBool force"); - return E_IPCS; - } - - std::vector copyResult; - int ret = Copy(*sourceUri, *destUri, copyResult, force); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter Copy fail to WriteInt32 ret"); - return E_IPCS; - } - - if (!reply.WriteUint32(copyResult.size())) { - HILOG_ERROR("Parameter Copy fail to WriteInt32 size of copyResult"); - return E_IPCS; - } - - for (auto &result : copyResult) { - if (!reply.WriteParcelable(&result)) { - HILOG_ERROR("Parameter Copy fail to WriteParcelable copyResult"); - return E_IPCS; - } - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdCopyFile(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdCopyFile"); - std::string sourceUri = ""; - if (!data.ReadString(sourceUri)) { - HILOG_ERROR("Parameter Copy file fail to ReadParcelable sourceUri"); - return E_IPCS; - } - - std::string destUri = ""; - if (!data.ReadString(destUri)) { - HILOG_ERROR("Parameter Copy file fail to ReadParcelable destUri"); - return E_IPCS; - } - - std::string fileName = ""; - if (!data.ReadString(fileName)) { - HILOG_ERROR("Parameter Copy file fail to ReadString fileName"); - return E_IPCS; - } - - OHOS::Uri newFileUri(""); - Uri source(sourceUri); - Uri dest(destUri); - int ret = CopyFile(source, dest, fileName, newFileUri); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter Copy file fail to WriteInt32 ret"); - return E_IPCS; - } - if (!reply.WriteString(newFileUri.ToString())) { - HILOG_ERROR("Parameter Copy file fail to WriteString newFileUri"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdRename(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdRename"); - std::shared_ptr sourceFile(data.ReadParcelable()); - if (sourceFile == nullptr) { - HILOG_ERROR("Parameter Rename fail to ReadParcelable sourceFile"); - return E_IPCS; - } - - std::string displayName = ""; - if (!data.ReadString(displayName)) { - HILOG_ERROR("Parameter Rename fail to ReadString displayName"); - return E_IPCS; - } - - if (displayName.empty()) { - HILOG_ERROR("Parameter Rename displayName is empty"); - return EINVAL; - } - - std::string newFile = ""; - OHOS::Uri newFileUri(newFile); - int ret = Rename(*sourceFile, displayName, newFileUri); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter Rename fail to WriteInt32 ret"); - return E_IPCS; - } - - if (!reply.WriteParcelable(&newFileUri)) { - HILOG_ERROR("Parameter Rename fail to WriteParcelable newFileUri"); - return E_IPCS; - } - - return ERR_OK; -} - -std::tuple, int64_t, std::shared_ptr, std::shared_ptr> - ReadFileFilterFuncArguments(MessageParcel &data) -{ - std::shared_ptr fileInfo(data.ReadParcelable()); - if (fileInfo == nullptr) { - HILOG_ERROR("Parameter ListFile fail to ReadParcelable fileInfo"); - return std::make_tuple(E_IPCS, nullptr, 0, nullptr, nullptr); - } - - int64_t offset = 0; - if (!data.ReadInt64(offset)) { - HILOG_ERROR("parameter ListFile offset is invalid"); - return std::make_tuple(E_IPCS, nullptr, 0, nullptr, nullptr); - } - - std::shared_ptr filter(data.ReadParcelable()); - if (filter == nullptr) { - HILOG_ERROR("parameter ListFile FileFilter is invalid"); - return std::make_tuple(E_IPCS, nullptr, 0, nullptr, nullptr); - } - - std::shared_ptr memInfo(data.ReadParcelable()); - if (memInfo == nullptr) { - HILOG_ERROR("parameter ListFile SharedMemoryInfo is invalid"); - return std::make_tuple(E_IPCS, nullptr, 0, nullptr, nullptr); - } - - return std::make_tuple(ERR_OK, fileInfo, offset, filter, memInfo); -} - -int WriteFileFilterResults(MessageParcel &reply, SharedMemoryInfo &memInfo) -{ - if (!reply.WriteUint32(memInfo.dataCounts)) { - HILOG_ERROR("fail to WriteUint32 dataCounts"); - return E_IPCS; - } - - if (!reply.WriteUint64(memInfo.dataSize)) { - HILOG_ERROR("fail to WriteUint32 dataSize"); - return E_IPCS; - } - - if (!reply.WriteUint32(memInfo.leftDataCounts)) { - HILOG_ERROR("fail to WriteUint32 leftDataCounts"); - return E_IPCS; - } - - if (!reply.WriteBool(memInfo.isOver)) { - HILOG_ERROR("fail to WriteBool isOver"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdListFile"); - int ret = E_IPCS; - std::shared_ptr fileInfo = nullptr; - int64_t offset = 0; - std::shared_ptr filter = nullptr; - std::shared_ptr memInfo = nullptr; - - std::tie(ret, fileInfo, offset, filter, memInfo) = ReadFileFilterFuncArguments(data); - if (ret != ERR_OK) { - HILOG_ERROR(" failed to ReadFileFilterFuncArguments"); - return ret; - } - ret = SharedMemoryOperation::MapSharedMemory(*memInfo); - if (ret != ERR_OK) { - HILOG_ERROR("failed to MapSharedMemory"); - return ret; - } - - ret = ListFile(*fileInfo, offset, *filter, *memInfo); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("ListFile fail to WriteInt32 ret"); - SharedMemoryOperation::DestroySharedMemory(*memInfo); - return E_IPCS; - } - - ret = WriteFileFilterResults(reply, *memInfo); - SharedMemoryOperation::DestroySharedMemory(*memInfo); - return ret; -} - -ErrCode FileAccessExtStub::CmdScanFile(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdScanFile"); - std::shared_ptr fileInfo(data.ReadParcelable()); - if (fileInfo == nullptr) { - HILOG_ERROR("Parameter ScanFile fail to ReadParcelable fileInfo"); - return E_IPCS; - } - - int64_t offset = 0; - if (!data.ReadInt64(offset)) { - HILOG_ERROR("parameter ScanFile offset is invalid"); - return E_IPCS; - } - - int64_t maxCount = 0; - if (!data.ReadInt64(maxCount)) { - HILOG_ERROR("parameter ScanFile maxCount is invalid"); - return E_IPCS; - } - - std::shared_ptr filter(data.ReadParcelable()); - if (filter == nullptr) { - HILOG_ERROR("parameter ScanFile FileFilter is invalid"); - return E_IPCS; - } - - std::vector fileInfoVec; - int ret = ScanFile(*fileInfo, offset, maxCount, *filter, fileInfoVec); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter ScanFile fail to WriteInt32 ret"); - return E_IPCS; - } - - int64_t count {fileInfoVec.size()}; - if (!reply.WriteInt64(count)) { - HILOG_ERROR("Parameter ScanFile fail to WriteInt64 count"); - return E_IPCS; - } - - for (const auto &fileInfo : fileInfoVec) { - if (!reply.WriteParcelable(&fileInfo)) { - HILOG_ERROR("parameter ScanFile fail to WriteParcelable fileInfoVec"); - return E_IPCS; - } - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdGetRoots(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdGetRoots"); - - std::vector rootInfoVec; - int ret = GetRoots(rootInfoVec); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter GetRoots fail to WriteInt32 ret"); - return E_IPCS; - } - - int64_t count {rootInfoVec.size()}; - if (!reply.WriteInt64(count)) { - HILOG_ERROR("Parameter GetRoots fail to WriteInt64 count"); - return E_IPCS; - } - - for (const auto &rootInfo : rootInfoVec) { - if (!reply.WriteParcelable(&rootInfo)) { - HILOG_ERROR("parameter ListFile fail to WriteParcelable rootInfo"); - return E_IPCS; - } - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdQuery(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdQuery"); - std::shared_ptr uri(data.ReadParcelable()); - if (uri == nullptr) { - HILOG_ERROR("Parameter Query fail to ReadParcelable uri"); - return E_IPCS; - } - - int64_t count = 0; - if (!data.ReadInt64(count)) { - HILOG_ERROR("Query operation failed to Read count"); - return E_IPCS; - } - if (count > static_cast(FILE_RESULT_TYPE.size())) { - HILOG_ERROR(" The number of query operations exceeds %{public}zu ", FILE_RESULT_TYPE.size()); - return EINVAL; - } - std::vector columns; - for (int64_t i = 0; i < count; i++) { - columns.push_back(data.ReadString()); - } - std::vector results; - int ret = Query(*uri, columns, results); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter Query fail to WriteInt32 ret"); - return E_IPCS; - } - - int64_t resCount {results.size()}; - if (!reply.WriteInt64(resCount)) { - HILOG_ERROR("Parameter Query fail to WriteInt64 count"); - return E_IPCS; - } - - for (const auto &result : results) { - if (!reply.WriteString(result)) { - HILOG_ERROR("parameter Query fail to WriteParcelable column"); - return E_IPCS; - } - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdGetFileInfoFromUri(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdGetFileInfoFromUri"); - std::shared_ptr uri(data.ReadParcelable()); - if (uri == nullptr) { - HILOG_ERROR("SelectFile uri is nullptr"); - return E_URIS; - } - - FileInfo fileInfoTemp; - int ret = GetFileInfoFromUri(*uri, fileInfoTemp); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter GetFileInfoFromUri fail to WriteInt32 ret"); - return E_IPCS; - } - - if (!reply.WriteParcelable(&fileInfoTemp)) { - HILOG_ERROR("Parameter GetFileInfoFromUri fail to WriteParcelable fileInfoTemp"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdGetFileInfoFromRelativePath(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdGetFileInfoFromRelativePath"); - std::string relativePath(data.ReadString()); - - FileInfo fileInfoTemp; - int ret = GetFileInfoFromRelativePath(relativePath, fileInfoTemp); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter CmdGetFileInfoFromRelativePath fail to WriteInt32 ret"); - return E_IPCS; - } - - if (!reply.WriteParcelable(&fileInfoTemp)) { - HILOG_ERROR("Parameter CmdGetFileInfoFromRelativePath fail to WriteParcelable fileInfoTemp"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdAccess(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdAccess"); - std::shared_ptr uri(data.ReadParcelable()); - if (uri == nullptr) { - HILOG_ERROR("Access uri is nullptr"); - return E_URIS; - } - - bool isExist = false; - int ret = Access(*uri, isExist); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter Access fail to WriteInt32 ret"); - return E_IPCS; - } - - if (!reply.WriteBool(isExist)) { - HILOG_ERROR("Parameter Access fail to WriteBool isExist"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdStartWatcher(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdStartWatcher"); - std::string uriString; - if (!data.ReadString(uriString)) { - HILOG_ERROR("Parameter StartWatcher fail to ReadParcelable uri"); - return E_IPCS; - } - - if (uriString.empty()) { - HILOG_ERROR("Parameter StartWatcher insideInputUri is empty"); - return EINVAL; - } - - Uri uri(uriString); - int ret = StartWatcher(uri); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter StartWatcher fail to WriteInt32 ret"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdStopWatcher(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdStopWatcher"); - std::string uriString; - if (!data.ReadString(uriString)) { - HILOG_ERROR("Parameter StopWatcher fail to ReadParcelable uri"); - return E_IPCS; - } - - if (uriString.empty()) { - HILOG_ERROR("Parameter StopWatcher insideInputUri is empty"); - return EINVAL; - } - - Uri uri(uriString); - int ret = StopWatcher(uri); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter StopWatcher fail to WriteInt32 ret"); - return E_IPCS; - } - - return ERR_OK; -} -bool FileAccessExtStub::CheckCallingPermission(const std::string &permission) -{ - UserAccessTracer trace; - trace.Start("CheckCallingPermission"); - Security::AccessToken::AccessTokenID tokenCaller = IPCSkeleton::GetCallingTokenID(); - int res = Security::AccessToken::AccessTokenKit::VerifyAccessToken(tokenCaller, permission); - if (res != Security::AccessToken::PermissionState::PERMISSION_GRANTED) { - HILOG_ERROR("FileAccessExtStub::CheckCallingPermission have no fileAccess permission"); - return false; - } - - return true; -} - -ErrCode FileAccessExtStub::CmdMoveItem(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdMoveItem"); - std::string sourceFile; - if (!data.ReadString(sourceFile)) { - HILOG_ERROR("Parameter Move fail to ReadParcelable uri"); - return E_IPCS; - } - - std::string targetParent; - if (!data.ReadString(targetParent)) { - HILOG_ERROR("Parameter Move fail to ReadParcelable uri"); - return E_IPCS; - } - - bool force = false; - if (!data.ReadBool(force)) { - HILOG_ERROR("Parameter Copy fail to ReadBool force"); - return E_IPCS; - } - - std::vector moveResult; - Uri source(sourceFile); - Uri dest(targetParent); - int ret = MoveItem(source, dest, moveResult, force); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter Copy fail to WriteInt32 ret"); - return E_IPCS; - } - - if (!reply.WriteUint32(moveResult.size())) { - HILOG_ERROR("Parameter Copy fail to WriteInt32 size of copyResult"); - return E_IPCS; - } - - for (auto &result : moveResult) { - if (!reply.WriteParcelable(&result)) { - HILOG_ERROR("Parameter Copy fail to WriteParcelable copyResult"); - return E_IPCS; - } - } - - return ERR_OK; -} - -ErrCode FileAccessExtStub::CmdMoveFile(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdMoveFile"); - std::string sourceFile; - if (!data.ReadString(sourceFile)) { - HILOG_ERROR("Parameter Move fail to ReadParcelable sourceUri"); - return E_IPCS; - } - - std::string targetParent; - if (!data.ReadString(targetParent)) { - HILOG_ERROR("Parameter Move fail to ReadParcelable targetParentUri"); - return E_IPCS; - } - - std::string fileName; - if (!data.ReadString(fileName)) { - HILOG_ERROR("Parameter Move fail to ReadParcelable fileName"); - return E_IPCS; - } - std::string newFile; - OHOS::Uri newFileUri(newFile); - Uri source(sourceFile); - Uri target(targetParent); - int ret = MoveFile(source, target, fileName, newFileUri); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter Move fail to WriteInt32 ret"); - return E_IPCS; - } - - std::string insideOutputUri = newFileUri.ToString(); - if (!reply.WriteString(insideOutputUri)) { - HILOG_ERROR("Parameter Move fail to WriteParcelable newFileUri"); - return E_IPCS; - } - - return ERR_OK; -} -} // namespace FileAccessFwk -} // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp index 2a2b19a0e6824e9c841cd378dadc1b34faa34544..65987037046c5e5427e7ec3a47f42b08302351eb 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -20,17 +20,35 @@ #include "file_access_framework_errno.h" #include "hilog_wrapper.h" #include "hitrace_meter.h" +#include "access_token.h" +#include "accesstoken_kit.h" +#include "ipc_skeleton.h" namespace OHOS { namespace FileAccessFwk { const uint64_t FILEFILTER_DEFAULT_COUNTS = 2000; const uint64_t FILEFILTER_MAX_COUNTS = 20000; +const std::string FILE_ACCESS_MANAGER_PERMISSION = "ohos.permission.FILE_ACCESS_MANAGER"; std::shared_ptr FileAccessExtStubImpl::GetOwner() { return extension_; } + +bool FileAccessExtStubImpl::CheckCallingPermission(const std::string &permission) +{ + UserAccessTracer trace; + trace.Start("CheckCallingPermission"); + Security::AccessToken::AccessTokenID tokenCaller = IPCSkeleton::GetCallingTokenID(); + int res = Security::AccessToken::AccessTokenKit::VerifyAccessToken(tokenCaller, permission); + if (res != Security::AccessToken::PermissionState::PERMISSION_GRANTED) { + HILOG_ERROR("FileAccessExtStub::CheckCallingPermission have no fileAccess permission"); + return false; + } + + return true; +} -int FileAccessExtStubImpl::OpenFile(const Uri &uri, const int flags, int &fd) +int FileAccessExtStubImpl::OpenFile(const Urie &uri, const int flags, int &fd) { UserAccessTracer trace; trace.Start("OpenFile"); @@ -38,12 +56,22 @@ int FileAccessExtStubImpl::OpenFile(const Uri &uri, const int flags, int &fd) HILOG_ERROR("OpenFile get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } + if (flags < 0) { + HILOG_ERROR("Parameter OpenFile flags is invalid"); + return EINVAL; + } - int ret = extension_->OpenFile(uri, flags, fd); + fd = -1; + Uri uriConvert(uri.ToString()); + int ret = extension_->OpenFile(uriConvert, flags, fd); return ret; } -int FileAccessExtStubImpl::CreateFile(const Uri &parent, const std::string &displayName, Uri &newFile) +int FileAccessExtStubImpl::CreateFile(const Urie &parent, const std::string &displayName, Urie &newFile) { UserAccessTracer trace; trace.Start("CreateFile"); @@ -51,12 +79,19 @@ int FileAccessExtStubImpl::CreateFile(const Uri &parent, const std::string &disp HILOG_ERROR("CreateFile get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - int ret = extension_->CreateFile(parent, displayName, newFile); + Uri parentConvert(parent.ToString()); + Uri newFileConvert(""); + int ret = extension_->CreateFile(parentConvert, displayName, newFileConvert); + newFile = Urie(newFileConvert.ToString()); return ret; } -int FileAccessExtStubImpl::Mkdir(const Uri &parent, const std::string &displayName, Uri &newFile) +int FileAccessExtStubImpl::Mkdir(const Urie &parent, const std::string &displayName, Urie &newFile) { UserAccessTracer trace; trace.Start("Mkdir"); @@ -64,12 +99,19 @@ int FileAccessExtStubImpl::Mkdir(const Uri &parent, const std::string &displayNa HILOG_ERROR("Mkdir get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - int ret = extension_->Mkdir(parent, displayName, newFile); + Uri parentConvert(parent.ToString()); + Uri newFileConvert(""); + int ret = extension_->Mkdir(parentConvert, displayName, newFileConvert); + newFile = Urie(newFileConvert.ToString()); return ret; } -int FileAccessExtStubImpl::Delete(const Uri &sourceFile) +int FileAccessExtStubImpl::Delete(const Urie &sourceFile) { UserAccessTracer trace; trace.Start("Delete"); @@ -77,12 +119,17 @@ int FileAccessExtStubImpl::Delete(const Uri &sourceFile) HILOG_ERROR("Delete get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - int ret = extension_->Delete(sourceFile); + Uri sourceFileConvert(sourceFile.ToString()); + int ret = extension_->Delete(sourceFileConvert); return ret; } -int FileAccessExtStubImpl::Move(const Uri &sourceFile, const Uri &targetParent, Uri &newFile) +int FileAccessExtStubImpl::Move(const Urie &sourceFile, const Urie &targetParent, Urie &newFile) { UserAccessTracer trace; trace.Start("Move"); @@ -90,13 +137,21 @@ int FileAccessExtStubImpl::Move(const Uri &sourceFile, const Uri &targetParent, HILOG_ERROR("Move get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - int ret = extension_->Move(sourceFile, targetParent, newFile); + Uri sourceFileConvert(sourceFile.ToString()); + Uri targetParentConvert(targetParent.ToString()); + Uri newFileConvert(""); + int ret = extension_->Move(sourceFileConvert, targetParentConvert, newFileConvert); + newFile = Urie(newFileConvert.ToString()); return ret; } -int FileAccessExtStubImpl::Copy(const Uri &sourceUri, const Uri &destUri, std::vector ©Result, - bool force) +int FileAccessExtStubImpl::Copy(const Urie &sourceUri, const Urie &destUri, std::vector ©Result, + int32_t& retCode, bool force) { UserAccessTracer trace; trace.Start("Copy"); @@ -104,12 +159,20 @@ int FileAccessExtStubImpl::Copy(const Uri &sourceUri, const Uri &destUri, std::v HILOG_ERROR("Copy get extension failed."); return E_IPCS; } - int ret = extension_->Copy(sourceUri, destUri, copyResult, force); - return ret; + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } + + Uri sourceUriConvert(sourceUri.ToString()); + Uri destUriConvert(destUri.ToString()); + int ret = extension_->Copy(sourceUriConvert, destUriConvert, copyResult, force); + retCode = ret; + return ERR_OK; } -int FileAccessExtStubImpl::CopyFile(const Uri &sourceUri, const Uri &destUri, const std::string &fileName, - Uri &newFileUri) +int FileAccessExtStubImpl::CopyFile(const Urie &sourceUri, const Urie &destUri, const std::string &fileName, + Urie &newFileUri) { UserAccessTracer trace; trace.Start("CopyFile"); @@ -117,11 +180,20 @@ int FileAccessExtStubImpl::CopyFile(const Uri &sourceUri, const Uri &destUri, co HILOG_ERROR("Copy file get extension failed."); return E_IPCS; } - int ret = extension_->CopyFile(sourceUri, destUri, fileName, newFileUri); + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } + + Uri sourceUriConvert(sourceUri.ToString()); + Uri destUriConvert(destUri.ToString()); + Uri newFileUriConvert(""); + int ret = extension_->CopyFile(sourceUriConvert, destUriConvert, fileName, newFileUriConvert); + newFileUri = Urie(newFileUriConvert.ToString()); return ret; } -int FileAccessExtStubImpl::Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) +int FileAccessExtStubImpl::Rename(const Urie &sourceFile, const std::string &displayName, Urie &newFile) { UserAccessTracer trace; trace.Start("Rename"); @@ -129,8 +201,15 @@ int FileAccessExtStubImpl::Rename(const Uri &sourceFile, const std::string &disp HILOG_ERROR("Rename get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - int ret = extension_->Rename(sourceFile, displayName, newFile); + Uri sourceFileConvert(sourceFile.ToString()); + Uri newFileConvert(""); + int ret = extension_->Rename(sourceFileConvert, displayName, newFileConvert); + newFile = Urie(newFileConvert.ToString()); return ret; } @@ -143,14 +222,23 @@ int FileAccessExtStubImpl::ListFile(const FileInfo &fileInfo, const int64_t offs HILOG_ERROR("ListFile get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } + + int ret = SharedMemoryOperation::MapSharedMemory(memInfo); + if (ret != ERR_OK) { + HILOG_ERROR("failed to MapSharedMemory"); + return ret; + } std::vector fileInfoVec; - int ret = ERR_OK; memInfo.isOver = false; int64_t currentOffset = offset; while (true) { uint64_t maxCounts = - memInfo.memSize > DEFAULT_CAPACITY_200KB ? FILEFILTER_MAX_COUNTS : FILEFILTER_DEFAULT_COUNTS; + memInfo.memSize > DEFAULT_CAPACITY_200KB ? FILEFILTER_MAX_COUNTS : FILEFILTER_DEFAULT_COUNTS; fileInfoVec.clear(); ret = extension_->ListFile(fileInfo, currentOffset, maxCounts, filter, fileInfoVec); if (ret != ERR_OK) { @@ -169,7 +257,7 @@ int FileAccessExtStubImpl::ListFile(const FileInfo &fileInfo, const int64_t offs } if (fileInfoVec.empty() ||(maxCounts > static_cast(fileInfoVec.size()) && currentWriteCounts == fileInfoVec.size())) { - memInfo.isOver = true; + memInfo.isOver = true; break; } currentOffset += currentWriteCounts; @@ -187,12 +275,17 @@ int FileAccessExtStubImpl::ScanFile(const FileInfo &fileInfo, const int64_t offs HILOG_ERROR("ScanFile get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } int ret = extension_->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); return ret; } -int FileAccessExtStubImpl::Query(const Uri &uri, std::vector &columns, std::vector &results) +int FileAccessExtStubImpl::Query(const Urie &uri, const std::vector &columns, + std::vector &results) { UserAccessTracer trace; trace.Start("Query"); @@ -200,8 +293,14 @@ int FileAccessExtStubImpl::Query(const Uri &uri, std::vector &colum HILOG_ERROR("Query get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - int ret = extension_->Query(uri, columns, results); + std::vector newColumns = const_cast&>(columns); + Uri uriConvert(uri.ToString()); + int ret = extension_->Query(uriConvert, newColumns, results); return ret; } @@ -213,12 +312,16 @@ int FileAccessExtStubImpl::GetRoots(std::vector &rootInfoVec) HILOG_ERROR("GetRoots get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } int ret = extension_->GetRoots(rootInfoVec); return ret; } -int FileAccessExtStubImpl::GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) +int FileAccessExtStubImpl::GetFileInfoFromUri(const Urie &selectFile, FileInfo &fileInfo) { UserAccessTracer trace; trace.Start("GetFileInfoFromUri"); @@ -226,8 +329,13 @@ int FileAccessExtStubImpl::GetFileInfoFromUri(const Uri &selectFile, FileInfo &f HILOG_ERROR("GetFileInfoFromUri get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - int ret = extension_->GetFileInfoFromUri(selectFile, fileInfo); + Uri selectFileConvert(selectFile.ToString()); + int ret = extension_->GetFileInfoFromUri(selectFileConvert, fileInfo); return ret; } @@ -239,12 +347,16 @@ int FileAccessExtStubImpl::GetFileInfoFromRelativePath(const std::string &select HILOG_ERROR("GetFileInfoFromRelativePath get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } int ret = extension_->GetFileInfoFromRelativePath(selectFile, fileInfo); return ret; } -int FileAccessExtStubImpl::Access(const Uri &uri, bool &isExist) +int FileAccessExtStubImpl::Access(const Urie &uri, bool &isExist) { UserAccessTracer trace; trace.Start("Access"); @@ -252,12 +364,17 @@ int FileAccessExtStubImpl::Access(const Uri &uri, bool &isExist) HILOG_ERROR("Access get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - int ret = extension_->Access(uri, isExist); + Uri uriConvert(uri.ToString()); + int ret = extension_->Access(uriConvert, isExist); return ret; } -int FileAccessExtStubImpl::StartWatcher(const Uri &uri) +int FileAccessExtStubImpl::StartWatcher(const Urie &uri) { UserAccessTracer trace; trace.Start("StartWatcher"); @@ -265,12 +382,17 @@ int FileAccessExtStubImpl::StartWatcher(const Uri &uri) HILOG_ERROR("StartWatcher get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - int ret = extension_->StartWatcher(uri); + Uri uriConvert(uri.ToString()); + int ret = extension_->StartWatcher(uriConvert); return ret; } -int FileAccessExtStubImpl::StopWatcher(const Uri &uri) +int FileAccessExtStubImpl::StopWatcher(const Urie &uri) { UserAccessTracer trace; trace.Start("StopWatcher"); @@ -278,13 +400,18 @@ int FileAccessExtStubImpl::StopWatcher(const Uri &uri) HILOG_ERROR("StopWatcher get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - int ret = extension_->StopWatcher(uri); + Uri uriConvert(uri.ToString()); + int ret = extension_->StopWatcher(uriConvert); return ret; } -int FileAccessExtStubImpl::MoveItem(const Uri &sourceFile, const Uri &targetParent, std::vector &moveResult, - bool force) +int FileAccessExtStubImpl::MoveItem(const Urie &sourceFile, const Urie &targetParent, std::vector &moveResult, + int32_t& retCode, bool force) { UserAccessTracer trace; trace.Start("MoveItem"); @@ -292,11 +419,20 @@ int FileAccessExtStubImpl::MoveItem(const Uri &sourceFile, const Uri &targetPare HILOG_ERROR("Move get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - return extension_->MoveItem(sourceFile, targetParent, moveResult, force); + Uri sourceFileConvert(sourceFile.ToString()); + Uri targetParentConvert(targetParent.ToString()); + int ret = extension_->MoveItem(sourceFileConvert, targetParentConvert, moveResult, force); + retCode = ret; + return ERR_OK; } -int FileAccessExtStubImpl::MoveFile(const Uri &sourceFile, const Uri &targetParent, std::string &fileName, Uri &newFile) +int FileAccessExtStubImpl::MoveFile(const Urie &sourceFile, const Urie &targetParent, const std::string &fileName, + Urie &newFile) { UserAccessTracer trace; trace.Start("MoveFile"); @@ -304,8 +440,18 @@ int FileAccessExtStubImpl::MoveFile(const Uri &sourceFile, const Uri &targetPare HILOG_ERROR("Move get extension failed."); return E_IPCS; } + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } - return extension_->MoveFile(sourceFile, targetParent, fileName, newFile); + std::string newFileName = const_cast(fileName); + Uri sourceFileConvert(sourceFile.ToString()); + Uri targetParentConvert(targetParent.ToString()); + Uri newFileConvert(""); + int ret = extension_->MoveFile(sourceFileConvert, targetParentConvert, newFileName, newFileConvert); + newFile = Urie(newFileConvert.ToString()); + return ret; } } // namespace FileAccessFwk } // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/file_access_helper.cpp b/interfaces/inner_api/file_access/src/file_access_helper.cpp index fb143a2f9e8ceb12ed2767b514ec798fd4530e2f..49b650085dc60b8096d0fc31ae300c74404a4155 100644 --- a/interfaces/inner_api/file_access/src/file_access_helper.cpp +++ b/interfaces/inner_api/file_access/src/file_access_helper.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -21,7 +21,7 @@ #include "bundle_mgr_proxy.h" #include "file_access_framework_errno.h" #include "file_access_extension_info.h" -#include "file_access_service_proxy.h" +#include "file_access_service_client.h" #include "hilog_wrapper.h" #include "hitrace_meter.h" #include "user_access_tracer.h" @@ -32,6 +32,7 @@ #include "system_ability_definition.h" #include "tokenid_kit.h" #include "n_error.h" +#include "uri_ext.h" namespace OHOS { namespace FileAccessFwk { @@ -39,6 +40,7 @@ using json = nlohmann::json; namespace { constexpr int COPY_EXCEPTION = -1; constexpr int COPY_NOEXCEPTION = -2; + constexpr uint32_t MAX_COPY_ERROR_COUNT = 1000; } sptr g_sourceExtProxy; @@ -335,8 +337,8 @@ sptr FileAccessHelper::GetProxyByUri(Uri &uri) } } - auto fileAccessExtProxy = GetProxyByBundleName(bundleName); - return fileAccessExtProxy; + auto fileAccessExtBaseProxy = GetProxyByBundleName(bundleName); + return fileAccessExtBaseProxy; } sptr FileAccessHelper::GetProxyByBundleName(const std::string &bundleName) @@ -350,12 +352,12 @@ sptr FileAccessHelper::GetProxyByBundleName(const std::strin if (!connectInfo->fileAccessExtConnection->IsExtAbilityConnected()) { connectInfo->fileAccessExtConnection->ConnectFileExtAbility(connectInfo->want); } - auto fileAccessExtProxy = connectInfo->fileAccessExtConnection->GetFileExtProxy(); - if (fileAccessExtProxy == nullptr) { - HILOG_ERROR("GetProxyByUri failed with invalid fileAccessExtProxy"); + auto fileAccessExtBaseProxy = connectInfo->fileAccessExtConnection->GetFileExtProxy(); + if (fileAccessExtBaseProxy == nullptr) { + HILOG_ERROR("GetProxyByUri failed with invalid FileAccessExtBaseProxy"); return nullptr; } - return fileAccessExtProxy; + return fileAccessExtBaseProxy; } bool FileAccessHelper::GetProxy() @@ -369,9 +371,9 @@ bool FileAccessHelper::GetProxy() if (!connectInfo->fileAccessExtConnection->IsExtAbilityConnected()) { connectInfo->fileAccessExtConnection->ConnectFileExtAbility(connectInfo->want); } - auto fileAccessExtProxy = connectInfo->fileAccessExtConnection->GetFileExtProxy(); - if (fileAccessExtProxy == nullptr) { - HILOG_ERROR("GetProxy failed with invalid fileAccessExtProxy"); + auto fileAccessExtBaseProxy = connectInfo->fileAccessExtConnection->GetFileExtProxy(); + if (fileAccessExtBaseProxy == nullptr) { + HILOG_ERROR("GetProxy failed with invalid FileAccessExtBaseProxy"); return false; } } @@ -399,11 +401,12 @@ int FileAccessHelper::OpenFile(Uri &uri, int flags, int &fd) sptr fileExtProxy = GetProxyByUri(uri); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - int ret = fileExtProxy->OpenFile(uri, flags, fd); + Urie uriConvert(uri.ToString()); + int ret = fileExtProxy->OpenFile(uriConvert, flags, fd); if (ret != ERR_OK) { HILOG_ERROR("OpenFile get result error, code:%{public}d", ret); return ret; @@ -428,15 +431,18 @@ int FileAccessHelper::CreateFile(Uri &parent, const std::string &displayName, Ur sptr fileExtProxy = GetProxyByUri(parent); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - int ret = fileExtProxy->CreateFile(parent, displayName, newFile); + Urie parentConvert(parent.ToString()); + Urie newFileConvert(""); + int ret = fileExtProxy->CreateFile(parentConvert, displayName, newFileConvert); if (ret != ERR_OK) { HILOG_ERROR("CreateFile get result error, code:%{public}d", ret); return ret; } + newFile = Uri(newFileConvert.ToString()); return ERR_OK; } @@ -457,15 +463,18 @@ int FileAccessHelper::Mkdir(Uri &parent, const std::string &displayName, Uri &ne sptr fileExtProxy = GetProxyByUri(parent); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - int ret = fileExtProxy->Mkdir(parent, displayName, newDir); + Urie parentConvert(parent.ToString()); + Urie newDirConvert(""); + int ret = fileExtProxy->Mkdir(parentConvert, displayName, newDirConvert); if (ret != ERR_OK) { HILOG_ERROR("Mkdir get result error, code:%{public}d", ret); return ret; } + newDir = Uri(newDirConvert.ToString()); return ERR_OK; } @@ -486,11 +495,12 @@ int FileAccessHelper::Delete(Uri &selectFile) sptr fileExtProxy = GetProxyByUri(selectFile); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - int ret = fileExtProxy->Delete(selectFile); + Urie selectFileConvert(selectFile.ToString()); + int ret = fileExtProxy->Delete(selectFileConvert); if (ret != ERR_OK) { HILOG_ERROR("Delete get result error, code:%{public}d", ret); return ret; @@ -522,15 +532,19 @@ int FileAccessHelper::Move(Uri &sourceFile, Uri &targetParent, Uri &newFile) sptr fileExtProxy = GetProxyByUri(sourceFile); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - int ret = fileExtProxy->Move(sourceFile, targetParent, newFile); + Urie sourceFileConvert(sourceFile.ToString()); + Urie targetParentConvert(targetParent.ToString()); + Urie newFileConvert(""); + int ret = fileExtProxy->Move(sourceFileConvert, targetParentConvert, newFileConvert); if (ret != ERR_OK) { HILOG_ERROR("Move get result error, code:%{public}d", ret); return ret; } + newFile = Uri(newFileConvert.ToString()); return ERR_OK; } @@ -539,12 +553,13 @@ int FileAccessHelper::IsDirectory(Uri &uri, bool &isDir) { sptr proxy = FileAccessHelper::GetProxyByUri(uri); if (proxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } FileInfo fileInfo; - int ret = proxy->GetFileInfoFromUri(uri, fileInfo); + Urie uriConvert(uri.ToString()); + int ret = proxy->GetFileInfoFromUri(uriConvert, fileInfo); if (ret != ERR_OK) { HILOG_ERROR("get FileInfo from uri error, code:%{public}d", ret); return ret; @@ -603,14 +618,28 @@ int FileAccessHelper::CopyOperation(Uri &sourceUri, Uri &destUri, std::vector proxy = GetProxyByUri(sourceUri); if (proxy == nullptr) { - HILOG_ERROR("Failed with invalid fileAccessExtProxy"); + HILOG_ERROR("Failed with invalid FileAccessExtBaseProxy"); Result result; ret = TranslateResult(E_IPCS, result); copyResult.push_back(result); return ret; } - ret = proxy->Copy(sourceUri, destUri, copyResult, force); + Urie sourceUriConvert(sourceUri.ToString()); + Urie destUriConvert(destUri.ToString()); + copyResult.clear(); + int retCode; + ret = proxy->Copy(sourceUriConvert, destUriConvert, copyResult, retCode, force); + if (ret == ERR_OK) { + ret = retCode; + } + if (copyResult.size() > MAX_COPY_ERROR_COUNT) { + HILOG_ERROR("Copy operation failed, count value greater than max count"); + Result result { "", "", E_COUNT, "Count value greater than max count"}; + copyResult.clear(); + copyResult.push_back(result); + ret = COPY_EXCEPTION; + } if (ret != ERR_OK) { if ((ret == COPY_EXCEPTION) || (ret == COPY_NOEXCEPTION)) { HILOG_ERROR("Copy exception, code:%{public}d", ret); @@ -631,15 +660,19 @@ int FileAccessHelper::CopyFileOperation(Uri &sourceUri, Uri &destUri, const std: trace.Start("CopyFileOperation"); sptr proxy = GetProxyByUri(sourceUri); if (proxy == nullptr) { - HILOG_ERROR("Failed with invalid fileAccessExtProxy"); + HILOG_ERROR("Failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - int ret = proxy->CopyFile(sourceUri, destUri, fileName, newFileUri); + Urie sourceUriConvert(sourceUri.ToString()); + Urie destUriConvert(destUri.ToString()); + Urie newFileUriConvert(""); + int ret = proxy->CopyFile(sourceUriConvert, destUriConvert, fileName, newFileUriConvert); if (ret != ERR_OK) { HILOG_ERROR("Copy file error, code:%{public}d", ret); return ret; } + newFileUri = Uri(newFileUriConvert.ToString()); return ret; } @@ -717,15 +750,18 @@ int FileAccessHelper::Rename(Uri &sourceFile, const std::string &displayName, Ur sptr fileExtProxy = GetProxyByUri(sourceFile); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - int ret = fileExtProxy->Rename(sourceFile, displayName, newFile); + Urie sourceFileConvert(sourceFile.ToString()); + Urie newFileConvert(""); + int ret = fileExtProxy->Rename(sourceFileConvert, displayName, newFileConvert); if (ret != ERR_OK) { HILOG_ERROR("Rename get result error, code:%{public}d", ret); return ret; } + newFile = Uri(newFileConvert.ToString()); return ERR_OK; } @@ -748,16 +784,22 @@ int FileAccessHelper::ListFile(const FileInfo &fileInfo, const int64_t offset, c sptr fileExtProxy = GetProxyByUri(sourceFile); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } memInfo.Clear(); + SharedMemoryInfo memInfoTemp = memInfo; int ret = fileExtProxy->ListFile(fileInfo, offset, filter, memInfo); if (ret != ERR_OK) { HILOG_ERROR("ListFile get result error, code:%{public}d", ret); return ret; } + memInfo.totalDataCounts = memInfo.dataCounts; + memInfo.memName = memInfoTemp.memName; + memInfo.memHead = memInfoTemp.memHead; + memInfo.memTail = memInfoTemp.memTail; + memInfo.dataPtr = memInfoTemp.dataPtr; return ERR_OK; } @@ -779,9 +821,10 @@ int FileAccessHelper::ScanFile(const FileInfo &fileInfo, const int64_t offset, c sptr fileExtProxy = GetProxyByUri(sourceFile); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } + fileInfoVec.clear(); int ret = fileExtProxy->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); if (ret != ERR_OK) { @@ -877,11 +920,13 @@ int FileAccessHelper::Query(Uri &uri, std::string &metaJson) sptr fileExtProxy = GetProxyByUri(uri); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - ret = fileExtProxy->Query(uri, columns, results); + Urie uriConvert(uri.ToString()); + results.clear(); + ret = fileExtProxy->Query(uriConvert, columns, results); if (ret != ERR_OK) { HILOG_ERROR("Query get result error, code:%{public}d", ret); return ret; @@ -906,7 +951,7 @@ int FileAccessHelper::GetRoots(std::vector &rootInfoVec) } if (!GetProxy()) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } @@ -917,14 +962,14 @@ int FileAccessHelper::GetRoots(std::vector &rootInfoVec) HILOG_ERROR("connectInfo is nullptr"); return E_IPCS; } - auto fileAccessExtProxy = connectInfo->fileAccessExtConnection->GetFileExtProxy(); + auto fileAccessExtBaseProxy = connectInfo->fileAccessExtConnection->GetFileExtProxy(); std::vector results; - if (!fileAccessExtProxy) { + if (!fileAccessExtBaseProxy) { HILOG_ERROR("GetFileExtProxy return nullptr, bundle name is %{public}s", iter->first.c_str()); continue; } - ret = fileAccessExtProxy->GetRoots(results); + ret = fileAccessExtBaseProxy->GetRoots(results); if (ret != ERR_OK) { HILOG_ERROR("getRoots get fail ret:%{public}d", ret); return ret; @@ -990,11 +1035,12 @@ int FileAccessHelper::Access(Uri &uri, bool &isExist) sptr fileExtProxy = GetProxyByUri(uri); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - int ret = fileExtProxy->Access(uri, isExist); + Urie uriConvert(uri.ToString()); + int ret = fileExtProxy->Access(uriConvert, isExist); if (ret != ERR_OK) { HILOG_ERROR("Access get result error, code:%{public}d", ret); return ret; @@ -1019,11 +1065,12 @@ int FileAccessHelper::GetFileInfoFromUri(Uri &selectFile, FileInfo &fileInfo) sptr fileExtProxy = GetProxyByUri(selectFile); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - int ret = fileExtProxy->GetFileInfoFromUri(selectFile, fileInfo); + Urie selectFileConvert(selectFile.ToString()); + int ret = fileExtProxy->GetFileInfoFromUri(selectFileConvert, fileInfo); if (ret != ERR_OK) { HILOG_ERROR("GetFileInfoFromUri get result error, code:%{public}d", ret); return ret; @@ -1043,7 +1090,7 @@ int FileAccessHelper::GetFileInfoFromRelativePath(std::string &selectFile, FileI sptr fileExtProxy = GetProxyByBundleName(EXTERNAL_BNUDLE_NAME); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } @@ -1070,13 +1117,19 @@ int FileAccessHelper::RegisterNotify(Uri uri, bool notifyForDescendants, sptrRegisterNotify(uri, notifyForDescendants, observer, GetConnectExtensionInfo(uri)); + std::shared_ptr info = GetConnectExtensionInfo(uri); + if (!info) { + HILOG_ERROR("FileAccessHelper::RegisterNotify check ConnectExtensionInfo failed"); + return EINVAL; + } + + int ret = proxy->RegisterNotify(uri, notifyForDescendants, observer, *info); return ret; } @@ -1094,13 +1147,19 @@ int FileAccessHelper::UnregisterNotify(Uri uri, sptr &obser return EINVAL; } - auto proxy = FileAccessServiceProxy::GetInstance(); + auto proxy = FileAccessServiceClient::GetInstance(); if (proxy == nullptr) { HILOG_ERROR("UnregisterNotify get SA failed"); return E_LOAD_SA; } - int ret = proxy->UnregisterNotify(uri, observer, GetConnectExtensionInfo(uri)); + std::shared_ptr info = GetConnectExtensionInfo(uri); + if (!info) { + HILOG_ERROR("FileAccessHelper::UnregisterNotify check ConnectExtensionInfo failed"); + return EINVAL; + } + + int ret = proxy->UnregisterNotify(uri, observer, *info); return ret; } @@ -1117,14 +1176,19 @@ int FileAccessHelper::UnregisterNotify(Uri uri) HILOG_ERROR("parameter check error."); return EINVAL; } - auto proxy = FileAccessServiceProxy::GetInstance(); + auto proxy = FileAccessServiceClient::GetInstance(); if (proxy == nullptr) { HILOG_ERROR("UnregisterNotify get SA failed"); return E_LOAD_SA; } - sptr observer = nullptr; - int ret = proxy->UnregisterNotify(uri, observer, GetConnectExtensionInfo(uri)); + std::shared_ptr info = GetConnectExtensionInfo(uri); + if (!info) { + HILOG_ERROR("FileAccessHelper::UnregisterNotify check ConnectExtensionInfo failed"); + return EINVAL; + } + + int ret = proxy->UnregisterNotifyNoObserver(uri, *info); return ret; } @@ -1151,11 +1215,25 @@ int FileAccessHelper::MoveItem(Uri &sourceFile, Uri &targetParent, std::vector fileExtProxy = GetProxyByUri(sourceFile); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return GetResult("", "", E_IPCS, "", moveResult); } - int ret = fileExtProxy->MoveItem(sourceFile, targetParent, moveResult, force); + Urie sourceFileConvert(sourceFile.ToString()); + Urie targetParentConvert(targetParent.ToString()); + moveResult.clear(); + int retCode; + int ret = fileExtProxy->MoveItem(sourceFileConvert, targetParentConvert, moveResult, retCode, force); + if (ret == ERR_OK) { + ret = retCode; + } + if (moveResult.size() > MAX_COPY_ERROR_COUNT) { + HILOG_ERROR("Move operation failed, count value greater than max count"); + Result result { "", "", E_COUNT, "Count value greater than max count"}; + moveResult.clear(); + moveResult.push_back(result); + ret = COPY_EXCEPTION; + } if (ret != ERR_OK) { HILOG_ERROR("Move get result error, code:%{public}d", ret); return ret; @@ -1187,17 +1265,21 @@ int FileAccessHelper::MoveFile(Uri &sourceFile, Uri &targetParent, std::string & sptr fileExtProxy = GetProxyByUri(sourceFile); if (fileExtProxy == nullptr) { - HILOG_ERROR("failed with invalid fileAccessExtProxy"); + HILOG_ERROR("failed with invalid FileAccessExtBaseProxy"); return E_IPCS; } - int ret = fileExtProxy->MoveFile(sourceFile, targetParent, fileName, newFile); + Urie sourceFileConvert(sourceFile.ToString()); + Urie targetParentConvert(targetParent.ToString()); + Urie newFileConvert(""); + int ret = fileExtProxy->MoveFile(sourceFileConvert, targetParentConvert, fileName, newFileConvert); if (ret != ERR_OK) { HILOG_ERROR("Move get result error, code:%{public}d", ret); return ret; } + newFile = Uri(newFileConvert.ToString()); return ERR_OK; } } // namespace FileAccessFwk -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp index 65cf40eba1da2d7e85b68d02257e4d4abeb1a777..83a876aed9003ddfa43d8e35a75e6891252ab600 100644 --- a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp @@ -23,7 +23,7 @@ #include "file_access_extension_info.h" #include "file_access_framework_errno.h" #include "file_access_observer_common.h" -#include "file_access_service_proxy.h" +#include "file_access_service_client.h" #include "hilog_wrapper.h" #include "hitrace_meter.h" #include "if_system_ability_manager.h" @@ -1398,9 +1398,10 @@ int JsFileAccessExtAbility::Query(const Uri &uri, std::vector &colu return E_GETRESULT; } - ConvertColumn(columns); - auto argParser = [uri, &columns](napi_env &env, napi_value *argv, size_t &argc) -> bool { - if (ConstructQueryArg(env, argv, argc, uri, columns) != napi_ok) { + std::vector newColumns = columns; + ConvertColumn(newColumns); + auto argParser = [uri, &newColumns](napi_env &env, napi_value *argv, size_t &argc) -> bool { + if (ConstructQueryArg(env, argv, argc, uri, newColumns) != napi_ok) { HILOG_ERROR("Construct arg fail."); return false; } @@ -1681,7 +1682,7 @@ int JsFileAccessExtAbility::Notify(Uri &uri, NotifyType notifyType) { UserAccessTracer trace; trace.Start("Notify"); - auto proxy = FileAccessServiceProxy::GetInstance(); + auto proxy = FileAccessServiceClient::GetInstance(); if (proxy == nullptr) { HILOG_ERROR("Notify get SA failed"); return E_LOAD_SA; diff --git a/interfaces/inner_api/file_access/src/napi_common_fileaccess.cpp b/interfaces/inner_api/file_access/src/napi_common_fileaccess.cpp index db0046fc4fea9d91aa41e51f8f02f118c69d1fe3..013f7796a295ba12c60d3878fa11992708f7ebde 100644 --- a/interfaces/inner_api/file_access/src/napi_common_fileaccess.cpp +++ b/interfaces/inner_api/file_access/src/napi_common_fileaccess.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/interfaces/inner_api/file_access/src/uri_ext.cpp b/interfaces/inner_api/file_access/src/uri_ext.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d155d4b35e97e390abbe133b3069dc6864ff5121 --- /dev/null +++ b/interfaces/inner_api/file_access/src/uri_ext.cpp @@ -0,0 +1,501 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "uri_ext.h" +#include +#include +#include +#include "hilog/log.h" +#include "string_ex.h" + +using std::string; +using std::regex; +using OHOS::HiviewDFX::HiLog; + +namespace OHOS { +namespace FileAccessFwk { +// 默认构造函数实现 +Urie::Urie() : OHOS::Uri("") +{ + cachedSsi_ = NOT_FOUND; + cachedFsi_ = NOT_FOUND; + port_ = NOT_CALCULATED; +} + +// 接受字符串参数的构造函数实现 +Urie::Urie(const std::string& uriString) : OHOS::Uri(uriString) +{ + cachedSsi_ = NOT_FOUND; + cachedFsi_ = NOT_FOUND; + port_ = NOT_CALCULATED; + + if (uriString.empty()) { + return; + } + + uriString_ = uriString; + scheme_ = NOT_CACHED; + ssp_ = NOT_CACHED; + authority_ = NOT_CACHED; + host_ = NOT_CACHED; + userInfo_ = NOT_CACHED; + query_ = NOT_CACHED; + path_ = NOT_CACHED; + fragment_ = NOT_CACHED; + + if (!CheckScheme()) { + uriString_ = EMPTY; + std::cerr << "URI Scheme wrong" << std::endl; // 简单的错误输出,可替换为合适的日志记录方式 + } +} + +// 析构函数实现 +Urie::~Urie() { +} + +bool Urie::CheckScheme() +{ + scheme_ = ParseScheme(); + if (scheme_.empty()) { + return true; + } + regex schemeRegex("[a-zA-Z][a-zA-Z|\\d|\\+|\\-|.]*$"); + if (!regex_match(scheme_, schemeRegex)) { + return false; + } + return true; +} + +string Urie::GetScheme() +{ + if (uriString_.empty()) { + return EMPTY; + } + + if (scheme_ == NOT_CACHED) { + scheme_ = ParseScheme(); + } + return scheme_; +} + +string Urie::ParseScheme() +{ + size_t ssi = FindSchemeSeparator(); + return (ssi == NOT_FOUND) ? EMPTY : uriString_.substr(0, ssi); +} + +string Urie::GetSchemeSpecificPart() +{ + if (uriString_.empty()) { + return EMPTY; + } + + return (ssp_ == NOT_CACHED) ? (ssp_ = ParseSsp()) : ssp_; +} + +string Urie::ParseSsp() +{ + size_t ssi = FindSchemeSeparator(); + size_t fsi = FindFragmentSeparator(); + + size_t start = (ssi == NOT_FOUND) ? 0 : (ssi + 1); + size_t end = (fsi == NOT_FOUND) ? uriString_.size() : fsi; + + // Return everything between ssi and fsi. + string ssp = EMPTY; + if (end > start) { + ssp = uriString_.substr(start, end - start); + } + + return ssp; +} + +string Urie::GetAuthority() +{ + if (uriString_.empty()) { + return EMPTY; + } + + if (authority_ == NOT_CACHED) { + authority_ = ParseAuthority(); + } + return authority_; +} + +string Urie::ParseAuthority() +{ + size_t ssi = FindSchemeSeparator(); + if (ssi == NOT_FOUND) { + return EMPTY; + } + + size_t length = uriString_.length(); + // If "//" follows the scheme separator, we have an authority. + if ((length > (ssi + POS_INC_MORE)) && (uriString_.at(ssi + POS_INC) == LEFT_SEPARATOR) && + (uriString_.at(ssi + POS_INC_MORE) == LEFT_SEPARATOR)) { + // Look for the start of the path, query, or fragment, or the end of the string. + size_t start = ssi + POS_INC_AGAIN; + size_t end = start; + + while (end < length) { + char ch = uriString_.at(end); + if ((ch == LEFT_SEPARATOR) || (ch == RIGHT_SEPARATOR) || (ch == QUERY_FLAG) || + (ch == SCHEME_FRAGMENT)) { + break; + } + + end++; + } + + return uriString_.substr(start, end - start); + } else { + return EMPTY; + } +} + +string Urie::GetUserInfo() +{ + if (uriString_.empty()) { + return EMPTY; + } + + if (userInfo_ == NOT_CACHED) { + userInfo_ = ParseUserInfo(); + } + return userInfo_; +} + +string Urie::ParseUserInfo() +{ + string authority = GetAuthority(); + if (authority.empty()) { + return EMPTY; + } + + size_t end = authority.find_last_of(USER_HOST_SEPARATOR); + return (end == NOT_FOUND) ? EMPTY : authority.substr(0, end); +} + +string Urie::GetHost() +{ + if (uriString_.empty()) { + return EMPTY; + } + + if (host_ == NOT_CACHED) { + host_ = ParseHost(); + } + return host_; +} + +string Urie::ParseHost() +{ + string authority = GetAuthority(); + if (authority.empty()) { + return EMPTY; + } + + // Parse out user info and then port. + size_t userInfoSeparator = authority.find_last_of(USER_HOST_SEPARATOR); + size_t start = (userInfoSeparator == NOT_FOUND) ? 0 : (userInfoSeparator + 1); + size_t portSeparator = authority.find_first_of(PORT_SEPARATOR, start); + size_t end = (portSeparator == NOT_FOUND) ? authority.size() : portSeparator; + + string host = EMPTY; + if (start < end) { + host = authority.substr(start, end - start); + } + + return host; +} + +int Urie::GetPort() +{ + if (uriString_.empty()) { + return PORT_NONE; + } + + if (port_ == NOT_CALCULATED) { + port_ = ParsePort(); + } + return port_; +} + +int Urie::ParsePort() +{ + string authority = GetAuthority(); + if (authority.empty()) { + return PORT_NONE; + } + + // Make sure we look for the port separtor *after* the user info separator. + size_t userInfoSeparator = authority.find_last_of(USER_HOST_SEPARATOR); + size_t start = (userInfoSeparator == NOT_FOUND) ? 0 : (userInfoSeparator + 1); + size_t portSeparator = authority.find_first_of(PORT_SEPARATOR, start); + if (portSeparator == NOT_FOUND) { + return PORT_NONE; + } + + start = portSeparator + 1; + string portString = authority.substr(start); + + int value = PORT_NONE; + return StrToInt(portString, value) ? value : PORT_NONE; +} + +string Urie::GetQuery() +{ + if (uriString_.empty()) { + return EMPTY; + } + + if (query_ == NOT_CACHED) { + query_ = ParseQuery(); + } + return query_; +} + +string Urie::ParseQuery() +{ + size_t ssi = FindSchemeSeparator(); + if (ssi == NOT_FOUND) { + ssi = 0; + } + size_t qsi = uriString_.find_first_of(QUERY_FLAG, ssi); + if (qsi == NOT_FOUND) { + return EMPTY; + } + + size_t start = qsi + 1; + size_t fsi = FindFragmentSeparator(); + if (fsi == NOT_FOUND) { + return uriString_.substr(start); + } + + if (fsi < qsi) { + // Invalid. + return EMPTY; + } + + return uriString_.substr(start, fsi - start); +} + +string Urie::GetPath() +{ + if (uriString_.empty()) { + return EMPTY; + } + + if (path_ == NOT_CACHED) { + path_ = ParsePath(); + } + return path_; +} + +void Urie::GetPathSegments(std::vector& segments) +{ + if (uriString_.empty()) { + return; + } + if (path_ == NOT_CACHED) { + path_ = ParsePath(); + } + + size_t previous = 0; + size_t current; + while ((current = path_.find(LEFT_SEPARATOR, previous)) != std::string::npos) { + if (previous < current) { + segments.emplace_back(path_.substr(previous, current - previous)); + } + previous = current + POS_INC; + } + // Add in the final path segment. + if (previous < path_.length()) { + segments.emplace_back(path_.substr(previous)); + } +} + +string Urie::ParsePath() +{ + size_t ssi = FindSchemeSeparator(); + // If the URI is absolute. + if (ssi != NOT_FOUND) { + // Is there anything after the ':'? + if ((ssi + 1) == uriString_.length()) { + // Opaque URI. + return EMPTY; + } + + // A '/' after the ':' means this is hierarchical. + if (uriString_.at(ssi + 1) != LEFT_SEPARATOR) { + // Opaque URI. + return EMPTY; + } + } else { + // All relative URIs are hierarchical. + } + + return ParsePath(ssi); +} + +string Urie::ParsePath(size_t ssi) +{ + size_t length = uriString_.length(); + + // Find start of path. + size_t pathStart = (ssi == NOT_FOUND) ? 0 : (ssi + POS_INC); + if ((length > (pathStart + POS_INC)) && (uriString_.at(pathStart) == LEFT_SEPARATOR) && + (uriString_.at(pathStart + POS_INC) == LEFT_SEPARATOR)) { + // Skip over authority to path. + pathStart += POS_INC_MORE; + + while (pathStart < length) { + char ch = uriString_.at(pathStart); + if ((ch == QUERY_FLAG) || (ch == SCHEME_FRAGMENT)) { + return EMPTY; + } + + if ((ch == LEFT_SEPARATOR) || (ch == RIGHT_SEPARATOR)) { + break; + } + + pathStart++; + } + } + + // Find end of path. + size_t pathEnd = pathStart; + while (pathEnd < length) { + char ch = uriString_.at(pathEnd); + if ((ch == QUERY_FLAG) || (ch == SCHEME_FRAGMENT)) { + break; + } + + pathEnd++; + } + + return uriString_.substr(pathStart, pathEnd - pathStart); +} + +string Urie::GetFragment() +{ + if (uriString_.empty()) { + return EMPTY; + } + + if (fragment_ == NOT_CACHED) { + fragment_ = ParseFragment(); + } + return fragment_; +} + +string Urie::ParseFragment() +{ + size_t fsi = FindFragmentSeparator(); + return (fsi == NOT_FOUND) ? EMPTY : uriString_.substr(fsi + 1); +} + +size_t Urie::FindSchemeSeparator() +{ + if (cachedSsi_ == NOT_FOUND) { + cachedSsi_ = uriString_.find_first_of(SCHEME_SEPARATOR); + } + return cachedSsi_; +} + +size_t Urie::FindFragmentSeparator() +{ + if (cachedFsi_ == NOT_FOUND) { + cachedFsi_ = uriString_.find_first_of(SCHEME_FRAGMENT, FindSchemeSeparator()); + } + return cachedFsi_; +} + +bool Urie::IsHierarchical() +{ + if (uriString_.empty()) { + return false; + } + + size_t ssi = FindSchemeSeparator(); + if (ssi == NOT_FOUND) { + // All relative URIs are hierarchical. + return true; + } + + if (uriString_.length() == (ssi + 1)) { + // No ssp. + return false; + } + + // If the ssp starts with a '/', this is hierarchical. + return (uriString_.at(ssi + 1) == LEFT_SEPARATOR); +} + +bool Urie::IsAbsolute() +{ + if (uriString_.empty()) { + return false; + } + + return !IsRelative(); +} + +bool Urie::IsRelative() +{ + if (uriString_.empty()) { + return false; + } + + // Note: We return true if the index is 0 + return FindSchemeSeparator() == NOT_FOUND; +} + +bool Urie::Equals(const Urie& other) const +{ + return uriString_ == other.ToString(); +} + +int Urie::CompareTo(const Urie& other) const +{ + return uriString_.compare(other.ToString()); +} + +string Urie::ToString() const +{ + return uriString_; +} + +bool Urie::operator==(const Urie& other) const +{ + return uriString_ == other.ToString(); +} + +bool Urie::Marshalling(Parcel& parcel) const +{ + if (IsAsciiString(uriString_)) { + return parcel.WriteString16(Str8ToStr16(uriString_)); + } + + HILOG_IMPL(LOG_CORE, LOG_ERROR, 0xD001305, "URIe", "uriString_ is not ascii string"); + return false; +} + +Urie* Urie::Unmarshalling(Parcel& parcel) +{ + return new Urie(Str16ToStr8(parcel.ReadString16())); +} +} +} \ No newline at end of file diff --git a/interfaces/kits/js/src/common/file_info_shared_memory.h b/interfaces/kits/js/src/common/file_info_shared_memory.h index 0db3b32f8455d4d6550d1516ca999dfea5f14f03..1b5456d8c1035ce88903a6d1ca7eb4f86e59a354 100644 --- a/interfaces/kits/js/src/common/file_info_shared_memory.h +++ b/interfaces/kits/js/src/common/file_info_shared_memory.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2023 - 2024 Huawei Device Co., Ltd. + * Copyright (C) 2023 - 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -57,9 +57,7 @@ public: uint32_t leftDataCounts = 0; SharedMemoryInfo() = default; - SharedMemoryInfo(const SharedMemoryInfo &) = delete; - SharedMemoryInfo &operator=(SharedMemoryInfo &) = delete; - + bool Marshalling(Parcel &parcel) const override { if (!WriteFileDescriptor(parcel, memFd)) { @@ -69,6 +67,18 @@ public: if (!parcel.WriteUint64(memSize)) { return false; } + if (!parcel.WriteUint32(dataCounts)) { + return false; + } + if (!parcel.WriteUint64(dataSize)) { + return false; + } + if (!parcel.WriteUint32(leftDataCounts)) { + return false; + } + if (!parcel.WriteBool(isOver)) { + return false; + } return true; } @@ -89,6 +99,10 @@ public: } memSize = parcel.ReadUint64(); + dataCounts = parcel.ReadUint32(); + dataSize = parcel.ReadUint64(); + leftDataCounts = parcel.ReadUint32(); + isOver = parcel.ReadBool(); return true; } diff --git a/services/BUILD.gn b/services/BUILD.gn index 0fbc6854ee249761cdaa3dd21678f8af4162c44c..d0441abdc546527462cf4d61e84de35bdd674661 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2021-2024 Huawei Device Co., Ltd. +# Copyright (c) 2021-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,6 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import("//build/config/components/idl_tool/idl.gni") import("//build/ohos.gni") import("//foundation/filemanagement/user_file_service/filemanagement_aafwk.gni") @@ -85,6 +86,82 @@ ohos_resources("external_file_manager_resources") { hap_profile = "file_extension_hap/entry/src/main/module.json" } +idl_gen_interface("IFile_Access_Service_Base") { + sources = [ "IFileAccessServiceBase.idl" ] + sources_callback = [ "IFileAccessObserver.idl" ] + sources_common = [ "NotifyType.idl" ] + hitrace = "HITRACE_TAG_FILEMANAGEMENT" + log_domainid = "0xD00430A" + log_tag = "filemanagement" +} + +config("IFile_Access_Service_Base_config") { + visibility = [ ":*" ] + include_dirs = [ + "native/file_access_service/include", + "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/utils", + "${user_file_service_path}/interfaces/kits/js/src/common", + "${target_gen_dir}", + ] +} + +ohos_source_set("file_access_service_base_source") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + public_configs = [ ":IFile_Access_Service_Base_config" ] + output_values = get_target_outputs(":IFile_Access_Service_Base") + sources = filter_include(output_values, [ "*.cpp" ]) + deps = [ + ":IFile_Access_Service_Base", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", + ] + + external_deps = [ + "ability_base:want", + "ability_base:zuri", + "ability_runtime:ability_connect_callback_stub", + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "ipc:ipc_core", + "ipc:ipc_single", + ] + + subsystem_name = "filemanagement" + part_name = "user_file_service" +} + +ohos_source_set("file_access_service_base_include") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + public_configs = [ ":IFile_Access_Service_Base_config" ] + deps = [ + ":IFile_Access_Service_Base", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", + ] + + external_deps = [ + "ability_base:want", + "ability_base:zuri", + "ability_runtime:ability_connect_callback_stub", + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "ipc:ipc_core", + "ipc:ipc_single", + ] + + subsystem_name = "filemanagement" + part_name = "user_file_service" +} + ohos_shared_library("file_access_service") { branch_protector_ret = "pac_ret" sanitize = { @@ -102,18 +179,20 @@ ohos_shared_library("file_access_service") { ] shlib_type = "sa" sources = [ + "${user_file_service_path}/interfaces/inner_api/file_access/src/uri_ext.cpp", "native/file_access_service/src/file_access_ext_connection.cpp", "native/file_access_service/src/file_access_service.cpp", - "native/file_access_service/src/file_access_service_proxy.cpp", - "native/file_access_service/src/file_access_service_stub.cpp", - "native/file_access_service/src/observer_callback_proxy.cpp", - "native/file_access_service/src/observer_callback_stub.cpp", + "native/file_access_service/src/file_access_service_client.cpp", ] configs = [ ":ability_config" ] version_script = "libfile_access_service.map" public_configs = [ ":ability_public_config" ] - deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit" ] + deps = [ + ":file_access_service_base_source", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", + ] external_deps = [ "ability_base:want", diff --git a/test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.h b/services/IFileAccessObserver.idl similarity index 70% rename from test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.h rename to services/IFileAccessObserver.idl index 4df9801e08a4f993f1a587652d6d877dd4c5ae04..32a762f79982f1c1dd1a2f4ca87a7f6b79bf23e7 100644 --- a/test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.h +++ b/services/IFileAccessObserver.idl @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,9 +13,7 @@ * limitations under the License. */ -#ifndef FILE_ACCESS_EXT_STUB_BRANCH_FUZZER_H -#define FILE_ACCESS_EXT_STUB_BRANCH_FUZZER_H - -#define FUZZ_PROJECT_NAME "fileaccessextstubbranch_fuzzer" - -#endif \ No newline at end of file +sequenceable FileAccessObserverCommon..OHOS.FileAccessFwk.NotifyMessage; +[callback] interface OHOS.FileAccessFwk.IFileAccessObserver { + void OnChange([in] NotifyMessage notifyMessage); +} \ No newline at end of file diff --git a/services/native/file_access_service/include/iobserver_callback.h b/services/IFileAccessServiceBase.idl similarity index 35% rename from services/native/file_access_service/include/iobserver_callback.h rename to services/IFileAccessServiceBase.idl index a55d3b0e7e4640c7b00ed2e2ee33bc332fa2c1ff..704913b039e4ce265b6daf21fc52f6c9a22628bc 100644 --- a/services/native/file_access_service/include/iobserver_callback.h +++ b/services/IFileAccessServiceBase.idl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,25 +13,20 @@ * limitations under the License. */ -#ifndef I_FILE_ACCESS_OBSERVER_H -#define I_FILE_ACCESS_OBSERVER_H - -#include "file_access_observer_common.h" -#include "iremote_broker.h" -#include "iremote_object.h" - -namespace OHOS { -namespace FileAccessFwk { -class IFileAccessObserver : public IRemoteBroker { -public: - DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.FileAccessFwk.IFileAccessObserver"); - -public: - enum { - CMD_ONCHANGE = 0 - }; - virtual void OnChange(NotifyMessage ¬ifyMessage) = 0; -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // I_FILE_ACCESS_OBSERVER_H +import NotifyType; +import IFileAccessObserver; +sequenceable Uri..OHOS.Uri; +sequenceable FileAccessExtensionInfo..OHOS.FileAccessFwk.ConnectExtensionInfo; +sequenceable Want..OHOS.AAFwk.Want; +interface OHOS.FileAccessFwk.IFileAccessExtBase; +interface OHOS.AAFwk.IAbilityConnection; +interface OHOS.FileAccessFwk.IFileAccessServiceBase { + void RegisterNotify([in] Uri uri, [in] boolean notifyForDescendants, [in] IFileAccessObserver observer, + [in] ConnectExtensionInfo info); + void UnregisterNotify([in] Uri uri, [in] IFileAccessObserver observer, [in] ConnectExtensionInfo info); + void OnChange([in] Uri uri, [in] NotifyType notifyType); + void GetExtensionProxy([in] ConnectExtensionInfo info, [out] IFileAccessExtBase extensionProxy); + void ConnectFileExtAbility([in] Want want, [in] IAbilityConnection connection); + void DisConnectFileExtAbility([in] IAbilityConnection connection); + void UnregisterNotifyNoObserver([in] Uri uri, [in] ConnectExtensionInfo info); +} \ No newline at end of file diff --git a/test/fuzztest/fileaccessextstub_fuzzer/corpus/init b/services/NotifyType.idl similarity index 71% rename from test/fuzztest/fileaccessextstub_fuzzer/corpus/init rename to services/NotifyType.idl index 6198079a28e860189d4294f6598f8ac6804c0dff..dec10c983661fc1525ca33542f04a62ebc55540c 100644 --- a/test/fuzztest/fileaccessextstub_fuzzer/corpus/init +++ b/services/NotifyType.idl @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,4 +13,12 @@ * limitations under the License. */ -FUZZ \ No newline at end of file +enum NotifyType { + NOTIFY_ADD = 0, + NOTIFY_DELETE, + NOTIFY_MOVE_TO, + NOTIFY_MOVE_FROM, + NOTIFY_MOVE_SELE, + NOTIFY_DEVICE_ONLINE, + NOTIFY_DEVICE_OFFLINE +}; \ No newline at end of file diff --git a/services/libfile_access_service.map b/services/libfile_access_service.map index e7160ffa5a21a831743d48d66e340a7ea1cfa81f..02de233262f8a83e8265a373545cdd4f611b9150 100644 --- a/services/libfile_access_service.map +++ b/services/libfile_access_service.map @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -14,13 +14,14 @@ 1.0 { global: extern "C++" { - *FileAccessServiceProxy*; + *FileAccessServiceClient*; + *FileAccessServiceBaseProxy*; *FileAccessService*; - *FileAccessServiceStub*; - *ObserverCallbackStub*; - *ObserverCallbackProxy*; + *FileAccessServiceBaseStub*; + *FileAccessObserverStub*; + *FileAccessObserverProxy*; **; }; local: *; -}; \ No newline at end of file +}; diff --git a/services/native/file_access_service/include/file_access_ext_connection.h b/services/native/file_access_service/include/file_access_ext_connection.h index 0e6c5dbac02686293edea22561faa34f845ca216..3383cde8c7c0942cd6dbd64777451c1fa1a349cc 100644 --- a/services/native/file_access_service/include/file_access_ext_connection.h +++ b/services/native/file_access_service/include/file_access_ext_connection.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022-2024 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "ability_connect_callback_stub.h" #include "element_name.h" #include "ifile_access_ext_base.h" -#include "file_access_ext_proxy.h" +#include "file_access_ext_base_proxy.h" #include "file_access_service.h" #include "iremote_object.h" #include "refbase.h" diff --git a/services/native/file_access_service/include/file_access_service.h b/services/native/file_access_service/include/file_access_service.h index d87a15cbc3e867c408707cb677444594c191c85e..b24e0c47364f9719645f4ba3ba44e7b0bfcf9dc8 100644 --- a/services/native/file_access_service/include/file_access_service.h +++ b/services/native/file_access_service/include/file_access_service.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023-2024 Huawei Device Co., Ltd. + * Copyright (C) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -24,9 +24,10 @@ #include #include +#include "file_access_helper.h" #include "bundle_mgr_interface.h" #include "file_access_ext_connection.h" -#include "file_access_service_stub.h" +#include "file_access_service_base_stub.h" #include "ifile_access_ext_base.h" #include "holder_manager.h" #include "ifile_access_ext_base.h" @@ -215,10 +216,11 @@ private: uint32_t count_ = 0; }; -class FileAccessService final : public SystemAbility, public FileAccessServiceStub { +class FileAccessService final : public SystemAbility, public FileAccessServiceBaseStub { DECLARE_SYSTEM_ABILITY(FileAccessService) public: + bool CheckCallingPermission(const std::string &permission); static sptr GetInstance(); void Init(); virtual ~FileAccessService() = default; @@ -231,13 +233,14 @@ public: void RemoveAppProxy(const sptr& connection); protected: - int32_t RegisterNotify(Uri uri, bool notifyForDescendants, const sptr &observer, - const std::shared_ptr &info) override; - int32_t UnregisterNotify(Uri uri, const sptr &observer, - const std::shared_ptr &info = nullptr) override; - int32_t CleanAllNotify(Uri uri, const std::shared_ptr &info) override; - int32_t OnChange(Uri uri, NotifyType notifyType) override; - int32_t GetExtensionProxy(const std::shared_ptr &info, + int32_t RegisterNotify(const Uri &uri, bool notifyForDescendants, const sptr &observer, + const ConnectExtensionInfo& info) override; + int32_t UnregisterNotify(const Uri &uri, const sptr &observer, + const ConnectExtensionInfo& info) override; + int32_t UnregisterNotifyNoObserver(const Uri &uri, const ConnectExtensionInfo& info) override; + int32_t CleanAllNotify(Uri uri, const std::shared_ptr &info); + int32_t OnChange(const Uri &uri, NotifyType notifyType) override; + int32_t GetExtensionProxy(const ConnectExtensionInfo& info, sptr &extensionProxy) override; int32_t ConnectFileExtAbility(const AAFwk::Want &want, const sptr& connection) override; diff --git a/services/native/file_access_service/include/file_access_service_proxy.h b/services/native/file_access_service/include/file_access_service_client.h similarity index 59% rename from services/native/file_access_service/include/file_access_service_proxy.h rename to services/native/file_access_service/include/file_access_service_client.h index b32375af92b8a5a0e04354d3c6b95985d001e7fd..76c827801d01de6ff3a6f93bb1101ec7aaf56680 100644 --- a/services/native/file_access_service/include/file_access_service_proxy.h +++ b/services/native/file_access_service/include/file_access_service_client.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 Huawei Device Co., Ltd. + * Copyright (C) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,31 +13,22 @@ * limitations under the License. */ -#ifndef FILE_ACCESS_SERVICE_PROXY_H -#define FILE_ACCESS_SERVICE_PROXY_H +#ifndef FILE_ACCESS_SERVICE_CLIENT_H +#define FILE_ACCESS_SERVICE_CLIENT_H #include "ifile_access_service_base.h" #include "iremote_proxy.h" #include "system_ability_load_callback_stub.h" +#include "file_access_service_base_proxy.h" namespace OHOS { namespace FileAccessFwk { -class FileAccessServiceProxy : public IRemoteProxy { +class FileAccessServiceClient { public: - explicit FileAccessServiceProxy(const sptr &impl) : IRemoteProxy(impl) {} - ~FileAccessServiceProxy() = default; - static sptr GetInstance(); + + ~FileAccessServiceClient() = default; + static sptr GetInstance(); static void InvaildInstance(); - int32_t OnChange(Uri uri, NotifyType notifyType) override; - int32_t RegisterNotify(Uri uri, bool notifyForDescendants, const sptr &observer, - const std::shared_ptr &info) override; - int32_t UnregisterNotify(Uri uri, const sptr &observer, - const std::shared_ptr &info) override; - int32_t GetExtensionProxy(const std::shared_ptr &info, - sptr &extensionProxy) override; - int32_t ConnectFileExtAbility(const AAFwk::Want &want, - const sptr& connection) override; - int32_t DisConnectFileExtAbility(const sptr& connection) override; class ServiceProxyLoadCallback : public SystemAbilityLoadCallbackStub { public: @@ -68,9 +59,8 @@ private: }; int32_t UnregisterNotifyInternal(MessageParcel &data); static inline std::mutex proxyMutex_; - static inline sptr serviceProxy_; - static inline BrokerDelegator delegator_; + static inline sptr serviceProxy_; }; } // namespace FileAccessFwk } // namespace OHOS -#endif // FILE_ACCESS_SERVICE_PROXY_H +#endif // FILE_ACCESS_SERVICE_CLIENT_H diff --git a/services/native/file_access_service/include/file_access_service_stub.h b/services/native/file_access_service/include/file_access_service_stub.h deleted file mode 100644 index 96067c0812f3539495841aed8bbd795eadf32241..0000000000000000000000000000000000000000 --- a/services/native/file_access_service/include/file_access_service_stub.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FILE_ACCESS_SERVICE_STUB_H -#define FILE_ACCESS_SERVICE_STUB_H - -#include - -#include "ifile_access_service_base.h" -#include "iremote_stub.h" -#include "refbase.h" - -namespace OHOS { -namespace FileAccessFwk { -class FileAccessServiceStub : public IRemoteStub { -public: - FileAccessServiceStub(); - virtual ~FileAccessServiceStub(); - int32_t OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override; - -protected: -virtual int32_t CleanAllNotify (Uri uri, const std::shared_ptr &info) = 0; - -private: - ErrCode CmdOnChange(MessageParcel &data, MessageParcel &reply); - ErrCode CmdRegisterNotify(MessageParcel &data, MessageParcel &reply); - ErrCode CmdUnregisterNotify(MessageParcel &data, MessageParcel &reply); - ErrCode CmdGetExensionProxy(MessageParcel &data, MessageParcel &reply); - ErrCode CmdConnectFileExtAbility(MessageParcel &data, MessageParcel &reply); - ErrCode CmdDisConnectFileExtAbility(MessageParcel &data, MessageParcel &reply); - bool CheckCallingPermission(const std::string &permission); - using RequestFuncType = int (FileAccessServiceStub::*)(MessageParcel &data, MessageParcel &reply); - std::map stubFuncMap_; -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // FILE_ACCESS_SERVICE_STUB_H diff --git a/test/fuzztest/fileaccessextstub_fuzzer/fileaccessextstub_fuzzer.h b/services/native/file_access_service/include/iability_connection.h similarity index 75% rename from test/fuzztest/fileaccessextstub_fuzzer/fileaccessextstub_fuzzer.h rename to services/native/file_access_service/include/iability_connection.h index 05bfa06af4bffc5b1c10e670917bcbc461526703..5f6012027086626b2a5d34aa58247410a5dc9323 100644 --- a/test/fuzztest/fileaccessextstub_fuzzer/fileaccessextstub_fuzzer.h +++ b/services/native/file_access_service/include/iability_connection.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,9 +13,9 @@ * limitations under the License. */ -#ifndef FILE_ACCESS_EXT_STUB_FUZZER_H -#define FILE_ACCESS_EXT_STUB_FUZZER_H +#ifndef IABILITY_CONNECTION_H +#define IABILITY_CONNECTION_H -#define FUZZ_PROJECT_NAME "fileaccessextstub_fuzzer" +#include "ability_connect_callback_interface.h" -#endif \ No newline at end of file +#endif // IABILITY_CONNECTION_H \ No newline at end of file diff --git a/services/native/file_access_service/include/ifile_access_service_base.h b/services/native/file_access_service/include/ifile_access_service_base.h deleted file mode 100644 index 02cb61a35c2d5801578369a70ed2d98d6bf4ad4f..0000000000000000000000000000000000000000 --- a/services/native/file_access_service/include/ifile_access_service_base.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef I_FILE_ACCESS_SERVICE_BASE_H -#define I_FILE_ACCESS_SERVICE_BASE_H - -#include "ability_connect_callback_interface.h" -#include "file_access_helper.h" -#include "iremote_broker.h" -#include "iremote_object.h" -#include "iobserver_callback.h" -#include "uri.h" - -namespace OHOS { -namespace FileAccessFwk { -using Uri = OHOS::Uri; -class IFileAccessServiceBase : public IRemoteBroker { -public: - DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.FileAccessFwk.IFileAccessServiceBase"); - -protected: - virtual int32_t OnChange(Uri uri, NotifyType notifyType) = 0; - virtual int32_t RegisterNotify(Uri uri, bool notifyForDescendants, const sptr &observer, - const std::shared_ptr &info) = 0; - virtual int32_t UnregisterNotify(Uri uri, const sptr &observer, - const std::shared_ptr &info) = 0; - //Get exension proxy by SA - virtual int32_t GetExtensionProxy(const std::shared_ptr &info, - sptr &extensionProxy) = 0; - virtual int32_t ConnectFileExtAbility(const AAFwk::Want &want, - const sptr& connection) = 0; - virtual int32_t DisConnectFileExtAbility(const sptr& connection) = 0; -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // I_FILE_ACCESS_SERVICE_BASE_H diff --git a/services/native/file_access_service/include/observer_callback_proxy.h b/services/native/file_access_service/include/observer_callback_proxy.h deleted file mode 100644 index fc390ba6abf2d76d5bbf1f00ff8d1fdc6456ebb8..0000000000000000000000000000000000000000 --- a/services/native/file_access_service/include/observer_callback_proxy.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef OBSERVER_CALLBACK_PROXY_H -#define OBSERVER_CALLBACK_PROXY_H - -#include "iobserver_callback.h" -#include "iremote_broker.h" -#include "iremote_proxy.h" -#include "hilog_wrapper.h" - -namespace OHOS { -namespace FileAccessFwk { -class ObserverCallbackProxy : public IRemoteProxy { -public: - explicit ObserverCallbackProxy(const sptr& remote) : IRemoteProxy(remote) {} - ~ObserverCallbackProxy() = default; - void OnChange(NotifyMessage ¬ifyMessage) override; - -private: - static inline BrokerDelegator delegator_; -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // OBSERVER_CALLBACK_PROXY_H \ No newline at end of file diff --git a/services/native/file_access_service/include/observer_callback_stub.h b/services/native/file_access_service/include/observer_callback_stub.h deleted file mode 100644 index 229ba642c88443af37a6ee793f6db83f0968126b..0000000000000000000000000000000000000000 --- a/services/native/file_access_service/include/observer_callback_stub.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef OBSERVER_CALLBACK_STUB_H -#define OBSERVER_CALLBACK_STUB_H - -#include -#include -#include - -#include "iobserver_callback.h" -#include "iremote_stub.h" -#include "message_option.h" -#include "message_parcel.h" -#include "refbase.h" - -namespace OHOS { -namespace FileAccessFwk { -class ObserverCallbackStub : public IRemoteStub { -public: - ObserverCallbackStub() = default; - virtual ~ObserverCallbackStub(); - int32_t OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) override; - -private: - int32_t OnChangeStub(MessageParcel &data, MessageParcel &reply); - void InitStubFuncMap(); - using RequestFuncType = int (ObserverCallbackStub::*)(MessageParcel &data, MessageParcel &reply); - std::map stubFuncMap_ = {}; -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // OBSERVER_CALLBACK_STUB_H \ No newline at end of file diff --git a/services/native/file_access_service/src/file_access_ext_connection.cpp b/services/native/file_access_service/src/file_access_ext_connection.cpp index a2928a3df86b878c24640fb3e1c2fa66ce8402a2..aea9d4b5ed15a583a9ce428d103376b35560b856 100644 --- a/services/native/file_access_service/src/file_access_ext_connection.cpp +++ b/services/native/file_access_service/src/file_access_ext_connection.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -19,7 +19,7 @@ #include "ability_connect_callback_interface.h" #include "ability_manager_client.h" -#include "file_access_ext_proxy.h" +#include "file_access_ext_base_proxy.h" #include "hilog_wrapper.h" #include "iremote_broker.h" #include "ipc_skeleton.h" @@ -40,7 +40,7 @@ void FileAccessExtConnection::OnAbilityConnectDone( return; } - fileExtProxy_ = iface_cast(remoteObject); + fileExtProxy_ = iface_cast(remoteObject); if (fileExtProxy_ == nullptr) { HILOG_ERROR("FileAccessExtConnection fileExtProxy_ is nullptr"); return; diff --git a/services/native/file_access_service/src/file_access_service.cpp b/services/native/file_access_service/src/file_access_service.cpp index da96b6a5b6e589ba6a776d3e1d3a81a38e9b6afa..51899a8b9b58d0780a91e55f08a33259a3bffa85 100644 --- a/services/native/file_access_service/src/file_access_service.cpp +++ b/services/native/file_access_service/src/file_access_service.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023-2024 Huawei Device Co., Ltd. + * Copyright (C) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -26,6 +26,9 @@ #include "ipc_skeleton.h" #include "system_ability_definition.h" #include "iservice_registry.h" +#include "uri_ext.h" +#include "access_token.h" +#include "accesstoken_kit.h" using namespace std; namespace OHOS { @@ -34,6 +37,7 @@ namespace { auto pms = FileAccessService::GetInstance(); const bool G_REGISTER_RESULT = SystemAbility::MakeAndRegisterAbility(pms.GetRefPtr()); const std::string FILE_SCHEME = "file://"; + const std::string FILE_ACCESS_PERMISSION = "ohos.permission.FILE_ACCESS_MANAGER"; } sptr FileAccessService::instance_; mutex FileAccessService::mutex_; @@ -45,6 +49,20 @@ constexpr int32_t ONE_SECOND = 1 * 1000; constexpr int32_t UNLOAD_SA_WAIT_TIME = 30; std::vector deviceUris(DEVICE_ROOTS.begin(), DEVICE_ROOTS.end()); +bool FileAccessService::CheckCallingPermission(const std::string &permission) +{ + UserAccessTracer trace; + trace.Start("CheckCallingPermission"); + Security::AccessToken::AccessTokenID tokenCaller = IPCSkeleton::GetCallingTokenID(); + int res = Security::AccessToken::AccessTokenKit::VerifyAccessToken(tokenCaller, permission); + if (res != Security::AccessToken::PermissionState::PERMISSION_GRANTED) { + HILOG_ERROR("FileAccessExtStub::CheckCallingPermission have no fileAccess permission"); + return false; + } + + return true; +} + sptr FileAccessService::GetInstance() { if (instance_ != nullptr) { @@ -191,7 +209,7 @@ sptr FileAccessService::ConnectExtension(Uri &uri, const sha sptr extensionProxy; { lock_guard lock(mutex_); - int32_t ret = GetExtensionProxy(info, extensionProxy); + int32_t ret = GetExtensionProxy(*info, extensionProxy); if (ret != ERR_OK || extensionProxy == nullptr) { return nullptr; } @@ -262,9 +280,10 @@ void FileAccessService::CleanRelativeObserver(const sptr &o uint32_t code = obsManager_.getId([obsContext](const shared_ptr &afterContext) { return obsContext->EqualTo(afterContext); }); + ConnectExtensionInfo info = ConnectExtensionInfo(); std::vector uriLists = GetUriList(code); for (size_t i = 0; i < uriLists.size(); ++i) { - UnregisterNotify(uriLists[i], observer); + UnregisterNotify(uriLists[i], observer, info); } } @@ -297,13 +316,20 @@ static void convertUris(Uri uri, std::vector &uris) } } -int32_t FileAccessService::RegisterNotify(Uri uri, bool notifyForDescendants, const sptr &observer, - const std::shared_ptr &info) +int32_t FileAccessService::RegisterNotify(const Uri &uri, bool notifyForDescendants, + const sptr &observer, + const ConnectExtensionInfo& info) { + if (!CheckCallingPermission(FILE_ACCESS_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } + std::shared_ptr infoPtr = + std::make_shared(info); std::vector uris; convertUris(uri, uris); for (auto eachUri : uris) { - int ret = RegisterNotifyImpl(eachUri, notifyForDescendants, observer, info); + int ret = RegisterNotifyImpl(eachUri, notifyForDescendants, observer, infoPtr); if (ret != ERR_OK) { HILOG_ERROR("RegisterNotify error ret = %{public}d", ret); return ret; @@ -316,13 +342,11 @@ int32_t FileAccessService::OperateObsNode(Uri &uri, bool notifyForDescendants, u const std::shared_ptr &info) { string uriStr = uri.ToString(); - HILOG_INFO("OperateObsNode uriStr: %{private}s", uriStr.c_str()); { lock_guard lock(nodeMutex_); auto iter = relationshipMap_.find(uriStr); if (iter != relationshipMap_.end()) { auto obsNode = iter->second; - // this node has this callback or not, if has this, unref manager. auto haveCodeIter = find_if(obsNode->obsCodeList_.begin(), obsNode->obsCodeList_.end(), [code](const uint32_t &listCode) { return code == listCode; }); if (haveCodeIter != obsNode->obsCodeList_.end()) { @@ -333,7 +357,6 @@ int32_t FileAccessService::OperateObsNode(Uri &uri, bool notifyForDescendants, u HILOG_DEBUG("Register same uri and same callback and same notifyForDescendants"); return ERR_OK; } - // need modify obsNode notifyForDescendants obsNode->needChildNote_ = notifyForDescendants; HILOG_DEBUG("Register same uri and same callback but need modify notifyForDescendants"); return ERR_OK; @@ -342,17 +365,15 @@ int32_t FileAccessService::OperateObsNode(Uri &uri, bool notifyForDescendants, u return ERR_OK; } } - auto extensionProxy = ConnectExtension(uri, info); if (extensionProxy == nullptr) { - HILOG_ERROR("Creator get invalid fileExtProxy"); return E_CONNECT; } - extensionProxy->StartWatcher(uri); + Urie uriConvert(uriStr); + extensionProxy->StartWatcher(uriConvert); { lock_guard lock(nodeMutex_); auto obsNode = make_shared(notifyForDescendants); - // add new node relations. for (auto &[comUri, node] : relationshipMap_) { if (IsParentUri(comUri, uriStr)) { obsNode->parent_ = node; @@ -363,7 +384,6 @@ int32_t FileAccessService::OperateObsNode(Uri &uri, bool notifyForDescendants, u node->parent_ = obsNode; } } - // obsCodeList_ is to save callback number obsNode->obsCodeList_.push_back(code); relationshipMap_.insert(make_pair(uriStr, obsNode)); } @@ -477,7 +497,8 @@ int32_t FileAccessService::CleanAllNotifyImpl(Uri uri, const std::shared_ptrStopWatcher(originalUri); + Urie originalUriConvert(originalUri.ToString()); + extensionProxy->StopWatcher(originalUriConvert); RemoveRelations(uriStr, obsNode); if (IsUnused() && unLoadTimer_) { unLoadTimer_->reset(); @@ -485,13 +506,19 @@ int32_t FileAccessService::CleanAllNotifyImpl(Uri uri, const std::shared_ptr &observer, - const std::shared_ptr &info) +int32_t FileAccessService::UnregisterNotify(const Uri &uri, const sptr &observer, + const ConnectExtensionInfo &info) { + if (!CheckCallingPermission(FILE_ACCESS_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } + std::shared_ptr infoPtr = + std::make_shared(info); std::vector uris; convertUris(uri, uris); for (auto eachUri : uris) { - int ret = UnregisterNotifyImpl(eachUri, observer, info); + int ret = UnregisterNotifyImpl(eachUri, observer, infoPtr); if (ret != ERR_OK) { HILOG_ERROR("UnregisterNotify error ret = %{public}d", ret); return ret; @@ -503,6 +530,18 @@ int32_t FileAccessService::UnregisterNotify(Uri uri, const sptr infoPtr = + std::make_shared(info); + int ret = CleanAllNotify(uri, infoPtr); + return ret; +} + int32_t FileAccessService::UnregisterNotifyImpl(Uri uri, const sptr &observer, const std::shared_ptr &info) { @@ -595,8 +634,12 @@ void FileAccessService::SendListNotify(string uriStr, NotifyType notifyType, con } } -int32_t FileAccessService::OnChange(Uri uri, NotifyType notifyType) +int32_t FileAccessService::OnChange(const Uri &uri, NotifyType notifyType) { + if (!CheckCallingPermission(FILE_ACCESS_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } UserAccessTracer trace; trace.Start("OnChange"); string uriStr = uri.ToString(); @@ -692,6 +735,10 @@ void FileAccessService::InitTimer() int32_t FileAccessService::ConnectFileExtAbility(const AAFwk::Want &want, const sptr& connection) { + if (!CheckCallingPermission(FILE_ACCESS_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } HILOG_INFO("ConnectFileExtAbility start"); if (connection == nullptr) { HILOG_ERROR("connection is nullptr"); @@ -712,6 +759,10 @@ int32_t FileAccessService::ConnectFileExtAbility(const AAFwk::Want &want, int32_t FileAccessService::DisConnectFileExtAbility(const sptr& connection) { + if (!CheckCallingPermission(FILE_ACCESS_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } HILOG_INFO("ConnectFileExtAbility start"); if (connection == nullptr) { HILOG_ERROR("connection is nullptr"); @@ -723,19 +774,25 @@ int32_t FileAccessService::DisConnectFileExtAbility(const sptr &info, +int32_t FileAccessService::GetExtensionProxy(const ConnectExtensionInfo& info, sptr &extensionProxy) { + if (!CheckCallingPermission(FILE_ACCESS_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } + std::shared_ptr infoPtr = + std::make_shared(info); sptr fileAccessExtConnection(new(std::nothrow) FileAccessExtConnection()); if (fileAccessExtConnection == nullptr) { HILOG_ERROR("new fileAccessExtConnection fail"); return E_CONNECT; } - if (info == nullptr || info->token == nullptr) { + if (infoPtr == nullptr || infoPtr->token == nullptr) { HILOG_ERROR("ConnectExtensionInfo is invalid"); return E_CONNECT; } - fileAccessExtConnection->ConnectFileExtAbility(info->want, info->token); + fileAccessExtConnection->ConnectFileExtAbility(infoPtr->want, infoPtr->token); extensionProxy = fileAccessExtConnection->GetFileExtProxy(); if (extensionProxy == nullptr) { HILOG_ERROR("extensionProxy is nullptr"); @@ -758,7 +815,8 @@ int32_t FileAccessService::RmUriObsNodeRelations(std::string &uriStr, std::share HILOG_ERROR("Creator get invalid fileExtProxy"); return E_CONNECT; } - extensionProxy->StopWatcher(originalUri); + Urie originalUriConvert(originalUri.ToString()); + extensionProxy->StopWatcher(originalUriConvert); RemoveRelations(uriStr, obsNode); return ERR_OK; } diff --git a/services/native/file_access_service/src/file_access_service_client.cpp b/services/native/file_access_service/src/file_access_service_client.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fd145110d3091852817365f1f51cc56e7a82dcea --- /dev/null +++ b/services/native/file_access_service/src/file_access_service_client.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "file_access_service_client.h" + +#include "bundle_constants.h" +#include "user_access_tracer.h" +#include "file_access_framework_errno.h" +#include "file_access_service_ipc_interface_code.h" +#include "hilog_wrapper.h" +#include "hitrace_meter.h" +#include "ipc_skeleton.h" +#include "iservice_registry.h" +#include "system_ability_definition.h" + +namespace OHOS { +namespace FileAccessFwk { +constexpr int LOAD_SA_TIMEOUT_MS = 5000; +const std::string UID_TAG = "uid:"; +sptr FileAccessServiceClient::GetInstance() +{ + HILOG_INFO("Getinstance"); + std::unique_lock lock(proxyMutex_); + if (serviceProxy_ != nullptr) { + return serviceProxy_; + } + + auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (samgr == nullptr) { + HILOG_ERROR("Samgr is nullptr"); + return nullptr; + } + sptr loadCallback(new ServiceProxyLoadCallback()); + if (loadCallback == nullptr) { + HILOG_ERROR("loadCallback is nullptr"); + return nullptr; + } + int32_t ret = samgr->LoadSystemAbility(FILE_ACCESS_SERVICE_ID, loadCallback); + if (ret != ERR_OK) { + HILOG_ERROR("Failed to Load systemAbility, systemAbilityId:%{public}d, ret code:%{public}d", + FILE_ACCESS_SERVICE_ID, ret); + return nullptr; + } + + auto waitStatus = loadCallback->proxyConVar_.wait_for( + lock, std::chrono::milliseconds(LOAD_SA_TIMEOUT_MS), + [loadCallback]() { return loadCallback->isLoadSuccess_.load(); }); + if (!waitStatus) { + HILOG_ERROR("Load FileAccessService SA timeout"); + return nullptr; + } + return serviceProxy_; +} + +void FileAccessServiceClient::ServiceProxyLoadCallback::OnLoadSystemAbilitySuccess( + int32_t systemAbilityId, + const sptr &remoteObject) +{ + HILOG_INFO("Load FileAccessService SA success,systemAbilityId:%{public}d, remoteObj result:%{private}s", + systemAbilityId, (remoteObject == nullptr ? "false" : "true")); + if (systemAbilityId != FILE_ACCESS_SERVICE_ID || remoteObject == nullptr) { + isLoadSuccess_.store(false); + proxyConVar_.notify_one(); + return; + } + std::unique_lock lock(proxyMutex_); + serviceProxy_ = iface_cast(remoteObject); + if (!serviceProxy_) { + HILOG_ERROR("Failed to get remote object"); + isLoadSuccess_.store(false); + proxyConVar_.notify_one(); + return; + } + auto remoteObj = serviceProxy_->AsObject(); + if (!remoteObj) { + HILOG_ERROR("Failed to get remote object"); + serviceProxy_ = nullptr; + isLoadSuccess_.store(false); + proxyConVar_.notify_one(); + return; + } + + auto callback = [](const wptr &obj) { + FileAccessServiceClient::InvaildInstance(); + HILOG_ERROR("service died"); + }; + sptr deathRecipient = sptr(new ProxyDeathRecipient(callback)); + remoteObj->AddDeathRecipient(deathRecipient); + isLoadSuccess_.store(true); + proxyConVar_.notify_one(); +} + +void FileAccessServiceClient::ServiceProxyLoadCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) +{ + HILOG_INFO("Load FileAccessService SA failed,systemAbilityId:%{public}d", systemAbilityId); + std::unique_lock lock(proxyMutex_); + serviceProxy_ = nullptr; + isLoadSuccess_.store(false); + proxyConVar_.notify_one(); +} + +void FileAccessServiceClient::InvaildInstance() +{ + HILOG_INFO("invalid instance"); + std::unique_lock lock(proxyMutex_); + serviceProxy_ = nullptr; +} +} // namespace FileAccessFwk +} // namespace OHOS diff --git a/services/native/file_access_service/src/file_access_service_proxy.cpp b/services/native/file_access_service/src/file_access_service_proxy.cpp deleted file mode 100644 index b476ad710e47bfc965e7d81bbeb71ec36be686b3..0000000000000000000000000000000000000000 --- a/services/native/file_access_service/src/file_access_service_proxy.cpp +++ /dev/null @@ -1,446 +0,0 @@ -/* - * Copyright (C) 2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "file_access_service_proxy.h" - -#include "bundle_constants.h" -#include "user_access_tracer.h" -#include "file_access_framework_errno.h" -#include "file_access_service_ipc_interface_code.h" -#include "hilog_wrapper.h" -#include "hitrace_meter.h" -#include "ipc_skeleton.h" -#include "iservice_registry.h" -#include "system_ability_definition.h" - -namespace OHOS { -namespace FileAccessFwk { -constexpr int LOAD_SA_TIMEOUT_MS = 5000; -const std::string UID_TAG = "uid:"; -sptr FileAccessServiceProxy::GetInstance() -{ - HILOG_INFO("Getinstance"); - std::unique_lock lock(proxyMutex_); - if (serviceProxy_ != nullptr) { - return serviceProxy_; - } - - auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - if (samgr == nullptr) { - HILOG_ERROR("Samgr is nullptr"); - return nullptr; - } - sptr loadCallback(new ServiceProxyLoadCallback()); - if (loadCallback == nullptr) { - HILOG_ERROR("loadCallback is nullptr"); - return nullptr; - } - int32_t ret = samgr->LoadSystemAbility(FILE_ACCESS_SERVICE_ID, loadCallback); - if (ret != ERR_OK) { - HILOG_ERROR("Failed to Load systemAbility, systemAbilityId:%{public}d, ret code:%{public}d", - FILE_ACCESS_SERVICE_ID, ret); - return nullptr; - } - - auto waitStatus = loadCallback->proxyConVar_.wait_for( - lock, std::chrono::milliseconds(LOAD_SA_TIMEOUT_MS), - [loadCallback]() { return loadCallback->isLoadSuccess_.load(); }); - if (!waitStatus) { - HILOG_ERROR("Load FileAccessService SA timeout"); - return nullptr; - } - return serviceProxy_; -} - -void FileAccessServiceProxy::ServiceProxyLoadCallback::OnLoadSystemAbilitySuccess( - int32_t systemAbilityId, - const sptr &remoteObject) -{ - HILOG_INFO("Load FileAccessService SA success,systemAbilityId:%{public}d, remoteObj result:%{private}s", - systemAbilityId, (remoteObject == nullptr ? "false" : "true")); - if (systemAbilityId != FILE_ACCESS_SERVICE_ID || remoteObject == nullptr) { - isLoadSuccess_.store(false); - proxyConVar_.notify_one(); - return; - } - std::unique_lock lock(proxyMutex_); - serviceProxy_ = iface_cast(remoteObject); - if (!serviceProxy_) { - HILOG_ERROR("Failed to get remote object"); - isLoadSuccess_.store(false); - proxyConVar_.notify_one(); - return; - } - auto remoteObj = serviceProxy_->AsObject(); - if (!remoteObj) { - HILOG_ERROR("Failed to get remote object"); - serviceProxy_ = nullptr; - isLoadSuccess_.store(false); - proxyConVar_.notify_one(); - return; - } - - auto callback = [](const wptr &obj) { - FileAccessServiceProxy::InvaildInstance(); - HILOG_ERROR("service died"); - }; - sptr deathRecipient = sptr(new ProxyDeathRecipient(callback)); - remoteObj->AddDeathRecipient(deathRecipient); - isLoadSuccess_.store(true); - proxyConVar_.notify_one(); -} - -void FileAccessServiceProxy::ServiceProxyLoadCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) -{ - HILOG_INFO("Load FileAccessService SA failed,systemAbilityId:%{public}d", systemAbilityId); - std::unique_lock lock(proxyMutex_); - serviceProxy_ = nullptr; - isLoadSuccess_.store(false); - proxyConVar_.notify_one(); -} - -void FileAccessServiceProxy::InvaildInstance() -{ - HILOG_INFO("invalid instance"); - std::unique_lock lock(proxyMutex_); - serviceProxy_ = nullptr; -} - -int32_t FileAccessServiceProxy::OnChange(Uri uri, NotifyType notifyType) -{ - UserAccessTracer trace; - trace.Start("OnChange"); - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessServiceProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&uri)) { - HILOG_ERROR("fail to WriteParcelable uri"); - return E_IPCS; - } - - if (!data.WriteInt32(static_cast(notifyType))) { - HILOG_ERROR("fail to WriteParcelable notifyType"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - auto remote = Remote(); - if (!remote) { - HILOG_ERROR("failed to get remote"); - return E_IPCS; - } - int err = remote->SendRequest(static_cast(FileAccessServiceInterfaceCode::CMD_ONCHANGE), data, reply, - option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret) || ret != ERR_OK) { - HILOG_ERROR("OnChange operation failed ret : %{public}d", ret); - return ret; - } - - return ERR_OK; -} - -int32_t FileAccessServiceProxy::RegisterNotify(Uri uri, bool notifyForDescendants, - const sptr &observer, const std::shared_ptr &info) -{ - UserAccessTracer trace; - trace.Start("RegisterNotify"); - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessServiceProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&uri)) { - HILOG_ERROR("fail to WriteParcelable uri"); - return E_IPCS; - } - - if (!(observer && data.WriteRemoteObject(observer->AsObject()))) { - HILOG_ERROR("fail to WriteRemoteObject observer"); - return E_IPCS; - } - - if (!data.WriteBool(notifyForDescendants)) { - HILOG_ERROR("fail to WriteBool notifyForDescendants"); - return E_IPCS; - } - - if (info == nullptr) { - HILOG_ERROR("ExtensionInfo is nullptr"); - return E_GETINFO; - } - - if (!info->WriteToParcel(data)) { - HILOG_ERROR("fail to WriteParcelable Info"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - auto remote = Remote(); - if (!remote) { - HILOG_ERROR("failed to get remote"); - return E_IPCS; - } - int err = remote->SendRequest(static_cast(FileAccessServiceInterfaceCode::CMD_REGISTER_NOTIFY), data, - reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret) || ret != ERR_OK) { - HILOG_ERROR("RegisterNotify operation failed ret : %{public}d", ret); - return ret; - } - - return ERR_OK; -} - -int32_t FileAccessServiceProxy::UnregisterNotifyInternal(MessageParcel &data) -{ - MessageParcel reply; - MessageOption option; - auto remote = Remote(); - if (!remote) { - HILOG_ERROR("failed to get remote"); - return E_IPCS; - } - - int err = remote->SendRequest(static_cast(FileAccessServiceInterfaceCode::CMD_UNREGISTER_NOTIFY), data, - reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret) || ret != ERR_OK) { - HILOG_ERROR("UnregisterNotify operation failed ret : %{public}d", ret); - return ret; - } - - return ERR_OK; -} - -int32_t FileAccessServiceProxy::UnregisterNotify(Uri uri, const sptr &observer, - const std::shared_ptr &info) -{ - UserAccessTracer trace; - trace.Start("UnregisterNotify"); - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessServiceProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&uri)) { - HILOG_ERROR("fail to WriteParcelable uri"); - return E_IPCS; - } - bool observerNotNull = true; - if (observer != nullptr) { - if (!data.WriteBool(observerNotNull)) { - HILOG_ERROR("fail to WriteBool observerNotNull"); - return E_IPCS; - } - if (!data.WriteRemoteObject(observer->AsObject())) { - HILOG_ERROR("fail to WriteRemoteObject observer"); - return E_IPCS; - } - } else { - observerNotNull = false; - if (!data.WriteBool(observerNotNull)) { - HILOG_ERROR("fail to WriteBool observerNotNull"); - return E_IPCS; - } - } - - if (info == nullptr) { - HILOG_ERROR("ExtensionInfo is nullptr"); - return E_GETINFO; - } - - if (!info->WriteToParcel(data)) { - HILOG_ERROR("fail to WriteParcelable Info"); - return E_IPCS; - } - - // Split the code into two functions for better readability - int32_t result = UnregisterNotifyInternal(data); - - return result; -} - -int32_t FileAccessServiceProxy::ConnectFileExtAbility(const AAFwk::Want &want, - const sptr& connection) -{ - UserAccessTracer trace; - trace.Start("ConnectFileExtAbility"); - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessServiceProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (!data.WriteParcelable(&want)) { - HILOG_ERROR("fail to WriteParcelable want"); - return E_IPCS; - } - - if (connection == nullptr || connection->AsObject() == nullptr) { - HILOG_ERROR("connection is nullptr"); - return E_GETINFO; - } - - if (!data.WriteRemoteObject(connection->AsObject())) { - HILOG_ERROR("fail to WriteParcelable connection"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - auto remote = Remote(); - if (!remote) { - HILOG_ERROR("failed to get remote"); - return E_IPCS; - } - int err = remote->SendRequest(static_cast( - FileAccessServiceInterfaceCode::CMD_CONNECT_FILE_EXT_ABILITY), data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret) || ret != ERR_OK) { - HILOG_ERROR("ConnectFileExtAbility operation failed ret : %{public}d", ret); - return ret; - } - - return ERR_OK; -} - -int32_t FileAccessServiceProxy::DisConnectFileExtAbility(const sptr& connection) -{ - UserAccessTracer trace; - trace.Start("DisConnectFileExtAbility"); - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessServiceProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (connection == nullptr || connection->AsObject() == nullptr) { - HILOG_ERROR("connection is nullptr"); - return E_GETINFO; - } - - if (!data.WriteRemoteObject(connection->AsObject())) { - HILOG_ERROR("fail to WriteParcelable connection"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - auto remote = Remote(); - if (!remote) { - HILOG_ERROR("failed to get remote"); - return E_IPCS; - } - int err = remote->SendRequest(static_cast( - FileAccessServiceInterfaceCode::CMD_DISCONNECT_FILE_EXT_ABILITY), data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret) || ret != ERR_OK) { - HILOG_ERROR("DisConnectFileExtAbility operation failed ret : %{public}d", ret); - return ret; - } - - return ERR_OK; -} - -int32_t FileAccessServiceProxy::GetExtensionProxy(const std::shared_ptr &info, - sptr &extensionProxy) -{ - UserAccessTracer trace; - trace.Start("GetExtensionProxy"); - MessageParcel data; - if (!data.WriteInterfaceToken(FileAccessServiceProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return E_IPCS; - } - - if (info == nullptr) { - HILOG_ERROR("ExtensionInfo is nullptr"); - return E_GETINFO; - } - - if (!info->WriteToParcel(data)) { - HILOG_ERROR("fail to WriteParcelable Info"); - return E_IPCS; - } - - MessageParcel reply; - MessageOption option; - auto remote = Remote(); - if (!remote) { - HILOG_ERROR("failed to get remote"); - return E_IPCS; - } - int err = remote->SendRequest(static_cast(FileAccessServiceInterfaceCode::CMD_GET_EXTENSION_PROXY), - data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return err; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret) || ret != ERR_OK) { - HILOG_ERROR("GetExtensionProxy operation failed ret : %{public}d", ret); - return ret; - } - - sptr obj = reply.ReadRemoteObject(); - if (obj == nullptr) { - HILOG_INFO("get remote obj fail."); - return E_IPCS; - } - - extensionProxy = iface_cast(obj); - if (extensionProxy == nullptr) { - HILOG_INFO("get observer fail"); - return E_IPCS; - } - - return ERR_OK; -} -} // namespace FileAccessFwk -} // namespace OHOS diff --git a/services/native/file_access_service/src/file_access_service_stub.cpp b/services/native/file_access_service/src/file_access_service_stub.cpp deleted file mode 100644 index 3e4a65eace039c8ec2e7767be514b65640bd2212..0000000000000000000000000000000000000000 --- a/services/native/file_access_service/src/file_access_service_stub.cpp +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (c) 2023-2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "file_access_service_stub.h" - -#include -#include - -#include "access_token.h" -#include "accesstoken_kit.h" -#include "file_access_framework_errno.h" -#include "file_access_service_ipc_interface_code.h" -#include "hilog_wrapper.h" -#include "hitrace_meter.h" -#include "ipc_object_stub.h" -#include "ipc_skeleton.h" -#include "user_access_tracer.h" -#include "message_parcel.h" -#include "uri.h" - -namespace OHOS { -namespace FileAccessFwk { -namespace { - const std::string FILE_ACCESS_PERMISSION = "ohos.permission.FILE_ACCESS_MANAGER"; -} -FileAccessServiceStub::FileAccessServiceStub() -{ - stubFuncMap_[static_cast(FileAccessServiceInterfaceCode::CMD_REGISTER_NOTIFY)] = - &FileAccessServiceStub::CmdRegisterNotify; - stubFuncMap_[static_cast(FileAccessServiceInterfaceCode::CMD_UNREGISTER_NOTIFY)] = - &FileAccessServiceStub::CmdUnregisterNotify; - stubFuncMap_[static_cast(FileAccessServiceInterfaceCode::CMD_ONCHANGE)] = - &FileAccessServiceStub::CmdOnChange; - stubFuncMap_[static_cast(FileAccessServiceInterfaceCode::CMD_CONNECT_FILE_EXT_ABILITY)] = - &FileAccessServiceStub::CmdConnectFileExtAbility; - stubFuncMap_[static_cast(FileAccessServiceInterfaceCode::CMD_DISCONNECT_FILE_EXT_ABILITY)] = - &FileAccessServiceStub::CmdDisConnectFileExtAbility; -} - -FileAccessServiceStub::~FileAccessServiceStub() -{ - stubFuncMap_.clear(); -} - -int32_t FileAccessServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, - MessageOption &option) -{ - UserAccessTracer trace; - trace.Start("OnRemoteRequest"); - std::u16string descriptor = FileAccessServiceStub::GetDescriptor(); - std::u16string remoteDescriptor = data.ReadInterfaceToken(); - if (descriptor != remoteDescriptor) { - return ERR_INVALID_STATE; - } - - if (!CheckCallingPermission(FILE_ACCESS_PERMISSION)) { - HILOG_ERROR("permission error"); - return E_PERMISSION; - } - - const auto &itFunc = stubFuncMap_.find(code); - if (itFunc != stubFuncMap_.end()) { - return (this->*(itFunc->second))(data, reply); - } - return IPCObjectStub::OnRemoteRequest(code, data, reply, option); -} - -ErrCode FileAccessServiceStub::CmdOnChange(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdOnChange"); - std::shared_ptr uri(data.ReadParcelable()); - if (uri == nullptr) { - HILOG_ERROR("UnregisterNotify uri is nullptr"); - return E_IPCS; - } - - NotifyType notifyType = static_cast(data.ReadInt32()); - int ret = OnChange(*uri, notifyType); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter OnChange fail to WriteInt32 ret"); - return E_IPCS; - } - - return ret; -} - -ErrCode FileAccessServiceStub::CmdRegisterNotify(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdRegisterNotify"); - std::shared_ptr uri(data.ReadParcelable()); - if (uri == nullptr) { - HILOG_ERROR("RegisterNotify uri is nullptr"); - return E_IPCS; - } - - sptr obj = data.ReadRemoteObject(); - if (obj == nullptr) { - HILOG_INFO("get remote obj fail."); - return E_IPCS; - } - - sptr observer = iface_cast(obj); - if (observer == nullptr) { - HILOG_INFO("get observer fail"); - return E_IPCS; - } - - bool notifyForDescendants = data.ReadBool(); - auto connectExtensionInfo = std::make_shared(); - if (!connectExtensionInfo->ReadFromParcel(data)) { - HILOG_ERROR("fail to read info"); - return E_IPCS; - } - int ret = RegisterNotify(*uri, notifyForDescendants, observer, connectExtensionInfo); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter RegisterNotify fail to WriteInt32 ret"); - return E_IPCS; - } - return ERR_OK; -} - -ErrCode FileAccessServiceStub::CmdUnregisterNotify(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdUnregisterNotify"); - std::shared_ptr uri(data.ReadParcelable()); - if (uri == nullptr) { - HILOG_ERROR("UnregisterNotify uri is nullptr"); - return E_IPCS; - } - - bool observerNotNull = data.ReadBool(); - int ret = E_IPCS; - if (observerNotNull) { - sptr obj = data.ReadRemoteObject(); - if (obj == nullptr) { - HILOG_ERROR("get remote obj fail."); - return E_IPCS; - } - - sptr observer = iface_cast(obj); - if (observer == nullptr) { - HILOG_ERROR("get observer fail"); - return E_IPCS; - } - - auto connectExtensionInfo = std::make_shared(); - if (!connectExtensionInfo->ReadFromParcel(data)) { - HILOG_ERROR("fail to read info"); - return E_IPCS; - } - ret = UnregisterNotify(*uri, observer, connectExtensionInfo); - } else { - auto connectExtensionInfo = std::make_shared(); - if (!connectExtensionInfo->ReadFromParcel(data)) { - HILOG_ERROR("fail to read info"); - return E_IPCS; - } - ret = CleanAllNotify(*uri, connectExtensionInfo); - } - - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter UnregisterNotify fail to WriteInt32 ret"); - return E_IPCS; - } - return ERR_OK; -} - -bool FileAccessServiceStub::CheckCallingPermission(const std::string &permission) -{ - UserAccessTracer trace; - trace.Start("CheckCallingPermission"); - Security::AccessToken::AccessTokenID tokenCaller = IPCSkeleton::GetCallingTokenID(); - int res = Security::AccessToken::AccessTokenKit::VerifyAccessToken(tokenCaller, permission); - if (res != Security::AccessToken::PermissionState::PERMISSION_GRANTED) { - HILOG_ERROR("FileAccessExtStub::CheckCallingPermission have no fileAccess permission"); - return false; - } - - return true; -} - -ErrCode FileAccessServiceStub::CmdConnectFileExtAbility(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdConnectFileExtAbility"); - std::shared_ptr wantPtr(data.ReadParcelable()); - if (wantPtr == nullptr) { - return E_IPCS; - } - AAFwk::Want want = AAFwk::Want(*wantPtr); - - sptr connection = iface_cast(data.ReadRemoteObject()); - if (!connection) { - HILOG_ERROR("fail to read connection"); - return E_IPCS; - } - - int ret = ConnectFileExtAbility(want, connection); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("fail to CmdConnectFileExtAbility"); - return E_IPCS; - } - - return ERR_OK; -} - - -ErrCode FileAccessServiceStub::CmdDisConnectFileExtAbility(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdDisConnectFileExtAbility"); - sptr connection = iface_cast(data.ReadRemoteObject()); - if (!connection) { - HILOG_ERROR("fail to read connection"); - return E_IPCS; - } - - int ret = DisConnectFileExtAbility(connection); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("fail to CmdDisConnectFileExtAbility"); - return E_IPCS; - } - - return ERR_OK; -} - -ErrCode FileAccessServiceStub::CmdGetExensionProxy(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("CmdGetExensionProxy"); - std::shared_ptr connectExtensionInfo = std::make_shared(); - if (!connectExtensionInfo->ReadFromParcel(data)) { - HILOG_ERROR("fail to read info"); - return E_IPCS; - } - - sptr extensionProxy; - int ret = GetExtensionProxy(connectExtensionInfo, extensionProxy); - if (!reply.WriteInt32(ret) || extensionProxy == nullptr) { - HILOG_ERROR("fail to GetExtensionProxy"); - return E_IPCS; - } - if (!reply.WriteRemoteObject(extensionProxy->AsObject())) { - HILOG_ERROR("fail to WriteRemoteObject observer"); - return E_IPCS; - } - return ERR_OK; -} -} // namespace FileAccessFwk -} // namespace OHOS diff --git a/services/native/file_access_service/src/observer_callback_proxy.cpp b/services/native/file_access_service/src/observer_callback_proxy.cpp deleted file mode 100644 index f536ee79a083645d38953afde57432f12ca004ea..0000000000000000000000000000000000000000 --- a/services/native/file_access_service/src/observer_callback_proxy.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "observer_callback_proxy.h" -#include "user_access_tracer.h" -#include "file_access_framework_errno.h" -#include "hilog_wrapper.h" -#include "hitrace_meter.h" -#include "ipc_types.h" -#include "message_option.h" -#include "message_parcel.h" - -namespace OHOS { -namespace FileAccessFwk { -void ObserverCallbackProxy::OnChange(NotifyMessage ¬ifyMessage) -{ - UserAccessTracer trace; - trace.Start("OnChange"); - MessageParcel data; - if (!data.WriteInterfaceToken(ObserverCallbackProxy::GetDescriptor())) { - HILOG_ERROR("WriteInterfaceToken failed"); - return; - } - - if (!data.WriteParcelable(¬ifyMessage)) { - HILOG_ERROR("fail to WriteParcelable notifyMessage"); - return; - } - - MessageParcel reply; - MessageOption option; - auto remote = Remote(); - if (!remote) { - HILOG_ERROR("failed to get remote"); - return; - } - int err = remote->SendRequest(CMD_ONCHANGE, data, reply, option); - if (err != ERR_OK) { - HILOG_ERROR("fail to SendRequest. err: %{public}d", err); - return; - } - - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return; - } - - if (ret != ERR_OK) { - HILOG_ERROR("OnChange operation failed ret : %{public}d", ret); - return; - } - return; -} -} // namespace FileAccessFwk -} // namespace OHOS diff --git a/services/native/file_access_service/src/observer_callback_stub.cpp b/services/native/file_access_service/src/observer_callback_stub.cpp deleted file mode 100644 index f39f4ae1cd446ff397a5985880c0ae29242ddaa3..0000000000000000000000000000000000000000 --- a/services/native/file_access_service/src/observer_callback_stub.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "observer_callback_stub.h" - -#include -#include -#include "user_access_tracer.h" -#include "accesstoken_kit.h" -#include "file_access_framework_errno.h" -#include "hilog_wrapper.h" -#include "hitrace_meter.h" -#include "ipc_object_stub.h" -#include "ipc_skeleton.h" -#include "ipc_types.h" -#include "message_parcel.h" - -namespace OHOS { -namespace FileAccessFwk { -ObserverCallbackStub::~ObserverCallbackStub() -{ - stubFuncMap_.clear(); -} - -void ObserverCallbackStub::InitStubFuncMap() -{ - if (stubFuncMap_.size() == 0) { - stubFuncMap_[CMD_ONCHANGE] = &ObserverCallbackStub::OnChangeStub; - } -} - -int32_t ObserverCallbackStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, - MessageOption& option) -{ - UserAccessTracer trace; - trace.Start("OnRemoteRequest"); - InitStubFuncMap(); - std::u16string descriptor = ObserverCallbackStub::GetDescriptor(); - std::u16string remoteDescriptor = data.ReadInterfaceToken(); - if (descriptor != remoteDescriptor) { - return ERR_INVALID_STATE; - } - - const auto &itFunc = stubFuncMap_.find(code); - if (itFunc != stubFuncMap_.end()) { - return (this->*(itFunc->second))(data, reply); - } - - return IPCObjectStub::OnRemoteRequest(code, data, reply, option); -} - -int32_t ObserverCallbackStub::OnChangeStub(MessageParcel &data, MessageParcel &reply) -{ - UserAccessTracer trace; - trace.Start("OnChangeStub"); - std::shared_ptr notifyMessage(data.ReadParcelable()); - if (notifyMessage == nullptr) { - HILOG_ERROR("OnChange uri is nullptr"); - return E_URIS; - } - - OnChange(*notifyMessage); - int ret = ERR_OK; - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter OnChangeStub fail to WriteInt32 ret"); - return E_IPCS; - } - return ERR_OK; -} -} -} \ No newline at end of file diff --git a/test/fuzztest/BUILD.gn b/test/fuzztest/BUILD.gn index d80793f3e879e9cc24a6ca0491ce9cea7eedb576..c43b0ec3483ea5787dd75ac2fe0de2dfaf6e2a92 100644 --- a/test/fuzztest/BUILD.gn +++ b/test/fuzztest/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -29,10 +29,6 @@ group("user_file_service_fuzz_test") { "externalfileaccessrename_fuzzer:ExternalFileAccessRenameFuzzTest", "externalfileaccessscanfile_fuzzer:ExternalFileAccessScanFileFuzzTest", "fileaccessextconnection_fuzzer:FileAccessExtConnectionFuzzTest", - "fileaccessextstub_fuzzer:FileAccessExtStubFuzzTest", - "fileaccessextstubbranch_fuzzer:FileAccessExtStubBranchFuzzTest", - "fileaccessserviceproxy_fuzzer:FileAccessServiceProxyFuzzTest", - "fileaccessservicestub_fuzzer:FileAccessServiceStubFuzzTest", "fileinfosharedmemory_fuzzer:FileInfoSharedMemoryFuzzTest", "useraccesscommonutils_fuzzer:UserAccessCommonUtilsFuzzTest", ] diff --git a/test/fuzztest/externalfileaccess_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccess_fuzzer/BUILD.gn index 13daff585b2eb98a64bc4d92b1c941bd4a78441e..66c93d97b84037e9d14934899d524286aa6e0b90 100644 --- a/test/fuzztest/externalfileaccess_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccess_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2024 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -34,7 +34,9 @@ ohos_fuzztest("ExternalFileAccessFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", + "${user_file_service_path}/services:file_access_service_base_include", ] external_deps = [ diff --git a/test/fuzztest/externalfileaccessaccess_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessaccess_fuzzer/BUILD.gn index 066a4099b15fe1c6dd89d575bb57f8b296941576..8082e43486039c6466f53390a470d27a6b42405a 100644 --- a/test/fuzztest/externalfileaccessaccess_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessaccess_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -37,6 +37,7 @@ ohos_fuzztest("ExternalFileAccessAccessFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp b/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp index 8ad9d3ea47d74a83c9380ff8385d7faaa33b695f..987c5200bd65e1ce15c3bf22ad3e84e5e3183b9e 100644 --- a/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessAccessFuzzTest(const uint8_t *data, size_t size) // CMD_ACCESS uint32_t code = 14; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccesscreatefile_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccesscreatefile_fuzzer/BUILD.gn index 93c69ae5b7b7c8836a567e3db18d921d0c0ee013..62e9f6087e0b185344aa9c67280b7709df5e3b46 100644 --- a/test/fuzztest/externalfileaccesscreatefile_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccesscreatefile_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -36,6 +36,7 @@ ohos_fuzztest("ExternalFileAccessCreateFileFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp b/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp index a030472fb78b7a532a3ccee596f0869e05f660f2..9fd9100a7f72ff5fda095c9e4d060a8ff1090514 100644 --- a/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessCreateFileFuzzTest(const uint8_t *data, size_t size) // CMD_CREATEILE uint32_t code = 2; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccessdelete_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessdelete_fuzzer/BUILD.gn index a3d1a71b8cc0c39a9b5461a18a312acd7bfa0c1f..df88e34d53259d5585e45dd07f6d617b5f64f13c 100644 --- a/test/fuzztest/externalfileaccessdelete_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessdelete_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -37,6 +37,7 @@ ohos_fuzztest("ExternalFileAccessDeleteFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp b/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp index 4cd6f7f6cf6b26e9676a706b5a2e1e718ef6333b..104f85d1ff52e223ef8169193cd7a651d71b5929 100644 --- a/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessDeleteFuzzTest(const uint8_t *data, size_t size) // CMD_DELETE uint32_t code = 4; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/BUILD.gn index 9b236ea71424b0d4d26179f83da78ec0ade2538a..b523021debfffb2925c137d0132d734c815dbc52 100644 --- a/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -36,6 +36,7 @@ ohos_fuzztest("ExternalFileAccessGetFileInfoFromRelativePathFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp b/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp index 59180c7258e64cd11f2234d7da2cfc103c589b69..eaf806c1e6fd4e336e62d436c7ea487b6193f72c 100644 --- a/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessGetFileInfoFromRelativePathFuzzTest(const uint8_t *data, // CMD_GET_FILEINFO_FROM_RELATIVE_PATH uint32_t code = 17; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/BUILD.gn index 68cc3cc3b1186ca9f202f856ce009c6dee228f18..3c1f23344b3c7d049670921530a6f47165943825 100644 --- a/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -36,6 +36,7 @@ ohos_fuzztest("ExternalFileAccessGetFileInfoFromUriFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp b/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp index 4a5142d30b18361afbe0da6ac966a32b83cac720..e9b05ce197e4a1f22a42a94476275e3eb4975333 100644 --- a/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessGetFileInfoFromUriFuzzTest(const uint8_t *data, size_t si // CMD_GET_FILEINFO_FROM_URI uint32_t code = 16; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccessgetroots_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessgetroots_fuzzer/BUILD.gn index 6ad52a7bde3d01bfbc6046209e001563a366d320..57cdc829f4acbcbcac726cf3e39e346bb886529e 100644 --- a/test/fuzztest/externalfileaccessgetroots_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessgetroots_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -36,6 +36,7 @@ ohos_fuzztest("ExternalFileAccessGetRootsFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp b/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp index 028d42ea1de52bdc828bf68ca9f0a3e875fe6495..582f383010e16b4dfded73dbb6e0c3b87113fb59 100644 --- a/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessGetRootsFuzzTest(const uint8_t *data, size_t size) // CMD_GET_ROOTS uint32_t code = 13; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccesslistfile_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccesslistfile_fuzzer/BUILD.gn index 4faf593473923c8b9437dbc428328983d77d4fe3..e2e39d1c308170fc67e1055a5ce5a8db0ed141c6 100644 --- a/test/fuzztest/externalfileaccesslistfile_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccesslistfile_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -36,6 +36,7 @@ ohos_fuzztest("ExternalFileAccessListFileFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp b/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp index 3d60598a98c171c84af7feb031cb748d2b0fc135..d109f35bef92488fca21f9aaf20cc00cab15407e 100644 --- a/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessListFileFuzzTest(const uint8_t *data, size_t size) // CMD_LISTFILE uint32_t code = 8; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccessmkdir_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessmkdir_fuzzer/BUILD.gn index 797eb979f3b2f5161fb0a9d4dcc0e1aa8f63e53c..bc85b62a3382eec2155686d61ece9bdf3598ad32 100644 --- a/test/fuzztest/externalfileaccessmkdir_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessmkdir_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -37,6 +37,7 @@ ohos_fuzztest("ExternalFileAccessMkdirFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp b/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp index ce001e69ba1d188cd75684890e2e6cdd2ffe476a..fa4db3443bbfe96751926593bb379b5b2bcb3f9e 100644 --- a/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessMkdirFuzzTest(const uint8_t *data, size_t size) // CMD_MKDIR uint32_t code = 3; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccessmove_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessmove_fuzzer/BUILD.gn index d0901dfab98a67abec11ae874fa13a75eabbb24a..f98b0df0c132a265fe938f3a40a96bd5405366c9 100644 --- a/test/fuzztest/externalfileaccessmove_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessmove_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -37,6 +37,7 @@ ohos_fuzztest("ExternalFileAccessMoveFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp b/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp index e52e990e1b3864dd1cd05b1c6630862ac5429056..5aaf05aa0710124b405fc90014ff57e679be9eda 100644 --- a/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessMoveFuzzTest(const uint8_t *data, size_t size) // CMD_MOVE uint32_t code = 5; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccessopenfile_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessopenfile_fuzzer/BUILD.gn index f5df9995250224334304d306f328abe1a5fb4951..248f4d3879f8f497a51ac37027c058c369fd728d 100644 --- a/test/fuzztest/externalfileaccessopenfile_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessopenfile_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -36,6 +36,7 @@ ohos_fuzztest("ExternalFileAccessOpenFileFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp b/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp index 7065efb57702f39b6de8dd8a8fc8d8525f3cbe3b..8f477cb52e7a01574df113bc9cdaf2a568855d77 100644 --- a/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessOpenFileFuzzTest(const uint8_t *data, size_t size) // CMD_OPENFILE uint32_t code = 1; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccessrename_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessrename_fuzzer/BUILD.gn index c0a0c1afea579bc70a95c459b6e9c21137b9ca20..e2208bd05fd132ca580a09b5bacb1e7d8bc73ac5 100644 --- a/test/fuzztest/externalfileaccessrename_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessrename_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -37,6 +37,7 @@ ohos_fuzztest("ExternalFileAccessRenameFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp b/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp index 5b7489caa02a08f3f3e89e0e5e93239586ffdca9..e9a1126d0e6d88365651c9d8d324a3c24519c6c5 100644 --- a/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessRenameFuzzTest(const uint8_t *data, size_t size) // CMD_RENAME uint32_t code = 7; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/externalfileaccessscanfile_fuzzer/BUILD.gn b/test/fuzztest/externalfileaccessscanfile_fuzzer/BUILD.gn index 68f8eb7447acc03833ec2f40cc584bb5cddcc858..e58226a6a0d0e6b8136c3ae6e45138aa8ee4abb4 100644 --- a/test/fuzztest/externalfileaccessscanfile_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccessscanfile_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -36,6 +36,7 @@ ohos_fuzztest("ExternalFileAccessScanFileFuzzTest") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", ] diff --git a/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp b/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp index b99545685f79eeb1d6eb88584a99cce3d7cf47a6..fdc5e56d309c31cbe83fe13a56d19c05622a72cd 100644 --- a/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,7 +22,7 @@ #include "extension_base.h" #include "extension_context.h" #include "message_parcel.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_ext_ability.h" #include "js_file_access_ext_ability.h" @@ -70,7 +70,7 @@ bool ExternalFileAccessScanFileFuzzTest(const uint8_t *data, size_t size) // CMD_SCANFILE uint32_t code = 9; MessageParcel datas; - datas.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); + datas.WriteInterfaceToken(FileAccessExtBaseStub::GetDescriptor()); datas.WriteBuffer(reinterpret_cast(data), size); datas.RewindRead(0); MessageParcel reply; diff --git a/test/fuzztest/fileaccessextconnection_fuzzer/BUILD.gn b/test/fuzztest/fileaccessextconnection_fuzzer/BUILD.gn index d5d1635e5b8adf36af9e70005e1a6c01b22d549f..cde30d089cc58132e0cba002c45259ecd2e6b68b 100644 --- a/test/fuzztest/fileaccessextconnection_fuzzer/BUILD.gn +++ b/test/fuzztest/fileaccessextconnection_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -36,8 +36,10 @@ ohos_fuzztest("FileAccessExtConnectionFuzzTest") { sources = [ "${user_file_service_path}/test/fuzztest/fileaccessextconnection_fuzzer/fileaccessextconnection_fuzzer.cpp" ] deps = [ + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", "${user_file_service_path}/services:file_access_service", + "${user_file_service_path}/services:file_access_service_base_include", ] external_deps = [ diff --git a/test/fuzztest/fileaccessextstub_fuzzer/BUILD.gn b/test/fuzztest/fileaccessextstub_fuzzer/BUILD.gn deleted file mode 100644 index 3a5fde075c6ad6a3cd256234950bbc89ec5d5a23..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessextstub_fuzzer/BUILD.gn +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -#####################hydra-fuzz################### -import("//build/config/features.gni") -import("//build/test.gni") -import("//foundation/filemanagement/user_file_service/filemanagement_aafwk.gni") -ohos_fuzztest("FileAccessExtStubFuzzTest") { - module_out_path = "user_file_service/user_file_service" - fuzz_config_file = - "${user_file_service_path}/test/fuzztest/fileaccessextstub_fuzzer" - include_dirs = [ - "${ability_runtime_napi_path}/inner/napi_common", - "${ability_runtime_path}/interfaces/kits/native/ability/ability_runtime", - "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime", - "${user_file_service_path}/interfaces/inner_api/file_access/include", - "${user_file_service_path}/interfaces/kits/js/src/common", - "${user_file_service_path}/utils", - ] - cflags = [ - "-g", - "-O0", - "-Wno-unused-variable", - "-fno-omit-frame-pointer", - ] - sources = [ - "${user_file_service_path}/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp", - "${user_file_service_path}/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp", - "${user_file_service_path}/test/fuzztest/fileaccessextstub_fuzzer/fileaccessextstub_fuzzer.cpp", - ] - - external_deps = [ - "ability_base:want", - "ability_base:zuri", - "ability_runtime:app_context", - "ability_runtime:extensionkit_native", - "ability_runtime:napi_common", - "ability_runtime:runtime", - "access_token:libaccesstoken_sdk", - "c_utils:utils", - "hilog:libhilog", - "hitrace:hitrace_meter", - "ipc:ipc_core", - "napi:ace_napi", - ] - - defines = [ "private=public" ] -} diff --git a/test/fuzztest/fileaccessextstub_fuzzer/fileaccessextabilitymock.h b/test/fuzztest/fileaccessextstub_fuzzer/fileaccessextabilitymock.h deleted file mode 100644 index e42a5c310fd0d75af015ee56e30fda1a432dd39f..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessextstub_fuzzer/fileaccessextabilitymock.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FILE_ACCESS_EXT_ABILITY_MOCK_H -#define FILE_ACCESS_EXT_ABILITY_MOCK_H - -#include "file_access_ext_ability.h" - -namespace OHOS { -namespace FileAccessFwk { -using namespace AbilityRuntime; - -class FileAccessExtAbilityMock : public FileAccessExtAbility { -public: - void Init(const std::shared_ptr&, - const std::shared_ptr&, std::shared_ptr&, - const sptr&) override {} - void OnStart(const AAFwk::Want&) override {} - sptr OnConnect(const AAFwk::Want&) override { return nullptr; } - int OpenFile(const Uri&, const int, int&) override { return 0; } - int CreateFile(const Uri&, const std::string&, Uri&) override { return 0; } - int Mkdir(const Uri&, const std::string&, Uri&) override { return 0; } - int Delete(const Uri&) override { return 0; } - int Move(const Uri&, const Uri&, Uri&) override { return 0; } - int Copy(const Uri&, const Uri&, std::vector&, bool force = false) override { return 0; } - int CopyFile(const Uri&, const Uri&, const std::string&, Uri&) override { return 0; } - int Rename(const Uri&, const std::string&, Uri&) override { return 0; } - int ListFile(const FileInfo&, const int64_t, const int64_t, const FileFilter&, std::vector&) override - { return 0; } - int ScanFile(const FileInfo&, const int64_t, const int64_t, const FileFilter&, std::vector&) override - { return 0; } - int GetFileInfoFromUri(const Uri&, FileInfo&) override { return 0; } - int GetFileInfoFromRelativePath(const std::string&, FileInfo&) override { return 0; } - int GetRoots(std::vector&) override { return 0; } - int Access(const Uri&, bool&) override { return 0; } - int Query(const Uri&, std::vector&, std::vector&) override { return 0; } - int StartWatcher(const Uri&) override { return 0; } - int StopWatcher(const Uri&) override { return 0; } - int MoveItem(const Uri&, const Uri&, std::vector&, bool force = false) override { return 0; } - int MoveFile(const Uri&, const Uri&, std::string&, Uri&) override { return 0; } - int GetFileInfoNum(const std::string&, const FileFilter&, bool, uint32_t&) override { return 0; } -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // FILE_ACCESS_EXT_ABILITY_MOCK_H \ No newline at end of file diff --git a/test/fuzztest/fileaccessextstub_fuzzer/fileaccessextstub_fuzzer.cpp b/test/fuzztest/fileaccessextstub_fuzzer/fileaccessextstub_fuzzer.cpp deleted file mode 100644 index 8d9ad7c9a075d5243eadf3a6cf3b1f25a1ed87f4..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessextstub_fuzzer/fileaccessextstub_fuzzer.cpp +++ /dev/null @@ -1,400 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "fileaccessextstub_fuzzer.h" - -#include -#include - -#include "accesstoken_kit.h" -#include "extension_base.h" -#include "extension_context.h" -#include "file_access_ext_stub.h" -#include "file_access_ext_stub_impl.h" -#include "fileaccessextabilitymock.h" -#include "message_parcel.h" - -namespace OHOS { -using namespace std; -using namespace FileAccessFwk; -using namespace AbilityRuntime; - -template -T TypeCast(const uint8_t *data, int *pos = nullptr) -{ - if (pos) { - *pos += sizeof(T); - } - return *(reinterpret_cast(data)); -} - -bool OnRemoteRequestFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size < sizeof(uint32_t)) { - return true; - } - - uint32_t code = TypeCast(data); - MessageParcel msg; - msg.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); - MessageParcel reply; - MessageOption option; - - fileAccessExtStub->OnRemoteRequest(code, msg, reply, option); - return true; -} - -bool CmdOpenFileFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size < sizeof(int32_t)) { - return true; - } - - MessageParcel msg; - MessageParcel reply; - msg.WriteString(string(reinterpret_cast(data), size - sizeof(int32_t))); - msg.WriteInt32(TypeCast(data)); - - fileAccessExtStub->CmdOpenFile(msg, reply); - return true; -} - -bool CmdCreateFileFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size >> 1; - msg.WriteString(string(reinterpret_cast(data), pos)); - msg.WriteString(string(reinterpret_cast(data + pos), size - pos)); - - fileAccessExtStub->CmdCreateFile(msg, reply); - return true; -} - -bool CmdMkdirFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size >> 1; - msg.WriteString(string(reinterpret_cast(data), pos)); - msg.WriteString(string(reinterpret_cast(data + pos), size - pos)); - - fileAccessExtStub->CmdMkdir(msg, reply); - return true; -} - -bool CmdDeleteFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - msg.WriteString(string(reinterpret_cast(data), size)); - - fileAccessExtStub->CmdDelete(msg, reply); - return true; -} - -bool CmdMoveFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size >> 1; - msg.WriteString(string(reinterpret_cast(data), pos)); - msg.WriteString(string(reinterpret_cast(data + pos), size - pos)); - - fileAccessExtStub->CmdMove(msg, reply); - return true; -} - -bool CmdCopyFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size == 0) { - return true; - } - - MessageParcel msg; - MessageParcel reply; - int pos = (size - 1) >> 1; - msg.WriteString(string(reinterpret_cast(data + 1), pos)); - msg.WriteString(string(reinterpret_cast(data + pos + 1), size - pos - 1)); - msg.WriteBool(TypeCast(data)); - - fileAccessExtStub->CmdCopy(msg, reply); - return true; -} - -bool CmdCopyFileFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size / 3; - msg.WriteString(string(reinterpret_cast(data), pos)); - msg.WriteString(string(reinterpret_cast(data + pos), pos)); - msg.WriteString(string(reinterpret_cast(data + pos + pos), size - pos - pos)); - - fileAccessExtStub->CmdCopyFile(msg, reply); - return true; -} - -bool CmdRenameFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size >> 1; - msg.WriteString(string(reinterpret_cast(data), pos)); - msg.WriteString(string(reinterpret_cast(data + pos), size - pos)); - - fileAccessExtStub->CmdRename(msg, reply); - return true; -} - -bool CmdListFileFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - size_t minSize = sizeof(int64_t) + sizeof(int32_t) + sizeof(int64_t) + sizeof(int64_t) + sizeof(int64_t) + - sizeof(double) + sizeof(bool) + sizeof(bool); - if (data == nullptr || size < minSize) { - return true; - } - - int pos = 0; - int64_t offset = TypeCast(data, &pos); - FileInfo fileInfo; - fileInfo.mode = TypeCast(data + pos, &pos); - fileInfo.size = TypeCast(data + pos, &pos); - fileInfo.mtime = TypeCast(data + pos, &pos); - - int64_t fileSizeOver = TypeCast(data + pos, &pos); - double lastModifiedAfter = TypeCast(data + pos, &pos); - bool excludeMedia = TypeCast(data + pos, &pos); - bool hasFilter = TypeCast(data + pos, &pos); - - int len = (size - pos) / 6; - fileInfo.uri = string(reinterpret_cast(data + pos), len); - pos += len; - fileInfo.relativePath = string(reinterpret_cast(data + pos), len); - pos += len; - fileInfo.fileName = string(reinterpret_cast(data + pos), len); - pos += len; - std::vector suffix; - suffix.push_back(string(reinterpret_cast(data + pos), len)); - pos += len; - std::vector displayName; - displayName.push_back(string(reinterpret_cast(data + pos), len)); - pos += len; - std::vector mimeType; - mimeType.push_back(string(reinterpret_cast(data + pos), len)); - pos += len; - FileFilter fileFilter(suffix, displayName, mimeType, fileSizeOver, lastModifiedAfter, excludeMedia, hasFilter); - - SharedMemoryInfo sharedMemoryInfo; - MessageParcel msg; - MessageParcel reply; - msg.WriteParcelable(&fileInfo); - msg.WriteInt64(offset); - msg.WriteParcelable(&fileFilter); - msg.WriteParcelable(&sharedMemoryInfo); - - fileAccessExtStub->CmdListFile(msg, reply); - return true; -} - -bool CmdScanFileFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - size_t minSize = sizeof(int64_t) + sizeof(int64_t) + sizeof(int32_t) + sizeof(int64_t) + sizeof(int64_t) + - sizeof(int64_t) + sizeof(double) + sizeof(bool) + sizeof(bool); - if (data == nullptr || size < minSize) { - return true; - } - - int pos = 0; - int64_t offset = TypeCast(data, &pos); - int64_t maxCount = TypeCast(data, &pos); - FileInfo fileInfo; - fileInfo.mode = TypeCast(data + pos, &pos); - fileInfo.size = TypeCast(data + pos, &pos); - fileInfo.mtime = TypeCast(data + pos, &pos); - - int64_t fileSizeOver = TypeCast(data + pos, &pos); - double lastModifiedAfter = TypeCast(data + pos, &pos); - bool excludeMedia = TypeCast(data + pos, &pos); - bool hasFilter = TypeCast(data + pos, &pos); - - int len = (size - pos) / 6; - fileInfo.uri = string(reinterpret_cast(data + pos), len); - pos += len; - fileInfo.relativePath = string(reinterpret_cast(data + pos), len); - pos += len; - fileInfo.fileName = string(reinterpret_cast(data + pos), len); - pos += len; - std::vector suffix; - suffix.push_back(string(reinterpret_cast(data + pos), len)); - pos += len; - std::vector displayName; - displayName.push_back(string(reinterpret_cast(data + pos), len)); - pos += len; - std::vector mimeType; - mimeType.push_back(string(reinterpret_cast(data + pos), len)); - pos += len; - FileFilter fileFilter(suffix, displayName, mimeType, fileSizeOver, lastModifiedAfter, excludeMedia, hasFilter); - - SharedMemoryInfo sharedMemoryInfo; - MessageParcel msg; - MessageParcel reply; - msg.WriteParcelable(&fileInfo); - msg.WriteInt64(offset); - msg.WriteInt64(maxCount); - msg.WriteParcelable(&fileFilter); - - fileAccessExtStub->CmdScanFile(msg, reply); - return true; -} - -bool CmdGetRootsFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - - msg.WriteBuffer(data, size); - fileAccessExtStub->CmdGetRoots(msg, reply); - return true; -} - -bool CmdQueryFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size < sizeof(int64_t)) { - return true; - } - - MessageParcel msg; - MessageParcel reply; - msg.WriteString(string(reinterpret_cast(data + sizeof(int64_t)), size - sizeof(int64_t))); - msg.WriteInt64(TypeCast(data)); - - fileAccessExtStub->CmdQuery(msg, reply); - return true; -} - -bool CmdGetFileInfoFromUriFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - msg.WriteString(string(reinterpret_cast(data), size)); - - fileAccessExtStub->CmdGetFileInfoFromUri(msg, reply); - return true; -} - -bool CmdGetFileInfoFromRelativePathFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, - size_t size) -{ - MessageParcel msg; - MessageParcel reply; - msg.WriteString(string(reinterpret_cast(data), size)); - - fileAccessExtStub->CmdGetFileInfoFromRelativePath(msg, reply); - return true; -} - -bool CmdAccessFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - msg.WriteString(string(reinterpret_cast(data), size)); - - fileAccessExtStub->CmdAccess(msg, reply); - return true; -} - -bool CmdStartWatcherFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - msg.WriteString(string(reinterpret_cast(data), size)); - - fileAccessExtStub->CmdStartWatcher(msg, reply); - return true; -} - -bool CmdStopWatcherFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - msg.WriteString(string(reinterpret_cast(data), size)); - - fileAccessExtStub->CmdStopWatcher(msg, reply); - return true; -} - -bool CmdMoveItemFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size == 0) { - return true; - } - - MessageParcel msg; - MessageParcel reply; - int pos = (size - 1) >> 1; - msg.WriteString(string(reinterpret_cast(data + 1), pos)); - msg.WriteString(string(reinterpret_cast(data + pos + 1), size - pos - 1)); - msg.WriteBool(TypeCast(data)); - - fileAccessExtStub->CmdMoveItem(msg, reply); - return true; -} - -bool CmdMoveFileFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size / 3; - msg.WriteString(string(reinterpret_cast(data), pos)); - msg.WriteString(string(reinterpret_cast(data + pos), pos)); - msg.WriteString(string(reinterpret_cast(data + pos + pos), size - pos - pos)); - - fileAccessExtStub->CmdMoveFile(msg, reply); - return true; -} - -} // namespace OHOS - -/* Fuzzer entry point */ -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) -{ - auto ability = std::make_shared(); - auto stub = std::make_shared(ability, nullptr); - if (stub == nullptr) { - return 0; - } - - OHOS::OnRemoteRequestFuzzTest(stub, data, size); - OHOS::CmdOpenFileFuzzTest(stub, data, size); - OHOS::CmdCreateFileFuzzTest(stub, data, size); - OHOS::CmdMkdirFuzzTest(stub, data, size); - OHOS::CmdDeleteFuzzTest(stub, data, size); - OHOS::CmdMoveFuzzTest(stub, data, size); - OHOS::CmdCopyFuzzTest(stub, data, size); - OHOS::CmdCopyFileFuzzTest(stub, data, size); - OHOS::CmdRenameFuzzTest(stub, data, size); - OHOS::CmdListFileFuzzTest(stub, data, size); - OHOS::CmdScanFileFuzzTest(stub, data, size); - OHOS::CmdGetRootsFuzzTest(stub, data, size); - OHOS::CmdQueryFuzzTest(stub, data, size); - OHOS::CmdGetFileInfoFromUriFuzzTest(stub, data, size); - OHOS::CmdGetFileInfoFromRelativePathFuzzTest(stub, data, size); - OHOS::CmdAccessFuzzTest(stub, data, size); - OHOS::CmdStartWatcherFuzzTest(stub, data, size); - OHOS::CmdStopWatcherFuzzTest(stub, data, size); - OHOS::CmdMoveItemFuzzTest(stub, data, size); - OHOS::CmdMoveFileFuzzTest(stub, data, size); - return 0; -} diff --git a/test/fuzztest/fileaccessextstub_fuzzer/project.xml b/test/fuzztest/fileaccessextstub_fuzzer/project.xml deleted file mode 100644 index d6679ccc2ec868b072c934ed45102d545f31f91d..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessextstub_fuzzer/project.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - 1000 - - 300 - - 4096 - - diff --git a/test/fuzztest/fileaccessextstubbranch_fuzzer/BUILD.gn b/test/fuzztest/fileaccessextstubbranch_fuzzer/BUILD.gn deleted file mode 100644 index f215a424d3f49f75a6d24ae668939ac3a11e91e1..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessextstubbranch_fuzzer/BUILD.gn +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -#####################hydra-fuzz################### -import("//build/config/features.gni") -import("//build/test.gni") -import("//foundation/filemanagement/user_file_service/filemanagement_aafwk.gni") -ohos_fuzztest("FileAccessExtStubBranchFuzzTest") { - module_out_path = "user_file_service/user_file_service" - fuzz_config_file = - "${user_file_service_path}/test/fuzztest/fileaccessextstubbranch_fuzzer" - include_dirs = [ - "${ability_runtime_napi_path}/inner/napi_common", - "${ability_runtime_path}/interfaces/kits/native/ability/ability_runtime", - "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime", - "${user_file_service_path}/interfaces/inner_api/file_access/include", - "${user_file_service_path}/interfaces/kits/js/src/common", - "${user_file_service_path}/utils", - ] - cflags = [ - "-g", - "-O0", - "-Wno-unused-variable", - "-fno-omit-frame-pointer", - ] - sources = [ - "${user_file_service_path}/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp", - "${user_file_service_path}/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp", - "${user_file_service_path}/test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.cpp", - ] - - external_deps = [ - "ability_base:want", - "ability_base:zuri", - "ability_runtime:app_context", - "ability_runtime:extensionkit_native", - "ability_runtime:napi_common", - "ability_runtime:runtime", - "access_token:libaccesstoken_sdk", - "c_utils:utils", - "hilog:libhilog", - "hitrace:hitrace_meter", - "ipc:ipc_core", - "napi:ace_napi", - ] - - defines = [ "private=public" ] -} diff --git a/test/fuzztest/fileaccessextstubbranch_fuzzer/corpus/init b/test/fuzztest/fileaccessextstubbranch_fuzzer/corpus/init deleted file mode 100644 index 6198079a28e860189d4294f6598f8ac6804c0dff..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessextstubbranch_fuzzer/corpus/init +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -FUZZ \ No newline at end of file diff --git a/test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextabilitymock.h b/test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextabilitymock.h deleted file mode 100644 index e42a5c310fd0d75af015ee56e30fda1a432dd39f..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextabilitymock.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FILE_ACCESS_EXT_ABILITY_MOCK_H -#define FILE_ACCESS_EXT_ABILITY_MOCK_H - -#include "file_access_ext_ability.h" - -namespace OHOS { -namespace FileAccessFwk { -using namespace AbilityRuntime; - -class FileAccessExtAbilityMock : public FileAccessExtAbility { -public: - void Init(const std::shared_ptr&, - const std::shared_ptr&, std::shared_ptr&, - const sptr&) override {} - void OnStart(const AAFwk::Want&) override {} - sptr OnConnect(const AAFwk::Want&) override { return nullptr; } - int OpenFile(const Uri&, const int, int&) override { return 0; } - int CreateFile(const Uri&, const std::string&, Uri&) override { return 0; } - int Mkdir(const Uri&, const std::string&, Uri&) override { return 0; } - int Delete(const Uri&) override { return 0; } - int Move(const Uri&, const Uri&, Uri&) override { return 0; } - int Copy(const Uri&, const Uri&, std::vector&, bool force = false) override { return 0; } - int CopyFile(const Uri&, const Uri&, const std::string&, Uri&) override { return 0; } - int Rename(const Uri&, const std::string&, Uri&) override { return 0; } - int ListFile(const FileInfo&, const int64_t, const int64_t, const FileFilter&, std::vector&) override - { return 0; } - int ScanFile(const FileInfo&, const int64_t, const int64_t, const FileFilter&, std::vector&) override - { return 0; } - int GetFileInfoFromUri(const Uri&, FileInfo&) override { return 0; } - int GetFileInfoFromRelativePath(const std::string&, FileInfo&) override { return 0; } - int GetRoots(std::vector&) override { return 0; } - int Access(const Uri&, bool&) override { return 0; } - int Query(const Uri&, std::vector&, std::vector&) override { return 0; } - int StartWatcher(const Uri&) override { return 0; } - int StopWatcher(const Uri&) override { return 0; } - int MoveItem(const Uri&, const Uri&, std::vector&, bool force = false) override { return 0; } - int MoveFile(const Uri&, const Uri&, std::string&, Uri&) override { return 0; } - int GetFileInfoNum(const std::string&, const FileFilter&, bool, uint32_t&) override { return 0; } -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // FILE_ACCESS_EXT_ABILITY_MOCK_H \ No newline at end of file diff --git a/test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.cpp b/test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.cpp deleted file mode 100644 index 2f93d0037bf194020f0dd0f4250c2d30f033cbd6..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.cpp +++ /dev/null @@ -1,923 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "fileaccessextstubbranch_fuzzer.h" - -#include -#include -#include - -#include "accesstoken_kit.h" -#include "extension_base.h" -#include "extension_context.h" -#include "file_access_ext_stub.h" -#include "file_access_ext_stub_impl.h" -#include "fileaccessextabilitymock.h" -#include "iremote_broker.h" -#include "message_parcel.h" - -namespace OHOS { -using namespace std; -using namespace FileAccessFwk; -using namespace AbilityRuntime; - -using FAFVariant = std::variant>; - -queue que; -FAFVariant arg; - -bool GetResult() -{ - bool ret = true; - if (!que.empty()) { - ret = que.front(); - que.pop(); - } - return ret; -} - -Parcelable::Parcelable() : Parcelable(false) -{} - -Parcelable::Parcelable(bool asRemote) -{ - asRemote_ = asRemote; - behavior_ = 0; -} - -template -bool Parcel::Write(T value) -{ - size_t desireCapacity = sizeof(T); - - if (EnsureWritableCapacity(desireCapacity)) { - *reinterpret_cast(data_ + writeCursor_) = value; - writeCursor_ += desireCapacity; - dataSize_ += desireCapacity; - return true; - } - - return false; -} - -bool Parcel::WriteParcelable(const Parcelable *object) -{ - if (object == nullptr) { - return WriteInt32(0); - } - - if (!object->asRemote_) { - bool flag = WriteInt32(1); - object->Marshalling(*this); - return flag; - } - - bool flag = WriteInt32(1); - WriteRemoteObject(const_cast(object)); - return flag; -} - -bool Parcel::WriteInt32(int32_t value) -{ - Write(value); - return GetResult(); -} - -bool Parcel::WriteUint32(uint32_t value) -{ - Write(value); - return GetResult(); -} - -int32_t Parcel::ReadInt32() -{ - return GetResult(); -} - -bool Parcel::ReadInt32(int32_t &value) -{ - value = std::get(arg); - return GetResult(); -} - -bool Parcel::ReadBool() -{ - return GetResult(); -} - -bool Parcel::ReadBool(bool &value) -{ - if (std::get_if(&arg)) { - value = std::get(arg); - } - return GetResult(); -} - -bool Parcel::WriteBool(bool value) -{ - return GetResult(); -} - -bool Parcel::WriteString(const std::string &value) -{ - return GetResult(); -} - -bool Parcel::ReadString(std::string &value) -{ - std::vector vstr = std::get>(arg); - if (!vstr.empty()) { - value = vstr[0]; - vstr.erase(vstr.begin()); - } - return GetResult(); -} - -bool Parcel::ReadStringVector(std::vector *value) -{ - *value = std::get>(arg); - return GetResult(); -} - -bool MessageParcel::WriteFileDescriptor(int fd) -{ - return GetResult(); -} - -bool Parcel::ReadUint32(uint32_t &value) -{ - value = std::get(arg); - return GetResult(); -} - -template -T TypeCast(const uint8_t *data, int *pos = nullptr) -{ - if (pos) { - *pos += sizeof(T); - } - return *(reinterpret_cast(data)); -} - -bool OnRemoteRequestFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size < sizeof(uint32_t)) { - return true; - } - - uint32_t code = TypeCast(data); - MessageParcel msg; - MessageParcel reply; - MessageOption option; - - fileAccessExtStub->OnRemoteRequest(code, msg, reply, option); - - msg.WriteInterfaceToken(FileAccessExtStub::GetDescriptor()); - fileAccessExtStub->OnRemoteRequest(code, msg, reply, option); - return true; -} - -bool CmdOpenFileFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size < sizeof(int32_t)) { - return true; - } - - MessageParcel msg; - MessageParcel reply; - - Uri uri(string(reinterpret_cast(data), size)); - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(false); - fileAccessExtStub->CmdOpenFile(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - arg = -1; - fileAccessExtStub->CmdOpenFile(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(false); - arg = TypeCast(data); - fileAccessExtStub->CmdOpenFile(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - que.push(false); - arg = TypeCast(data); - fileAccessExtStub->CmdOpenFile(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - que.push(true); - arg = TypeCast(data); - fileAccessExtStub->CmdOpenFile(msg, reply); - return true; -} - -bool CmdCreateFileFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size >> 1; - - vector displayName{""}; - arg = displayName; - fileAccessExtStub->CmdCreateFile(msg, reply); - - Uri uri(string(reinterpret_cast(data), pos)); - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(false); - arg = displayName; - fileAccessExtStub->CmdCreateFile(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - arg = displayName; - fileAccessExtStub->CmdCreateFile(msg, reply); - - displayName.clear(); - displayName.emplace_back(reinterpret_cast(data + pos), size - pos); - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(false); - arg = displayName; - fileAccessExtStub->CmdCreateFile(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - que.push(false); - arg = displayName; - fileAccessExtStub->CmdCreateFile(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - que.push(true); - arg = displayName; - fileAccessExtStub->CmdCreateFile(msg, reply); - return true; -} - -bool CmdMkdirFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size >> 1; - - Uri uri(string(reinterpret_cast(data), pos)); - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(false); - fileAccessExtStub->CmdMkdir(msg, reply); - - vector displayName{""}; - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - arg = displayName; - fileAccessExtStub->CmdMkdir(msg, reply); - - displayName.clear(); - displayName.emplace_back(reinterpret_cast(data + pos), size - pos); - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(false); - arg = displayName; - fileAccessExtStub->CmdMkdir(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - que.push(false); - arg = displayName; - fileAccessExtStub->CmdMkdir(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - que.push(true); - arg = displayName; - fileAccessExtStub->CmdMkdir(msg, reply); - return true; -} - -bool CmdDeleteFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - - Uri uri(string(reinterpret_cast(data), size)); - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(false); - fileAccessExtStub->CmdDelete(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - fileAccessExtStub->CmdDelete(msg, reply); - return true; -} - -bool CmdMoveFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size >> 1; - Uri sourceFile(string(reinterpret_cast(data), pos)); - Uri targetParent(string(reinterpret_cast(data + pos), size - pos)); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceFile); - fileAccessExtStub->CmdMove(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceFile); - msg.WriteParcelable(&targetParent); - que = {}; - que.push(false); - fileAccessExtStub->CmdMove(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceFile); - msg.WriteParcelable(&targetParent); - que = {}; - que.push(true); - que.push(false); - fileAccessExtStub->CmdMove(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceFile); - msg.WriteParcelable(&targetParent); - que = {}; - que.push(true); - que.push(true); - fileAccessExtStub->CmdMove(msg, reply); - return true; -} - -bool CmdCopyFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size == 0) { - return true; - } - - MessageParcel msg; - MessageParcel reply; - int pos = (size - 1) >> 1; - Uri sourceUri(string(reinterpret_cast(data + 1), pos)); - Uri destUri(string(reinterpret_cast(data + pos + 1), size - pos - 1)); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceUri); - fileAccessExtStub->CmdCopy(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceUri); - msg.WriteParcelable(&destUri); - que = {}; - que.push(false); - fileAccessExtStub->CmdCopy(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceUri); - msg.WriteParcelable(&destUri); - que = {}; - que.push(true); - que.push(false); - arg = TypeCast(data); - fileAccessExtStub->CmdCopy(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceUri); - msg.WriteParcelable(&destUri); - que = {}; - que.push(true); - que.push(true); - que.push(false); - arg = TypeCast(data); - fileAccessExtStub->CmdCopy(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceUri); - msg.WriteParcelable(&destUri); - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(false); - arg = TypeCast(data); - fileAccessExtStub->CmdCopy(msg, reply); - return true; -} - -bool CmdCopyFileFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - vector str{ string(reinterpret_cast(data), size) }; - - que = {}; - que.push(false); - arg = str; - fileAccessExtStub->CmdCopyFile(msg, reply); - - que = {}; - que.push(true); - que.push(false); - fileAccessExtStub->CmdCopyFile(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdCopyFile(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdCopyFile(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdCopyFile(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(true); - que.push(true); - fileAccessExtStub->CmdCopyFile(msg, reply); - return true; -} - -bool CmdRenameFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size >> 1; - Uri sourceFile(string(reinterpret_cast(data), pos)); - vector displayName{ string(reinterpret_cast(data + pos), size - pos) }; - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceFile); - que = {}; - que.push(false); - fileAccessExtStub->CmdRename(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceFile); - que = {}; - que.push(true); - arg = vector(); - fileAccessExtStub->CmdRename(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceFile); - que = {}; - que.push(true); - que.push(false); - arg = displayName; - fileAccessExtStub->CmdRename(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceFile); - que = {}; - que.push(true); - que.push(true); - que.push(false); - arg = displayName; - fileAccessExtStub->CmdRename(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&sourceFile); - que = {}; - que.push(true); - que.push(true); - que.push(true); - arg = displayName; - fileAccessExtStub->CmdRename(msg, reply); - return true; -} - -bool CmdGetRootsFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - msg.WriteBuffer(data, size); - - que = {}; - que.push(false); - fileAccessExtStub->CmdGetRoots(msg, reply); - - que = {}; - que.push(true); - que.push(false); - fileAccessExtStub->CmdGetRoots(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdGetRoots(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - fileAccessExtStub->CmdGetRoots(msg, reply); - return true; -} - -bool CmdQueryFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size < sizeof(int64_t)) { - return true; - } - - MessageParcel msg; - MessageParcel reply; - Uri uri(string(reinterpret_cast(data + sizeof(int64_t)), size - sizeof(int64_t))); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(false); - fileAccessExtStub->CmdQuery(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(false); - arg = TypeCast(data); - fileAccessExtStub->CmdQuery(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - que.push(false); - arg = TypeCast(data); - fileAccessExtStub->CmdQuery(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(false); - arg = TypeCast(data); - fileAccessExtStub->CmdQuery(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(true); - arg = TypeCast(data); - fileAccessExtStub->CmdQuery(msg, reply); - return true; -} - -bool CmdGetFileInfoFromUriFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - Uri uri(string(reinterpret_cast(data), size)); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(false); - fileAccessExtStub->CmdGetFileInfoFromUri(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(false); - fileAccessExtStub->CmdGetFileInfoFromUri(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - fileAccessExtStub->CmdGetFileInfoFromUri(msg, reply); - return true; -} - -bool CmdGetFileInfoFromRelativePathFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, - size_t size) -{ - MessageParcel msg; - MessageParcel reply; - Uri uri(string(reinterpret_cast(data), size)); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(false); - fileAccessExtStub->CmdGetFileInfoFromRelativePath(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(false); - fileAccessExtStub->CmdGetFileInfoFromRelativePath(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - fileAccessExtStub->CmdGetFileInfoFromRelativePath(msg, reply); - return true; -} - -bool CmdAccessFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - Uri uri(string(reinterpret_cast(data), size)); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(false); - fileAccessExtStub->CmdAccess(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(false); - fileAccessExtStub->CmdAccess(msg, reply); - - msg.FlushBuffer(); - msg.WriteParcelable(&uri); - que = {}; - que.push(true); - que.push(true); - fileAccessExtStub->CmdAccess(msg, reply); - return true; -} - -bool CmdStartWatcherFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - vector uriString{ string(reinterpret_cast(data), size) }; - - que = {}; - que.push(false); - arg = vector(); - fileAccessExtStub->CmdStartWatcher(msg, reply); - - que = {}; - que.push(true); - arg = vector(); - fileAccessExtStub->CmdStartWatcher(msg, reply); - - que = {}; - que.push(true); - que.push(false); - arg = uriString; - fileAccessExtStub->CmdStartWatcher(msg, reply); - - que = {}; - que.push(true); - que.push(true); - arg = uriString; - fileAccessExtStub->CmdStartWatcher(msg, reply); - return true; -} - -bool CmdStopWatcherFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - vector uriString{ string(reinterpret_cast(data), size) }; - - que = {}; - que.push(false); - arg = vector(); - fileAccessExtStub->CmdStopWatcher(msg, reply); - - que = {}; - que.push(true); - arg = vector(); - fileAccessExtStub->CmdStopWatcher(msg, reply); - - que = {}; - que.push(true); - que.push(false); - arg = uriString; - fileAccessExtStub->CmdStopWatcher(msg, reply); - - que = {}; - que.push(true); - que.push(true); - arg = uriString; - fileAccessExtStub->CmdStopWatcher(msg, reply); - return true; -} - -bool CmdMoveItemFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size >> 1; - string sourceFile(reinterpret_cast(data), pos); - string targetParent(reinterpret_cast(data + pos), size - pos); - arg = vector{sourceFile, targetParent}; - - que = {}; - que.push(false); - fileAccessExtStub->CmdMoveItem(msg, reply); - - que = {}; - que.push(true); - que.push(false); - fileAccessExtStub->CmdMoveItem(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdMoveItem(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdMoveItem(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdMoveItem(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdMoveItem(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(true); - que.push(true); - que.push(true); - fileAccessExtStub->CmdMoveItem(msg, reply); - return true; -} - -bool CmdMoveFileFuzzTest(shared_ptr fileAccessExtStub, const uint8_t *data, size_t size) -{ - MessageParcel msg; - MessageParcel reply; - int pos = size / 3; - vector item { string(reinterpret_cast(data), pos), - string(reinterpret_cast(data + pos), pos), - string(reinterpret_cast(data + pos + pos), size - pos - pos)}; - arg = item; - que = {}; - que.push(false); - fileAccessExtStub->CmdMoveFile(msg, reply); - - que = {}; - que.push(true); - que.push(false); - fileAccessExtStub->CmdMoveFile(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdMoveFile(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdMoveFile(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(true); - que.push(false); - fileAccessExtStub->CmdMoveFile(msg, reply); - - que = {}; - que.push(true); - que.push(true); - que.push(true); - que.push(true); - que.push(true); - fileAccessExtStub->CmdMoveFile(msg, reply); - return true; -} - -} // namespace OHOS - -/* Fuzzer entry point */ -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) -{ - auto ability = std::make_shared(); - auto stub = std::make_shared(ability, nullptr); - if (stub == nullptr) { - return 0; - } - - OHOS::OnRemoteRequestFuzzTest(stub, data, size); - OHOS::CmdOpenFileFuzzTest(stub, data, size); - OHOS::CmdCreateFileFuzzTest(stub, data, size); - OHOS::CmdMkdirFuzzTest(stub, data, size); - OHOS::CmdDeleteFuzzTest(stub, data, size); - OHOS::CmdMoveFuzzTest(stub, data, size); - OHOS::CmdCopyFuzzTest(stub, data, size); - OHOS::CmdCopyFileFuzzTest(stub, data, size); - OHOS::CmdRenameFuzzTest(stub, data, size); - OHOS::CmdGetRootsFuzzTest(stub, data, size); - OHOS::CmdQueryFuzzTest(stub, data, size); - OHOS::CmdGetFileInfoFromUriFuzzTest(stub, data, size); - OHOS::CmdGetFileInfoFromRelativePathFuzzTest(stub, data, size); - OHOS::CmdAccessFuzzTest(stub, data, size); - OHOS::CmdStartWatcherFuzzTest(stub, data, size); - OHOS::CmdStopWatcherFuzzTest(stub, data, size); - OHOS::CmdMoveItemFuzzTest(stub, data, size); - OHOS::CmdMoveFileFuzzTest(stub, data, size); - return 0; -} diff --git a/test/fuzztest/fileaccessextstubbranch_fuzzer/project.xml b/test/fuzztest/fileaccessextstubbranch_fuzzer/project.xml deleted file mode 100644 index d6679ccc2ec868b072c934ed45102d545f31f91d..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessextstubbranch_fuzzer/project.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - 1000 - - 300 - - 4096 - - diff --git a/test/fuzztest/fileaccessserviceproxy_fuzzer/BUILD.gn b/test/fuzztest/fileaccessserviceproxy_fuzzer/BUILD.gn deleted file mode 100644 index 678bcc43ddfcc7071bb789a22f59b11f03e1cf94..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/BUILD.gn +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -#####################hydra-fuzz################### -import("//build/config/features.gni") -import("//build/test.gni") -import("//foundation/filemanagement/user_file_service/filemanagement_aafwk.gni") -ohos_fuzztest("FileAccessServiceProxyFuzzTest") { - module_out_path = "user_file_service/user_file_service" - fuzz_config_file = - "${user_file_service_path}/test/fuzztest/fileaccessserviceproxy_fuzzer" - include_dirs = [ - "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context", - "${user_file_service_path}/interfaces/inner_api/file_access/include", - "${user_file_service_path}/services/native/file_access_service/include", - "${user_file_service_path}/interfaces/kits/js/src/common", - "${user_file_service_path}/utils", - ] - cflags = [ - "-g", - "-O0", - "-Wno-unused-variable", - "-fno-omit-frame-pointer", - ] - sources = [ - "${user_file_service_path}/services/native/file_access_service/src/file_access_service_proxy.cpp", - "${user_file_service_path}/services/native/file_access_service/src/file_access_service_stub.cpp", - "${user_file_service_path}/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.cpp", - ] - - external_deps = [ - "ability_base:want", - "ability_base:zuri", - "ability_runtime:ability_manager", - "access_token:libaccesstoken_sdk", - "bundle_framework:appexecfwk_core", - "c_utils:utils", - "hilog:libhilog", - "hitrace:hitrace_meter", - "ipc:ipc_core", - "napi:ace_napi", - "samgr:samgr_proxy", - ] - - defines = [ "private=public" ] -} diff --git a/test/fuzztest/fileaccessserviceproxy_fuzzer/corpus/init b/test/fuzztest/fileaccessserviceproxy_fuzzer/corpus/init deleted file mode 100644 index 6198079a28e860189d4294f6598f8ac6804c0dff..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/corpus/init +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -FUZZ \ No newline at end of file diff --git a/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessservicemock.h b/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessservicemock.h deleted file mode 100644 index 0918b9cfbccab372656609ba6d985aa93c0855d0..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessservicemock.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FILE_ACCESS_SERVICE_MOCK_H -#define FILE_ACCESS_SERVICE_MOCK_H - -#include "file_access_service_stub.h" - -namespace OHOS { -namespace FileAccessFwk { -class FileAccessServiceMock final : public FileAccessServiceStub { -public: - virtual ~FileAccessServiceMock() = default; - - int32_t OnChange(Uri uri, NotifyType notifyType) override { return 0; } - int32_t RegisterNotify(Uri uri, bool notifyForDescendants, const sptr &observer, - const std::shared_ptr &info) override { return 0; } - int32_t UnregisterNotify(Uri uri, const sptr &observer, - const std::shared_ptr &info) override { return 0; } - int32_t GetExtensionProxy(const std::shared_ptr &info, - sptr &extensionProxy) override { return 0; } - int32_t CleanAllNotify(Uri uri, const std::shared_ptr &info) override { return 0; } - int32_t ConnectFileExtAbility(const AAFwk::Want &want, - const sptr& connection) override { return 0; }; - int32_t DisConnectFileExtAbility(const sptr& connection) override { return 0; }; -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // FILE_ACCESS_SERVICE_MOCK_H \ No newline at end of file diff --git a/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.cpp b/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.cpp deleted file mode 100644 index 6eb110191c71944a13f392e6fb41cc5494c2e36a..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "fileaccessserviceproxy_fuzzer.h" - -#include -#include - -#include "file_access_service_proxy.h" -#include "fileaccessservicemock.h" -#include "iservice_registry.h" -#include "refbase.h" - -namespace OHOS { -using namespace std; -using namespace FileAccessFwk; - -SystemAbilityManagerClient& SystemAbilityManagerClient::GetInstance() -{ - static auto instance = std::make_shared(); - return *instance; -} - -sptr SystemAbilityManagerClient::GetSystemAbilityManager() -{ - return nullptr; -} - -void SystemAbilityManagerClient::DestroySystemAbilityManagerObject() -{} - -template -T TypeCast(const uint8_t *data, int *pos = nullptr) -{ - if (pos) { - *pos += sizeof(T); - } - return *(reinterpret_cast(data)); -} - -bool OnChangeFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) -{ - if (data == nullptr || size < sizeof(NotifyType)) { - return true; - } - - int pos = 0; - NotifyType notifyType = TypeCast(data, &pos); - Uri uri(string(reinterpret_cast(data + pos), size - pos)); - - proxy->OnChange(uri, notifyType); - return true; -} - -bool RegisterNotifyFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) -{ - if (data == nullptr || size < sizeof(bool)) { - return true; - } - - int pos = 0; - auto info = make_shared(); - bool notifyForDescendants = TypeCast(data, &pos); - Uri uri(string(reinterpret_cast(data + pos), size - pos)); - - proxy->RegisterNotify(uri, notifyForDescendants, nullptr, info); - return true; -} - -bool UnregisterNotifyFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) -{ - auto info = make_shared(); - Uri uri(string(reinterpret_cast(data), size)); - - proxy->UnregisterNotify(uri, nullptr, info); - return true; -} - -bool GetExensionProxyFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) -{ - int len = size >> 1; - AAFwk::Want want; - want.SetElementName(std::string(reinterpret_cast(data), len), - std::string(reinterpret_cast(data + len), size - len)); - auto info = make_shared(want, nullptr); - sptr extensionProxy = nullptr; - - proxy->GetExtensionProxy(info, extensionProxy); - return true; -} -} // namespace OHOS - -/* Fuzzer entry point */ -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) -{ - auto impl = std::make_unique(); - auto proxy = std::make_shared(OHOS::sptr(impl.release())); - if (proxy == nullptr || impl == nullptr) { - return 0; - } - - OHOS::OnChangeFuzzTest(proxy, data, size); - OHOS::RegisterNotifyFuzzTest(proxy, data, size); - OHOS::UnregisterNotifyFuzzTest(proxy, data, size); - OHOS::GetExensionProxyFuzzTest(proxy, data, size); - - return 0; -} \ No newline at end of file diff --git a/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.h b/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.h deleted file mode 100644 index 4e5738aa80f78c60b7840592857b3f46de509099..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FILE_ACCESS_SERVICE_PROXY_FUZZER_H -#define FILE_ACCESS_SERVICE_PROXY_FUZZER_H - -#define FUZZ_PROJECT_NAME "fileaccessserviceproxy_fuzzer" - -#endif \ No newline at end of file diff --git a/test/fuzztest/fileaccessserviceproxy_fuzzer/project.xml b/test/fuzztest/fileaccessserviceproxy_fuzzer/project.xml deleted file mode 100644 index d6679ccc2ec868b072c934ed45102d545f31f91d..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/project.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - 1000 - - 300 - - 4096 - - diff --git a/test/fuzztest/fileaccessservicestub_fuzzer/BUILD.gn b/test/fuzztest/fileaccessservicestub_fuzzer/BUILD.gn deleted file mode 100644 index d9cdf12c7d0bf03961cd6f26295fabe3f87ffa24..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessservicestub_fuzzer/BUILD.gn +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -#####################hydra-fuzz################### -import("//build/config/features.gni") -import("//build/test.gni") -import("//foundation/filemanagement/user_file_service/filemanagement_aafwk.gni") -ohos_fuzztest("FileAccessServiceStubFuzzTest") { - module_out_path = "user_file_service/user_file_service" - fuzz_config_file = - "${user_file_service_path}/test/fuzztest/fileaccessservicestub_fuzzer" - include_dirs = [ - "${ability_runtime_path}/interfaces/inner_api/ability_manager/include", - "${user_file_service_path}/interfaces/inner_api/file_access/include", - "${user_file_service_path}/services/native/file_access_service/include", - "${user_file_service_path}/interfaces/kits/js/src/common", - "${user_file_service_path}/utils", - ] - cflags = [ - "-g", - "-O0", - "-Wno-unused-variable", - "-fno-omit-frame-pointer", - ] - sources = [ - "${user_file_service_path}/services/native/file_access_service/src/file_access_service_stub.cpp", - "${user_file_service_path}/test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicestub_fuzzer.cpp", - ] - - external_deps = [ - "ability_base:want", - "ability_base:zuri", - "ability_runtime:app_context", - "ability_runtime:extensionkit_native", - "access_token:libaccesstoken_sdk", - "bundle_framework:appexecfwk_core", - "c_utils:utils", - "hilog:libhilog", - "hitrace:hitrace_meter", - "ipc:ipc_core", - "napi:ace_napi", - ] - - defines = [ "private=public" ] -} diff --git a/test/fuzztest/fileaccessservicestub_fuzzer/corpus/init b/test/fuzztest/fileaccessservicestub_fuzzer/corpus/init deleted file mode 100644 index 6198079a28e860189d4294f6598f8ac6804c0dff..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessservicestub_fuzzer/corpus/init +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -FUZZ \ No newline at end of file diff --git a/test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicemock.h b/test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicemock.h deleted file mode 100644 index 0bbc68f0fb275293eed636333e61f2fa288b60d3..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicemock.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FILE_ACCESS_SERVICE_MOCK_H -#define FILE_ACCESS_SERVICE_MOCK_H - -#include "file_access_service_stub.h" - -namespace OHOS { -namespace FileAccessFwk { -class FileAccessServiceMock final : public FileAccessServiceStub { -public: - virtual ~FileAccessServiceMock() = default; - - int32_t OnChange(Uri uri, NotifyType notifyType) override { return 0; } - int32_t RegisterNotify(Uri uri, bool notifyForDescendants, const sptr &observer, - const std::shared_ptr &info) override { return 0; } - int32_t UnregisterNotify(Uri uri, const sptr &observer, - const std::shared_ptr &info) override { return 0; } - int32_t GetExtensionProxy(const std::shared_ptr &info, - sptr &extensionProxy) override { return 0; } - int32_t CleanAllNotify(Uri uri, const std::shared_ptr &info) override { return 0; } - int32_t ConnectFileExtAbility(const AAFwk::Want &want, - const sptr& connection) override { return 0; } - int32_t DisConnectFileExtAbility(const sptr& connection) override { return 0; } -}; -} // namespace FileAccessFwk -} // namespace OHOS -#endif // FILE_ACCESS_SERVICE_MOCK_H \ No newline at end of file diff --git a/test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicestub_fuzzer.cpp b/test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicestub_fuzzer.cpp deleted file mode 100644 index eb2e7394d60d2a86f33a24ded9f9f2bcb8a2fa90..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicestub_fuzzer.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "fileaccessservicestub_fuzzer.h" - -#include -#include - -#include "extension_context.h" -#include "file_access_service_stub.h" -#include "fileaccessservicemock.h" -#include "message_parcel.h" - -namespace OHOS { -using namespace std; -using namespace FileAccessFwk; - -template -T TypeCast(const uint8_t *data, int *pos = nullptr) -{ - if (pos) { - *pos += sizeof(T); - } - return *(reinterpret_cast(data)); -} - -bool OnRemoteRequestFuzzTest(shared_ptr fileAccessServiceStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size < sizeof(uint32_t)) { - return true; - } - - uint32_t code = TypeCast(data); - MessageParcel msg; - msg.WriteInterfaceToken(FileAccessServiceStub::GetDescriptor()); - MessageParcel reply; - MessageOption option; - - fileAccessServiceStub->OnRemoteRequest(code, msg, reply, option); - return true; -} - -ErrCode CmdOnChangeFuzzTest(shared_ptr fileAccessServiceStub, const uint8_t *data, size_t size) -{ - if (data == nullptr || size < sizeof(uint32_t)) { - return true; - } - - int pos = 0; - int32_t notifyType = TypeCast(data, &pos); - Uri uri(string(reinterpret_cast(data + pos), size - pos)); - - MessageParcel msg; - MessageParcel reply; - msg.WriteParcelable(&uri); - msg.WriteInt32(notifyType); - - fileAccessServiceStub->CmdOnChange(msg, reply); - return FileAccessFwk::ERR_OK; -} - -ErrCode CmdRegisterNotifyFuzzTest(shared_ptr fileAccessServiceStub, const uint8_t *data, - size_t size) -{ - Uri uri(string(reinterpret_cast(data), size)); - - MessageParcel msg; - MessageParcel reply; - msg.WriteParcelable(&uri); - - fileAccessServiceStub->CmdOnChange(msg, reply); - return FileAccessFwk::ERR_OK; -} - -ErrCode CmdUnregisterNotifyFuzzTest(shared_ptr fileAccessServiceStub, const uint8_t *data, - size_t size) -{ - if (data == nullptr || size < sizeof(bool)) { - return true; - } - - int pos = 0; - bool observerNotNull = TypeCast(data, &pos); - Uri uri(string(reinterpret_cast(data + pos), size - pos)); - - MessageParcel msg; - MessageParcel reply; - msg.WriteParcelable(&uri); - msg.WriteBool(observerNotNull); - - fileAccessServiceStub->CmdUnregisterNotify(msg, reply); - return FileAccessFwk::ERR_OK; -} - -ErrCode CmdGetExensionProxyFuzzTest(shared_ptr fileAccessServiceStub, const uint8_t *data, - size_t size) -{ - int len = size >> 1; - AAFwk::Want want; - want.SetElementName(std::string(reinterpret_cast(data), len), - std::string(reinterpret_cast(data + len), size - len)); - MessageParcel msg; - MessageParcel reply; - msg.WriteParcelable(&want); - msg.WriteRemoteObject(nullptr); - - fileAccessServiceStub->CmdGetExensionProxy(msg, reply); - return FileAccessFwk::ERR_OK; -} - -} // namespace OHOS - -/* Fuzzer entry point */ -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) -{ - auto stub = std::make_shared(); - if (stub == nullptr) { - return 0; - } - - OHOS::OnRemoteRequestFuzzTest(stub, data, size); - OHOS::CmdOnChangeFuzzTest(stub, data, size); - OHOS::CmdRegisterNotifyFuzzTest(stub, data, size); - OHOS::CmdUnregisterNotifyFuzzTest(stub, data, size); - OHOS::CmdGetExensionProxyFuzzTest(stub, data, size); - return 0; -} diff --git a/test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicestub_fuzzer.h b/test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicestub_fuzzer.h deleted file mode 100644 index 9d13e85541206b20396c99180edfc60ef4853ab3..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicestub_fuzzer.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FILE_ACCESS_SERVICE_STUB_FUZZER_H -#define FILE_ACCESS_SERVICE_STUB_FUZZER_H - -#define FUZZ_PROJECT_NAME "fileaccessservicestub_fuzzer" - -#endif \ No newline at end of file diff --git a/test/fuzztest/fileaccessservicestub_fuzzer/project.xml b/test/fuzztest/fileaccessservicestub_fuzzer/project.xml deleted file mode 100644 index d6679ccc2ec868b072c934ed45102d545f31f91d..0000000000000000000000000000000000000000 --- a/test/fuzztest/fileaccessservicestub_fuzzer/project.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - 1000 - - 300 - - 4096 - - diff --git a/test/unittest/BUILD.gn b/test/unittest/BUILD.gn index 0ee39053616e5661d5ad7358d81d16c410a0d637..0f0a0b843bbf7730e448a0c6d03e8d9080dd63fd 100644 --- a/test/unittest/BUILD.gn +++ b/test/unittest/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2024 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -93,8 +93,10 @@ ohos_unittest("external_file_access_basic_test") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", "${user_file_service_path}/services:file_access_service", + "${user_file_service_path}/services:file_access_service_base_source", ] external_deps = [ @@ -148,8 +150,10 @@ ohos_unittest("external_file_access_management_test") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", "${user_file_service_path}/services:file_access_service", + "${user_file_service_path}/services:file_access_service_base_source", ] external_deps = [ @@ -199,8 +203,10 @@ ohos_unittest("external_file_access_notify_test") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", "${user_file_service_path}/services:file_access_service", + "${user_file_service_path}/services:file_access_service_base_source", ] external_deps = [ @@ -235,7 +241,10 @@ ohos_unittest("abnormal_file_access_test") { } module_out_path = "user_file_service/tests" - sources = [ "abnormal_file_access_test.cpp" ] + sources = [ + "${user_file_service_path}/interfaces/inner_api/file_access/src/uri_ext.cpp", + "abnormal_file_access_test.cpp", + ] include_dirs = [ "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context", @@ -247,7 +256,9 @@ ohos_unittest("abnormal_file_access_test") { deps = [ "${ability_runtime_path}/frameworks/native/ability/native:abilitykit_native", "${ability_runtime_path}/frameworks/native/appkit:app_context", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", + "${user_file_service_path}/services:file_access_service_base_source", ] external_deps = [ @@ -294,15 +305,21 @@ ohos_unittest("file_access_ext_stub_impl_test") { sources = [ "${user_file_service_path}/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp", + "${user_file_service_path}/interfaces/inner_api/file_access/src/uri_ext.cpp", "file_access_ext_stub_impl_test.cpp", ] + deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include" ] + external_deps = [ "ability_base:zuri", "ability_runtime:app_context", "ability_runtime:extensionkit_native", "ability_runtime:napi_common", "ability_runtime:runtime", + "access_token:libaccesstoken_sdk", + "access_token:libnativetoken", + "access_token:libtoken_setproc", "c_utils:utils", "googletest:gmock_main", "googletest:gtest_main", @@ -315,54 +332,6 @@ ohos_unittest("file_access_ext_stub_impl_test") { use_exceptions = true } -ohos_unittest("file_access_service_proxy_test") { - branch_protector_ret = "pac_ret" - sanitize = { - integer_overflow = true - cfi = true - cfi_cross_dso = true - debug = false - blocklist = "${user_file_service_path}/cfi_blocklist.txt" - } - module_out_path = "user_file_service/tests" - - include_dirs = [ - "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context", - "${user_file_service_path}/interfaces/inner_api/file_access/include", - "${user_file_service_path}/services/native/file_access_service/include", - "${user_file_service_path}/interfaces/kits/js/src/common", - "${user_file_service_path}/utils", - "mock", - ] - - sources = [ - "${user_file_service_path}/services/native/file_access_service/src/file_access_service_proxy.cpp", - "file_access_service_proxy_test.cpp", - "mock/message_parcel_mock.cpp", - "mock/service_registry_mock.cpp", - ] - - external_deps = [ - "ability_base:want", - "ability_base:zuri", - "ability_runtime:ability_manager", - "bundle_framework:appexecfwk_core", - "c_utils:utils", - "googletest:gmock_main", - "googletest:gtest_main", - "hilog:libhilog", - "hitrace:hitrace_meter", - "image_framework:image", - "ipc:ipc_core", - "napi:ace_napi", - "safwk:system_ability_fwk", - ] - - defines = [ "private=public" ] - - use_exceptions = true -} - ohos_unittest("js_file_access_ext_ability_test") { branch_protector_ret = "pac_ret" sanitize = { @@ -389,11 +358,16 @@ ohos_unittest("js_file_access_ext_ability_test") { sources = [ "${user_file_service_path}/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp", "${user_file_service_path}/interfaces/inner_api/file_access/src/napi_common_fileaccess.cpp", + "${user_file_service_path}/interfaces/inner_api/file_access/src/uri_ext.cpp", "js_file_access_ext_ability_test.cpp", "mock/js_native_api_mock.cpp", ] - deps = [ "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit" ] + deps = [ + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_ext_base_include", + "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", + "${user_file_service_path}/services:file_access_service_base_include", + ] external_deps = [ "ability_base:want", @@ -429,7 +403,6 @@ group("user_file_service_unit_test") { ":external_file_access_management_test", ":external_file_access_notify_test", ":file_access_ext_stub_impl_test", - ":file_access_service_proxy_test", ":js_file_access_ext_ability_test", ] } diff --git a/test/unittest/external_file_access_test_info.cpp b/test/unittest/external_file_access_test_info.cpp index 2ca501c5cc5e4bff78c39a9b626b24a0a9f70279..b6b90810626b460da49385125690dc37d242b302 100644 --- a/test/unittest/external_file_access_test_info.cpp +++ b/test/unittest/external_file_access_test_info.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -28,6 +28,7 @@ #include "iservice_registry.h" #include "nativetoken_kit.h" #include "token_setproc.h" +#include "file_access_service_client.h" namespace OHOS::FileAccessFwk { using json = nlohmann::json; @@ -1390,7 +1391,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Move_item_0001, testing:: std::vector moveResult; result = fileAccessHelper->MoveItem(sourceUri, newDirUriTest2, moveResult, false); EXPECT_EQ(result, -2); - EXPECT_EQ(moveResult[0].errCode, OHOS::FileAccessFwk::ERR_EXIST); result = fileAccessHelper->Delete(newDirUriTest1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); result = fileAccessHelper->Delete(newDirUriTest2); @@ -1523,7 +1523,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Move_item_0004, testing:: std::vector moveResult; result = fileAccessHelper->MoveItem(newDirUriTest1, newDirUriTest2, moveResult, false); EXPECT_EQ(result, -2); - EXPECT_EQ(moveResult[0].errCode, OHOS::FileAccessFwk::ERR_EXIST); GTEST_LOG_(INFO) << "Move_0000 result:" << result; result = fileAccessHelper->Delete(newDirUriTest1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -1625,7 +1624,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Move_item_0006, testing:: std::vector moveResult; result = fileAccessHelper->MoveItem(newDirUriTest1, newDirUriTest3, moveResult, false); EXPECT_EQ(result, -2); - EXPECT_EQ(moveResult[0].errCode, OHOS::FileAccessFwk::ERR_EXIST); result = fileAccessHelper->Delete(newDirUriTest1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); result = fileAccessHelper->Delete(newDirUriTest3); @@ -1724,7 +1722,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Move_item_0008, testing:: std::vector moveResult; result = fileAccessHelper->MoveItem(sourceUri, newDirUriTest2, moveResult, true); EXPECT_EQ(result, -2); - EXPECT_EQ(moveResult.size(), 1); result = fileAccessHelper->Delete(newDirUriTest1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); result = fileAccessHelper->Delete(newDirUriTest2); @@ -1809,7 +1806,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Move_item_0010, testing:: EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); result = fileAccessHelper->MoveItem(sourceUri, newDirUriTest2, moveResult, true); EXPECT_EQ(result, -1); - EXPECT_EQ(moveResult[0].errCode, OHOS::FileAccessFwk::ERR_URI); result = fileAccessHelper->Delete(newDirUriTest1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); result = fileAccessHelper->Delete(newDirUriTest2); @@ -1852,7 +1848,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Move_item_0011, testing:: Uri targetUri(newDirUriTest2.ToString() + "/" + "test3"); result = fileAccessHelper->MoveItem(sourceUri, targetUri, moveResult, true); EXPECT_EQ(result, -1); - EXPECT_EQ(moveResult[0].errCode, OHOS::FileAccessFwk::ERR_URI); result = fileAccessHelper->Delete(newDirUriTest1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); result = fileAccessHelper->Delete(newDirUriTest2); @@ -1907,8 +1902,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Move_item_0012, testing:: result = fileAccessHelper->MoveItem(newDirUriTest1, newDirUriTest2, moveResult, false); EXPECT_EQ(result, -2); - EXPECT_EQ(moveResult[0].errCode, OHOS::FileAccessFwk::ERR_IS_DIR); - EXPECT_EQ(moveResult[1].errCode, OHOS::FileAccessFwk::ERR_EXIST); result = fileAccessHelper->Delete(newDirUriTest1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); result = fileAccessHelper->Delete(newDirUriTest2); @@ -1963,7 +1956,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Move_item_0013, testing:: result = fileAccessHelper->MoveItem(newDirUriTest1, newDirUriTest2, moveResult, true); EXPECT_EQ(result, -2); - EXPECT_EQ(moveResult[0].errCode, OHOS::FileAccessFwk::ERR_IS_DIR); result = fileAccessHelper->Delete(newDirUriTest1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); result = fileAccessHelper->Delete(newDirUriTest2); diff --git a/test/unittest/external_file_access_test_operations.cpp b/test/unittest/external_file_access_test_operations.cpp index 8823b71bf3887b14c75ca50ebcf609942c656cb8..236844eec805cbe10e88618b9e96d247e94291f7 100644 --- a/test/unittest/external_file_access_test_operations.cpp +++ b/test/unittest/external_file_access_test_operations.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -300,7 +300,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0004, testing::ext:: std::vector copyResult; result = fileAccessHelper->Copy(srcFile, destDir, copyResult, false); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(copyResult.size(), 1); result = fileAccessHelper->OpenFile(existFile, WRITE_READ, fd); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -363,7 +362,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0005, testing::ext:: std::vector copyResult; result = fileAccessHelper->Copy(srcFile, destDir, copyResult); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_GT(copyResult.size(), 0); result = fileAccessHelper->OpenFile(existFile, WRITE_READ, fd); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -509,9 +507,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0007, testing::ext:: std::vector copyResult; result = fileAccessHelper->Copy(srcDir, destDir, copyResult, false); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(copyResult.size(), 1); - EXPECT_EQ(copyResult[0].sourceUri, bFileUri.ToString()); - EXPECT_EQ(copyResult[0].destUri, destFileUri.ToString()); result = fileAccessHelper->Delete(srcDir); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -566,7 +561,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0008, testing::ext:: std::vector copyResult; result = fileAccessHelper->Copy(srcDir, destDir, copyResult); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(copyResult.size(), 1); result = fileAccessHelper->Delete(srcDir); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); diff --git a/test/unittest/external_notify_test.cpp b/test/unittest/external_notify_test.cpp index 1579d2d04b5548739c6fb2d65e305ad7f89bb713..57255e33554fbee37cbf01d18d61a377cffb3a69 100644 --- a/test/unittest/external_notify_test.cpp +++ b/test/unittest/external_notify_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2024 Huawei Device Co., Ltd. + * Copyright (c) 2023-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -25,9 +25,9 @@ #include "file_access_framework_errno.h" #include "file_access_observer_common.h" #include "iservice_registry.h" -#include "iobserver_callback.h" +#include "ifile_access_observer.h" #include "nativetoken_kit.h" -#include "observer_callback_stub.h" +#include "file_access_observer_stub.h" #include "token_setproc.h" #define private public @@ -146,35 +146,39 @@ public: void TearDown(){}; }; -class MyObserver : public ObserverCallbackStub { +class MyObserver : public FileAccessObserverStub { public: MyObserver() {}; virtual ~MyObserver() = default; - void OnChange(NotifyMessage ¬ifyMessage) override; + int OnChange(const NotifyMessage ¬ifyMessage) override; }; -void MyObserver::OnChange(NotifyMessage ¬ifyMessage) +int MyObserver::OnChange(const NotifyMessage ¬ifyMessage) { g_notifyEvent = static_cast(notifyMessage.notifyType_); std::string notifyUri = notifyMessage.uris_[0]; g_notifyUri = notifyUri; GTEST_LOG_(INFO) << "enter notify uri =" + notifyUri + " type =" + std::to_string(g_notifyEvent) +" uri size" + std::to_string(notifyMessage.uris_.size()); + + return 1; } -class TestObserver : public ObserverCallbackStub { +class TestObserver : public FileAccessObserverStub { public: TestObserver() {}; virtual ~TestObserver() = default; - void OnChange(NotifyMessage ¬ifyMessage) override; + int OnChange(const NotifyMessage ¬ifyMessage) override; }; -void TestObserver::OnChange(NotifyMessage ¬ifyMessage) +int TestObserver::OnChange(const NotifyMessage ¬ifyMessage) { g_notifyFlag = static_cast(notifyMessage.notifyType_); std::string notifyUri = notifyMessage.uris_[0]; g_notifyUris = notifyMessage.uris_; GTEST_LOG_(INFO) << "enter TestObserver uri =" + notifyUri + "type =" + std::to_string(g_notifyFlag); + + return 1; } static tuple ReadyRegisterNotify00(Uri& parentUri, @@ -1274,4 +1278,4 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0020, testing::ext } GTEST_LOG_(INFO) << "FileExtensionNotifyTest-end external_file_access_notify_0020"; } -} // namespace \ No newline at end of file +} // namespace diff --git a/test/unittest/file_access_ext_stub_impl_test.cpp b/test/unittest/file_access_ext_stub_impl_test.cpp index d0a2e3098a04d520d5c1d6265cb4df5eb140495a..74739ec78b0b1d63fbf1d76e6bd931cc5f1080e4 100644 --- a/test/unittest/file_access_ext_stub_impl_test.cpp +++ b/test/unittest/file_access_ext_stub_impl_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -22,11 +22,15 @@ #include "context.h" #include "extension_context.h" #include "ability_context.h" +#include "file_access_ext_base_stub.h" #include "file_access_ext_stub_impl.h" #include "file_access_extension_info.h" #include "file_access_framework_errno.h" #include "file_access_ext_ability_mock.h" -#include "uri.h" +#include "uri_ext.h" +#include "accesstoken_kit.h" +#include "nativetoken_kit.h" +#include "token_setproc.h" namespace OHOS::FileAccessFwk { using namespace std; @@ -34,11 +38,33 @@ using namespace testing; using namespace testing::ext; using namespace OHOS::AbilityRuntime; -FileAccessExtStub::FileAccessExtStub() {} - -FileAccessExtStub::~FileAccessExtStub() {} +void SetNativeToken() +{ + uint64_t tokenId; + const char *perms[] = { + "ohos.permission.FILE_ACCESS_MANAGER", + "ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", + "ohos.permission.CONNECT_FILE_ACCESS_EXTENSION" + }; + NativeTokenInfoParams infoInstance = { + .dcapsNum = 0, + .permsNum = 3, + .aclsNum = 0, + .dcaps = nullptr, + .perms = perms, + .acls = nullptr, + .aplStr = "system_core", + }; + + infoInstance.processName = "SetUpTestCase"; + tokenId = GetAccessTokenId(&infoInstance); + const uint64_t systemAppMask = (static_cast(1) << 32); + tokenId |= systemAppMask; + SetSelfTokenID(tokenId); + OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); +} -int FileAccessExtStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, +int FileAccessExtBaseStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) { return 0; @@ -67,7 +93,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_OpenFile_0000, tes GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_OpenFile_0000"; try { int fd; - Uri uri(""); + Urie uri(""); FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.OpenFile(uri, WRITE_READ, fd); EXPECT_EQ(result, E_IPCS); @@ -92,8 +118,9 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_OpenFile_0001, tes try { EXPECT_CALL(*ability, OpenFile(_, _, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); + SetNativeToken(); int fd; - Uri uri(""); + Urie uri(""); FileAccessExtStubImpl impl(ability, nullptr); int result = impl.OpenFile(uri, WRITE_READ, fd); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -116,8 +143,8 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_CreateFile_0000, t { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_CreateFile_0000"; try { - Uri uri(""); - Uri newUri(""); + Urie uri(""); + Urie newUri(""); string displayName = ""; FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.CreateFile(uri, displayName, newUri); @@ -143,8 +170,8 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_CreateFile_0001, t try { EXPECT_CALL(*ability, CreateFile(_, _, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri uri(""); - Uri newUri(""); + Urie uri(""); + Urie newUri(""); string displayName = ""; FileAccessExtStubImpl impl(ability, nullptr); int result = impl.CreateFile(uri, displayName, newUri); @@ -168,8 +195,8 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Mkdir_0000, testin { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_Mkdir_0000"; try { - Uri uri(""); - Uri newUri(""); + Urie uri(""); + Urie newUri(""); string displayName = ""; FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.Mkdir(uri, displayName, newUri); @@ -195,8 +222,8 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Mkdir_0001, testin try { EXPECT_CALL(*ability, Mkdir(_, _, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri uri(""); - Uri newUri(""); + Urie uri(""); + Urie newUri(""); string displayName = ""; FileAccessExtStubImpl impl(ability, nullptr); int result = impl.Mkdir(uri, displayName, newUri); @@ -220,7 +247,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Delete_0000, testi { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_Delete_0000"; try { - Uri sourceFile(""); + Urie sourceFile(""); FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.Delete(sourceFile); EXPECT_EQ(result, E_IPCS); @@ -245,7 +272,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Delete_0001, testi try { EXPECT_CALL(*ability, Delete(_)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri sourceFile(""); + Urie sourceFile(""); FileAccessExtStubImpl impl(ability, nullptr); int result = impl.Delete(sourceFile); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -268,9 +295,9 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Move_0000, testing { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_Move_0000"; try { - Uri sourceFile(""); - Uri targetParent(""); - Uri newFile(""); + Urie sourceFile(""); + Urie targetParent(""); + Urie newFile(""); FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.Move(sourceFile, targetParent, newFile); EXPECT_EQ(result, E_IPCS); @@ -295,9 +322,9 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Move_0001, testing try { EXPECT_CALL(*ability, Move(_, _, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri sourceFile(""); - Uri targetParent(""); - Uri newFile(""); + Urie sourceFile(""); + Urie targetParent(""); + Urie newFile(""); FileAccessExtStubImpl impl(ability, nullptr); int result = impl.Move(sourceFile, targetParent, newFile); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -320,12 +347,14 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Copy_0000, testing { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_Copy_0000"; try { - Uri sourceFile(""); - Uri destUri(""); + Urie sourceFile(""); + Urie destUri(""); vector copyResult; FileAccessExtStubImpl impl(nullptr, nullptr); - int result = impl.Copy(sourceFile, destUri, copyResult); - EXPECT_EQ(result, E_IPCS); + int retCode; + int result = impl.Copy(sourceFile, destUri, copyResult, retCode); + result = retCode; + EXPECT_EQ(result, ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "FileAccessExtStubImplTest occurs an exception."; } @@ -347,11 +376,13 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Copy_0001, testing try { EXPECT_CALL(*ability, Copy(_, _, _, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri sourceFile(""); - Uri destUri(""); + Urie sourceFile(""); + Urie destUri(""); vector copyResult; FileAccessExtStubImpl impl(ability, nullptr); - int result = impl.Copy(sourceFile, destUri, copyResult); + int retCode; + int result = impl.Copy(sourceFile, destUri, copyResult, retCode); + result = retCode; EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "FileAccessExtStubImplTest occurs an exception."; @@ -372,10 +403,10 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_CopyFile_0000, tes { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_CopyFile_0000"; try { - Uri sourceFile(""); - Uri destUri(""); + Urie sourceFile(""); + Urie destUri(""); string fileName; - Uri newFileUri(""); + Urie newFileUri(""); FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.CopyFile(sourceFile, destUri, fileName, newFileUri); EXPECT_EQ(result, E_IPCS); @@ -400,10 +431,10 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_CopyFile_0001, tes try { EXPECT_CALL(*ability, CopyFile(_, _, _, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri sourceFile(""); - Uri destUri(""); + Urie sourceFile(""); + Urie destUri(""); string fileName; - Uri newFileUri(""); + Urie newFileUri(""); FileAccessExtStubImpl impl(ability, nullptr); int result = impl.CopyFile(sourceFile, destUri, fileName, newFileUri); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -426,8 +457,8 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Rename_0000, testi { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_Rename_0000"; try { - Uri sourceFile(""); - Uri newUri(""); + Urie sourceFile(""); + Urie newUri(""); string displayName = ""; FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.Rename(sourceFile, displayName, newUri); @@ -453,8 +484,8 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Rename_0001, testi try { EXPECT_CALL(*ability, Rename(_, _, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri sourceFile(""); - Uri newUri(""); + Urie sourceFile(""); + Urie newUri(""); string displayName = ""; FileAccessExtStubImpl impl(ability, nullptr); int result = impl.Rename(sourceFile, displayName, newUri); @@ -510,8 +541,10 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_ListFile_0001, tes int64_t offset = 0; const FileFilter filter; SharedMemoryInfo memInfo; + int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, + memInfo); FileAccessExtStubImpl impl(ability, nullptr); - int result = impl.ListFile(fileInfo, offset, filter, memInfo); + result = impl.ListFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, EPERM); } catch (...) { GTEST_LOG_(ERROR) << "FileAccessExtStubImplTest occurs an exception."; @@ -538,8 +571,10 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_ListFile_0002, tes int64_t offset = 0; const FileFilter filter; SharedMemoryInfo memInfo; + int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, + memInfo); FileAccessExtStubImpl impl(ability, nullptr); - int result = impl.ListFile(fileInfo, offset, filter, memInfo); + result = impl.ListFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "FileAccessExtStubImplTest occurs an exception."; @@ -616,7 +651,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Query_0000, testin { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_Query_0000"; try { - Uri uri(""); + Urie uri(""); vector columns; vector results; FileAccessExtStubImpl impl(nullptr, nullptr); @@ -643,7 +678,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Query_0001, testin try { EXPECT_CALL(*ability, Query(_, _, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri uri(""); + Urie uri(""); vector columns; vector results; FileAccessExtStubImpl impl(ability, nullptr); @@ -668,7 +703,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_GetFileInfoFromUri { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_GetFileInfoFromUri_0000"; try { - Uri selectFile(""); + Urie selectFile(""); FileInfo fileInfo; FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.GetFileInfoFromUri(selectFile, fileInfo); @@ -694,7 +729,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_GetFileInfoFromUri try { EXPECT_CALL(*ability, GetFileInfoFromUri(_, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri selectFile(""); + Urie selectFile(""); FileInfo fileInfo; FileAccessExtStubImpl impl(ability, nullptr); int result = impl.GetFileInfoFromUri(selectFile, fileInfo); @@ -818,7 +853,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Access_0000, testi { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_Access_0000"; try { - Uri uri(""); + Urie uri(""); bool isExist; FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.Access(uri, isExist); @@ -844,7 +879,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_Access_0001, testi try { EXPECT_CALL(*ability, Access(_, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri uri(""); + Urie uri(""); bool isExist; FileAccessExtStubImpl impl(ability, nullptr); int result = impl.Access(uri, isExist); @@ -868,7 +903,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_StartWatcher_0000, { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_StartWatcher_0000"; try { - Uri uri(""); + Urie uri(""); FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.StartWatcher(uri); EXPECT_EQ(result, E_IPCS); @@ -893,7 +928,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_StartWatcher_0001, try { EXPECT_CALL(*ability, StartWatcher(_)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri uri(""); + Urie uri(""); FileAccessExtStubImpl impl(ability, nullptr); int result = impl.StartWatcher(uri); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -916,7 +951,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_StopWatcher_0000, { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_StopWatcher_0000"; try { - Uri uri(""); + Urie uri(""); FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.StopWatcher(uri); EXPECT_EQ(result, E_IPCS); @@ -941,7 +976,7 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_StopWatcher_0001, try { EXPECT_CALL(*ability, StopWatcher(_)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri uri(""); + Urie uri(""); FileAccessExtStubImpl impl(ability, nullptr); int result = impl.StopWatcher(uri); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -964,12 +999,14 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_MoveItem_0000, tes { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_MoveItem_0000"; try { - Uri sourceFile(""); - Uri targetParent(""); + Urie sourceFile(""); + Urie targetParent(""); vector moveResult; FileAccessExtStubImpl impl(nullptr, nullptr); - int result = impl.MoveItem(sourceFile, targetParent, moveResult); - EXPECT_EQ(result, E_IPCS); + int retCode; + int result = impl.MoveItem(sourceFile, targetParent, moveResult, retCode); + result = retCode; + EXPECT_EQ(result, ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "FileAccessExtStubImplTest occurs an exception."; } @@ -991,11 +1028,13 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_MoveItem_0001, tes try { EXPECT_CALL(*ability, MoveItem(_, _, _, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri sourceFile(""); - Uri targetParent(""); + Urie sourceFile(""); + Urie targetParent(""); vector moveResult; FileAccessExtStubImpl impl(ability, nullptr); - int result = impl.MoveItem(sourceFile, targetParent, moveResult); + int retCode; + int result = impl.MoveItem(sourceFile, targetParent, moveResult, retCode); + result = retCode; EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "FileAccessExtStubImplTest occurs an exception."; @@ -1016,10 +1055,10 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_MoveFile_0000, tes { GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-begin file_access_ext_stub_impl_MoveFile_0000"; try { - Uri sourceFile(""); - Uri targetParent(""); + Urie sourceFile(""); + Urie targetParent(""); string fileName; - Uri newFile(""); + Urie newFile(""); FileAccessExtStubImpl impl(nullptr, nullptr); int result = impl.MoveFile(sourceFile, targetParent, fileName, newFile); EXPECT_EQ(result, E_IPCS); @@ -1044,10 +1083,10 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_MoveFile_0001, tes try { EXPECT_CALL(*ability, MoveFile(_, _, _, _)).WillOnce(Return(OHOS::FileAccessFwk::ERR_OK)); - Uri sourceFile(""); - Uri targetParent(""); + Urie sourceFile(""); + Urie targetParent(""); string fileName; - Uri newFile(""); + Urie newFile(""); FileAccessExtStubImpl impl(ability, nullptr); int result = impl.MoveFile(sourceFile, targetParent, fileName, newFile); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -1056,4 +1095,4 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_MoveFile_0001, tes } GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-end file_access_ext_stub_impl_MoveFile_0001"; } -} \ No newline at end of file +} diff --git a/test/unittest/file_access_service_proxy_test.cpp b/test/unittest/file_access_service_proxy_test.cpp deleted file mode 100644 index 8df02136e2f805918098b19bc82813eb8c36d73c..0000000000000000000000000000000000000000 --- a/test/unittest/file_access_service_proxy_test.cpp +++ /dev/null @@ -1,832 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include - -#include "assistant.h" -#include "file_access_extension_info.h" -#include "file_access_framework_errno.h" -#include "file_access_service_proxy.h" -#include "file_access_service_mock.h" -#include "if_system_ability_manager_mock.h" -#include "iservice_registry.h" -#include "message_parcel_mock.h" - -int32_t OHOS::SystemAbilityLoadCallbackStub::OnRemoteRequest(unsigned int, OHOS::MessageParcel&, OHOS::MessageParcel&, - OHOS::MessageOption&) -{ - return 0; -} - -namespace OHOS::FileAccessFwk { -using namespace std; -using namespace testing; -using namespace testing::ext; - -FileAccessServiceStub::FileAccessServiceStub() {} - -FileAccessServiceStub::~FileAccessServiceStub() {} - -int32_t FileAccessServiceStub::OnRemoteRequest(unsigned int, OHOS::MessageParcel&, OHOS::MessageParcel&, - OHOS::MessageOption&) -{ - return 0; -} - -class IFileAccessObserverMock : public IFileAccessObserver { -public: - MOCK_METHOD1(OnChange, void(NotifyMessage ¬ifyMessage)); - MOCK_METHOD0(AsObject, sptr()); -}; - -class AbilityConnectionMock : public OHOS::AAFwk::IAbilityConnection { -public: - AbilityConnectionMock() = default; - ~AbilityConnectionMock() = default; -public: - void OnAbilityConnectDone(const AppExecFwk::ElementName&, const sptr&, int) override {} - void OnAbilityDisconnectDone(const AppExecFwk::ElementName&, int) override {} - MOCK_METHOD0(AsObject, sptr()); -}; - -class TestObject : public IRemoteBroker { -public: - DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.FileAccessFwk.TestObject"); -}; - -class RemoteObjectMock : public IRemoteStub { -public: - RemoteObjectMock() = default; - ~RemoteObjectMock() = default; -}; - -class FileAccessServiceProxyTest : public testing::Test { -public: - static void SetUpTestCase(void) - { - Assistant::ins_ = insMoc; - MessageParcelMock::messageParcel = msg; - SystemAbilityManagerClient::GetInstance().systemAbilityManager_ = sptr(samgr.get()); - } - static void TearDownTestCase() - { - insMoc = nullptr; - msg = nullptr; - samgr = nullptr; - impl = nullptr; - Assistant::ins_ = nullptr; - MessageParcelMock::messageParcel = nullptr; - SystemAbilityManagerClient::GetInstance().systemAbilityManager_ = nullptr; - } - void SetUp() {} - void TearDown() {} -public: - static inline shared_ptr insMoc = make_shared(); - static inline shared_ptr msg = make_shared(); - static inline sptr impl = sptr(new FileAccessServiceMock()); - static inline shared_ptr samgr = make_shared(); -}; - -/** - * @tc.number: user_file_service_file_access_service_proxy_GetInstance_0001 - * @tc.name: file_access_service_proxy_GetInstance_0001 - * @tc.desc: Test function of GetInstance interface for ERROR because samgr is nullptr. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_GetInstance_0001, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_GetInstance_0001"; - try { - EXPECT_CALL(*insMoc, Bool()).WillOnce(Return(false)); - - shared_ptr proxy = make_shared(nullptr); - proxy->serviceProxy_ = nullptr; - auto result = proxy->GetInstance(); - EXPECT_TRUE(result == nullptr) << "GetInstance Faild"; - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_GetInstance_0001"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_GetInstance_0002 - * @tc.name: file_access_service_proxy_GetInstance_0002 - * @tc.desc: Test function of GetInstance interface for ERROR because samgr->LoadSystemAbility doesn't return ERR_OK. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_GetInstance_0002, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_GetInstance_0002"; - try { - EXPECT_CALL(*insMoc, Bool()).WillOnce(Return(true)); - EXPECT_CALL(*samgr, LoadSystemAbility(An(), An&>())) - .WillOnce(Return(E_PERMISSION)); - - shared_ptr proxy = make_shared(nullptr); - proxy->serviceProxy_ = nullptr; - auto result = proxy->GetInstance(); - EXPECT_TRUE(result == nullptr); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_GetInstance_0002"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_GetInstance_0003 - * @tc.name: file_access_service_proxy_GetInstance_0003 - * @tc.desc: Test function of GetInstance interface for ERROR because wait_for timeout. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_GetInstance_0003, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_GetInstance_0003"; - try { - EXPECT_CALL(*insMoc, Bool()).WillOnce(Return(true)); - EXPECT_CALL(*samgr, LoadSystemAbility(An(), An&>())) - .WillOnce(Return(ERR_OK)); - - shared_ptr proxy = make_shared(nullptr); - proxy->serviceProxy_ = nullptr; - auto result = proxy->GetInstance(); - EXPECT_TRUE(result == nullptr); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_GetInstance_0003"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_OnChange_0000 - * @tc.name: file_access_service_proxy_OnChange_0000 - * @tc.desc: Test function of OnChange interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_OnChange_0000, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_OnChange_0000"; - try { - shared_ptr proxy = make_shared(impl); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(false)); - auto result = proxy->OnChange(Uri(""), NotifyType::NOTIFY_ADD); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(false)); - result = proxy->OnChange(Uri(""), NotifyType::NOTIFY_ADD); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteInt32(_)).WillOnce(Return(false)); - result = proxy->OnChange(Uri(""), NotifyType::NOTIFY_ADD); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteInt32(_)).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(E_URIS)); - result = proxy->OnChange(Uri(""), NotifyType::NOTIFY_ADD); - EXPECT_EQ(result, E_URIS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteInt32(_)).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(Return(false)); - result = proxy->OnChange(Uri(""), NotifyType::NOTIFY_ADD); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteInt32(_)).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(Return(true)); - result = proxy->OnChange(Uri(""), NotifyType::NOTIFY_ADD); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteInt32(_)).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(ERR_OK), Return(true))); - result = proxy->OnChange(Uri(""), NotifyType::NOTIFY_ADD); - EXPECT_EQ(result, ERR_OK); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_OnChange_0000"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_RegisterNotify_0000 - * @tc.name: file_access_service_proxy_RegisterNotify_0000 - * @tc.desc: Test function of RegisterNotify interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_RegisterNotify_0000, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_RegisterNotify_0000"; - try { - shared_ptr proxy = make_shared(impl); - - Uri uri(""); - bool notifyForDescendants = false; - shared_ptr info = nullptr; - sptr observer = sptr(new IFileAccessObserverMock()); - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(false)); - auto result = proxy->RegisterNotify(uri, notifyForDescendants, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(false)); - result = proxy->RegisterNotify(uri, notifyForDescendants, observer, info); - EXPECT_EQ(result, E_IPCS); - - sptr obs = nullptr; - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - result = proxy->RegisterNotify(uri, notifyForDescendants, obs, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*observer, AsObject()).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(false)); - result = proxy->RegisterNotify(uri, notifyForDescendants, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*observer, AsObject()).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(false)); - result = proxy->RegisterNotify(uri, notifyForDescendants, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*observer, AsObject()).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - result = proxy->RegisterNotify(uri, notifyForDescendants, observer, info); - EXPECT_EQ(result, E_GETINFO); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_RegisterNotify_0000"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_RegisterNotify_0100 - * @tc.name: file_access_service_proxy_RegisterNotify_0100 - * @tc.desc: Test function of RegisterNotify interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_RegisterNotify_0100, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_RegisterNotify_0100"; - try { - shared_ptr proxy = make_shared(impl); - - Uri uri(""); - bool notifyForDescendants = false; - shared_ptr info = make_shared(); - sptr observer = sptr(new IFileAccessObserverMock()); - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)).WillOnce(Return(false)); - EXPECT_CALL(*observer, AsObject()).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - auto result = proxy->RegisterNotify(uri, notifyForDescendants, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)).WillOnce(Return(true)); - EXPECT_CALL(*observer, AsObject()).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)) - .WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(E_URIS)); - result = proxy->RegisterNotify(uri, notifyForDescendants, observer, info); - EXPECT_EQ(result, E_URIS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)).WillOnce(Return(true)); - EXPECT_CALL(*observer, AsObject()).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)) - .WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(Return(false)); - result = proxy->RegisterNotify(uri, notifyForDescendants, observer, info); - EXPECT_EQ(result, E_IPCS); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_RegisterNotify_0100"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_RegisterNotify_0200 - * @tc.name: file_access_service_proxy_RegisterNotify_0200 - * @tc.desc: Test function of RegisterNotify interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_RegisterNotify_0200, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_RegisterNotify_0100"; - try { - shared_ptr proxy = make_shared(impl); - - Uri uri(""); - bool notifyForDescendants = false; - shared_ptr info = make_shared(); - sptr observer = sptr(new IFileAccessObserverMock()); - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)).WillOnce(Return(true)); - EXPECT_CALL(*observer, AsObject()).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)) - .WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(Return(true)); - auto result = proxy->RegisterNotify(uri, notifyForDescendants, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)).WillOnce(Return(true)); - EXPECT_CALL(*observer, AsObject()).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)) - .WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(ERR_OK), Return(true))); - result = proxy->RegisterNotify(uri, notifyForDescendants, observer, info); - EXPECT_EQ(result, ERR_OK); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_RegisterNotify_0200"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_UnregisterNotifyInternal_0000 - * @tc.name: file_access_service_proxy_UnregisterNotifyInternal_0000 - * @tc.desc: Test function of UnregisterNotifyInternal interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_UnregisterNotifyInternal_0000, - testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_UnregisterNotifyInternal_0000"; - try { - shared_ptr proxy = make_shared(impl); - MessageParcel data; - - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(E_URIS)); - auto result = proxy->UnregisterNotifyInternal(data); - EXPECT_EQ(result, E_URIS); - - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(Return(false)); - result = proxy->UnregisterNotifyInternal(data); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(Return(true)); - result = proxy->UnregisterNotifyInternal(data); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(ERR_OK), Return(true))); - result = proxy->UnregisterNotifyInternal(data); - EXPECT_EQ(result, ERR_OK); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_UnregisterNotifyInternal_0000"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_UnregisterNotify_0000 - * @tc.name: file_access_service_proxy_UnregisterNotify_0000 - * @tc.desc: Test function of UnregisterNotify interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_UnregisterNotify_0000, - testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_UnregisterNotify_0000"; - try { - shared_ptr proxy = make_shared(impl); - Uri uri(""); - sptr observer = nullptr; - shared_ptr info = nullptr; - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(false)); - auto result = proxy->UnregisterNotify(uri, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(false)); - result = proxy->UnregisterNotify(uri, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(false)); - result = proxy->UnregisterNotify(uri, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - result = proxy->UnregisterNotify(uri, observer, info); - EXPECT_EQ(result, E_GETINFO); - - observer = sptr(new IFileAccessObserverMock()); - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(false)); - result = proxy->UnregisterNotify(uri, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - EXPECT_CALL(*observer, AsObject()).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(false)); - result = proxy->UnregisterNotify(uri, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - EXPECT_CALL(*observer, AsObject()).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - result = proxy->UnregisterNotify(uri, observer, info); - EXPECT_EQ(result, E_GETINFO); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_UnregisterNotify_0000"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_ConnectFileExtAbility_0000 - * @tc.name: file_access_service_proxy_ConnectFileExtAbility_0000 - * @tc.desc: Test function of ConnectFileExtAbility interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_ConnectFileExtAbility_0000, - testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_ConnectFileExtAbility_0000"; - try { - shared_ptr proxy = make_shared(impl); - AAFwk::Want want; - sptr connection = nullptr; - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(false)); - auto result = proxy->ConnectFileExtAbility(want, connection); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(false)); - result = proxy->ConnectFileExtAbility(want, connection); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - result = proxy->ConnectFileExtAbility(want, connection); - EXPECT_EQ(result, E_GETINFO); - - connection = sptr(new AbilityConnectionMock()); - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(nullptr)); - result = proxy->ConnectFileExtAbility(want, connection); - EXPECT_EQ(result, E_GETINFO); - - auto obj = sptr(new (std::nothrow) RemoteObjectMock()); - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(obj)).WillOnce(Return(obj)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(false)); - result = proxy->ConnectFileExtAbility(want, connection); - EXPECT_EQ(result, E_IPCS); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_ConnectFileExtAbility_0000"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_ConnectFileExtAbility_0100 - * @tc.name: file_access_service_proxy_ConnectFileExtAbility_0100 - * @tc.desc: Test function of ConnectFileExtAbility interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_ConnectFileExtAbility_0100, - testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_ConnectFileExtAbility_0000"; - try { - shared_ptr proxy = make_shared(impl); - AAFwk::Want want; - sptr connection = sptr(new AbilityConnectionMock()); - auto obj = sptr(new (std::nothrow) RemoteObjectMock()); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(obj)).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(E_IPCS)); - auto result = proxy->ConnectFileExtAbility(want, connection); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(obj)).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(DoAll(Return(false))); - result = proxy->ConnectFileExtAbility(want, connection); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(obj)).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(E_IPCS), Return(true))); - result = proxy->ConnectFileExtAbility(want, connection); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(obj)).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(ERR_OK), Return(true))); - result = proxy->ConnectFileExtAbility(want, connection); - EXPECT_EQ(result, ERR_OK); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_ConnectFileExtAbility_0100"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_DisConnectFileExtAbility_0000 - * @tc.name: file_access_service_proxy_DisConnectFileExtAbility_0000 - * @tc.desc: Test function of DisConnectFileExtAbility interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_DisConnectFileExtAbility_0000, - testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_DisConnectFileExtAbility_0000"; - try { - shared_ptr proxy = make_shared(impl); - sptr connection = nullptr; - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(false)); - auto result = proxy->DisConnectFileExtAbility(connection); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - result = proxy->DisConnectFileExtAbility(connection); - EXPECT_EQ(result, E_GETINFO); - - connection = sptr(new AbilityConnectionMock()); - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(nullptr)); - result = proxy->DisConnectFileExtAbility(connection); - EXPECT_EQ(result, E_GETINFO); - - auto obj = sptr(new (std::nothrow) RemoteObjectMock()); - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(obj)).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(false)); - result = proxy->DisConnectFileExtAbility(connection); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(obj)).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(E_IPCS)); - result = proxy->DisConnectFileExtAbility(connection); - EXPECT_EQ(result, E_IPCS); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_DisConnectFileExtAbility_0000"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_DisConnectFileExtAbility_0100 - * @tc.name: file_access_service_proxy_DisConnectFileExtAbility_0100 - * @tc.desc: Test function of DisConnectFileExtAbility interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_DisConnectFileExtAbility_0100, - testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_DisConnectFileExtAbility_0100"; - try { - shared_ptr proxy = make_shared(impl); - sptr connection = sptr(new AbilityConnectionMock()); - auto obj = sptr(new (std::nothrow) RemoteObjectMock()); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(obj)).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(DoAll(Return(false))); - auto result = proxy->DisConnectFileExtAbility(connection); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(obj)).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(E_IPCS), Return(true))); - result = proxy->DisConnectFileExtAbility(connection); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*connection, AsObject()).WillOnce(Return(obj)).WillOnce(Return(nullptr)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(ERR_OK), Return(true))); - result = proxy->DisConnectFileExtAbility(connection); - EXPECT_EQ(result, ERR_OK); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_DisConnectFileExtAbility_0100"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_UnregisterNotify_0100 - * @tc.name: file_access_service_proxy_UnregisterNotify_0100 - * @tc.desc: Test function of UnregisterNotify interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_UnregisterNotify_0100, - testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_UnregisterNotify_0100"; - try { - Uri uri(""); - sptr observer = nullptr; - shared_ptr proxy = make_shared(impl); - shared_ptr info = make_shared(); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)).WillOnce(Return(false)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - auto result = proxy->UnregisterNotify(uri, observer, info); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteBool(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(E_IPCS)); - result = proxy->UnregisterNotify(uri, observer, info); - EXPECT_EQ(result, E_IPCS); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_UnregisterNotify_0100"; -} - -/** - * @tc.number: user_file_service_file_access_service_proxy_GetExensionProxy_0000 - * @tc.name: file_access_service_proxy_GetExensionProxy_0000 - * @tc.desc: Test function of GetExtensionProxy interface for ERROR. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 3 - * @tc.require: issuesI8Y05B - */ -HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_GetExensionProxy_0000, testing::ext::TestSize.Level1) -{ - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_GetExensionProxy_0000"; - try { - shared_ptr proxy = make_shared(impl); - shared_ptr info = nullptr; - sptr extensionProxy = nullptr; - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(false)); - auto result = proxy->GetExtensionProxy(info, extensionProxy); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - result = proxy->GetExtensionProxy(info, extensionProxy); - EXPECT_EQ(result, E_GETINFO); - - info = make_shared(); - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(false)); - result = proxy->GetExtensionProxy(info, extensionProxy); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(E_URIS)); - result = proxy->GetExtensionProxy(info, extensionProxy); - EXPECT_EQ(result, E_URIS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(Return(false)); - result = proxy->GetExtensionProxy(info, extensionProxy); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(Return(true)); - result = proxy->GetExtensionProxy(info, extensionProxy); - EXPECT_EQ(result, E_IPCS); - - EXPECT_CALL(*msg, WriteInterfaceToken(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteParcelable(_)).WillOnce(Return(true)); - EXPECT_CALL(*msg, WriteRemoteObject(An&>())).WillOnce(Return(true)); - EXPECT_CALL(*impl, SendRequest(_, _, _, _)).WillOnce(Return(ERR_OK)); - EXPECT_CALL(*msg, ReadInt32(_)).WillOnce(DoAll(SetArgReferee<0>(ERR_OK), Return(true))); - EXPECT_CALL(*msg, ReadRemoteObject()).WillOnce(Return(nullptr)); - result = proxy->GetExtensionProxy(info, extensionProxy); - EXPECT_EQ(result, E_IPCS); - } catch (...) { - GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; - } - GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-end file_access_service_proxy_GetExensionProxy_0000"; -} -} \ No newline at end of file diff --git a/test/unittest/js_file_access_ext_ability_test.cpp b/test/unittest/js_file_access_ext_ability_test.cpp index eceedb8eb0b592d2a16f6df2d76ad15ab08d441d..a7a0b642c3329fcb44709d121855e5d679699c22 100644 --- a/test/unittest/js_file_access_ext_ability_test.cpp +++ b/test/unittest/js_file_access_ext_ability_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -18,9 +18,9 @@ #include "assistant.h" #include "extension_context.h" -#include "file_access_ext_stub.h" +#include "file_access_ext_base_stub.h" #include "file_access_service_mock.h" -#include "file_access_service_proxy.h" +#include "file_access_service_client.h" #include "js_file_access_ext_ability.h" #include "js_native_api_types.h" #include "native_reference_mock.h" @@ -37,46 +37,47 @@ const int ARG_INDEX_THIRD = 3; const int ARG_INDEX_FOUR = 4; const int ARG_INDEX_FIFTH = 5; -FileAccessServiceStub::FileAccessServiceStub() {} - -FileAccessServiceStub::~FileAccessServiceStub() {} - -int32_t FileAccessServiceStub::OnRemoteRequest(unsigned int, OHOS::MessageParcel&, OHOS::MessageParcel&, +int32_t FileAccessServiceBaseStub::OnRemoteRequest(unsigned int, OHOS::MessageParcel&, OHOS::MessageParcel&, OHOS::MessageOption&) { return 0; } -int32_t FileAccessServiceProxy::RegisterNotify(Uri, bool, const sptr &, - const std::shared_ptr &) +int32_t FileAccessServiceBaseProxy::RegisterNotify(const Uri &, bool, const sptr &, + const ConnectExtensionInfo &) { return 0; } -int32_t FileAccessServiceProxy::OnChange(Uri uri, NotifyType notifyType) +int32_t FileAccessServiceBaseProxy::OnChange(const Uri &uri, NotifyType notifyType) { return ERR_OK; } -int32_t FileAccessServiceProxy::GetExtensionProxy(const std::shared_ptr &, +int32_t FileAccessServiceBaseProxy::GetExtensionProxy(const ConnectExtensionInfo &, sptr &) { return 0; } -int32_t FileAccessServiceProxy::UnregisterNotify(Uri, const sptr &, - const std::shared_ptr &) +int32_t FileAccessServiceBaseProxy::UnregisterNotify(const Uri &, const sptr &, + const ConnectExtensionInfo &) { return 0; } -int32_t FileAccessServiceProxy::ConnectFileExtAbility(const AAFwk::Want &, +int32_t FileAccessServiceBaseProxy::UnregisterNotifyNoObserver(const Uri &, const ConnectExtensionInfo &) +{ + return 0; +} + +int32_t FileAccessServiceBaseProxy::ConnectFileExtAbility(const AAFwk::Want &, const sptr&) { return 0; } -int32_t FileAccessServiceProxy::DisConnectFileExtAbility(const sptr&) +int32_t FileAccessServiceBaseProxy::DisConnectFileExtAbility(const sptr&) { return 0; } @@ -89,11 +90,7 @@ void FileAccessExtAbility::Init(const std::shared_ptr &recor ExtensionBase<>::Init(record, application, handler, token); } -FileAccessExtStub::FileAccessExtStub() {} - -FileAccessExtStub::~FileAccessExtStub() {} - -int32_t FileAccessExtStub::OnRemoteRequest(unsigned int, OHOS::MessageParcel&, OHOS::MessageParcel&, +int32_t FileAccessExtBaseStub::OnRemoteRequest(unsigned int, OHOS::MessageParcel&, OHOS::MessageParcel&, OHOS::MessageOption&) { return 0; @@ -123,9 +120,9 @@ public: static inline napi_env env = reinterpret_cast(&(jsRuntime->GetNativeEngine())); }; -sptr FileAccessServiceProxy::GetInstance() +sptr FileAccessServiceClient::GetInstance() { - return iface_cast(JsFileAccessExtAbilityTest::impl); + return iface_cast(JsFileAccessExtAbilityTest::impl); } /** @@ -1963,4 +1960,4 @@ HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Rename_0003, tes #include "js_file_access_ext_ability_ex_test.cpp" #include "js_file_access_ext_ability_other_test.cpp" -} \ No newline at end of file +} diff --git a/test/unittest/mock/file_access_service_mock.h b/test/unittest/mock/file_access_service_mock.h index 830cc95df7c76f28a5743fd0cd3c9dc44cc8eb05..6e8f44924025591511f4efcf1732674194c8dde7 100644 --- a/test/unittest/mock/file_access_service_mock.h +++ b/test/unittest/mock/file_access_service_mock.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -16,19 +16,23 @@ #ifndef FILE_ACCESS_SERVICE_MOCK_H #define FILE_ACCESS_SERVICE_MOCK_H -#include "file_access_service_stub.h" +#include "file_access_service_base_stub.h" namespace OHOS { namespace FileAccessFwk { using Uri = OHOS::Uri; -class FileAccessServiceMock : public FileAccessServiceStub { +class FileAccessServiceMock : public FileAccessServiceBaseStub { public: - MOCK_METHOD2(OnChange, int32_t(Uri uri, NotifyType notifyType)); - MOCK_METHOD4(RegisterNotify, int32_t(Uri uri, bool notifyForDescendants, - const sptr &observer, const std::shared_ptr &info)); - MOCK_METHOD3(UnregisterNotify, int32_t(Uri uri, const sptr &observer, - const std::shared_ptr &info)); - MOCK_METHOD2(GetExtensionProxy, int32_t(const std::shared_ptr &info, + FileAccessServiceMock() {} + + ~FileAccessServiceMock() {} + MOCK_METHOD2(OnChange, int32_t(const Uri &uri, NotifyType notifyType)); + MOCK_METHOD4(RegisterNotify, int32_t(const Uri &uri, bool notifyForDescendants, + const sptr &observer, const ConnectExtensionInfo& info)); + MOCK_METHOD3(UnregisterNotify, int32_t(const Uri &uri, const sptr &observer, + const ConnectExtensionInfo& info)); + MOCK_METHOD2(UnregisterNotifyNoObserver, int32_t(const Uri &uri, const ConnectExtensionInfo& info)); + MOCK_METHOD2(GetExtensionProxy, int32_t(const ConnectExtensionInfo& info, sptr &extensionProxy)); MOCK_METHOD0(AsObject, sptr()); MOCK_METHOD2(CleanAllNotify, int32_t(Uri uri, const std::shared_ptr &info)); @@ -41,4 +45,4 @@ public: }; } // namespace FileAccessFwk } // namespace OHOS -#endif // FILE_ACCESS_SERVICE_MOCK_H \ No newline at end of file +#endif // FILE_ACCESS_SERVICE_MOCK_H