WebKitTools/DumpRenderTree/chromium/LayoutTestController.h
changeset 2 303757a437d3
parent 0 4f2f89ce4247
equal deleted inserted replaced
0:4f2f89ce4247 2:303757a437d3
     1 /*
       
     2  * Copyright (C) 2010 Google Inc. All rights reserved.
       
     3  * Copyright (C) 2010 Pawel Hajdan (phajdan.jr@chromium.org)
       
     4  *
       
     5  * Redistribution and use in source and binary forms, with or without
       
     6  * modification, are permitted provided that the following conditions are
       
     7  * met:
       
     8  *
       
     9  *     * Redistributions of source code must retain the above copyright
       
    10  * notice, this list of conditions and the following disclaimer.
       
    11  *     * Redistributions in binary form must reproduce the above
       
    12  * copyright notice, this list of conditions and the following disclaimer
       
    13  * in the documentation and/or other materials provided with the
       
    14  * distribution.
       
    15  *     * Neither the name of Google Inc. nor the names of its
       
    16  * contributors may be used to endorse or promote products derived from
       
    17  * this software without specific prior written permission.
       
    18  *
       
    19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
       
    20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
       
    21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
       
    22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
       
    23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
       
    24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
       
    25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
       
    26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
       
    27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
       
    29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    30  */
       
    31 
       
    32 /*
       
    33   LayoutTestController class:
       
    34   Bound to a JavaScript window.layoutTestController object using the
       
    35   CppBoundClass::bindToJavascript(), this allows layout tests that are run in
       
    36   the test_shell (or, in principle, any web page loaded into a client app built
       
    37   with this class) to control various aspects of how the tests are run and what
       
    38   sort of output they produce.
       
    39 */
       
    40 
       
    41 #ifndef LayoutTestController_h
       
    42 #define LayoutTestController_h
       
    43 
       
    44 #include "CppBoundClass.h"
       
    45 #include "base/timer.h" // FIXME: Remove this.
       
    46 #include "public/WebString.h"
       
    47 #include "public/WebURL.h"
       
    48 #include <wtf/Deque.h>
       
    49 
       
    50 class TestShell;
       
    51 
       
    52 class LayoutTestController : public CppBoundClass {
       
    53 public:
       
    54     // Builds the property and method lists needed to bind this class to a JS
       
    55     // object.
       
    56     LayoutTestController(TestShell*);
       
    57 
       
    58     // This function sets a flag that tells the test_shell to dump pages as
       
    59     // plain text, rather than as a text representation of the renderer's state.
       
    60     // It takes an optional argument, whether to dump pixels results or not.
       
    61     void dumpAsText(const CppArgumentList&, CppVariant*);
       
    62 
       
    63     // This function should set a flag that tells the test_shell to print a line
       
    64     // of descriptive text for each database command.  It should take no
       
    65     // arguments, and ignore any that may be present. However, at the moment, we
       
    66     // don't have any DB function that prints messages, so for now this function
       
    67     // doesn't do anything.
       
    68     void dumpDatabaseCallbacks(const CppArgumentList&, CppVariant*);
       
    69 
       
    70     // This function sets a flag that tells the test_shell to print a line of
       
    71     // descriptive text for each editing command.  It takes no arguments, and
       
    72     // ignores any that may be present.
       
    73     void dumpEditingCallbacks(const CppArgumentList&, CppVariant*);
       
    74 
       
    75     // This function sets a flag that tells the test_shell to print a line of
       
    76     // descriptive text for each frame load callback.  It takes no arguments, and
       
    77     // ignores any that may be present.
       
    78     void dumpFrameLoadCallbacks(const CppArgumentList&, CppVariant*);
       
    79 
       
    80     // This function sets a flag that tells the test_shell to print out a text
       
    81     // representation of the back/forward list.  It ignores all arguments.
       
    82     void dumpBackForwardList(const CppArgumentList&, CppVariant*);
       
    83 
       
    84     // This function sets a flag that tells the test_shell to print out the
       
    85     // scroll offsets of the child frames.  It ignores all.
       
    86     void dumpChildFrameScrollPositions(const CppArgumentList&, CppVariant*);
       
    87 
       
    88     // This function sets a flag that tells the test_shell to recursively
       
    89     // dump all frames as plain text if the dumpAsText flag is set.
       
    90     // It takes no arguments, and ignores any that may be present.
       
    91     void dumpChildFramesAsText(const CppArgumentList&, CppVariant*);
       
    92 
       
    93     // This function sets a flag that tells the test_shell to dump all calls
       
    94     // to window.status().
       
    95     // It takes no arguments, and ignores any that may be present.
       
    96     void dumpWindowStatusChanges(const CppArgumentList&, CppVariant*);
       
    97 
       
    98     // When called with a boolean argument, this sets a flag that controls
       
    99     // whether content-editable elements accept editing focus when an editing
       
   100     // attempt is made. It ignores any additional arguments.
       
   101     void setAcceptsEditing(const CppArgumentList&, CppVariant*);
       
   102 
       
   103     // Functions for dealing with windows.  By default we block all new windows.
       
   104     void windowCount(const CppArgumentList&, CppVariant*);
       
   105     void setCanOpenWindows(const CppArgumentList&, CppVariant*);
       
   106     void setCloseRemainingWindowsWhenComplete(const CppArgumentList&, CppVariant*);
       
   107 
       
   108     // By default, tests end when page load is complete.  These methods are used
       
   109     // to delay the completion of the test until notifyDone is called.
       
   110     void waitUntilDone(const CppArgumentList&, CppVariant*);
       
   111     void notifyDone(const CppArgumentList&, CppVariant*);
       
   112     void notifyDoneTimedOut();
       
   113 
       
   114     // Methods for adding actions to the work queue.  Used in conjunction with
       
   115     // waitUntilDone/notifyDone above.
       
   116     void queueBackNavigation(const CppArgumentList&, CppVariant*);
       
   117     void queueForwardNavigation(const CppArgumentList&, CppVariant*);
       
   118     void queueReload(const CppArgumentList&, CppVariant*);
       
   119     void queueLoadingScript(const CppArgumentList&, CppVariant*);
       
   120     void queueNonLoadingScript(const CppArgumentList&, CppVariant*);
       
   121     void queueLoad(const CppArgumentList&, CppVariant*);
       
   122 
       
   123     // Although this is named "objC" to match the Mac version, it actually tests
       
   124     // the identity of its two arguments in C++.
       
   125     void objCIdentityIsEqual(const CppArgumentList&, CppVariant*);
       
   126 
       
   127     // Changes the cookie policy from the default to allow all cookies.
       
   128     void setAlwaysAcceptCookies(const CppArgumentList&, CppVariant*);
       
   129 
       
   130     // Shows DevTools window.
       
   131     void showWebInspector(const CppArgumentList&, CppVariant*);
       
   132     void closeWebInspector(const CppArgumentList&, CppVariant*);
       
   133 
       
   134     // Gives focus to the window.
       
   135     void setWindowIsKey(const CppArgumentList&, CppVariant*);
       
   136 
       
   137     // Method that controls whether pressing Tab key cycles through page elements
       
   138     // or inserts a '\t' char in text area
       
   139     void setTabKeyCyclesThroughElements(const CppArgumentList&, CppVariant*);
       
   140 
       
   141     // Passes through to WebPreferences which allows the user to have a custom
       
   142     // style sheet.
       
   143     void setUserStyleSheetEnabled(const CppArgumentList&, CppVariant*);
       
   144     void setUserStyleSheetLocation(const CppArgumentList&, CppVariant*);
       
   145 
       
   146     // Passes this preference through to WebSettings.
       
   147     void setAuthorAndUserStylesEnabled(const CppArgumentList&, CppVariant*);
       
   148 
       
   149     // Puts Webkit in "dashboard compatibility mode", which is used in obscure
       
   150     // Mac-only circumstances. It's not really necessary, and will most likely
       
   151     // never be used by Chrome, but some layout tests depend on its presence.
       
   152     void setUseDashboardCompatibilityMode(const CppArgumentList&, CppVariant*);
       
   153 
       
   154     void setScrollbarPolicy(const CppArgumentList&, CppVariant*);
       
   155 
       
   156     // Causes navigation actions just printout the intended navigation instead
       
   157     // of taking you to the page. This is used for cases like mailto, where you
       
   158     // don't actually want to open the mail program.
       
   159     void setCustomPolicyDelegate(const CppArgumentList&, CppVariant*);
       
   160 
       
   161     // Delays completion of the test until the policy delegate runs.
       
   162     void waitForPolicyDelegate(const CppArgumentList&, CppVariant*);
       
   163 
       
   164     // Causes WillSendRequest to clear certain headers.
       
   165     void setWillSendRequestClearHeader(const CppArgumentList&, CppVariant*);
       
   166 
       
   167     // Causes WillSendRequest to block redirects.
       
   168     void setWillSendRequestReturnsNullOnRedirect(const CppArgumentList&, CppVariant*);
       
   169 
       
   170     // Causes WillSendRequest to return an empty request.
       
   171     void setWillSendRequestReturnsNull(const CppArgumentList&, CppVariant*);
       
   172 
       
   173     // Converts a URL starting with file:///tmp/ to the local mapping.
       
   174     void pathToLocalResource(const CppArgumentList&, CppVariant*);
       
   175 
       
   176     // Sets a bool such that when a drag is started, we fill the drag clipboard
       
   177     // with a fake file object.
       
   178     void addFileToPasteboardOnDrag(const CppArgumentList&, CppVariant*);
       
   179 
       
   180     // Executes an internal command (superset of document.execCommand() commands).
       
   181     void execCommand(const CppArgumentList&, CppVariant*);
       
   182 
       
   183     // Checks if an internal command is currently available.
       
   184     void isCommandEnabled(const CppArgumentList&, CppVariant*);
       
   185 
       
   186     // Set the WebPreference that controls webkit's popup blocking.
       
   187     void setPopupBlockingEnabled(const CppArgumentList&, CppVariant*);
       
   188 
       
   189     // If true, causes provisional frame loads to be stopped for the remainder of
       
   190     // the test.
       
   191     void setStopProvisionalFrameLoads(const CppArgumentList&, CppVariant*);
       
   192 
       
   193     // Enable or disable smart insert/delete.  This is enabled by default.
       
   194     void setSmartInsertDeleteEnabled(const CppArgumentList&, CppVariant*);
       
   195 
       
   196     // Enable or disable trailing whitespace selection on double click.
       
   197     void setSelectTrailingWhitespaceEnabled(const CppArgumentList&, CppVariant*);
       
   198 
       
   199     void pauseAnimationAtTimeOnElementWithId(const CppArgumentList&, CppVariant*);
       
   200     void pauseTransitionAtTimeOnElementWithId(const CppArgumentList&, CppVariant*);
       
   201     void elementDoesAutoCompleteForElementWithId(const CppArgumentList&, CppVariant*);
       
   202     void numberOfActiveAnimations(const CppArgumentList&, CppVariant*);
       
   203 
       
   204     void disableImageLoading(const CppArgumentList&, CppVariant*);
       
   205 
       
   206     void setIconDatabaseEnabled(const CppArgumentList&, CppVariant*);
       
   207 
       
   208     void dumpSelectionRect(const CppArgumentList&, CppVariant*);
       
   209 
       
   210     // Grants permission for desktop notifications to an origin
       
   211     void grantDesktopNotificationPermission(const CppArgumentList&, CppVariant*);
       
   212 
       
   213     void setEditingBehavior(const CppArgumentList&, CppVariant*);
       
   214 
       
   215     // The following are only stubs.  TODO(pamg): Implement any of these that
       
   216     // are needed to pass the layout tests.
       
   217     void dumpAsWebArchive(const CppArgumentList&, CppVariant*);
       
   218     void dumpTitleChanges(const CppArgumentList&, CppVariant*);
       
   219     void dumpResourceLoadCallbacks(const CppArgumentList&, CppVariant*);
       
   220     void setMainFrameIsFirstResponder(const CppArgumentList&, CppVariant*);
       
   221     void display(const CppArgumentList&, CppVariant*);
       
   222     void testRepaint(const CppArgumentList&, CppVariant*);
       
   223     void repaintSweepHorizontally(const CppArgumentList&, CppVariant*);
       
   224     void clearBackForwardList(const CppArgumentList&, CppVariant*);
       
   225     void keepWebHistory(const CppArgumentList&, CppVariant*);
       
   226     void storeWebScriptObject(const CppArgumentList&, CppVariant*);
       
   227     void accessStoredWebScriptObject(const CppArgumentList&, CppVariant*);
       
   228     void objCClassNameOf(const CppArgumentList&, CppVariant*);
       
   229     void addDisallowedURL(const CppArgumentList&, CppVariant*);
       
   230     void callShouldCloseOnWebView(const CppArgumentList&, CppVariant*);
       
   231     void setCallCloseOnWebViews(const CppArgumentList&, CppVariant*);
       
   232     void setPrivateBrowsingEnabled(const CppArgumentList&, CppVariant*);
       
   233 
       
   234     void setJavaScriptCanAccessClipboard(const CppArgumentList&, CppVariant*);
       
   235     void setXSSAuditorEnabled(const CppArgumentList&, CppVariant*);
       
   236     void evaluateScriptInIsolatedWorld(const CppArgumentList&, CppVariant*);
       
   237     void overridePreference(const CppArgumentList&, CppVariant*);
       
   238     void setAllowUniversalAccessFromFileURLs(const CppArgumentList&, CppVariant*);
       
   239     void setAllowFileAccessFromFileURLs(const CppArgumentList&, CppVariant*);
       
   240 
       
   241 
       
   242     // The fallback method is called when a nonexistent method is called on
       
   243     // the layout test controller object.
       
   244     // It is usefull to catch typos in the JavaScript code (a few layout tests
       
   245     // do have typos in them) and it allows the script to continue running in
       
   246     // that case (as the Mac does).
       
   247     void fallbackMethod(const CppArgumentList&, CppVariant*);
       
   248 
       
   249     // Allows layout tests to manage origins' whitelisting.
       
   250     void addOriginAccessWhitelistEntry(const CppArgumentList&, CppVariant*);
       
   251     void removeOriginAccessWhitelistEntry(const CppArgumentList&, CppVariant*);
       
   252 
       
   253     // Clears all databases.
       
   254     void clearAllDatabases(const CppArgumentList&, CppVariant*);
       
   255     // Sets the default quota for all origins
       
   256     void setDatabaseQuota(const CppArgumentList&, CppVariant*);
       
   257 
       
   258     // Calls setlocale(LC_ALL, ...) for a specified locale.
       
   259     // Resets between tests.
       
   260     void setPOSIXLocale(const CppArgumentList&, CppVariant*);
       
   261 
       
   262     // Gets the value of the counter in the element specified by its ID.
       
   263     void counterValueForElementById(const CppArgumentList&, CppVariant*);
       
   264 
       
   265     // Gets the number of page where the specified element will be put.
       
   266     void pageNumberForElementById(const CppArgumentList&, CppVariant*);
       
   267 
       
   268     // Gets the number of pages to be printed.
       
   269     void numberOfPages(const CppArgumentList&, CppVariant*);
       
   270 
       
   271 
       
   272     // Allows layout tests to start Timeline profiling.
       
   273     void setTimelineProfilingEnabled(const CppArgumentList&, CppVariant*);
       
   274 
       
   275     // Allows layout tests to exec scripts at WebInspector side.
       
   276     void evaluateInWebInspector(const CppArgumentList&, CppVariant*);
       
   277 
       
   278     // Forces the selection colors for testing under Linux.
       
   279     void forceRedSelectionColors(const CppArgumentList&, CppVariant*);
       
   280 
       
   281     // Adds a user script or user style sheet to be injected into new documents.
       
   282     void addUserScript(const CppArgumentList&, CppVariant*);
       
   283     void addUserStyleSheet(const CppArgumentList&, CppVariant*);
       
   284 
       
   285     // Geolocation related functions.
       
   286     void setGeolocationPermission(const CppArgumentList&, CppVariant*);
       
   287     void setMockGeolocationPosition(const CppArgumentList&, CppVariant*);
       
   288     void setMockGeolocationError(const CppArgumentList&, CppVariant*);
       
   289 
       
   290     // Empty stub method to keep parity with object model exposed by global LayoutTestController.
       
   291     void abortModal(const CppArgumentList&, CppVariant*);
       
   292 
       
   293 public:
       
   294     // The following methods are not exposed to JavaScript.
       
   295     void setWorkQueueFrozen(bool frozen) { m_workQueue.setFrozen(frozen); }
       
   296 
       
   297     bool shouldDumpAsText() { return m_dumpAsText; }
       
   298     bool shouldDumpEditingCallbacks() { return m_dumpEditingCallbacks; }
       
   299     bool shouldDumpFrameLoadCallbacks() { return m_dumpFrameLoadCallbacks; }
       
   300     void setShouldDumpFrameLoadCallbacks(bool value) { m_dumpFrameLoadCallbacks = value; }
       
   301     bool shouldDumpResourceLoadCallbacks() {return m_dumpResourceLoadCallbacks; }
       
   302     bool shouldDumpStatusCallbacks() { return m_dumpWindowStatusChanges; }
       
   303     bool shouldDumpSelectionRect() { return m_dumpSelectionRect; }
       
   304     bool shouldDumpBackForwardList() { return m_dumpBackForwardList; }
       
   305     bool shouldDumpTitleChanges() { return m_dumpTitleChanges; }
       
   306     bool shouldDumpChildFrameScrollPositions() { return m_dumpChildFrameScrollPositions; }
       
   307     bool shouldDumpChildFramesAsText() { return m_dumpChildFramesAsText; }
       
   308     bool shouldGeneratePixelResults() { return m_generatePixelResults; }
       
   309     bool acceptsEditing() { return m_acceptsEditing; }
       
   310     bool canOpenWindows() { return m_canOpenWindows; }
       
   311     bool shouldAddFileToPasteboard() { return m_shouldAddFileToPasteboard; }
       
   312     bool stopProvisionalFrameLoads() { return m_stopProvisionalFrameLoads; }
       
   313 
       
   314     bool testRepaint() const { return m_testRepaint; }
       
   315     bool sweepHorizontally() const { return m_sweepHorizontally; }
       
   316 
       
   317     // Called by the webview delegate when the toplevel frame load is done.
       
   318     void locationChangeDone();
       
   319 
       
   320     // Called by the webview delegate when the policy delegate runs if the
       
   321     // waitForPolicyDelegate was called.
       
   322     void policyDelegateDone();
       
   323 
       
   324     // Reinitializes all static values.  The reset() method should be called
       
   325     // before the start of each test (currently from
       
   326     // TestShell::runFileTest).
       
   327     void reset();
       
   328 
       
   329     // A single item in the work queue.
       
   330     class WorkItem {
       
   331     public:
       
   332         virtual ~WorkItem() {}
       
   333 
       
   334         // Returns true if this started a load.
       
   335         virtual bool run(TestShell* shell) = 0;
       
   336     };
       
   337 
       
   338 private:
       
   339     friend class WorkItem;
       
   340     friend class WorkQueue;
       
   341 
       
   342     // Helper class for managing events queued by methods like queueLoad or
       
   343     // queueScript.
       
   344     class WorkQueue {
       
   345     public:
       
   346         WorkQueue(LayoutTestController* controller) : m_frozen(false), m_controller(controller) {}
       
   347         virtual ~WorkQueue();
       
   348         void processWorkSoon();
       
   349 
       
   350         // Reset the state of the class between tests.
       
   351         void reset();
       
   352 
       
   353         void addWork(WorkItem* work);
       
   354 
       
   355         void setFrozen(bool frozen) { m_frozen = frozen; }
       
   356         bool isEmpty() { return m_queue.isEmpty(); }
       
   357 
       
   358     private:
       
   359         void processWork();
       
   360 
       
   361         base::OneShotTimer<WorkQueue> m_timer;
       
   362         Deque<WorkItem*> m_queue;
       
   363         bool m_frozen;
       
   364         LayoutTestController* m_controller;
       
   365     };
       
   366 
       
   367     // Support for overridePreference.
       
   368     bool cppVariantToBool(const CppVariant&);
       
   369     int32_t cppVariantToInt32(const CppVariant&);
       
   370     WebKit::WebString cppVariantToWebString(const CppVariant&);
       
   371 
       
   372     void logErrorToConsole(const std::string&);
       
   373     void completeNotifyDone(bool isTimeout);
       
   374 
       
   375     bool pauseAnimationAtTimeOnElementWithId(const WebKit::WebString& animationName, double time, const WebKit::WebString& elementId);
       
   376     bool pauseTransitionAtTimeOnElementWithId(const WebKit::WebString& propertyName, double time, const WebKit::WebString& elementId);
       
   377     bool elementDoesAutoCompleteForElementWithId(const WebKit::WebString&);
       
   378     int numberOfActiveAnimations();
       
   379 
       
   380     // Used for test timeouts.
       
   381     ScopedRunnableMethodFactory<LayoutTestController> m_timeoutFactory;
       
   382 
       
   383     // Non-owning pointer.  The LayoutTestController is owned by the host.
       
   384     TestShell* m_shell;
       
   385 
       
   386     // If true, the test_shell will produce a plain text dump rather than a
       
   387     // text representation of the renderer.
       
   388     bool m_dumpAsText;
       
   389 
       
   390     // If true, the test_shell will write a descriptive line for each editing
       
   391     // command.
       
   392     bool m_dumpEditingCallbacks;
       
   393 
       
   394     // If true, the test_shell will draw the bounds of the current selection rect
       
   395     // taking possible transforms of the selection rect into account.
       
   396     bool m_dumpSelectionRect;
       
   397 
       
   398     // If true, the test_shell will output a descriptive line for each frame
       
   399     // load callback.
       
   400     bool m_dumpFrameLoadCallbacks;
       
   401 
       
   402     // If true, the test_shell will output a descriptive line for each resource
       
   403     // load callback.
       
   404     bool m_dumpResourceLoadCallbacks;
       
   405 
       
   406     // If true, the test_shell will produce a dump of the back forward list as
       
   407     // well.
       
   408     bool m_dumpBackForwardList;
       
   409 
       
   410     // If true, the test_shell will print out the child frame scroll offsets as
       
   411     // well.
       
   412     bool m_dumpChildFrameScrollPositions;
       
   413 
       
   414     // If true and if dump_as_text_ is true, the test_shell will recursively
       
   415     // dump all frames as plain text.
       
   416     bool m_dumpChildFramesAsText;
       
   417 
       
   418     // If true, the test_shell will dump all changes to window.status.
       
   419     bool m_dumpWindowStatusChanges;
       
   420 
       
   421     // If true, output a message when the page title is changed.
       
   422     bool m_dumpTitleChanges;
       
   423 
       
   424     // If true, the test_shell will generate pixel results in dumpAsText mode
       
   425     bool m_generatePixelResults;
       
   426 
       
   427     // If true, the element will be treated as editable.  This value is returned
       
   428     // from various editing callbacks that are called just before edit operations
       
   429     // are allowed.
       
   430     bool m_acceptsEditing;
       
   431 
       
   432     // If true, new windows can be opened via javascript or by plugins.  By
       
   433     // default, set to false and can be toggled to true using
       
   434     // setCanOpenWindows().
       
   435     bool m_canOpenWindows;
       
   436 
       
   437     // When reset is called, go through and close all but the main test shell
       
   438     // window.  By default, set to true but toggled to false using
       
   439     // setCloseRemainingWindowsWhenComplete().
       
   440     bool m_closeRemainingWindows;
       
   441 
       
   442     // If true, pixel dump will be produced as a series of 1px-tall, view-wide
       
   443     // individual paints over the height of the view.
       
   444     bool m_testRepaint;
       
   445     // If true and test_repaint_ is true as well, pixel dump will be produced as
       
   446     // a series of 1px-wide, view-tall paints across the width of the view.
       
   447     bool m_sweepHorizontally;
       
   448 
       
   449     // If true and a drag starts, adds a file to the drag&drop clipboard.
       
   450     bool m_shouldAddFileToPasteboard;
       
   451 
       
   452     // If true, stops provisional frame loads during the
       
   453     // DidStartProvisionalLoadForFrame callback.
       
   454     bool m_stopProvisionalFrameLoads;
       
   455 
       
   456     // If true, don't dump output until notifyDone is called.
       
   457     bool m_waitUntilDone;
       
   458 
       
   459     WorkQueue m_workQueue;
       
   460 
       
   461     CppVariant m_globalFlag;
       
   462 
       
   463     // Bound variable counting the number of top URLs visited.
       
   464     CppVariant m_webHistoryItemCount;
       
   465 
       
   466     WebKit::WebURL m_userStyleSheetLocation;
       
   467 };
       
   468 
       
   469 #endif // LayoutTestController_h