1  /*
2   * Copyright (c) 2022 Huawei Device Co., Ltd.
3   * Licensed under the Apache License, Version 2.0 (the "License");
4   * you may not use this file except in compliance with the License.
5   * You may obtain a copy of the License at
6   *
7   *     http://www.apache.org/licenses/LICENSE-2.0
8   *
9   * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  #include "extension_connection_observer.h"
17  
18  #include "mem_mgr_event_center.h"
19  #include "memmgr_log.h"
20  #include "reclaim_priority_manager.h"
21  
22  namespace OHOS {
23  namespace Memory {
24  namespace {
25  const std::string TAG = "ExtConnObs";
26  }
27  
OnExtensionConnected(const AbilityRuntime::ConnectionData & data)28  void ExtensionConnectionObserver::OnExtensionConnected(const AbilityRuntime::ConnectionData& data)
29  {
30      HILOGI("%{public}s(%{public}d,%{public}d) --> [%{public}s|%{public}s|%{public}s](%{public}d,%{public}d) "
31          "with type %{public}d", data.callerName.c_str(), data.callerPid, data.callerUid,
32          data.extensionBundleName.c_str(), data.extensionModuleName.c_str(), data.extensionName.c_str(),
33          data.extensionPid, data.extensionUid, static_cast<int32_t>(data.extensionType));
34  
35      ReclaimPriorityManager::GetInstance().UpdateReclaimPriority(
36          CallerRequest({data.callerPid, data.callerUid, data.callerName},
37              {data.extensionPid, data.extensionUid, data.extensionBundleName},
38              AppStateUpdateReason::BIND_EXTENSION));
39  }
40  
OnExtensionDisconnected(const AbilityRuntime::ConnectionData & data)41  void ExtensionConnectionObserver::OnExtensionDisconnected(const AbilityRuntime::ConnectionData& data)
42  {
43      HILOGI("%{public}s(%{public}d,%{public}d) -/-> [%{public}s|%{public}s|%{public}s](%{public}d,%{public}d) "
44          "with type %{public}d", data.callerName.c_str(), data.callerPid, data.callerUid,
45          data.extensionBundleName.c_str(), data.extensionModuleName.c_str(), data.extensionName.c_str(),
46          data.extensionPid, data.extensionUid, static_cast<int32_t>(data.extensionType));
47  
48      ReclaimPriorityManager::GetInstance().UpdateReclaimPriority(
49          CallerRequest({data.callerPid, data.callerUid, data.callerName},
50              {data.extensionPid, data.extensionUid, data.extensionBundleName},
51              AppStateUpdateReason::UNBIND_EXTENSION));
52  }
53  
OnDlpAbilityOpened(const AbilityRuntime::DlpStateData & data)54  void ExtensionConnectionObserver::OnDlpAbilityOpened(const AbilityRuntime::DlpStateData& data)
55  {
56      HILOGI("%{public}s(%{public}d,%{public}d) --> [%{public}s|%{public}s|%{public}s](%{public}d,%{public}d)",
57          data.callerName.c_str(), data.callerPid, data.callerUid, data.targetBundleName.c_str(),
58          data.targetModuleName.c_str(), data.targetAbilityName.c_str(), data.targetPid, data.targetUid);
59  
60      ReclaimHandleRequest request;
61      request.callerPid = data.callerPid;
62      request.callerUid = data.callerUid;
63      request.callerBundleName = data.callerName;
64      request.pid = data.targetPid;
65      request.uid = data.targetUid;
66      request.bundleName = data.targetBundleName;
67      request.reason =  AppStateUpdateReason::BIND_EXTENSION;
68      ReclaimPriorityManager::GetInstance().UpdateReclaimPriority(
69          CallerRequest({data.callerPid, data.callerUid, data.callerName},
70              {data.targetPid, data.targetUid, data.targetBundleName},
71              AppStateUpdateReason::BIND_EXTENSION));
72  }
73  
OnDlpAbilityClosed(const AbilityRuntime::DlpStateData & data)74  void ExtensionConnectionObserver::OnDlpAbilityClosed(const AbilityRuntime::DlpStateData& data)
75  {
76      HILOGI("%{public}s(%{public}d,%{public}d) -/-> [%{public}s|%{public}s|%{public}s](%{public}d,%{public}d)",
77          data.callerName.c_str(), data.callerPid, data.callerUid, data.targetBundleName.c_str(),
78          data.targetModuleName.c_str(), data.targetAbilityName.c_str(), data.targetPid, data.targetUid);
79  
80      ReclaimHandleRequest request;
81      request.callerPid = data.callerPid;
82      request.callerUid = data.callerUid;
83      request.callerBundleName = data.callerName;
84      request.pid = data.targetPid;
85      request.uid = data.targetUid;
86      request.bundleName = data.targetBundleName;
87      request.reason =  AppStateUpdateReason::UNBIND_EXTENSION;
88      ReclaimPriorityManager::GetInstance().UpdateReclaimPriority(
89          CallerRequest({data.callerPid, data.callerUid, data.callerName},
90              {data.targetPid, data.targetUid, data.targetBundleName},
91              AppStateUpdateReason::UNBIND_EXTENSION));
92  }
93  
OnServiceDied()94  void ExtensionConnectionObserver::OnServiceDied()
95  {
96      HILOGE("called");
97      MemMgrEventCenter::GetInstance().OnExtensionServiceDied();
98  }
99  } // namespace Memory
100  } // namespace OHOS
101