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 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