1 /*
2 * Copyright (c) 2024 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 "ability_manager_client.h"
17 #include "application_context.h"
18 #include "hisysevent_adapter_impl.h"
19 #include "hisysevent.h"
20 #include "ohos_resource_adapter_impl.h"
21
22 namespace OHOS::NWeb {
23 namespace {
24 const HiviewDFX::HiSysEvent::EventType EVENT_TYPES[] = {
25 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
26 OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
27 OHOS::HiviewDFX::HiSysEvent::EventType::SECURITY,
28 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
29 };
30 }
31
32 static std::string g_currentBundleName = "";
33 static std::string g_versionCode = "";
GetInstance()34 HiSysEventAdapterImpl& HiSysEventAdapterImpl::GetInstance()
35 {
36 static HiSysEventAdapterImpl instance;
37 return instance;
38 }
39
40 template<typename... Args>
ForwardToHiSysEvent(const std::string& eventName, HiSysEventAdapter::EventType type, const std::tuple<Args...>& tp)41 static int ForwardToHiSysEvent(const std::string& eventName, HiSysEventAdapter::EventType type,
42 const std::tuple<Args...>& tp)
43 {
44 if (g_currentBundleName.empty()) {
45 auto appInfo = AbilityRuntime::ApplicationContext::GetInstance()->GetApplicationInfo();
46 if (appInfo != nullptr) {
47 g_currentBundleName = appInfo->bundleName.c_str();
48 }
49 }
50 if (g_versionCode.empty()) {
51 g_versionCode = OhosResourceAdapterImpl::GetArkWebVersion();
52 }
53 std::tuple<const std::string, const std::string, const std::string, const std::string> sysData(
54 "BUNDLE_NAME", g_currentBundleName.c_str(),
55 "VERSION_CODE", g_versionCode.c_str()
56 );
57 auto mergeData = std::tuple_cat(sysData, tp);
58
59 return std::apply(
60 [&](auto&&... args) {
61 return HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::WEBVIEW, eventName, EVENT_TYPES[type], args...);
62 },
63 mergeData);
64 }
65
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const std::string>& data)66 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
67 const std::tuple<const std::string, const std::string>& data)
68 {
69 return ForwardToHiSysEvent(eventName, type, data);
70 }
71
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const std::string, const std::string, const std::string>& data)72 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
73 const std::tuple<const std::string, const std::string, const std::string, const std::string>& data)
74 {
75 return ForwardToHiSysEvent(eventName, type, data);
76 }
77
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const std::string, const std::string, const std::string, const std::string, const std::string>& data)78 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
79 const std::tuple<const std::string, const std::string, const std::string, const std::string,
80 const std::string, const std::string>& data)
81 {
82 return ForwardToHiSysEvent(eventName, type, data);
83 }
84
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string>& data)85 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
86 const std::tuple<const std::string, const std::string, const std::string, const std::string,
87 const std::string, const std::string, const std::string, const std::string>& data)
88 {
89 return ForwardToHiSysEvent(eventName, type, data);
90 }
91
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string>& data)92 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
93 const std::tuple<const std::string, const std::string, const std::string, const std::string,
94 const std::string, const std::string, const std::string, const std::string,
95 const std::string, const std::string>& data)
96 {
97 return ForwardToHiSysEvent(eventName, type, data);
98 }
99
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string>& data)100 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
101 const std::tuple<const std::string, const std::string, const std::string, const std::string,
102 const std::string, const std::string, const std::string, const std::string,
103 const std::string, const std::string, const std::string, const std::string>& data)
104 {
105 return ForwardToHiSysEvent(eventName, type, data);
106 }
107
108 using systemData = std::tuple<const std::string, const int, const std::string, const std::string,
109 const std::string, const std::string>;
110
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const int64_t, const std::string, const int, const std::string, const std::vector<uint16_t>, const std::string, const int>& data)111 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
112 const std::tuple<const std::string, const int64_t, const std::string, const int,
113 const std::string, const std::vector<uint16_t>, const std::string, const int>& data)
114 {
115 auto appInfo = AbilityRuntime::ApplicationContext::GetInstance()->GetApplicationInfo();
116
117 AppExecFwk::ElementName elementName = AAFwk::AbilityManagerClient::GetInstance()->GetTopAbility();
118
119 systemData sysData = {
120 "VERSION_CODE", appInfo->versionCode,
121 "VERSION_NAME", appInfo->versionName.c_str(),
122 "ABILITY_NAME", elementName.GetAbilityName()
123 };
124
125 auto mergeData = std::tuple_cat(data, sysData);
126 return ForwardToHiSysEvent(eventName, type, mergeData);
127 }
128
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const int64_t, const std::string, const int64_t, const std::string, const int, const std::string, const int, const std::string, const int64_t, const std::string, const int>& data)129 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
130 const std::tuple<const std::string, const int64_t, const std::string, const int64_t,
131 const std::string, const int, const std::string, const int,
132 const std::string, const int64_t, const std::string, const int>& data)
133 {
134 auto appInfo = AbilityRuntime::ApplicationContext::GetInstance()->GetApplicationInfo();
135
136 AppExecFwk::ElementName elementName = AAFwk::AbilityManagerClient::GetInstance()->GetTopAbility();
137
138 std::tuple<const std::string, const std::string, const std::string, const std::string,
139 const std::string, const std::string> sysData = {
140 "SCENE_ID", "WEB_LIST_FLING",
141 "ABILITY_NAME", elementName.GetAbilityName(),
142 "PAGE_URL", ""
143 };
144
145 auto mergeData = std::tuple_cat(data, sysData);
146 return ForwardToHiSysEvent(eventName, type, mergeData);
147 }
148
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const int64_t, const std::string, const int64_t, const std::string, const uint32_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t, const std::string, const int64_t>& data)149 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
150 const std::tuple<const std::string, const int64_t,
151 const std::string, const int64_t, const std::string, const uint32_t,
152 const std::string, const int64_t, const std::string, const int64_t,
153 const std::string, const int64_t, const std::string, const int64_t,
154 const std::string, const int64_t, const std::string, const int64_t,
155 const std::string, const int64_t, const std::string, const int64_t,
156 const std::string, const int64_t, const std::string, const int64_t,
157 const std::string, const int64_t, const std::string, const int64_t,
158 const std::string, const int64_t, const std::string, const int64_t,
159 const std::string, const int64_t, const std::string, const int64_t,
160 const std::string, const int64_t, const std::string, const int64_t,
161 const std::string, const int64_t, const std::string, const int64_t>& data)
162 {
163 auto appInfo = AbilityRuntime::ApplicationContext::GetInstance()->GetApplicationInfo();
164
165 AppExecFwk::ElementName elementName = AAFwk::AbilityManagerClient::GetInstance()->GetTopAbility();
166
167 std::tuple<const std::string, const std::string> sysData = {
168 "ABILITY_NAME", elementName.GetAbilityName(),
169 };
170
171 auto mergeData = std::tuple_cat(data, sysData);
172 return ForwardToHiSysEvent(eventName, type, mergeData);
173 }
174
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string>& data)175 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
176 const std::tuple<const std::string, const std::string, const std::string, const std::string,
177 const std::string, const std::string, const std::string, const std::string,
178 const std::string, const std::string, const std::string, const std::string,
179 const std::string, const std::string>& data)
180 {
181 return ForwardToHiSysEvent(eventName, type, data);
182 }
183
Write(const std::string& eventName, EventType type, const std::tuple<const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string, const std::string>& data)184 int HiSysEventAdapterImpl::Write(const std::string& eventName, EventType type,
185 const std::tuple<const std::string, const std::string, const std::string, const std::string,
186 const std::string, const std::string, const std::string, const std::string,
187 const std::string, const std::string, const std::string, const std::string,
188 const std::string, const std::string, const std::string, const std::string>& data)
189 {
190 std::string versionCode = OhosResourceAdapterImpl::GetArkWebVersion();
191 auto extendedData = std::tuple_cat(
192 std::make_tuple("VERSION_CODE", versionCode.c_str()),
193 data
194 );
195
196 return std::apply(
197 [&](auto&&... args) {
198 return HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::WEBVIEW, eventName, EVENT_TYPES[type], args...);
199 },
200 extendedData);
201 }
202 } // namespace OHOS::NWeb
203