From cbf76f128a9cf9f21c3ca121c754e2bd95c6056d Mon Sep 17 00:00:00 2001 From: BrainL Date: Sun, 26 Jan 2025 21:08:47 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=85=AC=E5=85=B1=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=20IDL=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- bundle.json | 2 +- .../js/napi/file_access_module/BUILD.gn | 1 + .../napi_observer_callback.cpp | 2 +- .../napi_observer_callback.h | 11 +- interfaces/inner_api/file_access/BUILD.gn | 20 +- .../file_access/IFileAccessExtBase.idl | 45 + .../include/file_access_ext_ability.h | 4 +- .../include/file_access_ext_base_proxy.h | 129 ++ .../include/file_access_ext_base_stub.h | 27 +- .../include/file_access_ext_proxy.h | 68 - .../include/file_access_ext_stub.h | 63 - .../include/file_access_ext_stub_impl.h | 38 +- .../include/file_access_extension_info.h | 38 +- .../file_access/include/file_access_helper.h | 2 +- .../include/ifile_access_ext_base.h | 179 ++- .../include/js_file_access_ext_ability.h | 4 +- .../inner_api/file_access/include/uri_ext.h | 100 ++ .../libfile_access_extension_ability_kit.map | 4 +- .../src/app_file_access_ext_connection.cpp | 10 +- .../src/file_access_ext_ability.cpp | 4 +- .../src/file_access_ext_base_proxy.cpp | 898 ++++++++++++ .../src/file_access_ext_base_stub.cpp | 498 +++++++ .../file_access/src/file_access_ext_proxy.cpp | 1204 ----------------- .../file_access/src/file_access_ext_stub.cpp | 807 ----------- .../src/file_access_ext_stub_impl.cpp | 199 ++- .../file_access/src/file_access_helper.cpp | 139 +- .../src/js_file_access_ext_ability.cpp | 15 +- .../inner_api/file_access/src/uri_ext.cpp | 504 +++++++ services/BUILD.gn | 86 +- .../IFileAccessObserver.idl | 12 +- ...ack_proxy.h => IFileAccessServiceBase.idl} | 41 +- .../corpus/init => services/NotifyType.idl | 12 +- services/libfile_access_service.map | 9 +- .../include/file_access_ext_connection.h | 2 +- .../include/file_access_service.h | 21 +- ...e_proxy.h => file_access_service_client.h} | 28 +- .../include/file_access_service_stub.h | 49 - .../include/iability_connection.h | 10 +- .../include/ifile_access_service_base.h | 48 - .../include/observer_callback_stub.h | 45 - .../src/file_access_ext_connection.cpp | 4 +- .../src/file_access_service.cpp | 95 +- .../src/file_access_service_client.cpp | 121 ++ .../src/file_access_service_proxy.cpp | 446 ------ .../src/file_access_service_stub.cpp | 265 ---- .../src/observer_callback_proxy.cpp | 68 - .../src/observer_callback_stub.cpp | 83 -- test/fuzztest/BUILD.gn | 3 - .../externalfileaccess_fuzzer/BUILD.gn | 1 + .../externalfileaccessaccess_fuzzer.cpp | 4 +- .../externalfileaccesscreatefile_fuzzer.cpp | 4 +- .../externalfileaccessdelete_fuzzer.cpp | 4 +- ...cessgetfileinfofromrelativepath_fuzzer.cpp | 4 +- ...nalfileaccessgetfileinfofromuri_fuzzer.cpp | 4 +- .../externalfileaccessgetroots_fuzzer.cpp | 4 +- .../externalfileaccesslistfile_fuzzer.cpp | 4 +- .../externalfileaccessmkdir_fuzzer.cpp | 4 +- .../externalfileaccessmove_fuzzer.cpp | 4 +- .../externalfileaccessopenfile_fuzzer.cpp | 4 +- .../externalfileaccessrename_fuzzer.cpp | 4 +- .../externalfileaccessscanfile_fuzzer.cpp | 4 +- .../fileaccessextconnection_fuzzer/BUILD.gn | 1 + .../fileaccessextstub_fuzzer/BUILD.gn | 58 - .../fileaccessextabilitymock.h | 57 - .../fileaccessextstub_fuzzer.cpp | 400 ------ .../fileaccessextstub_fuzzer/project.xml | 25 - .../fileaccessextstubbranch_fuzzer/BUILD.gn | 58 - .../corpus/init | 16 - .../fileaccessextabilitymock.h | 57 - .../fileaccessextstubbranch_fuzzer.cpp | 923 ------------- .../project.xml | 25 - .../fileaccessserviceproxy_fuzzer/BUILD.gn | 4 +- .../fileaccessserviceproxy_fuzzer/corpus/init | 30 +- .../fileaccessservicemock.h | 81 +- .../fileaccessserviceproxy_fuzzer.cpp | 19 +- .../fileaccessserviceproxy_fuzzer.h | 40 +- .../fileaccessserviceproxy_fuzzer/project.xml | 50 +- .../fileaccessservicestub_fuzzer/BUILD.gn | 55 - .../fileaccessservicestub_fuzzer/corpus/init | 16 - .../fileaccessservicemock.h | 41 - .../fileaccessservicestub_fuzzer.cpp | 138 -- .../fileaccessservicestub_fuzzer.h | 21 - .../fileaccessservicestub_fuzzer/project.xml | 25 - test/unittest/BUILD.gn | 68 +- .../external_file_access_test_info.cpp | 10 +- .../external_file_access_test_operations.cpp | 6 - test/unittest/external_notify_test.cpp | 20 +- .../file_access_ext_stub_impl_test.cpp | 141 +- .../file_access_service_proxy_test.cpp | 832 ------------ .../js_file_access_ext_ability_test.cpp | 41 +- .../mock/file_access_ext_ability_mock.h | 4 +- test/unittest/mock/file_access_service_mock.h | 20 +- 92 files changed, 3307 insertions(+), 6487 deletions(-) create mode 100644 interfaces/inner_api/file_access/IFileAccessExtBase.idl create mode 100644 interfaces/inner_api/file_access/include/file_access_ext_base_proxy.h rename services/native/file_access_service/include/iobserver_callback.h => interfaces/inner_api/file_access/include/file_access_ext_base_stub.h (57%) delete mode 100644 interfaces/inner_api/file_access/include/file_access_ext_proxy.h delete mode 100644 interfaces/inner_api/file_access/include/file_access_ext_stub.h create mode 100644 interfaces/inner_api/file_access/include/uri_ext.h create mode 100644 interfaces/inner_api/file_access/src/file_access_ext_base_proxy.cpp create mode 100644 interfaces/inner_api/file_access/src/file_access_ext_base_stub.cpp delete mode 100644 interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp delete mode 100644 interfaces/inner_api/file_access/src/file_access_ext_stub.cpp create mode 100644 interfaces/inner_api/file_access/src/uri_ext.cpp rename test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.h => services/IFileAccessObserver.idl (71%) rename services/{native/file_access_service/include/observer_callback_proxy.h => IFileAccessServiceBase.idl} (34%) rename test/fuzztest/fileaccessextstub_fuzzer/corpus/init => services/NotifyType.idl (71%) rename services/native/file_access_service/include/{file_access_service_proxy.h => file_access_service_client.h} (60%) delete mode 100644 services/native/file_access_service/include/file_access_service_stub.h rename test/fuzztest/fileaccessextstub_fuzzer/fileaccessextstub_fuzzer.h => services/native/file_access_service/include/iability_connection.h (74%) delete mode 100644 services/native/file_access_service/include/ifile_access_service_base.h delete mode 100644 services/native/file_access_service/include/observer_callback_stub.h create mode 100644 services/native/file_access_service/src/file_access_service_client.cpp delete mode 100644 services/native/file_access_service/src/file_access_service_proxy.cpp delete mode 100644 services/native/file_access_service/src/file_access_service_stub.cpp delete mode 100644 services/native/file_access_service/src/observer_callback_proxy.cpp delete mode 100644 services/native/file_access_service/src/observer_callback_stub.cpp delete mode 100644 test/fuzztest/fileaccessextstub_fuzzer/BUILD.gn delete mode 100644 test/fuzztest/fileaccessextstub_fuzzer/fileaccessextabilitymock.h delete mode 100644 test/fuzztest/fileaccessextstub_fuzzer/fileaccessextstub_fuzzer.cpp delete mode 100644 test/fuzztest/fileaccessextstub_fuzzer/project.xml delete mode 100644 test/fuzztest/fileaccessextstubbranch_fuzzer/BUILD.gn delete mode 100644 test/fuzztest/fileaccessextstubbranch_fuzzer/corpus/init delete mode 100644 test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextabilitymock.h delete mode 100644 test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.cpp delete mode 100644 test/fuzztest/fileaccessextstubbranch_fuzzer/project.xml delete mode 100644 test/fuzztest/fileaccessservicestub_fuzzer/BUILD.gn delete mode 100644 test/fuzztest/fileaccessservicestub_fuzzer/corpus/init delete mode 100644 test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicemock.h delete mode 100644 test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicestub_fuzzer.cpp delete mode 100644 test/fuzztest/fileaccessservicestub_fuzzer/fileaccessservicestub_fuzzer.h delete mode 100644 test/fuzztest/fileaccessservicestub_fuzzer/project.xml delete mode 100644 test/unittest/file_access_service_proxy_test.cpp diff --git a/bundle.json b/bundle.json index 70cea83e..adb614db 100644 --- a/bundle.json +++ b/bundle.json @@ -68,7 +68,7 @@ "file_access_ext_ability.h", "file_access_extension_info.h", "file_access_ext_stub_impl.h", - "file_access_ext_proxy.h" + "file_access_ext_base_proxy.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 b5c74e8a..d668b063 100644 --- a/frameworks/js/napi/file_access_module/BUILD.gn +++ b/frameworks/js/napi/file_access_module/BUILD.gn @@ -55,6 +55,7 @@ ohos_shared_library("fileaccess") { deps = [ "${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 = [ 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 748d7e6b..950fef65 100644 --- a/frameworks/js/napi/file_access_module/napi_observer_callback.cpp +++ b/frameworks/js/napi/file_access_module/napi_observer_callback.cpp @@ -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); 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 553b383b..b7466f55 100644 --- a/frameworks/js/napi/file_access_module/napi_observer_callback.h +++ b/frameworks/js/napi/file_access_module/napi_observer_callback.h @@ -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,14 +45,15 @@ 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; }; diff --git a/interfaces/inner_api/file_access/BUILD.gn b/interfaces/inner_api/file_access/BUILD.gn index 01583d6f..e5fa2380 100644 --- a/interfaces/inner_api/file_access/BUILD.gn +++ b/interfaces/inner_api/file_access/BUILD.gn @@ -11,9 +11,17 @@ # 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("ability_config") { visibility = [ ":*" ] include_dirs = [ @@ -54,16 +62,22 @@ ohos_shared_library("file_access_extension_ability_kit") { "${user_file_service_path}/services/native/file_access_service/include", ] + deps = [ + ":IFile_Access_Ext_Base", + "${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_base_proxy.cpp", + "src/file_access_ext_base_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 00000000..fadc98e6 --- /dev/null +++ b/interfaces/inner_api/file_access/IFileAccessExtBase.idl @@ -0,0 +1,45 @@ +/* + * 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. + */ + +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, + [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 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, + [in] boolean force); + [ipccode 19] void MoveFile([in] Urie sourceFile, [in] Urie targetParent, [in] String fileName, [out] Urie newFile); +} \ No newline at end of file diff --git a/interfaces/inner_api/file_access/include/file_access_ext_ability.h b/interfaces/inner_api/file_access/include/file_access_ext_ability.h index cebba000..1594acb0 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_ability.h @@ -53,7 +53,7 @@ public: const FileFilter &filter, std::vector &fileInfoVec); virtual int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec); - virtual int Query(const Uri &uri, std::vector &columns, std::vector &results); + virtual int Query(const Uri &uri, const std::vector &columns, std::vector &results); virtual int GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo); virtual int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo); virtual int GetRoots(std::vector &rootInfoVec); @@ -63,7 +63,7 @@ public: virtual int StopWatcher(const Uri &uri); virtual int MoveItem(const Uri &sourceFile, const Uri &targetParent, std::vector &moveResult, bool force = false); - virtual int MoveFile(const Uri &sourceFile, const Uri &targetParent, std::string &fileName, Uri &newFile); + virtual int MoveFile(const Uri &sourceFile, const Uri &targetParent, const std::string &fileName, Uri &newFile); virtual int GetFileInfoNum(const std::string &sourceFileUri, const FileFilter &filter, bool recursion, uint32_t &counts); private: diff --git a/interfaces/inner_api/file_access/include/file_access_ext_base_proxy.h b/interfaces/inner_api/file_access/include/file_access_ext_base_proxy.h new file mode 100644 index 00000000..032e754a --- /dev/null +++ b/interfaces/inner_api/file_access/include/file_access_ext_base_proxy.h @@ -0,0 +1,129 @@ +/* + * 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. + */ + +#ifndef OHOS_FILEACCESSFWK_FILEACCESSEXTBASEPROXY_H +#define OHOS_FILEACCESSFWK_FILEACCESSEXTBASEPROXY_H + +#include +#include "ifile_access_ext_base.h" + +namespace OHOS { +namespace FileAccessFwk { + +class FileAccessExtBaseProxy : public IRemoteProxy { +public: + explicit FileAccessExtBaseProxy( + const sptr& remote) + : IRemoteProxy(remote) + {} + + virtual ~FileAccessExtBaseProxy() + {} + + ErrCode OpenFile( + const Urie& uri, + int32_t flags, + int& fd) override; + + ErrCode CreateFile( + const Urie& parent, + const std::string& displayName, + Urie& newFile) override; + + ErrCode Mkdir( + const Urie& parent, + const std::string& displayName, + Urie& newFile) override; + + ErrCode Delete( + const Urie& sourceFile) override; + + ErrCode Move( + const Urie& sourceFile, + const Urie& targetParent, + Urie& newFile) override; + + ErrCode Copy( + const Urie& sourceUri, + const Urie& destUri, + std::vector& copyResult, + bool force) override; + + ErrCode CopyFile( + const Urie& sourceUri, + const Urie& destUri, + const std::string& fileName, + Urie& newFileUri) override; + + ErrCode Rename( + const Urie& sourceFile, + const std::string& displayName, + Urie& newFile) override; + + virtual int ListFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, + SharedMemoryInfo &memInfo) override; + + ErrCode ScanFile( + const FileInfo& fileInfo, + int64_t offset, + int64_t maxCount, + const FileFilter& filter, + std::vector& fileInfoVec) override; + + ErrCode Query( + const Urie& uri, + const std::vector& columns, + std::vector& results) override; + + ErrCode GetFileInfoFromUri( + const Urie& selectFile, + FileInfo& fileInfo) override; + + ErrCode GetFileInfoFromRelativePath( + const std::string& selectFile, + FileInfo& fileInfo) override; + + ErrCode GetRoots( + std::vector& rootInfoVec) override; + + ErrCode Access( + const Urie& uri, + bool& isExist) override; + + ErrCode StartWatcher( + const Urie& uri) override; + + ErrCode StopWatcher( + const Urie& uri) override; + + ErrCode MoveItem( + const Urie& sourceFile, + const Urie& targetParent, + std::vector& moveResult, + bool force) override; + + ErrCode MoveFile( + const Urie& sourceFile, + const Urie& targetParent, + const std::string& fileName, + Urie& newFile) override; + +private: + static inline BrokerDelegator delegator_; +}; +} // namespace FileAccessFwk +} // namespace OHOS +#endif // OHOS_FILEACCESSFWK_FILEACCESSEXTBASEPROXY_H + diff --git a/services/native/file_access_service/include/iobserver_callback.h b/interfaces/inner_api/file_access/include/file_access_ext_base_stub.h similarity index 57% rename from services/native/file_access_service/include/iobserver_callback.h rename to interfaces/inner_api/file_access/include/file_access_ext_base_stub.h index a55d3b0e..14abe5d9 100644 --- a/services/native/file_access_service/include/iobserver_callback.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_base_stub.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 Huawei Device Co., Ltd. + * 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 @@ -13,25 +13,24 @@ * limitations under the License. */ -#ifndef I_FILE_ACCESS_OBSERVER_H -#define I_FILE_ACCESS_OBSERVER_H +#ifndef OHOS_FILEACCESSFWK_FILEACCESSEXTBASESTUB_H +#define OHOS_FILEACCESSFWK_FILEACCESSEXTBASESTUB_H -#include "file_access_observer_common.h" -#include "iremote_broker.h" -#include "iremote_object.h" +#include +#include "ifile_access_ext_base.h" namespace OHOS { namespace FileAccessFwk { -class IFileAccessObserver : public IRemoteBroker { -public: - DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.FileAccessFwk.IFileAccessObserver"); +class FileAccessExtBaseStub : public IRemoteStub { public: - enum { - CMD_ONCHANGE = 0 - }; - virtual void OnChange(NotifyMessage ¬ifyMessage) = 0; + int32_t OnRemoteRequest( + uint32_t code, + MessageParcel& data, + MessageParcel& reply, + MessageOption& option) override; }; } // namespace FileAccessFwk } // namespace OHOS -#endif // I_FILE_ACCESS_OBSERVER_H +#endif // OHOS_FILEACCESSFWK_FILEACCESSEXTBASESTUB_H + 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 8fabc071..00000000 --- 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 b32f5473..00000000 --- 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 954b695e..91de88f7 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 @@ -20,44 +20,46 @@ #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 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, 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; + 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, + 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, bool force = false) override; - int MoveFile(const Uri &sourceFile, const Uri &targetParent, std::string &fileName, Uri &newFile) 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_; 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 2be9daa5..96aa7c6f 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 @@ -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()); 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 ade315c6..5bb74a29 100644 --- a/interfaces/inner_api/file_access/include/file_access_helper.h +++ b/interfaces/inner_api/file_access/include/file_access_helper.h @@ -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" 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 index 1c9cfe0a..5bc6eac6 100644 --- a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h +++ b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * 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 @@ -13,74 +13,147 @@ * limitations under the License. */ -#ifndef I_FILE_ACCESS_EXT_BASE_H -#define I_FILE_ACCESS_EXT_BASE_H +#ifndef OHOS_FILEACCESSFWK_IFILEACCESSEXTBASE_H +#define OHOS_FILEACCESSFWK_IFILEACCESSEXTBASE_H -#include #include -#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" +#include "uri_ext.h" + +using OHOS::FileAccessFwk::Result; +using OHOS::FileAccessFwk::FileInfo; +using OHOS::FileAccessFwk::FileFilter; +using OHOS::FileAccessFwk::SharedMemoryInfo; +using OHOS::FileAccessFwk::RootInfo; +using OHOS::FileAccessFwk::Urie; namespace OHOS { namespace FileAccessFwk { +enum class IFileAccessExtBaseIpcCode { + COMMAND_OPEN_FILE = 1, + COMMAND_CREATE_FILE = 2, + COMMAND_MKDIR = 3, + COMMAND_DELETE = 4, + COMMAND_MOVE = 5, + COMMAND_COPY = 6, + COMMAND_COPY_FILE = 17, + COMMAND_RENAME = 7, + COMMAND_LIST_FILE = 8, + COMMAND_SCAN_FILE = 9, + COMMAND_QUERY = 12, + COMMAND_GET_FILE_INFO_FROM_URI = 15, + COMMAND_GET_FILE_INFO_FROM_RELATIVE_PATH = 16, + COMMAND_GET_ROOTS = 13, + COMMAND_ACCESS = 14, + COMMAND_START_WATCHER = 10, + COMMAND_STOP_WATCHER = 11, + COMMAND_MOVE_ITEM = 18, + COMMAND_MOVE_FILE = 19, +}; + 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 ErrCode OpenFile( + const Urie& uri, + int32_t flags, + int& fd) = 0; + + virtual ErrCode CreateFile( + const Urie& parent, + const std::string& displayName, + Urie& newFile) = 0; + + virtual ErrCode Mkdir( + const Urie& parent, + const std::string& displayName, + Urie& newFile) = 0; + + virtual ErrCode Delete( + const Urie& sourceFile) = 0; + + virtual ErrCode Move( + const Urie& sourceFile, + const Urie& targetParent, + Urie& newFile) = 0; + + virtual ErrCode Copy( + const Urie& sourceUri, + const Urie& destUri, + std::vector& copyResult, + bool force) = 0; + + virtual ErrCode CopyFile( + const Urie& sourceUri, + const Urie& destUri, + const std::string& fileName, + Urie& newFileUri) = 0; + + virtual ErrCode Rename( + const Urie& sourceFile, + const std::string& displayName, + Urie& 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; + + virtual ErrCode ScanFile( + const FileInfo& fileInfo, + int64_t offset, + int64_t maxCount, + const FileFilter& filter, + std::vector& fileInfoVec) = 0; + + virtual ErrCode Query( + const Urie& uri, + const std::vector& columns, + std::vector& results) = 0; + + virtual ErrCode GetFileInfoFromUri( + const Urie& selectFile, + FileInfo& fileInfo) = 0; + + virtual ErrCode GetFileInfoFromRelativePath( + const std::string& selectFile, + FileInfo& fileInfo) = 0; + + virtual ErrCode GetRoots( + std::vector& rootInfoVec) = 0; + + virtual ErrCode Access( + const Urie& uri, + bool& isExist) = 0; + + virtual ErrCode StartWatcher( + const Urie& uri) = 0; + + virtual ErrCode StopWatcher( + const Urie& uri) = 0; + + virtual ErrCode MoveItem( + const Urie& sourceFile, + const Urie& targetParent, + std::vector& moveResult, + bool force) = 0; + + virtual ErrCode MoveFile( + const Urie& sourceFile, + const Urie& targetParent, + const std::string& fileName, + Urie& newFile) = 0; +protected: + const int VECTOR_MAX_SIZE = 102400; + const int LIST_MAX_SIZE = 102400; + const int MAP_MAX_SIZE = 102400; }; } // namespace FileAccessFwk } // namespace OHOS -#endif // I_FILE_ACCESS_EXT_BASE_H \ No newline at end of file +#endif // OHOS_FILEACCESSFWK_IFILEACCESSEXTBASE_H + diff --git a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h index 68fda968..ff682dcf 100644 --- a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h @@ -98,12 +98,12 @@ public: int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo) override; int GetRoots(std::vector &rootInfoVec) override; int Access(const Uri &uri, bool &isExist) override; - int Query(const Uri &uri, std::vector &columns, std::vector &results) override; + int Query(const Uri &uri, const std::vector &columns, std::vector &results) 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 MoveFile(const Uri &sourceFile, const Uri &targetParent, const std::string &fileName, Uri &newFile) override; int GetFileInfoNum(const std::string &sourceFileUri, const FileFilter &filter, bool recursion, uint32_t &counts) override; 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 00000000..233ba1ee --- /dev/null +++ b/interfaces/inner_api/file_access/include/uri_ext.h @@ -0,0 +1,100 @@ +/* + * 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. + */ + +#ifndef URIE_H +#define URIE_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_; +}; +} +} + +#endif // URIE_H \ No newline at end of file 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 78a0937a..ac4083b6 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 @@ -19,9 +19,9 @@ *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: *; 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 5ce13649..851a6c06 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 @@ -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_ability.cpp b/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp index 3a16de4c..563876e3 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_ability.cpp @@ -124,7 +124,7 @@ int FileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t offse return EPERM; } -int FileAccessExtAbility::Query(const Uri &uri, std::vector &columns, std::vector &results) +int FileAccessExtAbility::Query(const Uri &uri, const std::vector &columns, std::vector &results) { HILOG_ERROR("FileAccessExtAbility::Query Undefined operation"); return EPERM; @@ -173,7 +173,7 @@ int FileAccessExtAbility::MoveItem(const Uri &sourceUri, const Uri &targetParent return EPERM; } -int FileAccessExtAbility::MoveFile(const Uri &sourceUri, const Uri &targetParent, std::string &fileName, Uri &newFile) +int FileAccessExtAbility::MoveFile(const Uri &sourceUri, const Uri &targetParent, const std::string &fileName, Uri &newFile) { HILOG_ERROR("FileAccessExtAbility::MoveFile Undefined operation"); return EPERM; diff --git a/interfaces/inner_api/file_access/src/file_access_ext_base_proxy.cpp b/interfaces/inner_api/file_access/src/file_access_ext_base_proxy.cpp new file mode 100644 index 00000000..7d4c5e55 --- /dev/null +++ b/interfaces/inner_api/file_access/src/file_access_ext_base_proxy.cpp @@ -0,0 +1,898 @@ +/* + * 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_base_proxy.h" + +namespace OHOS { +namespace FileAccessFwk { + +ErrCode FileAccessExtBaseProxy::OpenFile( + const Urie& uri, + int32_t flags, + int& fd) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&uri)) { + return ERR_INVALID_DATA; + } + if (!data.WriteInt32(flags)) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_OPEN_FILE), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + fd = reply.ReadFileDescriptor(); + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::CreateFile( + const Urie& parent, + const std::string& displayName, + Urie& newFile) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&parent)) { + return ERR_INVALID_DATA; + } + if (!data.WriteString16(Str8ToStr16(displayName))) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_CREATE_FILE), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + std::unique_ptr newFileInfo(reply.ReadParcelable()); + if (newFileInfo != nullptr) { + newFile = *newFileInfo; + } + + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::Mkdir( + const Urie& parent, + const std::string& displayName, + Urie& newFile) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&parent)) { + return ERR_INVALID_DATA; + } + if (!data.WriteString16(Str8ToStr16(displayName))) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_MKDIR), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + std::unique_ptr newFileInfo(reply.ReadParcelable()); + if (newFileInfo != nullptr) { + newFile = *newFileInfo; + } + + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::Delete( + const Urie& sourceFile) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&sourceFile)) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_DELETE), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::Move( + const Urie& sourceFile, + const Urie& targetParent, + Urie& newFile) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&sourceFile)) { + return ERR_INVALID_DATA; + } + if (!data.WriteParcelable(&targetParent)) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_MOVE), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + std::unique_ptr newFileInfo(reply.ReadParcelable()); + if (newFileInfo != nullptr) { + newFile = *newFileInfo; + } + + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::Copy( + const Urie& sourceUri, + const Urie& destUri, + std::vector& copyResult, + bool force) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&sourceUri)) { + return ERR_INVALID_DATA; + } + if (!data.WriteParcelable(&destUri)) { + return ERR_INVALID_DATA; + } + if (!data.WriteInt32(force ? 1 : 0)) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_COPY), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + int32_t copyResultSize = reply.ReadInt32(); + if (copyResultSize > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + for (int32_t i1 = 0; i1 < copyResultSize; ++i1) { + std::unique_ptr value1(reply.ReadParcelable()); + if (!value1) { + return ERR_INVALID_DATA; + } + + copyResult.push_back(*value1); + } + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::CopyFile( + const Urie& sourceUri, + const Urie& destUri, + const std::string& fileName, + Urie& newFileUri) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&sourceUri)) { + return ERR_INVALID_DATA; + } + if (!data.WriteParcelable(&destUri)) { + return ERR_INVALID_DATA; + } + if (!data.WriteString16(Str8ToStr16(fileName))) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_COPY_FILE), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + std::unique_ptr newFileUriInfo(reply.ReadParcelable()); + if (newFileUriInfo != nullptr) { + newFileUri = *newFileUriInfo; + } + + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::Rename( + const Urie& sourceFile, + const std::string& displayName, + Urie& newFile) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&sourceFile)) { + return ERR_INVALID_DATA; + } + if (!data.WriteString16(Str8ToStr16(displayName))) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_RENAME), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + std::unique_ptr newFileInfo(reply.ReadParcelable()); + if (newFileInfo != nullptr) { + newFile = *newFileInfo; + } + + 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 FileAccessExtBaseProxy::ListFile(const FileInfo &fileInfo, const int64_t offset, + const FileFilter &filter, SharedMemoryInfo &memInfo) +{ + if (Remote() == nullptr) { + HILOG_ERROR("Remote is nullptr"); + return E_IPCS; + } + MessageParcel data; + if (!data.WriteInterfaceToken(FileAccessExtBaseProxy::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( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_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; +} + +ErrCode FileAccessExtBaseProxy::ScanFile( + const FileInfo& fileInfo, + int64_t offset, + int64_t maxCount, + const FileFilter& filter, + std::vector& fileInfoVec) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&fileInfo)) { + return ERR_INVALID_DATA; + } + if (!data.WriteInt64(offset)) { + return ERR_INVALID_DATA; + } + if (!data.WriteInt64(maxCount)) { + return ERR_INVALID_DATA; + } + if (!data.WriteParcelable(&filter)) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_SCAN_FILE), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + int32_t fileInfoVecSize = reply.ReadInt32(); + if (fileInfoVecSize > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + for (int32_t i2 = 0; i2 < fileInfoVecSize; ++i2) { + std::unique_ptr value2(reply.ReadParcelable()); + if (!value2) { + return ERR_INVALID_DATA; + } + + fileInfoVec.push_back(*value2); + } + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::Query( + const Urie& uri, + const std::vector& columns, + std::vector& results) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&uri)) { + return ERR_INVALID_DATA; + } + if (columns.size() > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + data.WriteInt32(columns.size()); + for (auto it = columns.begin(); it != columns.end(); ++it) { + if (!data.WriteString16(Str8ToStr16((*it)))) { + return ERR_INVALID_DATA; + } + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_QUERY), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + int32_t resultsSize = reply.ReadInt32(); + if (resultsSize > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + for (int32_t i3 = 0; i3 < resultsSize; ++i3) { + std::string value3 = Str16ToStr8(reply.ReadString16()); + results.push_back(value3); + } + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::GetFileInfoFromUri( + const Urie& selectFile, + FileInfo& fileInfo) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&selectFile)) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_GET_FILE_INFO_FROM_URI), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + std::unique_ptr fileInfoInfo(reply.ReadParcelable()); + if (fileInfoInfo != nullptr) { + fileInfo = *fileInfoInfo; + } + + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::GetFileInfoFromRelativePath( + const std::string& selectFile, + FileInfo& fileInfo) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteString16(Str8ToStr16(selectFile))) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_GET_FILE_INFO_FROM_RELATIVE_PATH), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + std::unique_ptr fileInfoInfo(reply.ReadParcelable()); + if (fileInfoInfo != nullptr) { + fileInfo = *fileInfoInfo; + } + + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::GetRoots( + std::vector& rootInfoVec) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_GET_ROOTS), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + int32_t rootInfoVecSize = reply.ReadInt32(); + if (rootInfoVecSize > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + for (int32_t i4 = 0; i4 < rootInfoVecSize; ++i4) { + std::unique_ptr value4(reply.ReadParcelable()); + if (!value4) { + return ERR_INVALID_DATA; + } + + rootInfoVec.push_back(*value4); + } + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::Access( + const Urie& uri, + bool& isExist) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&uri)) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_ACCESS), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + isExist = reply.ReadInt32() == 1 ? true : false; + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::StartWatcher( + const Urie& uri) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&uri)) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_START_WATCHER), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::StopWatcher( + const Urie& uri) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&uri)) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_STOP_WATCHER), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::MoveItem( + const Urie& sourceFile, + const Urie& targetParent, + std::vector& moveResult, + bool force) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&sourceFile)) { + return ERR_INVALID_DATA; + } + if (!data.WriteParcelable(&targetParent)) { + return ERR_INVALID_DATA; + } + if (!data.WriteInt32(force ? 1 : 0)) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_MOVE_ITEM), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + int32_t moveResultSize = reply.ReadInt32(); + if (moveResultSize > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + for (int32_t i5 = 0; i5 < moveResultSize; ++i5) { + std::unique_ptr value5(reply.ReadParcelable()); + if (!value5) { + return ERR_INVALID_DATA; + } + + moveResult.push_back(*value5); + } + return ERR_OK; +} + +ErrCode FileAccessExtBaseProxy::MoveFile( + const Urie& sourceFile, + const Urie& targetParent, + const std::string& fileName, + Urie& newFile) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; + } + + if (!data.WriteParcelable(&sourceFile)) { + return ERR_INVALID_DATA; + } + if (!data.WriteParcelable(&targetParent)) { + return ERR_INVALID_DATA; + } + if (!data.WriteString16(Str8ToStr16(fileName))) { + return ERR_INVALID_DATA; + } + + sptr remote = Remote(); + if (!remote) { + return ERR_INVALID_DATA; + } + int32_t result = remote->SendRequest( + static_cast(IFileAccessExtBaseIpcCode::COMMAND_MOVE_FILE), data, reply, option); + if (FAILED(result)) { + return result; + } + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + std::unique_ptr newFileInfo(reply.ReadParcelable()); + if (newFileInfo != nullptr) { + newFile = *newFileInfo; + } + + return ERR_OK; +} +} // namespace FileAccessFwk +} // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/file_access_ext_base_stub.cpp b/interfaces/inner_api/file_access/src/file_access_ext_base_stub.cpp new file mode 100644 index 00000000..872dc1ab --- /dev/null +++ b/interfaces/inner_api/file_access/src/file_access_ext_base_stub.cpp @@ -0,0 +1,498 @@ +/* + * 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_base_stub.h" + +namespace OHOS { +namespace FileAccessFwk { +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; +} +int32_t FileAccessExtBaseStub::OnRemoteRequest( + uint32_t code, + MessageParcel& data, + MessageParcel& reply, + MessageOption& option) +{ + std::u16string localDescriptor = GetDescriptor(); + std::u16string remoteDescriptor = data.ReadInterfaceToken(); + if (localDescriptor != remoteDescriptor) { + return ERR_TRANSACTION_FAILED; + } + switch (static_cast(code)) { + case IFileAccessExtBaseIpcCode::COMMAND_OPEN_FILE: { + std::unique_ptr uri(data.ReadParcelable()); + if (!uri) { + return ERR_INVALID_DATA; + } + + int32_t flags = data.ReadInt32(); + int fd; + ErrCode errCode = OpenFile(*uri, flags, fd); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteFileDescriptor(fd)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_CREATE_FILE: { + std::unique_ptr parent(data.ReadParcelable()); + if (!parent) { + return ERR_INVALID_DATA; + } + + std::string displayName = Str16ToStr8(data.ReadString16()); + Urie newFile; + ErrCode errCode = CreateFile(*parent, displayName, newFile); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteParcelable(&newFile)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_MKDIR: { + std::unique_ptr parent(data.ReadParcelable()); + if (!parent) { + return ERR_INVALID_DATA; + } + + std::string displayName = Str16ToStr8(data.ReadString16()); + Urie newFile; + ErrCode errCode = Mkdir(*parent, displayName, newFile); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteParcelable(&newFile)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_DELETE: { + std::unique_ptr sourceFile(data.ReadParcelable()); + if (!sourceFile) { + return ERR_INVALID_DATA; + } + + ErrCode errCode = Delete(*sourceFile); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_MOVE: { + std::unique_ptr sourceFile(data.ReadParcelable()); + if (!sourceFile) { + return ERR_INVALID_DATA; + } + + std::unique_ptr targetParent(data.ReadParcelable()); + if (!targetParent) { + return ERR_INVALID_DATA; + } + + Urie newFile; + ErrCode errCode = Move(*sourceFile, *targetParent, newFile); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteParcelable(&newFile)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_COPY: { + std::unique_ptr sourceUri(data.ReadParcelable()); + if (!sourceUri) { + return ERR_INVALID_DATA; + } + + std::unique_ptr destUri(data.ReadParcelable()); + if (!destUri) { + return ERR_INVALID_DATA; + } + + std::vector copyResult; + bool force = data.ReadInt32() == 1 ? true : false; + ErrCode errCode = Copy(*sourceUri, *destUri, copyResult, force); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (copyResult.size() > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + reply.WriteInt32(copyResult.size()); + for (auto it = copyResult.begin(); it != copyResult.end(); ++it) { + if (!reply.WriteParcelable(&(*it))) { + return ERR_INVALID_DATA; + } + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_COPY_FILE: { + std::unique_ptr sourceUri(data.ReadParcelable()); + if (!sourceUri) { + return ERR_INVALID_DATA; + } + + std::unique_ptr destUri(data.ReadParcelable()); + if (!destUri) { + return ERR_INVALID_DATA; + } + + std::string fileName = Str16ToStr8(data.ReadString16()); + Urie newFileUri; + ErrCode errCode = CopyFile(*sourceUri, *destUri, fileName, newFileUri); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteParcelable(&newFileUri)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_RENAME: { + std::unique_ptr sourceFile(data.ReadParcelable()); + if (!sourceFile) { + return ERR_INVALID_DATA; + } + + std::string displayName = Str16ToStr8(data.ReadString16()); + Urie newFile; + ErrCode errCode = Rename(*sourceFile, displayName, newFile); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteParcelable(&newFile)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_LIST_FILE: { + 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; + } + case IFileAccessExtBaseIpcCode::COMMAND_SCAN_FILE: { + std::unique_ptr fileInfo(data.ReadParcelable()); + if (!fileInfo) { + return ERR_INVALID_DATA; + } + + int64_t offset = data.ReadInt64(); + int64_t maxCount = data.ReadInt64(); + std::unique_ptr filter(data.ReadParcelable()); + if (!filter) { + return ERR_INVALID_DATA; + } + + std::vector fileInfoVec; + ErrCode errCode = ScanFile(*fileInfo, offset, maxCount, *filter, fileInfoVec); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (fileInfoVec.size() > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + reply.WriteInt32(fileInfoVec.size()); + for (auto it = fileInfoVec.begin(); it != fileInfoVec.end(); ++it) { + if (!reply.WriteParcelable(&(*it))) { + return ERR_INVALID_DATA; + } + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_QUERY: { + std::unique_ptr uri(data.ReadParcelable()); + if (!uri) { + return ERR_INVALID_DATA; + } + + std::vector columns; + int32_t columnsSize = data.ReadInt32(); + if (columnsSize > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + for (int32_t i6 = 0; i6 < columnsSize; ++i6) { + std::string value6 = Str16ToStr8(data.ReadString16()); + columns.push_back(value6); + } + std::vector results; + ErrCode errCode = Query(*uri, columns, results); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (results.size() > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + reply.WriteInt32(results.size()); + for (auto it = results.begin(); it != results.end(); ++it) { + if (!reply.WriteString16(Str8ToStr16((*it)))) { + return ERR_INVALID_DATA; + } + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_GET_FILE_INFO_FROM_URI: { + std::unique_ptr selectFile(data.ReadParcelable()); + if (!selectFile) { + return ERR_INVALID_DATA; + } + + FileInfo fileInfo; + ErrCode errCode = GetFileInfoFromUri(*selectFile, fileInfo); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteParcelable(&fileInfo)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_GET_FILE_INFO_FROM_RELATIVE_PATH: { + std::string selectFile = Str16ToStr8(data.ReadString16()); + FileInfo fileInfo; + ErrCode errCode = GetFileInfoFromRelativePath(selectFile, fileInfo); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteParcelable(&fileInfo)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_GET_ROOTS: { + std::vector rootInfoVec; + ErrCode errCode = GetRoots(rootInfoVec); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (rootInfoVec.size() > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + reply.WriteInt32(rootInfoVec.size()); + for (auto it = rootInfoVec.begin(); it != rootInfoVec.end(); ++it) { + if (!reply.WriteParcelable(&(*it))) { + return ERR_INVALID_DATA; + } + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_ACCESS: { + std::unique_ptr uri(data.ReadParcelable()); + if (!uri) { + return ERR_INVALID_DATA; + } + + bool isExist; + ErrCode errCode = Access(*uri, isExist); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteInt32(isExist ? 1 : 0)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_START_WATCHER: { + std::unique_ptr uri(data.ReadParcelable()); + if (!uri) { + return ERR_INVALID_DATA; + } + + ErrCode errCode = StartWatcher(*uri); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_STOP_WATCHER: { + std::unique_ptr uri(data.ReadParcelable()); + if (!uri) { + return ERR_INVALID_DATA; + } + + ErrCode errCode = StopWatcher(*uri); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_MOVE_ITEM: { + std::unique_ptr sourceFile(data.ReadParcelable()); + if (!sourceFile) { + return ERR_INVALID_DATA; + } + + std::unique_ptr targetParent(data.ReadParcelable()); + if (!targetParent) { + return ERR_INVALID_DATA; + } + + std::vector moveResult; + bool force = data.ReadInt32() == 1 ? true : false; + ErrCode errCode = MoveItem(*sourceFile, *targetParent, moveResult, force); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (moveResult.size() > static_cast(VECTOR_MAX_SIZE)) { + return ERR_INVALID_DATA; + } + reply.WriteInt32(moveResult.size()); + for (auto it = moveResult.begin(); it != moveResult.end(); ++it) { + if (!reply.WriteParcelable(&(*it))) { + return ERR_INVALID_DATA; + } + } + } + return ERR_NONE; + } + case IFileAccessExtBaseIpcCode::COMMAND_MOVE_FILE: { + std::unique_ptr sourceFile(data.ReadParcelable()); + if (!sourceFile) { + return ERR_INVALID_DATA; + } + + std::unique_ptr targetParent(data.ReadParcelable()); + if (!targetParent) { + return ERR_INVALID_DATA; + } + + std::string fileName = Str16ToStr8(data.ReadString16()); + Urie newFile; + ErrCode errCode = MoveFile(*sourceFile, *targetParent, fileName, newFile); + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_VALUE; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteParcelable(&newFile)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + default: + return IPCObjectStub::OnRemoteRequest(code, data, reply, option); + } + + return ERR_TRANSACTION_FAILED; +} +} // namespace FileAccessFwk +} // namespace OHOS 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 c130c52a..00000000 --- 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 8bb93007..00000000 --- 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 2a2b19a0..fa6c1906 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 @@ -20,6 +20,9 @@ #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 { @@ -30,7 +33,25 @@ std::shared_ptr FileAccessExtStubImpl::GetOwner() return extension_; } -int FileAccessExtStubImpl::OpenFile(const Uri &uri, const int flags, int &fd) +namespace { + const std::string FILE_ACCESS_MANAGER_PERMISSION = "ohos.permission.FILE_ACCESS_MANAGER"; +} + +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 Urie &uri, const int flags, int &fd) { UserAccessTracer trace; trace.Start("OpenFile"); @@ -38,12 +59,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 uri_(uri.ToString()); + int ret = extension_->OpenFile(uri_, 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 +82,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 parent_(parent.ToString()); + Uri newFile_(""); + int ret = extension_->CreateFile(parent_, displayName, newFile_); + newFile = Urie(newFile_.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 +102,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 parent_(parent.ToString()); + Uri newFile_(""); + int ret = extension_->Mkdir(parent_, displayName, newFile_); + newFile = Urie(newFile_.ToString()); return ret; } -int FileAccessExtStubImpl::Delete(const Uri &sourceFile) +int FileAccessExtStubImpl::Delete(const Urie &sourceFile) { UserAccessTracer trace; trace.Start("Delete"); @@ -77,12 +122,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 sourceFile_(sourceFile.ToString()); + int ret = extension_->Delete(sourceFile_); 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,12 +140,20 @@ 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 sourceFile_(sourceFile.ToString()); + Uri targetParent_(targetParent.ToString()); + Uri newFile_(""); + int ret = extension_->Move(sourceFile_, targetParent_, newFile_); + newFile = Urie(newFile_.ToString()); return ret; } -int FileAccessExtStubImpl::Copy(const Uri &sourceUri, const Uri &destUri, std::vector ©Result, +int FileAccessExtStubImpl::Copy(const Urie &sourceUri, const Urie &destUri, std::vector ©Result, bool force) { UserAccessTracer trace; @@ -104,12 +162,19 @@ 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); + if (!CheckCallingPermission(FILE_ACCESS_MANAGER_PERMISSION)) { + HILOG_ERROR("permission error"); + return E_PERMISSION; + } + + Uri sourceUri_(sourceUri.ToString()); + Uri destUri_(destUri.ToString()); + int ret = extension_->Copy(sourceUri_, destUri_, copyResult, force); return ret; } -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 +182,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 sourceUri_(sourceUri.ToString()); + Uri destUri_(destUri.ToString()); + Uri newFileUri_(""); + int ret = extension_->CopyFile(sourceUri_, destUri_, fileName, newFileUri_); + newFileUri = Urie(newFileUri_.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 +203,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 sourceFile_(sourceFile.ToString()); + Uri newFile_(""); + int ret = extension_->Rename(sourceFile_, displayName, newFile_); + newFile = Urie(newFile_.ToString()); return ret; } @@ -143,6 +224,10 @@ 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; + } std::vector fileInfoVec; int ret = ERR_OK; @@ -187,12 +272,16 @@ 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 +289,13 @@ 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); + Uri uri_(uri.ToString()); + int ret = extension_->Query(uri_, columns, results); return ret; } @@ -213,12 +307,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 +324,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 selectFile_(selectFile.ToString()); + int ret = extension_->GetFileInfoFromUri(selectFile_, fileInfo); return ret; } @@ -239,12 +342,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 +359,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 uri_(uri.ToString()); + int ret = extension_->Access(uri_, isExist); return ret; } -int FileAccessExtStubImpl::StartWatcher(const Uri &uri) +int FileAccessExtStubImpl::StartWatcher(const Urie &uri) { UserAccessTracer trace; trace.Start("StartWatcher"); @@ -265,12 +377,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 uri_(uri.ToString()); + int ret = extension_->StartWatcher(uri_); return ret; } -int FileAccessExtStubImpl::StopWatcher(const Uri &uri) +int FileAccessExtStubImpl::StopWatcher(const Urie &uri) { UserAccessTracer trace; trace.Start("StopWatcher"); @@ -278,12 +395,17 @@ 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 uri_(uri.ToString()); + int ret = extension_->StopWatcher(uri_); return ret; } -int FileAccessExtStubImpl::MoveItem(const Uri &sourceFile, const Uri &targetParent, std::vector &moveResult, +int FileAccessExtStubImpl::MoveItem(const Urie &sourceFile, const Urie &targetParent, std::vector &moveResult, bool force) { UserAccessTracer trace; @@ -292,11 +414,17 @@ 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 sourceFile_(sourceFile.ToString()); + Uri targetParent_(targetParent.ToString()); + return extension_->MoveItem(sourceFile_, targetParent_, moveResult, force); } -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 +432,17 @@ 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); + Uri sourceFile_(sourceFile.ToString()); + Uri targetParent_(targetParent.ToString()); + Uri newFile_(""); + int ret = extension_->MoveFile(sourceFile_, targetParent_, fileName, newFile_); + newFile = Urie(newFile_.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 fb143a2f..b6052ff0 100644 --- a/interfaces/inner_api/file_access/src/file_access_helper.cpp +++ b/interfaces/inner_api/file_access/src/file_access_helper.cpp @@ -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 { @@ -335,8 +336,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 +351,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 +370,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 +400,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 urie(uri.ToString()); + int ret = fileExtProxy->OpenFile(urie, flags, fd); if (ret != ERR_OK) { HILOG_ERROR("OpenFile get result error, code:%{public}d", ret); return ret; @@ -428,15 +430,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 parent_(parent.ToString()); + Urie newFile_(""); + int ret = fileExtProxy->CreateFile(parent_, displayName, newFile_); if (ret != ERR_OK) { HILOG_ERROR("CreateFile get result error, code:%{public}d", ret); return ret; } + newFile = Uri(newFile_.ToString()); return ERR_OK; } @@ -457,15 +462,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 parent_(parent.ToString()); + Urie newDir_(""); + int ret = fileExtProxy->Mkdir(parent_, displayName, newDir_); if (ret != ERR_OK) { HILOG_ERROR("Mkdir get result error, code:%{public}d", ret); return ret; } + newDir = Uri(newDir_.ToString()); return ERR_OK; } @@ -486,11 +494,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 selectFile_(selectFile.ToString()); + int ret = fileExtProxy->Delete(selectFile_); if (ret != ERR_OK) { HILOG_ERROR("Delete get result error, code:%{public}d", ret); return ret; @@ -522,15 +531,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 sourceFile_(sourceFile.ToString()); + Urie targetParent_(targetParent.ToString()); + Urie newFile_(""); + int ret = fileExtProxy->Move(sourceFile_, targetParent_, newFile_); if (ret != ERR_OK) { HILOG_ERROR("Move get result error, code:%{public}d", ret); return ret; } + newFile = Uri(newFile_.ToString()); return ERR_OK; } @@ -539,12 +552,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 uri_(uri.ToString()); + int ret = proxy->GetFileInfoFromUri(uri_, fileInfo); if (ret != ERR_OK) { HILOG_ERROR("get FileInfo from uri error, code:%{public}d", ret); return ret; @@ -603,14 +617,17 @@ 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 sourceUri_(sourceUri.ToString()); + Urie destUri_(destUri.ToString()); + copyResult.clear(); + ret = proxy->Copy(sourceUri_, destUri_, copyResult, force); if (ret != ERR_OK) { if ((ret == COPY_EXCEPTION) || (ret == COPY_NOEXCEPTION)) { HILOG_ERROR("Copy exception, code:%{public}d", ret); @@ -631,15 +648,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 sourceUri_(sourceUri.ToString()); + Urie destUri_(destUri.ToString()); + Urie newFileUri_(""); + int ret = proxy->CopyFile(sourceUri_, destUri_, fileName, newFileUri_); if (ret != ERR_OK) { HILOG_ERROR("Copy file error, code:%{public}d", ret); return ret; } + newFileUri = Uri(newFileUri_.ToString()); return ret; } @@ -717,15 +738,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 sourceFile_(sourceFile.ToString()); + Urie newFile_(""); + int ret = fileExtProxy->Rename(sourceFile_, displayName, newFile_); if (ret != ERR_OK) { HILOG_ERROR("Rename get result error, code:%{public}d", ret); return ret; } + newFile = Uri(newFile_.ToString()); return ERR_OK; } @@ -748,7 +772,7 @@ 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; } @@ -779,9 +803,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 +902,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 uri_(uri.ToString()); + results.clear(); + ret = fileExtProxy->Query(uri_, columns, results); if (ret != ERR_OK) { HILOG_ERROR("Query get result error, code:%{public}d", ret); return ret; @@ -906,7 +933,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 +944,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 +1017,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 uri_(uri.ToString()); + int ret = fileExtProxy->Access(uri_, isExist); if (ret != ERR_OK) { HILOG_ERROR("Access get result error, code:%{public}d", ret); return ret; @@ -1019,11 +1047,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 selectFile_(selectFile.ToString()); + int ret = fileExtProxy->GetFileInfoFromUri(selectFile_, fileInfo); if (ret != ERR_OK) { HILOG_ERROR("GetFileInfoFromUri get result error, code:%{public}d", ret); return ret; @@ -1043,7 +1072,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 +1099,13 @@ int FileAccessHelper::RegisterNotify(Uri uri, bool notifyForDescendants, sptrRegisterNotify(uri, notifyForDescendants, observer, GetConnectExtensionInfo(uri)); + int ret = proxy->RegisterNotify(uri, notifyForDescendants, observer, *GetConnectExtensionInfo(uri)); return ret; } @@ -1094,13 +1123,13 @@ 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)); + int ret = proxy->UnregisterNotify(uri, observer, *GetConnectExtensionInfo(uri)); return ret; } @@ -1117,14 +1146,13 @@ 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)); + int ret = proxy->UnregisterNotifyNoObserver(uri, *GetConnectExtensionInfo(uri)); return ret; } @@ -1151,11 +1179,14 @@ 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 sourceFile_(sourceFile.ToString()); + Urie targetParent_(targetParent.ToString()); + moveResult.clear(); + int ret = fileExtProxy->MoveItem(sourceFile_, targetParent_, moveResult, force); if (ret != ERR_OK) { HILOG_ERROR("Move get result error, code:%{public}d", ret); return ret; @@ -1187,15 +1218,19 @@ 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 sourceFile_(sourceFile.ToString()); + Urie targetParent_(targetParent.ToString()); + Urie newFile_(""); + int ret = fileExtProxy->MoveFile(sourceFile_, targetParent_, fileName, newFile_); if (ret != ERR_OK) { HILOG_ERROR("Move get result error, code:%{public}d", ret); return ret; } + newFile = Uri(newFile_.ToString()); return ERR_OK; } 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 65cf40eb..c82aa9af 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" @@ -1388,7 +1388,7 @@ static void ConvertColumn(std::vector &columns) } } -int JsFileAccessExtAbility::Query(const Uri &uri, std::vector &columns, std::vector &results) +int JsFileAccessExtAbility::Query(const Uri &uri, const std::vector &columns, std::vector &results) { UserAccessTracer trace; trace.Start("Query"); @@ -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; @@ -1906,7 +1907,7 @@ int JsFileAccessExtAbility::MoveItem(const Uri &sourceFile, const Uri &targetPar return ret; } -int JsFileAccessExtAbility::MoveFile(const Uri &sourceFile, const Uri &targetParent, std::string &fileName, +int JsFileAccessExtAbility::MoveFile(const Uri &sourceFile, const Uri &targetParent, const std::string &fileName, Uri &newFile) { UserAccessTracer trace; 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 00000000..269af987 --- /dev/null +++ b/interfaces/inner_api/file_access/src/uri_ext.cpp @@ -0,0 +1,504 @@ +/* + * 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 "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; + } + try { + regex schemeRegex("[a-zA-Z][a-zA-Z|\\d|\\+|\\-|.]*$"); + if (!regex_match(scheme_, schemeRegex)) { + return false; + } + } catch (std::regex_error &message) { + HILOG_IMPL(LOG_CORE, LOG_ERROR, 0xD001305, "URIe", "regex fail,message:%{public}s", message.what()); + 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/services/BUILD.gn b/services/BUILD.gn index 0fbc6854..761751c8 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn @@ -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,80 @@ ohos_resources("external_file_manager_resources") { hap_profile = "file_extension_hap/entry/src/main/module.json" } +idl_gen_interface("IFile_Access_Service_Base") { + sources = [ + "IFileAccessObserver.idl", + "IFileAccessServiceBase.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" ] + + 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_source_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_extension_ability_kit", + ] + + 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 +177,19 @@ 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_extension_ability_kit", + ] external_deps = [ "ability_base:want", diff --git a/test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.h b/services/IFileAccessObserver.idl similarity index 71% rename from test/fuzztest/fileaccessextstubbranch_fuzzer/fileaccessextstubbranch_fuzzer.h rename to services/IFileAccessObserver.idl index 4df9801e..fcf36573 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) 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 @@ -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; +interface OHOS.FileAccessFwk.IFileAccessObserver { + void OnChange([in] NotifyMessage notifyMessage); +} \ No newline at end of file diff --git a/services/native/file_access_service/include/observer_callback_proxy.h b/services/IFileAccessServiceBase.idl similarity index 34% rename from services/native/file_access_service/include/observer_callback_proxy.h rename to services/IFileAccessServiceBase.idl index fc390ba6..3775b0a7 100644 --- a/services/native/file_access_service/include/observer_callback_proxy.h +++ b/services/IFileAccessServiceBase.idl @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * 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 @@ -13,25 +13,20 @@ * 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 +import NotifyType; +sequenceable Uri..OHOS.Uri; +sequenceable FileAccessExtensionInfo..OHOS.FileAccessFwk.ConnectExtensionInfo; +sequenceable Want..OHOS.AAFwk.Want; +interface OHOS.FileAccessFwk.IFileAccessExtBase; +interface OHOS.FileAccessFwk.IFileAccessObserver; +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 6198079a..c2e56913 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) 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 @@ -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 e7160ffa..7332db5a 100644 --- a/services/libfile_access_service.map +++ b/services/libfile_access_service.map @@ -14,11 +14,12 @@ 1.0 { global: extern "C++" { - *FileAccessServiceProxy*; + *FileAccessServiceClient*; + *FileAccessServiceBaseProxy*; *FileAccessService*; - *FileAccessServiceStub*; - *ObserverCallbackStub*; - *ObserverCallbackProxy*; + *FileAccessServiceBaseStub*; + *FileAccessObserverStub*; + *FileAccessObserverProxy*; **; }; local: 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 0e6c5dba..0485fedc 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 @@ -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 d87a15cb..2257c82a 100644 --- a/services/native/file_access_service/include/file_access_service.h +++ b/services/native/file_access_service/include/file_access_service.h @@ -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 60% 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 b32375af..972575b9 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 @@ -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 96067c08..00000000 --- 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 74% rename from test/fuzztest/fileaccessextstub_fuzzer/fileaccessextstub_fuzzer.h rename to services/native/file_access_service/include/iability_connection.h index 05bfa06a..3b2625c4 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) 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 @@ -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 02cb61a3..00000000 --- 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_stub.h b/services/native/file_access_service/include/observer_callback_stub.h deleted file mode 100644 index 229ba642..00000000 --- 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 a2928a3d..332cb177 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 @@ -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 da96b6a5..8a75893b 100644 --- a/services/native/file_access_service/src/file_access_service.cpp +++ b/services/native/file_access_service/src/file_access_service.cpp @@ -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,19 @@ 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; @@ -348,11 +373,11 @@ int32_t FileAccessService::OperateObsNode(Uri &uri, bool notifyForDescendants, u HILOG_ERROR("Creator get invalid fileExtProxy"); return E_CONNECT; } - extensionProxy->StartWatcher(uri); + Urie uri_(uriStr); + extensionProxy->StartWatcher(uri_); { 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; @@ -477,7 +502,8 @@ int32_t FileAccessService::CleanAllNotifyImpl(Uri uri, const std::shared_ptrStopWatcher(originalUri); + Urie originalUri_(originalUri.ToString()); + extensionProxy->StopWatcher(originalUri_); RemoveRelations(uriStr, obsNode); if (IsUnused() && unLoadTimer_) { unLoadTimer_->reset(); @@ -485,13 +511,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 +535,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 +639,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 +740,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 +764,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 +779,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 +820,8 @@ int32_t FileAccessService::RmUriObsNodeRelations(std::string &uriStr, std::share HILOG_ERROR("Creator get invalid fileExtProxy"); return E_CONNECT; } - extensionProxy->StopWatcher(originalUri); + Urie originalUri_(originalUri.ToString()); + extensionProxy->StopWatcher(originalUri_); 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 00000000..e2385e35 --- /dev/null +++ b/services/native/file_access_service/src/file_access_service_client.cpp @@ -0,0 +1,121 @@ +/* + * 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_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 b476ad71..00000000 --- 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 3e4a65ea..00000000 --- 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 f536ee79..00000000 --- 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 f39f4ae1..00000000 --- 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 d80793f3..81300f15 100644 --- a/test/fuzztest/BUILD.gn +++ b/test/fuzztest/BUILD.gn @@ -29,10 +29,7 @@ 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 13daff58..2eea4b24 100644 --- a/test/fuzztest/externalfileaccess_fuzzer/BUILD.gn +++ b/test/fuzztest/externalfileaccess_fuzzer/BUILD.gn @@ -35,6 +35,7 @@ ohos_fuzztest("ExternalFileAccessFuzzTest") { "${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_extension_ability_kit", + "${user_file_service_path}/services:file_access_service_base_source_include", ] external_deps = [ diff --git a/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp b/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp index 8ad9d3ea..f3805ed8 100644 --- a/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessaccess_fuzzer/externalfileaccessaccess_fuzzer.cpp @@ -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/externalfileaccesscreatefile_fuzzer.cpp b/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp index a030472f..cdc661a8 100644 --- a/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccesscreatefile_fuzzer/externalfileaccesscreatefile_fuzzer.cpp @@ -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/externalfileaccessdelete_fuzzer.cpp b/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp index 4cd6f7f6..3557447b 100644 --- a/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessdelete_fuzzer/externalfileaccessdelete_fuzzer.cpp @@ -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/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp b/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp index 59180c72..1ef4c6a1 100644 --- a/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessgetfileinfofromrelativepath_fuzzer/externalfileaccessgetfileinfofromrelativepath_fuzzer.cpp @@ -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/externalfileaccessgetfileinfofromuri_fuzzer.cpp b/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp index 4a5142d3..4c86095b 100644 --- a/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessgetfileinfofromuri_fuzzer/externalfileaccessgetfileinfofromuri_fuzzer.cpp @@ -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/externalfileaccessgetroots_fuzzer.cpp b/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp index 028d42ea..c440c6bb 100644 --- a/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessgetroots_fuzzer/externalfileaccessgetroots_fuzzer.cpp @@ -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/externalfileaccesslistfile_fuzzer.cpp b/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp index 3d60598a..df9ef4a0 100644 --- a/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccesslistfile_fuzzer/externalfileaccesslistfile_fuzzer.cpp @@ -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/externalfileaccessmkdir_fuzzer.cpp b/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp index ce001e69..fc75649c 100644 --- a/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessmkdir_fuzzer/externalfileaccessmkdir_fuzzer.cpp @@ -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/externalfileaccessmove_fuzzer.cpp b/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp index e52e990e..70d8ae23 100644 --- a/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessmove_fuzzer/externalfileaccessmove_fuzzer.cpp @@ -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/externalfileaccessopenfile_fuzzer.cpp b/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp index 7065efb5..3f0deabe 100644 --- a/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessopenfile_fuzzer/externalfileaccessopenfile_fuzzer.cpp @@ -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/externalfileaccessrename_fuzzer.cpp b/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp index 5b7489ca..1f03889f 100644 --- a/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessrename_fuzzer/externalfileaccessrename_fuzzer.cpp @@ -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/externalfileaccessscanfile_fuzzer.cpp b/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp index b9954568..e949189c 100644 --- a/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp +++ b/test/fuzztest/externalfileaccessscanfile_fuzzer/externalfileaccessscanfile_fuzzer.cpp @@ -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 d5d1635e..488a63b7 100644 --- a/test/fuzztest/fileaccessextconnection_fuzzer/BUILD.gn +++ b/test/fuzztest/fileaccessextconnection_fuzzer/BUILD.gn @@ -38,6 +38,7 @@ ohos_fuzztest("FileAccessExtConnectionFuzzTest") { deps = [ "${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_include", ] external_deps = [ diff --git a/test/fuzztest/fileaccessextstub_fuzzer/BUILD.gn b/test/fuzztest/fileaccessextstub_fuzzer/BUILD.gn deleted file mode 100644 index 3a5fde07..00000000 --- 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 e42a5c31..00000000 --- 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 8d9ad7c9..00000000 --- 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 d6679ccc..00000000 --- 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 f215a424..00000000 --- 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 6198079a..00000000 --- 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 e42a5c31..00000000 --- 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 2f93d003..00000000 --- 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 d6679ccc..00000000 --- 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 index 678bcc43..6d52c00e 100644 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/BUILD.gn +++ b/test/fuzztest/fileaccessserviceproxy_fuzzer/BUILD.gn @@ -32,9 +32,9 @@ ohos_fuzztest("FileAccessServiceProxyFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] + deps = [ "${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_stub.cpp", + "${user_file_service_path}/services/native/file_access_service/src/file_access_service_client.cpp", "${user_file_service_path}/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.cpp", ] diff --git a/test/fuzztest/fileaccessserviceproxy_fuzzer/corpus/init b/test/fuzztest/fileaccessserviceproxy_fuzzer/corpus/init index 6198079a..d27c29f2 100644 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/corpus/init +++ b/test/fuzztest/fileaccessserviceproxy_fuzzer/corpus/init @@ -1,16 +1,16 @@ -/* - * 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. - */ - +/* + * 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 index 0918b9cf..71fb40f5 100644 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessservicemock.h +++ b/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessservicemock.h @@ -1,41 +1,42 @@ -/* - * 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 +/* + * 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_base_stub.h" + +namespace OHOS { +namespace FileAccessFwk { +class FileAccessServiceMock final : public FileAccessServiceBaseStub { +public: + virtual ~FileAccessServiceMock() = default; + + int32_t OnChange(const Uri &uri, NotifyType notifyType) override { return 0; } + int32_t RegisterNotify(const Uri &uri, bool notifyForDescendants, const sptr &observer, + const ConnectExtensionInfo& info) override { return 0; } + int32_t UnregisterNotify(const Uri &uri, const sptr &observer, + const ConnectExtensionInfo& info) override { return 0; } + int32_t UnregisterNotifyNoObserver(const Uri &uri, const ConnectExtensionInfo& info) override { return 0; } + int32_t GetExtensionProxy(const ConnectExtensionInfo& info, + sptr &extensionProxy) override { return 0; } + int32_t CleanAllNotify(Uri uri, const std::shared_ptr &info) { 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 index 6eb11019..52718aaf 100644 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.cpp +++ b/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.cpp @@ -17,7 +17,8 @@ #include #include -#include "file_access_service_proxy.h" +#include "file_access_service_client.h" +#include "file_access_service_base_proxy.h" #include "fileaccessservicemock.h" #include "iservice_registry.h" #include "refbase.h" @@ -49,7 +50,7 @@ T TypeCast(const uint8_t *data, int *pos = nullptr) return *(reinterpret_cast(data)); } -bool OnChangeFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) +bool OnChangeFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) { if (data == nullptr || size < sizeof(NotifyType)) { return true; @@ -63,7 +64,7 @@ bool OnChangeFuzzTest(shared_ptr proxy, const uint8_t *d return true; } -bool RegisterNotifyFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) +bool RegisterNotifyFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) { if (data == nullptr || size < sizeof(bool)) { return true; @@ -74,20 +75,20 @@ bool RegisterNotifyFuzzTest(shared_ptr proxy, const uint bool notifyForDescendants = TypeCast(data, &pos); Uri uri(string(reinterpret_cast(data + pos), size - pos)); - proxy->RegisterNotify(uri, notifyForDescendants, nullptr, info); + proxy->RegisterNotify(uri, notifyForDescendants, nullptr, *info); return true; } -bool UnregisterNotifyFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) +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); + proxy->UnregisterNotify(uri, nullptr, *info); return true; } -bool GetExensionProxyFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) +bool GetExensionProxyFuzzTest(shared_ptr proxy, const uint8_t *data, size_t size) { int len = size >> 1; AAFwk::Want want; @@ -96,7 +97,7 @@ bool GetExensionProxyFuzzTest(shared_ptr proxy, const ui auto info = make_shared(want, nullptr); sptr extensionProxy = nullptr; - proxy->GetExtensionProxy(info, extensionProxy); + proxy->GetExtensionProxy(*info, extensionProxy); return true; } } // namespace OHOS @@ -105,7 +106,7 @@ bool GetExensionProxyFuzzTest(shared_ptr proxy, const ui 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())); + auto proxy = std::make_shared(OHOS::sptr(impl.release())); if (proxy == nullptr || impl == nullptr) { return 0; } diff --git a/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.h b/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.h index 4e5738aa..613ad5ca 100644 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.h +++ b/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.h @@ -1,21 +1,21 @@ -/* - * 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" - +/* + * 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 index d6679ccc..3f4ebc41 100644 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/project.xml +++ b/test/fuzztest/fileaccessserviceproxy_fuzzer/project.xml @@ -1,25 +1,25 @@ - - - - - - 1000 - - 300 - - 4096 - - + + + + + + 1000 + + 300 + + 4096 + + diff --git a/test/fuzztest/fileaccessservicestub_fuzzer/BUILD.gn b/test/fuzztest/fileaccessservicestub_fuzzer/BUILD.gn deleted file mode 100644 index d9cdf12c..00000000 --- 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 6198079a..00000000 --- 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 0bbc68f0..00000000 --- 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 eb2e7394..00000000 --- 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 9d13e855..00000000 --- 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 d6679ccc..00000000 --- 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 0ee39053..a44ebeb7 100644 --- a/test/unittest/BUILD.gn +++ b/test/unittest/BUILD.gn @@ -95,6 +95,7 @@ ohos_unittest("external_file_access_basic_test") { "${ability_runtime_path}/frameworks/native/appkit:app_context", "${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 = [ @@ -150,6 +151,7 @@ ohos_unittest("external_file_access_management_test") { "${ability_runtime_path}/frameworks/native/appkit:app_context", "${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 = [ @@ -201,6 +203,7 @@ ohos_unittest("external_file_access_notify_test") { "${ability_runtime_path}/frameworks/native/appkit:app_context", "${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 +238,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", @@ -248,6 +254,7 @@ ohos_unittest("abnormal_file_access_test") { "${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_extension_ability_kit", + "${user_file_service_path}/services:file_access_service_base_source", ] external_deps = [ @@ -294,6 +301,7 @@ 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", ] @@ -303,6 +311,9 @@ ohos_unittest("file_access_ext_stub_impl_test") { "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 +326,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 +352,15 @@ 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_extension_ability_kit", + "${user_file_service_path}/services:file_access_service_base_source_include", + ] external_deps = [ "ability_base:want", @@ -429,7 +396,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 2ca501c5..044f492c 100644 --- a/test/unittest/external_file_access_test_info.cpp +++ b/test/unittest/external_file_access_test_info.cpp @@ -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 8823b71b..fd852951 100644 --- a/test/unittest/external_file_access_test_operations.cpp +++ b/test/unittest/external_file_access_test_operations.cpp @@ -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 1579d2d0..bc9be081 100644 --- a/test/unittest/external_notify_test.cpp +++ b/test/unittest/external_notify_test.cpp @@ -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, diff --git a/test/unittest/file_access_ext_stub_impl_test.cpp b/test/unittest/file_access_ext_stub_impl_test.cpp index d0a2e309..ba36a561 100644 --- a/test/unittest/file_access_ext_stub_impl_test.cpp +++ b/test/unittest/file_access_ext_stub_impl_test.cpp @@ -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,8 +347,8 @@ 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); @@ -347,8 +374,8 @@ 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); @@ -372,10 +399,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 +427,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 +453,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 +480,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); @@ -616,7 +643,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 +670,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 +695,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 +721,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 +845,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 +871,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 +895,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 +920,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 +943,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 +968,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,8 +991,8 @@ 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); @@ -991,8 +1018,8 @@ 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); @@ -1016,10 +1043,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 +1071,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); 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 8df02136..00000000 --- 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 eceedb8e..03333beb 100644 --- a/test/unittest/js_file_access_ext_ability_test.cpp +++ b/test/unittest/js_file_access_ext_ability_test.cpp @@ -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 FileAccessServiceBaseProxy::UnregisterNotifyNoObserver(const Uri &, const ConnectExtensionInfo &) { return 0; } -int32_t FileAccessServiceProxy::ConnectFileExtAbility(const AAFwk::Want &, +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); } /** diff --git a/test/unittest/mock/file_access_ext_ability_mock.h b/test/unittest/mock/file_access_ext_ability_mock.h index ca448c3f..f28508d9 100644 --- a/test/unittest/mock/file_access_ext_ability_mock.h +++ b/test/unittest/mock/file_access_ext_ability_mock.h @@ -42,7 +42,7 @@ public: MOCK_METHOD5(ScanFile, int(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec)); MOCK_METHOD3(GetThumbnail, int(const Uri &uri, const Size &size, std::unique_ptr &pixelMap)); - MOCK_METHOD3(Query, int(const Uri &uri, std::vector &columns, std::vector &results)); + MOCK_METHOD3(Query, int(const Uri &uri, const std::vector &columns, std::vector &results)); MOCK_METHOD2(GetFileInfoFromUri, int(const Uri &selectFile, FileInfo &fileInfo)); MOCK_METHOD2(GetFileInfoFromRelativePath, int(const std::string &selectFile, FileInfo &fileInfo)); MOCK_METHOD1(GetRoots, int(std::vector &rootInfoVec)); @@ -51,7 +51,7 @@ public: MOCK_METHOD1(StopWatcher, int(const Uri &uri)); MOCK_METHOD4(MoveItem, int(const Uri &sourceFile, const Uri &targetParent, std::vector &moveResult, bool force)); - MOCK_METHOD4(MoveFile, int(const Uri &sourceFile, const Uri &targetParent, std::string &fileName, Uri &newFile)); + MOCK_METHOD4(MoveFile, int(const Uri &sourceFile, const Uri &targetParent, const std::string &fileName, Uri &newFile)); MOCK_METHOD4(GetFileInfoNum, int(const std::string &sourceFileUri, const FileFilter &filter, bool recursion, uint32_t &counts)); }; diff --git a/test/unittest/mock/file_access_service_mock.h b/test/unittest/mock/file_access_service_mock.h index 830cc95d..7657080c 100644 --- a/test/unittest/mock/file_access_service_mock.h +++ b/test/unittest/mock/file_access_service_mock.h @@ -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)); -- Gitee From df45cc2551bfaccce6e7b4757bd45d5297d3b8eb Mon Sep 17 00:00:00 2001 From: BrainL Date: Mon, 27 Jan 2025 17:42:49 +0800 Subject: [PATCH 2/2] format BUILD.gn Signed-off-by: BrainL --- .../inner_api/file_access/src/file_access_ext_stub_impl.cpp | 6 ++++-- .../native/file_access_service/src/file_access_service.cpp | 3 --- test/fuzztest/fileaccessserviceproxy_fuzzer/BUILD.gn | 3 ++- 3 files changed, 6 insertions(+), 6 deletions(-) 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 fa6c1906..353ad6dd 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 @@ -294,8 +294,9 @@ int FileAccessExtStubImpl::Query(const Urie &uri, const std::vector return E_PERMISSION; } + std::vector newColumns = const_cast&>(columns); Uri uri_(uri.ToString()); - int ret = extension_->Query(uri_, columns, results); + int ret = extension_->Query(uri_, newColumns, results); return ret; } @@ -437,10 +438,11 @@ int FileAccessExtStubImpl::MoveFile(const Urie &sourceFile, const Urie &targetPa return E_PERMISSION; } + std::string newFileName = const_cast(fileName); Uri sourceFile_(sourceFile.ToString()); Uri targetParent_(targetParent.ToString()); Uri newFile_(""); - int ret = extension_->MoveFile(sourceFile_, targetParent_, fileName, newFile_); + int ret = extension_->MoveFile(sourceFile_, targetParent_, newFileName, newFile_); newFile = Urie(newFile_.ToString()); return ret; } 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 8a75893b..e8f635a2 100644 --- a/services/native/file_access_service/src/file_access_service.cpp +++ b/services/native/file_access_service/src/file_access_service.cpp @@ -347,7 +347,6 @@ int32_t FileAccessService::OperateObsNode(Uri &uri, bool notifyForDescendants, u 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()) { @@ -358,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; @@ -388,7 +386,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)); } diff --git a/test/fuzztest/fileaccessserviceproxy_fuzzer/BUILD.gn b/test/fuzztest/fileaccessserviceproxy_fuzzer/BUILD.gn index 6d52c00e..a20bcfec 100644 --- a/test/fuzztest/fileaccessserviceproxy_fuzzer/BUILD.gn +++ b/test/fuzztest/fileaccessserviceproxy_fuzzer/BUILD.gn @@ -32,7 +32,8 @@ ohos_fuzztest("FileAccessServiceProxyFuzzTest") { "-Wno-unused-variable", "-fno-omit-frame-pointer", ] - deps = [ "${user_file_service_path}/services:file_access_service_base_source" ] + deps = + [ "${user_file_service_path}/services:file_access_service_base_source" ] sources = [ "${user_file_service_path}/services/native/file_access_service/src/file_access_service_client.cpp", "${user_file_service_path}/test/fuzztest/fileaccessserviceproxy_fuzzer/fileaccessserviceproxy_fuzzer.cpp", -- Gitee