inspector: initial support for Network.loadNetworkResource · nodejs/node@85d6a28
11#include "network_agent.h"
2+#include <string>
23#include "debug_utils-inl.h"
4+#include "env-inl.h"
5+#include "inspector/network_resource_manager.h"
36#include "inspector/protocol_helper.h"
47#include "network_inspector.h"
8+#include "node_metadata.h"
59#include "util-inl.h"
10+#include "uv.h"
11+#include "v8-context.h"
612#include "v8.h"
713814namespace node {
@@ -202,9 +208,15 @@ std::unique_ptr<protocol::Network::Response> createResponseFromObject(
202208 .build();
203209}
204210205-NetworkAgent::NetworkAgent(NetworkInspector* inspector,
206- v8_inspector::V8Inspector* v8_inspector)
207- : inspector_(inspector), v8_inspector_(v8_inspector) {
211+NetworkAgent::NetworkAgent(
212+ NetworkInspector* inspector,
213+ v8_inspector::V8Inspector* v8_inspector,
214+ Environment* env,
215+ std::shared_ptr<NetworkResourceManager> network_resource_manager)
216+ : inspector_(inspector),
217+v8_inspector_(v8_inspector),
218+ env_(env),
219+ network_resource_manager_(std::move(network_resource_manager)) {
208220 event_notifier_map_["requestWillBeSent"] = &NetworkAgent::requestWillBeSent;
209221 event_notifier_map_["responseReceived"] = &NetworkAgent::responseReceived;
210222 event_notifier_map_["loadingFailed"] = &NetworkAgent::loadingFailed;
@@ -329,10 +341,38 @@ protocol::DispatchResponse NetworkAgent::streamResourceContent(
329341// If the request is finished, remove the entry.
330342 requests_.erase(in_requestId);
331343 }
332-333344return protocol::DispatchResponse::Success();
334345}
335346347+protocol::DispatchResponse NetworkAgent::loadNetworkResource(
348+const protocol::String& in_url,
349+ std::unique_ptr<protocol::Network::LoadNetworkResourcePageResult>*
350+ out_resource) {
351+if (!env_->options()->experimental_inspector_network_resource) {
352+return protocol::DispatchResponse::ServerError(
353+"Network resource loading is not enabled. This feature is "
354+"experimental and requires --experimental-inspector-network-resource "
355+"flag to be set.");
356+ }
357+CHECK_NOT_NULL(network_resource_manager_);
358+ std::string data = network_resource_manager_->Get(in_url);
359+bool found = !data.empty();
360+if (found) {
361+auto result = protocol::Network::LoadNetworkResourcePageResult::create()
362+ .setSuccess(true)
363+ .setStream(in_url)
364+ .build();
365+ *out_resource = std::move(result);
366+return protocol::DispatchResponse::Success();
367+ } else {
368+auto result = protocol::Network::LoadNetworkResourcePageResult::create()
369+ .setSuccess(false)
370+ .build();
371+ *out_resource = std::move(result);
372+return protocol::DispatchResponse::Success();
373+ }
374+}
375+336376void NetworkAgent::requestWillBeSent(v8::Local<v8::Context> context,
337377 v8::Local<v8::Object> params) {
338378 protocol::String request_id;