12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/renderer/net_benchmarking_extension.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/benchmarking_messages.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/renderer/render_thread.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebCache.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "v8/include/v8.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebCache; 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kNetBenchmarkingExtensionName[] = "v8/NetBenchmarking"; 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions_v8 { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NetBenchmarkingWrapper : public v8::Extension { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetBenchmarkingWrapper() : 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) v8::Extension(kNetBenchmarkingExtensionName, 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "if (typeof(chrome) == 'undefined') {" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " chrome = {};" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "};" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "if (typeof(chrome.benchmarking) == 'undefined') {" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " chrome.benchmarking = {};" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "};" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chrome.benchmarking.clearCache = function() {" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " native function ClearCache();" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ClearCache();" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "};" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chrome.benchmarking.clearHostResolverCache = function() {" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " native function ClearHostResolverCache();" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ClearHostResolverCache();" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "};" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chrome.benchmarking.clearPredictorCache = function() {" 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " native function ClearPredictorCache();" 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " ClearPredictorCache();" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "};" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chrome.benchmarking.closeConnections = function() {" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " native function CloseConnections();" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " CloseConnections();" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "};" 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "chrome.benchmarking.enableSpdy = function(name) {" 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " native function EnableSpdy();" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " EnableSpdy(name);" 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "};" 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ) {} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) v8::Handle<v8::String> name) OVERRIDE { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (name->Equals(v8::String::New("ClearCache"))) { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return v8::FunctionTemplate::New(ClearCache); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (name->Equals(v8::String::New("ClearHostResolverCache"))) { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return v8::FunctionTemplate::New(ClearHostResolverCache); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (name->Equals(v8::String::New("ClearPredictorCache"))) { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return v8::FunctionTemplate::New(ClearPredictorCache); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (name->Equals(v8::String::New("EnableSpdy"))) { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return v8::FunctionTemplate::New(EnableSpdy); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (name->Equals(v8::String::New("CloseConnections"))) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return v8::FunctionTemplate::New(CloseConnections); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return v8::Handle<v8::FunctionTemplate>(); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static void ClearCache(const v8::FunctionCallbackInfo<v8::Value>& args) { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int rv; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderThread::Get()->Send(new ChromeViewHostMsg_ClearCache(&rv)); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebCache::clear(); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static void ClearHostResolverCache( 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const v8::FunctionCallbackInfo<v8::Value>& args) { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int rv; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderThread::Get()->Send( 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new ChromeViewHostMsg_ClearHostResolverCache(&rv)); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static void ClearPredictorCache( 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const v8::FunctionCallbackInfo<v8::Value>& args) { 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int rv; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderThread::Get()->Send( 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new ChromeViewHostMsg_ClearPredictorCache(&rv)); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static void CloseConnections( 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const v8::FunctionCallbackInfo<v8::Value>& args) { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderThread::Get()->Send( 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new ChromeViewHostMsg_CloseCurrentConnections()); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static void EnableSpdy(const v8::FunctionCallbackInfo<v8::Value>& args) { 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!args.Length() || !args[0]->IsBoolean()) 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderThread::Get()->Send(new ChromeViewHostMsg_EnableSpdy( 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) args[0]->BooleanValue())); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)v8::Extension* NetBenchmarkingExtension::Get() { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new NetBenchmarkingWrapper(); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions_v8 107