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) 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::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) ) {} 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual v8::Handle<v8::FunctionTemplate> GetNativeFunctionTemplate( 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) v8::Isolate* isolate, 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) v8::Handle<v8::String> name) OVERRIDE { 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (name->Equals(v8::String::NewFromUtf8(isolate, "ClearCache"))) { 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return v8::FunctionTemplate::New(isolate, ClearCache); 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else if (name->Equals(v8::String::NewFromUtf8( 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) isolate, "ClearHostResolverCache"))) { 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return v8::FunctionTemplate::New(isolate, ClearHostResolverCache); 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else if (name->Equals( 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) v8::String::NewFromUtf8(isolate, "ClearPredictorCache"))) { 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return v8::FunctionTemplate::New(isolate, ClearPredictorCache); 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else if (name->Equals( 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) v8::String::NewFromUtf8(isolate, "CloseConnections"))) { 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return v8::FunctionTemplate::New(isolate, CloseConnections); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return v8::Handle<v8::FunctionTemplate>(); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static void ClearCache(const v8::FunctionCallbackInfo<v8::Value>& args) { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int rv; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderThread::Get()->Send(new ChromeViewHostMsg_ClearCache(&rv)); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebCache::clear(); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static void ClearHostResolverCache( 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const v8::FunctionCallbackInfo<v8::Value>& args) { 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int rv; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderThread::Get()->Send( 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new ChromeViewHostMsg_ClearHostResolverCache(&rv)); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static void ClearPredictorCache( 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const v8::FunctionCallbackInfo<v8::Value>& args) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int rv; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderThread::Get()->Send( 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new ChromeViewHostMsg_ClearPredictorCache(&rv)); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static void CloseConnections( 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const v8::FunctionCallbackInfo<v8::Value>& args) { 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderThread::Get()->Send( 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new ChromeViewHostMsg_CloseCurrentConnections()); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)v8::Extension* NetBenchmarkingExtension::Get() { 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new NetBenchmarkingWrapper(); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions_v8 97