webkit_test_runner.h revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view_observer.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/renderer/render_view_observer_tracker.h" 14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_test_configuration.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebPreferences.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "v8/include/v8.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkCanvas; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace WebKit { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WebMediaPlayer; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WebMediaPlayerClient; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct WebRect; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace WebTestRunner { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebTestProxyBase; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace webkit_glue { 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class TestMediaStreamClient; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is the renderer side of the webkit test runner. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebKitTestRunner : public RenderViewObserver, 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public RenderViewObserverTracker<WebKitTestRunner>, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public WebTestRunner::WebTestDelegate { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit WebKitTestRunner(RenderView* render_view); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebKitTestRunner(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewObserver implementation. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Navigate(const GURL& url) OVERRIDE; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_new_navigation) OVERRIDE; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidFailProvisionalLoad( 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebFrame* frame, const WebKit::WebURLError& error) OVERRIDE; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebTestDelegate implementation. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void clearEditCommand(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void setEditCommand(const std::string& name, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void setGamepadData(const WebKit::WebGamepads& gamepads); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void printMessage(const std::string& message); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void postTask(::WebTestRunner::WebTask* task); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void postDelayedTask(::WebTestRunner::WebTask* task, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long long ms); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebKit::WebString registerIsolatedFileSystem( 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebVector<WebKit::WebString>& absolute_filenames); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual long long getCurrentTimeInMillisecond(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path( 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& utf8_path); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebURL localFileToDataURL(const WebKit::WebURL& file_url); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebURL rewriteLayoutTestsURL(const std::string& utf8_url); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ::WebTestRunner::WebPreferences* preferences(); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void applyPreferences(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual std::string makeURLErrorDescription(const WebKit::WebURLError& error); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setClientWindowRect(const WebKit::WebRect& rect); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void showDevTools(); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void closeDevTools(); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void evaluateInWebInspector(long call_id, const std::string& script); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void clearAllDatabases(); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setDatabaseQuota(int quota); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setDeviceScaleFactor(float factor); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setFocus(WebTestRunner::WebTestProxyBase* proxy, bool focus); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setAcceptAllCookies(bool accept); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual std::string pathToLocalResource(const std::string& resource); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setLocale(const std::string& locale); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void testFinished(); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void testTimedOut(); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool isBeingDebugged(); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int layoutTestTimeout(); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void closeRemainingWindows(); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int navigationEntryCount(); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void goToOffset(int offset); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void reload(); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void loadURLForFrame(const WebKit::WebURL& url, 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& frame_name); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool allowExternalPages(); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void captureHistoryForWindow( 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebTestRunner::WebTestProxyBase* proxy, 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebVector<WebKit::WebHistoryItem>* history, 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t* currentEntryIndex); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual WebKit::WebMediaPlayer* createWebMediaPlayer( 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WebFrame* frame, 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const WebKit::WebURL& url, 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebKit::WebMediaPlayerClient* client); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Reset(); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_proxy(::WebTestRunner::WebTestProxyBase* proxy) { proxy_ = proxy; } 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::WebTestRunner::WebTestProxyBase* proxy() const { return proxy_; } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers. 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetTestConfiguration(const ShellTestConfiguration& params); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSessionHistory( 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<int>& routing_ids, 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<std::vector<std::string> >& session_histories, 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<unsigned>& current_entry_indexes); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnReset(); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnNotifyDone(); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // After finishing the test, retrieves the audio, text, and pixel dumps from 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the TestRunner library and sends them to the browser process. 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CaptureDump(); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::WebTestRunner::WebTestProxyBase* proxy_; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderView* focused_view_; 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::WebTestRunner::WebPreferences prefs_; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellTestConfiguration test_config_; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<int> routing_ids_; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::vector<std::string> > session_histories_; 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<unsigned> current_entry_indexes_; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_window_; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool focus_on_next_commit_; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<webkit_glue::TestMediaStreamClient> test_media_stream_client_; 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_ 147