Index: chrome/utility/chrome_content_utility_client.cc |
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc |
index 25a744455b2a2a8978f1b0dc63202c2b09140588..755a86539c9e99018eabf528b76864fb659f5631 100644 |
--- a/chrome/utility/chrome_content_utility_client.cc |
+++ b/chrome/utility/chrome_content_utility_client.cc |
@@ -15,10 +15,15 @@ |
#include "chrome/utility/utility_message_handler.h" |
#include "content/public/child/image_decoder_utils.h" |
#include "content/public/common/content_switches.h" |
+#include "content/public/common/process_resource_service.mojom.h" |
+#include "content/public/common/service_registry.h" |
#include "content/public/utility/utility_thread.h" |
#include "courgette/courgette.h" |
#include "courgette/third_party/bsdiff.h" |
#include "ipc/ipc_channel.h" |
+#include "net/proxy/proxy_resolver.mojom.h" |
+#include "net/proxy/proxy_resolver_mojo_host.h" |
+#include "net/proxy/proxy_resolver_v8.h" |
#include "skia/ext/image_operations.h" |
#include "third_party/skia/include/core/SkBitmap.h" |
#include "third_party/zlib/google/zip.h" |
@@ -160,6 +165,46 @@ bool ChromeContentUtilityClient::OnMessageReceived( |
return handled; |
} |
+static bool g_v8_proxy_created = false; |
+ |
+class ProcessResourceServiceImpl |
+ : public mojo::InterfaceImpl<content::ProcessResourceService> { |
+ public: |
+ ProcessResourceServiceImpl() {} |
+ ~ProcessResourceServiceImpl() override {} |
+ |
+ private: |
+ void GetResourceData( |
+ const mojo::Callback<void(content::ResourceDataPtr)>& callback) override { |
+ content::ResourceDataPtr data = content::ResourceData::New(); |
+ data->reports_v8_stats = g_v8_proxy_created; |
+ if (g_v8_proxy_created) { |
+ data->v8_memory_allocated = net::ProxyResolverV8::GetTotalHeapSize(); |
+ data->v8_memory_used = net::ProxyResolverV8::GetUsedHeapSize(); |
+ } |
+ callback.Run(data.Pass()); |
+ } |
+}; |
+ |
+static void CreateProcessResourceService( |
+ mojo::InterfaceRequest<content::ProcessResourceService> request) { |
+ mojo::BindToRequest(new ProcessResourceServiceImpl, &request); |
+} |
+ |
+static void CreateProxyResolverFactory( |
+ mojo::InterfaceRequest<net::proxy::ResolverFactory> request) { |
+ g_v8_proxy_created = true; |
+ mojo::BindToRequest(new net::ProxyResolverMojoFactory(nullptr), &request); |
+} |
+ |
+void ChromeContentUtilityClient::RegisterMojoServices( |
+ content::ServiceRegistry* registry) { |
+ registry->AddService<content::ProcessResourceService>(base::Bind( |
+ CreateProcessResourceService)); |
+ registry->AddService<net::proxy::ResolverFactory>(base::Bind( |
+ CreateProxyResolverFactory)); |
+} |
+ |
// static |
void ChromeContentUtilityClient::PreSandboxStartup() { |
#if defined(ENABLE_EXTENSIONS) |