diff options
Diffstat (limited to 'content/shell')
-rw-r--r-- | content/shell/shell_messages.h | 37 | ||||
-rw-r--r-- | content/shell/shell_render_process_observer.cc | 25 | ||||
-rw-r--r-- | content/shell/shell_render_process_observer.h | 5 | ||||
-rw-r--r-- | content/shell/shell_test_configuration.cc | 16 | ||||
-rw-r--r-- | content/shell/shell_test_configuration.h | 43 | ||||
-rw-r--r-- | content/shell/webkit_test_controller.cc | 3 | ||||
-rw-r--r-- | content/shell/webkit_test_runner.cc | 70 | ||||
-rw-r--r-- | content/shell/webkit_test_runner.h | 15 |
8 files changed, 119 insertions, 95 deletions
diff --git a/content/shell/shell_messages.h b/content/shell/shell_messages.h index 1f86dac..d725d70 100644 --- a/content/shell/shell_messages.h +++ b/content/shell/shell_messages.h @@ -7,37 +7,22 @@ #include <vector> #include "content/public/common/common_param_traits.h" +#include "content/shell/shell_test_configuration.h" #include "ipc/ipc_message_macros.h" #include "ipc/ipc_platform_file.h" #include "third_party/skia/include/core/SkBitmap.h" #define IPC_MESSAGE_START ShellMsgStart -IPC_STRUCT_BEGIN(ShellViewMsg_SetTestConfiguration_Params) - // The current working directory. - IPC_STRUCT_MEMBER(base::FilePath, current_working_directory) - - // The temporary directory of the system. - IPC_STRUCT_MEMBER(base::FilePath, temp_path) - - // The URL of the current layout test. - IPC_STRUCT_MEMBER(GURL, test_url) - - // True if pixel tests are enabled. - IPC_STRUCT_MEMBER(bool, enable_pixel_dumping) - - // The layout test timeout in milliseconds. - IPC_STRUCT_MEMBER(int, layout_test_timeout) - - // True if tests can open external URLs - IPC_STRUCT_MEMBER(bool, allow_external_pages) - - // The expected MD5 hash of the pixel results. - IPC_STRUCT_MEMBER(std::string, expected_pixel_hash) -IPC_STRUCT_END() - -// Tells the renderer to reset all test runners. -IPC_MESSAGE_CONTROL0(ShellViewMsg_ResetAll) +IPC_STRUCT_TRAITS_BEGIN(content::ShellTestConfiguration) +IPC_STRUCT_TRAITS_MEMBER(current_working_directory) +IPC_STRUCT_TRAITS_MEMBER(temp_path) +IPC_STRUCT_TRAITS_MEMBER(test_url) +IPC_STRUCT_TRAITS_MEMBER(enable_pixel_dumping) +IPC_STRUCT_TRAITS_MEMBER(layout_test_timeout) +IPC_STRUCT_TRAITS_MEMBER(allow_external_pages) +IPC_STRUCT_TRAITS_MEMBER(expected_pixel_hash) +IPC_STRUCT_TRAITS_END() // Sets the path to the WebKit checkout. IPC_MESSAGE_CONTROL1(ShellViewMsg_SetWebKitSourceDir, @@ -49,7 +34,7 @@ IPC_MESSAGE_CONTROL1(ShellViewMsg_LoadHyphenDictionary, // Sets the initial configuration to use for layout tests. IPC_MESSAGE_ROUTED1(ShellViewMsg_SetTestConfiguration, - ShellViewMsg_SetTestConfiguration_Params) + content::ShellTestConfiguration) // Pushes a snapshot of the current session history from the browser process. // This includes only information about those RenderViews that are in the diff --git a/content/shell/shell_render_process_observer.cc b/content/shell/shell_render_process_observer.cc index 4692f83..1ea8471 100644 --- a/content/shell/shell_render_process_observer.cc +++ b/content/shell/shell_render_process_observer.cc @@ -14,15 +14,11 @@ #include "content/shell/shell_switches.h" #include "content/shell/webkit_test_runner.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebRuntimeFeatures.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebTestingSupport.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" #include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h" #include "webkit/glue/webkit_glue.h" #include "webkit/support/gc_extension.h" -using WebKit::WebFrame; using WebKit::WebRuntimeFeatures; -using WebKit::WebTestingSupport; using WebTestRunner::WebTestDelegate; using WebTestRunner::WebTestInterfaces; @@ -38,9 +34,7 @@ ShellRenderProcessObserver* ShellRenderProcessObserver::GetInstance() { } ShellRenderProcessObserver::ShellRenderProcessObserver() - : main_render_view_(NULL), - main_test_runner_(NULL), - test_delegate_(NULL) { + : test_delegate_(NULL) { CHECK(!g_instance); g_instance = this; RenderThread::Get()->AddObserver(this); @@ -70,13 +64,6 @@ void ShellRenderProcessObserver::SetTestDelegate(WebTestDelegate* delegate) { void ShellRenderProcessObserver::SetMainWindow(RenderView* view) { WebKitTestRunner* test_runner = WebKitTestRunner::Get(view); test_interfaces_->setWebView(view->GetWebView(), test_runner->proxy()); - main_render_view_ = view; - main_test_runner_ = test_runner; -} - -void ShellRenderProcessObserver::BindTestRunnersToWindow(WebFrame* frame) { - WebTestingSupport::injectInternalsObject(frame); - test_interfaces_->bindTo(frame); } void ShellRenderProcessObserver::WebKitInitialized() { @@ -95,7 +82,6 @@ bool ShellRenderProcessObserver::OnControlMessageReceived( const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(ShellRenderProcessObserver, message) - IPC_MESSAGE_HANDLER(ShellViewMsg_ResetAll, OnResetAll) IPC_MESSAGE_HANDLER(ShellViewMsg_SetWebKitSourceDir, OnSetWebKitSourceDir) IPC_MESSAGE_HANDLER(ShellViewMsg_LoadHyphenDictionary, OnLoadHyphenDictionary) @@ -105,15 +91,6 @@ bool ShellRenderProcessObserver::OnControlMessageReceived( return handled; } -void ShellRenderProcessObserver::OnResetAll() { - test_interfaces_->resetAll(); - if (main_render_view_) { - main_test_runner_->Reset(); - WebTestingSupport::resetInternalsObject( - main_render_view_->GetWebView()->mainFrame()); - } -} - void ShellRenderProcessObserver::OnSetWebKitSourceDir( const base::FilePath& webkit_source_dir) { webkit_source_dir_ = webkit_source_dir; diff --git a/content/shell/shell_render_process_observer.h b/content/shell/shell_render_process_observer.h index 8c8a34d..f86c068 100644 --- a/content/shell/shell_render_process_observer.h +++ b/content/shell/shell_render_process_observer.h @@ -35,7 +35,6 @@ class ShellRenderProcessObserver : public RenderProcessObserver { void SetTestDelegate(WebTestRunner::WebTestDelegate* delegate); void SetMainWindow(RenderView* view); - void BindTestRunnersToWindow(WebKit::WebFrame* frame); // RenderProcessObserver implementation. virtual void WebKitInitialized() OVERRIDE; @@ -47,17 +46,13 @@ class ShellRenderProcessObserver : public RenderProcessObserver { WebTestRunner::WebTestInterfaces* test_interfaces() const { return test_interfaces_.get(); } - WebKitTestRunner* main_test_runner() const { return main_test_runner_; } const base::FilePath& webkit_source_dir() const { return webkit_source_dir_; } private: // Message handlers. - void OnResetAll(); void OnSetWebKitSourceDir(const base::FilePath& webkit_source_dir); void OnLoadHyphenDictionary(const IPC::PlatformFileForTransit& dict_file); - RenderView* main_render_view_; - WebKitTestRunner* main_test_runner_; WebTestRunner::WebTestDelegate* test_delegate_; scoped_ptr<WebTestRunner::WebTestInterfaces> test_interfaces_; diff --git a/content/shell/shell_test_configuration.cc b/content/shell/shell_test_configuration.cc new file mode 100644 index 0000000..6caff2e --- /dev/null +++ b/content/shell/shell_test_configuration.cc @@ -0,0 +1,16 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/shell/shell_test_configuration.h" + +namespace content { + +ShellTestConfiguration::ShellTestConfiguration() + : enable_pixel_dumping(true), + layout_test_timeout(30 * 1000), + allow_external_pages(false) {} + +ShellTestConfiguration::~ShellTestConfiguration() {} + +} // namespace content diff --git a/content/shell/shell_test_configuration.h b/content/shell/shell_test_configuration.h new file mode 100644 index 0000000..d47211f --- /dev/null +++ b/content/shell/shell_test_configuration.h @@ -0,0 +1,43 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_SHELL_SHELL_TEST_CONFIGURATION_H_ +#define CONTENT_SHELL_SHELL_TEST_CONFIGURATION_H_ + +#include <string> + +#include "base/files/file_path.h" +#include "googleurl/src/gurl.h" + +namespace content { + +struct ShellTestConfiguration { + ShellTestConfiguration(); + ~ShellTestConfiguration(); + + // The current working directory. + base::FilePath current_working_directory; + + // The temporary directory of the system. + base::FilePath temp_path; + + // The URL of the current layout test. + GURL test_url; + + // True if pixel tests are enabled. + bool enable_pixel_dumping; + + // The layout test timeout in milliseconds. + int layout_test_timeout; + + // True if tests can open external URLs + bool allow_external_pages; + + // The expected MD5 hash of the pixel results. + std::string expected_pixel_hash; +}; + +} // namespace content + +#endif // CONTENT_SHELL_SHELL_TEST_CONFIGURATION_H_ diff --git a/content/shell/webkit_test_controller.cc b/content/shell/webkit_test_controller.cc index 1a5acb5..f6a2b51 100644 --- a/content/shell/webkit_test_controller.cc +++ b/content/shell/webkit_test_controller.cc @@ -264,7 +264,6 @@ bool WebKitTestController::ResetAfterLayoutTest() { prefs_ = webkit_glue::WebPreferences(); should_override_prefs_ = false; watchdog_.Cancel(); - Send(new ShellViewMsg_ResetAll); return true; } @@ -416,7 +415,7 @@ void WebKitTestController::DiscardMainWindow() { void WebKitTestController::SendTestConfiguration() { RenderViewHost* render_view_host = main_window_->web_contents()->GetRenderViewHost(); - ShellViewMsg_SetTestConfiguration_Params params; + ShellTestConfiguration params; params.current_working_directory = current_working_directory_; params.temp_path = temp_path_; params.test_url = test_url_; diff --git a/content/shell/webkit_test_runner.cc b/content/shell/webkit_test_runner.cc index fc662bb..f63b20f 100644 --- a/content/shell/webkit_test_runner.cc +++ b/content/shell/webkit_test_runner.cc @@ -45,6 +45,7 @@ #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebHistoryItem.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebTestingSupport.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" #include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebTask.h" #include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h" @@ -68,6 +69,7 @@ using WebKit::WebHistoryItem; using WebKit::WebRect; using WebKit::WebSize; using WebKit::WebString; +using WebKit::WebTestingSupport; using WebKit::WebURL; using WebKit::WebURLError; using WebKit::WebVector; @@ -81,8 +83,6 @@ namespace content { namespace { -int kDefaultLayoutTestTimeoutMs = 30 * 1000; - void InvokeTaskHelper(void* context) { WebTask* task = reinterpret_cast<WebTask*>(context); task->run(); @@ -162,10 +162,9 @@ WebKitTestRunner::WebKitTestRunner(RenderView* render_view) RenderViewObserverTracker<WebKitTestRunner>(render_view), proxy_(NULL), focused_view_(NULL), - enable_pixel_dumping_(true), - layout_test_timeout_(kDefaultLayoutTestTimeoutMs), - allow_external_pages_(false), - is_main_window_(false) { + is_main_window_(false), + reset_on_next_navigation_(false), + test_is_running_(false) { } WebKitTestRunner::~WebKitTestRunner() { @@ -403,11 +402,12 @@ void WebKitTestRunner::setLocale(const std::string& locale) { } void WebKitTestRunner::testFinished() { - if (!is_main_window_) + if (!is_main_window_ || !test_is_running_) return; WebTestInterfaces* interfaces = ShellRenderProcessObserver::GetInstance()->test_interfaces(); interfaces->setTestIsRunning(false); + test_is_running_ = false; if (interfaces->testRunner()->shouldDumpBackForwardList()) { SyncNavigationStateVisitor visitor; RenderView::ForEach(&visitor); @@ -418,11 +418,12 @@ void WebKitTestRunner::testFinished() { } void WebKitTestRunner::testTimedOut() { - if (!is_main_window_) + if (!is_main_window_ || !test_is_running_) return; WebTestInterfaces* interfaces = ShellRenderProcessObserver::GetInstance()->test_interfaces(); interfaces->setTestIsRunning(false); + test_is_running_ = false; Send(new ShellViewHostMsg_TestFinished(routing_id(), true)); } @@ -431,7 +432,7 @@ bool WebKitTestRunner::isBeingDebugged() { } int WebKitTestRunner::layoutTestTimeout() { - return layout_test_timeout_; + return test_config_.layout_test_timeout; } void WebKitTestRunner::closeRemainingWindows() { @@ -457,7 +458,7 @@ void WebKitTestRunner::loadURLForFrame(const WebURL& url, } bool WebKitTestRunner::allowExternalPages() { - return allow_external_pages_; + return test_config_.allow_external_pages; } void WebKitTestRunner::captureHistoryForWindow( @@ -493,7 +494,8 @@ void WebKitTestRunner::captureHistoryForWindow( // RenderViewObserver -------------------------------------------------------- void WebKitTestRunner::DidClearWindowObject(WebFrame* frame) { - ShellRenderProcessObserver::GetInstance()->BindTestRunnersToWindow(frame); + WebTestingSupport::injectInternalsObject(frame); + ShellRenderProcessObserver::GetInstance()->test_interfaces()->bindTo(frame); } bool WebKitTestRunner::OnMessageReceived(const IPC::Message& message) { @@ -508,19 +510,36 @@ bool WebKitTestRunner::OnMessageReceived(const IPC::Message& message) { return handled; } +void WebKitTestRunner::Navigate(const GURL& url) { + if (!reset_on_next_navigation_) + return; + + reset_on_next_navigation_ = false; + Reset(); + + WebTestInterfaces* interfaces = + ShellRenderProcessObserver::GetInstance()->test_interfaces(); + interfaces->configureForTestWithURL(test_config_.test_url, + test_config_.enable_pixel_dumping); + interfaces->setTestIsRunning(true); + test_is_running_ = true; +} + // Public methods - ----------------------------------------------------------- void WebKitTestRunner::Reset() { + ShellRenderProcessObserver::GetInstance()->test_interfaces()->resetAll(); // The proxy_ is always non-NULL, it is set right after construction. proxy_->reset(); prefs_.reset(); - enable_pixel_dumping_ = true; - layout_test_timeout_ = kDefaultLayoutTestTimeoutMs; - allow_external_pages_ = false; - expected_pixel_hash_ = std::string(); routing_ids_.clear(); session_histories_.clear(); current_entry_indexes_.clear(); + // This overrides the WebPreferences, so we have to reset them again. + WebTestingSupport::resetInternalsObject( + render_view()->GetWebView()->mainFrame()); + render_view()->SetWebkitPreferences(render_view()->GetWebkitPreferences()); + setFocus(proxy_, true); } // Private methods ----------------------------------------------------------- @@ -544,7 +563,7 @@ void WebKitTestRunner::CaptureDump() { Send( new ShellViewHostMsg_TextDump(routing_id(), proxy()->captureTree(false))); - if (enable_pixel_dumping_ && + if (test_config_.enable_pixel_dumping && interfaces->testRunner()->shouldGeneratePixelResults()) { SkBitmap snapshot; CopyCanvasToBitmap(proxy()->capturePixels(), &snapshot); @@ -570,7 +589,7 @@ void WebKitTestRunner::CaptureDump() { #endif std::string actual_pixel_hash = base::MD5DigestToBase16(digest); - if (actual_pixel_hash == expected_pixel_hash_) { + if (actual_pixel_hash == test_config_.expected_pixel_hash) { SkBitmap empty_image; Send(new ShellViewHostMsg_ImageDump( routing_id(), actual_pixel_hash, empty_image)); @@ -584,21 +603,10 @@ void WebKitTestRunner::CaptureDump() { } void WebKitTestRunner::OnSetTestConfiguration( - const ShellViewMsg_SetTestConfiguration_Params& params) { - current_working_directory_ = params.current_working_directory; - temp_path_ = params.temp_path; - enable_pixel_dumping_ = params.enable_pixel_dumping; - layout_test_timeout_ = params.layout_test_timeout; - allow_external_pages_ = params.allow_external_pages; - expected_pixel_hash_ = params.expected_pixel_hash; + const ShellTestConfiguration& params) { + test_config_ = params; + reset_on_next_navigation_ = true; is_main_window_ = true; - - setFocus(proxy_, true); - - WebTestInterfaces* interfaces = - ShellRenderProcessObserver::GetInstance()->test_interfaces(); - interfaces->setTestIsRunning(true); - interfaces->configureForTestWithURL(params.test_url, enable_pixel_dumping_); } void WebKitTestRunner::OnSessionHistory( diff --git a/content/shell/webkit_test_runner.h b/content/shell/webkit_test_runner.h index e66f3eb..84adb5f 100644 --- a/content/shell/webkit_test_runner.h +++ b/content/shell/webkit_test_runner.h @@ -11,12 +11,12 @@ #include "base/memory/scoped_ptr.h" #include "content/public/renderer/render_view_observer.h" #include "content/public/renderer/render_view_observer_tracker.h" +#include "content/shell/shell_test_configuration.h" #include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebPreferences.h" #include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h" #include "v8/include/v8.h" class SkCanvas; -struct ShellViewMsg_SetTestConfiguration_Params; namespace WebKit { struct WebRect; @@ -39,6 +39,7 @@ class WebKitTestRunner : public RenderViewObserver, // RenderViewObserver implementation. virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE; + virtual void Navigate(const GURL& url) OVERRIDE; // WebTestDelegate implementation. virtual void clearEditCommand(); @@ -94,8 +95,7 @@ class WebKitTestRunner : public RenderViewObserver, private: // Message handlers. - void OnSetTestConfiguration( - const ShellViewMsg_SetTestConfiguration_Params& params); + void OnSetTestConfiguration(const ShellTestConfiguration& params); void OnSessionHistory( const std::vector<int>& routing_ids, const std::vector<std::vector<std::string> >& session_histories, @@ -114,10 +114,7 @@ class WebKitTestRunner : public RenderViewObserver, ::WebTestRunner::WebPreferences prefs_; - bool enable_pixel_dumping_; - int layout_test_timeout_; - bool allow_external_pages_; - std::string expected_pixel_hash_; + ShellTestConfiguration test_config_; std::vector<int> routing_ids_; std::vector<std::vector<std::string> > session_histories_; @@ -125,6 +122,10 @@ class WebKitTestRunner : public RenderViewObserver, bool is_main_window_; + bool reset_on_next_navigation_; + + bool test_is_running_; + DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner); }; |