[content shell] implement testRunner.overridePreference
[chromium-blink-merge.git] / content / shell / webkit_test_runner_bindings.cc
blob7bfa092dc943e96beb92acc6b2bfdefdeacaeb1d
1 // Copyright (c) 2012 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.
5 #include "content/shell/webkit_test_runner_bindings.h"
7 #include "base/logging.h"
8 #include "base/string_piece.h"
9 #include "content/public/renderer/render_view.h"
10 #include "content/shell/shell_render_process_observer.h"
11 #include "content/shell/webkit_test_runner.h"
12 #include "grit/shell_resources.h"
13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebWorkerInfo.h"
14 #include "ui/base/resource/resource_bundle.h"
16 using WebKit::WebWorkerInfo;
18 namespace content {
20 namespace {
22 bool g_global_flag = false;
24 base::StringPiece GetStringResource(int resource_id) {
25 return ResourceBundle::GetSharedInstance().GetRawDataResource(
26 resource_id);
29 v8::Handle<v8::Value> Display(const v8::Arguments& args) {
30 WebKitTestRunner* runner =
31 ShellRenderProcessObserver::GetInstance()->main_test_runner();
32 if (!runner)
33 return v8::Undefined();
35 runner->Display();
36 return v8::Undefined();
39 v8::Handle<v8::Value> NotifyDone(const v8::Arguments& args) {
40 WebKitTestRunner* runner =
41 ShellRenderProcessObserver::GetInstance()->main_test_runner();
42 if (!runner)
43 return v8::Undefined();
45 runner->NotifyDone();
46 return v8::Undefined();
49 v8::Handle<v8::Value> SetCanOpenWindows(const v8::Arguments& args) {
50 WebKitTestRunner* runner =
51 ShellRenderProcessObserver::GetInstance()->main_test_runner();
52 if (!runner)
53 return v8::Undefined();
55 runner->CanOpenWindows();
56 return v8::Undefined();
59 v8::Handle<v8::Value> SetDumpAsText(const v8::Arguments& args) {
60 WebKitTestRunner* runner =
61 ShellRenderProcessObserver::GetInstance()->main_test_runner();
62 if (!runner)
63 return v8::Undefined();
65 runner->DumpAsText();
66 return v8::Undefined();
69 v8::Handle<v8::Value> SetDumpChildFramesAsText(const v8::Arguments& args) {
70 WebKitTestRunner* runner =
71 ShellRenderProcessObserver::GetInstance()->main_test_runner();
72 if (!runner)
73 return v8::Undefined();
75 runner->DumpChildFramesAsText();
76 return v8::Undefined();
79 v8::Handle<v8::Value> SetPrinting(const v8::Arguments& args) {
80 WebKitTestRunner* runner =
81 ShellRenderProcessObserver::GetInstance()->main_test_runner();
82 if (!runner)
83 return v8::Undefined();
85 runner->SetPrinting();
86 return v8::Undefined();
89 v8::Handle<v8::Value> SetShouldStayOnPageAfterHandlingBeforeUnload(
90 const v8::Arguments& args) {
91 if (args.Length() != 1 || !args[0]->IsBoolean())
92 return v8::Undefined();
94 WebKitTestRunner* runner =
95 ShellRenderProcessObserver::GetInstance()->main_test_runner();
96 if (!runner)
97 return v8::Undefined();
99 runner->SetShouldStayOnPageAfterHandlingBeforeUnload(args[0]->BooleanValue());
100 return v8::Undefined();
103 v8::Handle<v8::Value> SetWaitUntilDone(const v8::Arguments& args) {
104 WebKitTestRunner* runner =
105 ShellRenderProcessObserver::GetInstance()->main_test_runner();
106 if (!runner)
107 return v8::Undefined();
109 runner->WaitUntilDone();
110 return v8::Undefined();
113 v8::Handle<v8::Value> SetXSSAuditorEnabled(
114 const v8::Arguments& args) {
115 if (args.Length() != 1 || !args[0]->IsBoolean())
116 return v8::Undefined();
118 WebKitTestRunner* runner =
119 ShellRenderProcessObserver::GetInstance()->main_test_runner();
120 if (!runner)
121 return v8::Undefined();
123 runner->SetXSSAuditorEnabled(args[0]->BooleanValue());
124 return v8::Undefined();
127 v8::Handle<v8::Value> ShowWebInspector(const v8::Arguments& args) {
128 WebKitTestRunner* runner =
129 ShellRenderProcessObserver::GetInstance()->main_test_runner();
130 if (!runner)
131 return v8::Undefined();
133 runner->ShowWebInspector();
134 return v8::Undefined();
137 v8::Handle<v8::Value> CloseWebInspector(const v8::Arguments& args) {
138 WebKitTestRunner* runner =
139 ShellRenderProcessObserver::GetInstance()->main_test_runner();
140 if (!runner)
141 return v8::Undefined();
143 runner->CloseWebInspector();
144 return v8::Undefined();
147 v8::Handle<v8::Value> EvaluateInWebInspector(const v8::Arguments& args) {
148 if (args.Length() != 2 || !args[0]->IsNumber() || !args[1]->IsString())
149 return v8::Undefined();
151 WebKitTestRunner* runner =
152 ShellRenderProcessObserver::GetInstance()->main_test_runner();
153 if (!runner)
154 return v8::Undefined();
156 runner->EvaluateInWebInspector(args[0]->Int32Value(),
157 *v8::String::AsciiValue(args[1]));
158 return v8::Undefined();
161 v8::Handle<v8::Value> ExecCommand(const v8::Arguments& args) {
162 // This method takes one, two, or three parameters, however, we only care
163 // about the first and third parameter which (if present) need to be strings.
164 // We ignore the second parameter (user interface) since this command
165 // emulates a manual action.
166 if (args.Length() == 0 || args.Length() > 3)
167 return v8::Undefined();
169 if (!args[0]->IsString() || (args.Length() == 3 && !args[2]->IsString()))
170 return v8::Undefined();
172 WebKitTestRunner* runner =
173 ShellRenderProcessObserver::GetInstance()->main_test_runner();
174 if (!runner)
175 return v8::Undefined();
177 std::string command(*v8::String::AsciiValue(args[0]));
178 std::string value;
179 if (args.Length() == 3)
180 value = *v8::String::AsciiValue(args[2]);
182 runner->ExecCommand(command, value);
183 return v8::Undefined();
186 v8::Handle<v8::Value> OverridePreference(const v8::Arguments& args) {
187 if (args.Length() != 2 || !args[0]->IsString())
188 return v8::Undefined();
190 WebKitTestRunner* runner =
191 ShellRenderProcessObserver::GetInstance()->main_test_runner();
192 if (!runner)
193 return v8::Undefined();
195 runner->OverridePreference(*v8::String::AsciiValue(args[0]), args[1]);
196 return v8::Undefined();
199 v8::Handle<v8::Value> GetGlobalFlag(const v8::Arguments& args) {
200 return v8::Boolean::New(g_global_flag);
203 v8::Handle<v8::Value> SetGlobalFlag(const v8::Arguments& args) {
204 if (args.Length() == 1 && args[0]->IsBoolean())
205 g_global_flag = args[0]->BooleanValue();
206 return v8::Undefined();
209 v8::Handle<v8::Value> GetWorkerThreadCount(const v8::Arguments& args) {
210 return v8::Integer::NewFromUnsigned(WebWorkerInfo::dedicatedWorkerCount());
213 v8::Handle<v8::Value> NotImplemented(const v8::Arguments& args) {
214 if (args.Length() != 2 || !args[0]->IsString() || !args[1]->IsString())
215 return v8::Undefined();
217 WebKitTestRunner* runner =
218 ShellRenderProcessObserver::GetInstance()->main_test_runner();
219 if (!runner)
220 return v8::Undefined();
222 runner->NotImplemented(*v8::String::AsciiValue(args[0]),
223 *v8::String::AsciiValue(args[1]));
224 return v8::Undefined();
227 } // namespace
229 WebKitTestRunnerBindings::WebKitTestRunnerBindings()
230 : v8::Extension("webkit_test_runner.js",
231 GetStringResource(
232 IDR_CONTENT_SHELL_WEBKIT_TEST_RUNNER_JS).data(),
233 0, // num dependencies.
234 NULL, // dependencies array.
235 GetStringResource(
236 IDR_CONTENT_SHELL_WEBKIT_TEST_RUNNER_JS).size()) {
239 WebKitTestRunnerBindings::~WebKitTestRunnerBindings() {
242 // static
243 void WebKitTestRunnerBindings::Reset() {
244 g_global_flag = false;
247 v8::Handle<v8::FunctionTemplate>
248 WebKitTestRunnerBindings::GetNativeFunction(v8::Handle<v8::String> name) {
249 if (name->Equals(v8::String::New("Display")))
250 return v8::FunctionTemplate::New(Display);
251 if (name->Equals(v8::String::New("NotifyDone")))
252 return v8::FunctionTemplate::New(NotifyDone);
253 if (name->Equals(v8::String::New("SetCanOpenWindows")))
254 return v8::FunctionTemplate::New(SetCanOpenWindows);
255 if (name->Equals(v8::String::New("SetDumpAsText")))
256 return v8::FunctionTemplate::New(SetDumpAsText);
257 if (name->Equals(v8::String::New("SetDumpChildFramesAsText")))
258 return v8::FunctionTemplate::New(SetDumpChildFramesAsText);
259 if (name->Equals(v8::String::New("SetPrinting")))
260 return v8::FunctionTemplate::New(SetPrinting);
261 if (name->Equals(v8::String::New(
262 "SetShouldStayOnPageAfterHandlingBeforeUnload"))) {
263 return v8::FunctionTemplate::New(
264 SetShouldStayOnPageAfterHandlingBeforeUnload);
266 if (name->Equals(v8::String::New("SetWaitUntilDone")))
267 return v8::FunctionTemplate::New(SetWaitUntilDone);
268 if (name->Equals(v8::String::New("SetXSSAuditorEnabled")))
269 return v8::FunctionTemplate::New(SetXSSAuditorEnabled);
270 if (name->Equals(v8::String::New("GetWorkerThreadCount")))
271 return v8::FunctionTemplate::New(GetWorkerThreadCount);
272 if (name->Equals(v8::String::New("ShowWebInspector")))
273 return v8::FunctionTemplate::New(ShowWebInspector);
274 if (name->Equals(v8::String::New("CloseWebInspector")))
275 return v8::FunctionTemplate::New(CloseWebInspector);
276 if (name->Equals(v8::String::New("EvaluateInWebInspector")))
277 return v8::FunctionTemplate::New(EvaluateInWebInspector);
278 if (name->Equals(v8::String::New("ExecCommand")))
279 return v8::FunctionTemplate::New(ExecCommand);
280 if (name->Equals(v8::String::New("OverridePreference")))
281 return v8::FunctionTemplate::New(OverridePreference);
282 if (name->Equals(v8::String::New("GetGlobalFlag")))
283 return v8::FunctionTemplate::New(GetGlobalFlag);
284 if (name->Equals(v8::String::New("SetGlobalFlag")))
285 return v8::FunctionTemplate::New(SetGlobalFlag);
286 if (name->Equals(v8::String::New("NotImplemented")))
287 return v8::FunctionTemplate::New(NotImplemented);
289 NOTREACHED();
290 return v8::FunctionTemplate::New();
293 } // namespace content