Home | History | Annotate | Download | only in renderer
      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