webkit_test_runner.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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" 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "third_party/WebKit/public/platform/WebScreenOrientationType.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "v8/include/v8.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class SkBitmap; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkCanvas; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class WebBatteryStatus; 269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass WebDeviceMotionData; 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class WebDeviceOrientationData; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct WebRect; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class LeakDetector; 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WebTestProxyBase; 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstruct LeakDetectionResult; 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>, 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public 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; 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidClearWindowObject(blink::WebLocalFrame* frame) OVERRIDE; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Navigate(const GURL& url) OVERRIDE; 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_new_navigation) OVERRIDE; 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidFailProvisionalLoad(blink::WebLocalFrame* frame, 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const blink::WebURLError& error) OVERRIDE; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebTestDelegate implementation. 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void clearEditCommand() OVERRIDE; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void setEditCommand(const std::string& name, 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& value) OVERRIDE; 586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual void setGamepadProvider(RendererGamepadProvider*) OVERRIDE; 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void setDeviceLightData(const double data) OVERRIDE; 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setDeviceMotionData( 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebDeviceMotionData& data) OVERRIDE; 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void setDeviceOrientationData( 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebDeviceOrientationData& data) OVERRIDE; 6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual void setScreenOrientation( 650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const blink::WebScreenOrientationType& orientation) OVERRIDE; 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void resetScreenOrientation() OVERRIDE; 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void didChangeBatteryStatus( 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const blink::WebBatteryStatus& status) OVERRIDE; 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void printMessage(const std::string& message) OVERRIDE; 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void postTask(WebTask* task) OVERRIDE; 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void postDelayedTask(WebTask* task, long long ms) OVERRIDE; 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebString registerIsolatedFileSystem( 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebVector<blink::WebString>& absolute_filenames) OVERRIDE; 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual long long getCurrentTimeInMillisecond() OVERRIDE; 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual blink::WebString getAbsoluteWebStringFromUTF8Path( 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& utf8_path) OVERRIDE; 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual blink::WebURL localFileToDataURL( 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebURL& file_url) OVERRIDE; 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual blink::WebURL rewriteLayoutTestsURL( 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& utf8_url) OVERRIDE; 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual TestPreferences* preferences() OVERRIDE; 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void applyPreferences() OVERRIDE; 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual std::string makeURLErrorDescription(const blink::WebURLError& error); 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void useUnfortunateSynchronousResizeMode(bool enable) OVERRIDE; 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void enableAutoResizeMode(const blink::WebSize& min_size, 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const blink::WebSize& max_size) OVERRIDE; 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void disableAutoResizeMode(const blink::WebSize& new_size) OVERRIDE; 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void clearDevToolsLocalStorage() OVERRIDE; 890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void showDevTools(const std::string& settings, 900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const std::string& frontend_url) OVERRIDE; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void closeDevTools() OVERRIDE; 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void evaluateInWebInspector(long call_id, 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& script) OVERRIDE; 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void clearAllDatabases() OVERRIDE; 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setDatabaseQuota(int quota) OVERRIDE; 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual blink::WebNotificationPresenter::Permission 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) checkWebNotificationPermission(const GURL& origin) OVERRIDE; 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void grantWebNotificationPermission(const GURL& origin, 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool permission_granted) OVERRIDE; 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void clearWebNotificationPermissions() OVERRIDE; 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setDeviceScaleFactor(float factor) OVERRIDE; 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void setDeviceColorProfile(const std::string& name) OVERRIDE; 1030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void setFocus(WebTestProxyBase* proxy, bool focus) OVERRIDE; 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setAcceptAllCookies(bool accept) OVERRIDE; 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual std::string pathToLocalResource(const std::string& resource) OVERRIDE; 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void setLocale(const std::string& locale) OVERRIDE; 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void testFinished() OVERRIDE; 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void closeRemainingWindows() OVERRIDE; 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void deleteAllCookies() OVERRIDE; 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual int navigationEntryCount() OVERRIDE; 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void goToOffset(int offset) OVERRIDE; 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void reload() OVERRIDE; 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void loadURLForFrame(const blink::WebURL& url, 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& frame_name) OVERRIDE; 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool allowExternalPages() OVERRIDE; 1165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual std::string dumpHistoryForWindow(WebTestProxyBase* proxy) OVERRIDE; 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Reset(); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void set_proxy(WebTestProxyBase* proxy) { proxy_ = proxy; } 1210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch WebTestProxyBase* proxy() const { return proxy_; } 1220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void ReportLeakDetectionResult(const LeakDetectionResult& result); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers. 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetTestConfiguration(const ShellTestConfiguration& params); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSessionHistory( 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<int>& routing_ids, 13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::vector<std::vector<PageState> >& session_histories, 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<unsigned>& current_entry_indexes); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnReset(); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnNotifyDone(); 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnTryLeakDetection(); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // After finishing the test, retrieves the audio, text, and pixel dumps from 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the TestRunner library and sends them to the browser process. 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CaptureDump(); 139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void CaptureDumpPixels(const SkBitmap& snapshot); 140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void CaptureDumpComplete(); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch WebTestProxyBase* proxy_; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderView* focused_view_; 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch TestPreferences prefs_; 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellTestConfiguration test_config_; 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<int> routing_ids_; 15190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::vector<std::vector<PageState> > session_histories_; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<unsigned> current_entry_indexes_; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_window_; 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool focus_on_next_commit_; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<LeakDetector> leak_detector_; 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool needs_leak_detector_; 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_ 167