已开启
sessionUpdate #838
xhz-sz创建于 7月10日
sessionUpdate #838
已开启
共 2 个文件变更+60-2
| @@ -41,6 +41,12 @@ enum class CallerTypeForAnco : int32_t { | |||
| 41 | QUERY = 2 | 41 | QUERY = 2 |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| 44 | +struct OriginalCallerInfo { | ||
| 45 | + sptr<IRemoteObject> callerToken = nullptr; | ||
| 46 | + int32_t persistentId = 0; | ||
| 47 | + uint64_t uiExtensionComponentId = 0; | ||
| 48 | +}; | ||
| 49 | + | ||
| 44 | class SessionInfo : public Parcelable { | 50 | class SessionInfo : public Parcelable { |
| 45 | public: | 51 | public: |
| 46 | SessionInfo() = default; | 52 | SessionInfo() = default; |
| @@ -111,6 +117,7 @@ public: | |||
| 111 | int32_t specifiedReason = 0; | 117 | int32_t specifiedReason = 0; |
| 112 | int32_t frameNum = 0; | 118 | int32_t frameNum = 0; |
| 113 | bool nativeHideWindow = false; | 119 | bool nativeHideWindow = false; |
| 120 | + OriginalCallerInfo originalCallerInfo {}; | ||
| 114 | 121 | ||
| 115 | private: | 122 | private: |
| 116 | bool DoMarshallingOne(Parcel& parcel) const; | 123 | bool DoMarshallingOne(Parcel& parcel) const; |
| @@ -120,9 +127,19 @@ private: | |||
| 120 | bool DoMarshallingFive(Parcel& parcel) const; | 127 | bool DoMarshallingFive(Parcel& parcel) const; |
| 121 | bool DoMarshallingSix(Parcel& parcel) const; | 128 | bool DoMarshallingSix(Parcel& parcel) const; |
| 122 | bool DoMarshallingSeven(Parcel& parcel) const; | 129 | bool DoMarshallingSeven(Parcel& parcel) const; |
| 130 | + bool DoMarshallingEight(Parcel& parcel) const; | ||
| 123 | static SessionInfo* ReadParcelOne(SessionInfo* info, Parcel& parcel); | 131 | static SessionInfo* ReadParcelOne(SessionInfo* info, Parcel& parcel); |
| 124 | static SessionInfo* ReadParcelTwo(SessionInfo* info, Parcel& parcel); | 132 | static SessionInfo* ReadParcelTwo(SessionInfo* info, Parcel& parcel); |
| 133 | + static SessionInfo* ReadParcelThree(SessionInfo* info, Parcel& parcel); | ||
| 125 | }; | 134 | }; |
| 126 | } // namespace AAFwk | 135 | } // namespace AAFwk |
| 136 | + | ||
| 137 | +inline uint64_t GetEffectiveComponentId(const sptr<AAFwk::SessionInfo> &sessionInfo) | ||
| 138 | +{ | ||
| 139 | + if (sessionInfo && sessionInfo->originalCallerInfo.uiExtensionComponentId != 0) { | ||
| 140 | + return sessionInfo->originalCallerInfo.uiExtensionComponentId; | ||
| 141 | + } | ||
| 142 | + return sessionInfo ? sessionInfo->uiExtensionComponentId : 0; | ||
| 143 | +} | ||
| 127 | } // namespace OHOS | 144 | } // namespace OHOS |
| 128 | 145 | ||
| @@ -50,8 +50,12 @@ bool SessionInfo::Marshalling(Parcel& parcel) const | |||
| 50 | if (!DoMarshallingSix(parcel)) { | 50 | if (!DoMarshallingSix(parcel)) { |
| 51 | return false; | 51 | return false; |
| 52 | } | 52 | } |
| 53 | - | 53 | + |
| 54 | - return DoMarshallingSeven(parcel); | 54 | + if (!DoMarshallingSeven(parcel)) { |
| 55 | + return false; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + return DoMarshallingEight(parcel); | ||
| 55 | } | 59 | } |
| 56 | 60 | ||
| 57 | bool SessionInfo::DoMarshallingOne(Parcel& parcel) const | 61 | bool SessionInfo::DoMarshallingOne(Parcel& parcel) const |
| @@ -393,6 +397,32 @@ bool SessionInfo::DoMarshallingSeven(Parcel& parcel) const | |||
| 393 | return true; | 397 | return true; |
| 394 | } | 398 | } |
| 395 | 399 | ||
| 400 | +bool SessionInfo::DoMarshallingEight(Parcel& parcel) const | ||
| 401 | +{ | ||
| 402 | + if (originalCallerInfo.callerToken) { | ||
| 403 | + if (!parcel.WriteBool(true) || | ||
| 404 | + !(static_cast<MessageParcel*>(&parcel))->WriteRemoteObject(originalCallerInfo.callerToken)) { | ||
| 405 | + ABILITYBASE_LOGE("Write original caller token failed"); | ||
| 406 | + return false; | ||
| 407 | + } | ||
| 408 | + } else { | ||
| 409 | + if (!parcel.WriteBool(false)) { | ||
| 410 | + return false; | ||
| 411 | + } | ||
| 412 | + } | ||
| 413 | + | ||
| 414 | + if (!parcel.WriteInt32(originalCallerInfo.persistentId)) { | ||
| 415 | + ABILITYBASE_LOGE("Write original persistent id failed"); | ||
| 416 | + return false; | ||
| 417 | + } | ||
| 418 | + | ||
| 419 | + if (!parcel.WriteUint64(originalCallerInfo.uiExtensionComponentId)) { | ||
| 420 | + ABILITYBASE_LOGE("Write original uiExtensionComponentId failed"); | ||
| 421 | + return false; | ||
| 422 | + } | ||
| 423 | + return true; | ||
| 424 | +} | ||
| 425 | + | ||
| 396 | SessionInfo* SessionInfo::Unmarshalling(Parcel& parcel) | 426 | SessionInfo* SessionInfo::Unmarshalling(Parcel& parcel) |
| 397 | { | 427 | { |
| 398 | SessionInfo* info = new (std::nothrow) SessionInfo(); | 428 | SessionInfo* info = new (std::nothrow) SessionInfo(); |
| @@ -417,6 +447,7 @@ SessionInfo* SessionInfo::Unmarshalling(Parcel& parcel) | |||
| 417 | } | 447 | } |
| 418 | ReadParcelOne(info, parcel); | 448 | ReadParcelOne(info, parcel); |
| 419 | ReadParcelTwo(info, parcel); | 449 | ReadParcelTwo(info, parcel); |
| 450 | + ReadParcelThree(info, parcel); | ||
| 420 | return info; | 451 | return info; |
| 421 | } | 452 | } |
| 422 | 453 | ||
| @@ -490,5 +521,15 @@ SessionInfo* SessionInfo::ReadParcelTwo(SessionInfo* info, Parcel& parcel) | |||
| 490 | } | 521 | } |
| 491 | return info; | 522 | return info; |
| 492 | } | 523 | } |
| 524 | + | ||
| 525 | +SessionInfo* SessionInfo::ReadParcelThree(SessionInfo* info, Parcel& parcel) | ||
| 526 | +{ | ||
| 527 | + if (parcel.ReadBool()) { | ||
| 528 | + info->originalCallerInfo.callerToken = (static_cast<MessageParcel*>(&parcel))->ReadRemoteObject(); | ||
| 529 | + } | ||
| 530 | + info->originalCallerInfo.persistentId = parcel.ReadInt32(); | ||
| 531 | + info->originalCallerInfo.uiExtensionComponentId = parcel.ReadUint64(); | ||
| 532 | + return info; | ||
| 533 | +} | ||
| 493 | } // namespace AAFwk | 534 | } // namespace AAFwk |
| 494 | } // namespace OHOS | 535 | } // namespace OHOS |