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 444c80dda90cd639d2832fe3afd5cd4b6c60f809..b7f3039b68bb1f32ff0ec43616de1c4de93cbca2 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 e3bcea2f443b76067e2f6900c338e1f08d8a59a1..a669260d3dd8354b1a78ede7fa021766c09df9c5 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 bc29fb35ed2d49e8df65078cd1c312578b115cf2..38eaa35eb91fa7806656797a80517842ca27c749 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 fb93e8ea01b1c0a67ce635a0882ba125fb581452..23ecfce2c04c414701212452238f4203159ab2d8 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 f39dbec7baf3dcfc8b88ec8073ae49db4639e5f9..f86e06c26abb06f618708f1975faf97b9ca441dd 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 b95c927d65ce40636774356ab41e3d3dd83d1f49..ff639082afa102c8bd855d47a9174aead007da57 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 c6ec029ba219b4da676b7a175d1d8be3fad30b4c..ad2d4c1977a5c24b809c72cdf5158169b72cbfef 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 524a855bbfe9db5c8610eda5cba98c02baed7857..1cc1ad1753f9d8a94bed6809e480f52373d1f536 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 c94abe5ecb217cacc0ad57014bc21f4f3ffc16c9..eebf2bbe3ffedc05ca94180b898260747e0694bd 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 c3a41c1d6643b389fb261679bca92e3f5e2f26f3..69d689df1c8e87555775b5776cc1f679b118985a 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 4d6d082bbc18454fe488eb51d0fb40d92ade040a..4df66512d2c375940a404056cf6706777670e3cf 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 dc61ad4ed92fa7f09b40dc6cbbbf452635d494a8..e15209a666250a3bb90485f1759eb177ae6382cc 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 0ddf5f0fe697433cf6b07a2778ef75f8633f3121..53e36bb030d4db45579cbdf83d4c113fb1670bf3 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 891730b27e961fd9ce53f8ddf7d57e10755ba329..538c0a2632c797f576abf16e58f08f849d31f1e3 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 95a11666060163fdf1bd314c569cd3b343cdceeb..f074cd37e7641c82221c21ece6bca327e6f0da41 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 55d1363dd4cf8f273c75f37b060642199badf3e4..deefab17c8340bc8b907e4dfa2cc6f62baf9437b 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 20858eda64a11ce195274b5ffd3201a75b367ef6..d8516a5ed76ec1cd995e0ae0125cdf29b960c5ef 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 7c88e697af84f58d398c6c6dd94408d3d6ee3f37..731b0fecc8f7a568383774804d3044a0f55b569b 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;