Skip to content

Commit d2c5eb4

Browse files
committed
extracted network agent callbacks from utility file to class
1 parent 2f0062b commit d2c5eb4

File tree

3 files changed

+298
-277
lines changed

3 files changed

+298
-277
lines changed

runtime/src/main/jni/JsV8InspectorClient.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ void JsV8InspectorClient::attachInspectorCallbacks(Isolate* isolate,
268268

269269
inspectorJSObject->Set(ArgConverter::ConvertToV8String(isolate, "responseReceived"), FunctionTemplate::New(isolate, NetworkDomainCallbackHandlers::ResponseReceivedCallback));
270270
inspectorJSObject->Set(ArgConverter::ConvertToV8String(isolate, "requestWillBeSent"), FunctionTemplate::New(isolate, NetworkDomainCallbackHandlers::RequestWillBeSentCallback));
271-
inspectorJSObject->Set(ArgConverter::ConvertToV8String(isolate, "dataForRequestId"), FunctionTemplate::New(isolate, NetworkDomainCallbackHandlers::DataForRequestId));
271+
inspectorJSObject->Set(ArgConverter::ConvertToV8String(isolate, "dataForRequestId"), FunctionTemplate::New(isolate, NetworkDomainCallbackHandlers::DataForRequestIdCallback));
272272
inspectorJSObject->Set(ArgConverter::ConvertToV8String(isolate, "loadingFinished"), FunctionTemplate::New(isolate, NetworkDomainCallbackHandlers::LoadingFinishedCallback));
273273
inspectorJSObject->SetAccessor(ArgConverter::ConvertToV8String(isolate, "isConnected"), JsV8InspectorClient::InspectorIsConnectedGetterCallback);
274274

Lines changed: 266 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
1+
//
2+
// Created by pkanev on 3/8/2017.
3+
//
4+
5+
#include <sstream>
6+
#include "NetworkDomainCallbackHandlers.h"
7+
8+
using namespace tns;
9+
10+
void NetworkDomainCallbackHandlers::ResponseReceivedCallback(const v8::FunctionCallbackInfo<v8::Value>& args) {
11+
try {
12+
auto networkAgentInstance = V8NetworkAgentImpl::Instance;
13+
14+
if (!networkAgentInstance) {
15+
return;
16+
}
17+
18+
if (args.Length() != 0 && !args[0]->IsObject()) {
19+
return;
20+
}
21+
22+
auto isolate = args.GetIsolate();
23+
24+
v8::HandleScope scope(isolate);
25+
26+
auto context = isolate->GetCurrentContext();
27+
28+
v8::Local<v8::Object> argsObj = args[0]->ToObject();
29+
30+
if ((!argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "requestId")).FromMaybe(false) ||
31+
!argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "timestamp")).FromMaybe(false) ||
32+
!argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "type")).FromMaybe(false)) ||
33+
!argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "response")).FromMaybe(false)) {
34+
throw NativeScriptException(
35+
"Not all parameters are present in the object argument in the call to ResponseReceived! Required params: 'requestId', `timestamp`, `type`, `response`");
36+
}
37+
38+
auto requestId = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "requestId")).ToLocalChecked()->ToString();
39+
auto type = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "type")).ToLocalChecked()->ToString();
40+
auto response = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "response")).ToLocalChecked();
41+
auto timeStamp = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "timestamp")).ToLocalChecked()->ToNumber()->IntegerValue();
42+
43+
auto responseAsObj = response->ToObject();
44+
v8::Local<v8::String> responseJson;
45+
auto maybeResponseJson = v8::JSON::Stringify(context, responseAsObj);
46+
47+
if (!maybeResponseJson.ToLocal(&responseJson)) {
48+
throw NativeScriptException("`response` parameter not in the correct format.");
49+
}
50+
51+
auto responseJsonString = ArgConverter::ConvertToString(responseJson).c_str();
52+
auto protocolResponseJson = protocol::parseJSON(responseJsonString);
53+
54+
protocol::ErrorSupport errorSupport;
55+
56+
auto protocolResponseObj = protocol::Network::Response::parse(protocolResponseJson.get(),
57+
&errorSupport);
58+
59+
auto requestIdString = ArgConverter::ConvertToString(requestId).c_str();
60+
auto networkRequestData = new v8_inspector::utils::NetworkRequestData();
61+
networkAgentInstance->m_responses.insert(std::make_pair(requestIdString, networkRequestData));
62+
63+
networkAgentInstance->m_frontend.responseReceived(requestIdString,
64+
FrameId,
65+
LoaderId,
66+
timeStamp,
67+
ArgConverter::ConvertToString(
68+
type).c_str(),
69+
std::move(protocolResponseObj));
70+
} catch (NativeScriptException& e) {
71+
e.ReThrowToV8();
72+
} catch (std::exception e) {
73+
std::stringstream ss;
74+
ss << "Error: c exception: " << e.what() << std::endl;
75+
NativeScriptException nsEx(ss.str());
76+
nsEx.ReThrowToV8();
77+
} catch (...) {
78+
NativeScriptException nsEx(std::string("Error: c exception!"));
79+
nsEx.ReThrowToV8();
80+
}
81+
}
82+
83+
void NetworkDomainCallbackHandlers::RequestWillBeSentCallback(const v8::FunctionCallbackInfo<v8::Value>& args) {
84+
try {
85+
auto networkAgentInstance = V8NetworkAgentImpl::Instance;
86+
87+
if (!networkAgentInstance) {
88+
return;
89+
}
90+
91+
if (args.Length() != 0 && !args[0]->IsObject()) {
92+
return;
93+
}
94+
95+
auto isolate = args.GetIsolate();
96+
97+
v8::HandleScope scope(isolate);
98+
99+
auto context = isolate->GetCurrentContext();
100+
101+
v8::Local<v8::Object> argsObj = args[0]->ToObject();
102+
103+
if ((!(argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "requestId")).FromMaybe(false)) ||
104+
!(argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "url")).FromMaybe(false)) ||
105+
!(argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "request")).FromMaybe(false)) ||
106+
!(argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "timestamp")).FromMaybe(false)) ||
107+
!(argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "type")).FromMaybe(false)))) {
108+
throw NativeScriptException("Not all parameters are present in the object argument in the call to RequestWillBeSent! Required params: 'requestId', `url`, `timestamp`, `type`, `request`, `timestamps`");
109+
}
110+
111+
auto requestId = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "requestId")).ToLocalChecked()->ToString();
112+
auto url = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "url")).ToLocalChecked()->ToString();
113+
auto request = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "request")).ToLocalChecked();
114+
auto timeStamp = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "timestamp")).ToLocalChecked()->ToNumber()->IntegerValue();
115+
auto typeArg = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "type")).ToLocalChecked()->ToString();
116+
117+
auto requestAsObj = request->ToObject();
118+
v8::Local<v8::String> requestJson;
119+
auto maybeRequestJson = v8::JSON::Stringify(context, requestAsObj);
120+
121+
if (!maybeRequestJson.ToLocal(&requestJson)) {
122+
throw NativeScriptException("`request` parameter not in the correct format.");
123+
}
124+
125+
auto requestJsonString = ArgConverter::ConvertToString(requestJson).c_str();
126+
auto protocolRequestJson = protocol::parseJSON(requestJsonString);
127+
128+
protocol::ErrorSupport errorSupport;
129+
130+
auto protocolResponseObj = protocol::Network::Request::parse(protocolRequestJson.get(), &errorSupport);
131+
auto initiator = protocol::Network::Initiator::create().setType(protocol::Network::Initiator::TypeEnum::Script).build();
132+
133+
protocol::Maybe<String16> type(ArgConverter::ConvertToString(typeArg).c_str());
134+
protocol::Maybe<protocol::Network::Response> emptyRedirect;
135+
networkAgentInstance->m_frontend.requestWillBeSent(ArgConverter::ConvertToString(requestId).c_str(),
136+
FrameId,
137+
LoaderId,
138+
ArgConverter::ConvertToString(url).c_str(),
139+
std::move(protocolResponseObj),
140+
timeStamp,
141+
std::move(initiator),
142+
emptyRedirect,
143+
type);
144+
} catch (NativeScriptException& e) {
145+
e.ReThrowToV8();
146+
} catch (std::exception e) {
147+
std::stringstream ss;
148+
ss << "Error: c exception: " << e.what() << std::endl;
149+
NativeScriptException nsEx(ss.str());
150+
nsEx.ReThrowToV8();
151+
} catch (...) {
152+
NativeScriptException nsEx(std::string("Error: c exception!"));
153+
nsEx.ReThrowToV8();
154+
}
155+
}
156+
157+
void NetworkDomainCallbackHandlers::DataForRequestIdCallback(const v8::FunctionCallbackInfo<v8::Value>& args) {
158+
try {
159+
auto networkAgentInstance = V8NetworkAgentImpl::Instance;
160+
161+
if (!networkAgentInstance) {
162+
return;
163+
}
164+
165+
if (args.Length() != 0 && !args[0]->IsObject()) {
166+
return;
167+
}
168+
169+
auto isolate = args.GetIsolate();
170+
171+
v8::HandleScope scope(isolate);
172+
173+
auto context = isolate->GetCurrentContext();
174+
175+
v8::Local<v8::Object> argsObj = args[0]->ToObject();
176+
177+
if (!argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "requestId")).FromMaybe(false) ||
178+
!argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "data")).FromMaybe(false) ||
179+
!argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "hasTextContent")).FromMaybe(false)) {
180+
throw NativeScriptException(
181+
"Not all parameters are present in the object argument in the call to DataForRequestId! Required params: 'requestId', `data`, `hasTextContent`");
182+
}
183+
184+
auto requestId = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "requestId")).ToLocalChecked()->ToString();
185+
auto data = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "data")).ToLocalChecked()->ToString();
186+
auto hasTextContent = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "hasTextContent")).ToLocalChecked()->ToBoolean();
187+
188+
auto requestIdString = ArgConverter::ConvertToString(requestId).c_str();
189+
auto dataString = ArgConverter::ConvertToString(data);
190+
auto hasTextContentBool = hasTextContent->BooleanValue();
191+
192+
auto responses = networkAgentInstance->m_responses;
193+
auto it = responses.find(requestIdString);
194+
195+
if (it == responses.end()) {
196+
throw NativeScriptException("Response not found for requestId = " +
197+
ArgConverter::ConvertToString(requestId));
198+
} else {
199+
v8_inspector::utils::NetworkRequestData* response = it->second;
200+
201+
if (!hasTextContentBool) {
202+
response->setData(dataString);
203+
} else {
204+
response->setData(ArgConverter::ConvertToString(data));
205+
}
206+
207+
response->setHasTextContent(hasTextContentBool);
208+
}
209+
} catch (NativeScriptException& e) {
210+
e.ReThrowToV8();
211+
} catch (std::exception e) {
212+
std::stringstream ss;
213+
ss << "Error: c exception: " << e.what() << std::endl;
214+
NativeScriptException nsEx(ss.str());
215+
nsEx.ReThrowToV8();
216+
} catch (...) {
217+
NativeScriptException nsEx(std::string("Error: c exception!"));
218+
nsEx.ReThrowToV8();
219+
}
220+
}
221+
222+
void NetworkDomainCallbackHandlers::LoadingFinishedCallback(const v8::FunctionCallbackInfo<v8::Value>& args) {
223+
try {
224+
auto networkAgentInstance = V8NetworkAgentImpl::Instance;
225+
226+
if (!networkAgentInstance) {
227+
return;
228+
}
229+
230+
if (args.Length() != 0 && !args[0]->IsObject()) {
231+
return;
232+
}
233+
234+
auto isolate = args.GetIsolate();
235+
236+
v8::HandleScope scope(isolate);
237+
238+
auto context = isolate->GetCurrentContext();
239+
240+
v8::Local<v8::Object> argsObj = args[0]->ToObject();
241+
242+
if (!argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "requestId")).FromMaybe(false) ||
243+
!argsObj->Has(context, ArgConverter::ConvertToV8String(isolate, "timestamp")).FromMaybe(false)) {
244+
throw NativeScriptException(
245+
"Not all parameters are present in the object argument in the call to LoadingFinished! Required params: 'requestId', `timeStamp`");
246+
}
247+
248+
auto requestId = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "requestId")).ToLocalChecked()->ToString();
249+
auto timeStamp = argsObj->Get(context, ArgConverter::ConvertToV8String(isolate, "timestamp")).ToLocalChecked()->ToNumber()->IntegerValue();
250+
251+
networkAgentInstance->m_frontend.loadingFinished(ArgConverter::ConvertToString(requestId).c_str(), timeStamp);
252+
} catch (NativeScriptException& e) {
253+
e.ReThrowToV8();
254+
} catch (std::exception e) {
255+
std::stringstream ss;
256+
ss << "Error: c exception: " << e.what() << std::endl;
257+
NativeScriptException nsEx(ss.str());
258+
nsEx.ReThrowToV8();
259+
} catch (...) {
260+
NativeScriptException nsEx(std::string("Error: c exception!"));
261+
nsEx.ReThrowToV8();
262+
}
263+
}
264+
265+
const char* NetworkDomainCallbackHandlers::FrameId = "NSFrameIdentifier";
266+
const char* NetworkDomainCallbackHandlers::LoaderId = "NSLoaderIdentifier";

0 commit comments

Comments
 (0)