webkit_test_runner.h revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
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" 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/shell/common/test_runner/test_preferences.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/shell/renderer/test_runner/WebTestDelegate.h" 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebScreenOrientation.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "v8/include/v8.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkCanvas; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass WebDeviceMotionData; 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class WebDeviceOrientationData; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct WebRect; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace WebTestRunner { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebTestProxyBase; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class LeakDetector; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (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; 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidClearWindowObject(blink::WebLocalFrame* frame, 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int world_id) OVERRIDE; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Navigate(const GURL& url) OVERRIDE; 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_new_navigation) OVERRIDE; 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidFailProvisionalLoad(blink::WebLocalFrame* frame, 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const blink::WebURLError& error) OVERRIDE; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebTestDelegate implementation. 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void clearEditCommand() OVERRIDE; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void setEditCommand(const std::string& name, 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& value) OVERRIDE; 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setGamepadData(const blink::WebGamepads& gamepads) OVERRIDE; 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void didConnectGamepad(int index, 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const blink::WebGamepad& gamepad) OVERRIDE; 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void didDisconnectGamepad(int index, 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const blink::WebGamepad& gamepad) OVERRIDE; 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setDeviceMotionData( 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebDeviceMotionData& data) OVERRIDE; 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void setDeviceOrientationData( 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebDeviceOrientationData& data) OVERRIDE; 6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void setScreenOrientation( 6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const blink::WebScreenOrientation& orientation) OVERRIDE; 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void printMessage(const std::string& message) OVERRIDE; 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void postTask(::WebTestRunner::WebTask* task) OVERRIDE; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void postDelayedTask(::WebTestRunner::WebTask* task, 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) long long ms) OVERRIDE; 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebString registerIsolatedFileSystem( 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebVector<blink::WebString>& absolute_filenames) OVERRIDE; 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual long long getCurrentTimeInMillisecond() OVERRIDE; 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebString getAbsoluteWebStringFromUTF8Path( 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& utf8_path) OVERRIDE; 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual blink::WebURL localFileToDataURL( 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebURL& file_url) OVERRIDE; 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual blink::WebURL rewriteLayoutTestsURL( 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& utf8_url) OVERRIDE; 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual TestPreferences* preferences() OVERRIDE; 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void applyPreferences() OVERRIDE; 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual std::string makeURLErrorDescription(const blink::WebURLError& error); 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void useUnfortunateSynchronousResizeMode(bool enable) OVERRIDE; 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void enableAutoResizeMode(const blink::WebSize& min_size, 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebSize& max_size) OVERRIDE; 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void disableAutoResizeMode(const blink::WebSize& new_size) OVERRIDE; 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void clearDevToolsLocalStorage() OVERRIDE; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void showDevTools(const std::string& settings) OVERRIDE; 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void closeDevTools() OVERRIDE; 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void evaluateInWebInspector(long call_id, 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& script) OVERRIDE; 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void clearAllDatabases() OVERRIDE; 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setDatabaseQuota(int quota) OVERRIDE; 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setDeviceScaleFactor(float factor) OVERRIDE; 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setFocus(WebTestRunner::WebTestProxyBase* proxy, 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool focus) OVERRIDE; 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setAcceptAllCookies(bool accept) OVERRIDE; 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual std::string pathToLocalResource(const std::string& resource) OVERRIDE; 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setLocale(const std::string& locale) OVERRIDE; 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void testFinished() OVERRIDE; 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void closeRemainingWindows() OVERRIDE; 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void deleteAllCookies() OVERRIDE; 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual int navigationEntryCount() OVERRIDE; 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void goToOffset(int offset) OVERRIDE; 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void reload() OVERRIDE; 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void loadURLForFrame(const blink::WebURL& url, 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& frame_name) OVERRIDE; 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool allowExternalPages() OVERRIDE; 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void captureHistoryForWindow( 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebTestRunner::WebTestProxyBase* proxy, 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebVector<blink::WebHistoryItem>* history, 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t* currentEntryIndex) OVERRIDE; 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Reset(); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_proxy(::WebTestRunner::WebTestProxyBase* proxy) { proxy_ = proxy; } 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::WebTestRunner::WebTestProxyBase* proxy() const { return proxy_; } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers. 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetTestConfiguration(const ShellTestConfiguration& params); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSessionHistory( 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<int>& routing_ids, 12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::vector<std::vector<PageState> >& session_histories, 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<unsigned>& current_entry_indexes); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnReset(); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnNotifyDone(); 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnTryLeakDetection(); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // After finishing the test, retrieves the audio, text, and pixel dumps from 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the TestRunner library and sends them to the browser process. 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CaptureDump(); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void TryLeakDetection(); 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ::WebTestRunner::WebTestProxyBase* proxy_; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderView* focused_view_; 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch TestPreferences prefs_; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellTestConfiguration test_config_; 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<int> routing_ids_; 14890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::vector<std::vector<PageState> > session_histories_; 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<unsigned> current_entry_indexes_; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_window_; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool focus_on_next_commit_; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<LeakDetector> leak_detector_; 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool needs_leak_detector_; 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_ 164