From 1ad3ddd28dd9756f8a7b97eb7675b38005fc2923 Mon Sep 17 00:00:00 2001 From: gaojianhao1 Date: Wed, 26 Jun 2024 11:23:02 +0800 Subject: [PATCH 01/50] Add BFCache interface. Signed-off-by: gaojianhao1 --- .../kits/cj/include/webview_controller_impl.h | 2 + .../kits/cj/src/webview_controller_impl.cpp | 10 ++ .../napi_webview_controller.cpp | 107 ++++++++++++++++++ .../napi_webview_controller.h | 14 +++ .../webviewcontroller/webview_controller.cpp | 10 ++ .../webviewcontroller/webview_controller.h | 2 + ohos_interface/include/ohos_nweb/nweb.h | 6 + .../include/ohos_nweb/nweb_engine.h | 2 + .../bridge/webcore/ark_web_engine_impl.cpp | 5 + .../bridge/webcore/ark_web_engine_impl.h | 2 + .../bridge/webcore/ark_web_nweb_impl.cpp | 5 + .../bridge/webcore/ark_web_nweb_impl.h | 6 + .../bridge/webview/ark_web_engine_wrapper.cpp | 4 + .../bridge/webview/ark_web_engine_wrapper.h | 2 + .../bridge/webview/ark_web_nweb_wrapper.cpp | 5 + .../bridge/webview/ark_web_nweb_wrapper.h | 6 + .../ohos_nweb/include/ark_web_engine.h | 3 + .../ohos_nweb/include/ark_web_nweb.h | 6 + ohos_nweb/include/nweb_helper.h | 2 + ohos_nweb/src/nweb_helper.cpp | 10 ++ 20 files changed, 209 insertions(+) diff --git a/interfaces/kits/cj/include/webview_controller_impl.h b/interfaces/kits/cj/include/webview_controller_impl.h index ddcb4a51..db30340e 100644 --- a/interfaces/kits/cj/include/webview_controller_impl.h +++ b/interfaces/kits/cj/include/webview_controller_impl.h @@ -153,6 +153,8 @@ namespace OHOS::Webview { void Stop(); + void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive); + public: static std::string customeSchemeCmdLine_; static bool existNweb_; diff --git a/interfaces/kits/cj/src/webview_controller_impl.cpp b/interfaces/kits/cj/src/webview_controller_impl.cpp index 03b8e08a..34e53145 100644 --- a/interfaces/kits/cj/src/webview_controller_impl.cpp +++ b/interfaces/kits/cj/src/webview_controller_impl.cpp @@ -609,4 +609,14 @@ namespace OHOS::Webview { } return; } + + void WebviewControllerImpl::SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) + { + auto nweb_ptr = NWeb::NWebHelper::Instance().GetNWeb(nwebId_); + if (!nweb_ptr) { + WEBVIEWLOGE("WebviewControllerImpl::void SetBackForwardCacheOptions nweb_ptr is null"); + return; + } + nweb_ptr->SetBackForwardCacheOptions(size, timeToLive); + } } \ No newline at end of file diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp index 38f761bf..9a92099b 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp @@ -490,6 +490,8 @@ napi_value NapiWebviewController::Init(napi_env env, napi_value exports) DECLARE_NAPI_FUNCTION("webPageSnapshot", NapiWebviewController::WebPageSnapshot), DECLARE_NAPI_FUNCTION("setPathAllowingUniversalAccess", NapiWebviewController::SetPathAllowingUniversalAccess), + DECLARE_NAPI_STATIC_FUNCTION("enableBackForwardCache", NapiWebviewController::EnableBackForwardCache), + DECLARE_NAPI_FUNCTION("setBackForwardCacheOptions", NapiWebviewController::SetBackForwardCacheOptions), }; napi_value constructor = nullptr; napi_define_class(env, WEBVIEW_CONTROLLER_CLASS_NAME.c_str(), WEBVIEW_CONTROLLER_CLASS_NAME.length(), @@ -5439,6 +5441,111 @@ napi_value NapiWebviewController::PrecompileJavaScript(napi_env env, napi_callba return promise; } +bool ParseBackForwardCacheSupportedFeature(napi_env env, napi_value obj, BackForwardCacheSupportedFeature& feature) +{ + std::map> featuresBooleanProperties = { + {"nativeEmbed", [](const BackForwardCacheSupportedFeature& feature) { return feature.nativeEmbed; }}, + {"mediaIntercept", [](const BackForwardCacheSupportedFeature& feature) { return feature.mediaIntercept; }}, + }; + + for (const auto& property : featuresBooleanProperties) { + napi_value propertyObj = nullptr; + napi_get_named_property(env, obj, property.first.c_str(), &propertyObj); + bool featureProperty = property.second(feature); + if (!NapiParseUtils::ParseBoolean(env, propertyObj, featureProperty)) { + return false; + } + } + + return true; +} + +napi_value NapiWebviewController::EnableBackForwardCache(napi_env env, napi_callback_info info) +{ + napi_value thisVar = nullptr; + napi_value result = nullptr; + size_t argc = INTEGER_ONE; + napi_value argv[INTEGER_ONE] = { 0 }; + napi_get_undefined(env, &result); + napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr); + if (argc != INTEGER_ONE) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_NUMBERS_ERROR_ONE, "one")); + return result; + } + + napi_value obj = argv[0]; + BackForwardCacheSupportedFeature feature; + if (!ParseBackForwardCacheSupportedFeature(env, obj, feature)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + "BusinessError: 401. Parameter error. Wrong param of features."); + return result; + } + + WVLOG_I("The value of supported ativeEmbed is: %{public}d", feature.nativeEmbed); + WVLOG_I("The value of supported mediaIntercept is: %{public}d", feature.mediaIntercept); + + NWebHelper::Instance().EnableBackForwardCache(feature.nativeEmbed, feature.mediaIntercept); + NAPI_CALL(env, napi_get_undefined(env, &result)); + return result; +} + +bool ParseBackForwardCacheOptions(napi_env env, napi_value obj, BackForwardCacheOptions& option) +{ + std::map> optionsBooleanProperties = { + {"size", [](const BackForwardCacheOptions& option) { return option.size; }}, + {"timeToLive", [](const BackForwardCacheOptions& option) { return option.timeToLive; }}, + }; + + for (const auto& property : optionsBooleanProperties) { + napi_value propertyObj = nullptr; + napi_get_named_property(env, obj, property.first.c_str(), &propertyObj); + bool optionProperty = property.second(option); + if (!NapiParseUtils::ParseBoolean(env, propertyObj, optionProperty)) { + return false; + } + } + + return true; +} + +napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_callback_info info) +{ + napi_value thisVar = nullptr; + napi_value result = nullptr; + size_t argc = INTEGER_ONE; + napi_value argv[INTEGER_ONE] = { 0 }; + napi_get_undefined(env, &result); + napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr); + if (argc != INTEGER_ONE) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_NUMBERS_ERROR_ONE, "one")); + return result; + } + + WebviewController* webviewController = GetWebviewController(env, info); + if (!webviewController) { + WVLOG_E("InjectOfflineResource: init webview controller error."); + BusinessError::ThrowErrorByErrcode(env, INIT_ERROR); + return result; + } + + napi_value obj = argv[0]; + BackForwardCacheOptions option; + if (!ParseBackForwardCacheOptions(env, obj, option)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + "BusinessError: 401. Parameter error. Wrong param of options."); + return result; + } + + WVLOG_I("The value of backforward cache option size is: %{public}d", option.size); + WVLOG_I("The value of backforward cache option timeToLive is: %{public}d", option.timeToLive); + + webviewController->SetBackForwardCacheOptions(option.size, option.timeToLive); + NAPI_CALL(env, napi_get_undefined(env, &result)); + return result; +} + napi_value NapiWebviewController::WarmupServiceWorker(napi_env env, napi_callback_info info) { napi_value thisVar = nullptr; diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h index bab044a4..33962ca3 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h @@ -61,6 +61,16 @@ struct OfflineResourceValue { napi_value type; }; +struct BackForwardCacheSupportedFeature { + bool nativeEmbed = true; + bool mediaIntercept = true; +}; + +struct BackForwardCacheOptions { + int32_t size = 1; + int32_t timeToLive = 600; +}; + class NapiWebviewController { public: NapiWebviewController() {} @@ -348,6 +358,10 @@ private: static napi_value SetPathAllowingUniversalAccess(napi_env env, napi_callback_info info); + static napi_value EnableBackForwardCache(napi_env env, napi_callback_info info); + + static napi_value SetBackForwardCacheOptions(napi_env env, napi_callback_info info); + static int32_t maxFdNum_; static std::atomic usedFd_; }; diff --git a/interfaces/kits/napi/webviewcontroller/webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/webview_controller.cpp index 354fa4bf..52a53a71 100644 --- a/interfaces/kits/napi/webviewcontroller/webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/webview_controller.cpp @@ -1942,5 +1942,15 @@ void WebviewController::SetPathAllowingUniversalAccess( } nweb_ptr->SetPathAllowingUniversalAccess(pathList, moduleName_, errorPath); } + +void WebviewController::SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) +{ + auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); + if (!nweb_ptr) { + return; + } + + nweb_ptr->SetBackForwardCacheOptions(size, timeToLive); +} } // namespace NWeb } // namespace OHOS diff --git a/interfaces/kits/napi/webviewcontroller/webview_controller.h b/interfaces/kits/napi/webviewcontroller/webview_controller.h index e7623fc3..743e89ff 100644 --- a/interfaces/kits/napi/webviewcontroller/webview_controller.h +++ b/interfaces/kits/napi/webviewcontroller/webview_controller.h @@ -372,6 +372,8 @@ public: void SetPathAllowingUniversalAccess(const std::vector& pathList, std::string& errorPath); + void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive); + private: int ConverToWebHitTestType(int hitType); diff --git a/ohos_interface/include/ohos_nweb/nweb.h b/ohos_interface/include/ohos_nweb/nweb.h index 18bdc317..feac8f12 100644 --- a/ohos_interface/include/ohos_nweb/nweb.h +++ b/ohos_interface/include/ohos_nweb/nweb.h @@ -1356,6 +1356,12 @@ public: */ virtual void PerformAction(int64_t accessibilityId, uint32_t action, const std::map& actionArguments) {} + + /** + * @brief Set backforward cache options. + */ + /*--ark web()--*/ + virtual void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) { return; } }; } // namespace OHOS::NWeb diff --git a/ohos_interface/include/ohos_nweb/nweb_engine.h b/ohos_interface/include/ohos_nweb/nweb_engine.h index 41853edc..351e5224 100644 --- a/ohos_interface/include/ohos_nweb/nweb_engine.h +++ b/ohos_interface/include/ohos_nweb/nweb_engine.h @@ -82,6 +82,8 @@ public: virtual std::shared_ptr GetAdsBlockManager() { return nullptr; }; + + virtual void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) {}; }; } // namespace OHOS::NWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp index 5b55bcb9..d94b0c6b 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp @@ -212,4 +212,9 @@ ArkWebRefPtr ArkWebEngineImpl::GetAdsBlockManager() } return new ArkWebAdsBlockManagerImpl(nweb_adsBlock_manager); } + +void ArkWebEngineImpl::EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) +{ + nweb_engine_->EnableBackForwardCache(enableNativeEmbed, enableMediaIntercept); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h index 28236ab7..63243ef5 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h @@ -79,6 +79,8 @@ public: ArkWebRefPtr GetAdsBlockManager() override; + void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) override; + private: std::shared_ptr nweb_engine_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp index cbca90c1..86cd96a8 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp @@ -1055,4 +1055,9 @@ void ArkWebNWebImpl::PerformAction(int64_t accessibility_id, uint32_t action, { nweb_nweb_->PerformAction(accessibility_id, action, ArkWebStringMapStructToClass(actionArguments)); } + +void ArkWebNWebImpl::SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) +{ + nweb_nweb_->SetBackForwardCacheOptions(size, timeToLive); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h index a464c2d0..625478b7 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h @@ -1189,6 +1189,12 @@ public: /*--ark web()--*/ void PerformAction(int64_t accessibility_id, uint32_t action, const ArkWebStringMap& actionArguments) override; + + /** + * @brief set backforward cache options. + */ + /*--ark web()--*/ + void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) override; private: std::shared_ptr nweb_nweb_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp index c08317fa..b384e5bf 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp @@ -240,4 +240,8 @@ ArkWebEngineWrapper::GetAdsBlockManager() { return std::make_shared(ark_web_adsblock_manager); } + +void ArkWebEngineWrapper::EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) { + ark_web_engine_->EnableBackForwardCache(enableNativeEmbed, enableMediaIntercept); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h index 6400bfcd..865d41b8 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h @@ -76,6 +76,8 @@ public: void EnableWholeWebPageDrawing() override; std::shared_ptr GetAdsBlockManager() override; + + void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) override; private: ArkWebRefPtr ark_web_engine_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp index 8c12aaf1..77dc35c8 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp @@ -1233,4 +1233,9 @@ void ArkWebNWebWrapper::PerformAction(int64_t accessibility_id, uint32_t action, ArkWebStringMapStructRelease(stArguments); } + +void ArkWebNWebWrapper::SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) +{ + ark_web_nweb_->SetBackForwardCacheOptions(size, timeToLive); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h index 23940f2d..86da31a1 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h @@ -1199,6 +1199,12 @@ public: /*--ark web()--*/ void PerformAction(int64_t accessibilityId, uint32_t action, const std::map& actionArguments) override; + + /** + * @brief set backforward cache options. + */ + /*--ark web()--*/ + void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) override; private: ArkWebRefPtr ark_web_nweb_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h index ab6194dc..30021b2c 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h +++ b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h @@ -108,6 +108,9 @@ public: /*--ark web()--*/ virtual ArkWebRefPtr GetAdsBlockManager() = 0; + + /*--ark web()--*/ + virtual void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) = 0; }; } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h index 480beb61..5fde82e3 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h +++ b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h @@ -1351,6 +1351,12 @@ public: /*--ark web()--*/ virtual void PerformAction(int64_t accessibilityId, uint32_t action, const ArkWebStringMap& actionArguments) = 0; + + /** + * @brief set backforward cache options. + */ + /*--ark web()--*/ + virtual void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) = 0; }; } // namespace OHOS::ArkWeb diff --git a/ohos_nweb/include/nweb_helper.h b/ohos_nweb/include/nweb_helper.h index a6fa18a6..bc953614 100644 --- a/ohos_nweb/include/nweb_helper.h +++ b/ohos_nweb/include/nweb_helper.h @@ -86,6 +86,8 @@ public: void EnableWholeWebPageDrawing(); std::shared_ptr GetAdsBlockManager(); + void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept); + private: NWebHelper() = default; bool LoadLib(bool from_ark); diff --git a/ohos_nweb/src/nweb_helper.cpp b/ohos_nweb/src/nweb_helper.cpp index d29a0d00..3a546cbd 100644 --- a/ohos_nweb/src/nweb_helper.cpp +++ b/ohos_nweb/src/nweb_helper.cpp @@ -1092,6 +1092,16 @@ void NWebHelper::ClearHostIP(const std::string& hostName) nwebEngine_->ClearHostIP(hostName); } +void NWebHelper::EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) +{ + if (nwebEngine_ == nullptr) { + WVLOG_E("nweb engine is nullptr"); + return; + } + + nwebEngine_->EnableBackForwardCache(enableNativeEmbed, enableMediaIntercept); +} + void NWebHelper::EnableWholeWebPageDrawing() { if (nwebEngine_ == nullptr) { -- Gitee From e076f9b3dbf6bc33d973a7a19b1b0409bdbd9e10 Mon Sep 17 00:00:00 2001 From: gaojianhao1 Date: Sat, 29 Jun 2024 16:54:35 +0800 Subject: [PATCH 02/50] Add BFCache interface. Signed-off-by: gaojianhao1 --- .../webviewcontroller/back_forward_cache_options.h | 4 ++-- .../webviewcontroller/napi_webview_controller.cpp | 12 ++++++------ .../napi/webviewcontroller/napi_webview_controller.h | 10 ---------- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h index 6c8cf081..16ef7d2a 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h @@ -38,7 +38,7 @@ private: napi_env env_; int32_t size_; int32_t timeToLive_; -} +}; class BackForwardCacheSupportFeatures { public: @@ -53,7 +53,7 @@ private: napi_env env_; bool nativeEmbed_; bool mediaIntercept_; -} +}; } } diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp index 0a39d7c3..890a084e 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp @@ -5488,10 +5488,10 @@ napi_value NapiWebviewController::EnableBackForwardCache(napi_env env, napi_call napi_unwrap(env, obj, (void**)&features); napi_create_reference(env, obj, 1, &features->delegate_); - WVLOG_I("The value of supported ativeEmbed is: %{public}d", feature.IsEnableNativeEmbed()); - WVLOG_I("The value of supported mediaIntercept is: %{public}d", feature.IsEnableMediaIntercept()); + WVLOG_I("The value of supported ativeEmbed is: %{public}d", features->IsEnableNativeEmbed()); + WVLOG_I("The value of supported mediaIntercept is: %{public}d", features->IsEnableMediaIntercept()); - NWebHelper::Instance().EnableBackForwardCache(feature.IsEnableNativeEmbed(), feature.IsEnableMediaIntercept()); + NWebHelper::Instance().EnableBackForwardCache(feature->IsEnableNativeEmbed(), feature->IsEnableMediaIntercept()); NAPI_CALL(env, napi_get_undefined(env, &result)); return result; } @@ -5522,10 +5522,10 @@ napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_ napi_unwrap(env, obj, (void**)&options); napi_create_reference(env, obj, 1, &options->delegate_); - WVLOG_I("The value of backforward cache option size is: %{public}d", options.GetSize()); - WVLOG_I("The value of backforward cache option timeToLive is: %{public}d", options.GetTimeToLive()); + WVLOG_I("The value of backforward cache option size is: %{public}d", options->GetSize()); + WVLOG_I("The value of backforward cache option timeToLive is: %{public}d", options->GetTimeToLive()); - webviewController->SetBackForwardCacheOptions(option.size, option.timeToLive); + webviewController->SetBackForwardCacheOptions(options->GetSize(), options->GetTimeToLive()); NAPI_CALL(env, napi_get_undefined(env, &result)); return result; } diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h index 33962ca3..5877ee94 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h @@ -61,16 +61,6 @@ struct OfflineResourceValue { napi_value type; }; -struct BackForwardCacheSupportedFeature { - bool nativeEmbed = true; - bool mediaIntercept = true; -}; - -struct BackForwardCacheOptions { - int32_t size = 1; - int32_t timeToLive = 600; -}; - class NapiWebviewController { public: NapiWebviewController() {} -- Gitee From 3ebea90ef3b5291e91e76e009f57680d34dfa063 Mon Sep 17 00:00:00 2001 From: gaojianhao1 Date: Sat, 29 Jun 2024 17:56:42 +0800 Subject: [PATCH 03/50] Add BFCache interface. Signed-off-by: gaojianhao1 --- interfaces/kits/napi/BUILD.gn | 2 + .../back_forward_cache_options.cpp | 27 +--- .../back_forward_cache_options.h | 6 +- .../napi_back_forward_cache_options.cpp | 130 ++++++++++++++++++ .../napi_back_forward_cache_options.h | 52 +++++++ .../napi_webview_controller.cpp | 2 +- 6 files changed, 193 insertions(+), 26 deletions(-) create mode 100644 interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp create mode 100644 interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h diff --git a/interfaces/kits/napi/BUILD.gn b/interfaces/kits/napi/BUILD.gn index 38175046..964b8e49 100644 --- a/interfaces/kits/napi/BUILD.gn +++ b/interfaces/kits/napi/BUILD.gn @@ -53,6 +53,8 @@ ohos_shared_library("webview_napi") { "webstorage/napi_web_storage.cpp", "webviewcontroller/back_forward_cache_options.cpp", "webviewcontroller/back_forward_cache_options.h", + "webviewcontroller/napi_back_forward_cache_options.cpp", + "webviewcontroller/napi_back_forward_cache_options.h", "webviewcontroller/napi_native_media_player.cpp", "webviewcontroller/napi_native_media_player.h", "webviewcontroller/napi_web_download_delegate.cpp", diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp index e4167ce1..f3fe444f 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp @@ -17,22 +17,14 @@ #include -#include "back_forward_cache_options.h" #include "napi_parse_utils.h" #include "nweb_log.h" #include "business_error.h" #include "web_errors.h" namespace OHOS::NWeb { -namespace { -BackForwardCacheOptions::BackForwardCacheOptions(napi_env env) - : env_(env) -{ - WVLOG_D("Created a BackForwardCacheOptions class."); -} - -BackForwardCacheOptions::BackForwardCacheOptions(napi_env env, int32_t size, int32_t timeToLive) - : env_(env), size_(size), timeToLive_(timeToLive) +BackForwardCacheOptions::BackForwardCacheOptions(int32_t size, int32_t timeToLive) + : size_(size), timeToLive_(timeToLive) { WVLOG_D("Created a BackForwardCacheOptions class. Value size: %{public}d timeToLive: %{public}d.", size_, timeToLive_); } @@ -47,27 +39,20 @@ int32_t BackForwardCacheOptions::GetTimeToLive() return timeToLive_; } -BackForwardCacheSupportFeatures::BackForwardCacheSupportedFeature(napi_env env) - : env_(env) -{ - WVLOG_D("Created a BackForwardCacheSupportedFeature class."); -} - -BackForwardCacheSupportFeatures::BackForwardCacheSupportFeatures(napi_env env, bool nativeEmbed, bool mediaIntercept) - : env_(env), nativeEmbed_(nativeEmbed), mediaIntercept_(mediaIntercept) +BackForwardCacheSupportFeatures::BackForwardCacheSupportFeatures(bool nativeEmbed, bool mediaIntercept) + : nativeEmbed_(nativeEmbed), mediaIntercept_(mediaIntercept) { WVLOG_D("Created a BackForwardCacheSupportFeatures class. Value nativeEmbed: %{public}d mediaIntercept: %{public}d.", nativeEmbed_, mediaIntercept_); } -bool BackForwardCacheSupportedFeature::IsEnableNativeEmbed() +bool BackForwardCacheSupportFeatures::IsEnableNativeEmbed() { return nativeEmbed_; } -bool BackForwardCacheSupportedFeature::IsEnableMediaIntercept() +bool BackForwardCacheSupportFeatures::IsEnableMediaIntercept() { return mediaIntercept_; } -} } \ No newline at end of file diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h index 16ef7d2a..ed28ed1b 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h @@ -27,7 +27,7 @@ namespace OHOS { namespace NWeb { class BackForwardCacheOptions { public: - explicit BackForwardCacheOptions(napi_env env); + BackForwardCacheOptions(napi_env env); BackForwardCacheOptions(napi_env env, int32_t size, int32_t timeToLive); int32_t GetSize(); int32_t GetTimeToLive(); @@ -35,14 +35,13 @@ public: napi_ref delegate_ = nullptr; private: - napi_env env_; int32_t size_; int32_t timeToLive_; }; class BackForwardCacheSupportFeatures { public: - explicit BackForwardCacheSupportFeatures(napi_env env); + BackForwardCacheSupportFeatures(napi_env env); BackForwardCacheSupportFeatures(napi_env env, bool nativeEmbed, bool mediaIntercept); bool IsEnableNativeEmbed(); bool IsEnableMediaIntercept(); @@ -50,7 +49,6 @@ public: napi_ref delegate_ = nullptr; private: - napi_env env_; bool nativeEmbed_; bool mediaIntercept_; }; diff --git a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp new file mode 100644 index 00000000..e4687d61 --- /dev/null +++ b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "napi_back_forward_cache_options.h" + +#include +#include +#include +#include +#include + +#include "business_error.h" +#include "nweb_log.h" +#include "napi_parse_utils.h" +#include "web_errors.h" + +using namespace OHOS::NWebError; + +namespace OHOS { +namespace NWeb { +napi_value NapiBackForwardCacheOptions::JS_Constructor(napi_env env, napi_callback_info info) +{ + WVLOG_I("NapiBackForwardCacheOptions::JS_Constructor is called"); + napi_value thisVar = nullptr; + void *data = nullptr; + napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, &data); + + BackForwardCacheOptions *options = new BackForwardCacheOptions(env); + + napi_wrap( + env, thisVar, options, + [](napi_env /* env */, void *data, void * /* hint */) { + BackForwardCacheOptions *options = (BackForwardCacheOptions *)data; + delete options; + }, + nullptr, nullptr); + + return thisVar; +} + +napi_value NapiBackForwardCacheSupportFeatures::JS_Constructor(napi_env env, napi_callback_info info) +{ + WVLOG_I("NapiBackForwardCacheSupportFeatures::JS_Constructor is called"); + napi_value thisVar = nullptr; + void *data = nullptr; + napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, &data); + + BackForwardCacheSupportFeatures *features = new BackForwardCacheSupportFeatures(env); + + napi_wrap( + env, thisVar, features, + [](napi_env /* env */, void *data, void * /* hint */) { + BackForwardCacheSupportFeatures *features = (BackForwardCacheSupportFeatures *)data; + delete features; + }, + nullptr, nullptr); + + return thisVar; +} + +napi_value NapiBackForwardCacheOptions::JS_GetSize(napi_env env, napi_callback_info info) +{ + WVLOG_D("NapiBackForwardCacheOptions::JS_GetSize"); + return nullptr; +} + +napi_value NapiBackForwardCacheOptions::JS_GetTimeToLive(napi_env env, napi_callback_info info) +{ + WVLOG_D("NapiBackForwardCacheOptions::JS_GetTimeToLive"); + return nullptr; +} + +napi_value NapiBackForwardCacheSupportFeatures::JS_IsEnableNativeEmbed(napi_env env, napi_callback_info info) +{ + WVLOG_D("NapiBackForwardCacheSupportFeatures::JS_IsEnableNativeEmbed"); + return nullptr; +} + +napi_value NapiBackForwardCacheSupportFeatures::JS_IsEnableMediaIntercept(napi_env env, napi_callback_info info) +{ + WVLOG_D("NapiBackForwardCacheSupportFeatures::JS_IsEnableMediaIntercept"); + return nullptr; +} + +napi_value NapiBackForwardCacheOptions::Init(napi_env env, napi_value exports) +{ + WVLOG_D("NapiBackForwardCacheOptions::Init"); + napi_property_descriptor properties[] = { + DECLARE_NAPI_FUNCTION("getSize", JS_GetSize), + DECLARE_NAPI_FUNCTION("getTimeToLive", JS_GetTimeToLive), + }; + napi_value backForwardCacheOptions = nullptr; + napi_define_class(env, BACK_FORWARD_CACHE_OPTIONS.c_str(), BACK_FORWARD_CACHE_OPTIONS.length(), + JS_Constructor, nullptr, + sizeof(properties) / sizeof(properties[0]), properties, &backForwardCacheOption); + napi_set_named_property(env, exports, BACK_FORWARD_CACHE_OPTIONS.c_str(), + backForwardCacheOption); + return exports; +} + +napi_value NapiBackForwardCacheSupportFeatures::Init(napi_env env, napi_value exports) +{ + WVLOG_D("NapiBackForwardCacheSupportFeatures::Init"); + napi_property_descriptor properties[] = { + DECLARE_NAPI_FUNCTION("isEnableNativeEmbed", JS_IsEnableNativeEmbed), + DECLARE_NAPI_FUNCTION("isEnableMediaIntercept", JS_IsEnableMediaIntercept), + }; + napi_value backForwardCacheSupportFeature = nullptr; + napi_define_class(env, BACK_FORWARD_CACHE_SUPPORT_FEATURES.c_str(), BACK_FORWARD_CACHE_SUPPORT_FEATURES.length(), + JS_Constructor, nullptr, + sizeof(properties) / sizeof(properties[0]), properties, &backForwardCacheSupportFeature); + napi_set_named_property(env, exports, BACK_FORWARD_CACHE_SUPPORT_FEATURES.c_str(), + backForwardCacheSupportFeature); + return exports; +} + +} +} \ No newline at end of file diff --git a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h new file mode 100644 index 00000000..1d0c8f71 --- /dev/null +++ b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NWEB_NAPI_BACK_FORWARD_CACHE_OPTIONS_H +#define NWEB_NAPI_BACK_FORWARD_CACHE_OPTIONS_H + +#include "napi/native_api.h" +#include "napi/native_common.h" +#include "napi/native_node_api.h" + +namespace OHOS { +namespace NWeb { + +const std::string BACK_FORWARD_CACHE_OPTIONS = "BackForwardCacheOptions"; +const std::string BACK_FORWARD_CACHE_SUPPORT_FEATURES = "BackForwardCacheSupportFeatures"; + +class NapiBackForwardCacheOptions { +public: + BackForwardCacheOptions() = default; + ~BackForwardCacheOptions() = default; + + static napi_value Init(napi_env env, napi_value exports); + static napi_value JS_Constructor(napi_env env, napi_callback_info info); + static napi_value JS_GetSize(napi_env env, napi_callback_info info); + static napi_value JS_GetTimeToLive(napi_env env, napi_callback_info info); +}; + +class NapiBackForwardCacheSupportFeatures { +public: + BackForwardCacheSupportFeatures() = default; + ~BackForwardCacheSupportFeatures() = default; + + static napi_value Init(napi_env env, napi_value exports); + static napi_value JS_Constructor(napi_env env, napi_callback_info info); + static napi_value JS_IsEnableNativeEmbed(napi_env env, napi_callback_info info); + static napi_value JS_IsEnableMediaIntercept(napi_env env, napi_callback_info info); +}; + +} +} \ No newline at end of file diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp index 890a084e..8e8a4269 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp @@ -5491,7 +5491,7 @@ napi_value NapiWebviewController::EnableBackForwardCache(napi_env env, napi_call WVLOG_I("The value of supported ativeEmbed is: %{public}d", features->IsEnableNativeEmbed()); WVLOG_I("The value of supported mediaIntercept is: %{public}d", features->IsEnableMediaIntercept()); - NWebHelper::Instance().EnableBackForwardCache(feature->IsEnableNativeEmbed(), feature->IsEnableMediaIntercept()); + NWebHelper::Instance().EnableBackForwardCache(features->IsEnableNativeEmbed(), features->IsEnableMediaIntercept()); NAPI_CALL(env, napi_get_undefined(env, &result)); return result; } -- Gitee From 011f6a0152f43d111c36b66c72fa8d1bdd44c932 Mon Sep 17 00:00:00 2001 From: gaojianhao1 Date: Mon, 1 Jul 2024 14:06:39 +0800 Subject: [PATCH 04/50] Add class constructor. Signed-off-by: gaojianhao1 --- .../common/napi_webview_native_module.cpp | 3 + .../back_forward_cache_options.cpp | 14 +++- .../back_forward_cache_options.h | 16 ++-- .../napi_back_forward_cache_options.cpp | 80 ++++++++++++++++--- .../napi_back_forward_cache_options.h | 12 +-- .../napi_webview_controller.cpp | 16 ++-- 6 files changed, 109 insertions(+), 32 deletions(-) diff --git a/interfaces/kits/napi/common/napi_webview_native_module.cpp b/interfaces/kits/napi/common/napi_webview_native_module.cpp index d09ed21f..00ad3d24 100644 --- a/interfaces/kits/napi/common/napi_webview_native_module.cpp +++ b/interfaces/kits/napi/common/napi_webview_native_module.cpp @@ -30,6 +30,7 @@ #include "napi_web_download_item.h" #include "napi_web_download_delegate.h" #include "napi_web_scheme_handler_request.h" +#include "napi_back_forward_cache_options.h" namespace OHOS { namespace NWeb { @@ -51,6 +52,8 @@ static napi_value WebViewExport(napi_env env, napi_value exports) NapiWebAdsBlockManager::Init(env, exports); WebFunctionInit(env, exports); NapiNativeMediaPlayerHandler::Init(env, exports); + NapiBackForwardCacheOptions::Init(env, exports); + NapiBackForwardCacheSupportFeatures::Init(env, exports); return exports; } EXTERN_C_END diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp index f3fe444f..caac1d11 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp @@ -23,8 +23,13 @@ #include "web_errors.h" namespace OHOS::NWeb { +BackForwardCacheOptions::BackForwardCacheOptions() +{ + WVLOG_D("Created a BackForwardCacheOptions class."); +} + BackForwardCacheOptions::BackForwardCacheOptions(int32_t size, int32_t timeToLive) - : size_(size), timeToLive_(timeToLive) + :size_(size), timeToLive_(timeToLive) { WVLOG_D("Created a BackForwardCacheOptions class. Value size: %{public}d timeToLive: %{public}d.", size_, timeToLive_); } @@ -39,8 +44,13 @@ int32_t BackForwardCacheOptions::GetTimeToLive() return timeToLive_; } +BackForwardCacheSupportFeatures::BackForwardCacheSupportFeatures() +{ + WVLOG_D("Created a BackForwardCacheSupportFeatures class."); +} + BackForwardCacheSupportFeatures::BackForwardCacheSupportFeatures(bool nativeEmbed, bool mediaIntercept) - : nativeEmbed_(nativeEmbed), mediaIntercept_(mediaIntercept) + :nativeEmbed_(nativeEmbed), mediaIntercept_(mediaIntercept) { WVLOG_D("Created a BackForwardCacheSupportFeatures class. Value nativeEmbed: %{public}d mediaIntercept: %{public}d.", nativeEmbed_, mediaIntercept_); } diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h index ed28ed1b..e58e675b 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h @@ -27,30 +27,30 @@ namespace OHOS { namespace NWeb { class BackForwardCacheOptions { public: - BackForwardCacheOptions(napi_env env); - BackForwardCacheOptions(napi_env env, int32_t size, int32_t timeToLive); + BackForwardCacheOptions(); + BackForwardCacheOptions(int32_t size, int32_t timeToLive); int32_t GetSize(); int32_t GetTimeToLive(); napi_ref delegate_ = nullptr; private: - int32_t size_; - int32_t timeToLive_; + int32_t size_ = 1; + int32_t timeToLive_ = 600; }; class BackForwardCacheSupportFeatures { public: - BackForwardCacheSupportFeatures(napi_env env); - BackForwardCacheSupportFeatures(napi_env env, bool nativeEmbed, bool mediaIntercept); + BackForwardCacheSupportFeatures(); + BackForwardCacheSupportFeatures(bool nativeEmbed, bool mediaIntercept); bool IsEnableNativeEmbed(); bool IsEnableMediaIntercept(); napi_ref delegate_ = nullptr; private: - bool nativeEmbed_; - bool mediaIntercept_; + bool nativeEmbed_ = true; + bool mediaIntercept_ = true; }; } diff --git a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp index e4687d61..875b1290 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp @@ -21,9 +21,11 @@ #include #include +#include "back_forward_cache_options.h" #include "business_error.h" #include "nweb_log.h" #include "napi_parse_utils.h" +#include "napi/native_node_api.h" #include "web_errors.h" using namespace OHOS::NWebError; @@ -35,15 +37,43 @@ napi_value NapiBackForwardCacheOptions::JS_Constructor(napi_env env, napi_callba WVLOG_I("NapiBackForwardCacheOptions::JS_Constructor is called"); napi_value thisVar = nullptr; void *data = nullptr; - napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, &data); - - BackForwardCacheOptions *options = new BackForwardCacheOptions(env); + size_t argc = 2; + napi_value argv[2] = {0}; + napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); + + BackForwardCacheOptions *options = nullptr; + if (argc == 0) + options = new BackForwardCacheOptions(); + else if (argc == 2) { + int32_t size = 0; + if (!NapiParseUtils::ParseInt32(env, argv[0], size) || (size <= 0 || size > 50)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + "BusinessError: 401. Parameter error. The type of param 'size' must be integer and value between 1 and 50."); + return thisVar; + } + + int32_t timeToLive = 0; + if (!NapiParseUtils::ParseInt32(env, argv[1], timeToLive)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + "BusinessError: 401. Parameter error. The type of param 'timeToLive' must be integer."); + return thisVar; + } + + options = new BackForwardCacheOptions(size, timeToLive); + napi_set_named_property(env, thisVar, "size_", argv[0]); + napi_set_named_property(env, thisVar, "timeToLive_", argv[1]); + } else { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_NUMBERS_ERROR_TWO, "none", "two")); + return thisVar; + } napi_wrap( env, thisVar, options, [](napi_env /* env */, void *data, void * /* hint */) { BackForwardCacheOptions *options = (BackForwardCacheOptions *)data; delete options; + options = nullptr; }, nullptr, nullptr); @@ -55,15 +85,43 @@ napi_value NapiBackForwardCacheSupportFeatures::JS_Constructor(napi_env env, nap WVLOG_I("NapiBackForwardCacheSupportFeatures::JS_Constructor is called"); napi_value thisVar = nullptr; void *data = nullptr; - napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, &data); - - BackForwardCacheSupportFeatures *features = new BackForwardCacheSupportFeatures(env); + size_t argc = 2; + napi_value argv[2] = {0}; + napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); + + BackForwardCacheSupportFeatures *features = nullptr; + if (argc == 0) + features = new BackForwardCacheSupportFeatures(); + else if (argc == 2) { + bool nativeEmbed = true; + if (!NapiParseUtils::ParseBoolean(env, argv[0], nativeEmbed)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "nativeEmbed", "boolean")); + return thisVar; + } + + bool mediaIntercept = true; + if (!NapiParseUtils::ParseBoolean(env, argv[1], mediaIntercept)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "mediaIntercept", "boolean")); + return thisVar; + } + + features = new BackForwardCacheSupportFeatures(nativeEmbed, mediaIntercept); + napi_set_named_property(env, thisVar, "nativeEmbed_", argv[0]); + napi_set_named_property(env, thisVar, "mediaIntercept_", argv[1]); + } else { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_NUMBERS_ERROR_TWO, "none", "two")); + return thisVar; + } napi_wrap( env, thisVar, features, [](napi_env /* env */, void *data, void * /* hint */) { BackForwardCacheSupportFeatures *features = (BackForwardCacheSupportFeatures *)data; delete features; + features = nullptr; }, nullptr, nullptr); @@ -104,9 +162,9 @@ napi_value NapiBackForwardCacheOptions::Init(napi_env env, napi_value exports) napi_value backForwardCacheOptions = nullptr; napi_define_class(env, BACK_FORWARD_CACHE_OPTIONS.c_str(), BACK_FORWARD_CACHE_OPTIONS.length(), JS_Constructor, nullptr, - sizeof(properties) / sizeof(properties[0]), properties, &backForwardCacheOption); + sizeof(properties) / sizeof(properties[0]), properties, &backForwardCacheOptions); napi_set_named_property(env, exports, BACK_FORWARD_CACHE_OPTIONS.c_str(), - backForwardCacheOption); + backForwardCacheOptions); return exports; } @@ -117,12 +175,12 @@ napi_value NapiBackForwardCacheSupportFeatures::Init(napi_env env, napi_value ex DECLARE_NAPI_FUNCTION("isEnableNativeEmbed", JS_IsEnableNativeEmbed), DECLARE_NAPI_FUNCTION("isEnableMediaIntercept", JS_IsEnableMediaIntercept), }; - napi_value backForwardCacheSupportFeature = nullptr; + napi_value backForwardCacheSupportFeatures = nullptr; napi_define_class(env, BACK_FORWARD_CACHE_SUPPORT_FEATURES.c_str(), BACK_FORWARD_CACHE_SUPPORT_FEATURES.length(), JS_Constructor, nullptr, - sizeof(properties) / sizeof(properties[0]), properties, &backForwardCacheSupportFeature); + sizeof(properties) / sizeof(properties[0]), properties, &backForwardCacheSupportFeatures); napi_set_named_property(env, exports, BACK_FORWARD_CACHE_SUPPORT_FEATURES.c_str(), - backForwardCacheSupportFeature); + backForwardCacheSupportFeatures); return exports; } diff --git a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h index 1d0c8f71..41e3d497 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h +++ b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h @@ -28,8 +28,8 @@ const std::string BACK_FORWARD_CACHE_SUPPORT_FEATURES = "BackForwardCacheSupport class NapiBackForwardCacheOptions { public: - BackForwardCacheOptions() = default; - ~BackForwardCacheOptions() = default; + NapiBackForwardCacheOptions() = default; + ~NapiBackForwardCacheOptions() = default; static napi_value Init(napi_env env, napi_value exports); static napi_value JS_Constructor(napi_env env, napi_callback_info info); @@ -39,8 +39,8 @@ public: class NapiBackForwardCacheSupportFeatures { public: - BackForwardCacheSupportFeatures() = default; - ~BackForwardCacheSupportFeatures() = default; + NapiBackForwardCacheSupportFeatures() = default; + ~NapiBackForwardCacheSupportFeatures() = default; static napi_value Init(napi_env env, napi_value exports); static napi_value JS_Constructor(napi_env env, napi_callback_info info); @@ -49,4 +49,6 @@ public: }; } -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp index 8e8a4269..07b4907a 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp @@ -5484,9 +5484,11 @@ napi_value NapiWebviewController::EnableBackForwardCache(napi_env env, napi_call } BackForwardCacheSupportFeatures* features = nullptr; - napi_value obj = argv[0]; - napi_unwrap(env, obj, (void**)&features); - napi_create_reference(env, obj, 1, &features->delegate_); + napi_status status = napi_unwrap(env, argv[INTEGER_ZERO], (void**)&features) + if (status != napi_ok || features == nullptr) { + WVLOG_E("BACKFORWARDCACHE:: unwrap features failed."); + return result; + } WVLOG_I("The value of supported ativeEmbed is: %{public}d", features->IsEnableNativeEmbed()); WVLOG_I("The value of supported mediaIntercept is: %{public}d", features->IsEnableMediaIntercept()); @@ -5518,9 +5520,11 @@ napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_ } BackForwardCacheOptions* options = nullptr; - napi_value obj = argv[0]; - napi_unwrap(env, obj, (void**)&options); - napi_create_reference(env, obj, 1, &options->delegate_); + napi_status status = napi_unwrap(env, argv[INTEGER_ZERO], (void**)&options) + if (status != napi_ok || options == nullptr) { + WVLOG_E("BACKFORWARDCACHE:: unwrap options failed."); + return result; + } WVLOG_I("The value of backforward cache option size is: %{public}d", options->GetSize()); WVLOG_I("The value of backforward cache option timeToLive is: %{public}d", options->GetTimeToLive()); -- Gitee From a9639f2eb1eed5b8e55721aab19dc7fb84303648 Mon Sep 17 00:00:00 2001 From: gaojianhao1 Date: Wed, 3 Jul 2024 13:32:11 +0800 Subject: [PATCH 05/50] Add interface Signed-off-by: gaojianhao1 --- .../napi_webview_controller.cpp | 72 +++++++++---------- 1 file changed, 32 insertions(+), 40 deletions(-) diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp index 0f6d9ec6..65fb6b5f 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp @@ -5503,30 +5503,26 @@ napi_value NapiWebviewController::EnableBackForwardCache(napi_env env, napi_call bool mediaTakeOver = false; napi_value embedObj = nullptr; napi_value mediaObj = nullptr; - if (napi_has_named_property(env, argv[INTEGER_ZERO], "nativeEmbed", &embedObj) == napi_ok) { - if (napi_get_named_property(env, argv[INTEGER_ZERO], "nativeEmbed", &embedObj) != napi_ok) { - WVLOG_E("Failed to get BackForwardCacheOptions nativeEmbed value."); - return result; - } + if (napi_get_named_property(env, argv[INTEGER_ZERO], "nativeEmbed", &embedObj) != napi_ok) { + WVLOG_E("Failed to get BackForwardCacheOptions nativeEmbed value."); + return result; + } - if (!NapiParseUtils::ParseBoolean(env, mediaObj, nativeEmbed)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "nativeEmbed", "bool")); - return result; - } + if (!NapiParseUtils::ParseBoolean(env, embedObj, nativeEmbed)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "nativeEmbed", "bool")); + return result; } - if (napi_has_named_property(env, argv[INTEGER_ZERO], "mediaTakeOver", &mediaObj) == napi_ok) { - if (napi_get_named_property(env, argv[INTEGER_ZERO], "mediaTakeOver", &mediaObj) != napi_ok) { - WVLOG_E("Failed to get BackForwardCacheOptions mediaTakeOver value."); - return result; - } + if (napi_get_named_property(env, argv[INTEGER_ZERO], "mediaTakeOver", &mediaObj) != napi_ok) { + WVLOG_E("Failed to get BackForwardCacheOptions mediaTakeOver value."); + return result; + } - if (!NapiParseUtils::ParseBoolean(env, mediaObj, mediaTakeOver)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "mediaTakeOver", "bool")); - return result; - } + if (!NapiParseUtils::ParseBoolean(env, mediaObj, mediaTakeOver)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "mediaTakeOver", "bool")); + return result; } WVLOG_I("The value of supported ativeEmbed is: %{public}d", nativeEmbed); @@ -5555,30 +5551,26 @@ napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_ int32_t timeToLive = 600; napi_value sizeObj = nullptr; napi_value timeToLiveObj = nullptr; - if (napi_has_named_property(env, argv[INTEGER_ZERO], "size", &sizeObj) == napi_ok) { - if (napi_get_named_property(env, argv[INTEGER_ZERO], "size", &sizeObj) != napi_ok) { - WVLOG_E("Failed to get BackForwardCacheOptions size value."); - return result; - } + if (napi_get_named_property(env, argv[INTEGER_ZERO], "size", &sizeObj) != napi_ok) { + WVLOG_E("Failed to get BackForwardCacheOptions size value."); + return result; + } - if (!NapiParseUtils::ParseInt32(env, sizeObj, size)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "size", "int")); - return result; - } + if (!NapiParseUtils::ParseInt32(env, sizeObj, size)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "size", "int")); + return result; } - if (napi_has_named_property(env, argv[INTEGER_ZERO], "timeToLive", &timeToLiveObj) == napi_ok) { - if (napi_get_named_property(env, argv[INTEGER_ZERO], "timeToLive", &timeToLiveObj) != napi_ok) { - WVLOG_E("Failed to get BackForwardCacheOptions timeToLive value."); - return result; - } + if (napi_get_named_property(env, argv[INTEGER_ZERO], "timeToLive", &timeToLiveObj) != napi_ok) { + WVLOG_E("Failed to get BackForwardCacheOptions timeToLive value."); + return result; + } - if (!NapiParseUtils::ParseInt32(env, timeToLiveObj, timeToLive)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "timeToLive", "int")); - return result; - } + if (!NapiParseUtils::ParseInt32(env, timeToLiveObj, timeToLive)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "timeToLive", "int")); + return result; } WebviewController* webviewController = GetWebviewController(env, info); -- Gitee From 92fc5e7e26dd8d197a68a39b38ef56e4bbf455d3 Mon Sep 17 00:00:00 2001 From: xiongjun_gitee Date: Mon, 1 Jul 2024 10:59:09 +0800 Subject: [PATCH 06/50] add ResizeVisibleViewport Signed-off-by: xiongjun_gitee --- ohos_interface/include/ohos_nweb/nweb.h | 9 +++++++++ .../ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp | 6 +++++- .../ohos_nweb/bridge/webcore/ark_web_nweb_impl.h | 11 +++++++++++ .../ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp | 5 +++++ .../ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h | 11 +++++++++++ .../ohos_glue/ohos_nweb/include/ark_web_nweb.h | 10 ++++++++++ 6 files changed, 51 insertions(+), 1 deletion(-) diff --git a/ohos_interface/include/ohos_nweb/nweb.h b/ohos_interface/include/ohos_nweb/nweb.h index 14a9fe83..a3019b9d 100644 --- a/ohos_interface/include/ohos_nweb/nweb.h +++ b/ohos_interface/include/ohos_nweb/nweb.h @@ -1430,6 +1430,15 @@ public: */ virtual void RegisterArkJSfunction(const std::string& object_name, const std::vector& method_list, const std::vector& async_method_list, const int32_t object_id, const std::string& permission) {} + + /** + * @brief resize visual viewport. + * + * @param width width. + * @param height height. + * @param iskeyboard from keybord. + */ + virtual void ResizeVisibleViewport(uint32_t width, uint32_t height, bool isKeyboard) {} }; } // namespace OHOS::NWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp index 6276b5fd..1ccff32b 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp @@ -1095,7 +1095,6 @@ void ArkWebNWebImpl::WebSendTouchpadFlingEvent(double x, ArkWebBasicVectorStructToClass(pressedCodes)); } - void ArkWebNWebImpl::SendAccessibilityHoverEvent(int32_t x, int32_t y) { nweb_nweb_->SendAccessibilityHoverEvent(x, y); @@ -1108,4 +1107,9 @@ void ArkWebNWebImpl::RegisterArkJSfunction(const ArkWebString& object_name, cons ArkWebStringVectorStructToClass(method_list), ArkWebStringVectorStructToClass(async_method_list), object_id, ArkWebStringStructToClass(permission)); } + +void ArkWebNWebImpl::ResizeVisibleViewport(uint32_t width, uint32_t height, bool isKeyboard) +{ + nweb_nweb_->ResizeVisibleViewport(width, height, isKeyboard); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h index db22e8e3..fff3e1f1 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h @@ -1237,6 +1237,7 @@ public: double vx, double vy, const ArkWebInt32Vector& pressedCodes) override; + /** * @brief Set url trust list with error message. * @@ -1266,6 +1267,16 @@ public: */ void RegisterArkJSfunction(const ArkWebString& object_name, const ArkWebStringVector& method_list, const ArkWebStringVector& async_method_list, const int32_t object_id, const ArkWebString& permission) override; + + /** + * @brief resize visual viewport. + * + * @param width width. + * @param height height. + * @param iskeyboard from keybord. + */ + /*--ark web()--*/ + void ResizeVisibleViewport(uint32_t width, uint32_t height, bool isKeyboard) override; private: std::shared_ptr nweb_nweb_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp index db4de86e..79fe1cc4 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp @@ -1304,4 +1304,9 @@ void ArkWebNWebWrapper::RegisterArkJSfunction(const std::string& object_name, ArkWebStringVectorStructRelease(stAsyncMethods); ArkWebStringStructRelease(stPermission); } + +void ArkWebNWebWrapper::ResizeVisibleViewport(uint32_t width, uint32_t height, bool isKeyboard) +{ + ark_web_nweb_->ResizeVisibleViewport(width, height, isKeyboard); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h index 454294bb..c2adcd0e 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h @@ -1245,6 +1245,7 @@ public: double vx, double vy, const std::vector& pressedCodes) override; + /** * @brief Set url trust list with error message. */ @@ -1275,6 +1276,16 @@ public: const std::vector& async_method_list, const int32_t object_id, const std::string& permission) override; + + /** + * @brief resize visual viewport. + * + * @param width width. + * @param height height. + * @param iskeyboard from keybord. + */ + /*--ark web()--*/ + void ResizeVisibleViewport(uint32_t width, uint32_t height, bool isKeyboard) override; private: ArkWebRefPtr ark_web_nweb_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h index 0bba5011..55dd314b 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h +++ b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h @@ -1426,6 +1426,16 @@ public: /*--ark web()--*/ virtual void RegisterArkJSfunction(const ArkWebString& object_name, const ArkWebStringVector& method_list, const ArkWebStringVector& async_method_list, const int32_t object_id, const ArkWebString& permission) = 0; + + /** + * @brief resize visual viewport. + * + * @param width width. + * @param height height. + * @param iskeyboard from keybord. + */ + /*--ark web()--*/ + virtual void ResizeVisibleViewport(uint32_t width, uint32_t height, bool isKeyboard) = 0; }; } // namespace OHOS::ArkWeb -- Gitee From 68a3e02b86951a367b5eab5732690721969e3a3a Mon Sep 17 00:00:00 2001 From: zhushengle Date: Wed, 3 Jul 2024 19:25:26 +0800 Subject: [PATCH 07/50] =?UTF-8?q?feat:=20WebCore=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=85=AC=E7=89=88sysroot=EF=BC=8C=E4=BD=BF=E7=94=A8=E8=83=B6?= =?UTF-8?q?=E6=B0=B4=E5=B1=82=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhushengle Change-Id: I933070816ce9f6bcbced405f04cf985644d932f5 --- ohos_interface/ohos_glue/BUILD_webcore.gn | 5 ++++- .../ohos_glue/base/bridge/ark_web_bridge_helper.cpp | 2 ++ ohos_interface/ohos_glue/base/bridge/ark_web_bridge_helper.h | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ohos_interface/ohos_glue/BUILD_webcore.gn b/ohos_interface/ohos_glue/BUILD_webcore.gn index 9e56406b..34cf21e4 100644 --- a/ohos_interface/ohos_glue/BUILD_webcore.gn +++ b/ohos_interface/ohos_glue/BUILD_webcore.gn @@ -17,7 +17,10 @@ import("//build/config/ohos/config.gni") ################################################# config("ohos_glue_config") { - defines = [ "OHOS_NWEB" ] + defines = [ + "OHOS_NWEB", + "OHOS_WEBCORE_GLUE", + ] include_dirs = [ "//ohos_glue" ] diff --git a/ohos_interface/ohos_glue/base/bridge/ark_web_bridge_helper.cpp b/ohos_interface/ohos_glue/base/bridge/ark_web_bridge_helper.cpp index df9dbaaf..9b835fbb 100644 --- a/ohos_interface/ohos_glue/base/bridge/ark_web_bridge_helper.cpp +++ b/ohos_interface/ohos_glue/base/bridge/ark_web_bridge_helper.cpp @@ -43,6 +43,7 @@ bool ArkWebBridgeHelper::LoadLibFile(int mode, const std::string& libFilePath, b return true; } +#if !defined(OHOS_WEBCORE_GLUE) bool ArkWebBridgeHelper::LoadLibFile(int mode, const std::string& libNsName, const std::string& libDirPath, const std::string& libFileName, bool isPrintLog) { @@ -69,6 +70,7 @@ bool ArkWebBridgeHelper::LoadLibFile(int mode, const std::string& libNsName, con libFileHandler_ = libFileHandler; return true; } +#endif void ArkWebBridgeHelper::UnloadLibFile() { diff --git a/ohos_interface/ohos_glue/base/bridge/ark_web_bridge_helper.h b/ohos_interface/ohos_glue/base/bridge/ark_web_bridge_helper.h index 71dbd3ab..75f0818a 100644 --- a/ohos_interface/ohos_glue/base/bridge/ark_web_bridge_helper.h +++ b/ohos_interface/ohos_glue/base/bridge/ark_web_bridge_helper.h @@ -33,8 +33,10 @@ protected: bool LoadLibFile(int mode, const std::string& libFilePath, bool isPrintLog = true); +#if !defined(OHOS_WEBCORE_GLUE) bool LoadLibFile(int mode, const std::string& libNsName, const std::string& libDirPath, const std::string& libFileName, bool isPrintLog = true); +#endif private: void UnloadLibFile(); -- Gitee From bac9c8178ca72c80c7b635ae7401fdb955687eda Mon Sep 17 00:00:00 2001 From: gaojianhao1 Date: Wed, 3 Jul 2024 20:59:46 +0800 Subject: [PATCH 08/50] Add interface of bfcache. Signed-off-by: gaojianhao1 --- .../back_forward_cache_options.cpp | 12 ---- .../back_forward_cache_options.h | 6 -- .../napi_back_forward_cache_options.cpp | 56 +------------------ .../napi_webview_controller.cpp | 14 ++--- .../webviewcontroller/webview_controller.h | 1 + ohos_interface/include/ohos_nweb/nweb.h | 10 ++-- .../include/ohos_nweb/nweb_engine.h | 2 - .../bridge/webcore/ark_web_engine_impl.cpp | 5 -- .../bridge/webcore/ark_web_nweb_impl.h | 12 ++-- .../bridge/webview/ark_web_engine_wrapper.cpp | 4 -- .../bridge/webview/ark_web_engine_wrapper.h | 2 - .../bridge/webview/ark_web_nweb_wrapper.h | 12 ++-- .../ohos_nweb/include/ark_web_engine.h | 3 - .../ohos_nweb/include/ark_web_nweb.h | 12 ++-- ohos_nweb/include/nweb_helper.h | 2 - ohos_nweb/src/nweb_helper.cpp | 5 +- .../nweb_helper_test/nweb_helper_test.cpp | 3 + 17 files changed, 35 insertions(+), 126 deletions(-) diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp index caac1d11..d8b61a59 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp @@ -28,12 +28,6 @@ BackForwardCacheOptions::BackForwardCacheOptions() WVLOG_D("Created a BackForwardCacheOptions class."); } -BackForwardCacheOptions::BackForwardCacheOptions(int32_t size, int32_t timeToLive) - :size_(size), timeToLive_(timeToLive) -{ - WVLOG_D("Created a BackForwardCacheOptions class. Value size: %{public}d timeToLive: %{public}d.", size_, timeToLive_); -} - int32_t BackForwardCacheOptions::GetSize() { return size_; @@ -49,12 +43,6 @@ BackForwardCacheSupportFeatures::BackForwardCacheSupportFeatures() WVLOG_D("Created a BackForwardCacheSupportFeatures class."); } -BackForwardCacheSupportFeatures::BackForwardCacheSupportFeatures(bool nativeEmbed, bool mediaIntercept) - :nativeEmbed_(nativeEmbed), mediaIntercept_(mediaIntercept) -{ - WVLOG_D("Created a BackForwardCacheSupportFeatures class. Value nativeEmbed: %{public}d mediaIntercept: %{public}d.", nativeEmbed_, mediaIntercept_); -} - bool BackForwardCacheSupportFeatures::IsEnableNativeEmbed() { return nativeEmbed_; diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h index e58e675b..e9eca1d8 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h @@ -28,12 +28,9 @@ namespace NWeb { class BackForwardCacheOptions { public: BackForwardCacheOptions(); - BackForwardCacheOptions(int32_t size, int32_t timeToLive); int32_t GetSize(); int32_t GetTimeToLive(); - napi_ref delegate_ = nullptr; - private: int32_t size_ = 1; int32_t timeToLive_ = 600; @@ -42,12 +39,9 @@ private: class BackForwardCacheSupportFeatures { public: BackForwardCacheSupportFeatures(); - BackForwardCacheSupportFeatures(bool nativeEmbed, bool mediaIntercept); bool IsEnableNativeEmbed(); bool IsEnableMediaIntercept(); - napi_ref delegate_ = nullptr; - private: bool nativeEmbed_ = true; bool mediaIntercept_ = true; diff --git a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp index 875b1290..2751af4c 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp @@ -41,32 +41,7 @@ napi_value NapiBackForwardCacheOptions::JS_Constructor(napi_env env, napi_callba napi_value argv[2] = {0}; napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); - BackForwardCacheOptions *options = nullptr; - if (argc == 0) - options = new BackForwardCacheOptions(); - else if (argc == 2) { - int32_t size = 0; - if (!NapiParseUtils::ParseInt32(env, argv[0], size) || (size <= 0 || size > 50)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - "BusinessError: 401. Parameter error. The type of param 'size' must be integer and value between 1 and 50."); - return thisVar; - } - - int32_t timeToLive = 0; - if (!NapiParseUtils::ParseInt32(env, argv[1], timeToLive)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - "BusinessError: 401. Parameter error. The type of param 'timeToLive' must be integer."); - return thisVar; - } - - options = new BackForwardCacheOptions(size, timeToLive); - napi_set_named_property(env, thisVar, "size_", argv[0]); - napi_set_named_property(env, thisVar, "timeToLive_", argv[1]); - } else { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_NUMBERS_ERROR_TWO, "none", "two")); - return thisVar; - } + BackForwardCacheOptions *options = new BackForwardCacheOptions(); napi_wrap( env, thisVar, options, @@ -89,32 +64,7 @@ napi_value NapiBackForwardCacheSupportFeatures::JS_Constructor(napi_env env, nap napi_value argv[2] = {0}; napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); - BackForwardCacheSupportFeatures *features = nullptr; - if (argc == 0) - features = new BackForwardCacheSupportFeatures(); - else if (argc == 2) { - bool nativeEmbed = true; - if (!NapiParseUtils::ParseBoolean(env, argv[0], nativeEmbed)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "nativeEmbed", "boolean")); - return thisVar; - } - - bool mediaIntercept = true; - if (!NapiParseUtils::ParseBoolean(env, argv[1], mediaIntercept)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "mediaIntercept", "boolean")); - return thisVar; - } - - features = new BackForwardCacheSupportFeatures(nativeEmbed, mediaIntercept); - napi_set_named_property(env, thisVar, "nativeEmbed_", argv[0]); - napi_set_named_property(env, thisVar, "mediaIntercept_", argv[1]); - } else { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_NUMBERS_ERROR_TWO, "none", "two")); - return thisVar; - } + BackForwardCacheSupportFeatures *features = new BackForwardCacheSupportFeatures(); napi_wrap( env, thisVar, features, @@ -173,7 +123,7 @@ napi_value NapiBackForwardCacheSupportFeatures::Init(napi_env env, napi_value ex WVLOG_D("NapiBackForwardCacheSupportFeatures::Init"); napi_property_descriptor properties[] = { DECLARE_NAPI_FUNCTION("isEnableNativeEmbed", JS_IsEnableNativeEmbed), - DECLARE_NAPI_FUNCTION("isEnableMediaIntercept", JS_IsEnableMediaIntercept), + DECLARE_NAPI_FUNCTION("isEnableMediaTakeOver", JS_IsEnableMediaTakeOver), }; napi_value backForwardCacheSupportFeatures = nullptr; napi_define_class(env, BACK_FORWARD_CACHE_SUPPORT_FEATURES.c_str(), BACK_FORWARD_CACHE_SUPPORT_FEATURES.length(), diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp index 65fb6b5f..22d27115 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp @@ -5510,7 +5510,7 @@ napi_value NapiWebviewController::EnableBackForwardCache(napi_env env, napi_call if (!NapiParseUtils::ParseBoolean(env, embedObj, nativeEmbed)) { BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "nativeEmbed", "bool")); + NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "nativeEmbed", "bool")); return result; } @@ -5521,13 +5521,10 @@ napi_value NapiWebviewController::EnableBackForwardCache(napi_env env, napi_call if (!NapiParseUtils::ParseBoolean(env, mediaObj, mediaTakeOver)) { BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "mediaTakeOver", "bool")); + NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "mediaTakeOver", "bool")); return result; } - WVLOG_I("The value of supported ativeEmbed is: %{public}d", nativeEmbed); - WVLOG_I("The value of supported mediaIntercept is: %{public}d", mediaTakeOver); - NWebHelper::Instance().EnableBackForwardCache(nativeEmbed, mediaTakeOver); NAPI_CALL(env, napi_get_undefined(env, &result)); return result; @@ -5558,7 +5555,7 @@ napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_ if (!NapiParseUtils::ParseInt32(env, sizeObj, size)) { BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "size", "int")); + NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "size", "int")); return result; } @@ -5569,7 +5566,7 @@ napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_ if (!NapiParseUtils::ParseInt32(env, timeToLiveObj, timeToLive)) { BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_TYEPS_ERROR, "timeToLive", "int")); + NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "timeToLive", "int")); return result; } @@ -5580,9 +5577,6 @@ napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_ return result; } - WVLOG_I("The value of backforward cache option size is: %{public}d", size); - WVLOG_I("The value of backforward cache option timeToLive is: %{public}d", timeToLive); - webviewController->SetBackForwardCacheOptions(size, timeToLive); NAPI_CALL(env, napi_get_undefined(env, &result)); return result; diff --git a/interfaces/kits/napi/webviewcontroller/webview_controller.h b/interfaces/kits/napi/webviewcontroller/webview_controller.h index 687962b8..508d8d16 100644 --- a/interfaces/kits/napi/webviewcontroller/webview_controller.h +++ b/interfaces/kits/napi/webviewcontroller/webview_controller.h @@ -370,6 +370,7 @@ public: void SetPathAllowingUniversalAccess(const std::vector& pathList, std::string& errorPath); + void ScrollToWithAnime(float x, float y, int32_t duration) ; void ScrollByWithAnime(float deltaX, float deltaY, int32_t duration) ; diff --git a/ohos_interface/include/ohos_nweb/nweb.h b/ohos_interface/include/ohos_nweb/nweb.h index 1c9bef3a..4702f902 100644 --- a/ohos_interface/include/ohos_nweb/nweb.h +++ b/ohos_interface/include/ohos_nweb/nweb.h @@ -1377,11 +1377,6 @@ public: */ virtual void ScrollByWithAnime(float delta_x, float delta_y, int32_t duration) {} - /** - * @brief Set backforward cache options. - */ - virtual void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) { return; } - /** * @brief Send mouse wheel event. */ @@ -1435,6 +1430,11 @@ public: */ virtual void RegisterArkJSfunction(const std::string& object_name, const std::vector& method_list, const std::vector& async_method_list, const int32_t object_id, const std::string& permission) {} + + /** + * @brief Set backforward cache options. + */ + virtual void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) { return; } }; } // namespace OHOS::NWeb diff --git a/ohos_interface/include/ohos_nweb/nweb_engine.h b/ohos_interface/include/ohos_nweb/nweb_engine.h index 351e5224..41853edc 100644 --- a/ohos_interface/include/ohos_nweb/nweb_engine.h +++ b/ohos_interface/include/ohos_nweb/nweb_engine.h @@ -82,8 +82,6 @@ public: virtual std::shared_ptr GetAdsBlockManager() { return nullptr; }; - - virtual void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) {}; }; } // namespace OHOS::NWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp index d94b0c6b..5b55bcb9 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp @@ -212,9 +212,4 @@ ArkWebRefPtr ArkWebEngineImpl::GetAdsBlockManager() } return new ArkWebAdsBlockManagerImpl(nweb_adsBlock_manager); } - -void ArkWebEngineImpl::EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) -{ - nweb_engine_->EnableBackForwardCache(enableNativeEmbed, enableMediaIntercept); -} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h index ac1b9431..51b5992d 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h @@ -1212,12 +1212,6 @@ public: /*--ark web()--*/ void ScrollByWithAnime(float delta_x, float delta_y, int32_t duration) override; - /** - * @brief set backforward cache options. - */ - /*--ark web()--*/ - void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) override; - /** * @brief Send mouse wheel event. */ @@ -1272,6 +1266,12 @@ public: */ void RegisterArkJSfunction(const ArkWebString& object_name, const ArkWebStringVector& method_list, const ArkWebStringVector& async_method_list, const int32_t object_id, const ArkWebString& permission) override; + + /** + * @brief set backforward cache options. + */ + /*--ark web()--*/ + void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) override; private: std::shared_ptr nweb_nweb_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp index b384e5bf..c08317fa 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp @@ -240,8 +240,4 @@ ArkWebEngineWrapper::GetAdsBlockManager() { return std::make_shared(ark_web_adsblock_manager); } - -void ArkWebEngineWrapper::EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) { - ark_web_engine_->EnableBackForwardCache(enableNativeEmbed, enableMediaIntercept); -} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h index 865d41b8..6400bfcd 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h @@ -76,8 +76,6 @@ public: void EnableWholeWebPageDrawing() override; std::shared_ptr GetAdsBlockManager() override; - - void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) override; private: ArkWebRefPtr ark_web_engine_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h index 084049c7..4b6748ce 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h @@ -1220,12 +1220,6 @@ public: /*--ark web()--*/ void ScrollByWithAnime(float delta_x, float delta_y, int32_t duration) override; - /** - * @brief set backforward cache options. - */ - /*--ark web()--*/ - void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) override; - /** * @brief Send mouse wheel event. */ @@ -1281,6 +1275,12 @@ public: const std::vector& async_method_list, const int32_t object_id, const std::string& permission) override; + + /** + * @brief set backforward cache options. + */ + /*--ark web()--*/ + void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) override; private: ArkWebRefPtr ark_web_nweb_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h index 30021b2c..ab6194dc 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h +++ b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h @@ -108,9 +108,6 @@ public: /*--ark web()--*/ virtual ArkWebRefPtr GetAdsBlockManager() = 0; - - /*--ark web()--*/ - virtual void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) = 0; }; } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h index d7a13572..76b15033 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h +++ b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h @@ -1372,12 +1372,6 @@ public: /*--ark web()--*/ virtual void ScrollByWithAnime(float delta_x, float delta_y, int32_t duration) = 0; - /** - * @brief set backforward cache options. - */ - /*--ark web()--*/ - virtual void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) = 0; - /** * @brief Send mouse wheel event. */ @@ -1432,6 +1426,12 @@ public: /*--ark web()--*/ virtual void RegisterArkJSfunction(const ArkWebString& object_name, const ArkWebStringVector& method_list, const ArkWebStringVector& async_method_list, const int32_t object_id, const ArkWebString& permission) = 0; + + /** + * @brief set backforward cache options. + */ + /*--ark web()--*/ + virtual void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) = 0; }; } // namespace OHOS::ArkWeb diff --git a/ohos_nweb/include/nweb_helper.h b/ohos_nweb/include/nweb_helper.h index e5c7f0f4..b65860d1 100644 --- a/ohos_nweb/include/nweb_helper.h +++ b/ohos_nweb/include/nweb_helper.h @@ -86,8 +86,6 @@ public: void EnableWholeWebPageDrawing(); std::shared_ptr GetAdsBlockManager(); - void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept); - private: NWebHelper() = default; bool LoadLib(bool from_ark); diff --git a/ohos_nweb/src/nweb_helper.cpp b/ohos_nweb/src/nweb_helper.cpp index 74acf808..d51b4520 100644 --- a/ohos_nweb/src/nweb_helper.cpp +++ b/ohos_nweb/src/nweb_helper.cpp @@ -814,7 +814,7 @@ bool NWebHelper::InitAndRun(bool from_ark) if (backForwardCacheCmdLine_.size() != 0) { for (auto backForwardCacheCmdLine : backForwardCacheCmdLine_) { initArgs->AddArg(backForwardCacheCmdLine); - WVLOG_I("Add command line: %{public}s", backForwardCacheCmdLine.c_str()); + WVLOG_I("Add command line when init web engine: %{public}s", backForwardCacheCmdLine.c_str()); } } @@ -1087,15 +1087,12 @@ void NWebHelper::ClearHostIP(const std::string& hostName) void NWebHelper::EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) { this->backForwardCacheCmdLine_.emplace_back("--enable-bfcache"); - WVLOG_I("The value of backForwardCacheCmdLin_ size is %{public}d", this->backForwardCacheCmdLine_.size()); if (enableNativeEmbed) { this->backForwardCacheCmdLine_.emplace_back("--enable-cache-native-embed"); - WVLOG_I("The value of backForwardCacheCmdLin_ size is %{public}d", this->backForwardCacheCmdLine_.size()); } if (enableNativeEmbed) { this->backForwardCacheCmdLine_.emplace_back("--enable-cache-media-intercept"); - WVLOG_I("The value of backForwardCacheCmdLin_ size is %{public}d", this->backForwardCacheCmdLine_.size()); } } diff --git a/test/unittest/nweb_helper_test/nweb_helper_test.cpp b/test/unittest/nweb_helper_test/nweb_helper_test.cpp index 33fcc2ac..2ebb7da7 100644 --- a/test/unittest/nweb_helper_test/nweb_helper_test.cpp +++ b/test/unittest/nweb_helper_test/nweb_helper_test.cpp @@ -143,6 +143,8 @@ public: { return nullptr; } + + void EnableBackForwardCache(bool nativeEmbed, bool mediaTakeOver); }; void NwebHelperTest::SetUpTestCase(void) @@ -192,6 +194,7 @@ HWTEST_F(NwebHelperTest, NWebHelper_SetBundlePath_001, TestSize.Level1) NWebHelper::Instance().PrefetchResource(nullptr, {}, "web_test", 0); NWebHelper::Instance().ClearPrefetchedResource({"web_test"}); NWebAdapterHelper::Instance().ReadConfigIfNeeded(); + NWebHelper::Instance().EnableBackForwardCache(true, true); result = NWebHelper::Instance().InitAndRun(false); EXPECT_FALSE(result); ApplicationContextMock *contextMock = new ApplicationContextMock(); -- Gitee From f1be1859473dbb902120f98779fdb6a712f40f57 Mon Sep 17 00:00:00 2001 From: tengfan3 Date: Thu, 4 Jul 2024 14:32:37 +0800 Subject: [PATCH 09/50] =?UTF-8?q?=E4=BC=A0=E6=84=9F=E5=99=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=8F=8A=E6=9D=83=E9=99=90=E5=AF=B9=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tengfan3 --- bundle.json | 1 + config.gni | 5 + ohos_adapter/BUILD.gn | 7 + .../include/ohos_adapter_helper_impl.h | 2 + .../src/ohos_adapter_helper_impl.cpp | 12 + .../include/sensor_adapter_impl.h | 58 ++++ .../src/sensor_adapter_impl.cpp | 303 ++++++++++++++++++ ohos_glue/BUILD.gn | 8 + .../ohos_adapter/ohos_adapter_helper.h | 3 + .../include/ohos_adapter/sensor_adapter.h | 65 ++++ .../include/ohos_nweb/nweb_access_request.h | 3 +- ohos_interface/ohos_glue/BUILD_webcore.gn | 8 + .../base/include/ark_web_bridge_types.h | 2 + .../ark_ohos_adapter_helper_wrapper.cpp | 11 + .../webcore/ark_ohos_adapter_helper_wrapper.h | 2 + .../webcore/ark_sensor_adapter_wrapper.cpp | 73 +++++ .../webcore/ark_sensor_adapter_wrapper.h | 45 +++ .../ark_sensor_callback_adapter_impl.cpp | 30 ++ .../ark_sensor_callback_adapter_impl.h | 40 +++ .../webview/ark_ohos_adapter_helper_impl.cpp | 8 +- .../webview/ark_ohos_adapter_helper_impl.h | 2 + .../webview/ark_sensor_adapter_impl.cpp | 73 +++++ .../bridge/webview/ark_sensor_adapter_impl.h | 54 ++++ .../ark_sensor_callback_adapter_wrapper.cpp | 31 ++ .../ark_sensor_callback_adapter_wrapper.h | 38 +++ .../include/ark_ohos_adapter_helper.h | 4 + .../ohos_adapter/include/ark_sensor_adapter.h | 64 ++++ 27 files changed, 950 insertions(+), 2 deletions(-) create mode 100644 ohos_adapter/sensor_adapter/include/sensor_adapter_impl.h create mode 100644 ohos_adapter/sensor_adapter/src/sensor_adapter_impl.cpp create mode 100644 ohos_interface/include/ohos_adapter/sensor_adapter.h create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_adapter_wrapper.cpp create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_adapter_wrapper.h create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_callback_adapter_impl.cpp create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_callback_adapter_impl.h create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_adapter_impl.cpp create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_adapter_impl.h create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_callback_adapter_wrapper.cpp create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_callback_adapter_wrapper.h create mode 100644 ohos_interface/ohos_glue/ohos_adapter/include/ark_sensor_adapter.h diff --git a/bundle.json b/bundle.json index 068d0402..c7c93faf 100644 --- a/bundle.json +++ b/bundle.json @@ -71,6 +71,7 @@ "relational_store", "resource_schedule_service", "samgr", + "sensor", "soc_perf", "time_service", "window_manager", diff --git a/config.gni b/config.gni index cd08c730..84868dae 100644 --- a/config.gni +++ b/config.gni @@ -24,6 +24,7 @@ declare_args() { webview_print_enable = true webview_enterprise_device_manager_enable = true webview_media_avsession_enable = true + webview_sensors_sensor_enable = true if (defined(global_parts_info) && !defined(global_parts_info.resourceschedule_soc_perf)) { @@ -75,4 +76,8 @@ declare_args() { !defined(global_parts_info.multimedia_av_session)) { webview_media_avsession_enable = false } + if (defined(global_parts_info) && + !defined(global_parts_info.sensors_sensor)) { + webview_sensors_sensor_enable = false + } } diff --git a/ohos_adapter/BUILD.gn b/ohos_adapter/BUILD.gn index 22071d4d..7cdb4fc0 100644 --- a/ohos_adapter/BUILD.gn +++ b/ohos_adapter/BUILD.gn @@ -102,6 +102,7 @@ ohos_shared_library("nweb_ohos_adapter") { "screen_capture_adapter/include", "soc_perf_adapter/include", "system_properties_adapter/include", + "sensor_adapter/include", ] public_configs = [ ":ohos_adapter_public_interface" ] @@ -286,6 +287,12 @@ ohos_shared_library("nweb_ohos_adapter") { defines += [ "NWEB_MEDIA_AVSESSION_ENABLE" ] } + if (webview_sensors_sensor_enable) { + sources += [ "sensor_adapter/src/sensor_adapter_impl.cpp" ] + external_deps += [ "sensor:sensor_interface_native" ] + defines += [ "NWEB_SENSORS_SENSOR_ENABLE" ] + } + innerapi_tags = [ "platformsdk" ] part_name = "webview" subsystem_name = "web" diff --git a/ohos_adapter/ohos_adapter_helper/include/ohos_adapter_helper_impl.h b/ohos_adapter/ohos_adapter_helper/include/ohos_adapter_helper_impl.h index 7ca517ce..7bd751b8 100644 --- a/ohos_adapter/ohos_adapter_helper/include/ohos_adapter_helper_impl.h +++ b/ohos_adapter/ohos_adapter_helper/include/ohos_adapter_helper_impl.h @@ -110,6 +110,8 @@ public: std::unique_ptr CreateMediaAVSessionAdapter() override; std::unique_ptr CreateOhosImageDecoderAdapter() override; + + std::unique_ptr CreateSensorAdapter() override; }; } // namespace OHOS::NWeb diff --git a/ohos_adapter/ohos_adapter_helper/src/ohos_adapter_helper_impl.cpp b/ohos_adapter/ohos_adapter_helper/src/ohos_adapter_helper_impl.cpp index 66b6a8f3..8c429eac 100644 --- a/ohos_adapter/ohos_adapter_helper/src/ohos_adapter_helper_impl.cpp +++ b/ohos_adapter/ohos_adapter_helper/src/ohos_adapter_helper_impl.cpp @@ -70,6 +70,9 @@ #include "system_properties_adapter_impl.h" #include "vsync_adapter_impl.h" #include "window_adapter_impl.h" +#if defined(NWEB_SENSORS_SENSOR_ENABLE) +#include "sensor_adapter_impl.h" +#endif namespace OHOS::NWeb { // static @@ -323,4 +326,13 @@ std::unique_ptr OhosAdapterHelperImpl::CreateOhosImageD { return std::make_unique(); } + +std::unique_ptr OhosAdapterHelperImpl::CreateSensorAdapter() +{ +#if defined(NWEB_SENSORS_SENSOR_ENABLE) + return std::make_unique(); +#else + return nullptr; +#endif +} } // namespace OHOS::NWeb diff --git a/ohos_adapter/sensor_adapter/include/sensor_adapter_impl.h b/ohos_adapter/sensor_adapter/include/sensor_adapter_impl.h new file mode 100644 index 00000000..8d3c78b2 --- /dev/null +++ b/ohos_adapter/sensor_adapter/include/sensor_adapter_impl.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SENSOR_ADAPTER_IMPL_H +#define SENSOR_ADAPTER_IMPL_H + +#include "sensor_adapter.h" +#include "sensor_agent.h" + +namespace OHOS::NWeb { + +class SensorCallbackImpl { +public: + SensorCallbackImpl(std::shared_ptr callbackAdapter); + ~SensorCallbackImpl() = default; + + void UpdateOhosSensorData(double timestamp, + double value1, double value2, double value3, double value4); +private: + std::shared_ptr callbackAdapter_; +}; + +class SensorAdapterImpl : public SensorAdapter { +public: + SensorAdapterImpl() = default; + ~SensorAdapterImpl() = default; + + int32_t IsOhosSensorSupported(int32_t sensorTypeId) override; + int32_t GetOhosSensorReportingMode(int32_t sensorTypeId) override; + double GetOhosSensorDefaultSupportedFrequency(int32_t sensorTypeId) override; + double GetOhosSensorMinSupportedFrequency(int32_t sensorTypeId) override; + double GetOhosSensorMaxSupportedFrequency(int32_t sensorTypeId) override; + int32_t SubscribeOhosSensor(int32_t sensorTypeId, int64_t samplingInterval) override; + int32_t RegistOhosSensorCallback(int32_t sensorTypeId, + std::shared_ptr callbackAdapter) override; + int32_t UnsubscribeOhosSensor(int32_t sensorTypeId) override; + +private: + static void OhosSensorCallback(SensorEvent* event); + static std::unordered_map> sensorCallbackMap; + + SensorUser mSensorUser{}; +}; + +} +#endif // SENSOR_ADAPTER_IMPL_H \ No newline at end of file diff --git a/ohos_adapter/sensor_adapter/src/sensor_adapter_impl.cpp b/ohos_adapter/sensor_adapter/src/sensor_adapter_impl.cpp new file mode 100644 index 00000000..d6f6328f --- /dev/null +++ b/ohos_adapter/sensor_adapter/src/sensor_adapter_impl.cpp @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "sensor_adapter_impl.h" + +#include +#include + +#include "nweb_log.h" + +namespace OHOS::NWeb { + +std::unordered_map> SensorAdapterImpl::sensorCallbackMap; +constexpr double NANOSECONDS_IN_SECOND = 1000000000.0; +constexpr double DEFAULT_SAMPLE_PERIOD = 200000000.0; + +SensorTypeId SensorTypeToOhosSensorType(int sensorTypeId) { + SensorTypeId ohosSensorTypeId = SENSOR_TYPE_ID_NONE; + const static std::map TO_OHOS_SENSOR_TYPE_MAP = { + {2 /* ACCELEROMETER */, SENSOR_TYPE_ID_ACCELEROMETER }, + {3 /* LINEAR_ACCELERATION */, SENSOR_TYPE_ID_LINEAR_ACCELERATION }, + {4 /* GRAVITY */, SENSOR_TYPE_ID_GRAVITY }, + {5 /* GYROSCOPE */, SENSOR_TYPE_ID_GYROSCOPE }, + {8 /* ABSOLUTE_ORIENTATION_EULER_ANGLES}*/, SENSOR_TYPE_ID_ORIENTATION } + }; + auto checkIter = TO_OHOS_SENSOR_TYPE_MAP.find(sensorTypeId); + if (checkIter != TO_OHOS_SENSOR_TYPE_MAP.end()) { + ohosSensorTypeId = checkIter->second; + } + return ohosSensorTypeId; +} + +std::string SensorTypeToSensorUserName(int sensorTypeId) { + const static std::map TO_OHOS_SENSOR_USER_NAME_MAP = { + {2 /* ACCELEROMETER */, "OhosAccelerometerService" }, + {3 /* LINEAR_ACCELERATION */, "OhosLinearAccelerometerService" }, + {4 /* GRAVITY */, "OhosGravityService" }, + {5 /* GYROSCOPE */, "OhosCyroscopeService" }, + {8 /* ABSOLUTE_ORIENTATION_EULER_ANGLES}*/, "OhosOrientationService" } + }; + std::string userName = "OhosSensorService"; + auto checkIter = TO_OHOS_SENSOR_USER_NAME_MAP.find(sensorTypeId); + if (checkIter != TO_OHOS_SENSOR_USER_NAME_MAP.end()) { + userName = checkIter->second; + } + return userName; +} + +SensorCallbackImpl::SensorCallbackImpl( + std::shared_ptr callbackAdapter) + : callbackAdapter_(callbackAdapter) { +} + +void SensorCallbackImpl::UpdateOhosSensorData(double timestamp, + double value1, double value2, double value3, double value4) { + if (callbackAdapter_) { + callbackAdapter_->UpdateOhosSensorData(timestamp, value1, value2, value3, value4); + } +} + +int32_t SensorAdapterImpl::IsOhosSensorSupported(int32_t sensorTypeId) { + int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); + if (ohosSensorTypeId != SENSOR_TYPE_ID_NONE) { + SensorInfo* sensorInfo = nullptr; + int32_t count; + int ret = GetAllSensors(&sensorInfo, &count); + if (ret != SENSOR_SUCCESS || sensorInfo == nullptr || count < 0) { + WVLOG_E("IsOhosSensorSupported Error, ret = %{public}d, count = %{public}d.", ret, count); + return SENSOR_ERROR; + } + + for (int i = 0; i < count; i++) { + if (sensorInfo[i].sensorId == ohosSensorTypeId) { + WVLOG_I("IsOhosSensorSupported SUCCESS, sensorTypeId = %{public}d.", sensorTypeId); + return SENSOR_SUCCESS; + } + } + } + WVLOG_E("IsOhosSensorSupported Error, sensorTypeId = %{public}d is invalid.", sensorTypeId); + return SENSOR_ERROR; +} + +int32_t SensorAdapterImpl::GetOhosSensorReportingMode(int32_t sensorTypeId) { + int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); + int32_t reportingMode = -1; + switch (ohosSensorTypeId) { + case SENSOR_TYPE_ID_ACCELEROMETER: + case SENSOR_TYPE_ID_GRAVITY: + case SENSOR_TYPE_ID_LINEAR_ACCELERATION: + case SENSOR_TYPE_ID_GYROSCOPE: + case SENSOR_TYPE_ID_ORIENTATION: + reportingMode = SENSOR_DATA_REPORT_CONTINUOUS; + break; + default: + break; + } + return reportingMode; +} + +double SensorAdapterImpl::GetOhosSensorDefaultSupportedFrequency(int32_t sensorTypeId) { + int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); + double defaultFrequency = 0.0; + if (ohosSensorTypeId != SENSOR_TYPE_ID_NONE) { + defaultFrequency = NANOSECONDS_IN_SECOND / DEFAULT_SAMPLE_PERIOD; + } + WVLOG_I("GetOhosSensorDefaultSupportedFrequency sensorTypeId: %{public}d, defaultFrequency: %{public}f", + sensorTypeId, defaultFrequency); + return defaultFrequency; +} + +double SensorAdapterImpl::GetOhosSensorMinSupportedFrequency(int32_t sensorTypeId) { + int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); + double minFrequency = 0.0; + if (ohosSensorTypeId == SENSOR_TYPE_ID_NONE) { + WVLOG_E("GetOhosSensorMinSupportedFrequency Error, sensorTypeId = %{public}d is invalid.", sensorTypeId); + return minFrequency; + } + SensorInfo* sensorInfo = nullptr; + int32_t count; + int ret = GetAllSensors(&sensorInfo, &count); + if (ret != SENSOR_SUCCESS || sensorInfo == nullptr || count < 0) { + WVLOG_E("GetOhosSensorMinSupportedFrequency Error, ret = %{public}d, count = %{public}d.", ret, count); + return minFrequency; + } + for (int i = 0; i < count; i++) { + if (sensorInfo[i].sensorId == ohosSensorTypeId) { + int64_t maxSamplePeriod = sensorInfo[i].maxSamplePeriod; + if (maxSamplePeriod > 0) { + minFrequency = NANOSECONDS_IN_SECOND / static_cast(maxSamplePeriod); + } + break; + } + } + WVLOG_I("GetOhosSensorMinSupportedFrequency sensorTypeId: %{public}d, minFrequency: %{public}f", + sensorTypeId, minFrequency); + return minFrequency; +} + +double SensorAdapterImpl::GetOhosSensorMaxSupportedFrequency(int32_t sensorTypeId) { + int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); + double maxFrequency = 0.0; + if (ohosSensorTypeId == SENSOR_TYPE_ID_NONE) { + WVLOG_E("GetOhosSensorMaxSupportedFrequency Error, sensorTypeId = %{public}d is invalid.", sensorTypeId); + return maxFrequency; + } + SensorInfo* sensorInfo = nullptr; + int32_t count; + int ret = GetAllSensors(&sensorInfo, &count); + if (ret != SENSOR_SUCCESS || sensorInfo == nullptr || count < 0) { + WVLOG_E("GetOhosSensorMaxSupportedFrequency Error, ret = %{public}d, count = %{public}d.", ret, count); + return maxFrequency; + } + for (int i = 0; i < count; i++) { + if (sensorInfo[i].sensorId == ohosSensorTypeId) { + int64_t minSamplePeriod = sensorInfo[i].minSamplePeriod; + if (minSamplePeriod > 0) { + maxFrequency = NANOSECONDS_IN_SECOND / static_cast(minSamplePeriod); + } + break; + } + } + WVLOG_I("GetOhosSensorMaxSupportedFrequency sensorTypeId: %{public}d, maxFrequency: %{public}f", + sensorTypeId, maxFrequency); + return maxFrequency; +} + +void SensorAdapterImpl::OhosSensorCallback(SensorEvent* event) { + std::shared_ptr callback = nullptr; + auto findIter = sensorCallbackMap.find(event->sensorTypeId); + if (findIter != sensorCallbackMap.end()) { + callback = findIter->second; + } + if ((event == nullptr) || (callback == nullptr)) { + WVLOG_E("OhosSensorCallback Error."); + return; + } + switch (event->sensorTypeId) { + case SENSOR_TYPE_ID_ACCELEROMETER: { + AccelData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); + } + break; + } + case SENSOR_TYPE_ID_GRAVITY: { + GravityData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); + } + break; + } + case SENSOR_TYPE_ID_LINEAR_ACCELERATION: { + LinearAccelData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); + } + break; + } + case SENSOR_TYPE_ID_GYROSCOPE: { + GyroscopeData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); + } + break; + } + case SENSOR_TYPE_ID_ORIENTATION: { + OrientationData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->beta, data->gamma, data->alpha, 0.0f); + } + break; + } + default: + break; + } +} + +int32_t SensorAdapterImpl::SubscribeOhosSensor(int32_t sensorTypeId, int64_t samplingInterval) { + WVLOG_I("SubscribeOhosSensor sensorTypeId: %{public}d, samplingInterval: %{public}lld", + sensorTypeId, samplingInterval); + if (samplingInterval <= 0) { + WVLOG_E("SubscribeOhosSensor error, samplingInterval is invalid."); + return SENSOR_PARAMETER_ERROR; + } + int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); + if (ohosSensorTypeId == SENSOR_TYPE_ID_NONE) { + WVLOG_E("SubscribeOhosSensor error, sensorTypeId is invalid."); + return SENSOR_PARAMETER_ERROR; + } + + std::string userName = SensorTypeToSensorUserName(sensorTypeId); + (void)strcpy_s(mSensorUser.name, sizeof(mSensorUser.name), userName.c_str()); + mSensorUser.userData = nullptr; + mSensorUser.callback = OhosSensorCallback; + int32_t ret = SENSOR_SUCCESS; + ret = SubscribeSensor(ohosSensorTypeId, &mSensorUser); + if (ret != SENSOR_SUCCESS) { + WVLOG_E("SubscribeOhosSensor error, call SubscribeSensor ret = %{public}d.", ret); + return ret; + } + ret = SetBatch(ohosSensorTypeId, &mSensorUser, samplingInterval, samplingInterval); + if (ret != SENSOR_SUCCESS) { + WVLOG_E("SubscribeOhosSensor error, call SetBatch ret = %{public}d.", ret); + return ret; + } + ret = ActivateSensor(ohosSensorTypeId, &mSensorUser); + if (ret != SENSOR_SUCCESS) { + WVLOG_E("SubscribeOhosSensor error, call ActivateSensor ret = %{public}d.", ret); + return ret; + } + ret = SetMode(ohosSensorTypeId, &mSensorUser, SENSOR_REALTIME_MODE); + if (ret != SENSOR_SUCCESS) { + WVLOG_E("SubscribeOhosSensor error, call SetMode ret = %{public}d.", ret); + return ret; + } + return SENSOR_SUCCESS; +} + +int32_t SensorAdapterImpl::RegistOhosSensorCallback(int32_t sensorTypeId, + std::shared_ptr callbackAdapter) { + int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); + if (ohosSensorTypeId != SENSOR_TYPE_ID_NONE) { + auto callback = std::make_shared(callbackAdapter); + sensorCallbackMap[ohosSensorTypeId] = callback; + return SENSOR_SUCCESS; + } + WVLOG_E("RegistOhosSensorCallback error, sensorTypeId is invalid."); + return SENSOR_PARAMETER_ERROR; +} + +int32_t SensorAdapterImpl::UnsubscribeOhosSensor(int32_t sensorTypeId) { + WVLOG_I("UnsubscribeOhosSensor sensorTypeId: %{public}d.", sensorTypeId); + int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); + if (ohosSensorTypeId != SENSOR_TYPE_ID_NONE) { + sensorCallbackMap.erase(ohosSensorTypeId); + int32_t ret = DeactivateSensor(ohosSensorTypeId, &mSensorUser); + if (ret != SENSOR_SUCCESS) { + WVLOG_E("UnsubscribeOhosSensor error, call DeactivateSensor ret = %{public}d.", ret); + return ret; + } + ret = UnsubscribeSensor(ohosSensorTypeId, &mSensorUser); + if (ret != SENSOR_SUCCESS) { + WVLOG_E("UnsubscribeOhosSensor error, call UnsubscribeSensor ret = %{public}d.", ret); + return ret; + } + return SENSOR_SUCCESS; + } + WVLOG_E("UnsubscribeOhosSensor error, sensorTypeId is invalid."); + return SENSOR_PARAMETER_ERROR; +} +} // namespace OHOS::NWeb \ No newline at end of file diff --git a/ohos_glue/BUILD.gn b/ohos_glue/BUILD.gn index e4386d88..15f54a18 100644 --- a/ohos_glue/BUILD.gn +++ b/ohos_glue/BUILD.gn @@ -655,6 +655,10 @@ action("ohos_glue_adapter_prepare") { "${glue_build_gen_dir}/ohos_adapter/bridge/ark_screen_capture_callback_adapter_wrapper.h", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_screen_capture_config_adapter_wrapper.cpp", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_screen_capture_config_adapter_wrapper.h", + "${glue_build_gen_dir}/ohos_adapter/bridge/ark_sensor_adapter_impl.cpp", + "${glue_build_gen_dir}/ohos_adapter/bridge/ark_sensor_adapter_impl.h", + "${glue_build_gen_dir}/ohos_adapter/bridge/ark_sensor_callback_adapter_wrapper.cpp", + "${glue_build_gen_dir}/ohos_adapter/bridge/ark_sensor_callback_adapter_wrapper.h", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_soc_perf_client_adapter_impl.cpp", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_soc_perf_client_adapter_impl.h", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_surface_buffer_adapter_impl.cpp", @@ -817,6 +821,8 @@ action("ohos_glue_adapter_prepare") { "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_running_lock_adapter_cpptoc.h", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_screen_capture_adapter_cpptoc.cpp", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_screen_capture_adapter_cpptoc.h", + "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_sensor_adapter_cpptoc.cpp", + "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_sensor_adapter_cpptoc.h", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_soc_perf_client_adapter_cpptoc.cpp", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_soc_perf_client_adapter_cpptoc.h", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_surface_buffer_adapter_cpptoc.cpp", @@ -935,6 +941,8 @@ action("ohos_glue_adapter_prepare") { "${glue_build_gen_dir}/ohos_adapter/ctocpp/ark_screen_capture_callback_adapter_ctocpp.h", "${glue_build_gen_dir}/ohos_adapter/ctocpp/ark_screen_capture_config_adapter_ctocpp.cpp", "${glue_build_gen_dir}/ohos_adapter/ctocpp/ark_screen_capture_config_adapter_ctocpp.h", + "${glue_build_gen_dir}/ohos_adapter/ctocpp/ark_sensor_callback_adapter_ctocpp.cpp", + "${glue_build_gen_dir}/ohos_adapter/ctocpp/ark_sensor_callback_adapter_ctocpp.h", "${glue_build_gen_dir}/ohos_adapter/ctocpp/ark_timezone_event_callback_adapter_ctocpp.cpp", "${glue_build_gen_dir}/ohos_adapter/ctocpp/ark_timezone_event_callback_adapter_ctocpp.h", "${glue_build_gen_dir}/ohos_adapter/ctocpp/ark_video_capture_info_adapter_ctocpp.cpp", diff --git a/ohos_interface/include/ohos_adapter/ohos_adapter_helper.h b/ohos_interface/include/ohos_adapter/ohos_adapter_helper.h index 6a82adfe..0b89991c 100644 --- a/ohos_interface/include/ohos_adapter/ohos_adapter_helper.h +++ b/ohos_interface/include/ohos_adapter/ohos_adapter_helper.h @@ -54,6 +54,7 @@ #include "screen_capture_adapter.h" #include "soc_perf_client_adapter.h" #include "system_properties_adapter.h" +#include "sensor_adapter.h" namespace OHOS::NWeb { class OhosAdapterHelper { @@ -143,6 +144,8 @@ public: virtual std::unique_ptr CreateMediaAVSessionAdapter() = 0; virtual std::unique_ptr CreateOhosImageDecoderAdapter() = 0; + + virtual std::unique_ptr CreateSensorAdapter() = 0; }; } // namespace OHOS::NWeb diff --git a/ohos_interface/include/ohos_adapter/sensor_adapter.h b/ohos_interface/include/ohos_adapter/sensor_adapter.h new file mode 100644 index 00000000..c3253b0e --- /dev/null +++ b/ohos_interface/include/ohos_adapter/sensor_adapter.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SENSOR_ADAPTER_H +#define SENSOR_ADAPTER_H + +#include + + +namespace OHOS::NWeb { + +enum { + SENSOR_ERROR = -1, + SENSOR_SUCCESS = 0, + SENSOR_PERMISSION_DENIED = 201, // Use this error code when permission is denied. + SENSOR_PARAMETER_ERROR = 401, // Use this error code when the input parameter type or range does not match. + SENSOR_SERVICE_EXCEPTION = 14500101, // Use this error code when the service is exception. + SENSOR_NO_SUPPORT = 14500102, // Use this error code when the sensor is not supported by the device. + SENSOR_NON_SYSTEM_API = 202 // Permission check failed. A non-system application uses the system API. +}; + +enum { + SENSOR_DATA_REPORT_ON_CHANGE = 0, + SENSOR_DATA_REPORT_CONTINUOUS = 1 +}; + +class SensorCallbackAdapter { +public: + virtual ~SensorCallbackAdapter() = default; + + virtual void UpdateOhosSensorData(double timestamp, + double value1, double value2, double value3, double value4) = 0; +}; + +class SensorAdapter { +public: + SensorAdapter() = default; + virtual ~SensorAdapter() = default; + + virtual int32_t IsOhosSensorSupported(int32_t sensorTypeId) = 0; + virtual int32_t GetOhosSensorReportingMode(int32_t sensorTypeId) = 0; + virtual double GetOhosSensorDefaultSupportedFrequency(int32_t sensorTypeId) = 0; + virtual double GetOhosSensorMinSupportedFrequency(int32_t sensorTypeId) = 0; + virtual double GetOhosSensorMaxSupportedFrequency(int32_t sensorTypeId) = 0; + virtual int32_t SubscribeOhosSensor(int32_t sensorTypeId, int64_t samplingInterval) = 0; + virtual int32_t RegistOhosSensorCallback(int32_t sensorTypeId, + std::shared_ptr callbackAdapter) = 0; + virtual int32_t UnsubscribeOhosSensor(int32_t sensorTypeId) = 0; +}; + +} + +#endif // SENSOR_ADAPTER_H \ No newline at end of file diff --git a/ohos_interface/include/ohos_nweb/nweb_access_request.h b/ohos_interface/include/ohos_nweb/nweb_access_request.h index 703f989f..a41853f4 100644 --- a/ohos_interface/include/ohos_nweb/nweb_access_request.h +++ b/ohos_interface/include/ohos_nweb/nweb_access_request.h @@ -35,7 +35,8 @@ public: PROTECTED_MEDIA_ID = 1 << 3, MIDI_SYSEX = 1 << 4, CLIPBOARD_READ_WRITE = 1 << 5, - CLIPBOARD_SANITIZED_WRITE = 1 << 6, + CLIPBOARD_SANITIZED_WRITE = 1 << 6, + SENSORS = 1 << 7, }; /** diff --git a/ohos_interface/ohos_glue/BUILD_webcore.gn b/ohos_interface/ohos_glue/BUILD_webcore.gn index 9e56406b..c8201e33 100644 --- a/ohos_interface/ohos_glue/BUILD_webcore.gn +++ b/ohos_interface/ohos_glue/BUILD_webcore.gn @@ -647,6 +647,10 @@ component("ohos_adapter_glue_source") { "ohos_adapter/bridge/ark_screen_capture_callback_adapter_impl.h", "ohos_adapter/bridge/ark_screen_capture_config_adapter_impl.cpp", "ohos_adapter/bridge/ark_screen_capture_config_adapter_impl.h", + "ohos_adapter/bridge/ark_sensor_adapter_wrapper.cpp", + "ohos_adapter/bridge/ark_sensor_adapter_wrapper.h", + "ohos_adapter/bridge/ark_sensor_callback_adapter_impl.cpp", + "ohos_adapter/bridge/ark_sensor_callback_adapter_impl.h", "ohos_adapter/bridge/ark_soc_perf_client_adapter_wrapper.cpp", "ohos_adapter/bridge/ark_soc_perf_client_adapter_wrapper.h", "ohos_adapter/bridge/ark_surface_buffer_adapter_wrapper.cpp", @@ -775,6 +779,8 @@ component("ohos_adapter_glue_source") { "ohos_adapter/cpptoc/ark_screen_capture_callback_adapter_cpptoc.h", "ohos_adapter/cpptoc/ark_screen_capture_config_adapter_cpptoc.cpp", "ohos_adapter/cpptoc/ark_screen_capture_config_adapter_cpptoc.h", + "ohos_adapter/cpptoc/ark_sensor_callback_adapter_cpptoc.cpp", + "ohos_adapter/cpptoc/ark_sensor_callback_adapter_cpptoc.h", "ohos_adapter/cpptoc/ark_timezone_event_callback_adapter_cpptoc.cpp", "ohos_adapter/cpptoc/ark_timezone_event_callback_adapter_cpptoc.h", "ohos_adapter/cpptoc/ark_video_capture_info_adapter_cpptoc.cpp", @@ -919,6 +925,8 @@ component("ohos_adapter_glue_source") { "ohos_adapter/ctocpp/ark_running_lock_adapter_ctocpp.h", "ohos_adapter/ctocpp/ark_screen_capture_adapter_ctocpp.cpp", "ohos_adapter/ctocpp/ark_screen_capture_adapter_ctocpp.h", + "ohos_adapter/ctocpp/ark_sensor_adapter_ctocpp.cpp", + "ohos_adapter/ctocpp/ark_sensor_adapter_ctocpp.h", "ohos_adapter/ctocpp/ark_soc_perf_client_adapter_ctocpp.cpp", "ohos_adapter/ctocpp/ark_soc_perf_client_adapter_ctocpp.h", "ohos_adapter/ctocpp/ark_surface_buffer_adapter_ctocpp.cpp", diff --git a/ohos_interface/ohos_glue/base/include/ark_web_bridge_types.h b/ohos_interface/ohos_glue/base/include/ark_web_bridge_types.h index 7507c246..66af6e05 100644 --- a/ohos_interface/ohos_glue/base/include/ark_web_bridge_types.h +++ b/ohos_interface/ohos_glue/base/include/ark_web_bridge_types.h @@ -243,6 +243,8 @@ enum ArkWebBridgeType { ARK_AAFWK_BROWSER_CLIENT_ADAPTER = 10127, ARK_AAFWK_BROWSER_HOST_ADAPTER = 10128, ARK_AUDIO_OUTPUT_CHANGE_CALLBACK_ADAPTER = 10129, + ARK_SENSOR_ADAPTER = 10130, + ARK_SENSOR_CALLBACK_ADAPTER = 10131, /*Note: Only add an enum value before ARK_WEB_BRIDGE_BUTT*/ ARK_WEB_BRIDGE_BUTT diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_ohos_adapter_helper_wrapper.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_ohos_adapter_helper_wrapper.cpp index 45706409..6d4ae170 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_ohos_adapter_helper_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_ohos_adapter_helper_wrapper.cpp @@ -57,6 +57,7 @@ #include "ohos_adapter/bridge/ark_print_manager_adapter_wrapper.h" #include "ohos_adapter/bridge/ark_running_lock_adapter_wrapper.h" #include "ohos_adapter/bridge/ark_screen_capture_adapter_wrapper.h" +#include "ohos_adapter/bridge/ark_sensor_adapter_wrapper.h" #include "ohos_adapter/bridge/ark_soc_perf_client_adapter_wrapper.h" #include "ohos_adapter/bridge/ark_surface_buffer_adapter_wrapper.h" #include "ohos_adapter/bridge/ark_system_properties_adapter_wrapper.h" @@ -448,4 +449,14 @@ std::unique_ptr ArkOhosAdapterHelperWrapper::Crea return std::make_unique(adapter); } +std::unique_ptr ArkOhosAdapterHelperWrapper::CreateSensorAdapter() +{ + ArkWebRefPtr adapter = ctocpp_->CreateSensorAdapter(); + + if (CHECK_REF_PTR_IS_NULL(adapter)) { + return nullptr; + } + + return std::make_unique(adapter); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_ohos_adapter_helper_wrapper.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_ohos_adapter_helper_wrapper.h index 85af3fee..398b8b28 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_ohos_adapter_helper_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_ohos_adapter_helper_wrapper.h @@ -108,6 +108,8 @@ public: std::unique_ptr CreateOhosImageDecoderAdapter() override; + std::unique_ptr CreateSensorAdapter() override; + private: ArkWebRefPtr ctocpp_; }; diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_adapter_wrapper.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_adapter_wrapper.cpp new file mode 100644 index 00000000..0f1765b9 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_adapter_wrapper.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ohos_adapter/bridge/ark_sensor_adapter_wrapper.h" + +#include "ohos_adapter/bridge/ark_sensor_callback_adapter_impl.h" + +#include "base/bridge/ark_web_bridge_macros.h" + +namespace OHOS::ArkWeb { + +ArkSensorAdapterWrapper::ArkSensorAdapterWrapper(ArkWebRefPtr ref) + : ctocpp_(ref) +{} + +int32_t ArkSensorAdapterWrapper::IsOhosSensorSupported(int32_t sensorTypeId) +{ + return ctocpp_->IsOhosSensorSupported(sensorTypeId); +} + +int32_t ArkSensorAdapterWrapper::GetOhosSensorReportingMode(int32_t sensorTypeId) +{ + return ctocpp_->GetOhosSensorReportingMode(sensorTypeId); +} + +double ArkSensorAdapterWrapper::GetOhosSensorDefaultSupportedFrequency(int32_t sensorTypeId) +{ + return ctocpp_->GetOhosSensorDefaultSupportedFrequency(sensorTypeId); +} + +double ArkSensorAdapterWrapper::GetOhosSensorMinSupportedFrequency(int32_t sensorTypeId) +{ + return ctocpp_->GetOhosSensorMinSupportedFrequency(sensorTypeId); +} + +double ArkSensorAdapterWrapper::GetOhosSensorMaxSupportedFrequency(int32_t sensorTypeId) +{ + return ctocpp_->GetOhosSensorMaxSupportedFrequency(sensorTypeId); +} + +int32_t ArkSensorAdapterWrapper::SubscribeOhosSensor(int32_t sensorTypeId, int64_t samplingInterval) +{ + return ctocpp_->SubscribeOhosSensor(sensorTypeId, samplingInterval); +} + +int32_t ArkSensorAdapterWrapper::UnsubscribeOhosSensor(int32_t sensorTypeId) +{ + return ctocpp_->UnsubscribeOhosSensor(sensorTypeId); +} + +int32_t ArkSensorAdapterWrapper::RegistOhosSensorCallback(int32_t sensorTypeId, + std::shared_ptr callbackAdapter) +{ + if (CHECK_SHARED_PTR_IS_NULL(callbackAdapter)) { + return ctocpp_->RegistOhosSensorCallback(-1, nullptr); + } + + return ctocpp_->RegistOhosSensorCallback(sensorTypeId, + new ArkSensorCallbackAdapterImpl(callbackAdapter)); +} +} // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_adapter_wrapper.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_adapter_wrapper.h new file mode 100644 index 00000000..8db4f15e --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_adapter_wrapper.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARK_SENSOR_ADAPTER_WRAPPER_H +#define ARK_SENSOR_ADAPTER_WRAPPER_H +#pragma once + +#include "sensor_adapter.h" +#include "ohos_adapter/include/ark_sensor_adapter.h" + +namespace OHOS::ArkWeb { + +class ArkSensorAdapterWrapper : public OHOS::NWeb::SensorAdapter { +public: + ArkSensorAdapterWrapper(ArkWebRefPtr); + + int32_t IsOhosSensorSupported(int32_t sensorTypeId) override; + int32_t GetOhosSensorReportingMode(int32_t sensorTypeId) override; + double GetOhosSensorDefaultSupportedFrequency(int32_t sensorTypeId) override; + double GetOhosSensorMinSupportedFrequency(int32_t sensorTypeId) override; + double GetOhosSensorMaxSupportedFrequency(int32_t sensorTypeId) override; + int32_t SubscribeOhosSensor(int32_t sensorTypeId, int64_t samplingInterval) override; + int32_t RegistOhosSensorCallback(int32_t sensorTypeId, + std::shared_ptr callbackAdapter) override; + int32_t UnsubscribeOhosSensor(int32_t sensorTypeId) override; + +private: + ArkWebRefPtr ctocpp_; +}; + +} // namespace OHOS::ArkWeb + +#endif // ARK_SENSOR_ADAPTER_WRAPPER_H diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_callback_adapter_impl.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_callback_adapter_impl.cpp new file mode 100644 index 00000000..1714e840 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_callback_adapter_impl.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ohos_adapter/bridge/ark_sensor_callback_adapter_impl.h" + +namespace OHOS::ArkWeb { + +ArkSensorCallbackAdapterImpl::ArkSensorCallbackAdapterImpl( + std::shared_ptr ref) + : real_(ref) +{} + +void ArkSensorCallbackAdapterImpl::UpdateOhosSensorData(double timestamp, + double value1, double value2, double value3, double value4) +{ + real_->UpdateOhosSensorData(timestamp, value1, value2, value3, value4); +} +} // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_callback_adapter_impl.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_callback_adapter_impl.h new file mode 100644 index 00000000..0bca27d8 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_sensor_callback_adapter_impl.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARK_SENSOR_CALLBACK_ADAPTER_IMPL_H +#define ARK_SENSOR_CALLBACK_ADAPTER_IMPL_H +#pragma once + +#include "sensor_adapter.h" +#include "ohos_adapter/include/ark_sensor_adapter.h" + +namespace OHOS::ArkWeb { + +class ArkSensorCallbackAdapterImpl : public ArkSensorCallbackAdapter { +public: + ArkSensorCallbackAdapterImpl(std::shared_ptr); + + void UpdateOhosSensorData(double timestamp, + double value1, double value2, double value3, double value4) override; + +private: + std::shared_ptr real_; + + IMPLEMENT_REFCOUNTING(ArkSensorCallbackAdapterImpl); +}; + +} // namespace OHOS::ArkWeb + +#endif // ARK_SENSOR_CALLBACK_ADAPTER_IMPL_H diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_ohos_adapter_helper_impl.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_ohos_adapter_helper_impl.cpp index fb8d79ff..e52ff0a7 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_ohos_adapter_helper_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_ohos_adapter_helper_impl.cpp @@ -68,7 +68,7 @@ #include "ohos_adapter/bridge/ark_vsync_adapter_impl.h" #include "ohos_adapter/bridge/ark_web_date_timezone_info_impl.h" #include "ohos_adapter/bridge/ark_window_adapter_impl.h" - +#include "ohos_adapter/bridge/ark_sensor_adapter_impl.h" #include "base/bridge/ark_web_bridge_macros.h" namespace OHOS::ArkWeb { @@ -371,4 +371,10 @@ ArkWebRefPtr ArkOhosAdapterHelperImpl::CreateOhosIma return new ArkOhosImageDecoderAdapterImpl(shared); } +ArkWebRefPtr ArkOhosAdapterHelperImpl::CreateSensorAdapter() +{ + std::unique_ptr adapter = real_.CreateSensorAdapter(); + std::shared_ptr shared = std::move(adapter); + return new ArkSensorAdapterImpl(shared); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_ohos_adapter_helper_impl.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_ohos_adapter_helper_impl.h index 2ab29309..a29b699d 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_ohos_adapter_helper_impl.h +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_ohos_adapter_helper_impl.h @@ -108,6 +108,8 @@ public: ArkWebRefPtr CreateOhosImageDecoderAdapter() override; + ArkWebRefPtr CreateSensorAdapter() override; + private: NWeb::OhosAdapterHelper& real_; diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_adapter_impl.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_adapter_impl.cpp new file mode 100644 index 00000000..472ef827 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_adapter_impl.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ohos_adapter/bridge/ark_sensor_adapter_impl.h" + +#include "ohos_adapter/bridge/ark_sensor_callback_adapter_wrapper.h" + +#include "base/bridge/ark_web_bridge_macros.h" + +namespace OHOS::ArkWeb { + +ArkSensorAdapterImpl::ArkSensorAdapterImpl(std::shared_ptr ref) + : real_(ref) +{} + +int32_t ArkSensorAdapterImpl::IsOhosSensorSupported(int32_t type) +{ + return real_->IsOhosSensorSupported(type); +} + +int32_t ArkSensorAdapterImpl::GetOhosSensorReportingMode(int32_t type) +{ + return real_->GetOhosSensorReportingMode(type); +} + +double ArkSensorAdapterImpl::GetOhosSensorDefaultSupportedFrequency(int32_t type) +{ + return real_->GetOhosSensorDefaultSupportedFrequency(type); +} + +double ArkSensorAdapterImpl::GetOhosSensorMinSupportedFrequency(int32_t type) +{ + return real_->GetOhosSensorMinSupportedFrequency(type); +} + +double ArkSensorAdapterImpl::GetOhosSensorMaxSupportedFrequency(int32_t type) +{ + return real_->GetOhosSensorMaxSupportedFrequency(type); +} + +int32_t ArkSensorAdapterImpl::SubscribeOhosSensor(int32_t type, int64_t samplingInterval) +{ + return real_->SubscribeOhosSensor(type, samplingInterval); +} + +int32_t ArkSensorAdapterImpl::RegistOhosSensorCallback(int32_t sensorTypeId, + ArkWebRefPtr callbackAdapter) +{ + if (!(CHECK_REF_PTR_IS_NULL(callbackAdapter))) { + return real_->RegistOhosSensorCallback(sensorTypeId, + std::make_shared(callbackAdapter)); + } + return false; +} + +int32_t ArkSensorAdapterImpl::UnsubscribeOhosSensor(int32_t type) +{ + return real_->UnsubscribeOhosSensor(type); +} + +} // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_adapter_impl.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_adapter_impl.h new file mode 100644 index 00000000..f1188031 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_adapter_impl.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARK_SENSOR_ADAPTER_IMPL_H +#define ARK_SENSOR_ADAPTER_IMPL_H +#pragma once + +#include "sensor_adapter.h" +#include "ohos_adapter/include/ark_sensor_adapter.h" + +namespace OHOS::ArkWeb { + +class ArkSensorAdapterImpl : public ArkSensorAdapter { +public: + ArkSensorAdapterImpl(std::shared_ptr); + + int32_t IsOhosSensorSupported(int32_t sensorTypeId) override; + + int32_t GetOhosSensorReportingMode(int32_t type) override; + + double GetOhosSensorDefaultSupportedFrequency(int32_t sensorTypeId) override; + + double GetOhosSensorMinSupportedFrequency(int32_t sensorTypeId) override; + + double GetOhosSensorMaxSupportedFrequency(int32_t sensorTypeId) override; + + int32_t SubscribeOhosSensor(int32_t sensorTypeId, int64_t samplingInterval) override; + + int32_t RegistOhosSensorCallback(int32_t sensorTypeId, + ArkWebRefPtr callbackAdapter) override; + + int32_t UnsubscribeOhosSensor(int32_t sensorTypeId) override; + +private: + std::shared_ptr real_; + + IMPLEMENT_REFCOUNTING(ArkSensorAdapterImpl); +}; + +} // namespace OHOS::ArkWeb + +#endif // ARK_SENSOR_ADAPTER_IMPL_H diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_callback_adapter_wrapper.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_callback_adapter_wrapper.cpp new file mode 100644 index 00000000..4d917c67 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_callback_adapter_wrapper.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ohos_adapter/bridge/ark_sensor_callback_adapter_wrapper.h" + +#include "base/bridge/ark_web_bridge_macros.h" + +namespace OHOS::ArkWeb { +ArkSensorCallbackAdapterWrapper::ArkSensorCallbackAdapterWrapper( + ArkWebRefPtr ref) + : ctocpp_(ref) +{} + +void ArkSensorCallbackAdapterWrapper::UpdateOhosSensorData(double timestamp, + double value1, double value2, double value3, double value4) +{ + ctocpp_->UpdateOhosSensorData(timestamp, value1, value2, value3, value4); +} +} // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_callback_adapter_wrapper.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_callback_adapter_wrapper.h new file mode 100644 index 00000000..a30160c2 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_sensor_callback_adapter_wrapper.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARK_SENSOR_CALLBACK_ADAPTER_WRAPPER_H +#define ARK_SENSOR_CALLBACK_ADAPTER_WRAPPER_H +#pragma once + +#include "sensor_adapter.h" +#include "ohos_adapter/include/ark_sensor_adapter.h" + +namespace OHOS::ArkWeb { + +class ArkSensorCallbackAdapterWrapper : public OHOS::NWeb::SensorCallbackAdapter { +public: + ArkSensorCallbackAdapterWrapper(ArkWebRefPtr); + + void UpdateOhosSensorData(double timestamp, + double value1, double value2, double value3, double value4) override; + +private: + ArkWebRefPtr ctocpp_; +}; + +} // namespace OHOS::ArkWeb + +#endif // ARK_SENSOR_CALLBACK_ADAPTER_WRAPPER_H diff --git a/ohos_interface/ohos_glue/ohos_adapter/include/ark_ohos_adapter_helper.h b/ohos_interface/ohos_glue/ohos_adapter/include/ark_ohos_adapter_helper.h index edd90eff..61b9e134 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/include/ark_ohos_adapter_helper.h +++ b/ohos_interface/ohos_glue/ohos_adapter/include/ark_ohos_adapter_helper.h @@ -53,6 +53,7 @@ #include "ohos_adapter/include/ark_screen_capture_adapter.h" #include "ohos_adapter/include/ark_soc_perf_client_adapter.h" #include "ohos_adapter/include/ark_system_properties_adapter.h" +#include "ohos_adapter/include/ark_sensor_adapter.h" namespace OHOS::ArkWeb { @@ -184,6 +185,9 @@ public: /*--ark web()--*/ virtual ArkWebRefPtr CreateOhosImageDecoderAdapter() = 0; + + /*--ark web()--*/ + virtual ArkWebRefPtr CreateSensorAdapter() = 0; }; } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/include/ark_sensor_adapter.h b/ohos_interface/ohos_glue/ohos_adapter/include/ark_sensor_adapter.h new file mode 100644 index 00000000..32a83406 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/include/ark_sensor_adapter.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARK_SENSOR_ADAPTER_H +#define ARK_SENSOR_ADAPTER_H +#pragma once + +#include "base/include/ark_web_base_ref_counted.h" +#include "base/include/ark_web_types.h" + +namespace OHOS::ArkWeb { + +/*--ark web(source=webcore)--*/ +class ArkSensorCallbackAdapter : public virtual ArkWebBaseRefCounted { +public: + /*--ark web()--*/ + virtual void UpdateOhosSensorData(double timestamp, + double value1, double value2, double value3, double value4) = 0; +}; + +/*--ark web(source=webview)--*/ +class ArkSensorAdapter : public virtual ArkWebBaseRefCounted { +public: + /*--ark web()--*/ + virtual int32_t IsOhosSensorSupported(int32_t sensorTypeId) = 0; + + /*--ark web()--*/ + virtual int32_t GetOhosSensorReportingMode(int32_t type) = 0; + + /*--ark web()--*/ + virtual double GetOhosSensorDefaultSupportedFrequency(int32_t sensorTypeId) = 0; + + /*--ark web()--*/ + virtual double GetOhosSensorMinSupportedFrequency(int32_t sensorTypeId) = 0; + + /*--ark web()--*/ + virtual double GetOhosSensorMaxSupportedFrequency(int32_t sensorTypeId) = 0; + + /*--ark web()--*/ + virtual int32_t SubscribeOhosSensor(int32_t sensorTypeId, int64_t samplingInterval) = 0; + + /*--ark web()--*/ + virtual int32_t RegistOhosSensorCallback(int32_t sensorTypeId, + ArkWebRefPtr callbackAdapter) = 0; + + /*--ark web()--*/ + virtual int32_t UnsubscribeOhosSensor(int32_t sensorTypeId) = 0; +}; + +} // namespace OHOS::ArkWeb + +#endif // ARK_SENSOR_ADAPTER_H -- Gitee From 608f6a2a83f508b552ea4c644a7d83290725c4d1 Mon Sep 17 00:00:00 2001 From: jidehong Date: Thu, 4 Jul 2024 15:08:14 +0800 Subject: [PATCH 10/50] =?UTF-8?q?openssl/ssl.h=E6=98=BE=E5=BC=8F=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jidehong --- bundle.json | 4 ++-- ohos_adapter/BUILD.gn | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bundle.json b/bundle.json index 068d0402..496eeb4c 100644 --- a/bundle.json +++ b/bundle.json @@ -76,8 +76,8 @@ "window_manager", "netstack", "protobuf", - "libxml2" - + "libxml2", + "openssl" ], "third_party": [ "chromium", diff --git a/ohos_adapter/BUILD.gn b/ohos_adapter/BUILD.gn index 2b0e2b7f..6255f152 100644 --- a/ohos_adapter/BUILD.gn +++ b/ohos_adapter/BUILD.gn @@ -149,6 +149,7 @@ ohos_shared_library("nweb_ohos_adapter") { "samgr:samgr_proxy", "time_service:time_client", "window_manager:libdm", + "openssl" ] if (webview_soc_perf_enable) { -- Gitee From ff9da6a258e20babed88988fafaad8a9ca04be11 Mon Sep 17 00:00:00 2001 From: jidehong Date: Thu, 4 Jul 2024 15:25:58 +0800 Subject: [PATCH 11/50] =?UTF-8?q?openssl/ssl.h=E6=98=BE=E5=BC=8F=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jidehong --- ohos_adapter/BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ohos_adapter/BUILD.gn b/ohos_adapter/BUILD.gn index 6255f152..eb9d74d7 100644 --- a/ohos_adapter/BUILD.gn +++ b/ohos_adapter/BUILD.gn @@ -149,7 +149,7 @@ ohos_shared_library("nweb_ohos_adapter") { "samgr:samgr_proxy", "time_service:time_client", "window_manager:libdm", - "openssl" + "openssl:libssl_shared" ] if (webview_soc_perf_enable) { -- Gitee From cf16a5094a26a17e79adfad3c05dc25341cbf9b6 Mon Sep 17 00:00:00 2001 From: ZhaoPengfei Date: Thu, 4 Jul 2024 15:33:59 +0800 Subject: [PATCH 12/50] =?UTF-8?q?=E5=8F=96=E6=B6=88webview=E9=BB=98?= =?UTF-8?q?=E8=AE=A4120fps=E5=B8=A7=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ZhaoPengfei --- ohos_adapter/graphic_adapter/src/vsync_adapter_impl.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ohos_adapter/graphic_adapter/src/vsync_adapter_impl.cpp b/ohos_adapter/graphic_adapter/src/vsync_adapter_impl.cpp index 4b79df9c..0a7c3f8e 100644 --- a/ohos_adapter/graphic_adapter/src/vsync_adapter_impl.cpp +++ b/ohos_adapter/graphic_adapter/src/vsync_adapter_impl.cpp @@ -170,12 +170,11 @@ void VSyncAdapterImpl::SetFrameRateLinkerEnable(bool enabled) return; } - Rosen::FrameRateRange range = {0, RANGE_MAX_REFRESHRATE, 120, WEBVIEW_FRAME_RATE_TYPE}; if (frameRateLinker_) { if (!enabled) { - range = {0, RANGE_MAX_REFRESHRATE, 0, WEBVIEW_FRAME_RATE_TYPE}; + Rosen::FrameRateRange range = {0, RANGE_MAX_REFRESHRATE, 0, WEBVIEW_FRAME_RATE_TYPE}; + frameRateLinker_->UpdateFrameRateRangeImme(range); } - frameRateLinker_->UpdateFrameRateRangeImme(range); frameRateLinker_->SetEnable(enabled); frameRateLinkerEnable_ = enabled; } -- Gitee From cc50784be17cff7c63013b9c8a2b4f513146aaa6 Mon Sep 17 00:00:00 2001 From: zhangyanchuan Date: Tue, 2 Jul 2024 20:47:35 +0800 Subject: [PATCH 13/50] =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=89=98=E7=AE=A1?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=BF=9BBFCache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangyanchuan --- .../webviewcontroller/napi_native_media_player.cpp | 10 ++++++---- .../webviewcontroller/native_media_player_impl.cpp | 2 +- .../include/ohos_nweb/nweb_native_media_player.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/interfaces/kits/napi/webviewcontroller/napi_native_media_player.cpp b/interfaces/kits/napi/webviewcontroller/napi_native_media_player.cpp index a49293da..9251d793 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_native_media_player.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_native_media_player.cpp @@ -40,6 +40,8 @@ void NapiNativeMediaPlayerHandler::Init(napi_env env, napi_value value) NAPI_CALL_RETURN_VOID(env, ExportEnumReadyState(env, &value)); + NAPI_CALL_RETURN_VOID(env, ExportEnumSuspendType(env, &value)); + NAPI_CALL_RETURN_VOID(env, ExportEnumNetworkState(env, &value)); NAPI_CALL_RETURN_VOID(env, ExportEnumPlaybackStatus(env, &value)); @@ -172,16 +174,16 @@ napi_status NapiNativeMediaPlayerHandler::ExportEnumReadyState(napi_env env, nap napi_status NapiNativeMediaPlayerHandler::ExportEnumSuspendType(napi_env env, napi_value* value) { - WVLOG_D("begin to export enum suspend type state"); + WVLOG_D("begin to export enum suspend type"); const std::string NPI_SUSPEND_TYPE_ENUM_NAME = "SuspendType"; napi_property_descriptor properties[] = { - DECLARE_NAPI_STATIC_PROPERTY( - "EnterBFCache", NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::EnterBFCache))), + DECLARE_NAPI_STATIC_PROPERTY("EnterBackForwardCache", + NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::EnterBackForwardCache))), DECLARE_NAPI_STATIC_PROPERTY( "EnterBackground", NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::EnterBackground))), DECLARE_NAPI_STATIC_PROPERTY( - "PausedOverTime", NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::PausedOverTime))), + "AutoCleanup", NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::AutoCleanup))), }; napi_value enumValue = nullptr; diff --git a/interfaces/kits/napi/webviewcontroller/native_media_player_impl.cpp b/interfaces/kits/napi/webviewcontroller/native_media_player_impl.cpp index ae5aa70a..a0bbf6d4 100644 --- a/interfaces/kits/napi/webviewcontroller/native_media_player_impl.cpp +++ b/interfaces/kits/napi/webviewcontroller/native_media_player_impl.cpp @@ -163,7 +163,7 @@ void NWebNativeMediaPlayerBridgeImpl::SuspendMediaPlayer(SuspendType type) napi_value argv[INTEGER_ONE] = { nullptr }; NAPI_CALL_RETURN_VOID(env_, napi_create_int32(env_, static_cast(type), &argv[INTEGER_ZERO])); - NAPI_CALL_RETURN_VOID(env_, napi_call_function(env_, value_, callback, INTEGER_ZERO, nullptr, nullptr)); + NAPI_CALL_RETURN_VOID(env_, napi_call_function(env_, value_, callback, INTEGER_ONE, argv, nullptr)); } NapiNativeMediaPlayerHandlerImpl::NapiNativeMediaPlayerHandlerImpl( diff --git a/ohos_interface/include/ohos_nweb/nweb_native_media_player.h b/ohos_interface/include/ohos_nweb/nweb_native_media_player.h index 4aa810c1..dffc7eda 100644 --- a/ohos_interface/include/ohos_nweb/nweb_native_media_player.h +++ b/ohos_interface/include/ohos_nweb/nweb_native_media_player.h @@ -31,7 +31,7 @@ enum class MediaError { NETWORK_ERROR = 1, FORMAT_ERROR, DECODE_ERROR }; enum class ReadyState { HAVE_NOTHING = 0, HAVE_METADATA, HAVE_CURRENT_DATA, HAVE_FUTURE_DATA, HAVE_ENOUGH_DATA }; -enum class SuspendType { EnterBFCache = 0, EnterBackground, PausedOverTime }; +enum class SuspendType { EnterBackForwardCache = 0, EnterBackground, AutoCleanup }; enum class NetworkState { EMPTY = 0, IDLE, LOADING, NETWORK_ERROR }; -- Gitee From 07123b2e07797a446dd59903f63bbec91eaeea83 Mon Sep 17 00:00:00 2001 From: lie Date: Thu, 4 Jul 2024 20:01:49 +0800 Subject: [PATCH 14/50] add bfcache status for samelayer Signed-off-by: lie Change-Id: I53e7174efa8622f9fe2ee197e8dbbbb3e89529fb --- ohos_interface/include/ohos_nweb/nweb_handler.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ohos_interface/include/ohos_nweb/nweb_handler.h b/ohos_interface/include/ohos_nweb/nweb_handler.h index f27bea9b..459752ea 100644 --- a/ohos_interface/include/ohos_nweb/nweb_handler.h +++ b/ohos_interface/include/ohos_nweb/nweb_handler.h @@ -213,6 +213,8 @@ enum class NativeEmbedStatus { CREATE, UPDATE, DESTROY, + ENTER_BFCACHE, + LEAVE_BFCACHE, }; enum class NWebFocusSource { -- Gitee From b314ef36ee11ee3c145bc673208e4e31dde9dbc5 Mon Sep 17 00:00:00 2001 From: kirby Date: Fri, 5 Jul 2024 10:35:52 +0800 Subject: [PATCH 15/50] ffi fix codecheck Signed-off-by: kirby --- .../webview_javascript_result_callback.h | 2 +- .../webview_javascript_result_callback.cpp | 64 +++++++++---------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/interfaces/kits/cj/include/webview_javascript_result_callback.h b/interfaces/kits/cj/include/webview_javascript_result_callback.h index bc4c5637..1a313945 100644 --- a/interfaces/kits/cj/include/webview_javascript_result_callback.h +++ b/interfaces/kits/cj/include/webview_javascript_result_callback.h @@ -170,7 +170,7 @@ private: bool ConstructArgv(void* ashmem, std::vector> args, std::vector& argv, std::shared_ptr jsObj, int32_t routingId); - char* FlowbufStrAtIndex(void* mem, int flowbuf_index, int* arg_index, int* str_len); + char* FlowbufStrAtIndex(void* mem, int flowbufIndex, int* argIndex, int* strLen); std::shared_ptr GetJavaScriptResultSelfHelper(std::shared_ptr jsObj, const std::string& method, int32_t routingId, std::vector argv); diff --git a/interfaces/kits/cj/src/webview_javascript_result_callback.cpp b/interfaces/kits/cj/src/webview_javascript_result_callback.cpp index f3ca8d1d..358cbc75 100644 --- a/interfaces/kits/cj/src/webview_javascript_result_callback.cpp +++ b/interfaces/kits/cj/src/webview_javascript_result_callback.cpp @@ -205,37 +205,37 @@ std::shared_ptr WebviewJavaScriptResultCallBackImpl::GetJavaScriptRes } char* WebviewJavaScriptResultCallBackImpl::FlowbufStrAtIndex( - void* mem, int flowbuf_index, int* arg_index, int* str_len) + void* mem, int flowbufIndex, int* argIndex, int* strLen) { int* header = static_cast(mem); // Cast the memory block to int* for easier access int offset = 0; - if (arg_index == nullptr) { + if (argIndex == nullptr) { return nullptr; } - if (flowbuf_index >= MAX_ENTRIES) { - *arg_index = -1; + if (flowbufIndex >= MAX_ENTRIES) { + *argIndex = -1; return nullptr; } - int* entry = header + (flowbuf_index * INDEX_SIZE); + int* entry = header + (flowbufIndex * INDEX_SIZE); if (entry == nullptr) { return nullptr; } if (*(entry + 1) == 0) { // Check if length is 0, indicating unused entry - *arg_index = -1; + *argIndex = -1; return nullptr; } int i = 0; - for (i = 0; i < flowbuf_index; i++) { + for (i = 0; i < flowbufIndex; i++) { offset += *(header + (i * INDEX_SIZE) + 1); } - if (str_len == nullptr) { + if (strLen == nullptr) { return nullptr; } - *str_len = *(header + (i * INDEX_SIZE) + 1) - 1; + *strLen = *(header + (i * INDEX_SIZE) + 1) - 1; - *arg_index = *entry; + *argIndex = *entry; char* dataSegment = static_cast(mem) + HEADER_SIZE; char* currentString = dataSegment + offset; @@ -248,35 +248,35 @@ bool WebviewJavaScriptResultCallBackImpl::ConstructArgv(void* ashmem, std::shared_ptr jsObj, int32_t routingId) { - int arg_index = -1; - int curr_index = 0; - int flowbuf_index = 0; - int str_len = 0; - char* flowbuf_str = FlowbufStrAtIndex(ashmem, flowbuf_index, &arg_index, &str_len); - flowbuf_index++; - while (arg_index == curr_index) { - argv.push_back(std::string(flowbuf_str)); - curr_index ++; - flowbuf_str = FlowbufStrAtIndex(ashmem, flowbuf_index, &arg_index, &str_len); - flowbuf_index++; + int argIndex = -1; + int currIndex = 0; + int flowbufIndex = 0; + int strLen = 0; + char* flowbufStr = FlowbufStrAtIndex(ashmem, flowbufIndex, &argIndex, &strLen); + flowbufIndex++; + while (argIndex == currIndex) { + argv.push_back(std::string(flowbufStr)); + currIndex ++; + flowbufStr = FlowbufStrAtIndex(ashmem, flowbufIndex, &argIndex, &strLen); + flowbufIndex++; } for (std::shared_ptr input : args) { - while (arg_index == curr_index) { - argv.push_back(std::string(flowbuf_str)); - curr_index ++; - flowbuf_str = FlowbufStrAtIndex(ashmem, flowbuf_index, &arg_index, &str_len); - flowbuf_index++; + while (argIndex == currIndex) { + argv.push_back(std::string(flowbufStr)); + currIndex ++; + flowbufStr = FlowbufStrAtIndex(ashmem, flowbufIndex, &argIndex, &strLen); + flowbufIndex++; } argv.push_back(input->GetString()); - curr_index++; + currIndex++; } - while (arg_index == curr_index) { - argv.push_back(std::string(flowbuf_str)); - curr_index ++; - flowbuf_str = FlowbufStrAtIndex(ashmem, flowbuf_index, &arg_index, &str_len); - flowbuf_index++; + while (argIndex == currIndex) { + argv.push_back(std::string(flowbufStr)); + currIndex ++; + flowbufStr = FlowbufStrAtIndex(ashmem, flowbufIndex, &argIndex, &strLen); + flowbufIndex++; } return true; } -- Gitee From 96c0160fce97f2048ee974fb40efb79fa82bcad9 Mon Sep 17 00:00:00 2001 From: hwchenhongyu Date: Fri, 5 Jul 2024 02:29:37 +0000 Subject: [PATCH 16/50] change tags to uint Signed-off-by: hwchenhongyu --- ohos_adapter/hiviewdfx_adapter/src/hitrace_adapter_impl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ohos_adapter/hiviewdfx_adapter/src/hitrace_adapter_impl.cpp b/ohos_adapter/hiviewdfx_adapter/src/hitrace_adapter_impl.cpp index 27ef05c3..8b9a6b36 100644 --- a/ohos_adapter/hiviewdfx_adapter/src/hitrace_adapter_impl.cpp +++ b/ohos_adapter/hiviewdfx_adapter/src/hitrace_adapter_impl.cpp @@ -62,7 +62,7 @@ bool HiTraceAdapterImpl::IsHiTraceEnable() static CachedHandle g_Handle = CachedParameterCreate("debug.hitrace.tags.enableflags", "0"); int changed = 0; const char *enable = CachedParameterGetChanged(g_Handle, &changed); - auto tags = ConvertToInt(enable, 0); + uint64_t tags = static_cast(ConvertToInt(enable, 0)); firstAceEnable_ = tags & HITRACE_TAG_ACE; return (tags & HITRACE_TAG_NWEB); } -- Gitee From feabfcc6f0feb0d3c572759ed10f4436d9f9aef5 Mon Sep 17 00:00:00 2001 From: zhengenhao0 Date: Fri, 5 Jul 2024 14:17:42 +0800 Subject: [PATCH 17/50] update NWeb.hap in master to 0705 Signed-off-by: zhengenhao0 --- ohos_nweb/prebuilts/arm/NWeb.hap | 4 ++-- ohos_nweb/prebuilts/arm64/NWeb.hap | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ohos_nweb/prebuilts/arm/NWeb.hap b/ohos_nweb/prebuilts/arm/NWeb.hap index ac7f3c56..2916f731 100644 --- a/ohos_nweb/prebuilts/arm/NWeb.hap +++ b/ohos_nweb/prebuilts/arm/NWeb.hap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd59e132e126e3df85c2b1f6123c46e32c8d60f4093451172fb9d19cef01c7b5 -size 79363768 +oid sha256:98f54394d9240f9a37c4fef8f799fe876aac74a86d70a74eba262ca59931dbda +size 79497971 diff --git a/ohos_nweb/prebuilts/arm64/NWeb.hap b/ohos_nweb/prebuilts/arm64/NWeb.hap index 3ea02155..da5358b4 100644 --- a/ohos_nweb/prebuilts/arm64/NWeb.hap +++ b/ohos_nweb/prebuilts/arm64/NWeb.hap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4ed361a5946db6afb8e9d6b894c7e1e368d483b5f7b083da80469e668788589 -size 90156696 +oid sha256:bb1c4bf27de592f9096fcc03d95ac5213ab388d144783ee326df17ac586f59bb +size 90255633 -- Gitee From 2eb396e916e9b5b368f8f65dbf5bb1fd2edcca07 Mon Sep 17 00:00:00 2001 From: gaojianhao1 Date: Fri, 5 Jul 2024 15:50:20 +0800 Subject: [PATCH 18/50] Add interface enableBackForwardCache and setBackForwardCacheOptions. Signed-off-by: gaojianhao1 --- .../back_forward_cache_options.cpp | 14 +++- .../back_forward_cache_options.h | 10 ++- .../napi_back_forward_cache_options.cpp | 10 +-- .../napi_back_forward_cache_options.h | 2 +- .../napi_webview_controller.cpp | 73 +++++++------------ .../bridge/webcore/ark_web_engine_impl.h | 2 +- ohos_nweb/include/nweb_helper.h | 2 + ohos_nweb/src/nweb_helper.cpp | 12 ++- 8 files changed, 60 insertions(+), 65 deletions(-) diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp index d8b61a59..7945a393 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp @@ -38,6 +38,16 @@ int32_t BackForwardCacheOptions::GetTimeToLive() return timeToLive_; } +static int32_t BackForwardCacheOptions::GetDefaultSize() +{ + return default_size_; +} + +static int32_t BackForwardCacheOptions::GetDefaultTimeToLive() +{ + return default_time_to_live_; +} + BackForwardCacheSupportFeatures::BackForwardCacheSupportFeatures() { WVLOG_D("Created a BackForwardCacheSupportFeatures class."); @@ -48,9 +58,9 @@ bool BackForwardCacheSupportFeatures::IsEnableNativeEmbed() return nativeEmbed_; } -bool BackForwardCacheSupportFeatures::IsEnableMediaIntercept() +bool BackForwardCacheSupportFeatures::isEnableMediaTakeOver() { - return mediaIntercept_; + return mediaTakeOver_; } } \ No newline at end of file diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h index e9eca1d8..0c54d321 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h @@ -30,21 +30,25 @@ public: BackForwardCacheOptions(); int32_t GetSize(); int32_t GetTimeToLive(); + static int32_t GetDefaultSize(); + static int32_t GetDefaultTimeToLive(); private: int32_t size_ = 1; int32_t timeToLive_ = 600; + int32_t default_size_ = 1; + int32_t default_time_to_live_ = 600; }; class BackForwardCacheSupportFeatures { public: BackForwardCacheSupportFeatures(); bool IsEnableNativeEmbed(); - bool IsEnableMediaIntercept(); + bool isEnableMediaTakeOver(); private: - bool nativeEmbed_ = true; - bool mediaIntercept_ = true; + bool nativeEmbed_ = false; + bool mediaTakeOver_ = false; }; } diff --git a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp index 2751af4c..c43df7d4 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp @@ -80,25 +80,25 @@ napi_value NapiBackForwardCacheSupportFeatures::JS_Constructor(napi_env env, nap napi_value NapiBackForwardCacheOptions::JS_GetSize(napi_env env, napi_callback_info info) { - WVLOG_D("NapiBackForwardCacheOptions::JS_GetSize"); + WVLOG_D("NapiBackForwardCacheOptions::JS_GetSize."); return nullptr; } napi_value NapiBackForwardCacheOptions::JS_GetTimeToLive(napi_env env, napi_callback_info info) { - WVLOG_D("NapiBackForwardCacheOptions::JS_GetTimeToLive"); + WVLOG_D("NapiBackForwardCacheOptions::JS_GetTimeToLive."); return nullptr; } napi_value NapiBackForwardCacheSupportFeatures::JS_IsEnableNativeEmbed(napi_env env, napi_callback_info info) { - WVLOG_D("NapiBackForwardCacheSupportFeatures::JS_IsEnableNativeEmbed"); + WVLOG_D("NapiBackForwardCacheSupportFeatures::JS_IsEnableNativeEmbed."); return nullptr; } -napi_value NapiBackForwardCacheSupportFeatures::JS_IsEnableMediaIntercept(napi_env env, napi_callback_info info) +napi_value NapiBackForwardCacheSupportFeatures::JS_IsEnableMediaTakeOver(napi_env env, napi_callback_info info) { - WVLOG_D("NapiBackForwardCacheSupportFeatures::JS_IsEnableMediaIntercept"); + WVLOG_D("NapiBackForwardCacheSupportFeatures::JS_IsEnableMediaTakeOver."); return nullptr; } diff --git a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h index 41e3d497..68e3eaa5 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h +++ b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h @@ -45,7 +45,7 @@ public: static napi_value Init(napi_env env, napi_value exports); static napi_value JS_Constructor(napi_env env, napi_callback_info info); static napi_value JS_IsEnableNativeEmbed(napi_env env, napi_callback_info info); - static napi_value JS_IsEnableMediaIntercept(napi_env env, napi_callback_info info); + static napi_value JS_IsEnableMediaTakeOver(napi_env env, napi_callback_info info); }; } diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp index e676a922..66a2ee97 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp @@ -5494,8 +5494,8 @@ napi_value NapiWebviewController::EnableBackForwardCache(napi_env env, napi_call napi_get_undefined(env, &result); napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr); if (argc != INTEGER_ONE) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_NUMBERS_ERROR_ONE, "one")); + NWebHelper::Instance().EnableBackForwardCache(false, false); + NAPI_CALL(env, napi_get_undefined(env, &result)); return result; } @@ -5503,26 +5503,16 @@ napi_value NapiWebviewController::EnableBackForwardCache(napi_env env, napi_call bool mediaTakeOver = false; napi_value embedObj = nullptr; napi_value mediaObj = nullptr; - if (napi_get_named_property(env, argv[INTEGER_ZERO], "nativeEmbed", &embedObj) != napi_ok) { - WVLOG_E("Failed to get BackForwardCacheOptions nativeEmbed value."); - return result; - } - - if (!NapiParseUtils::ParseBoolean(env, embedObj, nativeEmbed)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "nativeEmbed", "bool")); - return result; + if (napi_get_named_property(env, argv[INTEGER_ZERO], "nativeEmbed", &embedObj) == napi_ok) { + if (!NapiParseUtils::ParseBoolean(env, embedObj, nativeEmbed)) { + nativeEmbed = false; + } } if (napi_get_named_property(env, argv[INTEGER_ZERO], "mediaTakeOver", &mediaObj) != napi_ok) { - WVLOG_E("Failed to get BackForwardCacheOptions mediaTakeOver value."); - return result; - } - - if (!NapiParseUtils::ParseBoolean(env, mediaObj, mediaTakeOver)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "mediaTakeOver", "bool")); - return result; + if (!NapiParseUtils::ParseBoolean(env, mediaObj, mediaTakeOver)) { + mediaTakeOver = false; + } } NWebHelper::Instance().EnableBackForwardCache(nativeEmbed, mediaTakeOver); @@ -5538,9 +5528,17 @@ napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_ napi_value argv[INTEGER_ONE] = { 0 }; napi_get_undefined(env, &result); napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr); + WebviewController* webviewController = GetWebviewController(env, info); + if (!webviewController) { + WVLOG_E("InjectOfflineResource: init webview controller error."); + BusinessError::ThrowErrorByErrcode(env, INIT_ERROR); + return result; + } + if (argc != INTEGER_ONE) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::PARAM_NUMBERS_ERROR_ONE, "one")); + webviewController->SetBackForwardCacheOptions( + BackForwardCacheOptions::GetDefaultSize(), BackForwardCacheOptions::GetDefaultTimeToLive()); + NAPI_CALL(env, napi_get_undefined(env, &result)); return result; } @@ -5548,33 +5546,16 @@ napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_ int32_t timeToLive = 600; napi_value sizeObj = nullptr; napi_value timeToLiveObj = nullptr; - if (napi_get_named_property(env, argv[INTEGER_ZERO], "size", &sizeObj) != napi_ok) { - WVLOG_E("Failed to get BackForwardCacheOptions size value."); - return result; - } - - if (!NapiParseUtils::ParseInt32(env, sizeObj, size)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "size", "int")); - return result; + if (napi_get_named_property(env, argv[INTEGER_ZERO], "size", &sizeObj) == napi_ok) { + if (!NapiParseUtils::ParseInt32(env, sizeObj, size)) { + size = BackForwardCacheOptions::GetDefaultSize(); + } } - if (napi_get_named_property(env, argv[INTEGER_ZERO], "timeToLive", &timeToLiveObj) != napi_ok) { - WVLOG_E("Failed to get BackForwardCacheOptions timeToLive value."); - return result; - } - - if (!NapiParseUtils::ParseInt32(env, timeToLiveObj, timeToLive)) { - BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, - NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, "timeToLive", "int")); - return result; - } - - WebviewController* webviewController = GetWebviewController(env, info); - if (!webviewController) { - WVLOG_E("InjectOfflineResource: init webview controller error."); - BusinessError::ThrowErrorByErrcode(env, INIT_ERROR); - return result; + if (napi_get_named_property(env, argv[INTEGER_ZERO], "timeToLive", &timeToLiveObj) == napi_ok) { + if (!NapiParseUtils::ParseInt32(env, timeToLiveObj, timeToLive)) { + timeToLive = BackForwardCacheOptions::GetDefaultTimeToLive(); + } } webviewController->SetBackForwardCacheOptions(size, timeToLive); diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h index 63243ef5..7271bdbb 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h @@ -79,7 +79,7 @@ public: ArkWebRefPtr GetAdsBlockManager() override; - void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) override; + void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaTakeOver) override; private: std::shared_ptr nweb_engine_; diff --git a/ohos_nweb/include/nweb_helper.h b/ohos_nweb/include/nweb_helper.h index b65860d1..5654b55d 100644 --- a/ohos_nweb/include/nweb_helper.h +++ b/ohos_nweb/include/nweb_helper.h @@ -86,6 +86,8 @@ public: void EnableWholeWebPageDrawing(); std::shared_ptr GetAdsBlockManager(); + void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaTakeOver); + private: NWebHelper() = default; bool LoadLib(bool from_ark); diff --git a/ohos_nweb/src/nweb_helper.cpp b/ohos_nweb/src/nweb_helper.cpp index d51b4520..ef78f8f2 100644 --- a/ohos_nweb/src/nweb_helper.cpp +++ b/ohos_nweb/src/nweb_helper.cpp @@ -811,11 +811,9 @@ bool NWebHelper::InitAndRun(bool from_ark) std::string simplifiedLocale = baseLanguage + "-" + systemRegion; initArgs->AddArg(std::string("--lang=").append(simplifiedLocale)); - if (backForwardCacheCmdLine_.size() != 0) { - for (auto backForwardCacheCmdLine : backForwardCacheCmdLine_) { - initArgs->AddArg(backForwardCacheCmdLine); - WVLOG_I("Add command line when init web engine: %{public}s", backForwardCacheCmdLine.c_str()); - } + for (auto backForwardCacheCmdLine : backForwardCacheCmdLine_) { + initArgs->AddArg(backForwardCacheCmdLine); + WVLOG_I("Add command line when init web engine: %{public}s", backForwardCacheCmdLine.c_str()); } nwebEngine_->InitializeWebEngine(initArgs); @@ -1084,7 +1082,7 @@ void NWebHelper::ClearHostIP(const std::string& hostName) nwebEngine_->ClearHostIP(hostName); } -void NWebHelper::EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaIntercept) +void NWebHelper::EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaTakeOver) { this->backForwardCacheCmdLine_.emplace_back("--enable-bfcache"); if (enableNativeEmbed) { @@ -1092,7 +1090,7 @@ void NWebHelper::EnableBackForwardCache(bool enableNativeEmbed, bool enableMedia } if (enableNativeEmbed) { - this->backForwardCacheCmdLine_.emplace_back("--enable-cache-media-intercept"); + this->backForwardCacheCmdLine_.emplace_back("--enable-cache-media-take-over"); } } -- Gitee From b11d75f6166ff9a9d310bb6ebbd875124c896a53 Mon Sep 17 00:00:00 2001 From: gaojianhao1 Date: Fri, 5 Jul 2024 17:18:23 +0800 Subject: [PATCH 19/50] Add interface. Signed-off-by: gaojianhao1 --- .../common/napi_webview_native_module.cpp | 2 +- .../back_forward_cache_options.cpp | 18 ++---- .../back_forward_cache_options.h | 13 ++-- .../napi_back_forward_cache_options.cpp | 62 +++++-------------- .../napi_back_forward_cache_options.h | 12 ++-- .../napi_webview_controller.cpp | 10 +-- .../bridge/webcore/ark_web_engine_impl.h | 2 - .../nweb_helper_test/nweb_helper_test.cpp | 3 +- 8 files changed, 38 insertions(+), 84 deletions(-) diff --git a/interfaces/kits/napi/common/napi_webview_native_module.cpp b/interfaces/kits/napi/common/napi_webview_native_module.cpp index 00ad3d24..40478420 100644 --- a/interfaces/kits/napi/common/napi_webview_native_module.cpp +++ b/interfaces/kits/napi/common/napi_webview_native_module.cpp @@ -53,7 +53,7 @@ static napi_value WebViewExport(napi_env env, napi_value exports) WebFunctionInit(env, exports); NapiNativeMediaPlayerHandler::Init(env, exports); NapiBackForwardCacheOptions::Init(env, exports); - NapiBackForwardCacheSupportFeatures::Init(env, exports); + NapiBackForwardCacheSupportedFeatures::Init(env, exports); return exports; } EXTERN_C_END diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp index 7945a393..f6fcbb15 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.cpp @@ -38,27 +38,17 @@ int32_t BackForwardCacheOptions::GetTimeToLive() return timeToLive_; } -static int32_t BackForwardCacheOptions::GetDefaultSize() +BackForwardCacheSupportedFeatures::BackForwardCacheSupportedFeatures() { - return default_size_; + WVLOG_D("Created a BackForwardCacheSupportedFeatures class."); } -static int32_t BackForwardCacheOptions::GetDefaultTimeToLive() -{ - return default_time_to_live_; -} - -BackForwardCacheSupportFeatures::BackForwardCacheSupportFeatures() -{ - WVLOG_D("Created a BackForwardCacheSupportFeatures class."); -} - -bool BackForwardCacheSupportFeatures::IsEnableNativeEmbed() +bool BackForwardCacheSupportedFeatures::IsEnableNativeEmbed() { return nativeEmbed_; } -bool BackForwardCacheSupportFeatures::isEnableMediaTakeOver() +bool BackForwardCacheSupportedFeatures::IsEnableMediaTakeOver() { return mediaTakeOver_; } diff --git a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h index 0c54d321..e11da84d 100644 --- a/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h +++ b/interfaces/kits/napi/webviewcontroller/back_forward_cache_options.h @@ -23,6 +23,9 @@ #include "napi/native_common.h" #include "napi/native_node_api.h" +#define BFCACHE_DEFAULT_SIZE 1 +#define BFCACHE_DEFAULT_TIMETOLIVE 600 + namespace OHOS { namespace NWeb { class BackForwardCacheOptions { @@ -30,21 +33,17 @@ public: BackForwardCacheOptions(); int32_t GetSize(); int32_t GetTimeToLive(); - static int32_t GetDefaultSize(); - static int32_t GetDefaultTimeToLive(); private: int32_t size_ = 1; int32_t timeToLive_ = 600; - int32_t default_size_ = 1; - int32_t default_time_to_live_ = 600; }; -class BackForwardCacheSupportFeatures { +class BackForwardCacheSupportedFeatures { public: - BackForwardCacheSupportFeatures(); + BackForwardCacheSupportedFeatures(); bool IsEnableNativeEmbed(); - bool isEnableMediaTakeOver(); + bool IsEnableMediaTakeOver(); private: bool nativeEmbed_ = false; diff --git a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp index c43df7d4..f149c600 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.cpp @@ -55,21 +55,21 @@ napi_value NapiBackForwardCacheOptions::JS_Constructor(napi_env env, napi_callba return thisVar; } -napi_value NapiBackForwardCacheSupportFeatures::JS_Constructor(napi_env env, napi_callback_info info) +napi_value NapiBackForwardCacheSupportedFeatures::JS_Constructor(napi_env env, napi_callback_info info) { - WVLOG_I("NapiBackForwardCacheSupportFeatures::JS_Constructor is called"); + WVLOG_I("NapiBackForwardCacheSupportedFeatures::JS_Constructor is called"); napi_value thisVar = nullptr; void *data = nullptr; size_t argc = 2; napi_value argv[2] = {0}; napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); - BackForwardCacheSupportFeatures *features = new BackForwardCacheSupportFeatures(); + BackForwardCacheSupportedFeatures *features = new BackForwardCacheSupportedFeatures(); napi_wrap( env, thisVar, features, [](napi_env /* env */, void *data, void * /* hint */) { - BackForwardCacheSupportFeatures *features = (BackForwardCacheSupportFeatures *)data; + BackForwardCacheSupportedFeatures *features = (BackForwardCacheSupportedFeatures *)data; delete features; features = nullptr; }, @@ -78,59 +78,27 @@ napi_value NapiBackForwardCacheSupportFeatures::JS_Constructor(napi_env env, nap return thisVar; } -napi_value NapiBackForwardCacheOptions::JS_GetSize(napi_env env, napi_callback_info info) -{ - WVLOG_D("NapiBackForwardCacheOptions::JS_GetSize."); - return nullptr; -} - -napi_value NapiBackForwardCacheOptions::JS_GetTimeToLive(napi_env env, napi_callback_info info) -{ - WVLOG_D("NapiBackForwardCacheOptions::JS_GetTimeToLive."); - return nullptr; -} - -napi_value NapiBackForwardCacheSupportFeatures::JS_IsEnableNativeEmbed(napi_env env, napi_callback_info info) -{ - WVLOG_D("NapiBackForwardCacheSupportFeatures::JS_IsEnableNativeEmbed."); - return nullptr; -} - -napi_value NapiBackForwardCacheSupportFeatures::JS_IsEnableMediaTakeOver(napi_env env, napi_callback_info info) -{ - WVLOG_D("NapiBackForwardCacheSupportFeatures::JS_IsEnableMediaTakeOver."); - return nullptr; -} - napi_value NapiBackForwardCacheOptions::Init(napi_env env, napi_value exports) { WVLOG_D("NapiBackForwardCacheOptions::Init"); - napi_property_descriptor properties[] = { - DECLARE_NAPI_FUNCTION("getSize", JS_GetSize), - DECLARE_NAPI_FUNCTION("getTimeToLive", JS_GetTimeToLive), - }; napi_value backForwardCacheOptions = nullptr; - napi_define_class(env, BACK_FORWARD_CACHE_OPTIONS.c_str(), BACK_FORWARD_CACHE_OPTIONS.length(), - JS_Constructor, nullptr, - sizeof(properties) / sizeof(properties[0]), properties, &backForwardCacheOptions); + napi_define_class(env, BACK_FORWARD_CACHE_OPTIONS.c_str(), + BACK_FORWARD_CACHE_OPTIONS.length(), + JS_Constructor, nullptr, 0, nullptr, &backForwardCacheOptions); napi_set_named_property(env, exports, BACK_FORWARD_CACHE_OPTIONS.c_str(), backForwardCacheOptions); return exports; } -napi_value NapiBackForwardCacheSupportFeatures::Init(napi_env env, napi_value exports) +napi_value NapiBackForwardCacheSupportedFeatures::Init(napi_env env, napi_value exports) { - WVLOG_D("NapiBackForwardCacheSupportFeatures::Init"); - napi_property_descriptor properties[] = { - DECLARE_NAPI_FUNCTION("isEnableNativeEmbed", JS_IsEnableNativeEmbed), - DECLARE_NAPI_FUNCTION("isEnableMediaTakeOver", JS_IsEnableMediaTakeOver), - }; - napi_value backForwardCacheSupportFeatures = nullptr; - napi_define_class(env, BACK_FORWARD_CACHE_SUPPORT_FEATURES.c_str(), BACK_FORWARD_CACHE_SUPPORT_FEATURES.length(), - JS_Constructor, nullptr, - sizeof(properties) / sizeof(properties[0]), properties, &backForwardCacheSupportFeatures); - napi_set_named_property(env, exports, BACK_FORWARD_CACHE_SUPPORT_FEATURES.c_str(), - backForwardCacheSupportFeatures); + WVLOG_D("NapiBackForwardCacheSupportedFeatures::Init"); + napi_value backForwardCacheSupportedFeatures = nullptr; + napi_define_class(env, BACK_FORWARD_CACHE_SUPPORTED_FEATURES.c_str(), + BACK_FORWARD_CACHE_SUPPORTED_FEATURES.length(), + JS_Constructor, nullptr, 0, nullptr, &backForwardCacheSupportedFeatures); + napi_set_named_property(env, exports, BACK_FORWARD_CACHE_SUPPORTED_FEATURES.c_str(), + backForwardCacheSupportedFeatures); return exports; } diff --git a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h index 68e3eaa5..2d04145c 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h +++ b/interfaces/kits/napi/webviewcontroller/napi_back_forward_cache_options.h @@ -24,7 +24,7 @@ namespace OHOS { namespace NWeb { const std::string BACK_FORWARD_CACHE_OPTIONS = "BackForwardCacheOptions"; -const std::string BACK_FORWARD_CACHE_SUPPORT_FEATURES = "BackForwardCacheSupportFeatures"; +const std::string BACK_FORWARD_CACHE_SUPPORTED_FEATURES = "BackForwardCacheSupportedFeatures"; class NapiBackForwardCacheOptions { public: @@ -33,19 +33,15 @@ public: static napi_value Init(napi_env env, napi_value exports); static napi_value JS_Constructor(napi_env env, napi_callback_info info); - static napi_value JS_GetSize(napi_env env, napi_callback_info info); - static napi_value JS_GetTimeToLive(napi_env env, napi_callback_info info); }; -class NapiBackForwardCacheSupportFeatures { +class NapiBackForwardCacheSupportedFeatures { public: - NapiBackForwardCacheSupportFeatures() = default; - ~NapiBackForwardCacheSupportFeatures() = default; + NapiBackForwardCacheSupportedFeatures() = default; + ~NapiBackForwardCacheSupportedFeatures() = default; static napi_value Init(napi_env env, napi_value exports); static napi_value JS_Constructor(napi_env env, napi_callback_info info); - static napi_value JS_IsEnableNativeEmbed(napi_env env, napi_callback_info info); - static napi_value JS_IsEnableMediaTakeOver(napi_env env, napi_callback_info info); }; } diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp index 66a2ee97..87ec385a 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp @@ -5494,6 +5494,7 @@ napi_value NapiWebviewController::EnableBackForwardCache(napi_env env, napi_call napi_get_undefined(env, &result); napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr); if (argc != INTEGER_ONE) { + WVLOG_E("SetBackForwardCacheOptions: wrong number of params."); NWebHelper::Instance().EnableBackForwardCache(false, false); NAPI_CALL(env, napi_get_undefined(env, &result)); return result; @@ -5530,14 +5531,15 @@ napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_ napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr); WebviewController* webviewController = GetWebviewController(env, info); if (!webviewController) { - WVLOG_E("InjectOfflineResource: init webview controller error."); + WVLOG_E("SetBackForwardCacheOptions: Init webview controller error."); BusinessError::ThrowErrorByErrcode(env, INIT_ERROR); return result; } if (argc != INTEGER_ONE) { + WVLOG_E("SetBackForwardCacheOptions: wrong number of params."); webviewController->SetBackForwardCacheOptions( - BackForwardCacheOptions::GetDefaultSize(), BackForwardCacheOptions::GetDefaultTimeToLive()); + BFCACHE_DEFAULT_SIZE, BFCACHE_DEFAULT_TIMETOLIVE); NAPI_CALL(env, napi_get_undefined(env, &result)); return result; } @@ -5548,13 +5550,13 @@ napi_value NapiWebviewController::SetBackForwardCacheOptions(napi_env env, napi_ napi_value timeToLiveObj = nullptr; if (napi_get_named_property(env, argv[INTEGER_ZERO], "size", &sizeObj) == napi_ok) { if (!NapiParseUtils::ParseInt32(env, sizeObj, size)) { - size = BackForwardCacheOptions::GetDefaultSize(); + size = BFCACHE_DEFAULT_SIZE; } } if (napi_get_named_property(env, argv[INTEGER_ZERO], "timeToLive", &timeToLiveObj) == napi_ok) { if (!NapiParseUtils::ParseInt32(env, timeToLiveObj, timeToLive)) { - timeToLive = BackForwardCacheOptions::GetDefaultTimeToLive(); + timeToLive = BFCACHE_DEFAULT_TIMETOLIVE; } } diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h index 7271bdbb..28236ab7 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h @@ -79,8 +79,6 @@ public: ArkWebRefPtr GetAdsBlockManager() override; - void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaTakeOver) override; - private: std::shared_ptr nweb_engine_; }; diff --git a/test/unittest/nweb_helper_test/nweb_helper_test.cpp b/test/unittest/nweb_helper_test/nweb_helper_test.cpp index 2ebb7da7..51d27e0f 100644 --- a/test/unittest/nweb_helper_test/nweb_helper_test.cpp +++ b/test/unittest/nweb_helper_test/nweb_helper_test.cpp @@ -144,7 +144,7 @@ public: return nullptr; } - void EnableBackForwardCache(bool nativeEmbed, bool mediaTakeOver); + void EnableBackForwardCache(bool nativeEmbed, bool mediaTakeOver) {} }; void NwebHelperTest::SetUpTestCase(void) @@ -328,6 +328,7 @@ HWTEST_F(NwebHelperTest, NWebHelper_GetConfigPath_005, TestSize.Level1) NWebHelper::Instance().PrefetchResource(nullptr, {}, "web_test", 0); NWebHelper::Instance().ClearPrefetchedResource({"web_test"}); NWebHelper::Instance().bundlePath_.clear(); + NWebHelper::Instance().EnableBackForwardCache(true, true); bool result = NWebHelper::Instance().InitAndRun(false); EXPECT_FALSE(result); NWebHelper::Instance().SetConnectionTimeout(1); -- Gitee From edf7fa1c12aea31b522070fd464b4f6727fbc80a Mon Sep 17 00:00:00 2001 From: zhangyanchuan Date: Mon, 8 Jul 2024 10:59:20 +0800 Subject: [PATCH 20/50] =?UTF-8?q?=E4=BF=AE=E6=94=B9so=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E4=B8=BA=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangyanchuan --- .../bridge/webcore/ark_web_adapter_bridge_helper.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_web_adapter_bridge_helper.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_web_adapter_bridge_helper.cpp index bec20dfb..1180d736 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_web_adapter_bridge_helper.cpp +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_web_adapter_bridge_helper.cpp @@ -22,12 +22,6 @@ namespace OHOS::ArkWeb { const std::string LIB_FILE_NAME = "libohos_adapter_glue_source.z.so"; -#if defined(__aarch64__) || defined(__x86_64__) -const std::string LIB_DIR_PATH = "/system/lib64"; -#else -const std::string LIB_DIR_PATH = "/system/lib"; -#endif - ArkWebAdapterBridgeHelper& ArkWebAdapterBridgeHelper::GetInstance(bool isPrintLog) { static ArkWebAdapterBridgeHelper helper; @@ -38,7 +32,7 @@ ArkWebAdapterBridgeHelper& ArkWebAdapterBridgeHelper::GetInstance(bool isPrintLo bool ArkWebAdapterBridgeHelper::Init(bool isPrintLog) { - return LoadLibFile(RTLD_LAZY, LIB_DIR_PATH + "/" + LIB_FILE_NAME, isPrintLog); + return LoadLibFile(RTLD_LAZY, LIB_FILE_NAME, isPrintLog); } } // namespace OHOS::ArkWeb -- Gitee From 1decc31279e47af4cbf451600bb6a7ee4ed5e6b0 Mon Sep 17 00:00:00 2001 From: abc12133 Date: Fri, 5 Jul 2024 15:17:35 +0800 Subject: [PATCH 21/50] add autofill interface Signed-off-by: abc12133 --- ohos_interface/include/ohos_nweb/nweb.h | 12 +++++ .../include/ohos_nweb/nweb_autofill.h | 53 +++++++++++++++++++ .../bridge/webcore/ark_web_nweb_impl.cpp | 15 ++++++ .../bridge/webcore/ark_web_nweb_impl.h | 14 +++++ .../bridge/webview/ark_web_nweb_wrapper.cpp | 16 ++++++ .../bridge/webview/ark_web_nweb_wrapper.h | 14 +++++ .../ohos_nweb/include/ark_web_nweb.h | 14 +++++ 7 files changed, 138 insertions(+) create mode 100644 ohos_interface/include/ohos_nweb/nweb_autofill.h diff --git a/ohos_interface/include/ohos_nweb/nweb.h b/ohos_interface/include/ohos_nweb/nweb.h index a3019b9d..857b4083 100644 --- a/ohos_interface/include/ohos_nweb/nweb.h +++ b/ohos_interface/include/ohos_nweb/nweb.h @@ -1439,6 +1439,18 @@ public: * @param iskeyboard from keybord. */ virtual void ResizeVisibleViewport(uint32_t width, uint32_t height, bool isKeyboard) {} + + /** + * @brief set the callback of the autofill event. + * @param callback callback. + */ + virtual void SetAutofillCallback(std::shared_ptr callback) {} + + /** + * @brief fill autofill data. + * @param data data. + */ + virtual void FillAutofillData(std::shared_ptr data) {} }; } // namespace OHOS::NWeb diff --git a/ohos_interface/include/ohos_nweb/nweb_autofill.h b/ohos_interface/include/ohos_nweb/nweb_autofill.h new file mode 100644 index 00000000..fde1e7fa --- /dev/null +++ b/ohos_interface/include/ohos_nweb/nweb_autofill.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NWEB_AUTOFILL_H +#define NWEB_AUTOFILL_H + +#include + +namespace OHOS::NWeb { + +const std::string NWEB_VIEW_DATA_KEY_FOCUS = "focus"; +const std::string NWEB_VIEW_DATA_KEY_RECT_X = "x"; +const std::string NWEB_VIEW_DATA_KEY_RECT_Y = "y"; +const std::string NWEB_VIEW_DATA_KEY_RECT_W = "width"; +const std::string NWEB_VIEW_DATA_KEY_RECT_H = "height"; +const std::string NWEB_VIEW_DATA_KEY_VALUE = "value"; + +const std::string NWEB_AUTOFILL_EVENT_SAVE = "save"; +const std::string NWEB_AUTOFILL_EVENT_FILL = "fill"; +const std::string NWEB_AUTOFILL_EVENT_UPDATE = "update"; +const std::string NWEB_AUTOFILL_EVENT_CLOSE = "close"; + +const std::string NWEB_AUTOFILL_NAME = "name"; +const std::string NWEB_AUTOFILL_NICKNAME = "nickname"; +const std::string NWEB_AUTOFILL_EMAIL = "email"; +const std::string NWEB_AUTOFILL_STREET_ADDRESS = "street-address"; +const std::string NWEB_AUTOFILL_ID_CARD_NUMBER = "id-card-number"; +const std::string NWEB_AUTOFILL_TEL_NATIONAL = "tel-national"; + +enum NWebAutofillEvent { + UNKNOWN = 0, + SAVE, + FILL, + UPDATE, + CLOSE, +}; + + +} // namespace OHOS::NWeb + +#endif // NWEB_AUTOFILL_H \ No newline at end of file diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp index 1ccff32b..3733848f 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.cpp @@ -1112,4 +1112,19 @@ void ArkWebNWebImpl::ResizeVisibleViewport(uint32_t width, uint32_t height, bool { nweb_nweb_->ResizeVisibleViewport(width, height, isKeyboard); } + +void ArkWebNWebImpl::SetAutofillCallback(ArkWebRefPtr callback) +{ + if (CHECK_REF_PTR_IS_NULL(callback)) { + nweb_nweb_->SetAutofillCallback(nullptr); + return; + } + + nweb_nweb_->SetAutofillCallback(std::make_shared(callback)); +} + +void ArkWebNWebImpl::FillAutofillData(const ArkWebMessage& data) +{ + nweb_nweb_->FillAutofillData(data.nweb_message); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h index fff3e1f1..936ec594 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_nweb_impl.h @@ -1277,6 +1277,20 @@ public: */ /*--ark web()--*/ void ResizeVisibleViewport(uint32_t width, uint32_t height, bool isKeyboard) override; + + /** + * @brief set the callback of the autofill event. + * @param callback callback. + */ + /*--ark web()--*/ + void SetAutofillCallback(ArkWebRefPtr callback) override; + + /** + * @brief fill autofill data. + * @param data data. + */ + /*--ark web()--*/ + void FillAutofillData(const ArkWebMessage& data) override; private: std::shared_ptr nweb_nweb_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp index 79fe1cc4..568c4d89 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.cpp @@ -1309,4 +1309,20 @@ void ArkWebNWebWrapper::ResizeVisibleViewport(uint32_t width, uint32_t height, b { ark_web_nweb_->ResizeVisibleViewport(width, height, isKeyboard); } + +void ArkWebNWebWrapper::SetAutofillCallback(std::shared_ptr callback) +{ + if (CHECK_SHARED_PTR_IS_NULL(callback)) { + ark_web_nweb_->SetAutofillCallback(nullptr); + } else { + ark_web_nweb_->SetAutofillCallback(new ArkWebMessageValueCallbackImpl(callback)); + } +} + +void ArkWebNWebWrapper::FillAutofillData(std::shared_ptr data) +{ + ArkWebMessage ark_web_message; + ark_web_message.nweb_message = data; + ark_web_nweb_->FillAutofillData(ark_web_message); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h index c2adcd0e..b5605cf4 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_nweb_wrapper.h @@ -1286,6 +1286,20 @@ public: */ /*--ark web()--*/ void ResizeVisibleViewport(uint32_t width, uint32_t height, bool isKeyboard) override; + + /** + * @brief set the callback of the autofill event. + * @param callback callback. + */ + /*--ark web()--*/ + void SetAutofillCallback(std::shared_ptr callback) override; + + /** + * @brief fill autofill data. + * @param data data. + */ + /*--ark web()--*/ + void FillAutofillData(std::shared_ptr data) override; private: ArkWebRefPtr ark_web_nweb_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h index 55dd314b..9578b335 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h +++ b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_nweb.h @@ -1436,6 +1436,20 @@ public: */ /*--ark web()--*/ virtual void ResizeVisibleViewport(uint32_t width, uint32_t height, bool isKeyboard) = 0; + + /** + * @brief set the callback of the autofill event. + * @param callback callback. + */ + /*--ark web()--*/ + virtual void SetAutofillCallback(ArkWebRefPtr callback) = 0; + + /** + * @brief fill autofill data. + * @param data data. + */ + /*--ark web()--*/ + virtual void FillAutofillData(const ArkWebMessage& data) = 0; }; } // namespace OHOS::ArkWeb -- Gitee From bcaca0d0e95b83c8bcc4f3b84770c71fd8a74499 Mon Sep 17 00:00:00 2001 From: zhangshengfeng Date: Mon, 8 Jul 2024 14:33:22 +0800 Subject: [PATCH 22/50] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangshengfeng --- interfaces/kits/napi/js/webview_export.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/interfaces/kits/napi/js/webview_export.js b/interfaces/kits/napi/js/webview_export.js index 872b6e5c..d71c3d6e 100644 --- a/interfaces/kits/napi/js/webview_export.js +++ b/interfaces/kits/napi/js/webview_export.js @@ -28,11 +28,11 @@ let errMsgMap = new Map(); errMsgMap.set(PARAM_CHECK_ERROR, ERROR_MSG_INVALID_PARAM); class BusinessError extends Error { - constructor(code, errorMsg = "undefined") { - if(errorMsg === "undefined") { + constructor(code, errorMsg = 'undefined') { + if (errorMsg === 'undefined') { let msg = errMsgMap.get(code); super(msg); - }else{ + } else { super(errorMsg); } this.code = code; @@ -230,7 +230,7 @@ Object.defineProperty(webview.WebviewController.prototype, 'getCertificate', { value: function (callback) { if (arguments.length !== 0 && arguments.length !== 1) { throw new BusinessError(PARAM_CHECK_ERROR, - "BusinessError 401: Parameter error. The number of params must be zero or one."); + 'BusinessError 401: Parameter error. The number of params must be zero or one.'); } let certChainData = this.innerGetCertificate(); @@ -241,9 +241,9 @@ Object.defineProperty(webview.WebviewController.prototype, 'getCertificate', { console.log('get certificate async callback'); if (typeof callback !== 'function') { throw new BusinessError(PARAM_CHECK_ERROR, - "BusinessError 401: Parameter error. The type of 'callback' must be function." ); + 'BusinessError 401: Parameter error. The type of "callback" must be function.' ); } - getCertificatePromise(certChainData).then(x509CertArray => { + return getCertificatePromise(certChainData).then(x509CertArray => { callback(undefined, x509CertArray); }).catch(error => { callback(error, undefined); -- Gitee From d12862a617d45ffef3950ad2d61452ca63de7880 Mon Sep 17 00:00:00 2001 From: zgit2021 Date: Fri, 5 Jul 2024 17:22:08 +0800 Subject: [PATCH 23/50] adapt to customDialog's keyboard avoid Signed-off-by: zgit2021 Change-Id: I8f44ebf6a49be0159480064cb4c127ecfd0adacd --- .../src/imf_adapter_impl.cpp | 10 +++++++--- ohos_interface/include/ohos_adapter/imf_adapter.h | 10 ++++++++++ ohos_interface/include/ohos_nweb/nweb_handler.h | 8 ++++++++ .../webcore/ark_imf_text_config_adapter_impl.cpp | 9 +++++++++ .../bridge/webcore/ark_imf_text_config_adapter_impl.h | 4 ++++ .../webview/ark_imftext_config_adapter_wrapper.cpp | 9 +++++++++ .../webview/ark_imftext_config_adapter_wrapper.h | 4 ++++ .../ohos_glue/ohos_adapter/include/ark_imf_adapter.h | 6 ++++++ .../bridge/webcore/ark_web_handler_wrapper.cpp | 5 +++++ .../ohos_nweb/bridge/webcore/ark_web_handler_wrapper.h | 3 +++ .../ohos_nweb/bridge/webview/ark_web_handler_impl.cpp | 5 +++++ .../ohos_nweb/bridge/webview/ark_web_handler_impl.h | 3 +++ .../ohos_glue/ohos_nweb/include/ark_web_handler.h | 9 +++++++++ 13 files changed, 82 insertions(+), 3 deletions(-) diff --git a/ohos_adapter/inputmethodframework_adapter/src/imf_adapter_impl.cpp b/ohos_adapter/inputmethodframework_adapter/src/imf_adapter_impl.cpp index e2b5bc8f..4d832a19 100644 --- a/ohos_adapter/inputmethodframework_adapter/src/imf_adapter_impl.cpp +++ b/ohos_adapter/inputmethodframework_adapter/src/imf_adapter_impl.cpp @@ -300,9 +300,13 @@ bool IMFAdapterImpl::Attach(std::shared_ptr listener, bo .width = config->GetCursorInfo()->GetWidth(), .height = config->GetCursorInfo()->GetHeight() }; - MiscServices::TextConfig textConfig = { - .inputAttribute = inputAttribute, .cursorInfo = imfInfo, .windowId = config->GetWindowId() - }; + MiscServices::TextConfig textConfig = { .inputAttribute = inputAttribute, + .cursorInfo = imfInfo, + .windowId = config->GetWindowId(), + .positionY = config->GetPositionY(), + .height = config->GetHeight() }; + WVLOG_I("web inputmethod attach, isShowKeyboard=%{public}d, textConfig=%{public}s", isShowKeyboard, + textConfig.ToString().c_str()); int32_t ret = MiscServices::InputMethodController::GetInstance()->Attach(textListener_, isShowKeyboard, textConfig); if (ret != 0) { WVLOG_E("inputmethod attach failed, errcode=%{public}d", ret); diff --git a/ohos_interface/include/ohos_adapter/imf_adapter.h b/ohos_interface/include/ohos_adapter/imf_adapter.h index 5aa58b69..fca87684 100644 --- a/ohos_interface/include/ohos_adapter/imf_adapter.h +++ b/ohos_interface/include/ohos_adapter/imf_adapter.h @@ -106,6 +106,16 @@ public: virtual std::shared_ptr GetSelectionRange() = 0; virtual uint32_t GetWindowId() = 0; + + virtual double GetPositionY() + { + return 0.0; + } + + virtual double GetHeight() + { + return 0.0; + } }; enum class IMFAdapterKeyboardStatus : int32_t { NONE = 0, HIDE, SHOW }; diff --git a/ohos_interface/include/ohos_nweb/nweb_handler.h b/ohos_interface/include/ohos_nweb/nweb_handler.h index 459752ea..21214671 100644 --- a/ohos_interface/include/ohos_nweb/nweb_handler.h +++ b/ohos_interface/include/ohos_nweb/nweb_handler.h @@ -966,6 +966,14 @@ public: * */ virtual void OnAdsBlocked(const std::string& url, const std::vector& adsBlocked) {} + + /** + * @brief called when the cursor info is updated. + * + * @param x, y relative coordinates within web components of the cursor + * @param width, height width and height of the cursor + */ + virtual void OnCursorUpdate(double x, double y, double width, double height) {} }; } // namespace OHOS::NWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_imf_text_config_adapter_impl.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_imf_text_config_adapter_impl.cpp index b1fbadd3..54d23bc9 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_imf_text_config_adapter_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_imf_text_config_adapter_impl.cpp @@ -59,4 +59,13 @@ uint32_t ArkIMFTextConfigAdapterImpl::GetWindowId() return real_->GetWindowId(); } +double ArkIMFTextConfigAdapterImpl::GetPositionY() +{ + return real_->GetPositionY(); +} + +double ArkIMFTextConfigAdapterImpl::GetHeight() +{ + return real_->GetHeight(); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_imf_text_config_adapter_impl.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_imf_text_config_adapter_impl.h index 2fa22142..1d6762f0 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_imf_text_config_adapter_impl.h +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_imf_text_config_adapter_impl.h @@ -34,6 +34,10 @@ public: uint32_t GetWindowId() override; + double GetPositionY() override; + + double GetHeight() override; + private: std::shared_ptr real_; diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_imftext_config_adapter_wrapper.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_imftext_config_adapter_wrapper.cpp index 61ef624f..af7aa231 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_imftext_config_adapter_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_imftext_config_adapter_wrapper.cpp @@ -58,4 +58,13 @@ uint32_t ArkIMFTextConfigAdapterWrapper::GetWindowId() return ctocpp_->GetWindowId(); } +double ArkIMFTextConfigAdapterWrapper::GetPositionY() +{ + return ctocpp_->GetPositionY(); +} + +double ArkIMFTextConfigAdapterWrapper::GetHeight() +{ + return ctocpp_->GetHeight(); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_imftext_config_adapter_wrapper.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_imftext_config_adapter_wrapper.h index 6f03508c..b7121b0d 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_imftext_config_adapter_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_imftext_config_adapter_wrapper.h @@ -34,6 +34,10 @@ public: uint32_t GetWindowId() override; + double GetPositionY() override; + + double GetHeight() override; + private: ArkWebRefPtr ctocpp_; }; diff --git a/ohos_interface/ohos_glue/ohos_adapter/include/ark_imf_adapter.h b/ohos_interface/ohos_glue/ohos_adapter/include/ark_imf_adapter.h index 0bd54640..415dd5a2 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/include/ark_imf_adapter.h +++ b/ohos_interface/ohos_glue/ohos_adapter/include/ark_imf_adapter.h @@ -72,6 +72,12 @@ public: /*--ark web()--*/ virtual uint32_t GetWindowId() = 0; + + /*--ark web()--*/ + virtual double GetPositionY() = 0; + + /*--ark web()--*/ + virtual double GetHeight() = 0; }; /*--ark web(source=webview)--*/ diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.cpp index 6e6c298a..7cd66db5 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.cpp @@ -977,4 +977,9 @@ void ArkWebHandlerWrapper::OnAdsBlocked( ArkWebStringVectorStructRelease(stAdsBlocked); ArkWebStringStructRelease(stUrl); } + +void ArkWebHandlerWrapper::OnCursorUpdate(double x, double y, double width, double height) +{ + ark_web_handler_->OnCursorUpdate(x, y, width, height); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.h index 7e5ad0c6..9ac67292 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.h @@ -594,6 +594,9 @@ public: void OnCustomKeyboardClose() override; void OnAdsBlocked(const std::string &url, const std::vector &adsBlocked) override; + + void OnCursorUpdate(double x, double y, double width, double height) override; + private: ArkWebRefPtr ark_web_handler_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.cpp index 580d80a5..14693cd4 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.cpp @@ -867,4 +867,9 @@ void ArkWebHandlerImpl::OnAdsBlocked(const ArkWebString &url, const ArkWebString nweb_handler_->OnAdsBlocked(ArkWebStringStructToClass(url), ArkWebStringVectorStructToClass(adsBlocked)); } + +void ArkWebHandlerImpl::OnCursorUpdate(double x, double y, double width, double height) +{ + nweb_handler_->OnCursorUpdate(x, y, width, height); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.h index c9a0edae..42707294 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.h @@ -557,6 +557,9 @@ public: void OnCustomKeyboardClose() override; void OnAdsBlocked(const ArkWebString &url, const ArkWebStringVector &adsBlocked) override; + + void OnCursorUpdate(double x, double y, double width, double height) override; + private: std::shared_ptr nweb_handler_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_handler.h b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_handler.h index b17fc6b5..b9352634 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_handler.h +++ b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_handler.h @@ -744,6 +744,15 @@ public: */ /*--ark web()--*/ virtual void OnAdsBlocked(const ArkWebString &url, const ArkWebStringVector &adsBlocked) = 0; + + /** + * @brief called when the cursor info is updated. + * + * @param x, y relative coordinates within web components of the cursor + * @param width, height width and height of the cursor + */ + /*--ark web()--*/ + virtual void OnCursorUpdate(double x, double y, double width, double height) = 0; }; } // namespace OHOS::ArkWeb -- Gitee From 883ae653895f519e8af98382cda3975de2012009 Mon Sep 17 00:00:00 2001 From: Wanpucheng Date: Mon, 8 Jul 2024 19:10:54 +0800 Subject: [PATCH 24/50] =?UTF-8?q?=E8=A7=A3=E5=86=B3ArkWeb=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=BC=A9=E8=BF=9B=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Wanpucheng --- ohos_nweb/include/nweb_init_params.h | 306 +++++++++++++++------------ 1 file changed, 170 insertions(+), 136 deletions(-) diff --git a/ohos_nweb/include/nweb_init_params.h b/ohos_nweb/include/nweb_init_params.h index 8cfe711d..9f1b2374 100644 --- a/ohos_nweb/include/nweb_init_params.h +++ b/ohos_nweb/include/nweb_init_params.h @@ -22,201 +22,235 @@ namespace OHOS::NWeb { class NWebDOHConfigImpl : public NWebDOHConfig { public: - NWebDOHConfigImpl() = default; - ~NWebDOHConfigImpl() = default; + NWebDOHConfigImpl() = default; + ~NWebDOHConfigImpl() = default; - void SetMode(int mode) { - mode_ = mode; - } + void SetMode(int mode) + { + mode_ = mode; + } - int GetMode() override { - return mode_; - } + int GetMode() override + { + return mode_; + } - void SetConfig(const std::string &config) { - config_ = config; - } + void SetConfig(const std::string& config) + { + config_ = config; + } - std::string GetConfig() override { - return config_; - } + std::string GetConfig() override + { + return config_; + } private: - int mode_ = -1; - std::string config_; + int mode_ = -1; + std::string config_; }; class NWebCreateInfoImpl : public NWebCreateInfo { public: - NWebCreateInfoImpl() = default; - ~NWebCreateInfoImpl() = default; + NWebCreateInfoImpl() = default; + ~NWebCreateInfoImpl() = default; - void SetWidth(uint32_t width) { - width_ = width; - } + void SetWidth(uint32_t width) + { + width_ = width; + } - uint32_t GetWidth() override { - return width_; - } + uint32_t GetWidth() override + { + return width_; + } - void SetHeight(uint32_t height) { - height_ = height; - } + void SetHeight(uint32_t height) + { + height_ = height; + } - uint32_t GetHeight() override { - return height_; - } + uint32_t GetHeight() override + { + return height_; + } - void SetIsIncognitoMode(bool isIncognitoMode) { - isIncognitoMode_ = isIncognitoMode; - } + void SetIsIncognitoMode(bool isIncognitoMode) + { + isIncognitoMode_ = isIncognitoMode; + } - bool GetIsIncognitoMode() override { - return isIncognitoMode_; - } + bool GetIsIncognitoMode() override + { + return isIncognitoMode_; + } - void SetProducerSurface(void *producerSurface) { - producerSurface_ = producerSurface; - } + void SetProducerSurface(void* producerSurface) + { + producerSurface_ = producerSurface; + } - void *GetProducerSurface() override { - return producerSurface_; - } + void* GetProducerSurface() override + { + return producerSurface_; + } - void SetEnhanceSurfaceInfo(void *enhanceSurfaceInfo) { - enhanceSurfaceInfo_ = enhanceSurfaceInfo; - } + void SetEnhanceSurfaceInfo(void* enhanceSurfaceInfo) + { + enhanceSurfaceInfo_ = enhanceSurfaceInfo; + } - void *GetEnhanceSurfaceInfo() override { - return enhanceSurfaceInfo_; - } + void* GetEnhanceSurfaceInfo() override + { + return enhanceSurfaceInfo_; + } - void SetEngineInitArgs(std::shared_ptr initArgs) { - initArgs_ = initArgs; - } + void SetEngineInitArgs(std::shared_ptr initArgs) + { + initArgs_ = initArgs; + } - std::shared_ptr GetEngineInitArgs() override { - return initArgs_; - } + std::shared_ptr GetEngineInitArgs() override + { + return initArgs_; + } - void SetOutputFrameCallback( - std::shared_ptr outputFrameCallback) { - outputFrameCallback_ = outputFrameCallback; - } + void SetOutputFrameCallback(std::shared_ptr outputFrameCallback) + { + outputFrameCallback_ = outputFrameCallback; + } - std::shared_ptr GetOutputFrameCallback() override { - return outputFrameCallback_; - } + std::shared_ptr GetOutputFrameCallback() override + { + return outputFrameCallback_; + } private: - uint32_t width_ = 0; - uint32_t height_ = 0; + uint32_t width_ = 0; + uint32_t height_ = 0; - bool isIncognitoMode_ = false; + bool isIncognitoMode_ = false; - void *producerSurface_ = nullptr; - void *enhanceSurfaceInfo_ = nullptr; + void* producerSurface_ = nullptr; + void* enhanceSurfaceInfo_ = nullptr; - std::shared_ptr initArgs_ = nullptr; - std::shared_ptr outputFrameCallback_ = nullptr; + std::shared_ptr initArgs_ = nullptr; + std::shared_ptr outputFrameCallback_ = nullptr; }; class NWebEngineInitArgsImpl : public NWebEngineInitArgs { public: - NWebEngineInitArgsImpl() = default; - ~NWebEngineInitArgsImpl() = default; + NWebEngineInitArgsImpl() = default; + ~NWebEngineInitArgsImpl() = default; - void AddArg(const std::string &arg) { - argsToAdd_.emplace_back(arg); - } + void AddArg(const std::string& arg) + { + argsToAdd_.emplace_back(arg); + } - void AddDeleteArg(const std::string &arg) { - argsToDelete_.emplace_back(arg); - } + void AddDeleteArg(const std::string& arg) + { + argsToDelete_.emplace_back(arg); + } - void SetDumpPath(const std::string &dumpPath) { - dumpPath_ = dumpPath; - } + void SetDumpPath(const std::string& dumpPath) + { + dumpPath_ = dumpPath; + } - std::string GetDumpPath() override { - return dumpPath_; - } + std::string GetDumpPath() override + { + return dumpPath_; + } - void SetIsPopup(bool isPopup) { - isPopup_ = isPopup; - } + void SetIsPopup(bool isPopup) + { + isPopup_ = isPopup; + } - bool GetIsPopup() override { - return isPopup_; - } + bool GetIsPopup() override + { + return isPopup_; + } - void SetIsFrameInfoDump(bool isFrameInfoDump) { - isFrameInfoDump_ = isFrameInfoDump; - } + void SetIsFrameInfoDump(bool isFrameInfoDump) + { + isFrameInfoDump_ = isFrameInfoDump; + } - bool GetIsFrameInfoDump() override { - return isFrameInfoDump_; - } + bool GetIsFrameInfoDump() override + { + return isFrameInfoDump_; + } - void SetIsEnhanceSurface(bool isEnhanceSurface) { - isEnhanceSurface_ = isEnhanceSurface; - } + void SetIsEnhanceSurface(bool isEnhanceSurface) + { + isEnhanceSurface_ = isEnhanceSurface; + } - bool GetIsEnhanceSurface() override { - return isEnhanceSurface_; - } + bool GetIsEnhanceSurface() override + { + return isEnhanceSurface_; + } - void SetIsMultiRendererProcess(bool isMultiRendererProcess) { - isMultiRendererProcess_ = isMultiRendererProcess; - } + void SetIsMultiRendererProcess(bool isMultiRendererProcess) + { + isMultiRendererProcess_ = isMultiRendererProcess; + } - bool GetIsMultiRendererProcess() override { - return isMultiRendererProcess_; - } + bool GetIsMultiRendererProcess() override + { + return isMultiRendererProcess_; + } - void SetArgsToAdd(const std::list &argsToAdd) { - argsToAdd_ = argsToAdd; - } + void SetArgsToAdd(const std::list& argsToAdd) + { + argsToAdd_ = argsToAdd; + } - std::list GetArgsToAdd() override { - return argsToAdd_; - } + std::list GetArgsToAdd() override + { + return argsToAdd_; + } - void SetArgsToDelete(const std::list &argsToDelete) { - argsToDelete_ = argsToDelete; - } + void SetArgsToDelete(const std::list& argsToDelete) + { + argsToDelete_ = argsToDelete; + } - std::list GetArgsToDelete() override { - return argsToDelete_; - } + std::list GetArgsToDelete() override + { + return argsToDelete_; + } - void SetSharedRenderProcessToken(const std::string& sharedRenderProcessToken) - { - sharedRenderProcessToken_ = sharedRenderProcessToken; - } + void SetSharedRenderProcessToken(const std::string& sharedRenderProcessToken) + { + sharedRenderProcessToken_ = sharedRenderProcessToken; + } - std::string GetSharedRenderProcessToken() override - { - return sharedRenderProcessToken_; - } + std::string GetSharedRenderProcessToken() override + { + return sharedRenderProcessToken_; + } private: - std::string dumpPath_; + std::string dumpPath_; - bool isPopup_ = false; - bool isFrameInfoDump_ = false; - bool isEnhanceSurface_ = false; - bool isMultiRendererProcess_ = false; + bool isPopup_ = false; + bool isFrameInfoDump_ = false; + bool isEnhanceSurface_ = false; + bool isMultiRendererProcess_ = false; - std::list argsToAdd_; - std::list argsToDelete_; - std::string sharedRenderProcessToken_; + std::list argsToAdd_; + std::list argsToDelete_; + std::string sharedRenderProcessToken_; }; class NWebEnginePrefetchArgsImpl : public NWebEnginePrefetchArgs { public: - NWebEnginePrefetchArgsImpl(const std::string &url, const std::string &method, const std::string &formData) - : url_(url), method_(method), form_data_(formData) {} + NWebEnginePrefetchArgsImpl(const std::string& url, const std::string& method, const std::string& formData) + : url_(url), method_(method), form_data_(formData) + {} ~NWebEnginePrefetchArgsImpl() = default; -- Gitee From d2a67d87e60f8cc81d5071bea5a5e835f782c198 Mon Sep 17 00:00:00 2001 From: zhangyanchuan Date: Tue, 9 Jul 2024 14:40:54 +0800 Subject: [PATCH 25/50] =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=89=98=E7=AE=A1?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=BF=9BBFCache(=E5=90=8C=E6=AD=A5=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=8E=A5=E5=8F=A3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangyanchuan --- .../napi/webviewcontroller/napi_native_media_player.cpp | 8 ++++---- .../include/ohos_nweb/nweb_native_media_player.h | 9 ++++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/napi/webviewcontroller/napi_native_media_player.cpp b/interfaces/kits/napi/webviewcontroller/napi_native_media_player.cpp index 9251d793..17ca2f7c 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_native_media_player.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_native_media_player.cpp @@ -178,12 +178,12 @@ napi_status NapiNativeMediaPlayerHandler::ExportEnumSuspendType(napi_env env, na const std::string NPI_SUSPEND_TYPE_ENUM_NAME = "SuspendType"; napi_property_descriptor properties[] = { - DECLARE_NAPI_STATIC_PROPERTY("EnterBackForwardCache", - NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::EnterBackForwardCache))), + DECLARE_NAPI_STATIC_PROPERTY("ENTER_BACK_FORWARD_CACHE", + NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::ENTER_BACK_FORWARD_CACHE))), DECLARE_NAPI_STATIC_PROPERTY( - "EnterBackground", NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::EnterBackground))), + "ENTER_BACKGROUND", NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::ENTER_BACKGROUND))), DECLARE_NAPI_STATIC_PROPERTY( - "AutoCleanup", NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::AutoCleanup))), + "AUTO_CLEANUP", NapiParseUtils::ToInt32Value(env, static_cast(SuspendType::AUTO_CLEANUP))), }; napi_value enumValue = nullptr; diff --git a/ohos_interface/include/ohos_nweb/nweb_native_media_player.h b/ohos_interface/include/ohos_nweb/nweb_native_media_player.h index dffc7eda..c3bd0075 100644 --- a/ohos_interface/include/ohos_nweb/nweb_native_media_player.h +++ b/ohos_interface/include/ohos_nweb/nweb_native_media_player.h @@ -31,7 +31,14 @@ enum class MediaError { NETWORK_ERROR = 1, FORMAT_ERROR, DECODE_ERROR }; enum class ReadyState { HAVE_NOTHING = 0, HAVE_METADATA, HAVE_CURRENT_DATA, HAVE_FUTURE_DATA, HAVE_ENOUGH_DATA }; -enum class SuspendType { EnterBackForwardCache = 0, EnterBackground, AutoCleanup }; +enum class SuspendType { + ENTER_BACK_FORWARD_CACHE = 0, + ENTER_BACKGROUND, + AUTO_CLEANUP, + EnterBackForwardCache = 0, + EnterBackground, + AutoCleanup +}; enum class NetworkState { EMPTY = 0, IDLE, LOADING, NETWORK_ERROR }; -- Gitee From b797bae1c5a72547bf15c43a23aca5d38ae53cdd Mon Sep 17 00:00:00 2001 From: zhangyanchuan Date: Tue, 9 Jul 2024 16:11:08 +0800 Subject: [PATCH 26/50] =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=89=98=E7=AE=A1?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=BF=9BBFCache(=E5=90=8C=E6=AD=A5=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=8E=A5=E5=8F=A3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangyanchuan --- .../include/ohos_nweb/nweb_native_media_player.h | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/ohos_interface/include/ohos_nweb/nweb_native_media_player.h b/ohos_interface/include/ohos_nweb/nweb_native_media_player.h index c3bd0075..609d9a6b 100644 --- a/ohos_interface/include/ohos_nweb/nweb_native_media_player.h +++ b/ohos_interface/include/ohos_nweb/nweb_native_media_player.h @@ -31,14 +31,7 @@ enum class MediaError { NETWORK_ERROR = 1, FORMAT_ERROR, DECODE_ERROR }; enum class ReadyState { HAVE_NOTHING = 0, HAVE_METADATA, HAVE_CURRENT_DATA, HAVE_FUTURE_DATA, HAVE_ENOUGH_DATA }; -enum class SuspendType { - ENTER_BACK_FORWARD_CACHE = 0, - ENTER_BACKGROUND, - AUTO_CLEANUP, - EnterBackForwardCache = 0, - EnterBackground, - AutoCleanup -}; +enum class SuspendType { ENTER_BACK_FORWARD_CACHE = 0, ENTER_BACKGROUND, AUTO_CLEANUP }; enum class NetworkState { EMPTY = 0, IDLE, LOADING, NETWORK_ERROR }; -- Gitee From a1973f14752f073a8a79f3d2a2d7c27acc6f71eb Mon Sep 17 00:00:00 2001 From: tengfan3 Date: Tue, 9 Jul 2024 23:29:24 +0800 Subject: [PATCH 27/50] =?UTF-8?q?=E4=BC=A0=E6=84=9F=E5=99=A8=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=EF=BC=8C=E8=BF=BD=E5=8A=A0=E4=BC=A0=E6=84=9F=E5=99=A8?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tengfan3 --- .../include/sensor_adapter_impl.h | 17 ++ .../src/sensor_adapter_impl.cpp | 213 ++++++++++++++---- 2 files changed, 180 insertions(+), 50 deletions(-) diff --git a/ohos_adapter/sensor_adapter/include/sensor_adapter_impl.h b/ohos_adapter/sensor_adapter/include/sensor_adapter_impl.h index 8d3c78b2..319e3cb9 100644 --- a/ohos_adapter/sensor_adapter/include/sensor_adapter_impl.h +++ b/ohos_adapter/sensor_adapter/include/sensor_adapter_impl.h @@ -51,6 +51,23 @@ private: static void OhosSensorCallback(SensorEvent* event); static std::unordered_map> sensorCallbackMap; + static void handleAccelerometerData(std::shared_ptr callback, + SensorEvent* event); + static void handleLinearAccelerometerData(std::shared_ptr callback, + SensorEvent* event); + static void handleGravityData(std::shared_ptr callback, + SensorEvent* event); + static void handleCyroscopeData(std::shared_ptr callback, + SensorEvent* event); + static void handleMagnetometerData(std::shared_ptr callback, + SensorEvent* event); + static void handleOrientationData(std::shared_ptr callback, + SensorEvent* event); + static void handleRotationVectorData(std::shared_ptr callback, + SensorEvent* event); + static void handleGameRotationVectorData(std::shared_ptr callback, + SensorEvent* event); + SensorUser mSensorUser{}; }; diff --git a/ohos_adapter/sensor_adapter/src/sensor_adapter_impl.cpp b/ohos_adapter/sensor_adapter/src/sensor_adapter_impl.cpp index d6f6328f..e244a577 100644 --- a/ohos_adapter/sensor_adapter/src/sensor_adapter_impl.cpp +++ b/ohos_adapter/sensor_adapter/src/sensor_adapter_impl.cpp @@ -26,14 +26,18 @@ std::unordered_map> SensorAdapterIm constexpr double NANOSECONDS_IN_SECOND = 1000000000.0; constexpr double DEFAULT_SAMPLE_PERIOD = 200000000.0; -SensorTypeId SensorTypeToOhosSensorType(int sensorTypeId) { +SensorTypeId SensorTypeToOhosSensorType(int sensorTypeId) +{ SensorTypeId ohosSensorTypeId = SENSOR_TYPE_ID_NONE; const static std::map TO_OHOS_SENSOR_TYPE_MAP = { {2 /* ACCELEROMETER */, SENSOR_TYPE_ID_ACCELEROMETER }, {3 /* LINEAR_ACCELERATION */, SENSOR_TYPE_ID_LINEAR_ACCELERATION }, {4 /* GRAVITY */, SENSOR_TYPE_ID_GRAVITY }, {5 /* GYROSCOPE */, SENSOR_TYPE_ID_GYROSCOPE }, - {8 /* ABSOLUTE_ORIENTATION_EULER_ANGLES}*/, SENSOR_TYPE_ID_ORIENTATION } + {6 /* MAGNETOMETER */, SENSOR_TYPE_ID_MAGNETIC_FIELD }, + {8 /* ABSOLUTE_ORIENTATION_EULER_ANGLES}*/, SENSOR_TYPE_ID_ORIENTATION }, + {9 /* ABSOLUTE_ORIENTATION_QUATERNION} */, SENSOR_TYPE_ID_ROTATION_VECTOR }, + {11 /* RELATIVE_ORIENTATION_QUATERNION} */, SENSOR_TYPE_ID_GAME_ROTATION_VECTOR } }; auto checkIter = TO_OHOS_SENSOR_TYPE_MAP.find(sensorTypeId); if (checkIter != TO_OHOS_SENSOR_TYPE_MAP.end()) { @@ -42,13 +46,17 @@ SensorTypeId SensorTypeToOhosSensorType(int sensorTypeId) { return ohosSensorTypeId; } -std::string SensorTypeToSensorUserName(int sensorTypeId) { +std::string SensorTypeToSensorUserName(int sensorTypeId) +{ const static std::map TO_OHOS_SENSOR_USER_NAME_MAP = { {2 /* ACCELEROMETER */, "OhosAccelerometerService" }, {3 /* LINEAR_ACCELERATION */, "OhosLinearAccelerometerService" }, {4 /* GRAVITY */, "OhosGravityService" }, {5 /* GYROSCOPE */, "OhosCyroscopeService" }, - {8 /* ABSOLUTE_ORIENTATION_EULER_ANGLES}*/, "OhosOrientationService" } + {6 /* MAGNETOMETER */, "OhosMagnetometerService" }, + {8 /* ABSOLUTE_ORIENTATION_EULER_ANGLES}*/, "OhosOrientationService" }, + {9 /* ABSOLUTE_ORIENTATION_QUATERNION} */, "OhosRotationVectorService"}, + {11 /* RELATIVE_ORIENTATION_QUATERNION} */, "OhosGameRotationVectorService" } }; std::string userName = "OhosSensorService"; auto checkIter = TO_OHOS_SENSOR_USER_NAME_MAP.find(sensorTypeId); @@ -60,17 +68,19 @@ std::string SensorTypeToSensorUserName(int sensorTypeId) { SensorCallbackImpl::SensorCallbackImpl( std::shared_ptr callbackAdapter) - : callbackAdapter_(callbackAdapter) { -} + : callbackAdapter_(callbackAdapter) +{} void SensorCallbackImpl::UpdateOhosSensorData(double timestamp, - double value1, double value2, double value3, double value4) { + double value1, double value2, double value3, double value4) +{ if (callbackAdapter_) { callbackAdapter_->UpdateOhosSensorData(timestamp, value1, value2, value3, value4); - } + } } -int32_t SensorAdapterImpl::IsOhosSensorSupported(int32_t sensorTypeId) { +int32_t SensorAdapterImpl::IsOhosSensorSupported(int32_t sensorTypeId) +{ int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); if (ohosSensorTypeId != SENSOR_TYPE_ID_NONE) { SensorInfo* sensorInfo = nullptr; @@ -92,7 +102,8 @@ int32_t SensorAdapterImpl::IsOhosSensorSupported(int32_t sensorTypeId) { return SENSOR_ERROR; } -int32_t SensorAdapterImpl::GetOhosSensorReportingMode(int32_t sensorTypeId) { +int32_t SensorAdapterImpl::GetOhosSensorReportingMode(int32_t sensorTypeId) +{ int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); int32_t reportingMode = -1; switch (ohosSensorTypeId) { @@ -100,7 +111,10 @@ int32_t SensorAdapterImpl::GetOhosSensorReportingMode(int32_t sensorTypeId) { case SENSOR_TYPE_ID_GRAVITY: case SENSOR_TYPE_ID_LINEAR_ACCELERATION: case SENSOR_TYPE_ID_GYROSCOPE: + case SENSOR_TYPE_ID_MAGNETIC_FIELD: case SENSOR_TYPE_ID_ORIENTATION: + case SENSOR_TYPE_ID_ROTATION_VECTOR: + case SENSOR_TYPE_ID_GAME_ROTATION_VECTOR: reportingMode = SENSOR_DATA_REPORT_CONTINUOUS; break; default: @@ -109,7 +123,8 @@ int32_t SensorAdapterImpl::GetOhosSensorReportingMode(int32_t sensorTypeId) { return reportingMode; } -double SensorAdapterImpl::GetOhosSensorDefaultSupportedFrequency(int32_t sensorTypeId) { +double SensorAdapterImpl::GetOhosSensorDefaultSupportedFrequency(int32_t sensorTypeId) +{ int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); double defaultFrequency = 0.0; if (ohosSensorTypeId != SENSOR_TYPE_ID_NONE) { @@ -120,7 +135,8 @@ double SensorAdapterImpl::GetOhosSensorDefaultSupportedFrequency(int32_t sensorT return defaultFrequency; } -double SensorAdapterImpl::GetOhosSensorMinSupportedFrequency(int32_t sensorTypeId) { +double SensorAdapterImpl::GetOhosSensorMinSupportedFrequency(int32_t sensorTypeId) +{ int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); double minFrequency = 0.0; if (ohosSensorTypeId == SENSOR_TYPE_ID_NONE) { @@ -148,7 +164,8 @@ double SensorAdapterImpl::GetOhosSensorMinSupportedFrequency(int32_t sensorTypeI return minFrequency; } -double SensorAdapterImpl::GetOhosSensorMaxSupportedFrequency(int32_t sensorTypeId) { +double SensorAdapterImpl::GetOhosSensorMaxSupportedFrequency(int32_t sensorTypeId) +{ int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); double maxFrequency = 0.0; if (ohosSensorTypeId == SENSOR_TYPE_ID_NONE) { @@ -176,60 +193,154 @@ double SensorAdapterImpl::GetOhosSensorMaxSupportedFrequency(int32_t sensorTypeI return maxFrequency; } -void SensorAdapterImpl::OhosSensorCallback(SensorEvent* event) { +void SensorAdapterImpl::handleAccelerometerData(std::shared_ptr callback, + SensorEvent* event) +{ + if ((event == nullptr) || (callback == nullptr)) { + WVLOG_E("handleAccelerometerData Error."); + return; + } + AccelData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); + } +} + +void SensorAdapterImpl::handleLinearAccelerometerData(std::shared_ptr callback, + SensorEvent* event) +{ + if ((event == nullptr) || (callback == nullptr)) { + WVLOG_E("handleLinearAccelerometerData Error."); + return; + } + LinearAccelData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); + } +} + +void SensorAdapterImpl::handleGravityData(std::shared_ptr callback, + SensorEvent* event) +{ + if ((event == nullptr) || (callback == nullptr)) { + WVLOG_E("handleGravityData Error."); + return; + } + GravityData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); + } +} + +void SensorAdapterImpl::handleCyroscopeData(std::shared_ptr callback, + SensorEvent* event) +{ + if ((event == nullptr) || (callback == nullptr)) { + WVLOG_E("handleCyroscopeData Error."); + return; + } + GyroscopeData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); + } +} + +void SensorAdapterImpl::handleMagnetometerData(std::shared_ptr callback, + SensorEvent* event) +{ + if ((event == nullptr) || (callback == nullptr)) { + WVLOG_E("handleMagnetometerData Error."); + return; + } + MagneticFieldData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); + } +} + +void SensorAdapterImpl::handleOrientationData(std::shared_ptr callback, + SensorEvent* event) +{ + if ((event == nullptr) || (callback == nullptr)) { + WVLOG_E("handleOrientationData Error."); + return; + } + OrientationData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->beta, data->gamma, data->alpha, 0.0f); + } +} + +void SensorAdapterImpl::handleRotationVectorData(std::shared_ptr callback, + SensorEvent* event) +{ + if ((event == nullptr) || (callback == nullptr)) { + WVLOG_E("handleRotationVectorData Error."); + return; + } + RotationVectorData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, data->w); + } +} + +void SensorAdapterImpl::handleGameRotationVectorData(std::shared_ptr callback, + SensorEvent* event) +{ + if ((event == nullptr) || (callback == nullptr)) { + WVLOG_E("handleGameRotationVectorData Error."); + return; + } + GameRotationVectorData* data = reinterpret_cast(event->data); + if (data != nullptr) { + callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, data->w); + } +} + +void SensorAdapterImpl::OhosSensorCallback(SensorEvent* event) +{ std::shared_ptr callback = nullptr; auto findIter = sensorCallbackMap.find(event->sensorTypeId); if (findIter != sensorCallbackMap.end()) { - callback = findIter->second; + callback = findIter->second; } if ((event == nullptr) || (callback == nullptr)) { WVLOG_E("OhosSensorCallback Error."); return; } switch (event->sensorTypeId) { - case SENSOR_TYPE_ID_ACCELEROMETER: { - AccelData* data = reinterpret_cast(event->data); - if (data != nullptr) { - callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); - } + case SENSOR_TYPE_ID_ACCELEROMETER: + handleAccelerometerData(callback, event); break; - } - case SENSOR_TYPE_ID_GRAVITY: { - GravityData* data = reinterpret_cast(event->data); - if (data != nullptr) { - callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); - } + case SENSOR_TYPE_ID_GRAVITY: + handleGravityData(callback, event); break; - } - case SENSOR_TYPE_ID_LINEAR_ACCELERATION: { - LinearAccelData* data = reinterpret_cast(event->data); - if (data != nullptr) { - callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); - } + case SENSOR_TYPE_ID_LINEAR_ACCELERATION: + handleLinearAccelerometerData(callback, event); break; - } - case SENSOR_TYPE_ID_GYROSCOPE: { - GyroscopeData* data = reinterpret_cast(event->data); - if (data != nullptr) { - callback->UpdateOhosSensorData(event->timestamp, data->x, data->y, data->z, 0.0f); - } + case SENSOR_TYPE_ID_GYROSCOPE: + handleCyroscopeData(callback, event); break; - } - case SENSOR_TYPE_ID_ORIENTATION: { - OrientationData* data = reinterpret_cast(event->data); - if (data != nullptr) { - callback->UpdateOhosSensorData(event->timestamp, data->beta, data->gamma, data->alpha, 0.0f); - } + case SENSOR_TYPE_ID_MAGNETIC_FIELD: + handleMagnetometerData(callback, event); + break; + case SENSOR_TYPE_ID_ORIENTATION: + handleOrientationData(callback, event); + break; + case SENSOR_TYPE_ID_ROTATION_VECTOR: + handleRotationVectorData(callback, event); + break; + case SENSOR_TYPE_ID_GAME_ROTATION_VECTOR: + handleGameRotationVectorData(callback, event); break; - } default: break; } } -int32_t SensorAdapterImpl::SubscribeOhosSensor(int32_t sensorTypeId, int64_t samplingInterval) { - WVLOG_I("SubscribeOhosSensor sensorTypeId: %{public}d, samplingInterval: %{public}lld", - sensorTypeId, samplingInterval); +int32_t SensorAdapterImpl::SubscribeOhosSensor(int32_t sensorTypeId, int64_t samplingInterval) +{ + WVLOG_I("SubscribeOhosSensor sensorTypeId: %{public}d", sensorTypeId); if (samplingInterval <= 0) { WVLOG_E("SubscribeOhosSensor error, samplingInterval is invalid."); return SENSOR_PARAMETER_ERROR; @@ -269,7 +380,8 @@ int32_t SensorAdapterImpl::SubscribeOhosSensor(int32_t sensorTypeId, int64_t sam } int32_t SensorAdapterImpl::RegistOhosSensorCallback(int32_t sensorTypeId, - std::shared_ptr callbackAdapter) { + std::shared_ptr callbackAdapter) +{ int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); if (ohosSensorTypeId != SENSOR_TYPE_ID_NONE) { auto callback = std::make_shared(callbackAdapter); @@ -280,7 +392,8 @@ int32_t SensorAdapterImpl::RegistOhosSensorCallback(int32_t sensorTypeId, return SENSOR_PARAMETER_ERROR; } -int32_t SensorAdapterImpl::UnsubscribeOhosSensor(int32_t sensorTypeId) { +int32_t SensorAdapterImpl::UnsubscribeOhosSensor(int32_t sensorTypeId) +{ WVLOG_I("UnsubscribeOhosSensor sensorTypeId: %{public}d.", sensorTypeId); int32_t ohosSensorTypeId = SensorTypeToOhosSensorType(sensorTypeId); if (ohosSensorTypeId != SENSOR_TYPE_ID_NONE) { -- Gitee From a48b66b92540b99a016c206b68adf7f37554183c Mon Sep 17 00:00:00 2001 From: cxcxfan Date: Tue, 9 Jul 2024 22:06:06 +0800 Subject: [PATCH 28/50] =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E4=B8=A2=E5=B8=A7?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: cxcxfan --- ohos_interface/include/ohos_nweb/nweb_handler.h | 2 ++ .../ohos_nweb/bridge/webcore/ark_web_handler_wrapper.cpp | 5 +++++ .../ohos_nweb/bridge/webcore/ark_web_handler_wrapper.h | 2 ++ .../ohos_nweb/bridge/webview/ark_web_handler_impl.cpp | 5 +++++ .../ohos_nweb/bridge/webview/ark_web_handler_impl.h | 2 ++ .../ohos_glue/ohos_nweb/include/ark_web_handler.h | 8 ++++++++ 6 files changed, 24 insertions(+) diff --git a/ohos_interface/include/ohos_nweb/nweb_handler.h b/ohos_interface/include/ohos_nweb/nweb_handler.h index 459752ea..796f28be 100644 --- a/ohos_interface/include/ohos_nweb/nweb_handler.h +++ b/ohos_interface/include/ohos_nweb/nweb_handler.h @@ -966,6 +966,8 @@ public: * */ virtual void OnAdsBlocked(const std::string& url, const std::vector& adsBlocked) {} + + virtual void ReportDynamicFrameLossEvent(const std::string& sceneId, bool isStart) {} }; } // namespace OHOS::NWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.cpp index 6e6c298a..b97225a6 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.cpp @@ -977,4 +977,9 @@ void ArkWebHandlerWrapper::OnAdsBlocked( ArkWebStringVectorStructRelease(stAdsBlocked); ArkWebStringStructRelease(stUrl); } + +void ArkWebHandlerWrapper::ReportDynamicFrameLossEvent(const std::string& sceneId, bool isStart) +{ + ark_web_handler_->ReportDynamicFrameLossEvent(ArkWebStringClassToStruct(sceneId), isStart); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.h index 7e5ad0c6..07854481 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_handler_wrapper.h @@ -594,6 +594,8 @@ public: void OnCustomKeyboardClose() override; void OnAdsBlocked(const std::string &url, const std::vector &adsBlocked) override; + + void ReportDynamicFrameLossEvent(const std::string& sceneId, bool isStart) override; private: ArkWebRefPtr ark_web_handler_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.cpp index 580d80a5..c36a95d1 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.cpp @@ -867,4 +867,9 @@ void ArkWebHandlerImpl::OnAdsBlocked(const ArkWebString &url, const ArkWebString nweb_handler_->OnAdsBlocked(ArkWebStringStructToClass(url), ArkWebStringVectorStructToClass(adsBlocked)); } + +void ArkWebHandlerImpl::ReportDynamicFrameLossEvent(const ArkWebString& sceneId, bool isStart) +{ + nweb_handler_->ReportDynamicFrameLossEvent(ArkWebStringStructToClass(sceneId), isStart); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.h index c9a0edae..de13b3ed 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_handler_impl.h @@ -557,6 +557,8 @@ public: void OnCustomKeyboardClose() override; void OnAdsBlocked(const ArkWebString &url, const ArkWebStringVector &adsBlocked) override; + + void ReportDynamicFrameLossEvent(const ArkWebString& sceneId, bool isStart) override; private: std::shared_ptr nweb_handler_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_handler.h b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_handler.h index b17fc6b5..86d8144b 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_handler.h +++ b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_handler.h @@ -744,6 +744,14 @@ public: */ /*--ark web()--*/ virtual void OnAdsBlocked(const ArkWebString &url, const ArkWebStringVector &adsBlocked) = 0; + + /** + * @brief Report dynamic frame loss event. + * + * @param isStart true if is start. + */ + /*--ark web()--*/ + virtual void ReportDynamicFrameLossEvent(const ArkWebString& sceneId, bool isStart) = 0; }; } // namespace OHOS::ArkWeb -- Gitee From b377185863f98c1d5387aca8f89b64053246fbeb Mon Sep 17 00:00:00 2001 From: tengfan Date: Tue, 9 Jul 2024 21:45:47 +0800 Subject: [PATCH 29/50] trim memory by pressure level Signed-off-by: tengfan --- .../napi_webview_controller.cpp | 43 +++++++++++++++++++ .../napi_webview_controller.h | 3 ++ .../webviewcontroller/webview_controller.h | 5 +++ .../include/ohos_nweb/nweb_engine.h | 2 + .../bridge/webcore/ark_web_engine_impl.cpp | 5 +++ .../bridge/webcore/ark_web_engine_impl.h | 2 + .../bridge/webview/ark_web_engine_wrapper.cpp | 5 +++ .../bridge/webview/ark_web_engine_wrapper.h | 2 + .../ohos_nweb/include/ark_web_engine.h | 3 ++ ohos_nweb/include/nweb_helper.h | 2 + ohos_nweb/src/nweb_helper.cpp | 10 +++++ 11 files changed, 82 insertions(+) diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp index 87ec385a..c2de4111 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp @@ -529,6 +529,8 @@ napi_value NapiWebviewController::Init(napi_env env, napi_value exports) NapiWebviewController::SetPathAllowingUniversalAccess), DECLARE_NAPI_STATIC_FUNCTION("enableBackForwardCache", NapiWebviewController::EnableBackForwardCache), DECLARE_NAPI_FUNCTION("setBackForwardCacheOptions", NapiWebviewController::SetBackForwardCacheOptions), + DECLARE_NAPI_STATIC_FUNCTION("trimMemoryByPressureLevel", + NapiWebviewController::TrimMemoryByPressureLevel), }; napi_value constructor = nullptr; napi_define_class(env, WEBVIEW_CONTROLLER_CLASS_NAME.c_str(), WEBVIEW_CONTROLLER_CLASS_NAME.length(), @@ -712,6 +714,18 @@ napi_value NapiWebviewController::Init(napi_env env, napi_value exports) sizeof(offlineResourceTypeProperties[0]), offlineResourceTypeProperties, &offlineResourceTypeEnum); napi_set_named_property(env, exports, OFFLINE_RESOURCE_TYPE_ENUM_NAME.c_str(), offlineResourceTypeEnum); + napi_value pressureLevelEnum = nullptr; + napi_property_descriptor pressureLevelProperties[] = { + DECLARE_NAPI_STATIC_PROPERTY("MEMORY_PRESSURE_LEVEL_MODERATE", NapiParseUtils::ToInt32Value(env, + static_cast(PressureLevel::MEMORY_PRESSURE_LEVEL_MODERATE))), + DECLARE_NAPI_STATIC_PROPERTY("MEMORY_PRESSURE_LEVEL_CRITICAL", NapiParseUtils::ToInt32Value(env, + static_cast(PressureLevel::MEMORY_PRESSURE_LEVEL_CRITICAL))), + }; + napi_define_class(env, WEB_PRESSURE_LEVEL_ENUM_NAME.c_str(), WEB_PRESSURE_LEVEL_ENUM_NAME.length(), + NapiParseUtils::CreateEnumConstructor, nullptr, sizeof(pressureLevelProperties) / + sizeof(pressureLevelProperties[0]), pressureLevelProperties, &pressureLevelEnum); + napi_set_named_property(env, exports, WEB_PRESSURE_LEVEL_ENUM_NAME.c_str(), pressureLevelEnum); + WebviewJavaScriptExecuteCallback::InitJSExcute(env, exports); return exports; } @@ -6172,5 +6186,34 @@ napi_value NapiWebviewController::SetPathAllowingUniversalAccess( } return result; } + +napi_value NapiWebviewController::TrimMemoryByPressureLevel(napi_env env, + napi_callback_info info) +{ + napi_value thisVar = nullptr; + napi_value result = nullptr; + size_t argc = INTEGER_ONE; + napi_value argv[INTEGER_ONE] = { 0 }; + int32_t memoryLevel; + napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr); + if (argc != INTEGER_ONE) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString( + ParamCheckErrorMsgTemplate::PARAM_NUMBERS_ERROR_ONE, "one")); + return result; + } + + if (!NapiParseUtils::ParseInt32(env, argv[INTEGER_ZERO], memoryLevel)) { + BusinessError::ThrowErrorByErrcode(env, PARAM_CHECK_ERROR, + NWebError::FormatString(ParamCheckErrorMsgTemplate::TYPE_ERROR, + "PressureLevel", "number")); + return result; + } + + memoryLevel = memoryLevel == 1 ? 0 : memoryLevel; + NWebHelper::Instance().TrimMemoryByPressureLevel(memoryLevel); + NAPI_CALL(env, napi_get_undefined(env, &result)); + return result; +} } // namespace NWeb } // namespace OHOS diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h index 5877ee94..5a0c1ae9 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.h @@ -40,6 +40,7 @@ const std::string WEB_PRINT_DOCUMENT_CLASS_NAME = "WebPrintDocument"; const std::string WEB_SECURITY_LEVEL_ENUM_NAME = "SecurityLevel"; const std::string WEB_RENDER_PROCESS_MODE_ENUM_NAME = "RenderProcessMode"; const std::string OFFLINE_RESOURCE_TYPE_ENUM_NAME = "OfflineResourceType"; +const std::string WEB_PRESSURE_LEVEL_ENUM_NAME = "PressureLevel"; struct Scheme { std::string name; @@ -352,6 +353,8 @@ private: static napi_value SetBackForwardCacheOptions(napi_env env, napi_callback_info info); + static napi_value TrimMemoryByPressureLevel(napi_env env, napi_callback_info info); + static int32_t maxFdNum_; static std::atomic usedFd_; }; diff --git a/interfaces/kits/napi/webviewcontroller/webview_controller.h b/interfaces/kits/napi/webviewcontroller/webview_controller.h index 508d8d16..58764995 100644 --- a/interfaces/kits/napi/webviewcontroller/webview_controller.h +++ b/interfaces/kits/napi/webviewcontroller/webview_controller.h @@ -117,6 +117,11 @@ enum class UrlListSetResult : int { SET_OK = 0, }; +enum class PressureLevel : int { + MEMORY_PRESSURE_LEVEL_MODERATE = 1, + MEMORY_PRESSURE_LEVEL_CRITICAL = 2, +}; + class WebPrintDocument; class WebviewController { public: diff --git a/ohos_interface/include/ohos_nweb/nweb_engine.h b/ohos_interface/include/ohos_nweb/nweb_engine.h index 41853edc..616b166f 100644 --- a/ohos_interface/include/ohos_nweb/nweb_engine.h +++ b/ohos_interface/include/ohos_nweb/nweb_engine.h @@ -82,6 +82,8 @@ public: virtual std::shared_ptr GetAdsBlockManager() { return nullptr; }; + + virtual void TrimMemoryByPressureLevel(int32_t memoryLevel) {}; }; } // namespace OHOS::NWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp index 5b55bcb9..ecc4dba4 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.cpp @@ -212,4 +212,9 @@ ArkWebRefPtr ArkWebEngineImpl::GetAdsBlockManager() } return new ArkWebAdsBlockManagerImpl(nweb_adsBlock_manager); } + +void ArkWebEngineImpl::TrimMemoryByPressureLevel(int32_t memoryLevel) +{ + nweb_engine_->TrimMemoryByPressureLevel(memoryLevel); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h index 28236ab7..b883c699 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webcore/ark_web_engine_impl.h @@ -79,6 +79,8 @@ public: ArkWebRefPtr GetAdsBlockManager() override; + void TrimMemoryByPressureLevel(int32_t memoryLevel) override; + private: std::shared_ptr nweb_engine_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp index c08317fa..5c26e075 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.cpp @@ -240,4 +240,9 @@ ArkWebEngineWrapper::GetAdsBlockManager() { return std::make_shared(ark_web_adsblock_manager); } + +void ArkWebEngineWrapper::TrimMemoryByPressureLevel(int32_t memoryLevel) +{ + ark_web_engine_->TrimMemoryByPressureLevel(memoryLevel); +} } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h index 6400bfcd..ec6ea672 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_nweb/bridge/webview/ark_web_engine_wrapper.h @@ -76,6 +76,8 @@ public: void EnableWholeWebPageDrawing() override; std::shared_ptr GetAdsBlockManager() override; + + void TrimMemoryByPressureLevel(int32_t memoryLevel) override; private: ArkWebRefPtr ark_web_engine_; }; diff --git a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h index ab6194dc..3208fffd 100644 --- a/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h +++ b/ohos_interface/ohos_glue/ohos_nweb/include/ark_web_engine.h @@ -108,6 +108,9 @@ public: /*--ark web()--*/ virtual ArkWebRefPtr GetAdsBlockManager() = 0; + + /*--ark web()--*/ + virtual void TrimMemoryByPressureLevel(int32_t memoryLevel) = 0; }; } // namespace OHOS::ArkWeb diff --git a/ohos_nweb/include/nweb_helper.h b/ohos_nweb/include/nweb_helper.h index 5654b55d..d09266bd 100644 --- a/ohos_nweb/include/nweb_helper.h +++ b/ohos_nweb/include/nweb_helper.h @@ -88,6 +88,8 @@ public: void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaTakeOver); + void TrimMemoryByPressureLevel(int32_t memoryLevel); + private: NWebHelper() = default; bool LoadLib(bool from_ark); diff --git a/ohos_nweb/src/nweb_helper.cpp b/ohos_nweb/src/nweb_helper.cpp index ef78f8f2..d2d633f0 100644 --- a/ohos_nweb/src/nweb_helper.cpp +++ b/ohos_nweb/src/nweb_helper.cpp @@ -1133,6 +1133,16 @@ std::shared_ptr NWebHelper::GetAdsBlockManager() return nwebEngine_->GetAdsBlockManager(); } +void NWebHelper::TrimMemoryByPressureLevel(int32_t memoryLevel) +{ + if (nwebEngine_ == nullptr) { + WVLOG_E("nweb engine is nullptr"); + return; + } + + nwebEngine_->TrimMemoryByPressureLevel(memoryLevel); +} + NWebAdapterHelper &NWebAdapterHelper::Instance() { static NWebAdapterHelper helper; -- Gitee From 6c37b14fa234169db8215f9b964426fe3490fec9 Mon Sep 17 00:00:00 2001 From: echoorchid Date: Mon, 8 Jul 2024 15:30:30 +0800 Subject: [PATCH 30/50] add log for OnActive and OnInactive Signed-off-by: echoorchid --- .../kits/napi/webviewcontroller/napi_webview_controller.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp index 87ec385a..cdb2288e 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_webview_controller.cpp @@ -1152,11 +1152,12 @@ napi_value NapiWebviewController::OnActive(napi_env env, napi_callback_info info napi_value result = nullptr; WebviewController *webviewController = GetWebviewController(env, info); if (!webviewController) { + WVLOG_E("NapiWebviewController::OnActive get controller failed"); return nullptr; } webviewController->OnActive(); - WVLOG_D("The web component has been successfully activated"); + WVLOG_I("The web component has been successfully activated"); NAPI_CALL(env, napi_get_undefined(env, &result)); return result; } @@ -1166,11 +1167,12 @@ napi_value NapiWebviewController::OnInactive(napi_env env, napi_callback_info in napi_value result = nullptr; WebviewController *webviewController = GetWebviewController(env, info); if (!webviewController) { + WVLOG_E("NapiWebviewController::OnInactive get controller failed"); return nullptr; } webviewController->OnInactive(); - WVLOG_D("The web component has been successfully inactivated"); + WVLOG_I("The web component has been successfully inactivated"); NAPI_CALL(env, napi_get_undefined(env, &result)); return result; } -- Gitee From ad66eb63044fae2dd98fe89e3a0074d4fe732639 Mon Sep 17 00:00:00 2001 From: kirby Date: Wed, 10 Jul 2024 14:08:46 +0800 Subject: [PATCH 31/50] fix null ptr err Signed-off-by: kirby --- interfaces/kits/cj/src/web_cookie_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/cj/src/web_cookie_manager.cpp b/interfaces/kits/cj/src/web_cookie_manager.cpp index 5810abfc..8956d29d 100644 --- a/interfaces/kits/cj/src/web_cookie_manager.cpp +++ b/interfaces/kits/cj/src/web_cookie_manager.cpp @@ -31,7 +31,7 @@ std::string WebCookieManager::CjGetCookie(const std::string &url, bool incognito } if (cookieContent == "" && !isValid) { errCode = NWebError::INVALID_URL; - return nullptr; + return ""; } errCode = NWebError::NO_ERROR; return cookieContent; -- Gitee From 532daa7fbb4cf4053985cb305be4e8a22343417f Mon Sep 17 00:00:00 2001 From: zhengenhao0 Date: Wed, 10 Jul 2024 15:05:59 +0800 Subject: [PATCH 32/50] update NWeb.hap in master to 0710 Signed-off-by: zhengenhao0 --- ohos_nweb/prebuilts/arm/NWeb.hap | 4 ++-- ohos_nweb/prebuilts/arm64/NWeb.hap | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ohos_nweb/prebuilts/arm/NWeb.hap b/ohos_nweb/prebuilts/arm/NWeb.hap index 2916f731..e1f086df 100644 --- a/ohos_nweb/prebuilts/arm/NWeb.hap +++ b/ohos_nweb/prebuilts/arm/NWeb.hap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98f54394d9240f9a37c4fef8f799fe876aac74a86d70a74eba262ca59931dbda -size 79497971 +oid sha256:683b1427ef008ab1046561128138933a52d3188709659fbe34b60c7e921156f2 +size 122977436 diff --git a/ohos_nweb/prebuilts/arm64/NWeb.hap b/ohos_nweb/prebuilts/arm64/NWeb.hap index da5358b4..e82ba550 100644 --- a/ohos_nweb/prebuilts/arm64/NWeb.hap +++ b/ohos_nweb/prebuilts/arm64/NWeb.hap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb1c4bf27de592f9096fcc03d95ac5213ab388d144783ee326df17ac586f59bb -size 90255633 +oid sha256:f7063bd3158146f488df3794da6148cf24a9c74deb56293a31499c664e03d512 +size 190665927 -- Gitee From d7c73bc2f970706f555928d239a0c8df9a721a3b Mon Sep 17 00:00:00 2001 From: LXinJie Date: Wed, 10 Jul 2024 17:45:15 +0800 Subject: [PATCH 33/50] liuxinjie6@huawei.com Signed-off-by: LXinJie --- .../src/aafwk_render_scheduler_impl.cpp | 2 +- .../include/hitrace_adapter_impl.h | 7 ---- .../src/hitrace_adapter_impl.cpp | 32 ++++++++----------- .../nweb_aafwk_adapter_test.cpp | 2 ++ .../hiviewdfx_adapter_test/BUILD.gn | 1 + .../hiviewdfx_adapter_test.cpp | 12 +++---- 6 files changed, 24 insertions(+), 32 deletions(-) diff --git a/ohos_adapter/aafwk_adapter/src/aafwk_render_scheduler_impl.cpp b/ohos_adapter/aafwk_adapter/src/aafwk_render_scheduler_impl.cpp index c4785d8e..d95ea28d 100644 --- a/ohos_adapter/aafwk_adapter/src/aafwk_render_scheduler_impl.cpp +++ b/ohos_adapter/aafwk_adapter/src/aafwk_render_scheduler_impl.cpp @@ -34,7 +34,7 @@ void AafwkRenderSchedulerImpl::NotifyBrowserFd( return; } if (browser == nullptr) { - WVLOG_E("browser is nullptr!"); + WVLOG_D("NotifyBrowserFd for render process."); renderSchedulerHostAdapter_->NotifyBrowser(ipcFd, sharedFd, crashFd, nullptr); } else { sptr browserHost = iface_cast(browser); diff --git a/ohos_adapter/hiviewdfx_adapter/include/hitrace_adapter_impl.h b/ohos_adapter/hiviewdfx_adapter/include/hitrace_adapter_impl.h index 227957c6..97cde921 100644 --- a/ohos_adapter/hiviewdfx_adapter/include/hitrace_adapter_impl.h +++ b/ohos_adapter/hiviewdfx_adapter/include/hitrace_adapter_impl.h @@ -43,14 +43,7 @@ public: void CountOHOSTrace(const std::string& name, int64_t count) override; - void UpdateOHOSTraceTag(const char* value); - bool IsACETraceEnable() override; - -private: - bool firstAceEnable_ = false; - bool isNWEBTraceEnable_ = false; - bool isOHOSTraceEnable_ = false; }; } // namespace OHOS::NWeb diff --git a/ohos_adapter/hiviewdfx_adapter/src/hitrace_adapter_impl.cpp b/ohos_adapter/hiviewdfx_adapter/src/hitrace_adapter_impl.cpp index 8b9a6b36..62faf1a0 100644 --- a/ohos_adapter/hiviewdfx_adapter/src/hitrace_adapter_impl.cpp +++ b/ohos_adapter/hiviewdfx_adapter/src/hitrace_adapter_impl.cpp @@ -63,46 +63,42 @@ bool HiTraceAdapterImpl::IsHiTraceEnable() int changed = 0; const char *enable = CachedParameterGetChanged(g_Handle, &changed); uint64_t tags = static_cast(ConvertToInt(enable, 0)); - firstAceEnable_ = tags & HITRACE_TAG_ACE; return (tags & HITRACE_TAG_NWEB); } void HiTraceAdapterImpl::StartOHOSTrace(const std::string& value, float limit) { - if (isOHOSTraceEnable_) { - ::StartTrace(HITRACE_TAG_ACE, value, limit); - } else if (isNWEBTraceEnable_) { + if (IsHiTraceEnable()) { ::StartTrace(HITRACE_TAG_NWEB, value, limit); + } else if (IsACETraceEnable()) { + ::StartTrace(HITRACE_TAG_ACE, value, limit); } } void HiTraceAdapterImpl::FinishOHOSTrace() { - if (isOHOSTraceEnable_) { - ::FinishTrace(HITRACE_TAG_ACE); - } else if (isNWEBTraceEnable_) { + if (IsHiTraceEnable()) { ::FinishTrace(HITRACE_TAG_NWEB); + } else if (IsACETraceEnable()) { + ::FinishTrace(HITRACE_TAG_ACE); } } void HiTraceAdapterImpl::CountOHOSTrace(const std::string& name, int64_t count) { - if (isOHOSTraceEnable_) { - ::CountTrace(HITRACE_TAG_ACE, name, count); - } else if (isNWEBTraceEnable_) { + if (IsHiTraceEnable()) { ::CountTrace(HITRACE_TAG_NWEB, name, count); + } else if (IsACETraceEnable()) { + ::CountTrace(HITRACE_TAG_ACE, name, count); } } -void HiTraceAdapterImpl::UpdateOHOSTraceTag(const char* value) -{ - auto status = std::stoul(value); - isNWEBTraceEnable_ = status & HITRACE_TAG_NWEB; - isOHOSTraceEnable_ = status & HITRACE_TAG_ACE; -} - bool HiTraceAdapterImpl::IsACETraceEnable() { - return firstAceEnable_; + static CachedHandle g_Handle = CachedParameterCreate("debug.hitrace.tags.enableflags", "0"); + int changed = 0; + const char *enable = CachedParameterGetChanged(g_Handle, &changed); + uint64_t tags = static_cast(ConvertToInt(enable, 0)); + return (tags & HITRACE_TAG_ACE); } } // namespace OHOS::NWeb diff --git a/test/unittest/aafwk_app_client_adapter/nweb_aafwk_adapter_test.cpp b/test/unittest/aafwk_app_client_adapter/nweb_aafwk_adapter_test.cpp index 6cc55f1d..abddfdb8 100644 --- a/test/unittest/aafwk_app_client_adapter/nweb_aafwk_adapter_test.cpp +++ b/test/unittest/aafwk_app_client_adapter/nweb_aafwk_adapter_test.cpp @@ -490,6 +490,8 @@ HWTEST_F(NWebAafwkAdapterTest, NWebAafwkAdapter_browserHost_020, TestSize.Level1 MessageParcel reply; MessageOption option; host->OnRemoteRequest(code, data, reply, option); + code = 100; + host->OnRemoteRequest(code, data, reply, option); } /** diff --git a/test/unittest/ohos_adapter/hiviewdfx_adapter_test/BUILD.gn b/test/unittest/ohos_adapter/hiviewdfx_adapter_test/BUILD.gn index e36c4bce..68f70db2 100644 --- a/test/unittest/ohos_adapter/hiviewdfx_adapter_test/BUILD.gn +++ b/test/unittest/ohos_adapter/hiviewdfx_adapter_test/BUILD.gn @@ -39,6 +39,7 @@ ohos_unittest("nweb_hiviewdfx_adapter_test") { "hilog:libhilog", "hisysevent:libhisysevent", "hitrace:hitrace_meter", + "init:libbegetutil", ] } diff --git a/test/unittest/ohos_adapter/hiviewdfx_adapter_test/hiviewdfx_adapter_test.cpp b/test/unittest/ohos_adapter/hiviewdfx_adapter_test/hiviewdfx_adapter_test.cpp index 8b27bc9c..08bfbc64 100644 --- a/test/unittest/ohos_adapter/hiviewdfx_adapter_test/hiviewdfx_adapter_test.cpp +++ b/test/unittest/ohos_adapter/hiviewdfx_adapter_test/hiviewdfx_adapter_test.cpp @@ -18,6 +18,9 @@ #include "ohos_adapter_helper.h" #include "hitrace_adapter_impl.h" +#include "parameters.h" +using namespace OHOS; + using testing::ext::TestSize; namespace OHOS::NWeb { @@ -88,15 +91,12 @@ HWTEST(HiViewDFXAdapterTest, NormalScene, TestSize.Level1) */ HWTEST(HiViewDFXAdapterTest, NormalScene_01, TestSize.Level1) { - uint64_t val = (1ULL << 24); - std::string value = std::to_string(val); - HiTraceAdapterImpl::GetInstance().UpdateOHOSTraceTag(value.c_str()); OhosAdapterHelper::GetInstance().GetHiTraceAdapterInstance().StartOHOSTrace("test"); OhosAdapterHelper::GetInstance().GetHiTraceAdapterInstance().CountOHOSTrace("test", 1); OhosAdapterHelper::GetInstance().GetHiTraceAdapterInstance().FinishOHOSTrace(); - val = (1ULL << 39); - value = std::to_string(val); - HiTraceAdapterImpl::GetInstance().UpdateOHOSTraceTag(value.c_str()); + uint64_t val = (1ULL << 24); + std::string value = std::to_string(val); + OHOS::system::SetParameter("debug.hitrace.tags.enableflags", value); OhosAdapterHelper::GetInstance().GetHiTraceAdapterInstance().StartOHOSTrace("test"); OhosAdapterHelper::GetInstance().GetHiTraceAdapterInstance().CountOHOSTrace("test", 1); OhosAdapterHelper::GetInstance().GetHiTraceAdapterInstance().FinishOHOSTrace(); -- Gitee From d83d31b4604192692d7c79d98df7108e3652a42f Mon Sep 17 00:00:00 2001 From: zhaodan_123 Date: Thu, 11 Jul 2024 10:21:09 +0800 Subject: [PATCH 34/50] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=9A=E8=BF=87Guid?= =?UTF-8?q?=E8=8E=B7=E5=8F=96ItemState=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhaodan_123 Change-Id: Ib712ef8df0f475f1ba0ad3e00d6f6b970b80e2a6 Signed-off-by: zhaodan_123 --- .../napi/webviewcontroller/napi_web_download_item.cpp | 9 +++++---- ohos_nweb/include/nweb_c_api.h | 2 ++ ohos_nweb/src/nweb_helper.cpp | 11 ++++++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/napi/webviewcontroller/napi_web_download_item.cpp b/interfaces/kits/napi/webviewcontroller/napi_web_download_item.cpp index 0c9742d5..a912fbdf 100644 --- a/interfaces/kits/napi/webviewcontroller/napi_web_download_item.cpp +++ b/interfaces/kits/napi/webviewcontroller/napi_web_download_item.cpp @@ -513,8 +513,8 @@ napi_value NapiWebDownloadItem::JS_Pause(napi_env env, napi_callback_info cbinfo WVLOG_E("[DOWNLOAD] unwrap webDownloadItem failed"); return nullptr; } - NWebDownloadItemState state = WebDownload_GetItemState( - webDownloadItem->nwebId, webDownloadItem->webDownloadId); + NWebDownloadItemState state = WebDownload_GetItemStateByGuid(webDownloadItem->guid); + WVLOG_D("[DOWNLOAD] pause state %{public}d", static_cast(state)); if (state != NWebDownloadItemState::IN_PROGRESS && state != NWebDownloadItemState::PENDING) { BusinessError::ThrowErrorByErrcode(env, DOWNLOAD_NOT_START); @@ -545,8 +545,8 @@ napi_value NapiWebDownloadItem::JS_Resume(napi_env env, napi_callback_info cbinf return nullptr; } - NWebDownloadItemState state = WebDownload_GetItemState( - webDownloadItem->nwebId, webDownloadItem->webDownloadId); + NWebDownloadItemState state = WebDownload_GetItemStateByGuid(webDownloadItem->guid); + WVLOG_D("[DOWNLOAD] resume state %{public}d", static_cast(state)); if (state != NWebDownloadItemState::PAUSED) { BusinessError::ThrowErrorByErrcode(env, DOWNLOAD_NOT_PAUSED); return nullptr; @@ -614,6 +614,7 @@ napi_value NapiWebDownloadItem::JS_Start(napi_env env, napi_callback_info cbinfo return nullptr; } webDownloadItem->downloadPath = std::string(stringValue); + WVLOG_D("NapiWebDownloadItem::JS_Start, download_path: %s", webDownloadItem->downloadPath.c_str()); WebDownload_Continue(webDownloadItem->before_download_callback, webDownloadItem->downloadPath.c_str()); return nullptr; } diff --git a/ohos_nweb/include/nweb_c_api.h b/ohos_nweb/include/nweb_c_api.h index 91ddad02..933770ed 100644 --- a/ohos_nweb/include/nweb_c_api.h +++ b/ohos_nweb/include/nweb_c_api.h @@ -75,6 +75,8 @@ NWEB_EXPORT void WebDownload_Resume(const WebDownloadItemCallbackWrapper *wrappe NWEB_EXPORT NWebDownloadItemState WebDownload_GetItemState(int32_t nwebId, long downloadItemId); +NWEB_EXPORT NWebDownloadItemState WebDownload_GetItemStateByGuid(const std::string& guid); + NWEB_EXPORT void WebDownloadItem_CreateWebDownloadItem(NWebDownloadItem **downloadItem); NWEB_EXPORT void WebDownloadItem_Destroy(NWebDownloadItem *downloadItem); diff --git a/ohos_nweb/src/nweb_helper.cpp b/ohos_nweb/src/nweb_helper.cpp index d2d633f0..432995c8 100644 --- a/ohos_nweb/src/nweb_helper.cpp +++ b/ohos_nweb/src/nweb_helper.cpp @@ -73,6 +73,7 @@ static bool g_isFirstTimeStartUp = false; DO(WebDownload_Pause) \ DO(WebDownload_Resume) \ DO(WebDownload_GetItemState) \ + DO(WebDownload_GetItemStateByGuid) \ DO(WebDownloadItem_Guid) \ DO(WebDownloadItem_GetDownloadItemId) \ DO(WebDownloadItem_GetState) \ @@ -279,12 +280,20 @@ extern "C" void WebDownload_Resume(const WebDownloadItemCallbackWrapper *wrapper extern "C" NWebDownloadItemState WebDownload_GetItemState(int32_t nwebId, long downloadItemId) { - if (!g_nwebCApi->impl_WebDownload_GetItemState) { + if (!g_nwebCApi || !g_nwebCApi->impl_WebDownload_GetItemState) { return NWebDownloadItemState::MAX_DOWNLOAD_STATE; } return g_nwebCApi->impl_WebDownload_GetItemState(nwebId, downloadItemId); } +extern "C" NWebDownloadItemState WebDownload_GetItemStateByGuid(const std::string& guid) +{ + if (!g_nwebCApi || !g_nwebCApi->impl_WebDownload_GetItemStateByGuid) { + return NWebDownloadItemState::MAX_DOWNLOAD_STATE; + } + return g_nwebCApi->impl_WebDownload_GetItemStateByGuid(guid); +} + extern "C" char *WebDownloadItem_Guid(const NWebDownloadItem *downloadItem) { if (!g_nwebCApi->impl_WebDownloadItem_Guid) { -- Gitee From b880bdb1930b2e236fc4c177575cd1e8838f4c36 Mon Sep 17 00:00:00 2001 From: jidehong Date: Thu, 11 Jul 2024 20:58:57 +0800 Subject: [PATCH 35/50] =?UTF-8?q?openssl/ssl.h=E6=98=BE=E5=BC=8F=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jidehong --- ohos_adapter/BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ohos_adapter/BUILD.gn b/ohos_adapter/BUILD.gn index eb9d74d7..003f6c53 100644 --- a/ohos_adapter/BUILD.gn +++ b/ohos_adapter/BUILD.gn @@ -149,7 +149,7 @@ ohos_shared_library("nweb_ohos_adapter") { "samgr:samgr_proxy", "time_service:time_client", "window_manager:libdm", - "openssl:libssl_shared" + "openssl:libssl_shared", ] if (webview_soc_perf_enable) { -- Gitee From b97b13e32104390db400acf25e6d00a4c4e5e970 Mon Sep 17 00:00:00 2001 From: jidehong Date: Fri, 12 Jul 2024 10:16:23 +0800 Subject: [PATCH 36/50] =?UTF-8?q?openssl/ssl.h=E6=98=BE=E5=BC=8F=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jidehong --- ohos_adapter/BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ohos_adapter/BUILD.gn b/ohos_adapter/BUILD.gn index 003f6c53..249ec11a 100644 --- a/ohos_adapter/BUILD.gn +++ b/ohos_adapter/BUILD.gn @@ -143,13 +143,13 @@ ohos_shared_library("nweb_ohos_adapter") { "napi:ace_napi", "netmanager_base:net_conn_manager_if", "netstack:net_ssl", + "openssl:libssl_shared", "pasteboard:pasteboard_client", "relational_store:native_rdb", "resource_schedule_service:ressched_client", "samgr:samgr_proxy", "time_service:time_client", "window_manager:libdm", - "openssl:libssl_shared", ] if (webview_soc_perf_enable) { -- Gitee From 09b2e6857be4d53615f0b4f4161797826adbd491 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 13 Jul 2024 23:33:47 +0800 Subject: [PATCH 37/50] web log Signed-off-by: unknown --- ohos_interface/ohos_glue/base/include/ark_web_log_utils.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ohos_interface/ohos_glue/base/include/ark_web_log_utils.h b/ohos_interface/ohos_glue/base/include/ark_web_log_utils.h index 164ff908..f2bf1b2e 100644 --- a/ohos_interface/ohos_glue/base/include/ark_web_log_utils.h +++ b/ohos_interface/ohos_glue/base/include/ark_web_log_utils.h @@ -38,13 +38,15 @@ #define ARK_WEB_BASE_DV_LOG(fmt, ...) WVLOG_D(LOG_FMT_PREFIX fmt, ##__VA_ARGS__) #define ARK_WEB_BASE_REF_LOG(fmt, ...) WVLOG_D(LOG_FMT_PREFIX fmt, ##__VA_ARGS__) + +#define ARK_WEB_BASE_DEBUG_LOG(fmt, ...) WVLOG_D(LOG_FMT_PREFIX fmt, ##__VA_ARGS__) #else #define ARK_WEB_BASE_DV_LOG(fmt, ...) #define ARK_WEB_BASE_REF_LOG(fmt, ...) -#endif -#define ARK_WEB_BASE_DEBUG_LOG(fmt, ...) WVLOG_D(LOG_FMT_PREFIX fmt, ##__VA_ARGS__) +#define ARK_WEB_BASE_DEBUG_LOG(fmt, ...) +#endif #define ARK_WEB_BASE_INFO_LOG(fmt, ...) WVLOG_I(LOG_FMT_PREFIX fmt, ##__VA_ARGS__) -- Gitee From a62110d9d25608a6126ffc5bd332f688922e6747 Mon Sep 17 00:00:00 2001 From: abc12133 Date: Mon, 15 Jul 2024 14:27:33 +0800 Subject: [PATCH 38/50] add extra autofill type Signed-off-by: abc12133 --- ohos_interface/include/ohos_nweb/nweb_autofill.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/ohos_interface/include/ohos_nweb/nweb_autofill.h b/ohos_interface/include/ohos_nweb/nweb_autofill.h index f84a0c6e..8dbff39d 100644 --- a/ohos_interface/include/ohos_nweb/nweb_autofill.h +++ b/ohos_interface/include/ohos_nweb/nweb_autofill.h @@ -26,20 +26,28 @@ const std::string NWEB_VIEW_DATA_KEY_RECT_Y = "y"; const std::string NWEB_VIEW_DATA_KEY_RECT_W = "width"; const std::string NWEB_VIEW_DATA_KEY_RECT_H = "height"; const std::string NWEB_VIEW_DATA_KEY_VALUE = "value"; +const std::string NWEB_VIEW_DATA_KEY_PLACEHOLDER = "placeholder"; const std::string NWEB_AUTOFILL_EVENT_SAVE = "save"; const std::string NWEB_AUTOFILL_EVENT_FILL = "fill"; const std::string NWEB_AUTOFILL_EVENT_UPDATE = "update"; const std::string NWEB_AUTOFILL_EVENT_CLOSE = "close"; +const std::string NWEB_AUTOFILL_STREET_ADDRESS = "street-address"; +const std::string NWEB_AUTOFILL_ADDRESS_LEVEL_3 = "address-level3"; +const std::string NWEB_AUTOFILL_ADDRESS_LEVEL_2 = "address-level2"; +const std::string NWEB_AUTOFILL_ADDRESS_LEVEL_1 = "address-level1"; +const std::string NWEB_AUTOFILL_COUNTRY = "country"; const std::string NWEB_AUTOFILL_NAME = "name"; const std::string NWEB_AUTOFILL_FAMILY_NAME = "family-name"; const std::string NWEB_AUTOFILL_GIVEN_NAME = "given-name"; -const std::string NWEB_AUTOFILL_NICKNAME = "nickname"; +const std::string NWEB_AUTOFILL_TEL_NATIONAL = "tel-national"; +const std::string NWEB_AUTOFILL_TEL = "tel"; +const std::string NWEB_AUTOFILL_TEL_COUNTRY_CODE = "tel-country-code"; const std::string NWEB_AUTOFILL_EMAIL = "email"; -const std::string NWEB_AUTOFILL_STREET_ADDRESS = "street-address"; +const std::string NWEB_AUTOFILL_CC_NUMBER = "cc-number"; const std::string NWEB_AUTOFILL_ID_CARD_NUMBER = "id-card-number"; -const std::string NWEB_AUTOFILL_TEL_NATIONAL = "tel-national"; +const std::string NWEB_AUTOFILL_NICKNAME = "nickname"; enum NWebAutofillEvent { UNKNOWN = 0, -- Gitee From 1f5c918f8d91901115ea09bbb4a0e0e8b9a1f321 Mon Sep 17 00:00:00 2001 From: wuxinzao Date: Mon, 15 Jul 2024 16:02:16 +0800 Subject: [PATCH 39/50] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86image=20decode?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E7=9A=84ut=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuxinzao --- bundle.json | 1 + .../ohos_adapter/ohos_image_adapter/BUILD.gn | 50 +++ .../ohos_image_decoder_adapter_test.cpp | 406 ++++++++++++++++++ 3 files changed, 457 insertions(+) create mode 100644 test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn create mode 100644 test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp diff --git a/bundle.json b/bundle.json index 2165b09f..4e86bbfc 100644 --- a/bundle.json +++ b/bundle.json @@ -262,6 +262,7 @@ "//base/web/webview/test/unittest/ohos_adapter/res_sched_adapter_impl_test:unittest", "//base/web/webview/test/unittest/ohos_adapter/web_data_base_adapter_impl_test:unittest", "//base/web/webview/test/unittest/ohos_adapter/ohos_resource_adapter_test:unittest", + "//base/web/webview/test/unittest/ohos_adapter/ohos_image_adapter:unittest", "//base/web/webview/test/unittest/ohos_adapter/graphic_adapter_test:unittest", "//base/web/webview/test/unittest/ohos_adapter/datashare_adapter_impl_test:unittest", "//base/web/webview/test/unittest/ohos_adapter/ohos_init_web_adapter:unittest", diff --git a/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn b/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn new file mode 100644 index 00000000..54dffc3b --- /dev/null +++ b/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn @@ -0,0 +1,50 @@ +# 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. + +import("//build/test.gni") + +module_output_path = "web/webview" + +config("module_private_config") { + visibility = [ ":*" ] + + include_dirs = [ "../../../../ohos_adapter/ohos_image_adapter/include" ] +} + +ohos_unittest("ohos_image_decoder_adapter_test") { + module_out_path = module_output_path + + sources = [ "ohos_image_decoder_adapter_test.cpp" ] + + configs = [ ":module_private_config" ] + + deps = [ + "../../../../ohos_adapter:nweb_ohos_adapter", + "../../../../ohos_nweb:libnweb", + "//third_party/googletest:gmock_main", + "//third_party/googletest:gtest_main", + ] + + external_deps = [ + "c_utils:utils", + "graphic_2d:libnative_image", + "hilog:libhilog", + "image_framework:image_native", + "image_framework:image_utils", + ] +} + +group("unittest") { + testonly = true + deps = [ ":ohos_image_decoder_adapter_test" ] +} diff --git a/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp b/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp new file mode 100644 index 00000000..5a645152 --- /dev/null +++ b/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp @@ -0,0 +1,406 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +#define private public +#include "directory_ex.h" +#include "image_source.h" +#include "image_utils.h" +#include "ohos_image_decoder_adapter_impl.h" +#undef private + +using namespace testing; +using namespace testing::ext; + +namespace OHOS { + +namespace NWeb { +namespace { + +static const std::string IMAGE_FILE_PATH = "/data/local/tmp/sample1.heic"; + +bool ReadFileToBuffer(const std::string &filePath, uint8_t *buffer, size_t bufferSize) +{ + std::string realPath; + if (!OHOS::PathToRealPath(filePath, realPath)) { + return false; + } + + if (buffer == nullptr) { + return false; + } + + FILE *fp = fopen(realPath.c_str(), "rb"); + if (fp == nullptr) { + return false; + } + if (fseek(fp, 0, SEEK_END) != 0) { + return false; + } + size_t fileSize = ftell(fp); + if (fseek(fp, 0, SEEK_SET) != 0) { + return false; + } + if (bufferSize < fileSize) { + fclose(fp); + return false; + } + size_t retSize = fread(buffer, 1, fileSize, fp); + if (retSize != fileSize) { + fclose(fp); + return false; + } + int ret = fclose(fp); + if (ret != 0) { + return true; + } + return true; +} + +bool TestInitImage(OhosImageDecoderAdapterImpl &imageDecoderAdapterImpl, uint8_t *buffer) +{ + size_t bufferSize = 0; + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + if (!boolRes) { + return false; + } + + buffer = static_cast(malloc(bufferSize)); + if (buffer == nullptr) { + return false; + } + + boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); + if (!boolRes) { + free(buffer); + return false; + } + + boolRes = imageDecoderAdapterImpl.ParseImageInfo(buffer, bufferSize); + if (!boolRes) { + free(buffer); + return false; + } + return true; +} +} // namespace + +class OhosImageAdapterTest : public testing::Test { +public: + static void SetUpTestCase(void); + static void TearDownTestCase(void); + void SetUp(); + void TearDown(); +}; + +void OhosImageAdapterTest::SetUpTestCase(void) +{} + +void OhosImageAdapterTest::TearDownTestCase(void) +{} + +void OhosImageAdapterTest::SetUp(void) +{} + +void OhosImageAdapterTest::TearDown(void) +{} + +/** + * @tc.name: OhosImageAdapterTest_ParseImageInfo_001 + * @tc.desc: ParseImageInfo. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_ParseImageInfo_001, TestSize.Level1) +{ + uint8_t data[32] = {0}; + uint32_t size = sizeof(data); + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool result = imageDecoderAdapterImpl.ParseImageInfo(nullptr, size); + EXPECT_FALSE(result); + + result = imageDecoderAdapterImpl.ParseImageInfo(data, 0); + EXPECT_FALSE(result); + + result = imageDecoderAdapterImpl.ParseImageInfo(data, size); + EXPECT_FALSE(result); + + size_t bufferSize = 0; + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + EXPECT_TRUE(boolRes); + + uint8_t *buffer = static_cast(malloc(bufferSize)); + EXPECT_NE(buffer, nullptr); + + boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); + EXPECT_TRUE(boolRes); + + boolRes = imageDecoderAdapterImpl.ParseImageInfo(buffer, (uint32_t)bufferSize); + EXPECT_TRUE(boolRes); + + free(buffer); +} + +/** + * @tc.name: OhosImageAdapterTest_GetEncodedFormat_002 + * @tc.desc: GetEncodedFormat. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetEncodedFormat_002, TestSize.Level1) +{ + uint8_t *buffer = nullptr; + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool ret = TestInitImage(imageDecoderAdapterImpl, buffer); + EXPECT_TRUE(ret); + std::string format = imageDecoderAdapterImpl.GetEncodedFormat(); + EXPECT_NE(format, ""); + + free(buffer); +} + +/** + * @tc.name: OhosImageAdapterTest_GetImageWidth_003 + * @tc.desc: GetImageWidth. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetImageWidth_003, TestSize.Level1) +{ + uint8_t *buffer = nullptr; + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool ret = TestInitImage(imageDecoderAdapterImpl, buffer); + EXPECT_TRUE(ret); + int32_t width = imageDecoderAdapterImpl.GetImageWidth(); + EXPECT_NE(width, 0); + + free(buffer); +} + +/** + * @tc.name: OhosImageAdapterTest_GetImageHeight_004 + * @tc.desc: GetImageHeight. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetImageHeight_004, TestSize.Level1) +{ + uint8_t *buffer = nullptr; + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool ret = TestInitImage(imageDecoderAdapterImpl, buffer); + EXPECT_TRUE(ret); + int32_t heigth = imageDecoderAdapterImpl.GetImageHeight(); + EXPECT_NE(heigth, 0); + + free(buffer); +} + +/** + * @tc.name: OhosImageAdapterTest_DecodeToPixelMap_005 + * @tc.desc: DecodeToPixelMap. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_DecodeToPixelMap_005, TestSize.Level1) +{ + size_t bufferSize = 0; + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + + uint8_t *buffer = static_cast(malloc(bufferSize)); + + boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); + EXPECT_TRUE(boolRes); + bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + EXPECT_TRUE(ret); + + free(buffer); +} + +/** + * @tc.name: OhosImageAdapterTest_GetFd_006 + * @tc.desc: GetFd. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetFd_006, TestSize.Level1) +{ + size_t bufferSize = 0; + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + + uint8_t *buffer = static_cast(malloc(bufferSize)); + + boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); + EXPECT_TRUE(boolRes); + + bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + EXPECT_TRUE(ret); + + int32_t Fd = imageDecoderAdapterImpl.GetFd(); + EXPECT_NE(Fd, -1); + + free(buffer); +} + +/** + * @tc.name: OhosImageAdapterTest_GetStride_007 + * @tc.desc: GetStride. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetStride_007, TestSize.Level1) +{ + size_t bufferSize = 0; + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + + uint8_t *buffer = static_cast(malloc(bufferSize)); + + boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); + EXPECT_TRUE(boolRes); + + bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + EXPECT_TRUE(ret); + + int32_t stride = imageDecoderAdapterImpl.GetStride(); + EXPECT_NE(stride, 0); + + free(buffer); +} + +/** + * @tc.name: OhosImageAdapterTest_GetOffset_008 + * @tc.desc: GetOffset. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetOffset_008, TestSize.Level1) +{ + size_t bufferSize = 0; + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + + uint8_t *buffer = static_cast(malloc(bufferSize)); + + boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); + EXPECT_TRUE(boolRes); + + bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + EXPECT_TRUE(ret); + + int32_t offset = imageDecoderAdapterImpl.GetOffset(); + EXPECT_EQ(offset, 0); + + free(buffer); +} + +/** + * @tc.name: OhosImageAdapterTest_GetSize_009 + * @tc.desc: GetSize. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetSize_009, TestSize.Level1) +{ + size_t bufferSize = 0; + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + + uint8_t *buffer = static_cast(malloc(bufferSize)); + + boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); + EXPECT_TRUE(boolRes); + + bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + EXPECT_TRUE(ret); + + uint64_t size = imageDecoderAdapterImpl.GetSize(); + EXPECT_NE(size, 0); + + free(buffer); +} + +/** + * @tc.name: OhosImageAdapterTest_GetNativeWindowBuffer_010 + * @tc.desc: GetNativeWindowBuffer. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetNativeWindowBuffer_010, TestSize.Level1) +{ + size_t bufferSize = 0; + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + + uint8_t *buffer = static_cast(malloc(bufferSize)); + + boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); + EXPECT_TRUE(boolRes); + + bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + EXPECT_TRUE(ret); + + void* offset = imageDecoderAdapterImpl.GetNativeWindowBuffer(); + EXPECT_NE(offset, nullptr); + + free(buffer); +} + + +/** + * @tc.name: OhosImageAdapterTest_GetPlanesCount_011 + * @tc.desc: GetPlanesCount. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetPlanesCount_011, TestSize.Level1) +{ + size_t bufferSize = 0; + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + + uint8_t *buffer = static_cast(malloc(bufferSize)); + + boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); + EXPECT_TRUE(boolRes); + + bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + EXPECT_TRUE(ret); + + int32_t planesCount = imageDecoderAdapterImpl.GetPlanesCount(); + EXPECT_EQ(planesCount, 0); + + free(buffer); +} + +} // namespace NWeb +} // namespace OHOS -- Gitee From 8dd3af42e34de639e420bc89dcb9791106a5a945 Mon Sep 17 00:00:00 2001 From: j00466033 Date: Mon, 15 Jul 2024 17:14:28 +0800 Subject: [PATCH 40/50] =?UTF-8?q?adblock=20tdd=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: j00466033 --- .../nweb_helper_test/nweb_helper_test.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/test/unittest/nweb_helper_test/nweb_helper_test.cpp b/test/unittest/nweb_helper_test/nweb_helper_test.cpp index 51d27e0f..4c3db95c 100644 --- a/test/unittest/nweb_helper_test/nweb_helper_test.cpp +++ b/test/unittest/nweb_helper_test/nweb_helper_test.cpp @@ -475,6 +475,8 @@ HWTEST_F(NwebHelperTest, NWebHelper_GetWebEngineHandler_008, TestSize.Level1) EXPECT_EQ(nweb, nullptr); std::shared_ptr cook = NWebHelper::Instance().GetCookieManager(); EXPECT_EQ(cook, nullptr); + auto manager = NWebHelper::Instance().GetAdsBlockManager(); + EXPECT_EQ(manager, nullptr); std::shared_ptr config = std::make_shared(); NWebHelper::Instance().SetHttpDns(config); NWebHelper::Instance().PrepareForPageLoad("web_test", true, 0); @@ -497,6 +499,8 @@ HWTEST_F(NwebHelperTest, NWebHelper_GetWebEngineHandler_008, TestSize.Level1) EXPECT_TRUE(result); cook = NWebHelper::Instance().GetCookieManager(); EXPECT_NE(cook, nullptr); + manager = NWebHelper::Instance().GetAdsBlockManager(); + EXPECT_NE(manager, nullptr); NWebHelper::Instance().SetWebTag(1, "webtag"); NWebHelper::Instance().libHandleWebEngine_ = nullptr; @@ -604,12 +608,14 @@ HWTEST_F(NwebHelperTest, NWebHelper_EnableWholeWebPageDrawing_001, TestSize.Leve */ HWTEST_F(NwebHelperTest, NWebHelper_GetAdsBlockManager_001, TestSize.Level1) { + NWebHelper::Instance().nwebEngine_ = nullptr; + std::shared_ptr create_info = std::make_shared(); + std::shared_ptr nweb = NWebHelper::Instance().CreateNWeb(create_info); + EXPECT_EQ(nweb, nullptr); + nweb = NWebHelper::Instance().GetNWeb(1); + EXPECT_EQ(nweb, nullptr); auto manager = NWebHelper::Instance().GetAdsBlockManager(); - bool result = false; - if (manager != nullptr) { - result = true; - } - EXPECT_EQ(RESULT_OK, result); + EXPECT_EQ(manager, nullptr); } } // namespace OHOS::NWeb } -- Gitee From db49a788bfc3a38542086195209ba8ea6873664e Mon Sep 17 00:00:00 2001 From: wuxinzao Date: Mon, 15 Jul 2024 17:20:18 +0800 Subject: [PATCH 41/50] =?UTF-8?q?=E6=A3=80=E8=A7=86=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuxinzao --- test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn | 2 +- .../ohos_image_adapter/ohos_image_decoder_adapter_test.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn b/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn index 54dffc3b..ffce0550 100644 --- a/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn +++ b/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022 Huawei Device Co., Ltd. +# Copyright (c) 2024 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at diff --git a/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp b/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp index 5a645152..9b06a23e 100644 --- a/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp +++ b/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at -- Gitee From fe2bd40ff8d61f46c191efa40bdc9b78b1a52b88 Mon Sep 17 00:00:00 2001 From: zhengenhao0 Date: Tue, 16 Jul 2024 14:47:58 +0800 Subject: [PATCH 42/50] update NWeb.hap in master to 0716 Signed-off-by: zhengenhao0 --- ohos_nweb/prebuilts/arm/NWeb.hap | 4 ++-- ohos_nweb/prebuilts/arm64/NWeb.hap | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ohos_nweb/prebuilts/arm/NWeb.hap b/ohos_nweb/prebuilts/arm/NWeb.hap index e1f086df..74bbe176 100644 --- a/ohos_nweb/prebuilts/arm/NWeb.hap +++ b/ohos_nweb/prebuilts/arm/NWeb.hap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:683b1427ef008ab1046561128138933a52d3188709659fbe34b60c7e921156f2 -size 122977436 +oid sha256:5a65a26b648b94c2b2083d104e50c792396ff6f5f35c9d4c1f0e7556bed4233b +size 122936924 diff --git a/ohos_nweb/prebuilts/arm64/NWeb.hap b/ohos_nweb/prebuilts/arm64/NWeb.hap index e82ba550..f003dfd7 100644 --- a/ohos_nweb/prebuilts/arm64/NWeb.hap +++ b/ohos_nweb/prebuilts/arm64/NWeb.hap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7063bd3158146f488df3794da6148cf24a9c74deb56293a31499c664e03d512 -size 190665927 +oid sha256:3169d53d1d80bdd38c769c14b40948c9c771bac4e2e1523eff7f2bf9762da93e +size 190643577 -- Gitee From 5445af47238b61644a6ab0527c7399b6e8b39651 Mon Sep 17 00:00:00 2001 From: wuxinzao Date: Tue, 16 Jul 2024 15:56:34 +0800 Subject: [PATCH 43/50] =?UTF-8?q?=E6=A3=80=E8=A7=86=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuxinzao --- .../include/ohos_image_decoder_adapter_impl.h | 1 + .../ohos_adapter/ohos_image_adapter/BUILD.gn | 5 +- .../ohos_image_decoder_adapter_test.cpp | 197 +++++++++++++----- 3 files changed, 147 insertions(+), 56 deletions(-) diff --git a/ohos_adapter/ohos_image_adapter/include/ohos_image_decoder_adapter_impl.h b/ohos_adapter/ohos_image_adapter/include/ohos_image_decoder_adapter_impl.h index 4e8af4e6..f520112b 100755 --- a/ohos_adapter/ohos_image_adapter/include/ohos_image_decoder_adapter_impl.h +++ b/ohos_adapter/ohos_image_adapter/include/ohos_image_decoder_adapter_impl.h @@ -50,6 +50,7 @@ public: void* GetNativeWindowBuffer() override; int32_t GetPlanesCount() override; void ReleasePixelMap() override; + Media::PixelMap* getPixelMap() { return pixelMap_.get(); }; private: Media::ImageInfo imageInfo_; diff --git a/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn b/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn index ffce0550..ba7d1c9d 100644 --- a/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn +++ b/test/unittest/ohos_adapter/ohos_image_adapter/BUILD.gn @@ -18,7 +18,10 @@ module_output_path = "web/webview" config("module_private_config") { visibility = [ ":*" ] - include_dirs = [ "../../../../ohos_adapter/ohos_image_adapter/include" ] + include_dirs = [ + "../../../../ohos_adapter/ohos_image_adapter/include", + "../../../../ohos_interface/include/ohos_adpter/ohos_image_decoder_adapter.h", + ] } ohos_unittest("ohos_image_decoder_adapter_test") { diff --git a/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp b/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp index 9b06a23e..02e60fef 100644 --- a/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp +++ b/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp @@ -20,6 +20,7 @@ #include #define private public +#include "pixel_map.h" #include "directory_ex.h" #include "image_source.h" #include "image_utils.h" @@ -34,7 +35,7 @@ namespace OHOS { namespace NWeb { namespace { -static const std::string IMAGE_FILE_PATH = "/data/local/tmp/sample1.heic"; +static const std::string IMAGE_FILE_PATH = "/data/local/tmp/image/test.heic"; bool ReadFileToBuffer(const std::string &filePath, uint8_t *buffer, size_t bufferSize) { @@ -79,7 +80,7 @@ bool TestInitImage(OhosImageDecoderAdapterImpl &imageDecoderAdapterImpl, uint8_t size_t bufferSize = 0; bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); if (!boolRes) { - return false; + return false; } buffer = static_cast(malloc(bufferSize)); @@ -100,6 +101,33 @@ bool TestInitImage(OhosImageDecoderAdapterImpl &imageDecoderAdapterImpl, uint8_t } return true; } + +bool TestDecodeImage(OhosImageDecoderAdapterImpl &imageDecoderAdapterImpl, uint8_t *buffer) +{ + size_t bufferSize = 0; + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + if (!boolRes) { + return false; + } + + buffer = static_cast(malloc(bufferSize)); + if (buffer == nullptr) { + return false; + } + + boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); + if (!boolRes) { + free(buffer); + return false; + } + + boolRes = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + if (!boolRes) { + free(buffer); + return false; + } + return true; +} } // namespace class OhosImageAdapterTest : public testing::Test { @@ -227,13 +255,17 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_DecodeToPixelMap_005, TestSi size_t bufferSize = 0; OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(nullptr, bufferSize); + EXPECT_FALSE(ret); + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); uint8_t *buffer = static_cast(malloc(bufferSize)); boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); EXPECT_TRUE(boolRes); - bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + + ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); EXPECT_TRUE(ret); free(buffer); @@ -247,23 +279,26 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_DecodeToPixelMap_005, TestSi */ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetFd_006, TestSize.Level1) { - size_t bufferSize = 0; + uint8_t *buffer = nullptr; OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; - bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + int32_t fd = imageDecoderAdapterImpl.GetFd(); + EXPECT_EQ(fd, -1); - uint8_t *buffer = static_cast(malloc(bufferSize)); - - boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); - EXPECT_TRUE(boolRes); - - bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + bool ret = TestDecodeImage(imageDecoderAdapterImpl, buffer); EXPECT_TRUE(ret); - int32_t Fd = imageDecoderAdapterImpl.GetFd(); - EXPECT_NE(Fd, -1); + fd = imageDecoderAdapterImpl.GetFd(); + EXPECT_NE(fd, -1); + + auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + pixelMap->FreePixelMap(); + fd = imageDecoderAdapterImpl.GetFd(); + EXPECT_EQ(fd, -1); free(buffer); + + imageDecoderAdapterImpl.ReleasePixelMap(); } /** @@ -274,23 +309,26 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetFd_006, TestSize.Level1) */ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetStride_007, TestSize.Level1) { - size_t bufferSize = 0; + uint8_t *buffer = nullptr; OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; - bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); - - uint8_t *buffer = static_cast(malloc(bufferSize)); - - boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); - EXPECT_TRUE(boolRes); + int32_t stride = imageDecoderAdapterImpl.GetStride(); + EXPECT_EQ(stride, 0); - bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + bool ret = TestDecodeImage(imageDecoderAdapterImpl, buffer); EXPECT_TRUE(ret); - int32_t stride = imageDecoderAdapterImpl.GetStride(); + stride = imageDecoderAdapterImpl.GetStride(); EXPECT_NE(stride, 0); + auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + pixelMap->FreePixelMap(); + stride = imageDecoderAdapterImpl.GetStride(); + EXPECT_EQ(stride, 0); + free(buffer); + + imageDecoderAdapterImpl.ReleasePixelMap(); } /** @@ -301,23 +339,26 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetStride_007, TestSize.Leve */ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetOffset_008, TestSize.Level1) { - size_t bufferSize = 0; + uint8_t *buffer = nullptr; OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; - bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); - - uint8_t *buffer = static_cast(malloc(bufferSize)); - - boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); - EXPECT_TRUE(boolRes); + int32_t offset = imageDecoderAdapterImpl.GetOffset(); + EXPECT_EQ(offset, 0); - bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + bool ret = TestDecodeImage(imageDecoderAdapterImpl, buffer); EXPECT_TRUE(ret); - int32_t offset = imageDecoderAdapterImpl.GetOffset(); + offset = imageDecoderAdapterImpl.GetOffset(); + EXPECT_EQ(offset, 0); + + auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + pixelMap->FreePixelMap(); + offset = imageDecoderAdapterImpl.GetOffset(); EXPECT_EQ(offset, 0); free(buffer); + + imageDecoderAdapterImpl.ReleasePixelMap(); } /** @@ -328,23 +369,26 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetOffset_008, TestSize.Leve */ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetSize_009, TestSize.Level1) { - size_t bufferSize = 0; + uint8_t *buffer = nullptr; OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; - bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); - - uint8_t *buffer = static_cast(malloc(bufferSize)); - - boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); - EXPECT_TRUE(boolRes); + uint64_t size = imageDecoderAdapterImpl.GetSize(); + EXPECT_EQ(size, 0); - bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + bool ret = TestDecodeImage(imageDecoderAdapterImpl, buffer); EXPECT_TRUE(ret); - uint64_t size = imageDecoderAdapterImpl.GetSize(); + size = imageDecoderAdapterImpl.GetSize(); EXPECT_NE(size, 0); + auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + pixelMap->FreePixelMap(); + size = imageDecoderAdapterImpl.GetSize(); + EXPECT_EQ(size, 0); + free(buffer); + + imageDecoderAdapterImpl.ReleasePixelMap(); } /** @@ -355,23 +399,26 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetSize_009, TestSize.Level1 */ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetNativeWindowBuffer_010, TestSize.Level1) { - size_t bufferSize = 0; + uint8_t *buffer = nullptr; OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; - bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); - - uint8_t *buffer = static_cast(malloc(bufferSize)); - - boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); - EXPECT_TRUE(boolRes); + void* offset = imageDecoderAdapterImpl.GetNativeWindowBuffer(); + EXPECT_EQ(offset, nullptr); - bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + bool ret = TestDecodeImage(imageDecoderAdapterImpl, buffer); EXPECT_TRUE(ret); - void* offset = imageDecoderAdapterImpl.GetNativeWindowBuffer(); + offset = imageDecoderAdapterImpl.GetNativeWindowBuffer(); + EXPECT_NE(offset, nullptr); + + auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + pixelMap->FreePixelMap(); + offset = imageDecoderAdapterImpl.GetNativeWindowBuffer(); EXPECT_NE(offset, nullptr); free(buffer); + + imageDecoderAdapterImpl.ReleasePixelMap(); } @@ -383,23 +430,63 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetNativeWindowBuffer_010, T */ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetPlanesCount_011, TestSize.Level1) { - size_t bufferSize = 0; + uint8_t *buffer = nullptr; OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; - bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + int32_t planesCount = imageDecoderAdapterImpl.GetPlanesCount(); + EXPECT_EQ(planesCount, 0); - uint8_t *buffer = static_cast(malloc(bufferSize)); + bool ret = TestDecodeImage(imageDecoderAdapterImpl, buffer); + EXPECT_TRUE(ret); + + planesCount = imageDecoderAdapterImpl.GetPlanesCount(); + EXPECT_EQ(planesCount, 0); + + auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + pixelMap->FreePixelMap(); + planesCount = imageDecoderAdapterImpl.GetPlanesCount(); + EXPECT_EQ(planesCount, 0); + + free(buffer); + + imageDecoderAdapterImpl.ReleasePixelMap(); +} + +/** + * @tc.name: OhosImageAdapterTest_Decode_012 + * @tc.desc: Decode. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_Decode_012, TestSize.Level1) +{ + OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; + uint8_t data[32] = {0}; + uint32_t size = sizeof(data); + bool ret = imageDecoderAdapterImpl.Decode(data, size, AllocatorType::kDmaAlloc, false); + EXPECT_FALSE(ret); + + ret = imageDecoderAdapterImpl.Decode(nullptr, size, AllocatorType::kDmaAlloc, false); + EXPECT_FALSE(ret); + + ret = imageDecoderAdapterImpl.Decode(data, 0, AllocatorType::kDmaAlloc, false); + EXPECT_FALSE(ret); + size_t bufferSize = 0; + bool boolRes = Media::ImageUtils::GetFileSize(IMAGE_FILE_PATH, bufferSize); + uint8_t *buffer = static_cast(malloc(bufferSize)); boolRes = ReadFileToBuffer(IMAGE_FILE_PATH, buffer, bufferSize); EXPECT_TRUE(boolRes); - bool ret = imageDecoderAdapterImpl.DecodeToPixelMap(buffer, bufferSize); + ret = imageDecoderAdapterImpl.Decode(buffer, bufferSize, AllocatorType::kDmaAlloc, true); EXPECT_TRUE(ret); - int32_t planesCount = imageDecoderAdapterImpl.GetPlanesCount(); - EXPECT_EQ(planesCount, 0); + ret = imageDecoderAdapterImpl.Decode(buffer, bufferSize, AllocatorType::kDmaAlloc, false); + EXPECT_TRUE(ret); free(buffer); + + imageDecoderAdapterImpl.ReleasePixelMap(); } } // namespace NWeb -- Gitee From a5ff3c9f53f1cf2cb6572aabcf2473ccfa4bbd96 Mon Sep 17 00:00:00 2001 From: wuxinzao Date: Tue, 16 Jul 2024 16:26:16 +0800 Subject: [PATCH 44/50] =?UTF-8?q?=E6=A3=80=E8=A7=86=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuxinzao --- .../include/ohos_image_decoder_adapter_impl.h | 2 +- .../ohos_image_decoder_adapter_test.cpp | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ohos_adapter/ohos_image_adapter/include/ohos_image_decoder_adapter_impl.h b/ohos_adapter/ohos_image_adapter/include/ohos_image_decoder_adapter_impl.h index f520112b..02e5125c 100755 --- a/ohos_adapter/ohos_image_adapter/include/ohos_image_decoder_adapter_impl.h +++ b/ohos_adapter/ohos_image_adapter/include/ohos_image_decoder_adapter_impl.h @@ -50,7 +50,7 @@ public: void* GetNativeWindowBuffer() override; int32_t GetPlanesCount() override; void ReleasePixelMap() override; - Media::PixelMap* getPixelMap() { return pixelMap_.get(); }; + Media::PixelMap* GetPixelMap() { return pixelMap_.get(); } private: Media::ImageInfo imageInfo_; diff --git a/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp b/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp index 02e60fef..1c6b78a1 100644 --- a/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp +++ b/test/unittest/ohos_adapter/ohos_image_adapter/ohos_image_decoder_adapter_test.cpp @@ -291,7 +291,7 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetFd_006, TestSize.Level1) fd = imageDecoderAdapterImpl.GetFd(); EXPECT_NE(fd, -1); - auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + auto* pixelMap = imageDecoderAdapterImpl.GetPixelMap(); pixelMap->FreePixelMap(); fd = imageDecoderAdapterImpl.GetFd(); EXPECT_EQ(fd, -1); @@ -321,7 +321,7 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetStride_007, TestSize.Leve stride = imageDecoderAdapterImpl.GetStride(); EXPECT_NE(stride, 0); - auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + auto* pixelMap = imageDecoderAdapterImpl.GetPixelMap(); pixelMap->FreePixelMap(); stride = imageDecoderAdapterImpl.GetStride(); EXPECT_EQ(stride, 0); @@ -351,7 +351,7 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetOffset_008, TestSize.Leve offset = imageDecoderAdapterImpl.GetOffset(); EXPECT_EQ(offset, 0); - auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + auto* pixelMap = imageDecoderAdapterImpl.GetPixelMap(); pixelMap->FreePixelMap(); offset = imageDecoderAdapterImpl.GetOffset(); EXPECT_EQ(offset, 0); @@ -381,7 +381,7 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetSize_009, TestSize.Level1 size = imageDecoderAdapterImpl.GetSize(); EXPECT_NE(size, 0); - auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + auto* pixelMap = imageDecoderAdapterImpl.GetPixelMap(); pixelMap->FreePixelMap(); size = imageDecoderAdapterImpl.GetSize(); EXPECT_EQ(size, 0); @@ -402,19 +402,19 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetNativeWindowBuffer_010, T uint8_t *buffer = nullptr; OhosImageDecoderAdapterImpl imageDecoderAdapterImpl; - void* offset = imageDecoderAdapterImpl.GetNativeWindowBuffer(); - EXPECT_EQ(offset, nullptr); + void* windowBuffer = imageDecoderAdapterImpl.GetNativeWindowBuffer(); + EXPECT_EQ(windowBuffer, nullptr); bool ret = TestDecodeImage(imageDecoderAdapterImpl, buffer); EXPECT_TRUE(ret); - offset = imageDecoderAdapterImpl.GetNativeWindowBuffer(); - EXPECT_NE(offset, nullptr); + windowBuffer = imageDecoderAdapterImpl.GetNativeWindowBuffer(); + EXPECT_NE(windowBuffer, nullptr); - auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + auto* pixelMap = imageDecoderAdapterImpl.GetPixelMap(); pixelMap->FreePixelMap(); - offset = imageDecoderAdapterImpl.GetNativeWindowBuffer(); - EXPECT_NE(offset, nullptr); + windowBuffer = imageDecoderAdapterImpl.GetNativeWindowBuffer(); + EXPECT_NE(windowBuffer, nullptr); free(buffer); @@ -442,7 +442,7 @@ HWTEST_F(OhosImageAdapterTest, OhosImageAdapterTest_GetPlanesCount_011, TestSize planesCount = imageDecoderAdapterImpl.GetPlanesCount(); EXPECT_EQ(planesCount, 0); - auto* pixelMap = imageDecoderAdapterImpl.getPixelMap(); + auto* pixelMap = imageDecoderAdapterImpl.GetPixelMap(); pixelMap->FreePixelMap(); planesCount = imageDecoderAdapterImpl.GetPlanesCount(); EXPECT_EQ(planesCount, 0); -- Gitee From ce6c7deb9c3c0dcb00a048797f6991c9c8831f53 Mon Sep 17 00:00:00 2001 From: gaojianhao1 Date: Tue, 16 Jul 2024 23:21:45 +0800 Subject: [PATCH 45/50] Fix BFCache Bug. Signed-off-by: gaojianhao1 --- ohos_nweb/src/nweb_helper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ohos_nweb/src/nweb_helper.cpp b/ohos_nweb/src/nweb_helper.cpp index 432995c8..a50af0d3 100644 --- a/ohos_nweb/src/nweb_helper.cpp +++ b/ohos_nweb/src/nweb_helper.cpp @@ -1098,7 +1098,7 @@ void NWebHelper::EnableBackForwardCache(bool enableNativeEmbed, bool enableMedia this->backForwardCacheCmdLine_.emplace_back("--enable-cache-native-embed"); } - if (enableNativeEmbed) { + if (enableMediaTakeOver) { this->backForwardCacheCmdLine_.emplace_back("--enable-cache-media-take-over"); } } -- Gitee From 22098f2c5e9ea1186c301c00d8cc31b8d2b42c26 Mon Sep 17 00:00:00 2001 From: zhaodan_123 Date: Tue, 16 Jul 2024 19:15:05 +0800 Subject: [PATCH 46/50] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96ItemS?= =?UTF-8?q?tate=E7=9A=84ttd=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I7f0e0b2d74719c7cd0dbe27bef44c7f27a7b64b8 Signed-off-by: zhaodan_123 --- test/unittest/nweb_helper_test/nweb_helper_test.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/unittest/nweb_helper_test/nweb_helper_test.cpp b/test/unittest/nweb_helper_test/nweb_helper_test.cpp index 4c3db95c..756abd93 100644 --- a/test/unittest/nweb_helper_test/nweb_helper_test.cpp +++ b/test/unittest/nweb_helper_test/nweb_helper_test.cpp @@ -442,7 +442,6 @@ HWTEST_F(NwebHelperTest, NWebHelper_WebDownloadItem_IsPaused_007, TestSize.Level WebDownloadItem_SetReceivedBytes(downloadItem, 1); WebDownloadItem_SetTotalBytes(downloadItem, 1); WebDownloadItem_SetReceivedSlices(downloadItem, "test_web"); - char* guid = WebDownloadItem_Guid(downloadItem); EXPECT_NE(guid, nullptr); int64_t totalBytes = WebDownloadItem_TotalBytes(downloadItem); @@ -457,6 +456,10 @@ HWTEST_F(NwebHelperTest, NWebHelper_WebDownloadItem_IsPaused_007, TestSize.Level EXPECT_NE(eTag, nullptr); char* mimeType = WebDownloadItem_MimeType(downloadItem); EXPECT_NE(mimeType, nullptr); + long itemId = WebDownloadItem_GetDownloadItemId(downloadItem); + auto state1 = WebDownload_GetItemState(nWebId, itemId); + auto state2 = WebDownload_GetItemStateByGuid("test_web"); + EXPECT_EQ(state1, state2); } /** -- Gitee From 563fb999662186db48854c1b36690c49f9c3f91e Mon Sep 17 00:00:00 2001 From: xushawly Date: Wed, 17 Jul 2024 14:43:23 +0800 Subject: [PATCH 47/50] =?UTF-8?q?=E7=BD=91=E7=BB=9C=E5=8F=91=E7=94=9F?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E6=97=B6=E5=B0=86=E7=BD=91=E7=BB=9C=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=BC=A0=E5=88=B0=E5=86=85=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xushawly Change-Id: I9bc392253f750ef2a44e6165cab5b33b477c5fab Signed-off-by: xushawly --- ohos_adapter/BUILD.gn | 2 + .../include/net_capabilities_adapter_impl.h | 49 ++++++++++++++++++ .../net_connection_properties_adapter_impl.h | 39 +++++++++++++++ .../src/net_capabilities_adapter_impl.cpp | 50 +++++++++++++++++++ .../src/net_connect_callback_impl.cpp | 2 +- ...net_connection_properties_adapter_impl.cpp | 30 +++++++++++ ohos_glue/BUILD.gn | 8 +++ .../ohos_adapter/net_connect_adapter.h | 22 ++++++++ ohos_interface/ohos_glue/BUILD_webcore.gn | 8 +++ .../base/include/ark_web_bridge_types.h | 2 + .../ark_net_capabilities_adapter_wrapper.cpp | 38 ++++++++++++++ .../ark_net_capabilities_adapter_wrapper.h | 41 +++++++++++++++ .../webcore/ark_net_conn_callback_impl.cpp | 26 ++++++++++ .../webcore/ark_net_conn_callback_impl.h | 6 +++ ..._connection_properties_adapter_wrapper.cpp | 28 +++++++++++ ...et_connection_properties_adapter_wrapper.h | 37 ++++++++++++++ .../ark_net_capabilities_adapter_impl.cpp | 38 ++++++++++++++ .../ark_net_capabilities_adapter_impl.h | 43 ++++++++++++++++ .../webview/ark_net_conn_callback_wrapper.cpp | 22 ++++++++ .../webview/ark_net_conn_callback_wrapper.h | 4 ++ ...net_connection_properties_adapter_impl.cpp | 29 +++++++++++ ...k_net_connection_properties_adapter_impl.h | 39 +++++++++++++++ .../include/ark_net_connect_adapter.h | 28 +++++++++++ .../net_connect_adapter_impl_test.cpp | 10 ++++ .../net_connect_callback_impl_test.cpp | 10 ++++ 25 files changed, 610 insertions(+), 1 deletion(-) create mode 100644 ohos_adapter/net_connect_adapter/include/net_capabilities_adapter_impl.h create mode 100644 ohos_adapter/net_connect_adapter/include/net_connection_properties_adapter_impl.h create mode 100644 ohos_adapter/net_connect_adapter/src/net_capabilities_adapter_impl.cpp create mode 100644 ohos_adapter/net_connect_adapter/src/net_connection_properties_adapter_impl.cpp create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_capabilities_adapter_wrapper.cpp create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_capabilities_adapter_wrapper.h create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_connection_properties_adapter_wrapper.cpp create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_connection_properties_adapter_wrapper.h create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_capabilities_adapter_impl.cpp create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_capabilities_adapter_impl.h create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_connection_properties_adapter_impl.cpp create mode 100644 ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_connection_properties_adapter_impl.h diff --git a/ohos_adapter/BUILD.gn b/ohos_adapter/BUILD.gn index 2b044fca..80246774 100644 --- a/ohos_adapter/BUILD.gn +++ b/ohos_adapter/BUILD.gn @@ -245,9 +245,11 @@ ohos_shared_library("nweb_ohos_adapter") { if (webview_telephony_enable) { sources += [ + "net_connect_adapter/src/net_capabilities_adapter_impl.cpp", "net_connect_adapter/src/net_connect_adapter_impl.cpp", "net_connect_adapter/src/net_connect_callback_impl.cpp", "net_connect_adapter/src/net_connect_utils.cpp", + "net_connect_adapter/src/net_connection_properties_adapter_impl.cpp", ] external_deps += [ "cellular_data:tel_cellular_data_api", diff --git a/ohos_adapter/net_connect_adapter/include/net_capabilities_adapter_impl.h b/ohos_adapter/net_connect_adapter/include/net_capabilities_adapter_impl.h new file mode 100644 index 00000000..c53b9526 --- /dev/null +++ b/ohos_adapter/net_connect_adapter/include/net_capabilities_adapter_impl.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NET_CAPABILITIES_ADAPTER_IMPL_H +#define NET_CAPABILITIES_ADAPTER_IMPL_H + +#include "net_connect_adapter.h" + +namespace OHOS::NWeb { + +class NetCapabilitiesAdapterImpl : public NetCapabilitiesAdapter { +public: + NetCapabilitiesAdapterImpl() = default; + + ~NetCapabilitiesAdapterImpl() override = default; + + int32_t GetNetId() override; + + NetConnectType GetConnectType() override; + + NetConnectSubtype GetConnectSubtype() override; + + void SetNetId(int32_t netId); + + void SetConnectType(NetConnectType type); + + void SetConnectSubtype(NetConnectSubtype subtype); + +private: + int32_t netId_ = -1; + NetConnectType type_ = NetConnectType::CONNECTION_UNKNOWN; + NetConnectSubtype subtype_ = NetConnectSubtype::SUBTYPE_UNKNOWN; +}; + +} // namespace OHOS::NWeb + +#endif // NET_CAPABILITIES_ADAPTER_IMPL_H diff --git a/ohos_adapter/net_connect_adapter/include/net_connection_properties_adapter_impl.h b/ohos_adapter/net_connect_adapter/include/net_connection_properties_adapter_impl.h new file mode 100644 index 00000000..c453e8e1 --- /dev/null +++ b/ohos_adapter/net_connect_adapter/include/net_connection_properties_adapter_impl.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NET_CONNECTION_PROPERTIES_ADAPTER_IMPL_H +#define NET_CONNECTION_PROPERTIES_ADAPTER_IMPL_H + +#include "net_connect_adapter.h" + +namespace OHOS::NWeb { + +class NetConnectionPropertiesAdapterImpl : public NetConnectionPropertiesAdapter { +public: + NetConnectionPropertiesAdapterImpl() = default; + + ~NetConnectionPropertiesAdapterImpl() override = default; + + int32_t GetNetId() override; + + void SetNetId(int32_t netId); + +private: + int32_t netId_ = -1; +}; + +} // namespace OHOS::NWeb + +#endif // NET_CONNECTION_PROPERTIES_ADAPTER_IMPL_H diff --git a/ohos_adapter/net_connect_adapter/src/net_capabilities_adapter_impl.cpp b/ohos_adapter/net_connect_adapter/src/net_capabilities_adapter_impl.cpp new file mode 100644 index 00000000..0d63e0ea --- /dev/null +++ b/ohos_adapter/net_connect_adapter/src/net_capabilities_adapter_impl.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "net_capabilities_adapter_impl.h" + +namespace OHOS::NWeb { + +int32_t NetCapabilitiesAdapterImpl::GetNetId() +{ + return netId_; +} + +NetConnectType NetCapabilitiesAdapterImpl::GetConnectType() +{ + return type_; +} + +NetConnectSubtype NetCapabilitiesAdapterImpl::GetConnectSubtype() +{ + return subtype_; +} + +void NetCapabilitiesAdapterImpl::SetNetId(int32_t netId) +{ + netId_ = netId; +} + +void NetCapabilitiesAdapterImpl::SetConnectType(NetConnectType type) +{ + type_ = type; +} + +void NetCapabilitiesAdapterImpl::SetConnectSubtype(NetConnectSubtype subtype) +{ + subtype_ = subtype; +} + +} // namespace OHOS::NWeb \ No newline at end of file diff --git a/ohos_adapter/net_connect_adapter/src/net_connect_callback_impl.cpp b/ohos_adapter/net_connect_adapter/src/net_connect_callback_impl.cpp index ded4a479..a3dd17ca 100644 --- a/ohos_adapter/net_connect_adapter/src/net_connect_callback_impl.cpp +++ b/ohos_adapter/net_connect_adapter/src/net_connect_callback_impl.cpp @@ -78,7 +78,7 @@ int32_t NetConnectCallbackImpl::NetCapabilitiesChange(sptr &netHandle int32_t NetConnectCallbackImpl::NetConnectionPropertiesChange(sptr &netHandle, const sptr &info) { if (netHandle == nullptr || info == nullptr) { - WVLOG_E("NetConnCallback enter, NetCapabilitiesChange, netHandle or info is nullptr."); + WVLOG_E("NetConnCallback enter, NetConnectionPropertiesChange, netHandle or info is nullptr."); return 0; } diff --git a/ohos_adapter/net_connect_adapter/src/net_connection_properties_adapter_impl.cpp b/ohos_adapter/net_connect_adapter/src/net_connection_properties_adapter_impl.cpp new file mode 100644 index 00000000..340aa4aa --- /dev/null +++ b/ohos_adapter/net_connect_adapter/src/net_connection_properties_adapter_impl.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "net_connection_properties_adapter_impl.h" + +namespace OHOS::NWeb { + +int32_t NetConnectionPropertiesAdapterImpl::GetNetId() +{ + return netId_; +} + +void NetConnectionPropertiesAdapterImpl::SetNetId(int32_t netId) +{ + netId_ = netId; +} + +} // namespace OHOS::NWeb \ No newline at end of file diff --git a/ohos_glue/BUILD.gn b/ohos_glue/BUILD.gn index 15f54a18..df67451d 100644 --- a/ohos_glue/BUILD.gn +++ b/ohos_glue/BUILD.gn @@ -600,10 +600,14 @@ action("ohos_glue_adapter_prepare") { "${glue_build_gen_dir}/ohos_adapter/bridge/ark_mmi_listener_adapter_wrapper.h", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_native_image_adapter_impl.cpp", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_native_image_adapter_impl.h", + "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_capabilities_adapter_impl.cpp", + "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_capabilities_adapter_impl.h", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_conn_callback_wrapper.cpp", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_conn_callback_wrapper.h", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_connect_adapter_impl.cpp", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_connect_adapter_impl.h", + "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_connection_properties_adapter_impl.cpp", + "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_connection_properties_adapter_impl.h", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_proxy_adapter_impl.cpp", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_proxy_adapter_impl.h", "${glue_build_gen_dir}/ohos_adapter/bridge/ark_net_proxy_event_callback_adapter_wrapper.cpp", @@ -777,8 +781,12 @@ action("ohos_glue_adapter_prepare") { "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_mmiadapter_cpptoc.h", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_native_image_adapter_cpptoc.cpp", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_native_image_adapter_cpptoc.h", + "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_net_capabilities_adapter_cpptoc.cpp", + "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_net_capabilities_adapter_cpptoc.h", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_net_connect_adapter_cpptoc.cpp", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_net_connect_adapter_cpptoc.h", + "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_net_connection_properties_adapter_cpptoc.cpp", + "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_net_connection_properties_adapter_cpptoc.h", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_net_proxy_adapter_cpptoc.cpp", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_net_proxy_adapter_cpptoc.h", "${glue_build_gen_dir}/ohos_adapter/cpptoc/ark_ohos_adapter_helper_cpptoc.cpp", diff --git a/ohos_interface/include/ohos_adapter/net_connect_adapter.h b/ohos_interface/include/ohos_adapter/net_connect_adapter.h index 64c9f798..6920cc34 100644 --- a/ohos_interface/include/ohos_adapter/net_connect_adapter.h +++ b/ohos_interface/include/ohos_adapter/net_connect_adapter.h @@ -71,6 +71,24 @@ enum class NetConnectSubtype : uint32_t { SUBTYPE_LAST = SUBTYPE_WIFI_AD }; +class NetCapabilitiesAdapter { +public: + NetCapabilitiesAdapter() = default; + virtual ~NetCapabilitiesAdapter() = default; + + virtual int32_t GetNetId() = 0; + virtual NetConnectType GetConnectType() = 0; + virtual NetConnectSubtype GetConnectSubtype() = 0; +}; + +class NetConnectionPropertiesAdapter { +public: + NetConnectionPropertiesAdapter() = default; + virtual ~NetConnectionPropertiesAdapter() = default; + + virtual int32_t GetNetId() = 0; +}; + class NetConnCallback { public: NetConnCallback() = default; @@ -81,6 +99,10 @@ public: const NetConnectType& netConnectType, const NetConnectSubtype& netConnectSubtype) = 0; virtual int32_t NetConnectionPropertiesChange() = 0; virtual int32_t NetUnavailable() = 0; + virtual int32_t OnNetCapabilitiesChanged( + const std::shared_ptr capabilities) { return 0; } + virtual int32_t OnNetConnectionPropertiesChanged( + const std::shared_ptr properties) { return 0; } }; class NetConnectAdapter { diff --git a/ohos_interface/ohos_glue/BUILD_webcore.gn b/ohos_interface/ohos_glue/BUILD_webcore.gn index 5d6803d7..87ff0a23 100644 --- a/ohos_interface/ohos_glue/BUILD_webcore.gn +++ b/ohos_interface/ohos_glue/BUILD_webcore.gn @@ -595,10 +595,14 @@ component("ohos_adapter_glue_source") { "ohos_adapter/bridge/ark_mmi_listener_adapter_impl.h", "ohos_adapter/bridge/ark_native_image_adapter_wrapper.cpp", "ohos_adapter/bridge/ark_native_image_adapter_wrapper.h", + "ohos_adapter/bridge/ark_net_capabilities_adapter_wrapper.cpp", + "ohos_adapter/bridge/ark_net_capabilities_adapter_wrapper.h", "ohos_adapter/bridge/ark_net_conn_callback_impl.cpp", "ohos_adapter/bridge/ark_net_conn_callback_impl.h", "ohos_adapter/bridge/ark_net_connect_adapter_wrapper.cpp", "ohos_adapter/bridge/ark_net_connect_adapter_wrapper.h", + "ohos_adapter/bridge/ark_net_connection_properties_adapter_wrapper.cpp", + "ohos_adapter/bridge/ark_net_connection_properties_adapter_wrapper.h", "ohos_adapter/bridge/ark_net_proxy_adapter_wrapper.cpp", "ohos_adapter/bridge/ark_net_proxy_adapter_wrapper.h", "ohos_adapter/bridge/ark_net_proxy_event_callback_adapter_impl.cpp", @@ -884,8 +888,12 @@ component("ohos_adapter_glue_source") { "ohos_adapter/ctocpp/ark_mmiadapter_ctocpp.h", "ohos_adapter/ctocpp/ark_native_image_adapter_ctocpp.cpp", "ohos_adapter/ctocpp/ark_native_image_adapter_ctocpp.h", + "ohos_adapter/ctocpp/ark_net_capabilities_adapter_ctocpp.cpp", + "ohos_adapter/ctocpp/ark_net_capabilities_adapter_ctocpp.h", "ohos_adapter/ctocpp/ark_net_connect_adapter_ctocpp.cpp", "ohos_adapter/ctocpp/ark_net_connect_adapter_ctocpp.h", + "ohos_adapter/ctocpp/ark_net_connection_properties_adapter_ctocpp.cpp", + "ohos_adapter/ctocpp/ark_net_connection_properties_adapter_ctocpp.h", "ohos_adapter/ctocpp/ark_net_proxy_adapter_ctocpp.cpp", "ohos_adapter/ctocpp/ark_net_proxy_adapter_ctocpp.h", "ohos_adapter/ctocpp/ark_ohos_adapter_helper_ctocpp.cpp", diff --git a/ohos_interface/ohos_glue/base/include/ark_web_bridge_types.h b/ohos_interface/ohos_glue/base/include/ark_web_bridge_types.h index 66af6e05..ee115fa4 100644 --- a/ohos_interface/ohos_glue/base/include/ark_web_bridge_types.h +++ b/ohos_interface/ohos_glue/base/include/ark_web_bridge_types.h @@ -245,6 +245,8 @@ enum ArkWebBridgeType { ARK_AUDIO_OUTPUT_CHANGE_CALLBACK_ADAPTER = 10129, ARK_SENSOR_ADAPTER = 10130, ARK_SENSOR_CALLBACK_ADAPTER = 10131, + ARK_NET_CAPABILITIES_ADAPTER = 10132, + ARK_NET_CONNECTION_PROPERTIES_ADAPTER = 10133, /*Note: Only add an enum value before ARK_WEB_BRIDGE_BUTT*/ ARK_WEB_BRIDGE_BUTT diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_capabilities_adapter_wrapper.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_capabilities_adapter_wrapper.cpp new file mode 100644 index 00000000..71ed0cf4 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_capabilities_adapter_wrapper.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ohos_adapter/bridge/ark_net_capabilities_adapter_wrapper.h" + +namespace OHOS::ArkWeb { + +ArkNetCapabilitiesAdapterWrapper::ArkNetCapabilitiesAdapterWrapper( + ArkWebRefPtr ref) : ctocpp_(ref) {} + +int32_t ArkNetCapabilitiesAdapterWrapper::GetNetId() +{ + return ctocpp_->GetNetId(); +} + +OHOS::NWeb::ConnectType ArkNetCapabilitiesAdapterWrapper::GetConnectType() +{ + return static_cast(ctocpp_->GetConnectType()); +} + +OHOS::NWeb::ConnectSubtype ArkNetCapabilitiesAdapterWrapper::GetConnectSubtype() +{ + return static_cast(ctocpp_->GetConnectSubtype()); +} + +} // namespace OHOS::ArkWeb \ No newline at end of file diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_capabilities_adapter_wrapper.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_capabilities_adapter_wrapper.h new file mode 100644 index 00000000..a7fdd7f5 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_capabilities_adapter_wrapper.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARK_NET_CAPABILITIES_ADAPTER_WRAPPER_H +#define ARK_NET_CAPABILITIES_ADAPTER_WRAPPER_H +#pragma once + +#include "net_connect_adapter.h" +#include "ohos_adapter/include/ark_net_connect_adapter.h" + +namespace OHOS::ArkWeb { + +class ArkNetCapabilitiesAdapterWrapper : public NWeb::NetCapabilitiesAdapter { +public: + ArkNetCapabilitiesAdapterWrapper(ArkWebRefPtr); + + int32_t GetNetId() override; + + OHOS::NWeb::ConnectType GetConnectType() override; + + OHOS::NWeb::ConnectSubtype GetConnectSubtype() override; + +private: + ArkWebRefPtr ctocpp_; +}; + +} // namespace OHOS::ArkWeb + +#endif // ARK_NET_CAPABILITIES_ADAPTER_WRAPPER_H \ No newline at end of file diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_conn_callback_impl.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_conn_callback_impl.cpp index 17c2e6bc..fc76257a 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_conn_callback_impl.cpp +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_conn_callback_impl.cpp @@ -13,7 +13,11 @@ * limitations under the License. */ +#include "ohos_adapter/bridge/ark_net_capabilities_adapter_wrapper.h" #include "ohos_adapter/bridge/ark_net_conn_callback_impl.h" +#include "ohos_adapter/bridge/ark_net_connection_properties_adapter_wrapper.h" + +#include "base/bridge/ark_web_bridge_macros.h" namespace OHOS::ArkWeb { @@ -40,4 +44,26 @@ int32_t ArkNetConnCallbackImpl::NetUnavailable() return real_->NetUnavailable(); } +int32_t ArkNetConnCallbackImpl::OnNetCapabilitiesChanged( + const ArkWebRefPtr capabilites) +{ + if (CHECK_REF_PTR_IS_NULL(capabilites)) { + return real_->OnNetCapabilitiesChanged(nullptr); + } + + return real_->OnNetCapabilitiesChanged( + std::make_shared(capabilites)); +} + +int32_t ArkNetConnCallbackImpl::OnNetConnectionPropertiesChanged( + const ArkWebRefPtr properties) +{ + if (CHECK_REF_PTR_IS_NULL(properties)) { + return real_->OnNetConnectionPropertiesChanged(nullptr); + } + + return real_->OnNetConnectionPropertiesChanged( + std::make_shared(properties)); +} + } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_conn_callback_impl.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_conn_callback_impl.h index 4287d40f..7c9bc9f1 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_conn_callback_impl.h +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_conn_callback_impl.h @@ -34,6 +34,12 @@ public: int32_t NetUnavailable() override; + int32_t OnNetCapabilitiesChanged( + const ArkWebRefPtr capabilites) override; + + int32_t OnNetConnectionPropertiesChanged( + const ArkWebRefPtr properties) override; + private: std::shared_ptr real_; diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_connection_properties_adapter_wrapper.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_connection_properties_adapter_wrapper.cpp new file mode 100644 index 00000000..9d9f88b2 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_connection_properties_adapter_wrapper.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ohos_adapter/bridge/ark_net_connection_properties_adapter_wrapper.h" + +namespace OHOS::ArkWeb { + +ArkNetConnectionPropertiesAdapterWrapper::ArkNetConnectionPropertiesAdapterWrapper( + ArkWebRefPtr ref) : ctocpp_(ref) {} + +int32_t ArkNetConnectionPropertiesAdapterWrapper::GetNetId() +{ + return ctocpp_->GetNetId(); +} + +} // namespace OHOS::ArkWeb \ No newline at end of file diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_connection_properties_adapter_wrapper.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_connection_properties_adapter_wrapper.h new file mode 100644 index 00000000..80287efb --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webcore/ark_net_connection_properties_adapter_wrapper.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARK_NET_CONNECTION_PROPERTIES_ADAPTER_WRAPPER_H +#define ARK_NET_CONNECTION_PROPERTIES_ADAPTER_WRAPPER_H +#pragma once + +#include "net_connect_adapter.h" +#include "ohos_adapter/include/ark_net_connect_adapter.h" + +namespace OHOS::ArkWeb { + +class ArkNetConnectionPropertiesAdapterWrapper : public NWeb::NetConnectionPropertiesAdapter { +public: + ArkNetConnectionPropertiesAdapterWrapper(ArkWebRefPtr); + + int32_t GetNetId() override; + +private: + ArkWebRefPtr ctocpp_; +}; + +} // namespace OHOS::ArkWeb + +#endif // ARK_NET_CONNECTION_PROPERTIES_ADAPTER_WRAPPER_H \ No newline at end of file diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_capabilities_adapter_impl.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_capabilities_adapter_impl.cpp new file mode 100644 index 00000000..999fc701 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_capabilities_adapter_impl.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ohos_adapter/bridge/ark_net_capabilities_adapter_impl.h" + +#include "base/bridge/ark_web_bridge_macros.h" + +namespace OHOS::ArkWeb { +ArkNetCapabilitiesAdapterImpl::ArkNetCapabilitiesAdapterImpl(std::shared_ptr ref) + : real_(ref) {} + +int32_t ArkNetCapabilitiesAdapterImpl::GetNetId() +{ + return real_->GetNetId(); +} + +uint32_t ArkNetCapabilitiesAdapterImpl::GetConnectType() +{ + return (uint32_t)real_->GetConnectType(); +} + +uint32_t ArkNetCapabilitiesAdapterImpl::GetConnectSubtype() +{ + return (uint32_t)real_->GetConnectSubtype(); +} +} // namespace OHOS::ArkWeb \ No newline at end of file diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_capabilities_adapter_impl.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_capabilities_adapter_impl.h new file mode 100644 index 00000000..a9f60eff --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_capabilities_adapter_impl.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARK_NET_CAPABILITIES_ADAPTER_IMPL_H +#define ARK_NET_CAPABILITIES_ADAPTER_IMPL_H +#pragma once + +#include "net_connect_adapter.h" +#include "ohos_adapter/include/ark_net_connect_adapter.h" + +namespace OHOS::ArkWeb { + +class ArkNetCapabilitiesAdapterImpl : public ArkNetCapabilitiesAdapter { +public: + ArkNetCapabilitiesAdapterImpl(std::shared_ptr); + + int32_t GetNetId() override; + + uint32_t GetConnectType() override; + + uint32_t GetConnectSubtype() override; + +private: + std::shared_ptr real_; + + IMPLEMENT_REFCOUNTING(ArkNetCapabilitiesAdapterImpl); +}; + +} // namespace OHOS::ArkWeb + +#endif // ARK_NET_CAPABILITIES_ADAPTER_IMPL_H \ No newline at end of file diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_conn_callback_wrapper.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_conn_callback_wrapper.cpp index f23a6c97..89ac8d56 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_conn_callback_wrapper.cpp +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_conn_callback_wrapper.cpp @@ -13,7 +13,9 @@ * limitations under the License. */ +#include "ohos_adapter/bridge/ark_net_capabilities_adapter_impl.h" #include "ohos_adapter/bridge/ark_net_conn_callback_wrapper.h" +#include "ohos_adapter/bridge/ark_net_connection_properties_adapter_impl.h" #include "base/bridge/ark_web_bridge_macros.h" @@ -42,4 +44,24 @@ int32_t ArkNetConnCallbackWrapper::NetUnavailable() return ctocpp_->NetUnavailable(); } +int32_t ArkNetConnCallbackWrapper::OnNetCapabilitiesChanged( + const std::shared_ptr capabilities) +{ + if (CHECK_SHARED_PTR_IS_NULL(capabilities)) { + return ctocpp_->OnNetCapabilitiesChanged(nullptr); + } + + return ctocpp_->OnNetCapabilitiesChanged(new ArkNetCapabilitiesAdapterImpl(capabilities)); +} + +int32_t ArkNetConnCallbackWrapper::OnNetConnectionPropertiesChanged( + const std::shared_ptr properties) +{ + if (CHECK_SHARED_PTR_IS_NULL(properties)) { + return ctocpp_->OnNetConnectionPropertiesChanged(nullptr); + } + + return ctocpp_->OnNetConnectionPropertiesChanged(new ArkNetConnectionPropertiesAdapterImpl(properties)); +} + } // namespace OHOS::ArkWeb diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_conn_callback_wrapper.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_conn_callback_wrapper.h index 78975cec..03539aa9 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_conn_callback_wrapper.h +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_conn_callback_wrapper.h @@ -30,6 +30,10 @@ public: const OHOS::NWeb::NetConnectSubtype& netConnectSubtype) override; int32_t NetConnectionPropertiesChange() override; int32_t NetUnavailable() override; + int32_t OnNetCapabilitiesChanged( + const std::shared_ptr capabilities) override; + int32_t OnNetConnectionPropertiesChanged( + const std::shared_ptr properties) override; private: ArkWebRefPtr ctocpp_; diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_connection_properties_adapter_impl.cpp b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_connection_properties_adapter_impl.cpp new file mode 100644 index 00000000..a80f77d9 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_connection_properties_adapter_impl.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ohos_adapter/bridge/ark_net_connection_properties_adapter_impl.h" + +#include "base/bridge/ark_web_bridge_macros.h" + +namespace OHOS::ArkWeb { +ArkNetConnectionPropertiesAdapterImpl::ArkNetConnectionPropertiesAdapterImpl( + std::shared_ptr ref) : real_(ref) {} + +int32_t ArkNetConnectionPropertiesAdapterImpl::GetNetId() +{ + return real_->GetNetId(); +} + +} // namespace OHOS::ArkWeb \ No newline at end of file diff --git a/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_connection_properties_adapter_impl.h b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_connection_properties_adapter_impl.h new file mode 100644 index 00000000..fd1d7570 --- /dev/null +++ b/ohos_interface/ohos_glue/ohos_adapter/bridge/webview/ark_net_connection_properties_adapter_impl.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARK_NET_CONNECTION_PROPERTIES_ADAPTER_IMPL_H +#define ARK_NET_CONNECTION_PROPERTIES_ADAPTER_IMPL_H +#pragma once + +#include "net_connect_adapter.h" +#include "ohos_adapter/include/ark_net_connect_adapter.h" + +namespace OHOS::ArkWeb { + +class ArkNetConnectionPropertiesAdapterImpl : public ArkNetConnectionPropertiesAdapter { +public: + ArkNetConnectionPropertiesAdapterImpl(std::shared_ptr); + + int32_t GetNetId() override; + +private: + std::shared_ptr real_; + + IMPLEMENT_REFCOUNTING(ArkNetConnectionPropertiesAdapterImpl); +}; + +} // namespace OHOS::ArkWeb + +#endif // ARK_NET_CONNECTION_PROPERTIES_ADAPTER_IMPL_H \ No newline at end of file diff --git a/ohos_interface/ohos_glue/ohos_adapter/include/ark_net_connect_adapter.h b/ohos_interface/ohos_glue/ohos_adapter/include/ark_net_connect_adapter.h index 13c9ae78..295be126 100644 --- a/ohos_interface/ohos_glue/ohos_adapter/include/ark_net_connect_adapter.h +++ b/ohos_interface/ohos_glue/ohos_adapter/include/ark_net_connect_adapter.h @@ -22,6 +22,26 @@ namespace OHOS::ArkWeb { +/*--ark web(source=webview)--*/ +class ArkNetCapabilitiesAdapter : public virtual ArkWebBaseRefCounted { +public: + /*--ark web()--*/ + virtual int32_t GetNetId() = 0; + + /*--ark web()--*/ + virtual uint32_t GetConnectType() = 0; + + /*--ark web()--*/ + virtual uint32_t GetConnectSubtype() = 0; +}; + +/*--ark web(source=webview)--*/ +class ArkNetConnectionPropertiesAdapter : public virtual ArkWebBaseRefCounted { +public: + /*--ark web()--*/ + virtual int32_t GetNetId() = 0; +}; + /*--ark web(source=webcore)--*/ class ArkNetConnCallback : public virtual ArkWebBaseRefCounted { public: @@ -36,6 +56,14 @@ public: /*--ark web()--*/ virtual int32_t NetUnavailable() = 0; + + /*--ark web()--*/ + virtual int32_t OnNetCapabilitiesChanged( + const ArkWebRefPtr capabilites) = 0; + + /*--ark web()--*/ + virtual int32_t OnNetConnectionPropertiesChanged( + const ArkWebRefPtr properties) = 0; }; /*--ark web(source=webview)--*/ diff --git a/test/unittest/net_connect_adapter_impl_test/net_connect_adapter_impl_test.cpp b/test/unittest/net_connect_adapter_impl_test/net_connect_adapter_impl_test.cpp index 6c7d65a9..0f06a309 100644 --- a/test/unittest/net_connect_adapter_impl_test/net_connect_adapter_impl_test.cpp +++ b/test/unittest/net_connect_adapter_impl_test/net_connect_adapter_impl_test.cpp @@ -140,6 +140,16 @@ public: { return 0; } + int32_t OnNetCapabilitiesChanged( + const std::shared_ptr capabilities) override + { + return 0; + } + int32_t OnNetConnectionPropertiesChanged( + const std::shared_ptr properties) override + { + return 0; + } }; /** diff --git a/test/unittest/net_connect_callback_impl_test/net_connect_callback_impl_test.cpp b/test/unittest/net_connect_callback_impl_test/net_connect_callback_impl_test.cpp index 65cb4712..878cfdd9 100644 --- a/test/unittest/net_connect_callback_impl_test/net_connect_callback_impl_test.cpp +++ b/test/unittest/net_connect_callback_impl_test/net_connect_callback_impl_test.cpp @@ -81,6 +81,16 @@ public: { return 0; } + int32_t OnNetCapabilitiesChanged( + const std::shared_ptr capabilities) override + { + return 0; + } + int32_t OnNetConnectionPropertiesChanged( + const std::shared_ptr properties) override + { + return 0; + } }; /** -- Gitee From 947931cc8404dbe96178c2da030fb97cbd9165de Mon Sep 17 00:00:00 2001 From: xs Date: Fri, 19 Jul 2024 14:50:21 +0800 Subject: [PATCH 48/50] add webschemehandlerrequest class Change-Id: I8620d4a78a357e6c7d52244fed9f8885d70654b7 --- .../kits/cj/include/webview_controller_impl.h | 37 +++++++++++++++++++ interfaces/kits/cj/include/webview_ffi.h | 6 +++ .../kits/cj/src/webview_controller_impl.cpp | 6 +++ interfaces/kits/cj/src/webview_ffi.cpp | 36 ++++++++++++++++++ 4 files changed, 85 insertions(+) diff --git a/interfaces/kits/cj/include/webview_controller_impl.h b/interfaces/kits/cj/include/webview_controller_impl.h index db30340e..e3cd2c4f 100644 --- a/interfaces/kits/cj/include/webview_controller_impl.h +++ b/interfaces/kits/cj/include/webview_controller_impl.h @@ -23,6 +23,7 @@ #include "webview_javascript_result_callback.h" #include "nweb.h" #include "nweb_helper.h" +#include "arkweb_scheme_handler.h" namespace OHOS::Webview { enum class WebHitTestType : int { @@ -50,6 +51,29 @@ namespace OHOS::Webview { DANGEROUS = 5 }; + enum class WebResourceType : int { + MAIN_FRAME = 0, + SUB_FRAME = 1, + STYLE_SHEET = 2, + SCRIPT = 3, + IMAGE = 4, + FONT_RESOURCE = 5, + SUB_RESOURCE = 6, + OBJECT = 7, + MEDIA = 8, + WORKED = 9, + SHARED_WORKED = 10, + PREFETCH = 11, + FAVICON = 12, + XHR = 13, + PING = 14, + SERVICE_WORKED = 15, + CSP_REPORT = 16, + PLUNGIN_RESOURCE = 17, + NAVIGATION_PRELOAD_MAIN_FRAME = 19, + NAVIGATION_PRELOAD_USB_FRAME = 20 + }; + class __attribute__((visibility("default"))) WebviewControllerImpl : public OHOS::FFI::FFIData { DECL_TYPE(WebviewControllerImpl, OHOS::FFI::FFIData) public: @@ -185,5 +209,18 @@ namespace OHOS::Webview { private: std::shared_ptr sptrHistoryList_ = nullptr; }; + + class __attribute__((visibility("default"))) WebSHRequestImpl : public OHOS::FFI::FFIData { + DECL_TYPE(WebSHRequestImpl, OHOS::FFI::FFIData) + public: + explicit WebSHRequestImpl() = default; + WebSHRequestImpl(const ArkWeb_ResourceRequest* request) + { + requestResourceType_ = OH_ArkWebResourceRequest_GetResourceType(request); + }; + int32_t GetRequestResourceType(); + private: + int32_t requestResourceType_ = -1; + }; } #endif // WEBVIEW_CONTROLLER_IMPL_FFI_H \ No newline at end of file diff --git a/interfaces/kits/cj/include/webview_ffi.h b/interfaces/kits/cj/include/webview_ffi.h index af456fc2..bd66911b 100644 --- a/interfaces/kits/cj/include/webview_ffi.h +++ b/interfaces/kits/cj/include/webview_ffi.h @@ -20,6 +20,7 @@ #include "ffi_remote_data.h" #include "webview_utils.h" #include "cj_common_ffi.h" +#include "arkweb_scheme_handler.h" extern "C" { FFI_EXPORT int64_t FfiOHOSWebviewCtlConstructor(); @@ -85,6 +86,11 @@ extern "C" { FFI_EXPORT bool FfiOHOSCookieMgrExistCookie(bool incognitoMode); FFI_EXPORT void FfiOHOSCookieMgrClearAllCookiesSync(bool incognitoMode); FFI_EXPORT void FfiOHOSCookieMgrClearSessionCookieSync(); + + //WebSchemeHandlerRequest + FFI_EXPORT int64_t FfiOHOSWebSHRequestConstructor(); + FFI_EXPORT int64_t FfiOHOSWebSHRequestConstructorwithrequest(const ArkWeb_ResourceRequest* request); + FFI_EXPORT int32_t FfiOHOSWebSHRequestGetRequestResourceType(int64_t id, int32_t *errCode); } #endif // WEBVIEW_FFI_H \ No newline at end of file diff --git a/interfaces/kits/cj/src/webview_controller_impl.cpp b/interfaces/kits/cj/src/webview_controller_impl.cpp index 5021203f..175509a0 100644 --- a/interfaces/kits/cj/src/webview_controller_impl.cpp +++ b/interfaces/kits/cj/src/webview_controller_impl.cpp @@ -617,4 +617,10 @@ namespace OHOS::Webview { } nweb_ptr->SetBackForwardCacheOptions(size, timeToLive); } + + int WebSHRequestImpl::GetRequestResourceType() + { + return requestResourceType_; + } + } diff --git a/interfaces/kits/cj/src/webview_ffi.cpp b/interfaces/kits/cj/src/webview_ffi.cpp index 62028c2a..d9adf120 100644 --- a/interfaces/kits/cj/src/webview_ffi.cpp +++ b/interfaces/kits/cj/src/webview_ffi.cpp @@ -762,6 +762,42 @@ extern "C" { *errCode = NWebError::NO_ERROR; return ret; } + + //WebSchemeHandlerRequest + int64_t FfiOHOSWebSHRequestConstructor() + { + auto nativeWebSHRequest = FFIData::Create(); + if (nativeWebSHRequest == nullptr) { + WEBVIEWLOGE("new Web Scheme Handler Request failed"); + return -1; + } + //WebSHRequestImpl::webDebuggingAccess_ = OHOS::system::GetBoolParameter("web.debug.devtools", false); + return nativeWebSHRequest->GetID(); + } + + + int64_t FfiOHOSWebSHRequestConstructorwithrequest(const ArkWeb_ResourceRequest* request) + { + auto nativeWebSHRequest = FFIData::Create(request); + if (nativeWebSHRequest == nullptr) { + WEBVIEWLOGE("new Web Scheme Handler Request failed"); + return -1; + } + //WebSHRequestImpl::webDebuggingAccess_ = OHOS::system::GetBoolParameter("web.debug.devtools", false); + return nativeWebSHRequest->GetID(); + } + + int32_t FfiOHOSWebSHRequestGetRequestResourceType(int64_t id, int32_t *errCode) + { + auto nativeWebSHRequest = FFIData::GetData(id); + if (nativeWebSHRequest == nullptr) { + *errCode = NWebError::INIT_ERROR; + return -1; + } + int32_t RequestResourceType = nativeWebSHRequest->GetRequestResourceType(); + *errCode = NWebError::NO_ERROR; + return RequestResourceType; + } } } } -- Gitee From 4c75742d5b1f79df6a31dea80acc0f0e874dbbbd Mon Sep 17 00:00:00 2001 From: x50041882 <14679828+x50041882@user.noreply.gitee.com> Date: Fri, 19 Jul 2024 17:37:04 +0800 Subject: [PATCH 49/50] xsxs Change-Id: I42e6d44247981e18347e54c3ebfd689cd96f5437 --- c | 25 +++++++++++++++++++ .../kits/cj/include/webview_controller_impl.h | 1 + interfaces/kits/cj/include/webview_ffi.h | 1 + .../kits/cj/src/webview_controller_impl.cpp | 1 + interfaces/kits/cj/src/webview_ffi.cpp | 1 + 5 files changed, 29 insertions(+) create mode 100644 c diff --git a/c b/c new file mode 100644 index 00000000..c788a21f --- /dev/null +++ b/c @@ -0,0 +1,25 @@ +filter.lfs.clean=git-lfs clean -- %f +filter.lfs.smudge=git-lfs smudge -- %f +filter.lfs.process=git-lfs filter-process +filter.lfs.required=true +filter.lfs.clean=git-lfs clean -- %f +filter.lfs.smudge=git-lfs smudge -- %f +filter.lfs.process=git-lfs filter-process +filter.lfs.required=true +user.name=xs +user.email=xs@xs.com +credential.helper=store +color.ui=auto +core.repositoryformatversion=0 +core.filemode=false +core.bare=false +core.logallrefupdates=true +filter.lfs.smudge=git-lfs smudge --skip -- %f +filter.lfs.process=git-lfs filter-process --skip +remote.origin.url=git@gitee.com:openharmony/web_webview +remote.origin.review=https://openharmony.gitee.com/openharmony/ +remote.origin.projectname=web_webview +remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* +lfs.repositoryformatversion=0 +remote.xs.url=git@gitee.com:x50041882/web_webview.git +remote.xs.fetch=+refs/heads/*:refs/remotes/xs/* diff --git a/interfaces/kits/cj/include/webview_controller_impl.h b/interfaces/kits/cj/include/webview_controller_impl.h index e3cd2c4f..11e56552 100644 --- a/interfaces/kits/cj/include/webview_controller_impl.h +++ b/interfaces/kits/cj/include/webview_controller_impl.h @@ -221,6 +221,7 @@ namespace OHOS::Webview { int32_t GetRequestResourceType(); private: int32_t requestResourceType_ = -1; + }; } #endif // WEBVIEW_CONTROLLER_IMPL_FFI_H \ No newline at end of file diff --git a/interfaces/kits/cj/include/webview_ffi.h b/interfaces/kits/cj/include/webview_ffi.h index bd66911b..16f023d4 100644 --- a/interfaces/kits/cj/include/webview_ffi.h +++ b/interfaces/kits/cj/include/webview_ffi.h @@ -91,6 +91,7 @@ extern "C" { FFI_EXPORT int64_t FfiOHOSWebSHRequestConstructor(); FFI_EXPORT int64_t FfiOHOSWebSHRequestConstructorwithrequest(const ArkWeb_ResourceRequest* request); FFI_EXPORT int32_t FfiOHOSWebSHRequestGetRequestResourceType(int64_t id, int32_t *errCode); + } #endif // WEBVIEW_FFI_H \ No newline at end of file diff --git a/interfaces/kits/cj/src/webview_controller_impl.cpp b/interfaces/kits/cj/src/webview_controller_impl.cpp index 175509a0..c96f22ec 100644 --- a/interfaces/kits/cj/src/webview_controller_impl.cpp +++ b/interfaces/kits/cj/src/webview_controller_impl.cpp @@ -621,6 +621,7 @@ namespace OHOS::Webview { int WebSHRequestImpl::GetRequestResourceType() { return requestResourceType_; + } } diff --git a/interfaces/kits/cj/src/webview_ffi.cpp b/interfaces/kits/cj/src/webview_ffi.cpp index d9adf120..a52fc058 100644 --- a/interfaces/kits/cj/src/webview_ffi.cpp +++ b/interfaces/kits/cj/src/webview_ffi.cpp @@ -797,6 +797,7 @@ extern "C" { int32_t RequestResourceType = nativeWebSHRequest->GetRequestResourceType(); *errCode = NWebError::NO_ERROR; return RequestResourceType; + } } } -- Gitee From 80692916ccb44368011aba89e603acb75b8b4ec4 Mon Sep 17 00:00:00 2001 From: x50041882 <14679828+x50041882@user.noreply.gitee.com> Date: Mon, 12 Aug 2024 14:54:22 +0800 Subject: [PATCH 50/50] xs Change-Id: I0425eb2159dc36fe00721c4ada0b8847acc7080c --- .../kits/cj/include/webview_controller_impl.h | 56 +++++++- interfaces/kits/cj/include/webview_ffi.h | 12 +- interfaces/kits/cj/include/webview_utils.h | 2 + .../kits/cj/src/webview_controller_impl.cpp | 45 ++++++- interfaces/kits/cj/src/webview_ffi.cpp | 125 +++++++++++++++++- 5 files changed, 235 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/cj/include/webview_controller_impl.h b/interfaces/kits/cj/include/webview_controller_impl.h index 11e56552..0a17826f 100644 --- a/interfaces/kits/cj/include/webview_controller_impl.h +++ b/interfaces/kits/cj/include/webview_controller_impl.h @@ -24,6 +24,7 @@ #include "nweb.h" #include "nweb_helper.h" #include "arkweb_scheme_handler.h" +#include "nweb_log.h" namespace OHOS::Webview { enum class WebHitTestType : int { @@ -210,18 +211,71 @@ namespace OHOS::Webview { std::shared_ptr sptrHistoryList_ = nullptr; }; + //WebSHRequestImpl + using WebHeaderList = std::vector>; class __attribute__((visibility("default"))) WebSHRequestImpl : public OHOS::FFI::FFIData { DECL_TYPE(WebSHRequestImpl, OHOS::FFI::FFIData) public: explicit WebSHRequestImpl() = default; WebSHRequestImpl(const ArkWeb_ResourceRequest* request) { + OH_ArkWebResourceRequest_GetUrl(request, &url_); + OH_ArkWebResourceRequest_GetMethod(request, &method_); + OH_ArkWebResourceRequest_GetReferrer(request, &referrer_); + isRedirect_ = OH_ArkWebResourceRequest_IsRedirect(request); + isMainFrame_ = OH_ArkWebResourceRequest_IsMainFrame(request); + hasGesture_ = OH_ArkWebResourceRequest_HasGesture(request); + OH_ArkWebResourceRequest_GetFrameUrl(request, &frameUrl_); + OH_ArkWebResourceRequest_GetHttpBodyStream(request, &stream_); requestResourceType_ = OH_ArkWebResourceRequest_GetResourceType(request); + + ArkWeb_RequestHeaderList* arkWebHeaderlist = nullptr; + OH_ArkWebResourceRequest_GetRequestHeaders(request, &arkWebHeaderlist); + if (!arkWebHeaderlist) { + WVLOG_E("OH_ArkWebRequestHeaderList_Create failed"); + return; + } + int32_t size = OH_ArkWebRequestHeaderList_GetSize(arkWebHeaderlist); + if (size <= 0) { + WVLOG_E("OH_ArkWebRequestHeaderList_GetSize:%{public}d", size); + return; + } + for (int32_t index = 0; index < size; index++) { + char* key; + char* value; + OH_ArkWebRequestHeaderList_GetHeader(arkWebHeaderlist, index, &key, &value); + if (!key || !value) { + continue; + } + std::string strKey(key); + std::string strValue(value); + headerList_.emplace_back(std::make_pair(strKey, strValue)); + OH_ArkWeb_ReleaseString(key); + OH_ArkWeb_ReleaseString(value); + } + OH_ArkWebRequestHeaderList_Destroy(arkWebHeaderlist); }; + std::string GetRequestUrl(); + std::string GetMethod(); + std::string GetReferrer(); + std::string GetFrameUrl(); int32_t GetRequestResourceType(); + ArkWeb_HttpBodyStream* GetHttpBodyStream(); + const WebHeaderList& GetHeader(); + bool HasGesture(); + bool IsMainFrame(); + bool IsRedirect(); private: + char* url_ = nullptr; + char* method_ = nullptr; + char* referrer_ = nullptr; + char* frameUrl_ = nullptr; int32_t requestResourceType_ = -1; - + bool isRedirect_ = false; + bool isMainFrame_ = false; + bool hasGesture_ = false; + WebHeaderList headerList_; + ArkWeb_HttpBodyStream* stream_ = nullptr; }; } #endif // WEBVIEW_CONTROLLER_IMPL_FFI_H \ No newline at end of file diff --git a/interfaces/kits/cj/include/webview_ffi.h b/interfaces/kits/cj/include/webview_ffi.h index 16f023d4..2b6391c6 100644 --- a/interfaces/kits/cj/include/webview_ffi.h +++ b/interfaces/kits/cj/include/webview_ffi.h @@ -87,11 +87,19 @@ extern "C" { FFI_EXPORT void FfiOHOSCookieMgrClearAllCookiesSync(bool incognitoMode); FFI_EXPORT void FfiOHOSCookieMgrClearSessionCookieSync(); - //WebSchemeHandlerRequest + //SchemeHandlerRequest FFI_EXPORT int64_t FfiOHOSWebSHRequestConstructor(); FFI_EXPORT int64_t FfiOHOSWebSHRequestConstructorwithrequest(const ArkWeb_ResourceRequest* request); FFI_EXPORT int32_t FfiOHOSWebSHRequestGetRequestResourceType(int64_t id, int32_t *errCode); - + FFI_EXPORT bool FfiOHOSWebSHRequestHasGesture(int64_t id, int32_t *errCode); + FFI_EXPORT bool FfiOHOSWebSHRequestIsMainFrame(int64_t id, int32_t *errCode); + FFI_EXPORT bool FfiOHOSWebSHRequestIsRedirect(int64_t id, int32_t *errCode); + FFI_EXPORT char* FfiOHOSWebSHRequestGetRequestUrl(int64_t id, int32_t *errCode); + FFI_EXPORT char* FfiOHOSWebSHRequestGetMethod(int64_t id, int32_t *errCode); + FFI_EXPORT char* FfiOHOSWebSHRequestGetReferrer(int64_t id, int32_t *errCode); + FFI_EXPORT char* FfiOHOSWebSHRequestGetFrameUrl(int64_t id, int32_t *errCode); + FFI_EXPORT const OHOS::Webview::WebHeaderList* FfiOHOSWebSHRequestGetHeader(int64_t id, int32_t *errCode); + FFI_EXPORT ArkWeb_ResourceRequest* FfiOHOSWebSHRequestGetHttpBodyStream(int64_t id, int32_t *errCode); } #endif // WEBVIEW_FFI_H \ No newline at end of file diff --git a/interfaces/kits/cj/include/webview_utils.h b/interfaces/kits/cj/include/webview_utils.h index f7c8ee7d..68053115 100644 --- a/interfaces/kits/cj/include/webview_utils.h +++ b/interfaces/kits/cj/include/webview_utils.h @@ -48,6 +48,8 @@ namespace Webview { }; char* MallocCString(const std::string& origin); + + using WebHeaderList = std::vector>; } } diff --git a/interfaces/kits/cj/src/webview_controller_impl.cpp b/interfaces/kits/cj/src/webview_controller_impl.cpp index c96f22ec..0698c708 100644 --- a/interfaces/kits/cj/src/webview_controller_impl.cpp +++ b/interfaces/kits/cj/src/webview_controller_impl.cpp @@ -621,7 +621,50 @@ namespace OHOS::Webview { int WebSHRequestImpl::GetRequestResourceType() { return requestResourceType_; - } + bool WebSHRequestImpl::HasGesture() + { + return hasGesture_; + } + + bool WebSHRequestImpl::IsMainFrame() + { + return isMainFrame_; + } + + bool WebSHRequestImpl::IsRedirect() + { + return isRedirect_; + } + + std::string WebSHRequestImpl::GetRequestUrl() + { + return url_; + } + + std::string WebSHRequestImpl::GetMethod() + { + return method_; + } + + std::string WebSHRequestImpl::GetReferrer() + { + return referrer_; + } + + std::string WebSHRequestImpl::GetFrameUrl() + { + return frameUrl_; + } + + const WebHeaderList& WebSHRequestImpl::GetHeader() + { + return headerList_; + } + + ArkWeb_HttpBodyStream* WebSHRequestImpl::GetHttpBodyStream() + { + return stream_; + } } diff --git a/interfaces/kits/cj/src/webview_ffi.cpp b/interfaces/kits/cj/src/webview_ffi.cpp index a52fc058..a42b913a 100644 --- a/interfaces/kits/cj/src/webview_ffi.cpp +++ b/interfaces/kits/cj/src/webview_ffi.cpp @@ -797,8 +797,131 @@ extern "C" { int32_t RequestResourceType = nativeWebSHRequest->GetRequestResourceType(); *errCode = NWebError::NO_ERROR; return RequestResourceType; - } + + bool FfiOHOSWebSHRequestHasGesture(int64_t id, int32_t *errCode) + { + auto nativeWebSHRequest = FFIData::GetData(id); + if (nativeWebSHRequest == nullptr) { + *errCode = NWebError::INIT_ERROR; + return false; + } + bool HasGesture = nativeWebSHRequest->HasGesture(); + *errCode = NWebError::NO_ERROR; + return HasGesture; + } + + bool FfiOHOSWebSHRequestIsMainFrame(int64_t id, int32_t *errCode) + { + auto nativeWebSHRequest = FFIData::GetData(id); + if (nativeWebSHRequest == nullptr) { + *errCode = NWebError::INIT_ERROR; + return false; + } + bool IsMainFrame = nativeWebSHRequest->IsMainFrame(); + *errCode = NWebError::NO_ERROR; + return IsMainFrame; + } + + bool FfiOHOSWebSHRequestIsRedirect(int64_t id, int32_t *errCode) + { + auto nativeWebSHRequest = FFIData::GetData(id); + if (nativeWebSHRequest == nullptr) { + *errCode = NWebError::INIT_ERROR; + return false; + } + bool IsRedirect = nativeWebSHRequest->IsRedirect(); + *errCode = NWebError::NO_ERROR; + return IsRedirect; + } + + char *FfiOHOSWebSHRequestGetRequestUrl(int64_t id, int32_t *errCode) + { + auto nativeWebSHRequest = FFIData::GetData(id); + if (nativeWebSHRequest == nullptr) { + *errCode = NWebError::INIT_ERROR; + return nullptr; + } + std::string RequestUrl = ""; + RequestUrl = nativeWebSHRequest->GetRequestUrl(); + *errCode = NWebError::NO_ERROR; + return MallocCString(RequestUrl); + } + + char *FfiOHOSWebSHRequestGetMethod(int64_t id, int32_t *errCode) + { + auto nativeWebSHRequest = FFIData::GetData(id); + if (nativeWebSHRequest == nullptr) { + *errCode = NWebError::INIT_ERROR; + return nullptr; + } + std::string Method = ""; + Method = nativeWebSHRequest->GetMethod(); + *errCode = NWebError::NO_ERROR; + return MallocCString(Method); + } + + char *FfiOHOSWebSHRequestGetReferrer(int64_t id, int32_t *errCode) + { + auto nativeWebSHRequest = FFIData::GetData(id); + if (nativeWebSHRequest == nullptr) { + *errCode = NWebError::INIT_ERROR; + return nullptr; + } + std::string Referrer = ""; + Referrer = nativeWebSHRequest->GetReferrer(); + *errCode = NWebError::NO_ERROR; + return MallocCString(Referrer); + } + + char *FfiOHOSWebSHRequestGetFrameUrl(int64_t id, int32_t *errCode) + { + auto nativeWebSHRequest = FFIData::GetData(id); + if (nativeWebSHRequest == nullptr) { + *errCode = NWebError::INIT_ERROR; + return nullptr; + } + std::string FrameUrl = ""; + FrameUrl = nativeWebSHRequest->GetFrameUrl(); + *errCode = NWebError::NO_ERROR; + return MallocCString(FrameUrl); + } + + const WebHeaderList* FfiOHOSWebSHRequestGetHeader(int64_t id, int32_t *errCode) + { + auto nativeWebSHRequest = FFIData::GetData(id); + if (nativeWebSHRequest == nullptr) { + *errCode = NWebError::INIT_ERROR; + return nullptr; + } + WebHeaderList Header; + WebHeaderList* ret = new WebHeaderList; + Header = nativeWebSHRequest->GetHeader(); + *errCode = NWebError::NO_ERROR; + size_t headerSize = Header.size(); + for (size_t index = 0; index < headerSize; index++) { + std::string first = MallocCString(Header[index].first.c_str()); + std::string second = MallocCString(Header[index].second.c_str()); + ret->push_back(std::pair(first,second)); + } + if (ret == nullptr) { + return nullptr; + } + return ret; + } + + // ArkWeb_ResourceRequest* FfiOHOSWebSHRequestGetHttpBodyStream(int64_t id, int32_t *errCode) + // { + // auto nativeWebSHRequest = FFIData::GetData(id); + // if (nativeWebSHRequest == nullptr) { + // *errCode = NWebError::INIT_ERROR; + // return nullptr; + // } + // ArkWeb_ResourceRequest* HttpBodyStream = new HttpBodyStream; + // HttpBodyStream = nativeWebSHRequest->GetHttpBodyStream(); + // *errCode = NWebError::NO_ERROR; + // return ; + // } } } } -- Gitee