blob: eaec99a45b437bcfd2ea2763b4c6b98bdf2a4b91 [file] [log] [blame]
[email protected]43535512013-02-20 20:41:411// 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/Source/WebKit/chromium/public/WebCache.h"
10#include "v8/include/v8.h"
11
12using WebKit::WebCache;
13
14const char kNetBenchmarkingExtensionName[] = "v8/NetBenchmarking";
15
16namespace extensions_v8 {
17
18class 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(
[email protected]aa3174b2013-03-15 09:12:4851 v8::Handle<v8::String> name) OVERRIDE {
[email protected]43535512013-02-20 20:41:4152 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 v8::Handle<v8::Value> ClearCache(const v8::Arguments& args) {
68 int rv;
69 content::RenderThread::Get()->Send(new ChromeViewHostMsg_ClearCache(&rv));
70 WebCache::clear();
71 return v8::Undefined();
72 }
73
74 static v8::Handle<v8::Value> ClearHostResolverCache(
75 const v8::Arguments& args) {
76 int rv;
77 content::RenderThread::Get()->Send(
78 new ChromeViewHostMsg_ClearHostResolverCache(&rv));
79 return v8::Undefined();
80 }
81
82 static v8::Handle<v8::Value> ClearPredictorCache(
83 const v8::Arguments& args) {
84 int rv;
85 content::RenderThread::Get()->Send(
86 new ChromeViewHostMsg_ClearPredictorCache(&rv));
87 return v8::Undefined();
88 }
89
90 static v8::Handle<v8::Value> CloseConnections(const v8::Arguments& args) {
91 content::RenderThread::Get()->Send(
92 new ChromeViewHostMsg_CloseCurrentConnections());
93 return v8::Undefined();
94 }
95
96 static v8::Handle<v8::Value> EnableSpdy(const v8::Arguments& args) {
97 if (!args.Length() || !args[0]->IsBoolean())
98 return v8::Undefined();
99
100 content::RenderThread::Get()->Send(new ChromeViewHostMsg_EnableSpdy(
101 args[0]->BooleanValue()));
102 return v8::Undefined();
103 }
104};
105
106v8::Extension* NetBenchmarkingExtension::Get() {
107 return new NetBenchmarkingWrapper();
108}
109
110} // namespace extensions_v8