1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/renderer/net_benchmarking_extension.h" 6 7 #include "chrome/common/benchmarking_messages.h" 8 #include "content/public/renderer/render_thread.h" 9 #include "third_party/WebKit/public/web/WebCache.h" 10 #include "v8/include/v8.h" 11 12 using blink::WebCache; 13 14 const char kNetBenchmarkingExtensionName[] = "v8/NetBenchmarking"; 15 16 namespace extensions_v8 { 17 18 class NetBenchmarkingWrapper : public v8::Extension { 19 public: 20 NetBenchmarkingWrapper() : 21 v8::Extension(kNetBenchmarkingExtensionName, 22 "if (typeof(chrome) == 'undefined') {" 23 " chrome = {};" 24 "};" 25 "if (typeof(chrome.benchmarking) == 'undefined') {" 26 " chrome.benchmarking = {};" 27 "};" 28 "chrome.benchmarking.clearCache = function() {" 29 " native function ClearCache();" 30 " ClearCache();" 31 "};" 32 "chrome.benchmarking.clearHostResolverCache = function() {" 33 " native function ClearHostResolverCache();" 34 " ClearHostResolverCache();" 35 "};" 36 "chrome.benchmarking.clearPredictorCache = function() {" 37 " native function ClearPredictorCache();" 38 " ClearPredictorCache();" 39 "};" 40 "chrome.benchmarking.closeConnections = function() {" 41 " native function CloseConnections();" 42 " CloseConnections();" 43 "};" 44 ) {} 45 46 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunctionTemplate( 47 v8::Isolate* isolate, 48 v8::Handle<v8::String> name) OVERRIDE { 49 if (name->Equals(v8::String::NewFromUtf8(isolate, "ClearCache"))) { 50 return v8::FunctionTemplate::New(isolate, ClearCache); 51 } else if (name->Equals(v8::String::NewFromUtf8( 52 isolate, "ClearHostResolverCache"))) { 53 return v8::FunctionTemplate::New(isolate, ClearHostResolverCache); 54 } else if (name->Equals( 55 v8::String::NewFromUtf8(isolate, "ClearPredictorCache"))) { 56 return v8::FunctionTemplate::New(isolate, ClearPredictorCache); 57 } else if (name->Equals( 58 v8::String::NewFromUtf8(isolate, "CloseConnections"))) { 59 return v8::FunctionTemplate::New(isolate, CloseConnections); 60 } 61 62 return v8::Handle<v8::FunctionTemplate>(); 63 } 64 65 static void ClearCache(const v8::FunctionCallbackInfo<v8::Value>& args) { 66 int rv; 67 content::RenderThread::Get()->Send(new ChromeViewHostMsg_ClearCache(&rv)); 68 WebCache::clear(); 69 } 70 71 static void ClearHostResolverCache( 72 const v8::FunctionCallbackInfo<v8::Value>& args) { 73 int rv; 74 content::RenderThread::Get()->Send( 75 new ChromeViewHostMsg_ClearHostResolverCache(&rv)); 76 } 77 78 static void ClearPredictorCache( 79 const v8::FunctionCallbackInfo<v8::Value>& args) { 80 int rv; 81 content::RenderThread::Get()->Send( 82 new ChromeViewHostMsg_ClearPredictorCache(&rv)); 83 } 84 85 static void CloseConnections( 86 const v8::FunctionCallbackInfo<v8::Value>& args) { 87 content::RenderThread::Get()->Send( 88 new ChromeViewHostMsg_CloseCurrentConnections()); 89 } 90 }; 91 92 v8::Extension* NetBenchmarkingExtension::Get() { 93 return new NetBenchmarkingWrapper(); 94 } 95 96 } // namespace extensions_v8 97