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