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 |
|