webkit_test_runner.h revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/page_state.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view_observer.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/renderer/render_view_observer_tracker.h" 15b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_test_configuration.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/testing/WebPreferences.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/testing/WebTestDelegate.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "v8/include/v8.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkCanvas; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace WebKit { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct WebRect; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace WebTestRunner { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebTestProxyBase; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is the renderer side of the webkit test runner. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebKitTestRunner : public RenderViewObserver, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public RenderViewObserverTracker<WebKitTestRunner>, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public WebTestRunner::WebTestDelegate { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit WebKitTestRunner(RenderView* render_view); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebKitTestRunner(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewObserver implementation. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Navigate(const GURL& url) OVERRIDE; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_new_navigation) OVERRIDE; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidFailProvisionalLoad( 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebFrame* frame, const WebKit::WebURLError& error) OVERRIDE; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebTestDelegate implementation. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void clearEditCommand(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void setEditCommand(const std::string& name, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void setGamepadData(const WebKit::WebGamepads& gamepads); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void printMessage(const std::string& message); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void postTask(::WebTestRunner::WebTask* task); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void postDelayedTask(::WebTestRunner::WebTask* task, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long long ms); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebKit::WebString registerIsolatedFileSystem( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebKit::WebVector<WebKit::WebString>& absolute_filenames); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual long long getCurrentTimeInMillisecond(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& utf8_path); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebURL localFileToDataURL(const WebKit::WebURL& file_url); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual WebKit::WebURL rewriteLayoutTestsURL(const std::string& utf8_url); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ::WebTestRunner::WebPreferences* preferences(); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void applyPreferences(); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual std::string makeURLErrorDescription(const WebKit::WebURLError& error); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setClientWindowRect(const WebKit::WebRect& rect); 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void enableAutoResizeMode(const WebKit::WebSize& min_size, 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const WebKit::WebSize& max_size); 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void disableAutoResizeMode(const WebKit::WebSize& new_size); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void showDevTools(); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void closeDevTools(); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void evaluateInWebInspector(long call_id, const std::string& script); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void clearAllDatabases(); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setDatabaseQuota(int quota); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setDeviceScaleFactor(float factor); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setFocus(WebTestRunner::WebTestProxyBase* proxy, bool focus); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setAcceptAllCookies(bool accept); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual std::string pathToLocalResource(const std::string& resource); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void setLocale(const std::string& locale); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void testFinished(); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void closeRemainingWindows(); 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void deleteAllCookies(); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int navigationEntryCount(); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void goToOffset(int offset); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void reload(); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void loadURLForFrame(const WebKit::WebURL& url, 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& frame_name); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool allowExternalPages(); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void captureHistoryForWindow( 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebTestRunner::WebTestProxyBase* proxy, 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKit::WebVector<WebKit::WebHistoryItem>* history, 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t* currentEntryIndex); 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Reset(); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_proxy(::WebTestRunner::WebTestProxyBase* proxy) { proxy_ = proxy; } 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::WebTestRunner::WebTestProxyBase* proxy() const { return proxy_; } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers. 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetTestConfiguration(const ShellTestConfiguration& params); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSessionHistory( 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<int>& routing_ids, 10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::vector<std::vector<PageState> >& session_histories, 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<unsigned>& current_entry_indexes); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnReset(); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnNotifyDone(); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // After finishing the test, retrieves the audio, text, and pixel dumps from 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the TestRunner library and sends them to the browser process. 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CaptureDump(); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::WebTestRunner::WebTestProxyBase* proxy_; 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderView* focused_view_; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::WebTestRunner::WebPreferences prefs_; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellTestConfiguration test_config_; 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<int> routing_ids_; 12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::vector<std::vector<PageState> > session_histories_; 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<unsigned> current_entry_indexes_; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_window_; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool focus_on_next_commit_; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_ 137