diff --git a/data_object/CMakeLists.txt b/data_object/CMakeLists.txt index 37328408223be98e861efe2c20df6c67ae9d0e92..a3189475015cc51f8108e24ccdbdedefad1c2e73 100644 --- a/data_object/CMakeLists.txt +++ b/data_object/CMakeLists.txt @@ -33,7 +33,8 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../utils_native/safwk/native/inc include(${MOCK_DIR}/include/CMakeLists.txt OPTIONAL) include(${KV_STORE_DIR}/interfaces/CMakeLists.txt OPTIONAL) -set(links secure mock adapter distributeddb kvdb common_type) +set(links secure mock adapter distributeddb kvdb) add_library(data_object SHARED ${data_object_src}) target_link_libraries(data_object ${links}) -target_include_directories(data_object PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/innerkits) \ No newline at end of file +target_include_directories(data_object PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/innerkits) +target_include_directories(data_object PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../relational_store/interfaces/inner_api/common_type/include) \ No newline at end of file diff --git a/data_object/data_object.gni b/data_object/data_object.gni index d3b7d9f489c03c40ef4b0cd2f468254216c99eaa..eff61218bb2703636041dcee1bbc25e0721c3e40 100644 --- a/data_object/data_object.gni +++ b/data_object/data_object.gni @@ -14,3 +14,5 @@ kvstore_path = "//foundation/distributeddatamgr/kv_store/frameworks" data_object_base_path = "//foundation/distributeddatamgr/data_object" + +relational_store_path = "//foundation/distributeddatamgr/relational_store" diff --git a/data_object/frameworks/innerkitsimpl/include/adaptor/asset_change_timer.h b/data_object/frameworks/innerkitsimpl/include/adaptor/asset_change_timer.h index e4ac937400f964fe80c5fdcd77b88683f91e434c..8d02238a35caf4ab23d72a3ddbccafc48a6fb420 100644 --- a/data_object/frameworks/innerkitsimpl/include/adaptor/asset_change_timer.h +++ b/data_object/frameworks/innerkitsimpl/include/adaptor/asset_change_timer.h @@ -23,18 +23,20 @@ namespace OHOS::ObjectStore { class AssetChangeTimer { public: - static AssetChangeTimer *GetInstance(FlatObjectStore *flatObjectStore, std::shared_ptr watcher); - void OnAssetChanged(const std::string &sessionId, const std::string &assetKey); + static AssetChangeTimer *GetInstance(FlatObjectStore *flatObjectStore); + void OnAssetChanged( + const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher); private: AssetChangeTimer() = default; ~AssetChangeTimer() = default; AssetChangeTimer(const AssetChangeTimer &) = delete; AssetChangeTimer &operator=(const AssetChangeTimer &) = delete; - AssetChangeTimer(FlatObjectStore *flatObjectStore, std::shared_ptr watcher); - void StartTimer(const std::string &sessionId, const std::string &assetKey); + AssetChangeTimer(FlatObjectStore *flatObjectStore); + void StartTimer(const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher); void StopTimer(const std::string &sessionId, const std::string &assetKey); - std::function ProcessTask(const std::string &sessionId, const std::string &assetKey); + std::function ProcessTask( + const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher); uint32_t HandleAssetChanges(const std::string &sessionId, const std::string &assetKey); bool GetAssetValue(const std::string &sessionId, const std::string &assetKey, Asset &assetValue); @@ -42,7 +44,6 @@ private: std::unordered_map assetChangeTasks_; FlatObjectStore *flatObjectStore_ = nullptr; std::shared_ptr executor_; - std::shared_ptr watcher_; static std::mutex instanceMutex; static AssetChangeTimer *instance; diff --git a/data_object/frameworks/innerkitsimpl/include/adaptor/distributed_objectstore_impl.h b/data_object/frameworks/innerkitsimpl/include/adaptor/distributed_objectstore_impl.h index 04a7338740b71a0a1a6ad4a7cf4acec879383e67..7ce14d1425ee9ffdbede0a2e04baba013ce1895d 100644 --- a/data_object/frameworks/innerkitsimpl/include/adaptor/distributed_objectstore_impl.h +++ b/data_object/frameworks/innerkitsimpl/include/adaptor/distributed_objectstore_impl.h @@ -68,7 +68,8 @@ public: const std::string &assetKey, std::shared_ptr watcher)>; WatcherProxy(const std::shared_ptr objectWatcher, const std::string &sessionId); - void OnChanged(const std::string &sessionId, const std::vector &changedData) override; + void OnChanged( + const std::string &sessionId, const std::vector &changedData, bool enableTransfer) override; void SetAssetChangeCallBack(const AssetChangeCallback &assetChangeCallback); private: bool FindChangedAssetKey(const std::string &changedKey, std::string &assetKey); diff --git a/data_object/frameworks/innerkitsimpl/include/adaptor/flat_object_store.h b/data_object/frameworks/innerkitsimpl/include/adaptor/flat_object_store.h index 4ed9b687582d4b59221d8a06c839af0e291673b3..3408cbb0c95eec6f016d514e360ffc296d597c01 100644 --- a/data_object/frameworks/innerkitsimpl/include/adaptor/flat_object_store.h +++ b/data_object/frameworks/innerkitsimpl/include/adaptor/flat_object_store.h @@ -21,7 +21,6 @@ #include "bytes.h" #include "flat_object_storage_engine.h" -#include "condition_lock.h" #include "distributed_object.h" #include "object_types.h" @@ -31,7 +30,8 @@ public: FlatObjectWatcher(const std::string &sessionId) : TableWatcher(sessionId) { } - virtual void OnChanged(const std::string &sessionid, const std::vector &changedData) = 0; + virtual void OnChanged( + const std::string &sessionId, const std::vector &changedData, bool enableTransfer) = 0; }; class CacheManager { @@ -51,8 +51,9 @@ private: const std::string &deviceId, const std::map> &objectData, const std::function &)> &callback); int32_t RevokeSaveObject( - const std::string &bundleName, const std::string &sessionId, std::function &callback); + const std::string &bundleName, const std::string &sessionId, const std::function &callback); std::mutex mutex_; + static constexpr uint32_t WAIT_TIME = 5; }; class FlatObjectStore { diff --git a/data_object/frameworks/innerkitsimpl/include/adaptor/object_storage_engine.h b/data_object/frameworks/innerkitsimpl/include/adaptor/object_storage_engine.h index 45128255b3a3209a8e562e3351e271cf612a0f23..ef9a747ee0f283030e8820c2c2d5a7e7eceff2f9 100644 --- a/data_object/frameworks/innerkitsimpl/include/adaptor/object_storage_engine.h +++ b/data_object/frameworks/innerkitsimpl/include/adaptor/object_storage_engine.h @@ -33,7 +33,8 @@ public: TableWatcher(const std::string &sessionId) : Watcher(sessionId) { } - virtual void OnChanged(const std::string &sessionid, const std::vector &changedData) = 0; + virtual void OnChanged( + const std::string &sessionId, const std::vector &changedData, bool enableTransfer) = 0; }; class StatusWatcher { diff --git a/data_object/frameworks/innerkitsimpl/include/adaptor/watcher.h b/data_object/frameworks/innerkitsimpl/include/adaptor/watcher.h index cd3ad64622e33ff95406fc8853cb1fd59970f15a..61c02a237515dfc29cafc73a298a326136a25819 100644 --- a/data_object/frameworks/innerkitsimpl/include/adaptor/watcher.h +++ b/data_object/frameworks/innerkitsimpl/include/adaptor/watcher.h @@ -26,8 +26,8 @@ class Watcher : public DistributedDB::KvStoreObserver { public: Watcher(const std::string &sessionId); virtual ~Watcher() = default; - virtual void OnChanged(const std::string &sessionid, const std::vector &changedData) = 0; - + virtual void OnChanged( + const std::string &sessionId, const std::vector &changedData, bool enableTransfer) = 0; void OnChange(const DistributedDB::KvStoreChangedData &data) override; private: diff --git a/data_object/frameworks/innerkitsimpl/include/common/object_types_util.h b/data_object/frameworks/innerkitsimpl/include/common/object_types_util.h index 7253e51e82dc99395dd59ccc325902a26748709c..2d6fb76099e7aa3c4e28594d56dfb5953a70d211 100644 --- a/data_object/frameworks/innerkitsimpl/include/common/object_types_util.h +++ b/data_object/frameworks/innerkitsimpl/include/common/object_types_util.h @@ -21,10 +21,15 @@ namespace OHOS::ITypesUtil { using AssetBindInfo = OHOS::ObjectStore::AssetBindInfo; +using Asset = OHOS::ObjectStore::Asset; template<> -API_EXPORT bool Marshalling(const AssetBindInfo &input, MessageParcel &data); +bool Marshalling(const AssetBindInfo &input, MessageParcel &data); template<> -API_EXPORT bool Unmarshalling(AssetBindInfo &output, MessageParcel &data); +bool Unmarshalling(AssetBindInfo &output, MessageParcel &data); +template<> +bool Marshalling(const Asset &input, MessageParcel &data); +template<> +bool Unmarshalling(Asset &output, MessageParcel &data); } #endif // DISTRIBUTED_RDB_RDB_TYPES_UTIL_H diff --git a/data_object/frameworks/innerkitsimpl/include/communicator/softbus_adapter.h b/data_object/frameworks/innerkitsimpl/include/communicator/softbus_adapter.h index d4b1940a3274cffe9ab7c016a0372432f6696634..bcf0b47fb09d84e150a8a6b6c4a48988e9cd15a4 100644 --- a/data_object/frameworks/innerkitsimpl/include/communicator/softbus_adapter.h +++ b/data_object/frameworks/innerkitsimpl/include/communicator/softbus_adapter.h @@ -25,7 +25,6 @@ #include "app_device_status_change_listener.h" #include "app_types.h" #include "concurrent_map.h" -#include "condition_lock.h" #include "session.h" #include "softbus_bus_center.h" #include "task_scheduler.h" diff --git a/data_object/frameworks/innerkitsimpl/src/adaptor/asset_change_timer.cpp b/data_object/frameworks/innerkitsimpl/src/adaptor/asset_change_timer.cpp index b59145ad2ac51d7b9269ab0722c83fd7518f570d..80513f3919e56b5303b4311725a2d6ab28714704 100644 --- a/data_object/frameworks/innerkitsimpl/src/adaptor/asset_change_timer.cpp +++ b/data_object/frameworks/innerkitsimpl/src/adaptor/asset_change_timer.cpp @@ -1,4 +1,4 @@ - /* +/* * 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. @@ -13,8 +13,8 @@ * limitations under the License. */ #define LOG_TAG "AssetChangeTimer" - #include "asset_change_timer.h" + #include "client_adaptor.h" #include "logger.h" #include "objectstore_errors.h" @@ -23,43 +23,44 @@ namespace OHOS::ObjectStore { std::mutex AssetChangeTimer::instanceMutex; AssetChangeTimer *AssetChangeTimer::instance = nullptr; -AssetChangeTimer *AssetChangeTimer::GetInstance( - FlatObjectStore *flatObjectStore, std::shared_ptr watcher) +AssetChangeTimer *AssetChangeTimer::GetInstance(FlatObjectStore *flatObjectStore) { if (instance == nullptr) { std::lock_guard lockGuard(instanceMutex); if (instance == nullptr) { - instance = new (std::nothrow) AssetChangeTimer(flatObjectStore, watcher); + instance = new (std::nothrow) AssetChangeTimer(flatObjectStore); } } return instance; } -AssetChangeTimer::AssetChangeTimer(FlatObjectStore *flatObjectStore, std::shared_ptr watcher) +AssetChangeTimer::AssetChangeTimer(FlatObjectStore *flatObjectStore) { flatObjectStore_ = flatObjectStore; - watcher_ = watcher; executor_ = std::make_shared(MAX_THREADS, MIN_THREADS); } -void AssetChangeTimer::OnAssetChanged(const std::string &sessionId, const std::string &assetKey) +void AssetChangeTimer::OnAssetChanged( + const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher) { - StartTimer(sessionId, assetKey); + StartTimer(sessionId, assetKey, watcher); } -void AssetChangeTimer::StartTimer(const std::string &sessionId, const std::string &assetKey) +void AssetChangeTimer::StartTimer( + const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher) { std::string key = sessionId + ASSET_SEPARATOR + assetKey; std::lock_guard lockGuard(mutex_); if (assetChangeTasks_.find(key) == assetChangeTasks_.end()) { - assetChangeTasks_[key] = executor_->Schedule( - std::chrono::milliseconds(WAIT_INTERVAL), ProcessTask(sessionId, assetKey)); + assetChangeTasks_[key] = + executor_->Schedule(std::chrono::milliseconds(WAIT_INTERVAL), ProcessTask(sessionId, assetKey, watcher)); } else { assetChangeTasks_[key] = executor_->Reset(assetChangeTasks_[key], std::chrono::milliseconds(WAIT_INTERVAL)); } } -std::function AssetChangeTimer::ProcessTask(const std::string &sessionId, const std::string &assetKey) +std::function AssetChangeTimer::ProcessTask( + const std::string &sessionId, const std::string &assetKey, std::shared_ptr watcher) { return [=]() { LOG_DEBUG("Start working on a task, sessionId: %{public}s, assetKey: %{public}s", sessionId.c_str(), @@ -69,7 +70,7 @@ std::function AssetChangeTimer::ProcessTask(const std::string &sessionId if (status == SUCCESS) { LOG_DEBUG("Asset change task end, start callback, sessionId: %{public}s, assetKey: %{public}s", sessionId.c_str(), assetKey.c_str()); - watcher_->OnChanged(sessionId, {assetKey}); + watcher->OnChanged(sessionId, { assetKey }); } }; } @@ -105,8 +106,8 @@ uint32_t AssetChangeTimer::HandleAssetChanges(const std::string &sessionId, cons } status = proxy->OnAssetChanged(flatObjectStore_->GetBundleName(), sessionId, deviceId, assetValue); if (status != SUCCESS) { - LOG_ERROR("OnAssetChanged failed status: %{public}d, sessionId: %{public}s, assetKey: %{public}s", - status, sessionId.c_str(), assetKey.c_str()); + LOG_ERROR("OnAssetChanged failed status: %{public}d, sessionId: %{public}s, assetKey: %{public}s", status, + sessionId.c_str(), assetKey.c_str()); } return status; } diff --git a/data_object/frameworks/innerkitsimpl/src/adaptor/distributed_object_store_impl.cpp b/data_object/frameworks/innerkitsimpl/src/adaptor/distributed_object_store_impl.cpp index bee691ed36055da78cfdebf59755154f7ebbfc04..ef627a710087e0deff49a347c2aa0b55dac0938f 100644 --- a/data_object/frameworks/innerkitsimpl/src/adaptor/distributed_object_store_impl.cpp +++ b/data_object/frameworks/innerkitsimpl/src/adaptor/distributed_object_store_impl.cpp @@ -154,8 +154,8 @@ uint32_t DistributedObjectStoreImpl::Watch(DistributedObject *object, std::share std::shared_ptr watcherProxy = std::make_shared(watcher, object->GetSessionId()); watcherProxy->SetAssetChangeCallBack( [=](const std::string &sessionId, const std::string &assetKey, std::shared_ptr objectWatcher) { - AssetChangeTimer *assetChangeTimer = AssetChangeTimer::GetInstance(flatObjectStore_, objectWatcher); - assetChangeTimer->OnAssetChanged(sessionId, assetKey); + AssetChangeTimer *assetChangeTimer = AssetChangeTimer::GetInstance(flatObjectStore_); + assetChangeTimer->OnAssetChanged(sessionId, assetKey, objectWatcher); }); uint32_t status = flatObjectStore_->Watch(object->GetSessionId(), watcherProxy); if (status != SUCCESS) { @@ -208,27 +208,28 @@ WatcherProxy::WatcherProxy(const std::shared_ptr objectWatcher, c { } -void WatcherProxy::OnChanged(const std::string &sessionId, const std::vector &changedData) +void WatcherProxy::OnChanged( + const std::string &sessionId, const std::vector &changedData, bool enableTransfer) { - std::unordered_set assetKeys; + std::unordered_set transferKeys; std::vector otherKeys; for (const auto &str : changedData) { - if (str.find(ASSET_DOT) == std::string::npos) { + if (!enableTransfer || str.find(ASSET_DOT) == std::string::npos) { if (str != DEVICEID_KEY) { otherKeys.push_back(str); } } else { std::string assetKey; if (FindChangedAssetKey(str, assetKey)) { - assetKeys.insert(assetKey); + transferKeys.insert(assetKey); } } } if (!otherKeys.empty()) { objectWatcher_->OnChanged(sessionId, otherKeys); } - if (assetChangeCallback_ != nullptr && !assetKeys.empty()) { - for (auto &assetKey : assetKeys) { + if (assetChangeCallback_ != nullptr && !transferKeys.empty()) { + for (auto &assetKey : transferKeys) { assetChangeCallback_(sessionId, assetKey, objectWatcher_); } } diff --git a/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_storage_engine.cpp b/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_storage_engine.cpp index b761b509332fe9dbd4667e92b0af575c217b1d3d..d862c4e31655a1431b5b0bc91c816dc53f071739 100644 --- a/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_storage_engine.cpp +++ b/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_storage_engine.cpp @@ -433,9 +433,13 @@ void FlatObjectStorageEngine::NotifyChange(const std::string &sessionId, } std::vector data {}; for (const auto &item : changedData) { - data.push_back(item.first); + std::string key = item.first; + if (key.compare(0, FIELDS_PREFIX_LEN, FIELDS_PREFIX) == 0) { + key = key.substr(FIELDS_PREFIX_LEN); + } + data.push_back(key); } - observerMap_[sessionId]->OnChanged(sessionId, data); + observerMap_[sessionId]->OnChanged(sessionId, data, false); } void Watcher::OnChange(const DistributedDB::KvStoreChangedData &data) @@ -458,7 +462,7 @@ void Watcher::OnChange(const DistributedDB::KvStoreChangedData &data) changedData.push_back(tmp.substr(FIELDS_PREFIX_LEN)); } } - this->OnChanged(sessionId_, changedData); + this->OnChanged(sessionId_, changedData, true); } Watcher::Watcher(const std::string &sessionId) : sessionId_(sessionId) diff --git a/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_store.cpp b/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_store.cpp index cf78cb818e81c09e960f7ad2e4f326efdcff9a89..26f6e5c72df70dbd8e6170a8a81e940439b4da2a 100644 --- a/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_store.cpp +++ b/data_object/frameworks/innerkitsimpl/src/adaptor/flat_object_store.cpp @@ -15,6 +15,8 @@ #include "flat_object_store.h" +#include "block_data.h" +#include "bytes_utils.h" #include "client_adaptor.h" #include "distributed_objectstore_impl.h" #include "logger.h" @@ -23,7 +25,6 @@ #include "objectstore_errors.h" #include "softbus_adapter.h" #include "string_utils.h" -#include "bytes_utils.h" namespace OHOS::ObjectStore { FlatObjectStore::FlatObjectStore(const std::string &bundleName) @@ -373,14 +374,14 @@ uint32_t CacheManager::Save(const std::string &bundleName, const std::string &se const std::map> &objectData) { std::unique_lock lck(mutex_); - ConditionLock conditionLock; + auto block = std::make_shared>>(WAIT_TIME, std::tuple{ true, ERR_DB_GET_FAIL }); int32_t status = SaveObject(bundleName, sessionId, deviceId, objectData, - [this, &deviceId, &conditionLock](const std::map &results) { + [&deviceId, block](const std::map &results) { LOG_INFO("CacheManager::task callback"); if (results.count(deviceId) != 0) { - conditionLock.Notify(results.at(deviceId)); + block->SetValue({ false, results.at(deviceId) }); } else { - conditionLock.Notify(ERR_DB_GET_FAIL); + block->SetValue({ false, ERR_DB_GET_FAIL }); } }); if (status != SUCCESS) { @@ -388,28 +389,27 @@ uint32_t CacheManager::Save(const std::string &bundleName, const std::string &se return status; } LOG_INFO("CacheManager::start wait"); - status = conditionLock.Wait(); - LOG_INFO("CacheManager::end wait, %{public}d", status); - return status == SUCCESS ? status : ERR_DB_GET_FAIL; + auto [timeout, res] = block->GetValue(); + LOG_INFO("CacheManager::end wait, timeout: %{public}d, result: %{public}d", timeout, res); + return res; } uint32_t CacheManager::RevokeSave(const std::string &bundleName, const std::string &sessionId) { std::unique_lock lck(mutex_); - ConditionLock conditionLock; - std::function callback = [this, &conditionLock](int32_t result) { + auto block = std::make_shared>>(WAIT_TIME, std::tuple{ true, ERR_DB_GET_FAIL }); + int32_t status = RevokeSaveObject(bundleName, sessionId, [block](int32_t result) { LOG_INFO("CacheManager::task callback"); - conditionLock.Notify(result); - }; - int32_t status = RevokeSaveObject(bundleName, sessionId, callback); + block->SetValue({ false, result }); + }); if (status != SUCCESS) { LOG_ERROR("RevokeSaveObject failed"); return status; } LOG_INFO("CacheManager::start wait"); - status = conditionLock.Wait(); - LOG_INFO("CacheManager::end wait, %{public}d", status); - return status == SUCCESS ? status : ERR_DB_GET_FAIL; + auto [timeout, res] = block->GetValue(); + LOG_INFO("CacheManager::end wait, timeout: %{public}d, result: %{public}d", timeout, res); + return res; } int32_t CacheManager::SaveObject(const std::string &bundleName, const std::string &sessionId, @@ -436,7 +436,7 @@ int32_t CacheManager::SaveObject(const std::string &bundleName, const std::strin } int32_t CacheManager::RevokeSaveObject( - const std::string &bundleName, const std::string &sessionId, std::function &callback) + const std::string &bundleName, const std::string &sessionId, const std::function &callback) { sptr proxy = ClientAdaptor::GetObjectService(); if (proxy == nullptr) { diff --git a/data_object/frameworks/innerkitsimpl/src/communicator/process_communicator_impl.cpp b/data_object/frameworks/innerkitsimpl/src/communicator/process_communicator_impl.cpp index 2745a200ea010f6f2a4776a50dbaad812a364c54..3139edaa46a4e03bc885ebfce550f0cad2b04980 100644 --- a/data_object/frameworks/innerkitsimpl/src/communicator/process_communicator_impl.cpp +++ b/data_object/frameworks/innerkitsimpl/src/communicator/process_communicator_impl.cpp @@ -131,10 +131,8 @@ uint32_t ProcessCommunicatorImpl::GetMtuSize() uint32_t ProcessCommunicatorImpl::GetMtuSize(const DeviceInfos &devInfo) { - LOG_INFO("GetMtuSize start"); std::vector devInfos = CommunicationProvider::GetInstance().GetDeviceList(); for (auto const &entry : devInfos) { - LOG_INFO("GetMtuSize deviceType: %{public}s", entry.deviceType.c_str()); bool isWatch = (entry.deviceType == SMART_WATCH_TYPE || entry.deviceType == CHILDREN_WATCH_TYPE); if (entry.deviceId == devInfo.identifier && isWatch) { return MTU_SIZE_WATCH; diff --git a/data_object/frameworks/innerkitsimpl/src/communicator/softbus_adapter_standard.cpp b/data_object/frameworks/innerkitsimpl/src/communicator/softbus_adapter_standard.cpp index 39addbc858db1ad1e487050b871bb94cd01efa05..f76fa7e3cf78c78adadcb04fd1a8bb5a44db8191 100644 --- a/data_object/frameworks/innerkitsimpl/src/communicator/softbus_adapter_standard.cpp +++ b/data_object/frameworks/innerkitsimpl/src/communicator/softbus_adapter_standard.cpp @@ -164,7 +164,7 @@ std::vector SoftBusAdapter::GetDeviceList() const LOG_ERROR("GetAllNodeDeviceInfo error"); return dis; } - LOG_INFO("GetAllNodeDeviceInfo success infoNum=%{public}d", infoNum); + LOG_DEBUG("GetAllNodeDeviceInfo success infoNum=%{public}d", infoNum); for (int i = 0; i < infoNum; i++) { std::string uuid = DevManager::GetInstance()->GetUuidByNodeId(std::string(info[i].networkId)); @@ -731,7 +731,6 @@ void AppDataListenerWrap::OnMessageReceived(int sessionId, const void *data, uns void AppDataListenerWrap::OnBytesReceived(int sessionId, const void *data, unsigned int dataLen) { - LOG_INFO("begin"); if (sessionId == INVALID_SESSION_ID) { return; } diff --git a/data_object/frameworks/innerkitsimpl/src/object_types_util.cpp b/data_object/frameworks/innerkitsimpl/src/object_types_util.cpp index 101e2e773749f3652f86a9d1c76e456c0937891c..60bc476c0cee322bb99a33949e119cf5019fafec 100644 --- a/data_object/frameworks/innerkitsimpl/src/object_types_util.cpp +++ b/data_object/frameworks/innerkitsimpl/src/object_types_util.cpp @@ -28,4 +28,16 @@ bool Unmarshalling(AssetBindInfo &output, MessageParcel &data) return ITypesUtil::Unmarshal(data, output.storeName, output.tableName, output.primaryKey, output.field, output.assetName); } +template<> +bool Marshalling(const Asset &input, MessageParcel &data) +{ + return ITypesUtil::Marshal(data, input.name, input.uri, input.path, input.createTime, + input.modifyTime, input.size, input.status, input.hash); +} +template<> +bool Unmarshalling(Asset &output, MessageParcel &data) +{ + return ITypesUtil::Unmarshal(data, output.name, output.uri, output.path, output.createTime, + output.modifyTime, output.size, output.status, output.hash); +} } diff --git a/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/BUILD.gn b/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/BUILD.gn index 890bb211c61bdef46588c5630a4fd2ad9e2c59ec..8a8cd1bce93b3a950bbaaadb49317f97a2d53ab0 100644 --- a/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/BUILD.gn +++ b/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/BUILD.gn @@ -22,6 +22,7 @@ config("module_private_config") { "../../../../../frameworks/innerkitsimpl/include/adaptor", "../../../../../frameworks/innerkitsimpl/include/common", "${data_object_base_path}/frameworks/innerkitsimpl/include", + "${relational_store_path}/interfaces/inner_api/common_type/include", ] } @@ -39,10 +40,7 @@ ohos_fuzztest("ObjectStoreFuzzTest") { "//foundation/distributeddatamgr/kv_store/frameworks/libs/distributeddb:distributeddb", ] - external_deps = [ - "hilog:libhilog", - "relational_store:common_type", - ] + external_deps = [ "hilog:libhilog" ] } ############################################################################### diff --git a/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/objectstore_fuzzer.cpp b/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/objectstore_fuzzer.cpp index 8a1a5fec90a58bdf6adbb93cfc1076d06bf60b68..d75d55a29b44c60bb24405dfec28d2a43cd65563 100644 --- a/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/objectstore_fuzzer.cpp +++ b/data_object/frameworks/innerkitsimpl/test/fuzztest/objectstore_fuzzer/objectstore_fuzzer.cpp @@ -31,11 +31,13 @@ constexpr const char *TABLESESSIONID = "654321"; class TableWatcherImpl : public TableWatcher { public: explicit TableWatcherImpl(const std::string &sessionId) : TableWatcher(sessionId) {} - void OnChanged(const std::string &sessionid, const std::vector &changedData) override; + void OnChanged( + const std::string &sessionid, const std::vector &changedData, bool enableTransfer) override; virtual ~TableWatcherImpl(); }; TableWatcherImpl::~TableWatcherImpl() {} -void TableWatcherImpl::OnChanged(const std::string &sessionid, const std::vector &changedData) {} +void TableWatcherImpl::OnChanged( + const std::string &sessionid, const std::vector &changedData, bool enableTransfer) {} uint32_t SetUpTestCase() { diff --git a/data_object/frameworks/innerkitsimpl/test/unittest/BUILD.gn b/data_object/frameworks/innerkitsimpl/test/unittest/BUILD.gn index 533922408ce3e364285d8f9b273056c7afce1e72..63c34eda1cf2ebb6c3bbc62a593a9b72259469e8 100644 --- a/data_object/frameworks/innerkitsimpl/test/unittest/BUILD.gn +++ b/data_object/frameworks/innerkitsimpl/test/unittest/BUILD.gn @@ -12,7 +12,7 @@ # limitations under the License. import("//build/test.gni") - +import("//foundation/distributeddatamgr/data_object/data_object.gni") module_output_path = "data_object/impl" data_object_base_path = "//foundation/distributeddatamgr/data_object" @@ -35,6 +35,7 @@ config("module_private_config") { "${kv_store_include_path}/interfaces/include/", "${kv_store_include_path}/interfaces/include/relational", "//foundation/distributeddatamgr/kv_store/frameworks/common", + "${relational_store_path}/interfaces/inner_api/common_type/include", ] } @@ -56,7 +57,6 @@ ohos_unittest("NativeObjectStoreTest") { "access_token:libnativetoken", "access_token:libtoken_setproc", "hilog:libhilog", - "relational_store:common_type", ] deps = [ diff --git a/data_object/frameworks/innerkitsimpl/test/unittest/mock/include/mock_flat_object_watcher.h b/data_object/frameworks/innerkitsimpl/test/unittest/mock/include/mock_flat_object_watcher.h index 7f7f27710c1f2ceef06a9a8cbec07677d827a2a8..70f27c487df0c848721e55d6ad94e14304c91da4 100644 --- a/data_object/frameworks/innerkitsimpl/test/unittest/mock/include/mock_flat_object_watcher.h +++ b/data_object/frameworks/innerkitsimpl/test/unittest/mock/include/mock_flat_object_watcher.h @@ -24,7 +24,8 @@ public: MockFlatObjectWatcher(const std::string &sessionId) : FlatObjectWatcher(sessionId) { } - void OnChanged(const std::string &sessionid, const std::vector &changedData) override + void OnChanged( + const std::string &sessionid, const std::vector &changedData, bool enableTransfer) override { } }; diff --git a/data_object/frameworks/innerkitsimpl/test/unittest/src/communicator_test.cpp b/data_object/frameworks/innerkitsimpl/test/unittest/src/communicator_test.cpp index 25f92cdc6f7445fe673ce0a91ddd3163fed56ea6..94c9f16064df0885a830601e05ce66fe17666180 100644 --- a/data_object/frameworks/innerkitsimpl/test/unittest/src/communicator_test.cpp +++ b/data_object/frameworks/innerkitsimpl/test/unittest/src/communicator_test.cpp @@ -595,4 +595,17 @@ HWTEST_F(NativeCommunicatorTest, DevManager_GetUuidByNodeId_001, TestSize.Level1 auto ret = DevManager::GetInstance()->GetUuidByNodeId(nodeId); EXPECT_EQ(true, ret.empty()); } + +/** +* @tc.name: DevManager_GetLocalDevice +* @tc.desc: test DevManager GetLocalDevice. +* @tc.type: FUNC + */ +HWTEST_F(NativeCommunicatorTest, DevManager_GetLocalDevice_001, TestSize.Level1) +{ + DevManager *devManager = DevManager::GetInstance(); + EXPECT_TRUE(devManager != nullptr); + DevManager::DetailInfo detailInfo = devManager->GetLocalDevice(); + EXPECT_EQ(detailInfo.networkId, ""); +} } \ No newline at end of file diff --git a/data_object/frameworks/innerkitsimpl/test/unittest/src/object_store_test.cpp b/data_object/frameworks/innerkitsimpl/test/unittest/src/object_store_test.cpp index 648e144873f36be45cf56ba6ce52ce4cccc5a577..bebca521f2f5b2e084ca69d8d7a6939493d1e523 100644 --- a/data_object/frameworks/innerkitsimpl/test/unittest/src/object_store_test.cpp +++ b/data_object/frameworks/innerkitsimpl/test/unittest/src/object_store_test.cpp @@ -47,12 +47,14 @@ constexpr HiLogLabel LABEL = { LOG_CORE, 0, "DistributedTest" }; class TableWatcherImpl : public TableWatcher { public: explicit TableWatcherImpl(const std::string &sessionId) : TableWatcher(sessionId) {} - void OnChanged(const std::string &sessionid, const std::vector &changedData) override; + void OnChanged( + const std::string &sessionid, const std::vector &changedData, bool enableTransfer) override; virtual ~TableWatcherImpl(); }; TableWatcherImpl::~TableWatcherImpl() {} -void TableWatcherImpl::OnChanged(const std::string &sessionid, const std::vector &changedData) {} +void TableWatcherImpl::OnChanged( + const std::string &sessionid, const std::vector &changedData, bool enableTransfer) {} class StatusNotifierImpl : public StatusWatcher { public: @@ -645,6 +647,37 @@ HWTEST_F(NativeObjectStoreTest, DistributedObject_GetComplex_002, TestSize.Level EXPECT_EQ(SUCCESS, ret); } +/** + * @tc.name: DistributedObject_SetAsset_001 + * @tc.desc: test DistributedObjectStore SetAsset. + * @tc.type: FUNC + */ +HWTEST_F(NativeObjectStoreTest, DistributedObject_SetAsset_001, TestSize.Level1) +{ + std::string bundleName = "default"; + std::string sessionId = "123456"; + DistributedObjectStore *objectStore = DistributedObjectStore::GetInstance(bundleName); + EXPECT_NE(nullptr, objectStore); + DistributedObject *object = objectStore->CreateObject(sessionId); + EXPECT_NE(nullptr, object); + + uint32_t ret = object->PutString("attachment.name", "1.txt"); + EXPECT_EQ(SUCCESS, ret); + + std::string value; + ret = object->GetString("attachment.name", value); + EXPECT_EQ(SUCCESS, ret); + EXPECT_EQ(value, "1.txt"); + + std::string deviceId; + ret = object->GetString("__deviceId", deviceId); + EXPECT_EQ(SUCCESS, ret); + EXPECT_FALSE(deviceId.empty()); + + ret = objectStore->DeleteObject(sessionId); + EXPECT_EQ(SUCCESS, ret); +} + /** * @tc.name: DistributedObject_TestSetSessionId_001 * @tc.desc: test DistributedObjectStore TestSetSessionId. diff --git a/data_object/frameworks/jskitsimpl/include/adaptor/js_watcher.h b/data_object/frameworks/jskitsimpl/include/adaptor/js_watcher.h index 54ee6a11518132c9625bc1b02a91c20d5c62f151..147e69fd8a39a189cc0f9e5cf1508b886c84a1f0 100644 --- a/data_object/frameworks/jskitsimpl/include/adaptor/js_watcher.h +++ b/data_object/frameworks/jskitsimpl/include/adaptor/js_watcher.h @@ -56,7 +56,8 @@ public: class ChangeEventListener : public EventListener { public: - ChangeEventListener(JSWatcher *watcher, DistributedObjectStore *objectStore, DistributedObject *object); + ChangeEventListener( + std::weak_ptr watcher, DistributedObjectStore *objectStore, DistributedObject *object); bool Add(napi_env env, napi_value handler) override; @@ -67,19 +68,19 @@ private: bool isWatched_ = false; DistributedObjectStore *objectStore_; DistributedObject *object_; - JSWatcher *watcher_; + std::weak_ptr watcher_; }; class StatusEventListener : public EventListener { public: - StatusEventListener(JSWatcher *watcher, const std::string &sessionId); + StatusEventListener(std::weak_ptr watcher, const std::string &sessionId); bool Add(napi_env env, napi_value handler) override; bool Del(napi_env env, napi_value handler) override; void Clear(napi_env env) override; private: - JSWatcher *watcher_; + std::weak_ptr watcher_; std::string sessionId_; }; @@ -98,6 +99,8 @@ public: void Emit(const char *type, const std::string &sessionId, const std::string &networkId, const std::string &status); bool IsEmpty(); + + void SetListener(ChangeEventListener *changeEventListener, StatusEventListener *statusEventListener); private: struct ChangeArgs { ChangeArgs(const napi_ref callback, const std::string &sessionId, const std::vector &changeData); @@ -123,7 +126,7 @@ private: class WatcherImpl : public ObjectWatcher { public: - WatcherImpl(JSWatcher *watcher) : watcher_(watcher) + WatcherImpl(std::weak_ptr watcher) : watcher_(watcher) { } @@ -132,7 +135,7 @@ public: void OnChanged(const std::string &sessionid, const std::vector &changedData) override; private: - JSWatcher *watcher_ = nullptr; + std::weak_ptr watcher_; }; } // namespace OHOS::ObjectStore diff --git a/data_object/frameworks/jskitsimpl/include/adaptor/notifier_impl.h b/data_object/frameworks/jskitsimpl/include/adaptor/notifier_impl.h index 0f6d394f1b4c68ef2ad19919f1c0774df4bf134e..c4f6219aa08c0343427635ed60461656cf042107 100644 --- a/data_object/frameworks/jskitsimpl/include/adaptor/notifier_impl.h +++ b/data_object/frameworks/jskitsimpl/include/adaptor/notifier_impl.h @@ -25,14 +25,14 @@ class NotifierImpl : public StatusNotifier { public: static std::shared_ptr GetInstance(); virtual ~NotifierImpl(); - void AddWatcher(std::string &sessionId, JSWatcher *watcher); + void AddWatcher(std::string &sessionId, std::weak_ptr watcher); void DelWatcher(std::string &sessionId); void OnChanged( const std::string &sessionId, const std::string &networkId, const std::string &onlineStatus) override; private: std::mutex mutex_; - std::map watchers_; + std::map> watchers_; }; } // namespace OHOS::ObjectStore #endif // JS_NOTIFIER_IMPL_H diff --git a/data_object/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp b/data_object/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp index 790da68ea3123f1d4feda2df8c26c36af48cefc8..aa2be5ba745cf631a38c7a230990b411d966ed29 100644 --- a/data_object/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp +++ b/data_object/frameworks/jskitsimpl/src/adaptor/js_object_wrapper.cpp @@ -42,6 +42,10 @@ bool JSObjectWrapper::AddWatch(napi_env env, const char *type, napi_value handle std::unique_lock cacheLock(watchMutex_); if (watcher_ == nullptr) { watcher_ = std::make_shared(env, objectStore_, object_); + std::weak_ptr watcher = watcher_; + auto changeEventListener = new ChangeEventListener(watcher, objectStore_, object_); + auto statusEventListener = new StatusEventListener(watcher, object_->GetSessionId()); + watcher_->SetListener(changeEventListener, statusEventListener); } return watcher_->On(type, handler); } diff --git a/data_object/frameworks/jskitsimpl/src/adaptor/js_watcher.cpp b/data_object/frameworks/jskitsimpl/src/adaptor/js_watcher.cpp index e9422aa50e3c1b97a749f2389458b98fbfa80226..30f437ed4857f5f982ad6c10605514912ce7db18 100644 --- a/data_object/frameworks/jskitsimpl/src/adaptor/js_watcher.cpp +++ b/data_object/frameworks/jskitsimpl/src/adaptor/js_watcher.cpp @@ -27,8 +27,6 @@ namespace OHOS::ObjectStore { JSWatcher::JSWatcher(const napi_env env, DistributedObjectStore *objectStore, DistributedObject *object) : UvQueue(env), env_(env) { - changeEventListener_ = new ChangeEventListener(this, objectStore, object); - statusEventListener_ = new StatusEventListener(this, object->GetSessionId()); } JSWatcher::~JSWatcher() @@ -193,6 +191,12 @@ bool JSWatcher::IsEmpty() return false; } +void JSWatcher::SetListener(ChangeEventListener *changeEventListener, StatusEventListener *statusEventListener) +{ + changeEventListener_ = changeEventListener; + statusEventListener_ = statusEventListener; +} + EventHandler *EventListener::Find(napi_env env, napi_value handler) { EventHandler *result = nullptr; @@ -277,17 +281,17 @@ bool EventListener::Add(napi_env env, napi_value handler) void WatcherImpl::OnChanged(const std::string &sessionid, const std::vector &changedData) { - if (watcher_ == nullptr) { - LOG_ERROR("watcher_ is null"); - return; + std::shared_ptr lockedWatcher = watcher_.lock(); + if (lockedWatcher) { + lockedWatcher->Emit(Constants::CHANGE, sessionid, changedData); + } else { + LOG_ERROR("watcher expired"); } - watcher_->Emit(Constants::CHANGE, sessionid, changedData); } WatcherImpl::~WatcherImpl() { LOG_ERROR("destroy"); - watcher_ = nullptr; } bool ChangeEventListener::Add(napi_env env, napi_value handler) @@ -335,7 +339,7 @@ void ChangeEventListener::Clear(napi_env env) } ChangeEventListener::ChangeEventListener( - JSWatcher *watcher, DistributedObjectStore *objectStore, DistributedObject *object) + std::weak_ptr watcher, DistributedObjectStore *objectStore, DistributedObject *object) : objectStore_(objectStore), object_(object), watcher_(watcher) { } @@ -363,7 +367,7 @@ void StatusEventListener::Clear(napi_env env) EventListener::Clear(env); } -StatusEventListener::StatusEventListener(JSWatcher *watcher, const std::string &sessionId) +StatusEventListener::StatusEventListener(std::weak_ptr watcher, const std::string &sessionId) : watcher_(watcher), sessionId_(sessionId) { } diff --git a/data_object/frameworks/jskitsimpl/src/adaptor/notifier_impl.cpp b/data_object/frameworks/jskitsimpl/src/adaptor/notifier_impl.cpp index 65a61fde77f42fa4004fefbb3a3b8fd6ec0f841b..d52a6500bdb4cd7c0d434c7806a8449b049b36b6 100644 --- a/data_object/frameworks/jskitsimpl/src/adaptor/notifier_impl.cpp +++ b/data_object/frameworks/jskitsimpl/src/adaptor/notifier_impl.cpp @@ -38,7 +38,7 @@ std::shared_ptr NotifierImpl::GetInstance() return instance; } -void NotifierImpl::AddWatcher(std::string &sessionId, JSWatcher *watcher) +void NotifierImpl::AddWatcher(std::string &sessionId, std::weak_ptr watcher) { std::lock_guard lock(mutex_); watchers_.insert_or_assign(sessionId, watcher); @@ -59,9 +59,14 @@ void NotifierImpl::OnChanged( if (watchers_.count(sessionId) != 0) { LOG_INFO( "start emit %{public}s %{public}s %{public}s", sessionId.c_str(), networkId.c_str(), onlineStatus.c_str()); - watchers_.at(sessionId)->Emit("status", sessionId, networkId, onlineStatus); - LOG_INFO( - "end emit %{public}s %{public}s %{public}s", sessionId.c_str(), networkId.c_str(), onlineStatus.c_str()); + std::shared_ptr lockedWatcher = watchers_.at(sessionId).lock(); + if (lockedWatcher) { + lockedWatcher->Emit("status", sessionId, networkId, onlineStatus); + LOG_INFO("end emit %{public}s %{public}s %{public}s", sessionId.c_str(), networkId.c_str(), + onlineStatus.c_str()); + } else { + LOG_ERROR("watcher expired"); + } } } NotifierImpl::~NotifierImpl() diff --git a/data_object/frameworks/jskitsimpl/src/common/js_util.cpp b/data_object/frameworks/jskitsimpl/src/common/js_util.cpp index ec05841958ab80ec4f44a3ef51a93fc5f84f9986..3e29ffaaf923196e126b662fe7c1df3e4ddef945 100644 --- a/data_object/frameworks/jskitsimpl/src/common/js_util.cpp +++ b/data_object/frameworks/jskitsimpl/src/common/js_util.cpp @@ -18,7 +18,7 @@ #include #include "logger.h" -#include "common_value_object.h" +#include "common_types.h" namespace OHOS::ObjectStore { constexpr int32_t STR_MAX_LENGTH = 4096; @@ -239,28 +239,30 @@ napi_status JSUtil::GetValue(napi_env env, napi_value in, Assets &assets) napi_status JSUtil::GetValue(napi_env env, napi_value in, ValuesBucket &out) { - napi_value keys = 0; + out.clear(); + napi_value values = nullptr; + uint32_t count = 0; napi_get_all_property_names(env, in, napi_key_own_only, static_cast(napi_key_enumerable | napi_key_skip_symbols), - napi_key_numbers_to_strings, &keys); - uint32_t arrLen = 0; - auto status = napi_get_array_length(env, keys, &arrLen); - LOG_ERROR_RETURN(status == napi_ok, "error! The type of values must be a ValuesBucket.", status); - for (size_t i = 0; i < arrLen; ++i) { - napi_value jsKey = 0; - status = napi_get_element(env, keys, i, &jsKey); - LOG_ERROR_RETURN((status == napi_ok), "no element! The type of values must be a ValuesBucket.", status); - std::string key; - status = GetValue(env, jsKey, key); - LOG_ERROR_RETURN((status == napi_ok), "get key failed", status); - napi_value valueJs = 0; - napi_get_property(env, in, jsKey, &valueJs); - ValueObject valueObject; - status = GetValue(env, valueJs, valueObject.value); + napi_key_numbers_to_strings, &values); + napi_status status = napi_get_array_length(env, values, &count); + LOG_ERROR_RETURN(status == napi_ok && count > 0, "get ValuesBucket failed", napi_invalid_arg); + napi_value key = nullptr; + napi_value val = nullptr; + for (uint32_t index = 0; index < count; index++) { + status = napi_get_element(env, values, index, &key); + LOG_ERROR_RETURN(status == napi_ok && key != nullptr, "no element", napi_invalid_arg); + std::string keyStr; + status = GetValue(env, key, keyStr); + LOG_ERROR_RETURN(status == napi_ok, "get key failed", status); + status = napi_get_property(env, in, key, &val); + LOG_ERROR_RETURN(status == napi_ok && val != nullptr, "no element", napi_invalid_arg); + ValueObject value; + status = GetValue(env, val, value); if (status == napi_ok) { - out.Put(key, valueObject); + out.insert(std::pair(keyStr, value)); } else if (status != napi_generic_failure) { - LOG_ERROR("The value type %{public}s is invalid: ", key.c_str()); + LOG_ERROR("The value type %{public}s is invalid: ", keyStr.c_str()); return status; } } diff --git a/data_object/frameworks/jskitsimpl/test/unittest/src/ObjectStoreJsunitV9.test.js b/data_object/frameworks/jskitsimpl/test/unittest/src/ObjectStoreJsunitV9.test.js index 02b69e9b0db433d7d74a75a118ed3487ed5485aa..385012671e4b14e136687a4004f5e39e8c481b49 100644 --- a/data_object/frameworks/jskitsimpl/test/unittest/src/ObjectStoreJsunitV9.test.js +++ b/data_object/frameworks/jskitsimpl/test/unittest/src/ObjectStoreJsunitV9.test.js @@ -14,6 +14,7 @@ */ import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it} from 'deccjsunit/index'; import distributedObject from '@ohos.data.distributedDataObject'; +import commonType from '@ohos.data.commonType'; import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; import featureAbility from '@ohos.ability.featureAbility'; import bundle from '@ohos.bundle'; @@ -75,11 +76,13 @@ describe('objectStoreTest', function () { console.log(TAG + "*************Unit Test Begin*************"); - /** * @tc.name: V9testsetSessionId001 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testcreate001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testcreate001', 0, function () { console.log(TAG + "************* V9testcreate001 start *************"); @@ -115,7 +118,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testsetSessionId001 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testsetSessionId001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testsetSessionId001', 0, function () { console.log(TAG + "************* V9testsetSessionId001 start *************"); @@ -141,7 +147,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testsetSessionId002 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testsetSessionId002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testsetSessionId002', 0, function () { console.log(TAG + "************* V9testsetSessionId002 start *************"); @@ -164,7 +173,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testsetSessionId003 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testsetSessionId003 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testsetSessionId003', 0, function () { console.log(TAG + "************* V9testsetSessionId003 start *************"); @@ -185,7 +197,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testsetSessionId004 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testsetSessionId004 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testsetSessionId004', 0, function () { console.log(TAG + "************* V9testsetSessionId004 start *************"); @@ -218,7 +233,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testOn001 * @tc.desc: object join session and on,object can receive callback when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOn001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOn001', 0, function () { console.log(TAG + "************* V9testOn001 start *************"); @@ -261,7 +279,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testOn002 * @tc.desc: object join session and on,then object change data twice,object can receive two callbacks when data has been changed - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOn002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOn002', 0, function () { console.log(TAG + "************* V9testOn002 start *************"); @@ -295,7 +316,10 @@ describe('objectStoreTest', function () { /** * @tc.name: testOn003 * @tc.desc object join session and on,then object do not change data,object can not receive callbacks - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: testOn003 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOn003', 0, function () { console.log(TAG + "************* V9testOn003 start *************"); @@ -330,7 +354,10 @@ describe('objectStoreTest', function () { /** * @tc.name V9testOff001 * @tc.desc object join session and on&off,object can not receive callback after off - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOff001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOff001', 0, function () { console.log(TAG + "************* V9testOff001 start *************"); @@ -376,7 +403,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testOff002 * @tc.desc object join session and off,object can not receive callback - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOff002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOff002', 0, function () { console.log(TAG + "************* V9testOff002 start *************"); @@ -407,7 +437,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testOnStatus001 * @tc.desc: object set a listener to watch another object online/offline - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOnStatus001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOnStatus001', 0, function () { console.log(TAG + "************* V9testOnStatus001 start *************"); @@ -433,7 +466,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testOnStatus002 * @tc.desc: object set several listener and can unWatch all watcher - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testOnStatus002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testOnStatus002', 0, function () { console.log(TAG + "************* V9testOnStatus002 start *************"); @@ -457,7 +493,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testSave001 * @tc.desc: test save local - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testSave001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testSave001', 0, async function (done) { console.log(TAG + "************* V9testSave001 start *************"); @@ -496,7 +535,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testSave002 * @tc.desc: test save local - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testSave002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testSave002', 0, async function (done) { console.log(TAG + "************* V9testSave002 start *************"); @@ -533,7 +575,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testSave003 * @tc.desc: test save local - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testSave003 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testSave003', 0, async function () { console.log(TAG + "************* V9testSave003 start *************"); @@ -580,7 +625,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testRevokeSave001 * @tc.desc: test RevokeSave - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testRevokeSave001 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testRevokeSave001', 0, async function (done) { console.log(TAG + "************* V9testRevokeSave001 start *************"); @@ -624,8 +672,11 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testRevokeSave002 * @tc.desc: test save local - * @tc.type: FUNC + * @tc.type: Function * @tc.require: + * @tc.number: V9testRevokeSave002 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testRevokeSave002', 0, async function () { console.log(TAG + "************* V9testRevokeSave002 start *************"); @@ -671,7 +722,10 @@ describe('objectStoreTest', function () { /** * @tc.name: V9testRevokeSave003 * @tc.desc: test RevokeSave - * @tc.type: FUNC + * @tc.type: Function + * @tc.number: V9testRevokeSave003 + * @tc.size: MediumTest + * @tc.level: Level 2 */ it('V9testRevokeSave003', 0, async function () { console.log(TAG + "************* V9testRevokeSave003 start *************"); @@ -706,5 +760,271 @@ describe('objectStoreTest', function () { console.log(TAG + "************* V9testRevokeSave003 end *************"); }) + /** + * @tc.name: V9testbindAssetCommunType001 + * @tc.desc: Test CommType Enum Value + * @tc.type: Function + * @tc.number: V9testbindAssetCommunType001 + * @tc.size: MediumTest + * @tc.level: Level 2 + */ + it('V9testbindAssetCommunType001', 0, function (done) { + console.log(TAG + "************* V9testbindAssetCommunType001 start *************"); + expect(commonType.AssetStatus.ASSET_NORMAL == 1).assertTrue(); + expect(commonType.AssetStatus.ASSET_INSERT == 2).assertTrue(); + expect(commonType.AssetStatus.ASSET_UPDATE == 3).assertTrue(); + expect(commonType.AssetStatus.ASSET_DELETE == 4).assertTrue(); + expect(commonType.AssetStatus.ASSET_ABNORMAL == 5).assertTrue(); + expect(commonType.AssetStatus.ASSET_DOWNLOADING == 6).assertTrue(); + done(); + }) + + /** + * @tc.name: V9testsetSessionId001 + * @tc.desc: Test bindAssetStore + * @tc.type: Function + * @tc.number: V9testbindAssetStore001 + * @tc.size: MediumTest + * @tc.level: Level 2 + */ + it('V9testbindAssetStore001', 0, function (done) { + console.log(TAG + "************* V9testbindAssetStore001 start *************"); + let g_object = distributedObject.create(context, { + title:"bindAssettest-title", + content:"bindAssettest-content", + mark:"no mark", + asset001: + { + status:0, + name:"1.txt", + uri:"file://com.example.myapp/data/dir/1.txt", + path:"/dir/1.txt", + createTime: "2023/11/30 19:48:00", + modifyTime: "2023/11/30 20:10:00", + size:"1", + } + }); + + expect(g_object == undefined).assertEqual(false); + g_object.setSessionId("sessionBA1"); + + let asset1 = { + name: "name1", + uri: "uri1", + createTime: "createTime1", + modifyTime: "modifyTime1", + size: "size1", + path: "path1", + status: commonType.AssetStatus.ASSET_NORMAL, + } + + let asset2 = { + name: "name2", + uri: "uri2", + createTime: "createTime2", + modifyTime: "modifyTime2", + size: "size2", + path: "path2", + status: commonType.AssetStatus.ASSET_UPDATE, + } + + let asset3 = { + name: "name3", + uri: "uri3", + createTime: "createTime3", + modifyTime: "modifyTime3", + size: "size3", + path: "path3", + } + + let result = new Uint8Array(8); + for (let i = 0; i < 8; i++) { + result[i] = 1; + } + + let arr = [asset1, asset2]; + let bindInfo = { + storeName:"store1", + tableName:"table1", + primaryKey:{ + "data1": 123, + "data2": arr, + "data3": asset3, + "data4": 101.5, + "data5": result, + "data6": false, + "data7": null, + "data8": "test1"}, + field:"field1", + assetName:"asset1" + } + + try { + g_object.bindAssetStore("asset001", bindInfo, (err, data)=>{ + expect(err == undefined).assertEqual(true); + done(); + }); + } catch (error) { + console.info(`V9testbindAssetStore001 err is: ${error.code} and msg is: ${error.message}`); + expect(null).assertFail(); + done(); + } + }) + + /** + * @tc.name: V9testsetSessionId002 + * @tc.desc: Test bindAssetStore with invalid args + * @tc.type: Function + * @tc.number: V9testsetSessionId002 + * @tc.size: MediumTest + * @tc.level: Level 2 + */ + it('V9testbindAssetStore002', 0, function (done) { + console.log(TAG + "************* V9testbindAssetStore002 start *************"); + let g_object = distributedObject.create(context, { + title:"bindAssettest-title", + content:"bindAssettest-content", + mark:"no mark", + asset002: + { + status:0, + name:"1.txt", + uri:"file://com.example.myapp/data/dir/1.txt", + path:"/dir/1.txt", + createTime: "2023/11/30 19:48:00", + modifyTime: "2023/11/30 20:10:00", + size:"1", + } + }); + + expect(g_object == undefined).assertEqual(false); + g_object.setSessionId("sessionBA2"); + + let bindInfo = { + storeName: undefined, + tableName: "table1", + primaryKey: {"data1": 123}, + field: "field1", + assetName: "asset1" + } + + try { + g_object.bindAssetStore("asset002", bindInfo, (err, data)=>{ + expect(null).assertFail(); + done(); + }); + } catch (error) { + console.info(`V9testbindAssetStore002 err is: ${error.code} and msg is: ${error.message}`); + expect(error.code == 401).assertTrue(); + done(); + } + }) + + /** + * @tc.name: V9testbindAssetStore003 + * @tc.desc: Test bindAssetStore with invalid args + * @tc.type: Function + * @tc.number: V9testbindAssetStore003 + * @tc.size: MediumTest + * @tc.level: Level 2 + */ + it('V9testbindAssetStore003', 0, function (done) { + console.log(TAG + "************* V9testbindAssetStore003 start *************"); + let g_object = distributedObject.create(context, { + title:"bindAssettest-title", + content:"bindAssettest-content", + mark:"no mark", + asset003: + { + status:0, + name:"1.txt", + uri:"file://com.example.myapp/data/dir/1.txt", + path:"/dir/1.txt", + createTime: "2023/11/30 19:48:00", + modifyTime: "2023/11/30 20:10:00", + size:"1", + } + }); + + expect(g_object == undefined).assertEqual(false); + g_object.setSessionId("sessionBA2"); + let bindInfo = { + storeName:"name1", + tableName: null, + primaryKey:{"data1": 123}, + field:"field1", + assetName:"asset1" + } + + try { + g_object.bindAssetStore("asset003", bindInfo, (err, data)=>{ + expect(null).assertFail(); + done(); + }); + } catch (error) { + console.info(`V9testbindAssetStore003 err is: ${error.code} and msg is: ${error.message}`); + expect(error.code == 401).assertTrue(); + done(); + } + }) + + /** + * @tc.name: V9testcreate002 + * @tc.desc: object with asset create distributed data object + * @tc.type: Function + * @tc.number: V9testcreate002 + * @tc.size: MediumTest + * @tc.level: Level 2 + */ + it('V9testcreate002', 0, function () { + console.log(TAG + "************* V9testcreate002 start *************"); + var g_object; + const attachment = { + status: 0, + name: "1.txt", + uri: "file://com.example.myapplication/data/storage/el2/distributedfiles/dir/1.txt", + path: "/dir/1.txt", + createTime: "2023-11-26 10:00:00", + modifyTime: "2023-11-26 10:00:00", + size: "1" + }; + try { + g_object = distributedObject.create(context, { + title: "my note", + content: "It's a nice day today.", + mark: false, + attachment + }); + } catch (error) { + console.info(error.code + error.message); + } + expect(g_object === undefined).assertEqual(false); + + g_object.setSessionId("123456").then((data) => { + console.info(TAG + "V9testcreate002"); + console.info(TAG + data); + }).catch((error) => { + console.info(TAG + error); + }); + + try { + g_object.attachment = {}; + } catch (error) { + expect(error.code === 401).assertEqual(true); + expect(error.message === "cannot set attachment by non Asset type data").assertEqual(true); + } + + g_object.setSessionId("").then((data) => { + console.info(TAG + "V9testcreate002"); + console.info(TAG + data); + }).catch((error) => { + console.info(TAG + error); + }); + + console.log(TAG + "************* V9testcreate002 end *************"); + g_object.setSessionId((error, data) => { + console.info(TAG + error + "," + data); + }); + }) console.log(TAG + "*************Unit Test End*************"); }) \ No newline at end of file diff --git a/data_object/interfaces/innerkits/BUILD.gn b/data_object/interfaces/innerkits/BUILD.gn index a2db94aacdebeaf459453f01fa6e306ea498ed72..47a90fcc170c8b893c0630222a555fbdc5da105d 100644 --- a/data_object/interfaces/innerkits/BUILD.gn +++ b/data_object/interfaces/innerkits/BUILD.gn @@ -24,6 +24,7 @@ config("objectstore_config") { "../../frameworks/innerkitsimpl/include", "../../interfaces/innerkits", "${kvstore_path}/common", + "${relational_store_path}/interfaces/inner_api/common_type/include", ] ldflags = [ "-Wl,--exclude-libs,ALL" ] @@ -71,7 +72,6 @@ object_external_deps_config = [ "kv_store:distributeddata_inner", "kv_store:distributeddb", "samgr:samgr_proxy", - "relational_store:common_type", ] ohos_shared_library("distributeddataobject_impl") { branch_protector_ret = "pac_ret" diff --git a/data_object/interfaces/innerkits/object_types.h b/data_object/interfaces/innerkits/object_types.h index 98e7dcd63d03bc1fd8389b74d3da5644339fb337..2bccc8a46af364218fc02b636b3c552abb81b8c7 100644 --- a/data_object/interfaces/innerkits/object_types.h +++ b/data_object/interfaces/innerkits/object_types.h @@ -17,7 +17,7 @@ #define OHOS_OBJECT_ASSET_VALUE_H #include -#include "common_values_bucket.h" +#include "common_types.h" namespace OHOS { namespace ObjectStore { @@ -31,7 +31,7 @@ struct AssetBindInfo { using Asset = CommonType::AssetValue; using ValuesBucket = CommonType::ValuesBucket; -using ValueObject = CommonType::ValueObject; +using ValueObject = CommonType::Value; using Assets = std::vector; static const std::string STATUS_SUFFIX = ".status"; diff --git a/data_object/interfaces/jskits/BUILD.gn b/data_object/interfaces/jskits/BUILD.gn index 8023e95bd8c5859741f82f7e3b05df74f67bac00..fc716832c1b9e69aa96a81e4d8ed0b7ed573190b 100644 --- a/data_object/interfaces/jskits/BUILD.gn +++ b/data_object/interfaces/jskits/BUILD.gn @@ -44,6 +44,7 @@ config("objectstore_config") { "../../frameworks/innerkitsimpl/include/communicator", "../../interfaces/innerkits", "${kvstore_path}/common", + "${relational_store_path}/interfaces/inner_api/common_type/include", ] } @@ -113,7 +114,6 @@ ohos_shared_library("distributeddataobject") { "hilog:libhilog", "kv_store:distributeddb", "napi:ace_napi", - "relational_store:common_type", ] public_configs = [ ":objectstore_public_config" ] diff --git a/data_share/README_zh.md b/data_share/README_zh.md index 9475232e8a824b8ce5f992833563a58a6fed53c3..6bc5b6ea5aec5c03ab02a1ce25f5d605a2398f55 100644 --- a/data_share/README_zh.md +++ b/data_share/README_zh.md @@ -2,11 +2,11 @@ ## 简介 -**数据共享(Data Share)** 部件提供了向其他应用共享以及管理其数据的方法,支持同个设备上不同应用之间的数据共享。 +**数据共享(Data Share)** 部件提供了向其它应用共享以及管理其数据的方法,支持同个设备上不同应用之间的数据共享。 -在许多应用场景中都需要用到数据共享,比如将电话簿、短信、媒体库中的数据共享给其他应用等。当然,不是所有的数据都允许其他应用访问,比如帐号、密码等;有些数据也只允许其他应用查询而不允许其删改,比如短信等。所以对于各种数据共享场景,DataShare这样一个安全、便捷的可以跨应用的数据共享机制是十分必需的。 +在许多应用场景中都需要用到数据共享,比如将电话簿、短信、媒体库中的数据共享给其它应用等。当然,不是所有的数据都允许其它应用访问,比如帐号、密码等;有些数据也只允许其它应用查询而不允许其删改,比如短信等。所以对于各种数据共享场景,DataShare这样一个安全、便捷的可以跨应用的数据共享机制是十分必需的。 -数据提供者无需进行繁琐的封装,可直接使用DataShare框架向其他应用共享数据;对数据访问方来说,因DataShare的访问方式不会因数据提供的方式而不同,只需要学习和使用一套接口即可,大大减少了学习时间和开发难度。 +数据提供者无需进行繁琐的封装,可直接使用DataShare框架向其它应用共享数据;对数据访问方来说,因DataShare的访问方式不会因数据提供的方式而不同,只需要学习和使用一套接口即可,大大减少了学习时间和开发难度。 ### 基本概念 @@ -36,7 +36,7 @@ - DataShareExtAbility模块为数据提供方,实现跨应用数据共享的相关业务。 - DataShareHelper模块为数据访问方,提供各种访问数据的接口,包括增删改查等。 -- 数据访问方与提供方通过IPC进行通信,数据提供方可以通过数据库实现,也可以通过其他数据存储方式实现。 +- 数据访问方与提供方通过IPC进行通信,数据提供方可以通过数据库实现,也可以通过其它数据存储方式实现。 - ResultSet模块通过共享内存实现,用于存储查询数据得到的结果集,并提供了遍历结果集的方法。 ## 目录 diff --git a/data_share/bundle.json b/data_share/bundle.json index be7b8ba7ccf0e8884e6158fdc72a7c0c80b632ee..b28c92c3d0aea675f3c8e295281f54a223a201ab 100644 --- a/data_share/bundle.json +++ b/data_share/bundle.json @@ -119,7 +119,8 @@ } ], "test": [ - "//foundation/distributeddatamgr/data_share/test/native:unittest" + "//foundation/distributeddatamgr/data_share/test/native:unittest", + "//foundation/distributeddatamgr/data_share/test/js/data_share:unittest" ] } } diff --git a/data_share/datashare.gni b/data_share/datashare.gni index e4c79ef5a4116c6ccd5f2f040b597d9089ac62a1..f329eb95ab9f7b364d9fd7f63e624abfbee2dba7 100644 --- a/data_share/datashare.gni +++ b/data_share/datashare.gni @@ -43,6 +43,8 @@ foundation_path = "//foundation" kvstore_base_path = "//foundation/distributeddatamgr/kv_store" +kvstore_common_path = "${kvstore_base_path}/frameworks/common" + access_token_path = "//base/security/access_token" base_hiviewdfx_hilog_path = "//base/hiviewdfx/hilog" diff --git a/data_share/frameworks/js/napi/common/include/datashare_predicates_proxy.h b/data_share/frameworks/js/napi/common/include/datashare_predicates_proxy.h index 6971c25a7cd5016288c8b73e45c94e8570b15d33..db22b37d8f9b46258acd19320cab6f8322520f54 100644 --- a/data_share/frameworks/js/napi/common/include/datashare_predicates_proxy.h +++ b/data_share/frameworks/js/napi/common/include/datashare_predicates_proxy.h @@ -18,13 +18,14 @@ #include #include "datashare_abs_predicates.h" +#include "js_proxy.h" #include "napi/native_api.h" #include "napi/native_common.h" #include "napi/native_node_api.h" namespace OHOS { namespace DataShare { -class DataSharePredicatesProxy : private DataShareAbsPredicates::JsProxy { +class DataSharePredicatesProxy : public JSProxy::JSProxy { public: static void Init(napi_env env, napi_value exports); static napi_value NewInstance(napi_env env, std::shared_ptr value); diff --git a/data_share/frameworks/js/napi/common/include/datashare_result_set_proxy.h b/data_share/frameworks/js/napi/common/include/datashare_result_set_proxy.h index 206814117f00026b94637e548d60c9c08b351523..a1bf5fb31aa9da1ea0cbf337466062e7bce66b21 100644 --- a/data_share/frameworks/js/napi/common/include/datashare_result_set_proxy.h +++ b/data_share/frameworks/js/napi/common/include/datashare_result_set_proxy.h @@ -18,13 +18,14 @@ #include #include "datashare_result_set.h" +#include "js_proxy.h" #include "napi/native_api.h" #include "napi/native_common.h" #include "napi/native_node_api.h" namespace OHOS { namespace DataShare { -class DataShareResultSetProxy final { +class DataShareResultSetProxy final : public JSProxy::JSProxy { public: DataShareResultSetProxy() = default; ~DataShareResultSetProxy(); @@ -58,8 +59,6 @@ private: static napi_value GetColumnCount(napi_env env, napi_callback_info info); static napi_value GetRowCount(napi_env env, napi_callback_info info); static napi_value IsClosed(napi_env env, napi_callback_info info); - - std::shared_ptr resultSet_; }; } // namespace DataShare } // namespace OHOS diff --git a/data_share/frameworks/js/napi/common/src/datashare_js_utils.cpp b/data_share/frameworks/js/napi/common/src/datashare_js_utils.cpp index 194eac2b53369df664ce96024f66786232cbf28e..2b699f54de9ff9f35f4843d26cd25449a6dd2d78 100644 --- a/data_share/frameworks/js/napi/common/src/datashare_js_utils.cpp +++ b/data_share/frameworks/js/napi/common/src/datashare_js_utils.cpp @@ -16,7 +16,7 @@ #include "datashare_js_utils.h" #include "datashare_log.h" -#include "napi_ashmem.h" +#include "napi/native_common.h" #include "securec.h" namespace OHOS { @@ -175,7 +175,7 @@ napi_value DataShareJSUtils::Convert2JSValue(napi_env env, const std::vectorpredicates_ = std::make_shared(); + proxy->SetInstance(std::make_shared()); napi_status ret = napi_wrap(env, thiz, proxy, DataSharePredicatesProxy::Destructor, nullptr, nullptr); if (ret != napi_ok) { delete proxy; @@ -133,7 +132,7 @@ napi_value DataSharePredicatesProxy::NewInstance(napi_env env, std::shared_ptrpredicates_ = std::move(value); + proxy->SetInstance(value); return instance; } @@ -146,7 +145,7 @@ std::shared_ptr DataSharePredicatesProxy::GetNativePredi } DataSharePredicatesProxy *proxy = nullptr; napi_unwrap(env, arg, reinterpret_cast(&proxy)); - return proxy->predicates_; + return proxy->GetInstance(); } void DataSharePredicatesProxy::Destructor(napi_env env, void *nativeObject, void *) @@ -157,7 +156,7 @@ void DataSharePredicatesProxy::Destructor(napi_env env, void *nativeObject, void DataSharePredicatesProxy::~DataSharePredicatesProxy() { - predicates_ = nullptr; + SetInstance(nullptr); } DataSharePredicatesProxy::DataSharePredicatesProxy() @@ -171,7 +170,7 @@ std::shared_ptr DataSharePredicatesProxy::GetNativePredi napi_value thiz; napi_get_cb_info(env, info, nullptr, nullptr, &thiz, nullptr); napi_unwrap(env, thiz, reinterpret_cast(&predicatesProxy)); - return predicatesProxy->predicates_; + return predicatesProxy->GetInstance(); } napi_value DataSharePredicatesProxy::EqualTo(napi_env env, napi_callback_info info) @@ -461,6 +460,7 @@ napi_value DataSharePredicatesProxy::Between(napi_env env, napi_callback_info in size_t argc = 3; napi_value args[3] = { 0 }; napi_get_cb_info(env, info, &argc, args, &thiz, nullptr); + //'argc > 2' represents determine if 'argc' is greater than '2' NAPI_ASSERT(env, argc > 2, "Invalid argvs!"); std::string field = DataShareJSUtils::Convert2String(env, args[0], DataShareJSUtils::DEFAULT_BUF_SIZE); std::string low = DataShareJSUtils::ConvertAny2String(env, args[1]); @@ -480,6 +480,7 @@ napi_value DataSharePredicatesProxy::NotBetween(napi_env env, napi_callback_info size_t argc = 3; napi_value args[3] = { 0 }; napi_get_cb_info(env, info, &argc, args, &thiz, nullptr); + //'argc > 2' represents determine if 'argc' is greater than '2' NAPI_ASSERT(env, argc > 2, "Invalid argvs!"); std::string field = DataShareJSUtils::Convert2String(env, args[0], DataShareJSUtils::DEFAULT_BUF_SIZE); std::string low = DataShareJSUtils::ConvertAny2String(env, args[1]); diff --git a/data_share/frameworks/js/napi/common/src/datashare_result_set_proxy.cpp b/data_share/frameworks/js/napi/common/src/datashare_result_set_proxy.cpp index a5a94e5636c1db6b9e5c0ed8a5f71a1404457aab..f172543a4f2236188e6e5ca2f91fb2fb1e9d4f07 100644 --- a/data_share/frameworks/js/napi/common/src/datashare_result_set_proxy.cpp +++ b/data_share/frameworks/js/napi/common/src/datashare_result_set_proxy.cpp @@ -64,7 +64,7 @@ std::shared_ptr DataShareResultSetProxy::GetNativeObject( LOG_ERROR("proxy is null."); return nullptr; } - return proxy->resultSet_; + return proxy->GetInstance(); } napi_value DataShareResultSetProxy::GetConstructor(napi_env env) @@ -129,25 +129,25 @@ napi_value DataShareResultSetProxy::Initialize(napi_env env, napi_callback_info DataShareResultSetProxy::~DataShareResultSetProxy() { LOG_DEBUG("DataShareResultSetProxy destructor!"); - if (resultSet_ != nullptr && !resultSet_->IsClosed()) { - resultSet_->Close(); + if (GetInstance() != nullptr && !GetInstance()->IsClosed()) { + GetInstance()->Close(); } } DataShareResultSetProxy::DataShareResultSetProxy(std::shared_ptr resultSet) { - if (resultSet_ == resultSet) { + if (GetInstance() == resultSet) { return; } - resultSet_ = std::move(resultSet); + SetInstance(resultSet); } DataShareResultSetProxy &DataShareResultSetProxy::operator=(std::shared_ptr resultSet) { - if (resultSet_ == resultSet) { + if (GetInstance() == resultSet) { return *this; } - resultSet_ = std::move(resultSet); + SetInstance(resultSet); return *this; } @@ -158,7 +158,7 @@ std::shared_ptr DataShareResultSetProxy::GetInnerResultSet(n napi_value self = nullptr; napi_get_cb_info(env, info, nullptr, nullptr, &self, nullptr); napi_unwrap(env, self, reinterpret_cast(&resultSet)); - return resultSet->resultSet_; + return resultSet->GetInstance(); } napi_value DataShareResultSetProxy::GoToFirstRow(napi_env env, napi_callback_info info) @@ -357,13 +357,13 @@ napi_value DataShareResultSetProxy::Close(napi_env env, napi_callback_info info) if (resultSet == nullptr) { return DataShareJSUtils::Convert2JSValue(env, (errCode == E_OK)); } - auto innerResultSet = resultSet->resultSet_; + auto innerResultSet = resultSet->GetInstance(); if (innerResultSet != nullptr) { errCode = innerResultSet->Close(); if (errCode != E_OK) { LOG_ERROR("failed code:%{public}d", errCode); } - resultSet->resultSet_ = nullptr; + resultSet->SetInstance(nullptr); } else { LOG_ERROR("GetInnerResultSet failed."); } diff --git a/data_share/frameworks/js/napi/dataShare/BUILD.gn b/data_share/frameworks/js/napi/dataShare/BUILD.gn index 6f0d5e2ced60333d60d8a2ebdf7413a2d85c86f9..bda33175bfab560027cbe15eaf07e9cff7ecfdbd 100644 --- a/data_share/frameworks/js/napi/dataShare/BUILD.gn +++ b/data_share/frameworks/js/napi/dataShare/BUILD.gn @@ -14,6 +14,45 @@ import("//build/ohos.gni") import("//foundation/distributeddatamgr/data_share/datashare.gni") +ohos_shared_library("datashare_jscommon") { + branch_protector_ret = "pac_ret" + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + include_dirs = [ + "${datashare_common_native_path}/include", + "${datashare_common_napi_path}/include", + "${kvstore_common_path}", + ] + + sources = [ + "${datashare_common_napi_path}/src/datashare_js_utils.cpp", + "${datashare_common_napi_path}/src/datashare_predicates_proxy.cpp", + "${datashare_common_napi_path}/src/napi_datashare_values_bucket.cpp", + ] + + deps = [ "${datashare_innerapi_path}/common:datashare_common" ] + + version_script = "libdatashare_jscommon.map" + + external_deps = [ + "ability_base:zuri", + "c_utils:utils", + "hilog:libhilog", + "hisysevent:libhisysevent", + "hitrace:hitrace_meter", + "hitrace:libhitracechain", + "ipc:ipc_napi", + "ipc:ipc_single", + "napi:ace_napi", + ] + + subsystem_name = "distributeddatamgr" + part_name = "data_share" +} + ohos_shared_library("datashare") { branch_protector_ret = "pac_ret" sanitize = { @@ -29,6 +68,8 @@ ohos_shared_library("datashare") { ] sources = [ + "${datashare_common_napi_path}/src/datashare_error_impl.cpp", + "${datashare_common_napi_path}/src/datashare_result_set_proxy.cpp", "${datashare_napi_path}/dataShare/src/async_call.cpp", "${datashare_napi_path}/dataShare/src/napi_datashare_helper.cpp", "${datashare_napi_path}/dataShare/src/napi_datashare_inner_observer.cpp", @@ -39,6 +80,7 @@ ohos_shared_library("datashare") { ] deps = [ + ":datashare_jscommon", "${datashare_innerapi_path}:datashare_consumer", "${datashare_innerapi_path}/common:datashare_common", "//third_party/libuv:uv", @@ -77,12 +119,10 @@ ohos_shared_library("datasharepredicates") { "${datashare_common_native_path}/include", ] - sources = [ - "${datashare_common_napi_path}/src/datashare_predicates_proxy.cpp", - "${datashare_napi_path}/dataShare/src/native_datashare_predicates_module.cpp", - ] + sources = [ "${datashare_napi_path}/dataShare/src/native_datashare_predicates_module.cpp" ] deps = [ + ":datashare_jscommon", "${datashare_innerapi_path}:datashare_consumer", "${datashare_innerapi_path}/common:datashare_common", ] diff --git a/data_share/frameworks/js/napi/dataShare/include/napi_datashare_helper.h b/data_share/frameworks/js/napi/dataShare/include/napi_datashare_helper.h index 21e06ba9a44b0d5857819325e412e3a39320bc62..2208bcf5e5102bb95af15b50b33896f632a88e85 100644 --- a/data_share/frameworks/js/napi/dataShare/include/napi_datashare_helper.h +++ b/data_share/frameworks/js/napi/dataShare/include/napi_datashare_helper.h @@ -46,6 +46,8 @@ public: static napi_value Napi_DelTemplate(napi_env env, napi_callback_info info); static napi_value Napi_Publish(napi_env env, napi_callback_info info); static napi_value Napi_GetPublishedData(napi_env env, napi_callback_info info); + static napi_value EnableSilentProxy(napi_env env, napi_callback_info info); + static napi_value DisableSilentProxy(napi_env env, napi_callback_info info); private: static napi_value GetConstructor(napi_env env); @@ -54,6 +56,7 @@ private: static napi_value Napi_UnsubscribeRdbObserver(napi_env env, size_t argc, napi_value *argv, napi_value self); static napi_value Napi_SubscribePublishedObserver(napi_env env, size_t argc, napi_value *argv, napi_value self); static napi_value Napi_UnsubscribePublishedObserver(napi_env env, size_t argc, napi_value *argv, napi_value self); + static napi_value SetSilentSwitch(napi_env env, napi_callback_info info, bool enable); bool HasRegisteredObserver(napi_env env, std::list> &list, napi_value callback); void RegisteredObserver(napi_env env, const std::string &uri, napi_value callback); @@ -75,6 +78,7 @@ private: std::shared_ptr contextF = nullptr; std::shared_ptr contextS = nullptr; std::shared_ptr dataShareHelper = nullptr; + bool silentSwitch = false; CreateContextInfo() : Context(nullptr, nullptr) {}; CreateContextInfo(InputAction input, OutputAction output) : Context(std::move(input), std::move(output)) {}; ~CreateContextInfo() diff --git a/data_share/frameworks/js/napi/dataShare/libdatashare_jscommon.map b/data_share/frameworks/js/napi/dataShare/libdatashare_jscommon.map new file mode 100644 index 0000000000000000000000000000000000000000..139bc67198f3499fd08d8b989b819df6a4e2f8a3 --- /dev/null +++ b/data_share/frameworks/js/napi/dataShare/libdatashare_jscommon.map @@ -0,0 +1,21 @@ +# 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. + +1.0 { + global: + *DataShareJSUtils*; + *DataSharePredicates*; + *DataShareValuesBucket*; + local: + *; +}; \ No newline at end of file diff --git a/data_share/frameworks/js/napi/dataShare/src/napi_datashare_helper.cpp b/data_share/frameworks/js/napi/dataShare/src/napi_datashare_helper.cpp index e0f893469b825bbe7b72e4c21920d44a781615b3..f4d3ca9b897dd7753e58b6d91ee020d9dee58e88 100644 --- a/data_share/frameworks/js/napi/dataShare/src/napi_datashare_helper.cpp +++ b/data_share/frameworks/js/napi/dataShare/src/napi_datashare_helper.cpp @@ -30,6 +30,20 @@ using namespace OHOS::AppExecFwk; namespace OHOS { namespace DataShare { static constexpr int MAX_ARGC = 6; +static bool GetSilentUri(napi_env env, napi_value jsValue, std::string &uri) +{ + napi_valuetype valuetype = napi_undefined; + napi_typeof(env, jsValue, &valuetype); + if (valuetype == napi_undefined || valuetype == napi_null) { + return true; + } + if (valuetype == napi_string) { + uri = DataShareJSUtils::Convert2String(env, jsValue); + return true; + } + return false; +} + static DataSharePredicates UnwrapDataSharePredicates(napi_env env, napi_value value) { auto predicates = DataSharePredicatesProxy::GetNativePredicates(env, value); @@ -1115,5 +1129,45 @@ napi_value NapiDataShareHelper::Napi_UnsubscribePublishedObserver(napi_env env, results = proxy->jsPublishedObsManager_->DelObservers(env, nullptr, uris, atoll(subscriberId.c_str())); return DataShareJSUtils::Convert2JSValue(env, results); } + +napi_value NapiDataShareHelper::EnableSilentProxy(napi_env env, napi_callback_info info) +{ + return SetSilentSwitch(env, info, true); +} + +napi_value NapiDataShareHelper::DisableSilentProxy(napi_env env, napi_callback_info info) +{ + return SetSilentSwitch(env, info, false); +} + +napi_value NapiDataShareHelper::SetSilentSwitch(napi_env env, napi_callback_info info, bool enable) +{ + auto context = std::make_shared(); + context->silentSwitch = enable; + auto input = [context](napi_env env, size_t argc, napi_value *argv, napi_value self) -> napi_status { + if (argc != 1 && argc != 2) { + context->error = std::make_shared("1 or 2"); + return napi_invalid_arg; + } + context->contextS = OHOS::AbilityRuntime::GetStageModeContext(env, argv[0]); + NAPI_ASSERT_CALL_ERRCODE(env, context->contextS != nullptr, + context->error = std::make_shared("contextS", "not nullptr"), napi_invalid_arg); + if (argc > 1) { + NAPI_ASSERT_CALL_ERRCODE(env, GetSilentUri(env, argv[1], context->strUri), + context->error = std::make_shared("uri", "string"), napi_invalid_arg); + } + return napi_ok; + }; + auto output = [context](napi_env env, napi_value *result) -> napi_status { + return napi_ok; + }; + auto exec = [context](AsyncCall::Context *ctx) { + OHOS::Uri uri(context->strUri); + DataShareHelper::SetSilentSwitch(uri, context->silentSwitch); + }; + context->SetAction(std::move(input), std::move(output)); + AsyncCall asyncCall(env, info, context); + return asyncCall.Call(env, exec); +} } // namespace DataShare } // namespace OHOS diff --git a/data_share/frameworks/js/napi/dataShare/src/native_datashare_module.cpp b/data_share/frameworks/js/napi/dataShare/src/native_datashare_module.cpp index 27007ab7621cd364147e68dab4a2a40862683586..a7267533618d45632ca5f3c1a0e0660349e0377a 100644 --- a/data_share/frameworks/js/napi/dataShare/src/native_datashare_module.cpp +++ b/data_share/frameworks/js/napi/dataShare/src/native_datashare_module.cpp @@ -29,6 +29,8 @@ static napi_value Init(napi_env env, napi_value exports) LOG_DEBUG("Init DataShareHelper"); napi_property_descriptor desc[] = { DECLARE_NAPI_FUNCTION("createDataShareHelper", NapiDataShareHelper::Napi_CreateDataShareHelper), + DECLARE_NAPI_FUNCTION("enableSilentProxy", NapiDataShareHelper::EnableSilentProxy), + DECLARE_NAPI_FUNCTION("disableSilentProxy", NapiDataShareHelper::DisableSilentProxy), }; napi_status status = napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc); LOG_DEBUG("napi_define_properties status : %{public}d", status); diff --git a/data_share/frameworks/native/common/include/callbacks_manager.h b/data_share/frameworks/native/common/include/callbacks_manager.h index 7eae5e931c6d20e76005277426d3a55bc9594801..9a62e2cee4d322ee6565da016d9155c2b7583465 100644 --- a/data_share/frameworks/native/common/include/callbacks_manager.h +++ b/data_share/frameworks/native/common/include/callbacks_manager.h @@ -59,8 +59,7 @@ public: int GetEnabledSubscriberSize(); int GetEnabledSubscriberSize(const Key &key); - void RecoverObservers(std::function &)> recoverObservers); - + std::vector GetKeys(); void SetObserversNotifiedOnEnabled(const Key &key); private: @@ -116,7 +115,7 @@ std::vector CallbacksManager::AddObservers(const } template -void CallbacksManager::RecoverObservers(std::function &)> recoverObservers) +std::vector CallbacksManager::GetKeys() { std::vector keys; { @@ -125,10 +124,9 @@ void CallbacksManager::RecoverObservers(std::function void CallbacksManager::DelLocalObservers(void *subscriber, std::vector &lastDelKeys, std::vector &result) @@ -225,12 +223,12 @@ std::vector> CallbacksManager::GetEnabl template std::vector CallbacksManager::EnableObservers( const std::vector &keys, void *subscriber, - std::function> &)> processOnLocalEnabled, - std::function &, std::vector &)> processOnFirstEnabled) + std::function> &)> enableLocalFunc, + std::function &, std::vector &)> enableServiceFunc) { std::vector result; - std::vector firstRegisterKey; - std::map> localEnabledObservers; + std::vector sendServiceKeys; + std::map> refreshObservers; { std::lock_guard lck(mutex_); for (auto &key : keys) { @@ -239,35 +237,34 @@ std::vector CallbacksManager::EnableObservers( result.emplace_back(key, E_SUBSCRIBER_NOT_EXIST); continue; } - std::vector> enabledObservers = GetEnabledObservers(key); - bool hasEnabled = false; - for (auto &item : callbacks_[key]) { - if (item.subscriber_ != subscriber) { - continue; - } - hasEnabled = true; - if (item.enabled_) { - continue; + + auto& allObservers = it->second; + auto iterator = std::find_if(allObservers.begin(), allObservers.end(), [&subscriber](ObserverNode node) { + if (node.subscriber_ == subscriber) { + return true; } - localEnabledObservers[key].emplace_back(item.observer_, item.isNotifyOnEnabled_); - item.enabled_ = true; - } - if (!hasEnabled) { + return false; + }); + if (iterator == allObservers.end()) { result.emplace_back(key, E_SUBSCRIBER_NOT_EXIST); continue; } - if (!enabledObservers.empty()) { + if (iterator->enabled_) { result.emplace_back(key, E_OK); continue; } - localEnabledObservers.erase(key); - firstRegisterKey.emplace_back(key); + + std::vector> enabledObservers = GetEnabledObservers(key); + if (enabledObservers.empty()) { + sendServiceKeys.emplace_back(key); + } + refreshObservers[key].emplace_back(iterator->observer_, iterator->isNotifyOnEnabled_); + iterator->enabled_ = true; } } - if (!localEnabledObservers.empty()) { - processOnLocalEnabled(localEnabledObservers); - } - processOnFirstEnabled(firstRegisterKey, result); + enableServiceFunc(sendServiceKeys, result); + enableLocalFunc(refreshObservers); + return result; } diff --git a/data_share/frameworks/native/common/include/datashare_abs_result_set.h b/data_share/frameworks/native/common/include/datashare_abs_result_set.h deleted file mode 100644 index 8adebda8b097bc4a9287d6b076d5f26b453c7eeb..0000000000000000000000000000000000000000 --- a/data_share/frameworks/native/common/include/datashare_abs_result_set.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 DATASHARE_ABS_RESULT_SET_H -#define DATASHARE_ABS_RESULT_SET_H - -#include -#include -#include "basic/result_set.h" - -namespace OHOS { -namespace DataShare { -class DataShareAbsResultSet : public ResultSet { -public: - DataShareAbsResultSet(); - virtual ~DataShareAbsResultSet(); - virtual int GetRowCount(int &count) override; - virtual int GetAllColumnNames(std::vector &columnNames) override; - virtual int GetBlob(int columnIndex, std::vector &blob) override; - virtual int GetString(int columnIndex, std::string &value) override; - virtual int GetInt(int columnIndex, int &value) override; - virtual int GetLong(int columnIndex, int64_t &value) override; - virtual int GetDouble(int columnIndex, double &value) override; - virtual int IsColumnNull(int columnIndex, bool &isNull) override; - virtual int GoToRow(int position) override; - virtual int GetDataType(int columnIndex, DataType &dataType) override; - int GetRowIndex(int &position) const override; - int GoTo(int offset) override; - int GoToFirstRow() override; - int GoToLastRow() override; - int GoToNextRow() override; - int GoToPreviousRow() override; - int IsAtFirstRow(bool &result) const override; - int IsAtLastRow(bool &result) override; - int IsStarted(bool &result) const override; - int IsEnded(bool &result) override; - int GetColumnCount(int &count) override; - int GetColumnIndex(const std::string &columnName, int &columnIndex) override; - int GetColumnName(int columnIndex, std::string &columnName) override; - bool IsClosed() const override; - int Close() override; - -protected: - // The default position of the result set - static const int INIT_POS = -1; - // Current row position - int rowPos_; - int count_; - // Indicates whether the result set is closed - bool isClosed_; - std::map indexCache_; -}; -} // namespace DataShare -} // namespace OHOS - -#endif diff --git a/data_share/frameworks/native/common/include/distributeddata_data_share_ipc_interface_code.h b/data_share/frameworks/native/common/include/distributeddata_data_share_ipc_interface_code.h index e992208e3af46b0164597c767fd6679ac91835f9..fe64078ec8367c0ba67ec23e69d37f3f044ae4a5 100644 --- a/data_share/frameworks/native/common/include/distributeddata_data_share_ipc_interface_code.h +++ b/data_share/frameworks/native/common/include/distributeddata_data_share_ipc_interface_code.h @@ -88,6 +88,8 @@ enum class DataShareServiceInterfaceCode { DATA_SHARE_SERVICE_CMD_DISABLE_SUBSCRIBE_PUBLISHED, DATA_SHARE_SERVICE_CMD_NOTIFY, DATA_SHARE_SERVICE_CMD_NOTIFY_OBSERVERS, + DATA_SHARE_SERVICE_CMD_SET_SILENT_SWITCH, + DATA_SHARE_SERVICE_CMD_IS_SILENT_PROXY_ENABLE, DATA_SHARE_SERVICE_CMD_MAX }; diff --git a/data_share/frameworks/native/common/include/idata_share_service.h b/data_share/frameworks/native/common/include/idata_share_service.h index 0f9a5b9e2fab6107da248030521a0b713bfe0072..176c43c653b496f9beed07177aa21c5166cae4d1 100644 --- a/data_share/frameworks/native/common/include/idata_share_service.h +++ b/data_share/frameworks/native/common/include/idata_share_service.h @@ -81,6 +81,10 @@ public: int64_t subscriberId) = 0; virtual void Notify(const std::string &uri) = 0; + + virtual int SetSilentSwitch(const Uri &uri, bool enable) = 0; + + virtual bool IsSilentProxyEnable(const std::string &uri) = 0; }; } // namespace OHOS::DataShare #endif diff --git a/data_share/frameworks/native/common/src/datashare_abs_result_set.cpp b/data_share/frameworks/native/common/src/datashare_abs_result_set.cpp index 59482ef6c8b71d748c4e5c5426c29739e3766a22..d4f98e714ba71706a25a6be5add0e60307ecd0bb 100644 --- a/data_share/frameworks/native/common/src/datashare_abs_result_set.cpp +++ b/data_share/frameworks/native/common/src/datashare_abs_result_set.cpp @@ -97,11 +97,7 @@ int DataShareAbsResultSet::GoTo(int offset) int DataShareAbsResultSet::GoToFirstRow() { DISTRIBUTED_DATA_HITRACE(std::string(__FUNCTION__)); - int ret = GoToRow(0); - if (ret != E_OK) { - LOG_WARN("return GoToFirstRow ret is wrong!"); - } - return ret; + return GoToRow(0); } int DataShareAbsResultSet::GoToLastRow() @@ -122,20 +118,12 @@ int DataShareAbsResultSet::GoToLastRow() int DataShareAbsResultSet::GoToNextRow() { - int ret = GoToRow(rowPos_ + 1); - if (ret != E_OK) { - LOG_WARN("return GoToNextRow ret is wrong!"); - } - return ret; + return GoToRow(rowPos_ + 1); } int DataShareAbsResultSet::GoToPreviousRow() { - int ret = GoToRow(rowPos_ - 1); - if (ret != E_OK) { - LOG_WARN("return GoToPreviousRow ret is wrong!"); - } - return ret; + return GoToRow(rowPos_ - 1); } int DataShareAbsResultSet::IsAtFirstRow(bool &result) const diff --git a/data_share/frameworks/native/common/src/ikvstore_data_service.cpp b/data_share/frameworks/native/common/src/ikvstore_data_service.cpp index 89f4672ae84bb9962de0e233a2889bfa796fbac5..f1dbf3418fbfccf800387072c99f8df45c05e6af 100644 --- a/data_share/frameworks/native/common/src/ikvstore_data_service.cpp +++ b/data_share/frameworks/native/common/src/ikvstore_data_service.cpp @@ -29,7 +29,6 @@ DataShareKvServiceProxy::DataShareKvServiceProxy(const sptr &impl sptr DataShareKvServiceProxy::GetFeatureInterface(const std::string &name) { - LOG_INFO("GetDataShareService enter."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareKvServiceProxy::GetDescriptor())) { LOG_ERROR("Write descriptor failed"); diff --git a/data_share/frameworks/native/consumer/controller/common/general_controller.h b/data_share/frameworks/native/consumer/controller/common/general_controller.h index 3fac63bd825766014999c2edec8407da62be61c2..c8f7ee857073d836dbdb3fc64fee7fed92d2a014 100644 --- a/data_share/frameworks/native/consumer/controller/common/general_controller.h +++ b/data_share/frameworks/native/consumer/controller/common/general_controller.h @@ -13,6 +13,9 @@ * limitations under the License. */ +#ifndef GENERAL_CONTROLLER_H +#define GENERAL_CONTROLLER_H + #include #include @@ -22,8 +25,6 @@ #include "datashare_values_bucket.h" #include "uri.h" -#ifndef GENERAL_CONTROLLER_H -#define GENERAL_CONTROLLER_H namespace OHOS { namespace AAFwk { class IDataAbilityObserver; diff --git a/data_share/frameworks/native/consumer/include/datashare_connection.h b/data_share/frameworks/native/consumer/include/datashare_connection.h index a72461b2b4dc451b21bc612e2c4f31ffa1e13178..723ed0e3b221807197f40b701147c9b777e6c9b9 100644 --- a/data_share/frameworks/native/consumer/include/datashare_connection.h +++ b/data_share/frameworks/native/consumer/include/datashare_connection.h @@ -18,6 +18,7 @@ #include #include +#include #include "ability_connect_callback_stub.h" #include "datashare_proxy.h" @@ -72,9 +73,8 @@ private: std::condition_variable condition; std::mutex mutex; }; - void SetDataShareProxy(sptr proxy); std::shared_ptr ConnectDataShareExtAbility(const Uri &uri, const sptr &token); - std::mutex mutex_; + std::mutex mutex_{}; std::shared_ptr dataShareProxy_; ConnectCondition condition_; Uri uri_; diff --git a/data_share/frameworks/native/consumer/include/datashare_proxy.h b/data_share/frameworks/native/consumer/include/datashare_proxy.h index 82c2334170cd054fbec7372ad3b0dda8462fafbf..8da85279a14ff4391705dcc66a171ed345cb0688 100644 --- a/data_share/frameworks/native/consumer/include/datashare_proxy.h +++ b/data_share/frameworks/native/consumer/include/datashare_proxy.h @@ -65,6 +65,7 @@ public: private: static inline BrokerDelegator delegator_; + static const size_t MTU_SIZE = 912600; // 900k }; } // namespace DataShare } // namespace OHOS diff --git a/data_share/frameworks/native/consumer/src/datashare_connection.cpp b/data_share/frameworks/native/consumer/src/datashare_connection.cpp index 9c0d87f0235c601ab8954da5163eddd38d01f272..be1701b3f8163c5420350c9e023cbecbc8a94a03 100644 --- a/data_share/frameworks/native/consumer/src/datashare_connection.cpp +++ b/data_share/frameworks/native/consumer/src/datashare_connection.cpp @@ -22,7 +22,7 @@ namespace OHOS { namespace DataShare { using namespace AppExecFwk; -constexpr int WAIT_TIME = 1; +constexpr int WAIT_TIME = 2; /** * @brief This method is called back to receive the connection result after an ability calls the * ConnectAbility method to connect it to an extension ability. @@ -35,13 +35,16 @@ constexpr int WAIT_TIME = 1; void DataShareConnection::OnAbilityConnectDone( const AppExecFwk::ElementName &element, const sptr &remoteObject, int resultCode) { - LOG_INFO("on connect done, uri:%{public}s, ret=%{public}d", uri_.ToString().c_str(), resultCode); + LOG_INFO("on connect done, req uri:%{public}s, rev uri:%{public}s, ret=%{public}d", uri_.ToString().c_str(), + element.GetURI().c_str(), resultCode); if (remoteObject == nullptr) { LOG_ERROR("remote is nullptr"); + condition_.condition.notify_all(); return; } - std::unique_lock lock(condition_.mutex); - SetDataShareProxy(new (std::nothrow) DataShareProxy(remoteObject)); + std::lock_guard lock(mutex_); + sptr proxy = new (std::nothrow) DataShareProxy(remoteObject); + dataShareProxy_ = std::shared_ptr(proxy.GetRefPtr(), [holder = proxy](const auto *) {}); condition_.condition.notify_all(); } @@ -56,15 +59,24 @@ void DataShareConnection::OnAbilityConnectDone( */ void DataShareConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) { - LOG_INFO("on disconnect done, uri:%{public}s, ret:%{public}d", uri_.ToString().c_str(), resultCode); + LOG_INFO("on disconnect done, req uri:%{public}s, rev uri:%{public}s, ret=%{public}d", uri_.ToString().c_str(), + element.GetURI().c_str(), resultCode); + std::string uri; { - std::unique_lock lock(condition_.mutex); - SetDataShareProxy(nullptr); - condition_.condition.notify_all(); + std::lock_guard lock(mutex_); + dataShareProxy_ = nullptr; + uri = uri_.ToString(); } - if (!uri_.ToString().empty()) { - ConnectDataShareExtAbility(uri_, token_); + if (uri.empty()) { + return; } + AmsMgrProxy* instance = AmsMgrProxy::GetInstance(); + if (instance == nullptr) { + LOG_ERROR("get proxy failed uri:%{public}s", uri.c_str()); + return; + } + ErrCode ret = instance->Connect(uri, this, token_); + LOG_INFO("reconnect ability, uri:%{public}s, ret = %{public}d", uri.c_str(), ret); } /** @@ -73,26 +85,31 @@ void DataShareConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName std::shared_ptr DataShareConnection::ConnectDataShareExtAbility(const Uri &uri, const sptr &token) { - if (dataShareProxy_ != nullptr) { - return dataShareProxy_; + std::string reqUri; + { + std::lock_guard lock(mutex_); + if (dataShareProxy_ != nullptr) { + return dataShareProxy_; + } + reqUri = uri_.ToString().empty() ? uri.ToString() : uri_.ToString(); } - auto reqUri = uri_.ToString().empty() ? uri.ToString() : uri_.ToString(); + AmsMgrProxy* instance = AmsMgrProxy::GetInstance(); if (instance == nullptr) { - LOG_ERROR("Connect: AmsMgrProxy::GetInstance failed"); + LOG_ERROR("get proxy failed uri:%{public}s", reqUri.c_str()); return nullptr; } ErrCode ret = instance->Connect(reqUri, this, token); + LOG_INFO("connect ability, uri = %{public}s. ret = %{public}d", reqUri.c_str(), ret); if (ret != ERR_OK) { - LOG_ERROR("connect ability failed, ret = %{public}d", ret); return nullptr; } - std::unique_lock lock(condition_.mutex); - if (condition_.condition.wait_for(lock, std::chrono::seconds(WAIT_TIME), + std::unique_lock condLock(condition_.mutex); + if (condition_.condition.wait_for(condLock, std::chrono::seconds(WAIT_TIME), [this] { return dataShareProxy_ != nullptr; })) { - LOG_DEBUG("connect ability ended successfully"); + LOG_DEBUG("connect ability ended successfully uri:%{public}s", reqUri.c_str()); } else { - LOG_WARN("connect timeout"); + LOG_WARN("connect timeout uri:%{public}s", reqUri.c_str()); } return dataShareProxy_; } @@ -102,38 +119,24 @@ std::shared_ptr DataShareConnection::ConnectDataShareExtAbility( */ void DataShareConnection::DisconnectDataShareExtAbility() { - uri_ = Uri(""); - if (dataShareProxy_ == nullptr) { - return; + std::string uri; + { + std::lock_guard lock(mutex_); + uri = uri_.ToString(); + uri_ = Uri(""); + if (dataShareProxy_ == nullptr) { + return; + } } + AmsMgrProxy* instance = AmsMgrProxy::GetInstance(); if (instance == nullptr) { - LOG_ERROR("Disconnect: AmsMgrProxy::GetInstance failed"); + LOG_ERROR("get proxy failed uri:%{public}s", uri.c_str()); return; } - ErrCode ret = instance->DisConnect(this); - if (ret != ERR_OK) { - LOG_ERROR("disconnect ability failed, ret = %{public}d", ret); - return; - } - std::unique_lock lock(condition_.mutex); - if (condition_.condition.wait_for(lock, std::chrono::seconds(WAIT_TIME), - [this] { return dataShareProxy_ == nullptr; })) { - LOG_DEBUG("disconnect ability successfully"); - } else { - LOG_INFO("disconnect timeout"); - } -} -void DataShareConnection::SetDataShareProxy(sptr proxy) -{ - if (proxy == nullptr) { - dataShareProxy_ = nullptr; - return; - } - - dataShareProxy_ = - std::shared_ptr(proxy.GetRefPtr(), [holder = proxy](const auto *) {}); + ErrCode ret = instance->DisConnect(this); + LOG_INFO("disconnect uri:%{public}s, ret = %{public}d", uri.c_str(), ret); } DataShareConnection::~DataShareConnection() diff --git a/data_share/frameworks/native/consumer/src/datashare_helper.cpp b/data_share/frameworks/native/consumer/src/datashare_helper.cpp index 207c58b5a927b4e0a10280e7d90122f89b64bcc4..b545f568511e21df0c1e8bc72842d7509c663a6b 100644 --- a/data_share/frameworks/native/consumer/src/datashare_helper.cpp +++ b/data_share/frameworks/native/consumer/src/datashare_helper.cpp @@ -29,6 +29,7 @@ namespace { static constexpr const char *DATA_SHARE_PREFIX = "datashare:///"; static constexpr const char *FILE_PREFIX = "file://"; } // namespace +constexpr int INVALID_VALUE = -1; class ObserverImpl : public AAFwk::DataAbilityObserverStub { public: explicit ObserverImpl(const std::shared_ptr dataShareObserver) @@ -83,9 +84,12 @@ std::shared_ptr DataShareHelper::Creator( if (uri.GetQuery().find("Proxy=true") != std::string::npos) { auto result = CreateServiceHelper(); - if (result != nullptr || extUri.empty()) { + if (result != nullptr && IsSilentProxyEnable(strUri)) { return result; } + if (extUri.empty()) { + return nullptr; + } Uri ext(extUri); return CreateExtHelper(ext, token); } @@ -121,6 +125,16 @@ std::shared_ptr DataShareHelper::CreateServiceHelper(const std: return std::make_shared(); } +bool DataShareHelper::IsSilentProxyEnable(const std::string &uri) +{ + auto proxy = DataShareManagerImpl::GetServiceProxy(); + if (proxy == nullptr) { + LOG_ERROR("Service proxy is nullptr."); + return false; + } + return proxy->IsSilentProxyEnable(uri); +} + std::shared_ptr DataShareHelper::CreateExtHelper(Uri &uri, const sptr &token) { sptr connection = new (std::nothrow) DataShareConnection(uri, token); @@ -298,5 +312,15 @@ bool ObserverImpl::DeleteObserver(const Uri& uri, const std::shared_ptrSetSilentSwitch(uri, enable); +} } // namespace DataShare } // namespace OHOS \ No newline at end of file diff --git a/data_share/frameworks/native/consumer/src/datashare_helper_impl.cpp b/data_share/frameworks/native/consumer/src/datashare_helper_impl.cpp index 92818bed2ba0fb81251bc8c30ebcab6fa36b7d17..4c7d5253b718b2e56ea249451aaf602760f24bac 100644 --- a/data_share/frameworks/native/consumer/src/datashare_helper_impl.cpp +++ b/data_share/frameworks/native/consumer/src/datashare_helper_impl.cpp @@ -177,7 +177,6 @@ int DataShareHelperImpl::ExecuteBatch(const std::vector &sta void DataShareHelperImpl::RegisterObserver(const Uri &uri, const sptr &dataObserver) { - LOG_INFO("Start"); if (dataObserver == nullptr) { LOG_ERROR("dataObserver is nullptr"); return; @@ -192,7 +191,6 @@ void DataShareHelperImpl::RegisterObserver(const Uri &uri, const sptr &dataObserver) { - LOG_INFO("Start"); if (dataObserver == nullptr) { LOG_ERROR("dataObserver is nullptr"); return; diff --git a/data_share/frameworks/native/consumer/src/datashare_proxy.cpp b/data_share/frameworks/native/consumer/src/datashare_proxy.cpp index 003e3b38216595bccfceb10bf7275f6296727b7a..9dd419e524e5fe293d8444a9e55c0da2ad75da94 100644 --- a/data_share/frameworks/native/consumer/src/datashare_proxy.cpp +++ b/data_share/frameworks/native/consumer/src/datashare_proxy.cpp @@ -144,6 +144,7 @@ int DataShareProxy::Insert(const Uri &uri, const DataShareValuesBucket &value) { int index = -1; MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return index; @@ -172,6 +173,7 @@ int DataShareProxy::InsertExt(const Uri &uri, const DataShareValuesBucket &value { int index = -1; MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return index; @@ -199,6 +201,7 @@ int DataShareProxy::Update(const Uri &uri, const DataSharePredicates &predicates { int index = -1; MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return index; @@ -226,6 +229,7 @@ int DataShareProxy::Delete(const Uri &uri, const DataSharePredicates &predicates { int index = -1; MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return index; @@ -278,7 +282,6 @@ std::shared_ptr DataShareProxy::Query(const Uri &uri, const std::string DataShareProxy::GetType(const Uri &uri) { - LOG_INFO("begin."); std::string type; MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { @@ -308,15 +311,14 @@ std::string DataShareProxy::GetType(const Uri &uri) return type; } - LOG_INFO("end successfully."); return type; } int DataShareProxy::BatchInsert(const Uri &uri, const std::vector &values) { - LOG_INFO("begin."); int ret = -1; MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return ret; @@ -338,13 +340,13 @@ int DataShareProxy::BatchInsert(const Uri &uri, const std::vector &statements, ExecResultSet &result) { MessageParcel data; + data.SetMaxCapacity(MTU_SIZE); if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); return -1; @@ -371,7 +373,6 @@ int DataShareProxy::ExecuteBatch(const std::vector &statemen bool DataShareProxy::RegisterObserver(const Uri &uri, const sptr &dataObserver) { - LOG_INFO("begin."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); @@ -387,19 +388,15 @@ bool DataShareProxy::RegisterObserver(const Uri &uri, const sptrSendRequest( static_cast(IDataShareInterfaceCode::CMD_REGISTER_OBSERVER), data, reply, option); - if (result == ERR_NONE) { - LOG_INFO("SendRequest ok, retval is %{public}d", reply.ReadInt32()); - } else { + if (result != ERR_NONE) { LOG_ERROR("SendRequest error, result=%{public}d", result); return false; } - LOG_INFO("end."); return true; } bool DataShareProxy::UnregisterObserver(const Uri &uri, const sptr &dataObserver) { - LOG_INFO("begin."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); @@ -414,19 +411,15 @@ bool DataShareProxy::UnregisterObserver(const Uri &uri, const sptrSendRequest( static_cast(IDataShareInterfaceCode::CMD_UNREGISTER_OBSERVER), data, reply, option); - if (result == ERR_NONE) { - LOG_INFO("SendRequest ok, retval is %{public}d", reply.ReadInt32()); - } else { + if (result != ERR_NONE) { LOG_ERROR("SendRequest error, result=%{public}d", result); return false; } - LOG_INFO("end successfully."); return true; } bool DataShareProxy::NotifyChange(const Uri &uri) { - LOG_INFO("begin."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); @@ -441,19 +434,15 @@ bool DataShareProxy::NotifyChange(const Uri &uri) MessageOption option; int32_t result = Remote()->SendRequest( static_cast(IDataShareInterfaceCode::CMD_NOTIFY_CHANGE), data, reply, option); - if (result == ERR_NONE) { - LOG_INFO("SendRequest ok, retval is %{public}d", reply.ReadInt32()); - } else { + if (result != ERR_NONE) { LOG_ERROR("SendRequest error, result=%{public}d", result); return false; } - LOG_INFO("end successfully."); return true; } Uri DataShareProxy::NormalizeUri(const Uri &uri) { - LOG_INFO("begin."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); @@ -477,13 +466,11 @@ Uri DataShareProxy::NormalizeUri(const Uri &uri) LOG_ERROR("fail to Unmarshal index"); return Uri(""); } - LOG_INFO("end successfully."); return info; } Uri DataShareProxy::DenormalizeUri(const Uri &uri) { - LOG_INFO("begin."); MessageParcel data; if (!data.WriteInterfaceToken(DataShareProxy::GetDescriptor())) { LOG_ERROR("WriteInterfaceToken failed"); @@ -509,7 +496,6 @@ Uri DataShareProxy::DenormalizeUri(const Uri &uri) LOG_ERROR("fail to Unmarshal index"); return Uri(""); } - LOG_INFO("end successfully."); return info; } } // namespace DataShare diff --git a/data_share/frameworks/native/provider/include/js_datashare_ext_ability.h b/data_share/frameworks/native/provider/include/js_datashare_ext_ability.h index 929f6b6db3d42b31ae8702726fab980bd61221d0..6b4d84a9862b6450d43d9fff6deff900d5c5f044 100644 --- a/data_share/frameworks/native/provider/include/js_datashare_ext_ability.h +++ b/data_share/frameworks/native/provider/include/js_datashare_ext_ability.h @@ -232,13 +232,13 @@ public: */ Uri DenormalizeUri(const Uri &uri) override; - bool GetBlockWaiting() const + bool GetRecvReply() const { - return isBlockWaiting_; + return isRecvReply_; } - void SetBlockWaiting(bool blockWaiting) + void SetRecvReply(bool recvReply) { - isBlockWaiting_ = blockWaiting; + isRecvReply_ = recvReply; } napi_value GetAsyncResult() const @@ -309,6 +309,9 @@ private: struct AsyncPoint { std::shared_ptr context; }; + struct AsyncCallBackPoint { + std::weak_ptr extAbility; + }; napi_value CallObjectMethod(const char *name, napi_value const *argv = nullptr, size_t argc = 0, bool isAsync = true); napi_value CallObjectMethod( @@ -323,10 +326,11 @@ private: static napi_valuetype UnWrapPropertyType(napi_env env, napi_value info, const std::string &key); static std::string UnWrapProperty(napi_env env, napi_value info, const std::string &key); + int32_t InitAsyncCallParams(size_t argc, napi_env &env, napi_value *args); JsRuntime& jsRuntime_; std::unique_ptr jsObj_; - bool isBlockWaiting_ = false; + bool isRecvReply_ = false; napi_value callbackData_ = nullptr; int callbackResultNumber_ = -1; std::string callbackResultString_ = ""; diff --git a/data_share/frameworks/native/provider/src/datashare_stub.cpp b/data_share/frameworks/native/provider/src/datashare_stub.cpp index 15bcd20ee0de7ae183bce5cb16eba89959aeeb3d..baf4391b70b12bc3db00bbb4d5a513770801c77a 100644 --- a/data_share/frameworks/native/provider/src/datashare_stub.cpp +++ b/data_share/frameworks/native/provider/src/datashare_stub.cpp @@ -112,8 +112,7 @@ ErrCode DataShareStub::CmdOpenFile(MessageParcel &data, MessageParcel &reply) } int fd = OpenFile(uri, mode); if (fd < 0) { - LOG_ERROR("OpenFile fail, fd is %{public}d", fd); - return ERR_INVALID_VALUE; + return ERR_INVALID_DATA; } if (!reply.WriteFileDescriptor(fd)) { LOG_ERROR("fail to WriteFileDescriptor fd"); @@ -160,7 +159,6 @@ ErrCode DataShareStub::CmdInsert(MessageParcel &data, MessageParcel &reply) LOG_ERROR("fail to WriteInt32 index"); return ERR_INVALID_VALUE; } - LOG_INFO("DataShareStub::CmdInsertInner end"); return DATA_SHARE_NO_ERROR; } diff --git a/data_share/frameworks/native/provider/src/datashare_stub_impl.cpp b/data_share/frameworks/native/provider/src/datashare_stub_impl.cpp index 81fb230496ec9e01aeb454b4d3ae952e6d74fa1b..57c9af57deb78477ac5773505281a1e2a27c7445 100644 --- a/data_share/frameworks/native/provider/src/datashare_stub_impl.cpp +++ b/data_share/frameworks/native/provider/src/datashare_stub_impl.cpp @@ -128,7 +128,7 @@ int DataShareStubImpl::Insert(const Uri &uri, const DataShareValuesBucket &value return false; } extension->GetResult(ret); - return (ret != DEFAULT_NUMBER); + return (extension->GetRecvReply() != false); }; std::lock_guard lock(mutex_); uvQueue_->SyncCall(syncTaskFunc, getRetFunc); @@ -163,7 +163,7 @@ int DataShareStubImpl::Update(const Uri &uri, const DataSharePredicates &predica return false; } extension->GetResult(ret); - return (ret != DEFAULT_NUMBER); + return (extension->GetRecvReply() != false); }; std::lock_guard lock(mutex_); uvQueue_->SyncCall(syncTaskFunc, getRetFunc); @@ -197,7 +197,7 @@ int DataShareStubImpl::Delete(const Uri &uri, const DataSharePredicates &predica return false; } extension->GetResult(ret); - return (ret != DEFAULT_NUMBER); + return (extension->GetRecvReply() != false); }; std::lock_guard lock(mutex_); uvQueue_->SyncCall(syncTaskFunc, getRetFunc); @@ -233,7 +233,7 @@ std::shared_ptr DataShareStubImpl::Query(const Uri &uri, extension->SetCallingInfo(info); extension->GetResultSet(resultSet); extension->GetBusinessError(businessError); - return (resultSet != nullptr); + return (extension->GetRecvReply() != false); }; std::lock_guard lock(mutex_); uvQueue_->SyncCall(syncTaskFunc, getRetFunc); @@ -289,7 +289,7 @@ int DataShareStubImpl::BatchInsert(const Uri &uri, const std::vectorGetResult(ret); - return (ret != DEFAULT_NUMBER); + return (extension->GetRecvReply() != false); }; std::lock_guard lock(mutex_); uvQueue_->SyncCall(syncTaskFunc, getRetFunc); diff --git a/data_share/frameworks/native/provider/src/datashare_uv_queue.cpp b/data_share/frameworks/native/provider/src/datashare_uv_queue.cpp index bf2eae50f8cf0a0b085f905700935595dd7f12eb..4995d8313d36bb1e10184d8559fe7d1875cce6a5 100644 --- a/data_share/frameworks/native/provider/src/datashare_uv_queue.cpp +++ b/data_share/frameworks/native/provider/src/datashare_uv_queue.cpp @@ -19,7 +19,7 @@ namespace OHOS { namespace DataShare { -constexpr int WAIT_TIME = 60; +constexpr int WAIT_TIME = 3; constexpr int SLEEP_TIME = 1; constexpr int TRY_TIMES = 2000; DataShareUvQueue::DataShareUvQueue(napi_env env) @@ -66,10 +66,6 @@ void DataShareUvQueue::SyncCall(NapiVoidFunc func, NapiBoolFunc retFunc) bool noNeedPurge = false; auto *uvEntry = static_cast(work->data); { - if (uvEntry == nullptr) { - LOG_ERROR("invalid uvEntry."); - return; - } std::unique_lock lock(uvEntry->mutex); auto status = uv_queue_work( loop_, work, [](uv_work_t *work) {}, LambdaForWork); diff --git a/data_share/frameworks/native/provider/src/js_datashare_ext_ability.cpp b/data_share/frameworks/native/provider/src/js_datashare_ext_ability.cpp index cb31e876d7d72e44cf51e376fd3e34ee5e3f3f2c..d6bdc09c8b19cd68209aea08c40a3c87c52b152f 100644 --- a/data_share/frameworks/native/provider/src/js_datashare_ext_ability.cpp +++ b/data_share/frameworks/native/provider/src/js_datashare_ext_ability.cpp @@ -24,6 +24,7 @@ #include "idata_share_service.h" #include "iservice_registry.h" #include "js_datashare_ext_ability_context.h" +#include "js_proxy.h" #include "js_runtime.h" #include "js_runtime_utils.h" #include "napi_common_util.h" @@ -153,7 +154,7 @@ void JsDataShareExtAbility::CheckAndSetAsyncResult(napi_env env) std::string value = OHOS::AppExecFwk::UnwrapStringFromJS(env, result); SetResult(value); } else if (type == napi_valuetype::napi_object) { - ResultSetBridge::Creator *proxy = nullptr; + JSProxy::JSCreator *proxy = nullptr; napi_unwrap(env, result, reinterpret_cast(&proxy)); if (proxy == nullptr) { std::vector value; @@ -192,6 +193,12 @@ napi_value JsDataShareExtAbility::AsyncCallback(napi_env env, napi_callback_info return CreateJsUndefined(env); } + AsyncCallBackPoint* point = static_cast(data); + auto instance = point->extAbility.lock(); + if (!instance) { + LOG_ERROR("extension ability has been destroyed."); + return CreateJsUndefined(env); + } DatashareBusinessError businessError; napi_valuetype type = napi_undefined; napi_typeof(env, argv[0], &type); @@ -199,12 +206,11 @@ napi_value JsDataShareExtAbility::AsyncCallback(napi_env env, napi_callback_info LOG_INFO("Error in callback"); UnWrapBusinessError(env, argv[0], businessError); } - JsDataShareExtAbility* instance = reinterpret_cast(data); if (instance != nullptr) { - instance->SetBlockWaiting(true); instance->SetBusinessError(businessError); instance->SetAsyncResult(argv[1]); instance->CheckAndSetAsyncResult(env); + instance->SetRecvReply(true); } return CreateJsUndefined(env); } @@ -285,7 +291,8 @@ napi_value JsDataShareExtAbility::CallObjectMethod( return result; } -napi_value JsDataShareExtAbility::CallObjectMethod(const char* name, napi_value const *argv, size_t argc, bool isAsync) +napi_value JsDataShareExtAbility::CallObjectMethod(const char* name, napi_value const *argv, + size_t argc, bool isAsync) { if (!jsObj_) { LOG_WARN("Not found DataShareExtAbility.js"); @@ -318,17 +325,16 @@ napi_value JsDataShareExtAbility::CallObjectMethod(const char* name, napi_value } if (isAsync) { - callbackResultNumber_ = -1; - callbackResultString_ = ""; - callbackResultStringArr_ = {}; - SetResultSet(nullptr); - napi_create_function(env, ASYNC_CALLBACK_NAME, CALLBACK_LENGTH, - JsDataShareExtAbility::AsyncCallback, this, &args[argc]); + auto ret = InitAsyncCallParams(argc, env, args); + if (ret != E_OK) { + LOG_ERROR("Failed to InitAsyncCallParams in isAsync."); + delete [] args; + return nullptr; + } } else { args[argc] = nullptr; } - SetBlockWaiting(false); napi_value remoteNapi = nullptr; napi_status status = napi_call_function(env, obj, method, count, args, &remoteNapi); delete []args; @@ -338,6 +344,27 @@ napi_value JsDataShareExtAbility::CallObjectMethod(const char* name, napi_value return handleEscape.Escape(remoteNapi); } +int32_t JsDataShareExtAbility::InitAsyncCallParams(size_t argc, napi_env &env, napi_value *args) +{ + AsyncCallBackPoint *point = new (std::nothrow)AsyncCallBackPoint(); + if (point == nullptr) { + return E_ERROR; + } + callbackResultNumber_ = -1; + callbackResultString_ = ""; + callbackResultStringArr_ = {}; + SetResultSet(nullptr); + SetRecvReply(false); + point->extAbility = std::static_pointer_cast(shared_from_this()); + napi_create_function(env, ASYNC_CALLBACK_NAME, CALLBACK_LENGTH, + JsDataShareExtAbility::AsyncCallback, point, &args[argc]); + napi_add_finalizer(env, args[argc], point, + [](napi_env env, void* point, void* finalize_hint) { + delete static_cast(point); + }, nullptr, nullptr); + return E_OK; +} + void JsDataShareExtAbility::GetSrcPath(std::string &srcPath) { if (!Extension::abilityInfo_->isStageBasedModel) { @@ -384,6 +411,7 @@ std::vector JsDataShareExtAbility::GetFileTypes(const Uri &uri, con return ret; } napi_value argv[] = {napiUri, napiMimeTypeFilter}; + //represents this function has 2 parameters CallObjectMethod("getFileTypes", argv, 2); napi_close_handle_scope(env, scope); return ret; @@ -414,6 +442,7 @@ int JsDataShareExtAbility::OpenFile(const Uri &uri, const std::string &mode) return ret; } napi_value argv[] = {napiUri, napiMode}; + //represents this function has 2 parameters CallObjectMethod("openFile", argv, 2); napi_close_handle_scope(env, scope); return ret; @@ -444,6 +473,7 @@ int JsDataShareExtAbility::OpenRawFile(const Uri &uri, const std::string &mode) return ret; } napi_value argv[] = {napiUri, napiMode}; + //represents this function has 2 parameters CallObjectMethod("openRawFile", argv, 2, false); napi_close_handle_scope(env, scope); return ret; @@ -474,6 +504,7 @@ int JsDataShareExtAbility::Insert(const Uri &uri, const DataShareValuesBucket &v return ret; } napi_value argv[] = {napiUri, napiValue}; + //represents this function has 2 parameters CallObjectMethod("insert", argv, 2); napi_close_handle_scope(env, scope); return ret; @@ -513,6 +544,7 @@ int JsDataShareExtAbility::Update(const Uri &uri, const DataSharePredicates &pre } napi_value argv[] = {napiUri, napiPredicates, napiValue}; + //represents this function has 3 parameters CallObjectMethod("update", argv, 3); napi_close_handle_scope(env, scope); return ret; @@ -544,6 +576,7 @@ int JsDataShareExtAbility::Delete(const Uri &uri, const DataSharePredicates &pre } napi_value argv[] = {napiUri, napiPredicates}; + //represents this function has 2 parameters CallObjectMethod("delete", argv, 2); napi_close_handle_scope(env, scope); return ret; @@ -584,9 +617,10 @@ std::shared_ptr JsDataShareExtAbility::Query(const Uri &uri, } napi_value argv[] = {napiUri, napiPredicates, napiColumns}; + //represents this function has 3 parameters CallObjectMethod("query", argv, 3); napi_close_handle_scope(env, scope); - return std::make_shared(); + return ret; } std::string JsDataShareExtAbility::GetType(const Uri &uri) @@ -607,6 +641,7 @@ std::string JsDataShareExtAbility::GetType(const Uri &uri) return ret; } napi_value argv[] = {napiUri}; + //represents this function has 1 parameter CallObjectMethod("getType", argv, 1); napi_close_handle_scope(env, scope); return ret; @@ -656,6 +691,7 @@ int JsDataShareExtAbility::BatchInsert(const Uri &uri, const std::vector GetDistributedDataManager(); + static sptr GetDistributedDataManager(); static std::mutex pmutex_; static DataShareManagerImpl* manager_; std::mutex mutex_; - std::shared_ptr dataMgrService_; + sptr dataMgrService_; std::shared_ptr dataShareService_; std::string bundleName_; static constexpr int WAIT_TIME = 2; diff --git a/data_share/frameworks/native/proxy/include/data_share_service_proxy.h b/data_share/frameworks/native/proxy/include/data_share_service_proxy.h index 23690e910ec60a0c8beca302c1484e1064add55a..ded0ea8a2fc4e2c6d4ac56e958acdc50374437d4 100644 --- a/data_share/frameworks/native/proxy/include/data_share_service_proxy.h +++ b/data_share/frameworks/native/proxy/include/data_share_service_proxy.h @@ -69,6 +69,10 @@ public: const std::vector &uris, int64_t subscriberId) override; void Notify(const std::string &uri) override; + int SetSilentSwitch(const Uri &uri, bool enable) override; + + bool IsSilentProxyEnable(const std::string &uri) override; + private: static inline BrokerDelegator delegator_; }; diff --git a/data_share/frameworks/native/proxy/src/ams_mgr_proxy.cpp b/data_share/frameworks/native/proxy/src/ams_mgr_proxy.cpp index 13f4dc4f7112a9ebad2c7962520f087f856efeaf..5fbb9cccf68933e83e8173ffbe29583368fee971 100644 --- a/data_share/frameworks/native/proxy/src/ams_mgr_proxy.cpp +++ b/data_share/frameworks/native/proxy/src/ams_mgr_proxy.cpp @@ -54,7 +54,7 @@ AmsMgrProxy* AmsMgrProxy::GetInstance() } proxy = new AmsMgrProxy(); if (proxy == nullptr) { - LOG_ERROR("new AmsMgrProxy failed"); + LOG_ERROR("new proxy failed"); } return proxy; } @@ -66,12 +66,7 @@ int AmsMgrProxy::Connect( want.SetUri(uri); std::lock_guard lock(mutex_); if (ConnectSA()) { - LOG_INFO("connect datashareextability start, uri = %{public}s.", uri.c_str()); - int ret = proxy_->ConnectAbilityCommon(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::DATASHARE); - if (ret != ERR_OK) { - LOG_ERROR("connect ability failed, uri = %{public}s, ret = %{public}d", uri.c_str(), ret); - } - return ret; + return proxy_->ConnectAbilityCommon(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::DATASHARE); } return -1; } @@ -90,19 +85,19 @@ bool AmsMgrProxy::ConnectSA() sa_ = systemAbilityManager->GetSystemAbility(ABILITY_MGR_SERVICE_ID); if (sa_ == nullptr) { - LOG_ERROR("Failed to GetSystemAbility."); + LOG_ERROR("get ability manager service failed."); return false; } deathRecipient_ = new (std::nothrow) AmsMgrProxy::ServiceDeathRecipient(this); if (deathRecipient_ == nullptr) { - LOG_ERROR("deathRecipient alloc failed."); + LOG_ERROR("new death recipient failed."); return false; } sa_->AddDeathRecipient(deathRecipient_); proxy_ = new (std::nothrow)Proxy(sa_); if (proxy_ == nullptr) { - LOG_ERROR("proxy_ null, new failed"); + LOG_ERROR("new proxy failed"); return false; } return true; @@ -112,11 +107,7 @@ int AmsMgrProxy::DisConnect(sptr connect) { std::lock_guard lock(mutex_); if (ConnectSA()) { - int ret = proxy_->DisconnectAbility(connect); - if (ret != ERR_OK) { - LOG_ERROR("DisconnectAbility failed, ret = %{public}d", ret); - } - return ret; + return proxy_->DisconnectAbility(connect); } return -1; } diff --git a/data_share/frameworks/native/proxy/src/data_share_manager_impl.cpp b/data_share/frameworks/native/proxy/src/data_share_manager_impl.cpp index 9f533010192ffa4cd915c5ddcd0852e3d47ee128..44fca74eef3f5791b551f2df61ddb9124d44f695 100644 --- a/data_share/frameworks/native/proxy/src/data_share_manager_impl.cpp +++ b/data_share/frameworks/native/proxy/src/data_share_manager_impl.cpp @@ -49,7 +49,7 @@ DataShareManagerImpl* DataShareManagerImpl::GetInstance() } -std::shared_ptr DataShareManagerImpl::GetDistributedDataManager() +sptr DataShareManagerImpl::GetDistributedDataManager() { auto manager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (manager == nullptr) { @@ -61,8 +61,12 @@ std::shared_ptr DataShareManagerImpl::GetDistributedDat LOG_ERROR("get distributed data manager failed"); return nullptr; } - LOG_INFO("get distributed data manager success"); - return std::make_shared(remoteObject); + sptr proxy = new (std::nothrow)DataShareKvServiceProxy(remoteObject); + if (proxy == nullptr) { + LOG_ERROR("new DataShareKvServiceProxy fail."); + return nullptr; + } + return proxy; } void DataShareManagerImpl::LinkToDeath(const sptr remote) @@ -76,7 +80,7 @@ void DataShareManagerImpl::LinkToDeath(const sptr remote) if (!remote->AddDeathRecipient(deathRecipient)) { LOG_ERROR("add death recipient failed"); } - LOG_ERROR("link to death success"); + LOG_INFO("link to death success"); } sptr DataShareManagerImpl::GetDataShareServiceProxy() @@ -110,7 +114,11 @@ void DataShareManagerImpl::RegisterClientDeathObserver() LOG_WARN("new KvStoreClientDeathObserver failed"); return; } - dataMgrService_->RegisterClientDeathObserver(bundleName_, clientDeathObserverPtr_); + auto status = dataMgrService_->RegisterClientDeathObserver(bundleName_, clientDeathObserverPtr_); + if (!status) { + LOG_ERROR("RegisterClientDeathObserver failed, bundleName is %{public}s", bundleName_.c_str()); + return; + } } DataShareManagerImpl::DataShareManagerImpl() diff --git a/data_share/frameworks/native/proxy/src/data_share_service_proxy.cpp b/data_share/frameworks/native/proxy/src/data_share_service_proxy.cpp index ef0ddd8a25a8986fd91a2e813b8f352246d3376f..694b7fcefa063527024539edc5d879bf6b6c9840 100644 --- a/data_share/frameworks/native/proxy/src/data_share_service_proxy.cpp +++ b/data_share/frameworks/native/proxy/src/data_share_service_proxy.cpp @@ -469,5 +469,56 @@ void DataShareServiceProxy::Notify(const std::string &uri) return; } } + +int DataShareServiceProxy::SetSilentSwitch(const Uri &uri, bool enable) +{ + const std::string &uriStr = uri.ToString(); + MessageParcel data; + if (!data.WriteInterfaceToken(IDataShareService::GetDescriptor())) { + LOG_ERROR("Write descriptor failed!"); + return DATA_SHARE_ERROR; + } + if (!ITypesUtil::Marshal(data, uriStr, enable)) { + LOG_ERROR("Write to message parcel failed!"); + return DATA_SHARE_ERROR; + } + + MessageParcel reply; + MessageOption option; + int32_t err = Remote()->SendRequest( + static_cast(InterfaceCode::DATA_SHARE_SERVICE_CMD_SET_SILENT_SWITCH), data, reply, option); + if (err != NO_ERROR) { + LOG_ERROR("SetSilentSwitch fail to SendRequest. uri: %{public}s, err: %{public}d", uriStr.c_str(), err); + return DATA_SHARE_ERROR; + } + return reply.ReadInt32(); +} + +bool DataShareServiceProxy::IsSilentProxyEnable(const std::string &uri) +{ + MessageParcel data; + if (!data.WriteInterfaceToken(IDataShareService::GetDescriptor())) { + LOG_ERROR("Write descriptor failed!"); + return false; + } + if (!ITypesUtil::Marshal(data, uri)) { + LOG_ERROR("Write to message parcel failed!"); + return false; + } + + MessageParcel reply; + MessageOption option; + int32_t err = Remote()->SendRequest( + static_cast(InterfaceCode::DATA_SHARE_SERVICE_CMD_IS_SILENT_PROXY_ENABLE), data, reply, option); + if (err != NO_ERROR) { + LOG_ERROR("Is silent proxy enable fail to SendRequest. uri: %{public}s, err: %{public}d", uri.c_str(), err); + return false; + } + bool enable = false; + if (!ITypesUtil::Unmarshal(reply, enable)) { + LOG_ERROR("Is silent proxy Unmarshal failed."); + } + return enable; +} } // namespace DataShare } // namespace OHOS diff --git a/data_share/frameworks/native/proxy/src/published_data_subscriber_manager.cpp b/data_share/frameworks/native/proxy/src/published_data_subscriber_manager.cpp index 8536df3a07df9cb1c63e710f184ba90ef10fe0c2..6ec27fd330db834f486167025b31f1c5e10681dc 100644 --- a/data_share/frameworks/native/proxy/src/published_data_subscriber_manager.cpp +++ b/data_share/frameworks/native/proxy/src/published_data_subscriber_manager.cpp @@ -194,21 +194,21 @@ void PublishedDataSubscriberManager::RecoverObservers(std::shared_ptr &Keys) { - std::map> keysMap; - for (auto const &key : Keys) { - keysMap[key.subscriberId_].emplace_back(key.uri_); - } - for (auto const &[subscriberId, uris] : keysMap) { - auto results = proxy->SubscribePublishedData(uris, subscriberId, serviceCallback_); - for (const auto& result : results) { - if (result.errCode_ != E_OK) { - LOG_WARN("RecoverObservers failed, uri is %{public}s, errCode is %{public}d", - result.key_.c_str(), result.errCode_); - } + + std::map> keysMap; + std::vector keys = CallbacksManager::GetKeys(); + for (const auto& key : keys) { + keysMap[key.subscriberId_].emplace_back(key.uri_); + } + for (const auto &[subscriberId, uris] : keysMap) { + auto results = proxy->SubscribePublishedData(uris, subscriberId, serviceCallback_); + for (const auto& result : results) { + if (result.errCode_ != E_OK) { + LOG_WARN("RecoverObservers failed, uri is %{public}s, errCode is %{public}d", + result.key_.c_str(), result.errCode_); } } - }); + } } void PublishedDataSubscriberManager::Emit(PublishedDataChangeNode &changeNode) diff --git a/data_share/frameworks/native/proxy/src/rdb_subscriber_manager.cpp b/data_share/frameworks/native/proxy/src/rdb_subscriber_manager.cpp index 1feffaee7b79ad96db030ce98875f454c353e2d1..6ef1f4bd763c1f275ee550a04fe52ac83dac83b0 100644 --- a/data_share/frameworks/native/proxy/src/rdb_subscriber_manager.cpp +++ b/data_share/frameworks/native/proxy/src/rdb_subscriber_manager.cpp @@ -200,21 +200,20 @@ void RdbSubscriberManager::RecoverObservers(std::shared_ptr &Keys) { - std::map> keysMap; - for (auto const &key : Keys) { - keysMap[key.templateId_].emplace_back(key.uri_); - } - for (auto const &[templateId, uris] : keysMap) { - auto results = proxy->SubscribeRdbData(uris, templateId, serviceCallback_); - for (const auto& result : results) { - if (result.errCode_ != E_OK) { - LOG_WARN("RecoverObservers failed, uri is %{public}s, errCode is %{public}d", - result.key_.c_str(), result.errCode_); - } + std::map> keysMap; + std::vector keys = CallbacksManager::GetKeys(); + for (const auto& key : keys) { + keysMap[key.templateId_].emplace_back(key.uri_); + } + for (const auto& [templateId, uris] : keysMap) { + auto results = proxy->SubscribeRdbData(uris, templateId, serviceCallback_); + for (const auto& result : results) { + if (result.errCode_ != E_OK) { + LOG_WARN("RecoverObservers failed, uri is %{public}s, errCode is %{public}d", result.key_.c_str(), + result.errCode_); } } - }); + } } void RdbSubscriberManager::Emit(const RdbChangeNode &changeNode) diff --git a/data_share/interfaces/inner_api/BUILD.gn b/data_share/interfaces/inner_api/BUILD.gn index 777821d57e67bc8705469e4d124038f75a77d513..689e9b99f33daf6c0ab06da94d3fbccb217d6ede 100644 --- a/data_share/interfaces/inner_api/BUILD.gn +++ b/data_share/interfaces/inner_api/BUILD.gn @@ -40,7 +40,6 @@ config("datashare_public_config") { "common/include", "consumer/include", "provider/include", - "${datashare_common_napi_path}/include", "${datashare_common_native_path}/include", "${datashare_native_consumer_path}/controller/common", "${datashare_native_consumer_path}/controller/provider/include", @@ -48,6 +47,7 @@ config("datashare_public_config") { "${datashare_native_consumer_path}/include", "${datashare_native_provider_path}/include", "${datashare_native_proxy_path}/include", + "${kvstore_common_path}", "${ability_runtime_inner_api_path}/dataobs_manager/include", ] } @@ -82,7 +82,6 @@ datashare_consumer_external_deps = [ "hilog:libhilog", "ipc:ipc_js", "ipc:ipc_single", - "napi:ace_napi", "samgr:samgr_proxy", ] @@ -115,8 +114,16 @@ ohos_shared_library("datashare_consumer") { } ohos_shared_library("datashare_provider") { - include_dirs = - [ "//foundation/distributeddatamgr/kv_store/frameworks/common" ] + branch_protector_ret = "pac_ret" + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + include_dirs = [ + "${datashare_common_napi_path}/include", + "${kvstore_common_path}", + ] sources = [ "${datashare_native_provider_path}/src/datashare_ext_ability.cpp", @@ -131,7 +138,10 @@ ohos_shared_library("datashare_provider") { public_configs = [ ":datashare_public_config" ] version_script = "provider/libdatashare_provider.map" innerapi_tags = [ "platformsdk" ] - deps = [ "${datashare_innerapi_path}/common:datashare_common" ] + deps = [ + "${datashare_innerapi_path}/common:datashare_common", + "${datashare_napi_path}/dataShare:datashare_jscommon", + ] external_deps = [ "ability_base:want", diff --git a/data_share/interfaces/inner_api/common/BUILD.gn b/data_share/interfaces/inner_api/common/BUILD.gn index e72fd80bcd647e8cf018ba05d64d80bd7b12ed5e..f68ad798244f710b6170c6490e65aaded91e2d1b 100644 --- a/data_share/interfaces/inner_api/common/BUILD.gn +++ b/data_share/interfaces/inner_api/common/BUILD.gn @@ -31,22 +31,15 @@ config("datashare_public_config") { } datashare_common_include_dirs = [ - "${datashare_common_napi_path}/include", "${datashare_common_native_path}/include", "${datashare_base_path}/interfaces/inner_api/common/include", "${datashare_base_path}/interfaces/inner_api/consumer/include", "${datashare_base_path}/interfaces/inner_api/provider/include", "${datashare_native_proxy_path}/include", - "${foundation_path}/communication/ipc/ipc/native/src/napi_common/include", "${kvstore_base_path}/frameworks/common", ] datashare_common_sources = [ - "${datashare_common_napi_path}/src/datashare_error_impl.cpp", - "${datashare_common_napi_path}/src/datashare_js_utils.cpp", - "${datashare_common_napi_path}/src/datashare_predicates_proxy.cpp", - "${datashare_common_napi_path}/src/datashare_result_set_proxy.cpp", - "${datashare_common_napi_path}/src/napi_datashare_values_bucket.cpp", "${datashare_common_native_path}/src/datashare_abs_result_set.cpp", "${datashare_common_native_path}/src/datashare_block_writer_impl.cpp", "${datashare_common_native_path}/src/datashare_itypes_utils.cpp", @@ -66,9 +59,7 @@ datashare_common_external_deps = [ "hisysevent:libhisysevent", "hitrace:hitrace_meter", "hitrace:libhitracechain", - "ipc:ipc_napi_common", "ipc:ipc_single", - "napi:ace_napi", ] ohos_shared_library("datashare_common") { diff --git a/data_share/interfaces/inner_api/common/include/datashare_abs_predicates.h b/data_share/interfaces/inner_api/common/include/datashare_abs_predicates.h index f18181020c605a22d0699ae192b477f6f329298e..b7fa3479bb303564d752873c3a572d3f4b6d063f 100644 --- a/data_share/interfaces/inner_api/common/include/datashare_abs_predicates.h +++ b/data_share/interfaces/inner_api/common/include/datashare_abs_predicates.h @@ -26,9 +26,7 @@ namespace OHOS { namespace DataShare { class DataShareAbsPredicates { public: - struct JsProxy { - std::shared_ptr predicates_; - }; + /** * @brief Destructor. */ diff --git a/data_share/interfaces/inner_api/common/include/datashare_operation_statement.h b/data_share/interfaces/inner_api/common/include/datashare_operation_statement.h index 40c8332bcb0bc9981c5cadd9db8220905ca71c7a..f5735e14ffe4774d74229594b01257e4cca9f05c 100644 --- a/data_share/interfaces/inner_api/common/include/datashare_operation_statement.h +++ b/data_share/interfaces/inner_api/common/include/datashare_operation_statement.h @@ -21,7 +21,7 @@ namespace OHOS { namespace DataShare { -enum Operation : int32_t { +enum class Operation : int32_t { INSERT = 0, UPDATE, DELETE, diff --git a/data_share/interfaces/inner_api/consumer/include/datashare_helper.h b/data_share/interfaces/inner_api/consumer/include/datashare_helper.h index c4053363734d9d77d589767aabb17e578b16e793..c0da2ed8a8e402f3daf05912979b3025fb717046 100644 --- a/data_share/interfaces/inner_api/consumer/include/datashare_helper.h +++ b/data_share/interfaces/inner_api/consumer/include/datashare_helper.h @@ -403,9 +403,19 @@ public: */ virtual std::vector DisablePubSubs(const std::vector &uris, int64_t subscriberId) = 0; + /** + * @brief Set default switch for silent access. + * @param uri, the uri to disable/enable. + * @param enable, the enable of silent switch. + * @return Returns the error code. + */ + static int SetSilentSwitch(Uri &uri, bool enable); + private: static std::shared_ptr CreateServiceHelper(const std::string &bundleName = ""); - + + static bool IsSilentProxyEnable(const std::string &uri); + static std::shared_ptr CreateExtHelper(Uri &uri, const sptr &token); static std::string TransferUriPrefix(const std::string &originPrefix, const std::string &replacedPrefix, diff --git a/data_share/interfaces/inner_api/provider/include/result_set_bridge.h b/data_share/interfaces/inner_api/provider/include/result_set_bridge.h index 0a9cac34f353564e419ebe9b5674995bf5f5be2e..714295b6c77b85f857db3b66ed0753aa028987c0 100644 --- a/data_share/interfaces/inner_api/provider/include/result_set_bridge.h +++ b/data_share/interfaces/inner_api/provider/include/result_set_bridge.h @@ -23,10 +23,6 @@ namespace DataShare { // build the bridge between the database's ResultSet and DataShare's ResultSet class ResultSetBridge { public: - class Creator { - public: - virtual std::shared_ptr Create() = 0; - }; class Writer { public: /** diff --git a/data_share/test/js/data_share/BUILD.gn b/data_share/test/js/data_share/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..24c7c3fd765e55940eb489c580eb261a077df720 --- /dev/null +++ b/data_share/test/js/data_share/BUILD.gn @@ -0,0 +1,23 @@ +# 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. + +import("//build/test.gni") + +#################################group######################################### +group("unittest") { + testonly = true + deps = [] + + deps += [ "unittest/src:unittest" ] +} +############################################################################### diff --git a/data_share/test/js/data_share/unittest/config.json b/data_share/test/js/data_share/unittest/config.json new file mode 100644 index 0000000000000000000000000000000000000000..865615d255b08fd479e18891941ef167326e4561 --- /dev/null +++ b/data_share/test/js/data_share/unittest/config.json @@ -0,0 +1,63 @@ +{ + "app": { + "bundleName": "com.example.myapplication", + "vendor": "example", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 4, + "target": 5 + } + }, + "deviceConfig": {}, + "module": { + "package": "com.example.myapplication", + "name": ".MyApplication", + "deviceType": [ + "tablet", + "2in1", + "default", + "phone" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "entry", + "moduleType": "entry" + }, + "abilities": [ + { + "visible": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ], + "name": "com.example.myapplication.MainAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "MyApplication", + "type": "page", + "launchType": "standard" + } + ], + "js": [ + { + "pages": [ + "pages/index/index" + ], + "name": "default", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + } + ] + } +} diff --git a/data_share/test/js/data_share/unittest/openharmony_sx.p7b b/data_share/test/js/data_share/unittest/openharmony_sx.p7b new file mode 100644 index 0000000000000000000000000000000000000000..9be1e98fa4c0c28ca997ed660112fa16b194f0f5 Binary files /dev/null and b/data_share/test/js/data_share/unittest/openharmony_sx.p7b differ diff --git a/data_share/test/js/data_share/unittest/src/BUILD.gn b/data_share/test/js/data_share/unittest/src/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..2da1e9e611a9a787611b1af9a3d03d393e40e148 --- /dev/null +++ b/data_share/test/js/data_share/unittest/src/BUILD.gn @@ -0,0 +1,29 @@ +# 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. + +import("//build/test.gni") + +module_output_path = "data_share/data_share" + +ohos_js_unittest("DataShareSilentAccessJsTest") { + module_out_path = module_output_path + + hap_profile = "../config.json" + + certificate_profile = "../openharmony_sx.p7b" +} + +group("unittest") { + testonly = true + deps = [ ":DataShareSilentAccessJsTest" ] +} diff --git a/data_share/test/js/data_share/unittest/src/DataShareSilentAccessJsunit.test.js b/data_share/test/js/data_share/unittest/src/DataShareSilentAccessJsunit.test.js new file mode 100644 index 0000000000000000000000000000000000000000..58b249e43804d8c4e17480abd67a9254436532ce --- /dev/null +++ b/data_share/test/js/data_share/unittest/src/DataShareSilentAccessJsunit.test.js @@ -0,0 +1,120 @@ +/* + * 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. + */ + +import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index' +import ability_featureAbility from '@ohos.ability.featureAbility' +import dataShare from '@ohos.data.dataShare' +var context = ability_featureAbility.getContext() + +const TAG = "[DATA_SHARE_JSKITS_TEST]" +let uri = ("datashare://com.acts.datasharetest/entry/DB00/TBL00?Proxy=true"); + +describe('dataShareTest', function () { + beforeAll(async function () { + console.info(TAG + 'beforeAll') + }) + + beforeEach(function () { + console.info(TAG + 'beforeEach') + }) + + afterEach(async function () { + console.info(TAG + 'afterEach') + }) + + afterAll(async function () { + console.info(TAG + 'afterAll') + }) + + console.log(TAG + "*************Unit Test Begin*************"); + + /** + * @tc.number testSilentAccess0001 + * @tc.name Normal test case of enableSilentProxy, test enable silent proxy; + * @tc.desc Execute enableSilentProxy + * @tc.size MediumTest + * @tc.type Function + * @tc.level Level 2 + */ + it('testSilentAccess0001', 0, async function () { + console.log(TAG + "************* testSilentAccess0001 start *************"); + try { + await dataShare.enableSilentProxy(context, uri); + console.log(TAG + "enableSilentProxy done"); + } catch (e) { + expect().assertFail(); + } + console.log(TAG + "************* testSilentAccess0001 end *************"); + }) + + /** + * @tc.number testSilentAccess0002 + * @tc.name Normal test case of enableSilentProxy, test enable silent proxy, uri is null; + * @tc.desc Execute enableSilentProxy + * @tc.size MediumTest + * @tc.type Function + * @tc.level Level 2 + */ + it('testSilentAccess0002', 0, async function () { + console.log(TAG + "************* testSilentAccess0002 start *************"); + try { + await dataShare.enableSilentProxy(context, ""); + console.log(TAG + "enableSilentProxy done"); + } catch (e) { + expect().assertFail(); + } + console.log(TAG + "************* testSilentAccess0002 end *************"); + }) + + /** + * @tc.number testSilentAccess0003 + * @tc.name Normal test case of disableSilentProxy, test disable silent proxy; + * @tc.desc Execute disableSilentProxy + * @tc.size MediumTest + * @tc.type Function + * @tc.level Level 2 + */ + it('testSilentAccess0003', 0, async function () { + console.log(TAG + "************* testSilentAccess0003 start *************"); + try { + await dataShare.disableSilentProxy(context, uri); + console.log(TAG + "disableSilentProxy done"); + } catch (e) { + expect().assertFail(); + } + console.log(TAG + "************* testSilentAccess0003 end *************"); + }) + + /** + * @tc.number testSilentAccess0004 + * @tc.name Normal test case of disableSilentProxy, test disable silent proxy, uri is null; + * @tc.desc Execute disableSilentProxy + * @tc.size MediumTest + * @tc.type Function + * @tc.level Level 2 + */ + it('testSilentAccess0004', 0, async function () { + console.log(TAG + "************* testSilentAccess0004 start *************"); + try { + await dataShare.disableSilentProxy(context, ""); + console.log(TAG + "disableSilentProxy done"); + } catch (e) { + expect().assertFail(); + } + console.log(TAG + "************* testSilentAccess0004 end *************"); + }) + + console.log(TAG + "*************Unit Test End*************"); +}) \ No newline at end of file diff --git a/data_share/test/native/BUILD.gn b/data_share/test/native/BUILD.gn index 53b5c8d755a7ede8995611619fd80140d3cb8a20..081f07a85bae6506210ea8dfec8dbf15b7fae025 100644 --- a/data_share/test/native/BUILD.gn +++ b/data_share/test/native/BUILD.gn @@ -26,6 +26,7 @@ group("unittest") { ":NativeDataShareTest", ":ProxyDatasTest", ":SlientAccessTest", + ":SlientSwitchTest", "resource/datashare_ext_bundle:datashare_ext", "resource/datashareproxy_bundle/proxydatas_with_permission:proxydatas_with_permission", "resource/errorcode_ext_bundle:errorcode_ext", @@ -116,6 +117,33 @@ ohos_unittest("SlientAccessTest") { ] } +ohos_unittest("SlientSwitchTest") { + module_out_path = "data_share/native_datashare" + + sources = [ "./unittest/mediadatashare_test/src/slientswitch_test.cpp" ] + + deps = [ + "${datashare_innerapi_path}:datashare_consumer", + "${datashare_innerapi_path}/common:datashare_common", + ] + + external_deps = [ + "ability_base:want", + "ability_base:zuri", + "ability_runtime:ability_manager", + "ability_runtime:abilitykit_native", + "access_token:libaccesstoken_sdk", + "access_token:libnativetoken", + "access_token:libtoken_setproc", + "c_utils:utils", + "common_event_service:cesfwk_innerkits", + "hilog:libhilog", + "ipc:ipc_single", + "safwk:system_ability_fwk", + "samgr:samgr_proxy", + ] +} + ohos_unittest("ErrorCodeTest") { module_out_path = "data_share/native_datashare" diff --git a/data_share/test/native/resource/datashare_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts b/data_share/test/native/resource/datashare_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts index 49f4962753b6300993ac8eb7a70f52917215d85b..888502b0302e0b77b49914c078e688fb4c62a0ff 100644 --- a/data_share/test/native/resource/datashare_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts +++ b/data_share/test/native/resource/datashare_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts @@ -30,142 +30,142 @@ let rdbStore; export default class extends Extension { async onCreate(want, callback) { - console.log('[ttt] [DataShareTest] <> DataShareExtAbility onCreate, want:' + want.abilityName); + console.log('[ttt] [DataShareTest] DataShareExtAbility onCreate, want:' + want.abilityName); console.log("[ttt] [DataShareTest] DataShareExtAbility onCreate this.context.databaseDir:" + this.context.databaseDir); // @ts-ignore rdbStore = await rdb.getRdbStore(this.context, { name: DB_NAME, securityLevel: rdb.SecurityLevel.S1 }); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility getRdbStore done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility getRdbStore done'); await rdbStore.executeSql(DDL_TBL_CREATE, []); await rdbStore.executeSql(DDL_TABLE_USER_SQL, []); await rdbStore.executeSql(DDL_TABLE_BOOK_SQL, []); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility executeSql multiple tables done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility executeSql multiple tables done'); let err = {"code":0}; callback(err); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility onCreate end'); + console.log('[ttt] [DataShareTest] DataShareExtAbility onCreate end'); } async insert(uri, value, callback) { - console.info('[ttt] [DataShareTest] <> [insert] enter'); + console.info('[ttt] [DataShareTest] [insert] enter'); if (value == null) { - console.info('[ttt] [DataShareTest] <> [insert] invalid valueBuckets'); + console.info('[ttt] [DataShareTest] [insert] invalid valueBuckets'); return; } - console.info('[ttt] [DataShareTest] <> [insert] getCallingTokenId:' + rpc.IPCSkeleton.getCallingTokenId()); - console.info('[ttt] [DataShareTest] <> [insert] value = ' + value); - console.info('[ttt] [DataShareTest] <> [insert] value = ' + JSON.stringify(value)); + console.info('[ttt] [DataShareTest] [insert] getCallingTokenId:' + rpc.IPCSkeleton.getCallingTokenId()); + console.info('[ttt] [DataShareTest] [insert] value = ' + value); + console.info('[ttt] [DataShareTest] [insert] value = ' + JSON.stringify(value)); await rdbStore.insert(TBL_NAME, value, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [insert] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [insert] callback ret:' + ret); if (callback != undefined) { callback(err, ret); } }); - console.info('[ttt] [DataShareTest] <> [insert] leave'); + console.info('[ttt] [DataShareTest] [insert] leave'); } async update(uri, predicates, value, callback) { - console.info('[ttt] [DataShareTest] <> [update] enter'); + console.info('[ttt] [DataShareTest] [update] enter'); if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [update] invalid predicates'); + console.info('[ttt] [DataShareTest] [update] invalid predicates'); return; } - console.info('[ttt] [DataShareTest] <> [update] values = ' + value); - console.info('[ttt] [DataShareTest] <> [update] values = ' + JSON.stringify(value)); - console.info('[ttt] [DataShareTest] <> [update] predicates = ' + predicates); - console.info('[ttt] [DataShareTest] <> [update] predicates = ' + JSON.stringify(predicates)); + console.info('[ttt] [DataShareTest] [update] values = ' + value); + console.info('[ttt] [DataShareTest] [update] values = ' + JSON.stringify(value)); + console.info('[ttt] [DataShareTest] [update] predicates = ' + predicates); + console.info('[ttt] [DataShareTest] [update] predicates = ' + JSON.stringify(predicates)); try { await rdbStore.update(TBL_NAME,value, predicates, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [update] callback ret:' + ret); - console.info('[ttt] [DataShareTest] <> [update] callback err:' + err); + console.info('[ttt] [DataShareTest] [update] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [update] callback err:' + err); if (callback != undefined) { callback(err, ret); } }); } catch (err) { - console.error('[ttt] [DataShareTest] <> [update] error' + err); + console.error('[ttt] [DataShareTest] [update] error' + err); } - console.info('[ttt] [DataShareTest] <> [update] leave'); + console.info('[ttt] [DataShareTest] [update] leave'); } async delete(uri, predicates, callback) { - console.info('[ttt] [DataShareTest] <> [delete] enter'); + console.info('[ttt] [DataShareTest] [delete] enter'); if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [delete] invalid predicates'); + console.info('[ttt] [DataShareTest] [delete] invalid predicates'); return; } - console.info('[ttt] [DataShareTest] <> [delete] predicates = ' + predicates); - console.info('[ttt] [DataShareTest] <> [delete] predicates = ' + JSON.stringify(predicates)); + console.info('[ttt] [DataShareTest] [delete] predicates = ' + predicates); + console.info('[ttt] [DataShareTest] [delete] predicates = ' + JSON.stringify(predicates)); try { await rdbStore.delete(TBL_NAME,predicates, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [delete] ret:' + ret); + console.info('[ttt] [DataShareTest] [delete] ret:' + ret); if (callback != undefined) { callback(err, ret); } }); } catch (err) { - console.error('[ttt] [DataShareTest] <> [delete] error' + err); + console.error('[ttt] [DataShareTest] [delete] error' + err); } - console.info('[ttt] [DataShareTest] <> [delete] leave'); + console.info('[ttt] [DataShareTest] [delete] leave'); } async query(uri, predicates, columns, callback) { - console.info('[ttt] [DataShareTest] <> [query] enter'); + console.info('[ttt] [DataShareTest] [query] enter'); if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [query] invalid predicates'); + console.info('[ttt] [DataShareTest] [query] invalid predicates'); } - console.info('[ttt] [DataShareTest] <> [query] values = ' + columns); - console.info('[ttt] [DataShareTest] <> [query] values = ' + JSON.stringify(columns)); - console.info('[ttt] [DataShareTest] <> [query] predicates = ' + predicates); - console.info('[ttt] [DataShareTest] <> [query] predicates = ' + JSON.stringify(predicates)); + console.info('[ttt] [DataShareTest] [query] values = ' + columns); + console.info('[ttt] [DataShareTest] [query] values = ' + JSON.stringify(columns)); + console.info('[ttt] [DataShareTest] [query] predicates = ' + predicates); + console.info('[ttt] [DataShareTest] [query] predicates = ' + JSON.stringify(predicates)); try { await rdbStore.query(TBL_NAME, predicates, columns, function (err, resultSet) { - console.info('[ttt] [DataShareTest] <> [query] ret: ' + resultSet); + console.info('[ttt] [DataShareTest] [query] ret: ' + resultSet); if (resultSet != undefined) { - console.info('[ttt] [DataShareTest] <> [query] resultSet.rowCount: ' + resultSet.rowCount); + console.info('[ttt] [DataShareTest] [query] resultSet.rowCount: ' + resultSet.rowCount); } if (callback != undefined) { callback(err, resultSet); } }); } catch (err) { - console.error(`[ttt] [DataShareTest] <> [query] error: code: ${err.code}, message: ${err.message} `); + console.error(`[ttt] [DataShareTest] [query] error: code: ${err.code}, message: ${err.message} `); callback(err, undefined); } - console.info('[ttt] [DataShareTest] <> [query] leave'); + console.info('[ttt] [DataShareTest] [query] leave'); } async batchInsert(uri: string, valueBuckets, callback) { - console.info('[ttt] [DataShareTest] <> [batchInsert] enter'); + console.info('[ttt] [DataShareTest] [batchInsert] enter'); if (valueBuckets == null || valueBuckets.length == undefined) { - console.info('[ttt] [DataShareTest] <> [batchInsert] invalid valueBuckets'); + console.info('[ttt] [DataShareTest] [batchInsert] invalid valueBuckets'); return; } - console.info('[ttt] [DataShareTest] <> [batchInsert] valueBuckets.length:' + valueBuckets.length); + console.info('[ttt] [DataShareTest] [batchInsert] valueBuckets.length:' + valueBuckets.length); let resultNum = valueBuckets.length await rdbStore.batchInsert(TBL_NAME, valueBuckets, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [batchInsert] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [batchInsert] callback ret:' + ret); if (callback != undefined) { callback(err, ret); } }); - console.info('[ttt] [DataShareTest] <> [batchInsert] leave'); + console.info('[ttt] [DataShareTest] [batchInsert] leave'); } async normalizeUri(uri: string, callback) { - console.info('[ttt] [DataShareTest] <> [normalizeUri] enter'); + console.info('[ttt] [DataShareTest] [normalizeUri] enter'); let ret = "normalize+" + uri; let err = {"code":0}; await callback(err, ret); - console.info('[ttt] [DataShareTest] <> [normalizeUri] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [normalizeUri] leave, ret:' + ret); } async denormalizeUri(uri: string, callback) { - console.info('[ttt] [DataShareTest] <> [denormalizeUri] enter'); + console.info('[ttt] [DataShareTest] [denormalizeUri] enter'); let ret = "denormalize+" + uri; let err = {"code":0}; await callback(err, ret); - console.info('[ttt] [DataShareTest] <> [denormalizeUri] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [denormalizeUri] leave, ret:' + ret); } }; \ No newline at end of file diff --git a/data_share/test/native/resource/datashareproxy_bundle/proxydatas_with_permission/entry/src/main/ets/MainAbility/MainAbility.ts b/data_share/test/native/resource/datashareproxy_bundle/proxydatas_with_permission/entry/src/main/ets/MainAbility/MainAbility.ts index 8fcc30deef1c036b86814c0ca28169954a986276..705e5d32047aead4d64cc4ebc1ba0d9bb567300c 100644 --- a/data_share/test/native/resource/datashareproxy_bundle/proxydatas_with_permission/entry/src/main/ets/MainAbility/MainAbility.ts +++ b/data_share/test/native/resource/datashareproxy_bundle/proxydatas_with_permission/entry/src/main/ets/MainAbility/MainAbility.ts @@ -35,13 +35,13 @@ export default class MainAbility extends Ability { console.log("[ttt] [datashareproxyTest] <> MainAbility onCreate") globalThis.abilityWant = want; globalThis.abilityContext = this.context; - console.log('[ttt] [DataShareTest] <> DataShareExtAbility onCreate, want:' + want.abilityName); + console.log('[ttt] [DataShareTest] DataShareExtAbility onCreate, want:' + want.abilityName); console.log("[ttt] [DataShareTest] DataShareExtAbility onCreate this.context.databaseDir:" + this.context.databaseDir); rdbStore = await rdb.getRdbStore(this.context, { name: DB_NAME }, 1); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility getRdbStore done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility getRdbStore done'); await rdbStore.executeSql(DDL_TBL_CREATE, []); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility executeSql done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility executeSql done'); } onDestroy() { diff --git a/data_share/test/native/resource/errorcode_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts b/data_share/test/native/resource/errorcode_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts index c2ea2574fa0aacf23cbd1e1a987d2dd873f169b2..752e909e0f95f21d0b9daa6095ef51ca8b893e1e 100644 --- a/data_share/test/native/resource/errorcode_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts +++ b/data_share/test/native/resource/errorcode_ext_bundle/entry/src/main/ets/DataShareExtAbility/DataShareExtAbility.ts @@ -28,162 +28,162 @@ let rdbStore; export default class extends Extension { async onCreate(want, callback) { - console.log('[ttt] [DataShareTest] <> DataShareExtAbility onCreate, want:' + want.abilityName); + console.log('[ttt] [DataShareTest] DataShareExtAbility onCreate, want:' + want.abilityName); console.log("[ttt] [DataShareTest] DataShareExtAbility onCreate this.context.databaseDir:" + this.context.databaseDir); // @ts-ignore rdbStore = await rdb.getRdbStore(this.context, { name: DB_NAME, securityLevel: rdb.SecurityLevel.S1 }); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility getRdbStore done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility getRdbStore done'); await rdbStore.executeSql(DDL_TBL_CREATE, []); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility executeSql done'); + console.log('[ttt] [DataShareTest] DataShareExtAbility executeSql done'); let err = {"code":0}; callback(err); - console.log('[ttt] [DataShareTest] <> DataShareExtAbility onCreate end'); + console.log('[ttt] [DataShareTest] DataShareExtAbility onCreate end'); } async getFileTypes(uri: string, mimeTypeFilter: string, callback) { - console.info('[ttt] [DataShareTest] <> [getFileTypes] enter'); + console.info('[ttt] [DataShareTest] [getFileTypes] enter'); let ret = new Array("type01", "type00", "type03"); - console.info('[ttt] [DataShareTest] <> [getFileTypes] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [getFileTypes] leave, ret:' + ret); let err = {"code":0}; await callback(err,ret); return ret; } async openFile(uri: string, mode: string, callback) { - console.info('[ttt] [DataShareTest] <> [openFile] enter'); + console.info('[ttt] [DataShareTest] [openFile] enter'); let ret = 12345; let err = {"code":0}; await callback(err,ret); - console.info('[ttt] [DataShareTest] <> [openFile] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [openFile] leave, ret:' + ret); } async insert(uri, value, callback) { - console.info('[ttt] [DataShareTest] <> [insert] enter'); + console.info('[ttt] [DataShareTest] [insert] enter'); if (value == null) { - console.info('[ttt] [DataShareTest] <> [insert] invalid valueBuckets'); + console.info('[ttt] [DataShareTest] [insert] invalid valueBuckets'); return; } - console.info('[ttt] [DataShareTest] <> [insert] getCallingTokenId:' + rpc.IPCSkeleton.getCallingTokenId()); - console.info('[ttt] [DataShareTest] <> [insert] value = ' + value); - console.info('[ttt] [DataShareTest] <> [insert] value = ' + JSON.stringify(value)); + console.info('[ttt] [DataShareTest] [insert] getCallingTokenId:' + rpc.IPCSkeleton.getCallingTokenId()); + console.info('[ttt] [DataShareTest] [insert] value = ' + value); + console.info('[ttt] [DataShareTest] [insert] value = ' + JSON.stringify(value)); await rdbStore.insert(TBL_NAME, value, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [insert] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [insert] callback ret:' + ret); if (callback != undefined) { callback(err, ret); } }); - console.info('[ttt] [DataShareTest] <> [insert] leave'); + console.info('[ttt] [DataShareTest] [insert] leave'); } async update(uri, predicates, value, callback) { - console.info('[ttt] [DataShareTest] <> [update] enter'); + console.info('[ttt] [DataShareTest] [update] enter'); if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [update] invalid predicates'); + console.info('[ttt] [DataShareTest] [update] invalid predicates'); return; } - console.info('[ttt] [DataShareTest] <> [update] values = ' + value); - console.info('[ttt] [DataShareTest] <> [update] values = ' + JSON.stringify(value)); - console.info('[ttt] [DataShareTest] <> [update] predicates = ' + predicates); - console.info('[ttt] [DataShareTest] <> [update] predicates = ' + JSON.stringify(predicates)); + console.info('[ttt] [DataShareTest] [update] values = ' + value); + console.info('[ttt] [DataShareTest] [update] values = ' + JSON.stringify(value)); + console.info('[ttt] [DataShareTest] [update] predicates = ' + predicates); + console.info('[ttt] [DataShareTest] [update] predicates = ' + JSON.stringify(predicates)); try { await rdbStore.update(TBL_NAME,value, predicates, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [update] callback ret:' + ret); - console.info('[ttt] [DataShareTest] <> [update] callback err:' + err); + console.info('[ttt] [DataShareTest] [update] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [update] callback err:' + err); if (callback != undefined) { callback(err, ret); } }); } catch (err) { - console.error('[ttt] [DataShareTest] <> [update] error' + err); + console.error('[ttt] [DataShareTest] [update] error' + err); } - console.info('[ttt] [DataShareTest] <> [update] leave'); + console.info('[ttt] [DataShareTest] [update] leave'); } async delete(uri, predicates, callback) { - console.info('[ttt] [DataShareTest] <> [delete] enter'); + console.info('[ttt] [DataShareTest] [delete] enter'); if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [delete] invalid predicates'); + console.info('[ttt] [DataShareTest] [delete] invalid predicates'); return; } - console.info('[ttt] [DataShareTest] <> [delete] predicates = ' + predicates); - console.info('[ttt] [DataShareTest] <> [delete] predicates = ' + JSON.stringify(predicates)); + console.info('[ttt] [DataShareTest] [delete] predicates = ' + predicates); + console.info('[ttt] [DataShareTest] [delete] predicates = ' + JSON.stringify(predicates)); try { await rdbStore.delete(TBL_NAME,predicates, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [delete] ret:' + ret); + console.info('[ttt] [DataShareTest] [delete] ret:' + ret); if (callback != undefined) { callback(err, ret); } }); } catch (err) { - console.error('[ttt] [DataShareTest] <> [delete] error' + err); + console.error('[ttt] [DataShareTest] [delete] error' + err); } - console.info('[ttt] [DataShareTest] <> [delete] leave'); + console.info('[ttt] [DataShareTest] [delete] leave'); } async query(uri, predicates, columns, callback) { if (predicates == null || predicates == undefined) { - console.info('[ttt] [DataShareTest] <> [query] invalid predicates'); + console.info('[ttt] [DataShareTest] [query] invalid predicates'); } try { - console.info('[ttt] [DataShareTest] <> [query] for errorcode test, sissing parameter: TBL_NAME '); + console.info('[ttt] [DataShareTest] [query] for errorcode test, sissing parameter: TBL_NAME '); await rdbStore.query(columns, function (err, resultSet) { - console.info('[ttt] [DataShareTest] <> [query] ret: ' + resultSet); + console.info('[ttt] [DataShareTest] [query] ret: ' + resultSet); if (resultSet != undefined) { - console.info('[ttt] [DataShareTest] <> [query] resultSet.rowCount: ' + resultSet.rowCount); + console.info('[ttt] [DataShareTest] [query] resultSet.rowCount: ' + resultSet.rowCount); } if (callback != undefined) { callback(err, resultSet); } }); } catch (err) { - console.error(`[ttt] [DataShareTest] <> [query] error: code: ${err.code}, message: ${err.message} `); + console.error(`[ttt] [DataShareTest] [query] error: code: ${err.code}, message: ${err.message} `); callback(err, undefined); } - console.info('[ttt] [DataShareTest] <> [query] leave'); + console.info('[ttt] [DataShareTest] [query] leave'); } async getType(uri: string,callback) { - console.info('[ttt] [DataShareTest] <> [getType] enter'); + console.info('[ttt] [DataShareTest] [getType] enter'); let ret = "image"; - console.info('[ttt] [DataShareTest] <> [getType] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [getType] leave, ret:' + ret); let err = {"code":0}; await callback(err,ret); return ret; } async batchInsert(uri: string, valueBuckets, callback) { - console.info('[ttt] [DataShareTest] <> [batchInsert] enter'); + console.info('[ttt] [DataShareTest] [batchInsert] enter'); if (valueBuckets == null || valueBuckets.length == undefined) { - console.info('[ttt] [DataShareTest] <> [batchInsert] invalid valueBuckets'); + console.info('[ttt] [DataShareTest] [batchInsert] invalid valueBuckets'); return; } - console.info('[ttt] [DataShareTest] <> [batchInsert] valueBuckets.length:' + valueBuckets.length); + console.info('[ttt] [DataShareTest] [batchInsert] valueBuckets.length:' + valueBuckets.length); let resultNum = valueBuckets.length await rdbStore.batchinsert(TBL_NAME, valueBuckets, function (err, ret) { - console.info('[ttt] [DataShareTest] <> [batchInsert] callback ret:' + ret); + console.info('[ttt] [DataShareTest] [batchInsert] callback ret:' + ret); if (callback != undefined) { callback(err, ret); } }); - console.info('[ttt] [DataShareTest] <> [batchInsert] leave'); + console.info('[ttt] [DataShareTest] [batchInsert] leave'); } async normalizeUri(uri: string, callback) { - console.info('[ttt] [DataShareTest] <> [normalizeUri] enter'); + console.info('[ttt] [DataShareTest] [normalizeUri] enter'); let ret = "normalize+" + uri; let err = {"code":0}; await callback(err, ret); - console.info('[ttt] [DataShareTest] <> [normalizeUri] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [normalizeUri] leave, ret:' + ret); } async denormalizeUri(uri: string, callback) { - console.info('[ttt] [DataShareTest] <> [denormalizeUri] enter'); + console.info('[ttt] [DataShareTest] [denormalizeUri] enter'); let ret = "denormalize+" + uri; let err = {"code":0}; await callback(err, ret); - console.info('[ttt] [DataShareTest] <> [denormalizeUri] leave, ret:' + ret); + console.info('[ttt] [DataShareTest] [denormalizeUri] leave, ret:' + ret); } }; \ No newline at end of file diff --git a/data_share/test/native/resource/ohos_test/ohos_test.xml b/data_share/test/native/resource/ohos_test/ohos_test.xml index 5ea2d8c636a08b85d3198cf66286e1db7402e35b..f2ee66d503d4349caabb7fd4b4b161277f490f24 100644 --- a/data_share/test/native/resource/ohos_test/ohos_test.xml +++ b/data_share/test/native/resource/ohos_test/ohos_test.xml @@ -42,6 +42,15 @@