2 * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #ifndef LayoutTestController_h
30 #define LayoutTestController_h
32 #include <JavaScriptCore/JSObjectRef.h>
33 #include <JavaScriptCore/JSRetainPtr.h>
38 #include <wtf/PassRefPtr.h>
39 #include <wtf/RefCounted.h>
41 class LayoutTestController : public RefCounted<LayoutTestController> {
43 static PassRefPtr<LayoutTestController> create(const std::string& testPathOrURL, const std::string& expectedPixelHash);
44 ~LayoutTestController();
46 void makeWindowObject(JSContextRef context, JSObjectRef windowObject, JSValueRef* exception);
48 void addDisallowedURL(JSStringRef url);
49 void addURLToRedirect(std::string origin, std::string destination);
50 const std::string& redirectionDestinationForURL(std::string);
51 void clearAllApplicationCaches();
52 void clearAllDatabases();
53 void clearApplicationCacheForOrigin(JSStringRef name);
54 void clearBackForwardList();
55 void clearPersistentUserStyleSheet();
56 bool callShouldCloseOnWebView();
57 JSStringRef copyDecodedHostName(JSStringRef name);
58 JSStringRef copyEncodedHostName(JSStringRef name);
59 JSRetainPtr<JSStringRef> counterValueForElementById(JSStringRef id);
60 void disableImageLoading();
61 void dispatchPendingLoadRequests();
63 void displayInvalidatedRegion();
64 void execCommand(JSStringRef name, JSStringRef value);
65 bool findString(JSContextRef, JSStringRef, JSObjectRef optionsArray);
67 JSValueRef originsWithApplicationCache(JSContextRef);
68 long long applicationCacheDiskUsageForOrigin(JSStringRef name);
69 bool isCommandEnabled(JSStringRef name);
70 void keepWebHistory();
71 JSValueRef computedStyleIncludingVisitedInfo(JSContextRef, JSValueRef);
73 int numberOfPages(float pageWidthInPixels, float pageHeightInPixels);
74 int numberOfPendingGeolocationPermissionRequests();
75 void overridePreference(JSStringRef key, JSStringRef value);
76 int pageNumberForElementById(JSStringRef id, float pageWidthInPixels, float pageHeightInPixels);
77 JSRetainPtr<JSStringRef> pageProperty(const char* propertyName, int pageNumber) const;
78 JSRetainPtr<JSStringRef> pageSizeAndMarginsInPixels(int pageNumber, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft) const;
79 JSStringRef pathToLocalResource(JSContextRef, JSStringRef url);
80 void queueBackNavigation(int howFarBackward);
81 void queueForwardNavigation(int howFarForward);
82 void queueLoad(JSStringRef url, JSStringRef target);
83 void queueLoadHTMLString(JSStringRef content, JSStringRef baseURL);
84 void queueLoadAlternateHTMLString(JSStringRef content, JSStringRef baseURL, JSStringRef unreachableURL);
85 void queueLoadingScript(JSStringRef script);
86 void queueNonLoadingScript(JSStringRef script);
88 void removeAllVisitedLinks();
89 void sendWebIntentResponse(JSStringRef response);
90 void setAcceptsEditing(bool acceptsEditing);
91 void setAllowUniversalAccessFromFileURLs(bool);
92 void setAllowFileAccessFromFileURLs(bool);
93 void setAppCacheMaximumSize(unsigned long long quota);
94 void setApplicationCacheOriginQuota(unsigned long long quota);
95 void setAuthorAndUserStylesEnabled(bool);
96 void setAutofilled(JSContextRef, JSValueRef nodeObject, bool autofilled);
97 void setCacheModel(int);
98 void setCustomPolicyDelegate(bool setDelegate, bool permissive);
99 void setDatabaseQuota(unsigned long long quota);
100 void setDomainRelaxationForbiddenForURLScheme(bool forbidden, JSStringRef scheme);
101 void setDefersLoading(bool);
102 void setIconDatabaseEnabled(bool iconDatabaseEnabled);
103 void setJavaScriptCanAccessClipboard(bool flag);
104 void setAutomaticLinkDetectionEnabled(bool flag);
105 void setMainFrameIsFirstResponder(bool flag);
106 void setMockDeviceOrientation(bool canProvideAlpha, double alpha, bool canProvideBeta, double beta, bool canProvideGamma, double gamma);
107 void setMockGeolocationError(int code, JSStringRef message);
108 void setMockGeolocationPosition(double latitude, double longitude, double accuracy);
109 void addMockSpeechInputResult(JSStringRef result, double confidence, JSStringRef language);
110 void setMockSpeechInputDumpRect(bool flag);
111 void setPersistentUserStyleSheetLocation(JSStringRef path);
112 void setPluginsEnabled(bool flag);
113 void setPopupBlockingEnabled(bool flag);
114 void setPrivateBrowsingEnabled(bool flag);
115 void setSelectTrailingWhitespaceEnabled(bool flag);
116 void setSmartInsertDeleteEnabled(bool flag);
117 void setTabKeyCyclesThroughElements(bool cycles);
118 void setUseDashboardCompatibilityMode(bool flag);
119 void setUserStyleSheetEnabled(bool flag);
120 void setUserStyleSheetLocation(JSStringRef path);
121 void setValueForUser(JSContextRef, JSValueRef nodeObject, JSStringRef value);
122 void setViewModeMediaFeature(JSStringRef mode);
123 void setXSSAuditorEnabled(bool flag);
124 void setFrameFlatteningEnabled(bool enable);
125 void setSpatialNavigationEnabled(bool enable);
126 void setScrollbarPolicy(JSStringRef orientation, JSStringRef policy);
127 void startSpeechInput(JSContextRef inputElement);
128 void setPageVisibility(const char*);
129 void resetPageVisibility();
131 void waitForPolicyDelegate();
132 size_t webHistoryItemCount();
133 unsigned workerThreadCount() const;
136 #if PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(WIN)
137 JSRetainPtr<JSStringRef> platformName() const;
140 void grantDesktopNotificationPermission(JSStringRef origin);
141 bool checkDesktopNotificationPermission(JSStringRef origin);
142 void ignoreDesktopNotificationPermissionRequests();
143 bool areDesktopNotificationPermissionRequestsIgnored() const { return m_areDesktopNotificationPermissionRequestsIgnored; }
144 void simulateDesktopNotificationClick(JSStringRef title);
146 bool elementDoesAutoCompleteForElementWithId(JSStringRef id);
148 bool dumpAsAudio() const { return m_dumpAsAudio; }
149 void setDumpAsAudio(bool dumpAsAudio) { m_dumpAsAudio = dumpAsAudio; }
151 bool dumpAsPDF() const { return m_dumpAsPDF; }
152 void setDumpAsPDF(bool dumpAsPDF) { m_dumpAsPDF = dumpAsPDF; }
154 bool dumpAsText() const { return m_dumpAsText; }
155 void setDumpAsText(bool dumpAsText) { m_dumpAsText = dumpAsText; }
157 bool generatePixelResults() const { return m_generatePixelResults; }
158 void setGeneratePixelResults(bool generatePixelResults) { m_generatePixelResults = generatePixelResults; }
160 bool disallowIncreaseForApplicationCacheQuota() const { return m_disallowIncreaseForApplicationCacheQuota; }
161 void setDisallowIncreaseForApplicationCacheQuota(bool disallowIncrease) { m_disallowIncreaseForApplicationCacheQuota = disallowIncrease; }
163 bool dumpApplicationCacheDelegateCallbacks() const { return m_dumpApplicationCacheDelegateCallbacks; }
164 void setDumpApplicationCacheDelegateCallbacks(bool dumpCallbacks) { m_dumpApplicationCacheDelegateCallbacks = dumpCallbacks; }
166 bool dumpBackForwardList() const { return m_dumpBackForwardList; }
167 void setDumpBackForwardList(bool dumpBackForwardList) { m_dumpBackForwardList = dumpBackForwardList; }
169 bool dumpChildFrameScrollPositions() const { return m_dumpChildFrameScrollPositions; }
170 void setDumpChildFrameScrollPositions(bool dumpChildFrameScrollPositions) { m_dumpChildFrameScrollPositions = dumpChildFrameScrollPositions; }
172 bool dumpChildFramesAsText() const { return m_dumpChildFramesAsText; }
173 void setDumpChildFramesAsText(bool dumpChildFramesAsText) { m_dumpChildFramesAsText = dumpChildFramesAsText; }
175 bool dumpDatabaseCallbacks() const { return m_dumpDatabaseCallbacks; }
176 void setDumpDatabaseCallbacks(bool dumpDatabaseCallbacks) { m_dumpDatabaseCallbacks = dumpDatabaseCallbacks; }
178 bool dumpDOMAsWebArchive() const { return m_dumpDOMAsWebArchive; }
179 void setDumpDOMAsWebArchive(bool dumpDOMAsWebArchive) { m_dumpDOMAsWebArchive = dumpDOMAsWebArchive; }
181 bool dumpEditingCallbacks() const { return m_dumpEditingCallbacks; }
182 void setDumpEditingCallbacks(bool dumpEditingCallbacks) { m_dumpEditingCallbacks = dumpEditingCallbacks; }
184 bool dumpFrameLoadCallbacks() const { return m_dumpFrameLoadCallbacks; }
185 void setDumpFrameLoadCallbacks(bool dumpFrameLoadCallbacks) { m_dumpFrameLoadCallbacks = dumpFrameLoadCallbacks; }
187 bool dumpProgressFinishedCallback() const { return m_dumpProgressFinishedCallback; }
188 void setDumpProgressFinishedCallback(bool dumpProgressFinishedCallback) { m_dumpProgressFinishedCallback = dumpProgressFinishedCallback; }
190 bool dumpUserGestureInFrameLoadCallbacks() const { return m_dumpUserGestureInFrameLoadCallbacks; }
191 void setDumpUserGestureInFrameLoadCallbacks(bool dumpUserGestureInFrameLoadCallbacks) { m_dumpUserGestureInFrameLoadCallbacks = dumpUserGestureInFrameLoadCallbacks; }
193 bool dumpHistoryDelegateCallbacks() const { return m_dumpHistoryDelegateCallbacks; }
194 void setDumpHistoryDelegateCallbacks(bool dumpHistoryDelegateCallbacks) { m_dumpHistoryDelegateCallbacks = dumpHistoryDelegateCallbacks; }
196 bool dumpResourceLoadCallbacks() const { return m_dumpResourceLoadCallbacks; }
197 void setDumpResourceLoadCallbacks(bool dumpResourceLoadCallbacks) { m_dumpResourceLoadCallbacks = dumpResourceLoadCallbacks; }
199 bool dumpResourceResponseMIMETypes() const { return m_dumpResourceResponseMIMETypes; }
200 void setDumpResourceResponseMIMETypes(bool dumpResourceResponseMIMETypes) { m_dumpResourceResponseMIMETypes = dumpResourceResponseMIMETypes; }
202 bool dumpSelectionRect() const { return m_dumpSelectionRect; }
203 void setDumpSelectionRect(bool dumpSelectionRect) { m_dumpSelectionRect = dumpSelectionRect; }
205 bool dumpSourceAsWebArchive() const { return m_dumpSourceAsWebArchive; }
206 void setDumpSourceAsWebArchive(bool dumpSourceAsWebArchive) { m_dumpSourceAsWebArchive = dumpSourceAsWebArchive; }
208 bool dumpStatusCallbacks() const { return m_dumpStatusCallbacks; }
209 void setDumpStatusCallbacks(bool dumpStatusCallbacks) { m_dumpStatusCallbacks = dumpStatusCallbacks; }
211 bool dumpTitleChanges() const { return m_dumpTitleChanges; }
212 void setDumpTitleChanges(bool dumpTitleChanges) { m_dumpTitleChanges = dumpTitleChanges; }
214 bool dumpIconChanges() const { return m_dumpIconChanges; }
215 void setDumpIconChanges(bool dumpIconChanges) { m_dumpIconChanges = dumpIconChanges; }
217 bool dumpVisitedLinksCallback() const { return m_dumpVisitedLinksCallback; }
218 void setDumpVisitedLinksCallback(bool dumpVisitedLinksCallback) { m_dumpVisitedLinksCallback = dumpVisitedLinksCallback; }
220 bool dumpWillCacheResponse() const { return m_dumpWillCacheResponse; }
221 void setDumpWillCacheResponse(bool dumpWillCacheResponse) { m_dumpWillCacheResponse = dumpWillCacheResponse; }
223 bool callCloseOnWebViews() const { return m_callCloseOnWebViews; }
224 void setCallCloseOnWebViews(bool callCloseOnWebViews) { m_callCloseOnWebViews = callCloseOnWebViews; }
226 bool canOpenWindows() const { return m_canOpenWindows; }
227 void setCanOpenWindows(bool canOpenWindows) { m_canOpenWindows = canOpenWindows; }
229 bool closeRemainingWindowsWhenComplete() const { return m_closeRemainingWindowsWhenComplete; }
230 void setCloseRemainingWindowsWhenComplete(bool closeRemainingWindowsWhenComplete) { m_closeRemainingWindowsWhenComplete = closeRemainingWindowsWhenComplete; }
232 bool newWindowsCopyBackForwardList() const { return m_newWindowsCopyBackForwardList; }
233 void setNewWindowsCopyBackForwardList(bool newWindowsCopyBackForwardList) { m_newWindowsCopyBackForwardList = newWindowsCopyBackForwardList; }
235 bool stopProvisionalFrameLoads() const { return m_stopProvisionalFrameLoads; }
236 void setStopProvisionalFrameLoads(bool stopProvisionalFrameLoads) { m_stopProvisionalFrameLoads = stopProvisionalFrameLoads; }
238 bool testOnscreen() const { return m_testOnscreen; }
239 void setTestOnscreen(bool testOnscreen) { m_testOnscreen = testOnscreen; }
241 bool testRepaint() const { return m_testRepaint; }
242 void setTestRepaint(bool testRepaint) { m_testRepaint = testRepaint; }
244 bool testRepaintSweepHorizontally() const { return m_testRepaintSweepHorizontally; }
245 void setTestRepaintSweepHorizontally(bool testRepaintSweepHorizontally) { m_testRepaintSweepHorizontally = testRepaintSweepHorizontally; }
247 bool waitToDump() const { return m_waitToDump; }
248 void setWaitToDump(bool waitToDump);
249 void waitToDumpWatchdogTimerFired();
251 const std::set<std::string>& willSendRequestClearHeaders() const { return m_willSendRequestClearHeaders; }
252 void setWillSendRequestClearHeader(std::string header) { m_willSendRequestClearHeaders.insert(header); }
254 bool willSendRequestReturnsNull() const { return m_willSendRequestReturnsNull; }
255 void setWillSendRequestReturnsNull(bool returnsNull) { m_willSendRequestReturnsNull = returnsNull; }
257 bool willSendRequestReturnsNullOnRedirect() const { return m_willSendRequestReturnsNullOnRedirect; }
258 void setWillSendRequestReturnsNullOnRedirect(bool returnsNull) { m_willSendRequestReturnsNullOnRedirect = returnsNull; }
260 bool windowIsKey() const { return m_windowIsKey; }
261 void setWindowIsKey(bool windowIsKey);
263 bool alwaysAcceptCookies() const { return m_alwaysAcceptCookies; }
264 void setAlwaysAcceptCookies(bool alwaysAcceptCookies);
266 bool handlesAuthenticationChallenges() const { return m_handlesAuthenticationChallenges; }
267 void setHandlesAuthenticationChallenges(bool handlesAuthenticationChallenges) { m_handlesAuthenticationChallenges = handlesAuthenticationChallenges; }
269 bool isPrinting() const { return m_isPrinting; }
270 void setIsPrinting(bool isPrinting) { m_isPrinting = isPrinting; }
272 const std::string& authenticationUsername() const { return m_authenticationUsername; }
273 void setAuthenticationUsername(std::string username) { m_authenticationUsername = username; }
275 const std::string& authenticationPassword() const { return m_authenticationPassword; }
276 void setAuthenticationPassword(std::string password) { m_authenticationPassword = password; }
278 bool globalFlag() const { return m_globalFlag; }
279 void setGlobalFlag(bool globalFlag) { m_globalFlag = globalFlag; }
281 bool deferMainResourceDataLoad() const { return m_deferMainResourceDataLoad; }
282 void setDeferMainResourceDataLoad(bool flag) { m_deferMainResourceDataLoad = flag; }
284 bool useDeferredFrameLoading() const { return m_useDeferredFrameLoading; }
285 void setUseDeferredFrameLoading(bool flag) { m_useDeferredFrameLoading = flag; }
287 const std::string& testPathOrURL() const { return m_testPathOrURL; }
288 const std::string& expectedPixelHash() const { return m_expectedPixelHash; }
290 const std::string& encodedAudioData() const { return m_encodedAudioData; }
291 void setEncodedAudioData(const std::string& encodedAudioData) { m_encodedAudioData = encodedAudioData; }
293 bool pauseAnimationAtTimeOnElementWithId(JSStringRef animationName, double time, JSStringRef elementId);
294 bool pauseTransitionAtTimeOnElementWithId(JSStringRef propertyName, double time, JSStringRef elementId);
295 unsigned numberOfActiveAnimations() const;
297 void addOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains);
298 void removeOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains);
300 void addUserScript(JSStringRef source, bool runAtStart, bool allFrames);
301 void addUserStyleSheet(JSStringRef source, bool allFrames);
303 void setGeolocationPermission(bool allow);
304 bool isGeolocationPermissionSet() const { return m_isGeolocationPermissionSet; }
305 bool geolocationPermission() const { return m_geolocationPermission; }
307 void setDeveloperExtrasEnabled(bool);
308 void setAsynchronousSpellCheckingEnabled(bool);
309 void showWebInspector();
310 void closeWebInspector();
311 void evaluateInWebInspector(long callId, JSStringRef script);
312 void evaluateScriptInIsolatedWorld(unsigned worldID, JSObjectRef globalObject, JSStringRef script);
313 void evaluateScriptInIsolatedWorldAndReturnValue(unsigned worldID, JSObjectRef globalObject, JSStringRef script);
315 bool shouldStayOnPageAfterHandlingBeforeUnload() const { return m_shouldStayOnPageAfterHandlingBeforeUnload; }
316 void setShouldStayOnPageAfterHandlingBeforeUnload(bool shouldStayOnPageAfterHandlingBeforeUnload) { m_shouldStayOnPageAfterHandlingBeforeUnload = shouldStayOnPageAfterHandlingBeforeUnload; }
318 void addChromeInputField();
319 void removeChromeInputField();
322 void setBackingScaleFactor(double);
324 void setPOSIXLocale(JSStringRef locale);
326 void setWebViewEditable(bool);
330 void dumpConfigurationForViewport(int deviceDPI, int deviceWidth, int deviceHeight, int availableWidth, int availableHeight);
332 static void setSerializeHTTPLoads(bool serialize);
334 // The following API test functions should probably be moved to platform-specific
335 // unit tests outside of DRT once they exist.
336 void apiTestNewWindowDataLoadBaseURL(JSStringRef utf8Data, JSStringRef baseURL);
337 void apiTestGoToCurrentBackForwardItem();
339 // Simulate a request an embedding application could make, populating per-session credential storage.
340 void authenticateSession(JSStringRef url, JSStringRef username, JSStringRef password);
342 JSRetainPtr<JSStringRef> layerTreeAsText() const;
344 JSRetainPtr<JSStringRef> markerTextForListItem(JSContextRef context, JSValueRef nodeObject) const;
346 JSValueRef originsWithLocalStorage(JSContextRef);
347 void deleteAllLocalStorage();
348 void deleteLocalStorageForOrigin(JSStringRef originIdentifier);
349 long long localStorageDiskUsageForOrigin(JSStringRef originIdentifier);
350 void observeStorageTrackerNotifications(unsigned number);
351 void syncLocalStorage();
353 void setShouldPaintBrokenImage(bool);
354 bool shouldPaintBrokenImage() const { return m_shouldPaintBrokenImage; }
356 static const unsigned maxViewWidth;
357 static const unsigned maxViewHeight;
359 void setMinimumTimerInterval(double);
361 void setTextDirection(JSStringRef);
363 // Custom full screen behavior.
364 void setHasCustomFullScreenBehavior(bool value) { m_customFullScreenBehavior = value; }
365 bool hasCustomFullScreenBehavior() const { return m_customFullScreenBehavior; }
368 LayoutTestController(const std::string& testPathOrURL, const std::string& expectedPixelHash);
370 void setGeolocationPermissionCommon(bool allow);
372 bool m_disallowIncreaseForApplicationCacheQuota;
373 bool m_dumpApplicationCacheDelegateCallbacks;
377 bool m_dumpBackForwardList;
378 bool m_dumpChildFrameScrollPositions;
379 bool m_dumpChildFramesAsText;
380 bool m_dumpDOMAsWebArchive;
381 bool m_dumpDatabaseCallbacks;
382 bool m_dumpEditingCallbacks;
383 bool m_dumpFrameLoadCallbacks;
384 bool m_dumpProgressFinishedCallback;
385 bool m_dumpUserGestureInFrameLoadCallbacks;
386 bool m_dumpHistoryDelegateCallbacks;
387 bool m_dumpResourceLoadCallbacks;
388 bool m_dumpResourceResponseMIMETypes;
389 bool m_dumpSelectionRect;
390 bool m_dumpSourceAsWebArchive;
391 bool m_dumpStatusCallbacks;
392 bool m_dumpTitleChanges;
393 bool m_dumpIconChanges;
394 bool m_dumpVisitedLinksCallback;
395 bool m_dumpWillCacheResponse;
396 bool m_generatePixelResults;
397 bool m_callCloseOnWebViews;
398 bool m_canOpenWindows;
399 bool m_closeRemainingWindowsWhenComplete;
400 bool m_newWindowsCopyBackForwardList;
401 bool m_stopProvisionalFrameLoads;
404 bool m_testRepaintSweepHorizontally;
405 bool m_waitToDump; // True if waitUntilDone() has been called, but notifyDone() has not yet been called.
406 bool m_willSendRequestReturnsNull;
407 bool m_willSendRequestReturnsNullOnRedirect;
409 bool m_alwaysAcceptCookies;
411 bool m_isGeolocationPermissionSet;
412 bool m_geolocationPermission;
413 bool m_handlesAuthenticationChallenges;
415 bool m_deferMainResourceDataLoad;
416 bool m_useDeferredFrameLoading;
417 bool m_shouldPaintBrokenImage;
418 bool m_shouldStayOnPageAfterHandlingBeforeUnload;
419 bool m_areDesktopNotificationPermissionRequestsIgnored;
420 bool m_customFullScreenBehavior;
422 std::string m_authenticationUsername;
423 std::string m_authenticationPassword;
424 std::string m_testPathOrURL;
425 std::string m_expectedPixelHash; // empty string if no hash
427 std::set<std::string> m_willSendRequestClearHeaders;
429 // base64 encoded WAV audio data is stored here.
430 std::string m_encodedAudioData;
432 // origins which have been granted desktop notification access
433 std::vector<JSStringRef> m_desktopNotificationAllowedOrigins;
435 std::map<std::string, std::string> m_URLsToRedirect;
437 static JSClassRef getJSClass();
438 static JSStaticValue* staticValues();
439 static JSStaticFunction* staticFunctions();
442 #endif // LayoutTestController_h