From 336cad14a726b3deeaa3b1f0b98387c32f04bce8 Mon Sep 17 00:00:00 2001 From: Zjsxstar Date: Tue, 17 Sep 2024 14:29:16 +0800 Subject: [PATCH] =?UTF-8?q?xcomponent=E7=BB=84=E4=BB=B6=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E9=9A=90=E7=A7=81=E5=9B=BE=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Zjsxstar Change-Id: Idf808f3dce87408475332a6b4ee15563fea53f19 --- .../ark_component/export/arkComponent.d.ts | 1 + .../ark_component/src/ArkXComponent.ts | 23 +++++++++++++++- .../engine/arkComponent.js | 21 +++++++++++++++ .../arkts_native_api_impl_bridge.cpp | 4 +++ .../arkts_native_xcomponent_bridge.cpp | 26 +++++++++++++++++++ .../arkts_native_xcomponent_bridge.h | 2 ++ .../jsview/js_xcomponent.cpp | 14 ++++++++++ .../jsview/js_xcomponent.h | 1 + .../pattern/xcomponent/xcomponent_model.h | 1 + .../xcomponent/xcomponent_model_ng.cpp | 17 ++++++++++++ .../pattern/xcomponent/xcomponent_model_ng.h | 2 ++ .../pattern/xcomponent/xcomponent_pattern.cpp | 9 +++++++ .../pattern/xcomponent/xcomponent_pattern.h | 1 + .../render/adapter/rosen_render_context.cpp | 8 ++++++ .../render/adapter/rosen_render_context.h | 1 + .../components_ng/render/render_context.h | 1 + .../core/interfaces/arkoala/arkoala_api.h | 2 ++ .../native/node/node_xcomponent_modifier.cpp | 16 ++++++++++++ 18 files changed, 149 insertions(+), 1 deletion(-) diff --git a/frameworks/bridge/declarative_frontend/ark_component/export/arkComponent.d.ts b/frameworks/bridge/declarative_frontend/ark_component/export/arkComponent.d.ts index 444c80dda90..b7f3039b68b 100644 --- a/frameworks/bridge/declarative_frontend/ark_component/export/arkComponent.d.ts +++ b/frameworks/bridge/declarative_frontend/ark_component/export/arkComponent.d.ts @@ -1713,6 +1713,7 @@ declare class ArkXComponentComponent implements CommonMethod GestureJudgeResult): this; onLoad(callback: (event?: object) => void): this; onDestroy(event: () => void): this; + enableSecure(value: boolean): this; } declare class ArkBadgeComponent extends ArkComponent implements BadgeAttribute { constructor(nativePtr: KNode, classType?: ModifierType); diff --git a/frameworks/bridge/declarative_frontend/ark_component/src/ArkXComponent.ts b/frameworks/bridge/declarative_frontend/ark_component/src/ArkXComponent.ts index e3bcea2f443..a669260d3dd 100644 --- a/frameworks/bridge/declarative_frontend/ark_component/src/ArkXComponent.ts +++ b/frameworks/bridge/declarative_frontend/ark_component/src/ArkXComponent.ts @@ -505,7 +505,10 @@ class ArkXComponentComponent extends ArkComponent implements XComponentAttribute modifierWithKey(this._modifiersWithKeys, XComponentEnableAnalyzerModifier.identity, XComponentEnableAnalyzerModifier, value); return this; } - + enableSecure(value: boolean): this { + modifierWithKey(this._modifiersWithKeys, XComponentEnableSecureModifier.identity, XComponentEnableSecureModifier, value); + return this; + } } // @ts-ignore @@ -886,6 +889,24 @@ class XComponentEnableAnalyzerModifier extends ModifierWithKey { } } + checkObjectDiff(): boolean { + return !isBaseOrResourceEqual(this.stageValue, this.value); + } +} + +class XComponentEnableSecureModifier extends ModifierWithKey { + constructor(value: boolean) { + super(value); + } + static identity: Symbol = Symbol('xComponentEnableSecure'); + applyPeer(node: KNode, reset: boolean): void { + if (reset) { + getUINativeModule().xComponent.resetEnableSecure(node); + } else { + getUINativeModule().xComponent.setEnableSecure(node, this.value); + } + } + checkObjectDiff(): boolean { return !isBaseOrResourceEqual(this.stageValue, this.value); } diff --git a/frameworks/bridge/declarative_frontend/engine/arkComponent.js b/frameworks/bridge/declarative_frontend/engine/arkComponent.js index bc29fb35ed2..38eaa35eb91 100644 --- a/frameworks/bridge/declarative_frontend/engine/arkComponent.js +++ b/frameworks/bridge/declarative_frontend/engine/arkComponent.js @@ -25673,6 +25673,10 @@ class ArkXComponentComponent extends ArkComponent { modifierWithKey(this._modifiersWithKeys, XComponentEnableAnalyzerModifier.identity, XComponentEnableAnalyzerModifier, value); return this; } + enableSecure(value) { + modifierWithKey(this._modifiersWithKeys, XComponentEnableSecureModifier.identity, XComponentEnableSecureModifier, value); + return this; + } } // @ts-ignore if (globalThis.XComponent !== undefined) { @@ -26067,6 +26071,23 @@ class XComponentEnableAnalyzerModifier extends ModifierWithKey { } } XComponentEnableAnalyzerModifier.identity = Symbol('xComponentEnableAnalyzer'); +class XComponentEnableSecureModifier extends ModifierWithKey { + constructor(value) { + super(value); + } + applyPeer(node, reset) { + if (reset) { + getUINativeModule().xComponent.resetEnableSecure(node); + } + else { + getUINativeModule().xComponent.setEnableSecure(node, this.value); + } + } + checkObjectDiff() { + return !isBaseOrResourceEqual(this.stageValue, this.value); + } +} +XComponentEnableSecureModifier.identity = Symbol('xComponentEnableSecure'); /// class ArkBadgeComponent extends ArkComponent { constructor(nativePtr, classType) { diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_api_impl_bridge.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_api_impl_bridge.cpp index fb93e8ea01b..23ecfce2c04 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_api_impl_bridge.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_api_impl_bridge.cpp @@ -5234,6 +5234,10 @@ void ArkUINativeModule::RegisterXComponentAttributes(Local obj panda::FunctionRef::New(const_cast(vm), XComponentBridge::SetEnableAnalyzer)); xComponent->Set(vm, panda::StringRef::NewFromUtf8(vm, "resetEnableAnalyzer"), panda::FunctionRef::New(const_cast(vm), XComponentBridge::ResetEnableAnalyzer)); + xComponent->Set(vm, panda::StringRef::NewFromUtf8(vm, "setEnableSecure"), + panda::FunctionRef::New(const_cast(vm), XComponentBridge::SetEnableSecure)); + xComponent->Set(vm, panda::StringRef::NewFromUtf8(vm, "resetEnableSecure"), + panda::FunctionRef::New(const_cast(vm), XComponentBridge::ResetEnableSecure)); object->Set(vm, panda::StringRef::NewFromUtf8(vm, "xComponent"), xComponent); } diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.cpp index f39dbec7baf..f86e06c26ab 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.cpp @@ -668,4 +668,30 @@ ArkUINativeModuleValue XComponentBridge::ResetEnableAnalyzer(ArkUIRuntimeCallInf GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentEnableAnalyzer(nativeNode); return panda::JSValueRef::Undefined(vm); } + +ArkUINativeModuleValue XComponentBridge::SetEnableSecure(ArkUIRuntimeCallInfo *runtimeCallInfo) +{ + EcmaVM *vm = runtimeCallInfo->GetVM(); + CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm)); + Local firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST); + Local secondArg = runtimeCallInfo->GetCallArgRef(ARG_ID); + auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value()); + if (secondArg->IsBoolean()) { + bool boolValue = secondArg->ToBoolean(vm)->Value(); + GetArkUINodeModifiers()->getXComponentModifier()->setXComponentEnableSecure(nativeNode, boolValue); + } else { + GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentEnableSecure(nativeNode); + } + return panda::JSValueRef::Undefined(vm); +} + +ArkUINativeModuleValue XComponentBridge::ResetEnableSecure(ArkUIRuntimeCallInfo *runtimeCallInfo) +{ + EcmaVM *vm = runtimeCallInfo->GetVM(); + CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm)); + Local firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST); + auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value()); + GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentEnableSecure(nativeNode); + return panda::JSValueRef::Undefined(vm); +} } // namespace OHOS::Ace::NG diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.h b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.h index b95c927d65c..ff639082afa 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.h +++ b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.h @@ -74,6 +74,8 @@ public: static ArkUINativeModuleValue ResetOnDestroy(ArkUIRuntimeCallInfo* runtimeCallInfo); static ArkUINativeModuleValue SetEnableAnalyzer(ArkUIRuntimeCallInfo* runtimeCallInfo); static ArkUINativeModuleValue ResetEnableAnalyzer(ArkUIRuntimeCallInfo* runtimeCallInfo); + static ArkUINativeModuleValue SetEnableSecure(ArkUIRuntimeCallInfo* runtimeCallInfo); + static ArkUINativeModuleValue ResetEnableSecure(ArkUIRuntimeCallInfo* runtimeCallInfo); private: static XComponentType ConvertToXComponentType(const std::string& type); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.cpp b/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.cpp index c6ec029ba21..ad2d4c1977a 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.cpp @@ -177,6 +177,7 @@ void JSXComponent::JSBind(BindingTarget globalObj) JSClass::StaticMethod("linearGradientBlur", &JSXComponent::JsLinearGradientBlur); JSClass::StaticMethod("enableAnalyzer", &JSXComponent::JsEnableAnalyzer); JSClass::StaticMethod("renderFit", &JSXComponent::JsRenderFit); + JSClass::StaticMethod("enableSecure", &JSXComponent::JsEnableSecure); JSClass::InheritAndBind(globalObj); } @@ -688,4 +689,17 @@ void JSXComponent::JsRenderFit(const JSCallbackInfo& args) } XComponentModel::GetInstance()->SetRenderFit(renderFit); } + +void JSXComponent::JsEnableSecure(const JSCallbackInfo& args) +{ + auto type = XComponentModel::GetInstance()->GetType(); + if (type != XComponentType::SURFACE || args.Length() != 1) { + return; + } + // set isSecure on SurfaceNode when type is SURFACE + if (args[0]->IsBoolean()) { + bool isSecure = args[0]->ToBoolean(); + XComponentModel::GetInstance()->EnableSecure(isSecure); + } +} } // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.h b/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.h index 524a855bbfe..1cc1ad1753f 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.h @@ -181,6 +181,7 @@ public: static void JsLinearGradientBlur(const JSCallbackInfo& args); static void JsEnableAnalyzer(bool enable); static void JsRenderFit(const JSCallbackInfo& args); + static void JsEnableSecure(const JSCallbackInfo& args); // For xcomponent node static void* Create(const XComponentParams& params); diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model.h b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model.h index c94abe5ecb2..eebf2bbe3ff 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model.h +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model.h @@ -80,6 +80,7 @@ public: virtual void SetControllerOnChanged(SurfaceChangedEvent&& onChanged) {} virtual void SetControllerOnDestroyed(SurfaceDestroyedEvent&& onDestroyed) {} virtual void SetRenderFit(RenderFit renderFit) {} + virtual void EnableSecure(bool isSecure) {} private: static std::unique_ptr instance_; diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.cpp b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.cpp index c3a41c1d664..69d689df1c8 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.cpp @@ -267,6 +267,15 @@ void XComponentModelNG::SetRenderFit(RenderFit renderFit) xcPattern->SetRenderFit(renderFit); } +void XComponentModelNG::EnableSecure(bool isSecure) +{ + auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode()); + CHECK_NULL_VOID(frameNode); + auto xcPattern = AceType::DynamicCast(frameNode->GetPattern()); + CHECK_NULL_VOID(xcPattern); + xcPattern->EnableSecure(isSecure); +} + bool XComponentModelNG::IsTexture(FrameNode *frameNode) { auto layoutProperty = frameNode->GetLayoutProperty(); @@ -476,4 +485,12 @@ void XComponentModelNG::SetImageAIOptions(FrameNode* frameNode, void* options) CHECK_NULL_VOID(xcPattern); xcPattern->SetImageAIOptions(options); } + +void XComponentModelNG::EnableSecure(FrameNode* frameNode, bool enable) +{ + CHECK_NULL_VOID(frameNode); + auto xcPattern = AceType::DynamicCast(frameNode->GetPattern()); + CHECK_NULL_VOID(xcPattern); + xcPattern->EnableSecure(enable); +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.h b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.h index 4d6d082bbc1..4df66512d2c 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.h +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.h @@ -57,6 +57,7 @@ public: void SetControllerOnChanged(SurfaceChangedEvent&& onChanged) override; void SetControllerOnDestroyed(SurfaceDestroyedEvent&& onDestroyed) override; void SetRenderFit(RenderFit renderFit) override; + void EnableSecure(bool isSecure) override; static bool IsTexture(FrameNode* frameNode); static XComponentType GetType(FrameNode* frameNode); @@ -80,6 +81,7 @@ public: static void SetOnLoad(FrameNode* frameNode, LoadEvent&& onLoad); static void SetOnDestroy(FrameNode* frameNode, DestroyEvent&& onDestroy); static void EnableAnalyzer(FrameNode* frameNode, bool enable); + static void EnableSecure(FrameNode* frameNode, bool enable); private: static XComponentType GetTypeImpl(const RefPtr& frameNode); diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp index dc61ad4ed92..e15209a6662 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp @@ -2013,4 +2013,13 @@ void XComponentPattern::SetRenderFit(RenderFit renderFit) CHECK_NULL_VOID(handlingSurfaceRenderContext_); handlingSurfaceRenderContext_->SetRenderFit(renderFit); } + +void XComponentPattern::EnableSecure(bool isSecure) +{ + if (type_ != XComponentType::SURFACE) { + return; + } + CHECK_NULL_VOID(handlingSurfaceRenderContext_); + handlingSurfaceRenderContext_->SetSecurityLayer(isSecure); +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.h b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.h index 0ddf5f0fe69..53e36bb030d 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.h +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.h @@ -323,6 +323,7 @@ public: } } void OnSurfaceCallbackModeChange(SurfaceCallbackMode mode); + void EnableSecure(bool isSecure); private: void OnAttachToFrameNode() override; diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index 891730b27e9..538c0a2632c 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -5153,6 +5153,14 @@ void RosenRenderContext::SetUsingContentRectForRenderFrame(bool value, bool adju adjustRSFrameByContentRect_ = adjustRSFrameByContentRect; } +void RosenRenderContext::SetSecurityLayer(bool isSecure) +{ + CHECK_NULL_VOID(rsNode_); + auto rsSurfaceNode = rsNode_->ReinterpretCastTo(); + CHECK_NULL_VOID(rsSurfaceNode); + rsSurfaceNode->SetSecurityLayer(isSecure); +} + void RosenRenderContext::SetFrameGravity(OHOS::Rosen::Gravity gravity) { CHECK_NULL_VOID(rsNode_); diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.h b/frameworks/core/components_ng/render/adapter/rosen_render_context.h index 95a11666060..f074cd37e76 100755 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.h +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.h @@ -267,6 +267,7 @@ public: void RemoveChild(const RefPtr& renderContext) override; void ClearChildren() override; void SetBounds(float positionX, float positionY, float width, float height) override; + void SetSecurityLayer(bool isSecure) override; void OnTransformTranslateUpdate(const TranslateOptions& value) override; Vector3F MarshallTranslate(const TranslateOptions& translate); bool DoTextureExport(uint64_t surfaceId) override; diff --git a/frameworks/core/components_ng/render/render_context.h b/frameworks/core/components_ng/render/render_context.h index 55d1363dd4c..deefab17c83 100644 --- a/frameworks/core/components_ng/render/render_context.h +++ b/frameworks/core/components_ng/render/render_context.h @@ -280,6 +280,7 @@ public: virtual void ClearChildren() {} virtual void SetBounds(float positionX, float positionY, float width, float height) {} virtual void SetContentRectToFrame(RectF rect) {} + virtual void SetSecurityLayer(bool isSecure) {} virtual void UpdateBackBlurRadius(const Dimension& radius) {} virtual void UpdateBackBlurStyle(const std::optional& bgBlurStyle) {} diff --git a/frameworks/core/interfaces/arkoala/arkoala_api.h b/frameworks/core/interfaces/arkoala/arkoala_api.h index 20858eda64a..d8516a5ed76 100644 --- a/frameworks/core/interfaces/arkoala/arkoala_api.h +++ b/frameworks/core/interfaces/arkoala/arkoala_api.h @@ -4631,6 +4631,8 @@ struct ArkUIXComponentModifier { void (*setXComponentLibraryname)(ArkUINodeHandle node, ArkUI_CharPtr libraryname); void (*setImageAIOptions)(ArkUINodeHandle node, void* options); void (*initXComponent)(ArkUINodeHandle node); + void (*setXComponentEnableSecure)(ArkUINodeHandle node, ArkUI_Bool enable); + void (*resetXComponentEnableSecure)(ArkUINodeHandle node); }; struct ArkUIStateModifier { diff --git a/frameworks/core/interfaces/native/node/node_xcomponent_modifier.cpp b/frameworks/core/interfaces/native/node/node_xcomponent_modifier.cpp index 7c88e697af8..731b0fecc8f 100644 --- a/frameworks/core/interfaces/native/node/node_xcomponent_modifier.cpp +++ b/frameworks/core/interfaces/native/node/node_xcomponent_modifier.cpp @@ -162,6 +162,20 @@ void InitXComponent(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); XComponentModelNG::InitXComponent(frameNode); } + +void SetXComponentEnableSecure(ArkUINodeHandle node, ArkUI_Bool enable) +{ + auto* frameNode = reinterpret_cast(node); + CHECK_NULL_VOID(frameNode); + XComponentModelNG::EnableSecure(frameNode, enable); +} + +void ResetXComponentEnableSecure(ArkUINodeHandle node) +{ + auto* frameNode = reinterpret_cast(node); + CHECK_NULL_VOID(frameNode); + XComponentModelNG::EnableSecure(frameNode, false); +} } // namespace namespace NodeModifier { @@ -189,6 +203,8 @@ const ArkUIXComponentModifier* GetXComponentModifier() SetXComponentLibraryname, SetImageAIOptions, InitXComponent, + SetXComponentEnableSecure, + ResetXComponentEnableSecure, }; return &modifier; -- Gitee