OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/shell/webkit_test_runner.h" | 5 #include "content/shell/webkit_test_runner.h" |
6 | 6 |
7 #include "base/md5.h" | 7 #include "base/md5.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/message_loop.h" |
9 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
| 11 #include "base/time.h" |
10 #include "content/public/renderer/render_view.h" | 12 #include "content/public/renderer/render_view.h" |
11 #include "content/shell/shell_messages.h" | 13 #include "content/shell/shell_messages.h" |
| 14 #include "content/shell/shell_render_process_observer.h" |
12 #include "skia/ext/platform_canvas.h" | 15 #include "skia/ext/platform_canvas.h" |
13 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCString.h
" | 16 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCString.h
" |
| 17 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebKitPlatfo
rmSupport.h" |
14 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" | 18 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" |
15 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h" | 19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h" |
16 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" | 20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" |
| 21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h" |
17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" | 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" |
18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" | 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" |
19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebTestingSupport.h" | 25 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" |
21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 26 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
| 27 #include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/Web
Task.h" |
22 #include "webkit/glue/webkit_glue.h" | 28 #include "webkit/glue/webkit_glue.h" |
23 | 29 |
| 30 using WebKit::WebContextMenuData; |
| 31 using WebKit::WebElement; |
24 using WebKit::WebFrame; | 32 using WebKit::WebFrame; |
25 using WebKit::WebElement; | 33 using WebKit::WebGamepads; |
26 using WebKit::WebRect; | 34 using WebKit::WebRect; |
27 using WebKit::WebSize; | 35 using WebKit::WebSize; |
28 using WebKit::WebTestingSupport; | 36 using WebKit::WebString; |
| 37 using WebKit::WebVector; |
29 using WebKit::WebView; | 38 using WebKit::WebView; |
| 39 using WebTestRunner::WebTask; |
30 | 40 |
31 namespace content { | 41 namespace content { |
32 | 42 |
33 namespace { | 43 namespace { |
34 | 44 |
| 45 void InvokeTaskHelper(void* context) { |
| 46 WebTask* task = reinterpret_cast<WebTask*>(context); |
| 47 task->run(); |
| 48 delete task; |
| 49 } |
| 50 |
35 std::string DumpDocumentText(WebFrame* frame) { | 51 std::string DumpDocumentText(WebFrame* frame) { |
36 // We use the document element's text instead of the body text here because | 52 // We use the document element's text instead of the body text here because |
37 // not all documents have a body, such as XML documents. | 53 // not all documents have a body, such as XML documents. |
38 WebElement documentElement = frame->document().documentElement(); | 54 WebElement documentElement = frame->document().documentElement(); |
39 if (documentElement.isNull()) | 55 if (documentElement.isNull()) |
40 return std::string(); | 56 return std::string(); |
41 return documentElement.innerText().utf8(); | 57 return documentElement.innerText().utf8(); |
42 } | 58 } |
43 | 59 |
44 std::string DumpDocumentPrintedText(WebFrame* frame) { | 60 std::string DumpDocumentPrintedText(WebFrame* frame) { |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 #if !defined(OS_MACOSX) | 147 #if !defined(OS_MACOSX) |
132 // Only the expected PNGs for Mac have a valid alpha channel. | 148 // Only the expected PNGs for Mac have a valid alpha channel. |
133 MakeBitmapOpaque(snapshot); | 149 MakeBitmapOpaque(snapshot); |
134 #endif | 150 #endif |
135 | 151 |
136 } | 152 } |
137 | 153 |
138 } // namespace | 154 } // namespace |
139 | 155 |
140 WebKitTestRunner::WebKitTestRunner(RenderView* render_view) | 156 WebKitTestRunner::WebKitTestRunner(RenderView* render_view) |
141 : RenderViewObserver(render_view) { | 157 : RenderViewObserver(render_view), |
| 158 is_main_window_(false) { |
142 } | 159 } |
143 | 160 |
144 WebKitTestRunner::~WebKitTestRunner() { | 161 WebKitTestRunner::~WebKitTestRunner() { |
| 162 if (is_main_window_) |
| 163 ShellRenderProcessObserver::GetInstance()->SetMainWindow(NULL, this); |
145 } | 164 } |
146 | 165 |
| 166 // WebTestDelegate ----------------------------------------------------------- |
| 167 |
| 168 void WebKitTestRunner::clearContextMenuData() { |
| 169 last_context_menu_data_.reset(); |
| 170 } |
| 171 |
| 172 WebContextMenuData* WebKitTestRunner::lastContextMenuData() const { |
| 173 return last_context_menu_data_.get(); |
| 174 } |
| 175 |
| 176 void WebKitTestRunner::clearEditCommand() { |
| 177 render_view()->ClearEditCommands(); |
| 178 } |
| 179 |
| 180 void WebKitTestRunner::setEditCommand(const std::string& name, |
| 181 const std::string& value) { |
| 182 render_view()->SetEditCommandForNextKeyEvent(name, value); |
| 183 } |
| 184 |
| 185 void WebKitTestRunner::fillSpellingSuggestionList( |
| 186 const WebString& word, WebVector<WebString>* suggestions) { |
| 187 if (word == WebString::fromUTF8("wellcome")) { |
| 188 WebVector<WebString> result(suggestions->size() + 1); |
| 189 for (size_t i = 0; i < suggestions->size(); ++i) |
| 190 result[i] = (*suggestions)[i]; |
| 191 result[suggestions->size()] = WebString::fromUTF8("welcome"); |
| 192 suggestions->swap(result); |
| 193 } |
| 194 } |
| 195 |
| 196 void WebKitTestRunner::setGamepadData(const WebGamepads& gamepads) { |
| 197 Send(new ShellViewHostMsg_NotImplemented( |
| 198 routing_id(), "WebTestDelegate", "setGamepadData")); |
| 199 } |
| 200 |
| 201 void WebKitTestRunner::printMessage(const std::string& message) { |
| 202 Send(new ShellViewHostMsg_PrintMessage(routing_id(), message)); |
| 203 } |
| 204 |
| 205 void WebKitTestRunner::postTask(WebTask* task) { |
| 206 WebKit::webKitPlatformSupport()->callOnMainThread(InvokeTaskHelper, task); |
| 207 } |
| 208 |
| 209 void WebKitTestRunner::postDelayedTask(WebTask* task, long long ms) { |
| 210 MessageLoop::current()->PostDelayedTask( |
| 211 FROM_HERE, |
| 212 base::Bind(&WebTask::run, base::Owned(task)), |
| 213 base::TimeDelta::FromMilliseconds(ms)); |
| 214 } |
| 215 |
| 216 WebString WebKitTestRunner::registerIsolatedFileSystem( |
| 217 const WebKit::WebVector<WebKit::WebString>& absolute_filenames) { |
| 218 Send(new ShellViewHostMsg_NotImplemented( |
| 219 routing_id(), "WebTestDelegate", "registerIsolatedFileSystem")); |
| 220 return WebString(); |
| 221 } |
| 222 |
| 223 long long WebKitTestRunner::getCurrentTimeInMillisecond() { |
| 224 return base::TimeTicks::Now().ToInternalValue() / |
| 225 base::Time::kMicrosecondsPerMillisecond; |
| 226 } |
| 227 |
| 228 WebString WebKitTestRunner::getAbsoluteWebStringFromUTF8Path( |
| 229 const std::string& utf8_path) { |
| 230 Send(new ShellViewHostMsg_NotImplemented( |
| 231 routing_id(), "WebTestDelegate", "getAbsoluteWebStringFromUTF8Path")); |
| 232 return WebString(); |
| 233 } |
| 234 |
| 235 // RenderViewObserver -------------------------------------------------------- |
| 236 |
147 void WebKitTestRunner::DidClearWindowObject(WebFrame* frame) { | 237 void WebKitTestRunner::DidClearWindowObject(WebFrame* frame) { |
148 WebTestingSupport::injectInternalsObject(frame); | 238 ShellRenderProcessObserver::GetInstance()->BindTestRunnersToWindow(frame); |
149 } | 239 } |
150 | 240 |
151 void WebKitTestRunner::DidFinishLoad(WebFrame* frame) { | 241 void WebKitTestRunner::DidFinishLoad(WebFrame* frame) { |
152 if (!frame->parent()) | 242 if (!frame->parent()) |
153 Send(new ShellViewHostMsg_DidFinishLoad(routing_id())); | 243 Send(new ShellViewHostMsg_DidFinishLoad(routing_id())); |
154 } | 244 } |
155 | 245 |
| 246 void WebKitTestRunner::DidRequestShowContextMenu( |
| 247 WebFrame* frame, |
| 248 const WebContextMenuData& data) { |
| 249 last_context_menu_data_.reset(new WebContextMenuData(data)); |
| 250 } |
| 251 |
156 bool WebKitTestRunner::OnMessageReceived(const IPC::Message& message) { | 252 bool WebKitTestRunner::OnMessageReceived(const IPC::Message& message) { |
157 bool handled = true; | 253 bool handled = true; |
158 IPC_BEGIN_MESSAGE_MAP(WebKitTestRunner, message) | 254 IPC_BEGIN_MESSAGE_MAP(WebKitTestRunner, message) |
159 IPC_MESSAGE_HANDLER(ShellViewMsg_CaptureTextDump, OnCaptureTextDump) | 255 IPC_MESSAGE_HANDLER(ShellViewMsg_CaptureTextDump, OnCaptureTextDump) |
160 IPC_MESSAGE_HANDLER(ShellViewMsg_CaptureImageDump, OnCaptureImageDump) | 256 IPC_MESSAGE_HANDLER(ShellViewMsg_CaptureImageDump, OnCaptureImageDump) |
| 257 IPC_MESSAGE_HANDLER(ShellViewMsg_SetIsMainWindow, OnSetIsMainWindow) |
161 IPC_MESSAGE_UNHANDLED(handled = false) | 258 IPC_MESSAGE_UNHANDLED(handled = false) |
162 IPC_END_MESSAGE_MAP() | 259 IPC_END_MESSAGE_MAP() |
163 | 260 |
164 return handled; | 261 return handled; |
165 } | 262 } |
166 | 263 |
| 264 // Private methods ----------------------------------------------------------- |
| 265 |
167 void WebKitTestRunner::OnCaptureTextDump(bool as_text, | 266 void WebKitTestRunner::OnCaptureTextDump(bool as_text, |
168 bool printing, | 267 bool printing, |
169 bool recursive) { | 268 bool recursive) { |
170 WebFrame* frame = render_view()->GetWebView()->mainFrame(); | 269 WebFrame* frame = render_view()->GetWebView()->mainFrame(); |
171 std::string dump; | 270 std::string dump; |
172 if (as_text) { | 271 if (as_text) { |
173 dump = DumpFramesAsText(frame, printing, recursive); | 272 dump = DumpFramesAsText(frame, printing, recursive); |
174 } else { | 273 } else { |
175 WebFrame::RenderAsTextControls render_text_behavior = | 274 WebFrame::RenderAsTextControls render_text_behavior = |
176 WebFrame::RenderAsTextNormal; | 275 WebFrame::RenderAsTextNormal; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 if (actual_pixel_hash == expected_pixel_hash) { | 309 if (actual_pixel_hash == expected_pixel_hash) { |
211 SkBitmap empty_image; | 310 SkBitmap empty_image; |
212 Send(new ShellViewHostMsg_ImageDump( | 311 Send(new ShellViewHostMsg_ImageDump( |
213 routing_id(), actual_pixel_hash, empty_image)); | 312 routing_id(), actual_pixel_hash, empty_image)); |
214 return; | 313 return; |
215 } | 314 } |
216 Send(new ShellViewHostMsg_ImageDump( | 315 Send(new ShellViewHostMsg_ImageDump( |
217 routing_id(), actual_pixel_hash, snapshot)); | 316 routing_id(), actual_pixel_hash, snapshot)); |
218 } | 317 } |
219 | 318 |
| 319 void WebKitTestRunner::OnSetIsMainWindow() { |
| 320 is_main_window_ = true; |
| 321 ShellRenderProcessObserver::GetInstance()->SetMainWindow(render_view(), this); |
| 322 } |
| 323 |
220 } // namespace content | 324 } // namespace content |
OLD | NEW |