Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Unified Diff: chrome/test/ui_test_utils.h

Issue 7532034: Move in_process_browser_test and ui_test_utils to chrome/test/base (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/ui/npapi_uitest.cc ('k') | chrome/test/ui_test_utils.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/ui_test_utils.h
===================================================================
--- chrome/test/ui_test_utils.h (revision 94694)
+++ chrome/test/ui_test_utils.h (working copy)
@@ -1,600 +0,0 @@
-// Copyright (c) 2011 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 CHROME_TEST_UI_TEST_UTILS_H_
-#define CHROME_TEST_UI_TEST_UTILS_H_
-#pragma once
-
-#include <map>
-#include <queue>
-#include <set>
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/message_loop.h"
-#include "base/scoped_temp_dir.h"
-#include "base/string16.h"
-#include "chrome/browser/ui/view_ids.h"
-#include "chrome/test/automation/dom_element_proxy.h"
-#include "content/common/notification_observer.h"
-#include "content/common/notification_registrar.h"
-#include "content/common/notification_service.h"
-#include "content/common/notification_source.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/base/keycodes/keyboard_codes.h"
-#include "ui/gfx/native_widget_types.h"
-#include "webkit/glue/window_open_disposition.h"
-
-class AppModalDialog;
-class BookmarkModel;
-class BookmarkNode;
-class Browser;
-class CommandLine;
-class DownloadManager;
-class ExtensionAction;
-class FilePath;
-class GURL;
-class MessageLoop;
-class NavigationController;
-class Profile;
-class RenderViewHost;
-class RenderWidgetHost;
-class ScopedTempDir;
-class SkBitmap;
-class TabContents;
-class TabContentsWrapper;
-
-namespace browser {
-struct NavigateParams;
-}
-
-namespace gfx {
-class Size;
-}
-
-// A collections of functions designed for use with InProcessBrowserTest.
-namespace ui_test_utils {
-
-// Flags to indicate what to wait for in a navigation test.
-// They can be ORed together.
-// The order in which the waits happen when more than one is selected, is:
-// Browser
-// Tab
-// Navigation
-enum BrowserTestWaitFlags {
- BROWSER_TEST_NONE = 0, // Don't wait for anything.
- BROWSER_TEST_WAIT_FOR_BROWSER = 1 << 0, // Wait for a new browser.
- BROWSER_TEST_WAIT_FOR_TAB = 1 << 1, // Wait for a new tab.
- BROWSER_TEST_WAIT_FOR_NAVIGATION = 1 << 2, // Wait for navigation to finish.
-
- BROWSER_TEST_MASK = BROWSER_TEST_WAIT_FOR_BROWSER |
- BROWSER_TEST_WAIT_FOR_TAB |
- BROWSER_TEST_WAIT_FOR_NAVIGATION
-};
-
-// Turns on nestable tasks, runs the message loop, then resets nestable tasks
-// to what they were originally. Prefer this over MessageLoop::Run for in
-// process browser tests that need to block until a condition is met.
-void RunMessageLoop();
-
-// Turns on nestable tasks, runs all pending tasks in the message loop,
-// then resets nestable tasks to what they were originally. Prefer this
-// over MessageLoop::RunAllPending for in process browser tests to run
-// all pending tasks.
-void RunAllPendingInMessageLoop();
-
-// Puts the current tab title in |title|. Returns true on success.
-bool GetCurrentTabTitle(const Browser* browser, string16* title);
-
-// Waits for the current tab to complete the navigation. Returns true on
-// success. TODO(gbillock): remove this race hazard.
-// Use WindowedNotificationObserver instead.
-bool WaitForNavigationInCurrentTab(Browser* browser);
-
-// Waits for the current tab to complete the specified number of navigations.
-// Returns true on success. TODO(gbillock): remove this race hazard.
-// Use WindowedNotificationObserver instead.
-bool WaitForNavigationsInCurrentTab(Browser* browser,
- int number_of_navigations);
-
-// Waits for |controller| to complete a navigation. This blocks until
-// the navigation finishes. TODO(gbillock): remove this race hazard.
-// Use WindowedNotificationObserver instead.
-void WaitForNavigation(NavigationController* controller);
-
-// Waits for |controller| to complete a navigation. This blocks until
-// the specified number of navigations complete. TODO(gbillock): remove this
-// race hazard.
-// Use WindowedNotificationObserver instead.
-void WaitForNavigations(NavigationController* controller,
- int number_of_navigations);
-
-// Waits for a new tab to be added to |browser|.
-void WaitForNewTab(Browser* browser);
-
-// Waits for a |browser_action| to be updated.
-void WaitForBrowserActionUpdated(ExtensionAction* browser_action);
-
-// Waits for a load stop for the specified |tab|'s controller, if the tab is
-// currently loading. Otherwise returns immediately.
-void WaitForLoadStop(TabContents* tab);
-
-// Waits for a new browser to be created, returning the browser.
-Browser* WaitForNewBrowser();
-
-// Opens |url| in an incognito browser window with the incognito profile of
-// |profile|, blocking until the navigation finishes. This will create a new
-// browser if a browser with the incognito profile does not exist.
-void OpenURLOffTheRecord(Profile* profile, const GURL& url);
-
-// Performs the provided navigation process, blocking until the navigation
-// finishes. May change the params in some cases (i.e. if the navigation
-// opens a new browser window). Uses browser::Navigate.
-void NavigateToURL(browser::NavigateParams* params);
-
-// Navigates the selected tab of |browser| to |url|, blocking until the
-// navigation finishes. Uses Browser::OpenURL --> browser::Navigate.
-void NavigateToURL(Browser* browser, const GURL& url);
-
-// Navigates the specified tab of |browser| to |url|, blocking until the
-// navigation finishes.
-// |disposition| indicates what tab the navigation occurs in, and
-// |browser_test_flags| controls what to wait for before continuing.
-void NavigateToURLWithDisposition(Browser* browser,
- const GURL& url,
- WindowOpenDisposition disposition,
- int browser_test_flags);
-
-// Navigates the selected tab of |browser| to |url|, blocking until the
-// number of navigations specified complete.
-void NavigateToURLBlockUntilNavigationsComplete(Browser* browser,
- const GURL& url,
- int number_of_navigations);
-
-// Gets the DOMDocument for the active tab in |browser|.
-// Returns a NULL reference on failure.
-DOMElementProxyRef GetActiveDOMDocument(Browser* browser);
-
-// Executes the passed |script| in the frame pointed to by |frame_xpath| (use
-// empty string for main frame). The |script| should not invoke
-// domAutomationController.send(); otherwise, your test will hang or be flaky.
-// If you want to extract a result, use one of the below functions.
-// Returns true on success.
-bool ExecuteJavaScript(RenderViewHost* render_view_host,
- const std::wstring& frame_xpath,
- const std::wstring& script) WARN_UNUSED_RESULT;
-
-// The following methods executes the passed |script| in the frame pointed to by
-// |frame_xpath| (use empty string for main frame) and sets |result| to the
-// value returned by the script evaluation.
-// They return true on success, false if the script evaluation failed or did not
-// evaluate to the expected type.
-// Note: In order for the domAutomationController to work, you must call
-// EnableDOMAutomation() in your test first.
-bool ExecuteJavaScriptAndExtractInt(RenderViewHost* render_view_host,
- const std::wstring& frame_xpath,
- const std::wstring& script,
- int* result) WARN_UNUSED_RESULT;
-bool ExecuteJavaScriptAndExtractBool(RenderViewHost* render_view_host,
- const std::wstring& frame_xpath,
- const std::wstring& script,
- bool* result) WARN_UNUSED_RESULT;
-bool ExecuteJavaScriptAndExtractString(RenderViewHost* render_view_host,
- const std::wstring& frame_xpath,
- const std::wstring& script,
- std::string* result) WARN_UNUSED_RESULT;
-
-// Generate the file path for testing a particular test.
-// The file for the tests is all located in
-// test_root_directory/dir/<file>
-// The returned path is FilePath format.
-FilePath GetTestFilePath(const FilePath& dir, const FilePath& file);
-
-// Generate the URL for testing a particular test.
-// HTML for the tests is all located in
-// test_root_directory/dir/<file>
-// The returned path is GURL format.
-GURL GetTestUrl(const FilePath& dir, const FilePath& file);
-
-// Generate a URL for a file path including a query string.
-GURL GetFileUrlWithQuery(const FilePath& path, const std::string& query_string);
-
-// Blocks until an application modal dialog is showns and returns it.
-AppModalDialog* WaitForAppModalDialog();
-
-// Causes the specified tab to crash. Blocks until it is crashed.
-void CrashTab(TabContents* tab);
-
-// Waits for the focus to change in the specified tab.
-void WaitForFocusChange(TabContents* tab_contents);
-
-// Waits for the renderer to return focus to the browser (happens through tab
-// traversal).
-void WaitForFocusInBrowser(Browser* browser);
-
-// Performs a find in the page of the specified tab. Returns the number of
-// matches found. |ordinal| is an optional parameter which is set to the index
-// of the current match.
-int FindInPage(TabContentsWrapper* tab,
- const string16& search_string,
- bool forward,
- bool case_sensitive,
- int* ordinal);
-
-// Returns true if the View is focused.
-bool IsViewFocused(const Browser* browser, ViewID vid);
-
-// Simulates a mouse click on a View in the browser.
-void ClickOnView(const Browser* browser, ViewID vid);
-
-// Blocks until a notification for given |type| is received.
-void WaitForNotification(int type);
-
-// Blocks until a notification for given |type| from the specified |source|
-// is received.
-void WaitForNotificationFrom(int type,
- const NotificationSource& source);
-
-// Register |observer| for the given |type| and |source| and run
-// the message loop until the observer posts a quit task.
-void RegisterAndWait(NotificationObserver* observer,
- int type,
- const NotificationSource& source);
-
-// Blocks until |model| finishes loading.
-void WaitForBookmarkModelToLoad(BookmarkModel* model);
-
-// Blocks until the |browser|'s history finishes loading.
-void WaitForHistoryToLoad(Browser* browser);
-
-// Puts the native window for |browser| in |native_window|. Returns true on
-// success.
-bool GetNativeWindow(const Browser* browser, gfx::NativeWindow* native_window)
- WARN_UNUSED_RESULT;
-
-// Brings the native window for |browser| to the foreground. Returns true on
-// success.
-bool BringBrowserWindowToFront(const Browser* browser) WARN_UNUSED_RESULT;
-
-// Gets the first browser that is not in the specified set.
-Browser* GetBrowserNotInSet(std::set<Browser*> excluded_browsers);
-
-// Sends a key press, blocking until the key press is received or the test times
-// out. This uses ui_controls::SendKeyPress, see it for details. Returns true
-// if the event was successfully sent and received.
-bool SendKeyPressSync(const Browser* browser,
- ui::KeyboardCode key,
- bool control,
- bool shift,
- bool alt,
- bool command) WARN_UNUSED_RESULT;
-
-// Sends a key press, blocking until both the key press and a notification from
-// |source| of type |type| are received, or until the test times out. This uses
-// ui_controls::SendKeyPress, see it for details. Returns true if the event was
-// successfully sent and both the event and notification were received.
-bool SendKeyPressAndWait(const Browser* browser,
- ui::KeyboardCode key,
- bool control,
- bool shift,
- bool alt,
- bool command,
- int type,
- const NotificationSource& source) WARN_UNUSED_RESULT;
-
-// Run a message loop only for the specified amount of time.
-class TimedMessageLoopRunner {
- public:
- // Create new MessageLoopForUI and attach to it.
- TimedMessageLoopRunner();
-
- // Attach to an existing message loop.
- explicit TimedMessageLoopRunner(MessageLoop* loop)
- : loop_(loop), owned_(false), quit_loop_invoked_(false) {}
-
- ~TimedMessageLoopRunner();
-
- // Run the message loop for ms milliseconds.
- void RunFor(int ms);
-
- // Post Quit task to the message loop.
- void Quit();
-
- // Post delayed Quit task to the message loop.
- void QuitAfter(int ms);
-
- bool WasTimedOut() const {
- return !quit_loop_invoked_;
- }
-
- private:
- MessageLoop* loop_;
- bool owned_;
- bool quit_loop_invoked_;
-
- DISALLOW_COPY_AND_ASSIGN(TimedMessageLoopRunner);
-};
-
-// This is a utility class for running a python websocket server
-// during tests. The server is started during the construction of the
-// object, and is stopped when the destructor is called. Note that
-// because of the underlying script that is used:
-//
-// third_paty/WebKit/Tools/Scripts/new-run-webkit-websocketserver
-//
-// Only *_wsh.py handlers found under "http/tests/websocket/tests" from the
-// |root_directory| will be found and active while running the test
-// server.
-class TestWebSocketServer {
- public:
- TestWebSocketServer();
-
- // Stops the python websocket server if it was already started.
- ~TestWebSocketServer();
-
- // Starts the python websocket server using |root_directory|. Returns whether
- // the server was successfully started.
- bool Start(const FilePath& root_directory);
-
- private:
- // Sets up PYTHONPATH to run websocket_server.py.
- void SetPythonPath();
-
- // Creates a CommandLine for invoking the python interpreter.
- CommandLine* CreatePythonCommandLine();
-
- // Creates a CommandLine for invoking the python websocker server.
- CommandLine* CreateWebSocketServerCommandLine();
-
- // Has the server been started?
- bool started_;
-
- // A Scoped temporary directory for holding the python pid file.
- ScopedTempDir temp_dir_;
-
- // Used to close the same python interpreter when server falls out
- // scope.
- FilePath websocket_pid_file_;
-
- DISALLOW_COPY_AND_ASSIGN(TestWebSocketServer);
-};
-
-// A notification observer which quits the message loop when a notification
-// is received. It also records the source and details of the notification.
-class TestNotificationObserver : public NotificationObserver {
- public:
- TestNotificationObserver();
- virtual ~TestNotificationObserver();
-
- const NotificationSource& source() const {
- return source_;
- }
-
- const NotificationDetails& details() const {
- return details_;
- }
-
- // NotificationObserver:
- virtual void Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details);
-
- private:
- NotificationSource source_;
- NotificationDetails details_;
-};
-
-// A WindowedNotificationObserver allows code to watch for a notification
-// over a window of time. Typically testing code will need to do something
-// like this:
-// PerformAction()
-// WaitForCompletionNotification()
-// This leads to flakiness as there's a window between PerformAction returning
-// and the observers getting registered, where a notification will be missed.
-//
-// Rather, one can do this:
-// WindowedNotificationObserver signal(...)
-// PerformAction()
-// signal.Wait()
-class WindowedNotificationObserver : public NotificationObserver {
- public:
- // Register to listen for notifications of the given type from either a
- // specific source, or from all sources if |source| is
- // NotificationService::AllSources().
- WindowedNotificationObserver(int notification_type,
- const NotificationSource& source);
- virtual ~WindowedNotificationObserver();
-
- // Wait until the specified notification occurs. If the notification was
- // emitted between the construction of this object and this call then it
- // returns immediately.
- void Wait();
-
- // WaitFor waits until the given notification type is received from the
- // given object. If the notification was emitted between the construction of
- // this object and this call then it returns immediately.
- //
- // Use this variant when you supply AllSources to the constructor but want
- // to wait for notification from a specific observer.
- //
- // Beware that this is inheriently plagued by ABA issues. Consider:
- // WindowedNotificationObserver is created, listening for notifications from
- // all sources
- // Object A is created with address x and fires a notification
- // Object A is freed
- // Object B is created with the same address
- // WaitFor is called with the address of B
- //
- // In this case, WaitFor will return immediately because of the
- // notification from A (because they shared an address), despite being
- // different objects.
- void WaitFor(const NotificationSource& source);
-
- // NotificationObserver:
- virtual void Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details) OVERRIDE;
-
- private:
- bool seen_;
- bool running_;
- std::set<uintptr_t> sources_seen_;
- NotificationSource waiting_for_;
- NotificationRegistrar registrar_;
-
- DISALLOW_COPY_AND_ASSIGN(WindowedNotificationObserver);
-};
-
-// Similar to WindowedNotificationObserver but also provides a way of retrieving
-// the details associated with the notification.
-// Note that in order to use that class the details class should be copiable,
-// which is the case with most notifications.
-template <class U>
-class WindowedNotificationObserverWithDetails
- : public WindowedNotificationObserver {
- public:
- WindowedNotificationObserverWithDetails(int notification_type,
- const NotificationSource& source)
- : WindowedNotificationObserver(notification_type, source) {}
-
- // Fills |details| with the details of the notification received for |source|.
- bool GetDetailsFor(uintptr_t source, U* details) {
- typename std::map<uintptr_t, U>::const_iterator iter =
- details_.find(source);
- if (iter == details_.end())
- return false;
- *details = iter->second;
- return true;
- }
-
- virtual void Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- const U* details_ptr = Details<U>(details).ptr();
- if (details_ptr)
- details_[source.map_key()] = *details_ptr;
- WindowedNotificationObserver::Observe(type, source, details);
- }
-
- private:
- std::map<uintptr_t, U> details_;
-
- DISALLOW_COPY_AND_ASSIGN(WindowedNotificationObserverWithDetails);
-};
-
-// Watches title changes on a tab, blocking until an expected title is set.
-class TitleWatcher : public NotificationObserver {
- public:
- // |tab_contents| must be non-NULL and needs to stay alive for the
- // entire lifetime of |this|. |expected_title| is the title that |this|
- // will wait for.
- TitleWatcher(TabContents* tab_contents, const string16& expected_title);
- virtual ~TitleWatcher();
-
- // Waits until the title for the tab is set to the |expected_title|
- // passed into the constructor.
- bool Wait() WARN_UNUSED_RESULT;
-
- private:
- // NotificationObserver
- virtual void Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details) OVERRIDE;
-
- TabContents* expected_tab_;
- string16 expected_title_;
- NotificationRegistrar notification_registrar_;
- bool title_observed_;
- bool quit_loop_on_observation_;
-
- DISALLOW_COPY_AND_ASSIGN(TitleWatcher);
-};
-
-// See SendKeyPressAndWait. This function additionally performs a check on the
-// NotificationDetails using the provided Details<U>.
-template <class U>
-bool SendKeyPressAndWaitWithDetails(
- const Browser* browser,
- ui::KeyboardCode key,
- bool control,
- bool shift,
- bool alt,
- bool command,
- int type,
- const NotificationSource& source,
- const Details<U>& details) WARN_UNUSED_RESULT;
-
-template <class U>
-bool SendKeyPressAndWaitWithDetails(
- const Browser* browser,
- ui::KeyboardCode key,
- bool control,
- bool shift,
- bool alt,
- bool command,
- int type,
- const NotificationSource& source,
- const Details<U>& details) {
- WindowedNotificationObserverWithDetails<U> observer(type, source);
-
- if (!SendKeyPressSync(browser, key, control, shift, alt, command))
- return false;
-
- observer.Wait();
-
- U my_details;
- if (!observer.GetDetailsFor(source.map_key(), &my_details))
- return false;
-
- return *details.ptr() == my_details && !testing::Test::HasFatalFailure();
-}
-
-// Hide a native window.
-void HideNativeWindow(gfx::NativeWindow window);
-
-// Show and focus a native window.
-void ShowAndFocusNativeWindow(gfx::NativeWindow window);
-
-// Watches for responses from the DOMAutomationController and keeps them in a
-// queue. Useful for waiting for a message to be received.
-class DOMMessageQueue : public NotificationObserver {
- public:
- // Constructs a DOMMessageQueue and begins listening for messages from the
- // DOMAutomationController. Do not construct this until the browser has
- // started.
- DOMMessageQueue();
- virtual ~DOMMessageQueue();
-
- // Wait for the next message to arrive. |message| will be set to the next
- // message, if not null. Returns true on success.
- bool WaitForMessage(std::string* message) WARN_UNUSED_RESULT;
-
- // Overridden NotificationObserver methods.
- virtual void Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details);
-
- private:
- NotificationRegistrar registrar_;
- std::queue<std::string> message_queue_;
- bool waiting_for_message_;
-
- DISALLOW_COPY_AND_ASSIGN(DOMMessageQueue);
-};
-
-// Takes a snapshot of the given render widget, rendered at |page_size|. The
-// snapshot is set to |bitmap|. Returns true on success.
-bool TakeRenderWidgetSnapshot(RenderWidgetHost* rwh,
- const gfx::Size& page_size,
- SkBitmap* bitmap) WARN_UNUSED_RESULT;
-
-// Takes a snapshot of the entire page, according to the width and height
-// properties of the DOM's document. Returns true on success. DOMAutomation
-// must be enabled.
-bool TakeEntirePageSnapshot(RenderViewHost* rvh,
- SkBitmap* bitmap) WARN_UNUSED_RESULT;
-
-} // namespace ui_test_utils
-
-#endif // CHROME_TEST_UI_TEST_UTILS_H_
« no previous file with comments | « chrome/test/ui/npapi_uitest.cc ('k') | chrome/test/ui_test_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698