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 WebKit::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 "chrome.benchmarking.enableSpdy = function(name) {" 45 " native function EnableSpdy();" 46 " EnableSpdy(name);" 47 "};" 48 ) {} 49 50 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( 51 v8::Handle<v8::String> name) OVERRIDE { 52 if (name->Equals(v8::String::New("ClearCache"))) { 53 return v8::FunctionTemplate::New(ClearCache); 54 } else if (name->Equals(v8::String::New("ClearHostResolverCache"))) { 55 return v8::FunctionTemplate::New(ClearHostResolverCache); 56 } else if (name->Equals(v8::String::New("ClearPredictorCache"))) { 57 return v8::FunctionTemplate::New(ClearPredictorCache); 58 } else if (name->Equals(v8::String::New("EnableSpdy"))) { 59 return v8::FunctionTemplate::New(EnableSpdy); 60 } else if (name->Equals(v8::String::New("CloseConnections"))) { 61 return v8::FunctionTemplate::New(CloseConnections); 62 } 63 64 return v8::Handle<v8::FunctionTemplate>(); 65 } 66 67 static void ClearCache(const v8::FunctionCallbackInfo<v8::Value>& args) { 68 int rv; 69 content::RenderThread::Get()->Send(new ChromeViewHostMsg_ClearCache(&rv)); 70 WebCache::clear(); 71 } 72 73 static void ClearHostResolverCache( 74 const v8::FunctionCallbackInfo<v8::Value>& args) { 75 int rv; 76 content::RenderThread::Get()->Send( 77 new ChromeViewHostMsg_ClearHostResolverCache(&rv)); 78 } 79 80 static void ClearPredictorCache( 81 const v8::FunctionCallbackInfo<v8::Value>& args) { 82 int rv; 83 content::RenderThread::Get()->Send( 84 new ChromeViewHostMsg_ClearPredictorCache(&rv)); 85 } 86 87 static void CloseConnections( 88 const v8::FunctionCallbackInfo<v8::Value>& args) { 89 content::RenderThread::Get()->Send( 90 new ChromeViewHostMsg_CloseCurrentConnections()); 91 } 92 93 static void EnableSpdy(const v8::FunctionCallbackInfo<v8::Value>& args) { 94 if (!args.Length() || !args[0]->IsBoolean()) 95 return; 96 97 content::RenderThread::Get()->Send(new ChromeViewHostMsg_EnableSpdy( 98 args[0]->BooleanValue())); 99 } 100 }; 101 102 v8::Extension* NetBenchmarkingExtension::Get() { 103 return new NetBenchmarkingWrapper(); 104 } 105 106 } // namespace extensions_v8 107