Enable -Wcast-qual for WebInspectorUI, WebKitLegacy, WebKit projects
[WebKit-https.git] / Source / WebKitLegacy / mac / WebView / WebViewPrivate.h
1 /*
2  * Copyright (C) 2005-2014 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
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 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. 
16  *
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.
27  */
28
29 #import <WebKitLegacy/WebView.h>
30 #import <WebKitLegacy/WebFramePrivate.h>
31 #import <JavaScriptCore/JSBase.h>
32
33 #if TARGET_OS_IPHONE
34 #import <CoreGraphics/CGColor.h>
35 #endif
36
37 #if !defined(ENABLE_DASHBOARD_SUPPORT)
38 #if TARGET_OS_IPHONE
39 #define ENABLE_DASHBOARD_SUPPORT 0
40 #else
41 #define ENABLE_DASHBOARD_SUPPORT 1
42 #endif
43 #endif
44
45 #if !defined(ENABLE_REMOTE_INSPECTOR)
46 // FIXME: Should we just remove this ENABLE flag everywhere?
47 #define ENABLE_REMOTE_INSPECTOR 1
48 #endif
49
50 #if !defined(ENABLE_TOUCH_EVENTS)
51 #if TARGET_OS_IPHONE
52 #define ENABLE_TOUCH_EVENTS 1
53 #else
54 #define ENABLE_TOUCH_EVENTS 0
55 #endif
56 #endif
57
58 @class UIColor;
59 @class UIImage;
60 @class NSError;
61 @class WebFrame;
62 @class WebDeviceOrientation;
63 @class WebGeolocationPosition;
64 @class WebInspector;
65 @class WebNotification;
66 @class WebPreferences;
67 @class WebScriptWorld;
68 @class WebSecurityOrigin;
69 @class WebTextIterator;
70 #if TARGET_OS_IPHONE
71 @class CALayer;
72 @class WebFixedPositionContent;
73
74 @protocol WebCaretChangeListener;
75 #endif
76 @protocol WebDeviceOrientationProvider;
77 @protocol WebFormDelegate;
78 @protocol WebUserMediaClient;
79
80 #if !TARGET_OS_IPHONE
81 extern NSString *_WebCanGoBackKey;
82 extern NSString *_WebCanGoForwardKey;
83 extern NSString *_WebEstimatedProgressKey;
84 extern NSString *_WebIsLoadingKey;
85 extern NSString *_WebMainFrameIconKey;
86 extern NSString *_WebMainFrameTitleKey;
87 extern NSString *_WebMainFrameURLKey;
88 extern NSString *_WebMainFrameDocumentKey;
89 #endif
90
91 #if TARGET_OS_IPHONE
92 extern NSString * const WebViewProgressEstimatedProgressKey;
93 extern NSString * const WebViewProgressBackgroundColorKey;
94 #endif
95
96 // pending public WebElementDictionary keys
97 extern NSString *WebElementTitleKey;             // NSString of the title of the element (used by Safari)
98 extern NSString *WebElementSpellingToolTipKey;   // NSString of a tooltip representing misspelling or bad grammar (used internally)
99 extern NSString *WebElementIsContentEditableKey; // NSNumber indicating whether the inner non-shared node is content editable (used internally)
100 extern NSString *WebElementMediaURLKey;          // NSURL of the media element
101
102 // other WebElementDictionary keys
103 extern NSString *WebElementLinkIsLiveKey;        // NSNumber of BOOL indicating whether the link is live or not
104 extern NSString *WebElementIsInScrollBarKey;
105
106 // One of the subviews of the WebView entered compositing mode.
107 extern NSString *_WebViewDidStartAcceleratedCompositingNotification;
108
109 #if ENABLE_REMOTE_INSPECTOR
110 // FIXME: Legacy, remove this, switch to something from JavaScriptCore Inspector::RemoteInspectorServer.
111 // Notification when the number of inspector sessions becomes non-zero or returns to 0.
112 // Check the current state via -[WebView _hasRemoteInspectorSession].
113 extern NSString *_WebViewRemoteInspectorHasSessionChangedNotification;
114 #endif
115
116 #if TARGET_OS_IPHONE
117 extern NSString *WebQuickLookFileNameKey;
118 extern NSString *WebQuickLookUTIKey;
119 #endif
120
121 #if TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000
122 @protocol UIDropSession;
123 #endif
124
125 extern NSString * const WebViewWillCloseNotification;
126
127 #if ENABLE_DASHBOARD_SUPPORT
128 typedef enum {
129     WebDashboardBehaviorAlwaysSendMouseEventsToAllWindows,
130     WebDashboardBehaviorAlwaysSendActiveNullEventsToPlugIns,
131     WebDashboardBehaviorAlwaysAcceptsFirstMouse,
132     WebDashboardBehaviorAllowWheelScrolling,
133     WebDashboardBehaviorUseBackwardCompatibilityMode
134 } WebDashboardBehavior;
135 #endif
136
137 typedef enum {
138     WebInjectAtDocumentStart,
139     WebInjectAtDocumentEnd,
140 } WebUserScriptInjectionTime;
141
142 typedef enum {
143     WebInjectInAllFrames,
144     WebInjectInTopFrameOnly
145 } WebUserContentInjectedFrames;
146
147 enum {
148     WebFindOptionsCaseInsensitive = 1 << 0,
149     WebFindOptionsAtWordStarts = 1 << 1,
150     WebFindOptionsTreatMedialCapitalAsWordStart = 1 << 2,
151     WebFindOptionsBackwards = 1 << 3,
152     WebFindOptionsWrapAround = 1 << 4,
153     WebFindOptionsStartInSelection = 1 << 5
154 };
155 typedef NSUInteger WebFindOptions;
156
157 typedef enum {
158     WebPaginationModeUnpaginated,
159     WebPaginationModeLeftToRight,
160     WebPaginationModeRightToLeft,
161     WebPaginationModeTopToBottom,
162     WebPaginationModeBottomToTop,
163 #if TARGET_OS_IPHONE
164     // FIXME: Remove these once UIKit has switched to the above.
165     WebPaginationModeHorizontal = WebPaginationModeLeftToRight,
166     WebPaginationModeVertical = WebPaginationModeTopToBottom,
167 #endif
168 } WebPaginationMode;
169
170 enum {
171     WebDidFirstLayout = 1 << 0,
172     WebDidFirstVisuallyNonEmptyLayout = 1 << 1,
173     WebDidHitRelevantRepaintedObjectsAreaThreshold = 1 << 2
174 };
175 typedef NSUInteger WebLayoutMilestones;
176
177 typedef enum {
178     WebPageVisibilityStateVisible,
179     WebPageVisibilityStateHidden,
180     WebPageVisibilityStatePrerender
181 } WebPageVisibilityState;
182
183 typedef enum {
184     WebNotificationPermissionAllowed,
185     WebNotificationPermissionNotAllowed,
186     WebNotificationPermissionDenied
187 } WebNotificationPermission;
188
189 @interface WebUITextIndicatorData : NSObject
190 @property (nonatomic, retain) UIImage *dataInteractionImage;
191 @property (nonatomic, assign) CGRect selectionRectInRootViewCoordinates;
192 @property (nonatomic, assign) CGRect textBoundingRectInRootViewCoordinates;
193 @property (nonatomic, retain) NSArray<NSValue *> *textRectsInBoundingRectCoordinates; // CGRect values
194 @property (nonatomic, assign) CGFloat contentImageScaleFactor;
195 @property (nonatomic, retain) UIImage *contentImageWithHighlight;
196 @property (nonatomic, retain) UIImage *contentImage;
197 @property (nonatomic, retain) UIImage *contentImageWithoutSelection;
198 @property (nonatomic, assign) CGRect contentImageWithoutSelectionRectInRootViewCoordinates;
199 @property (nonatomic, retain) UIColor *estimatedBackgroundColor;
200 @end
201
202 #if !TARGET_OS_IPHONE
203 @interface WebController : NSTreeController {
204     IBOutlet WebView *webView;
205 }
206 - (WebView *)webView;
207 - (void)setWebView:(WebView *)newWebView;
208 @end
209 #endif
210
211 @interface WebView (WebViewEditingActionsPendingPublic)
212
213 - (void)outdent:(id)sender;
214 - (NSDictionary *)typingAttributes;
215
216 @end
217
218 @interface WebView (WebPendingPublic)
219
220 - (void)scheduleInRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;
221 - (void)unscheduleFromRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode;
222
223 - (BOOL)findString:(NSString *)string options:(WebFindOptions)options;
224 - (DOMRange *)DOMRangeOfString:(NSString *)string relativeTo:(DOMRange *)previousRange options:(WebFindOptions)options;
225
226 - (void)setMainFrameDocumentReady:(BOOL)mainFrameDocumentReady;
227
228 - (void)setTabKeyCyclesThroughElements:(BOOL)cyclesElements;
229 - (BOOL)tabKeyCyclesThroughElements;
230
231 - (void)scrollDOMRangeToVisible:(DOMRange *)range;
232 #if TARGET_OS_IPHONE
233 - (void)scrollDOMRangeToVisible:(DOMRange *)range withInset:(CGFloat)inset;
234 #endif
235
236 /*!
237 @method setScriptDebugDelegate:
238 @abstract Set the WebView's WebScriptDebugDelegate delegate.
239 @param delegate The WebScriptDebugDelegate to set as the delegate.
240 */    
241 - (void)setScriptDebugDelegate:(id)delegate;
242
243 /*!
244 @method scriptDebugDelegate
245 @abstract Return the WebView's WebScriptDebugDelegate.
246 @result The WebView's WebScriptDebugDelegate.
247 */    
248 - (id)scriptDebugDelegate;
249
250 /*!
251     @method setHistoryDelegate:
252     @abstract Set the WebView's WebHistoryDelegate delegate.
253     @param delegate The WebHistoryDelegate to set as the delegate.
254 */    
255 - (void)setHistoryDelegate:(id)delegate;
256
257 /*!
258     @method historyDelegate
259     @abstract Return the WebView's WebHistoryDelegate delegate.
260     @result The WebView's WebHistoryDelegate delegate.
261 */    
262 - (id)historyDelegate;
263
264 - (BOOL)shouldClose;
265
266 #if !TARGET_OS_IPHONE
267 /*!
268     @method aeDescByEvaluatingJavaScriptFromString:
269     @param script The text of the JavaScript.
270     @result The result of the script, converted to an NSAppleEventDescriptor, or nil for failure.
271 */
272 - (NSAppleEventDescriptor *)aeDescByEvaluatingJavaScriptFromString:(NSString *)script;
273 #endif
274
275 // Support for displaying multiple text matches.
276 // These methods might end up moving into a protocol, so different document types can specify
277 // whether or not they implement the protocol. For now we'll just deal with HTML.
278 // These methods are still in flux; don't rely on them yet.
279 - (BOOL)canMarkAllTextMatches;
280 - (NSUInteger)countMatchesForText:(NSString *)string options:(WebFindOptions)options highlight:(BOOL)highlight limit:(NSUInteger)limit markMatches:(BOOL)markMatches;
281 - (NSUInteger)countMatchesForText:(NSString *)string inDOMRange:(DOMRange *)range options:(WebFindOptions)options highlight:(BOOL)highlight limit:(NSUInteger)limit markMatches:(BOOL)markMatches;
282 - (void)unmarkAllTextMatches;
283 - (NSArray *)rectsForTextMatches;
284
285 // Support for disabling registration with the undo manager. This is equivalent to the methods with the same names on NSTextView.
286 - (BOOL)allowsUndo;
287 - (void)setAllowsUndo:(BOOL)flag;
288
289 /*!
290     @method setPageSizeMultiplier:
291     @abstract Change the zoom factor of the page in views managed by this webView.
292     @param multiplier A fractional percentage value, 1.0 is 100%.
293 */    
294 - (void)setPageSizeMultiplier:(float)multiplier;
295
296 /*!
297     @method pageSizeMultiplier
298     @result The page size multipler.
299 */    
300 - (float)pageSizeMultiplier;
301
302 // Commands for doing page zoom.  Will end up in WebView (WebIBActions) <NSUserInterfaceValidations>
303 - (BOOL)canZoomPageIn;
304 - (IBAction)zoomPageIn:(id)sender;
305 - (BOOL)canZoomPageOut;
306 - (IBAction)zoomPageOut:(id)sender;
307 - (BOOL)canResetPageZoom;
308 - (IBAction)resetPageZoom:(id)sender;
309
310 // Sets a master volume control for all media elements in the WebView. Valid values are 0..1.
311 - (void)setMediaVolume:(float)volume;
312 - (float)mediaVolume;
313
314 // Add visited links
315 - (void)addVisitedLinks:(NSArray *)visitedLinks;
316 #if TARGET_OS_IPHONE
317 - (void)removeVisitedLink:(NSURL *)url;
318 #endif
319 @end
320
321 @interface WebView (WebPrivate)
322
323 + (void)_setIconLoadingEnabled:(BOOL)enabled;
324 + (BOOL)_isIconLoadingEnabled;
325
326 - (WebInspector *)inspector;
327
328 #if ENABLE_REMOTE_INSPECTOR
329 + (void)_enableRemoteInspector;
330 + (void)_disableRemoteInspector;
331 + (void)_disableAutoStartRemoteInspector;
332 + (BOOL)_isRemoteInspectorEnabled;
333 + (BOOL)_hasRemoteInspectorSession;
334
335 /*!
336     @method allowsRemoteInspection
337     @result Returns whether or not this WebView will allow a Remote Web Inspector
338     to attach to it.
339 */
340 - (BOOL)allowsRemoteInspection;
341
342 /*!
343     @method setAllowsRemoteInspection:
344     @param allow The new permission for this WebView.
345     @abstract Sets the permission of this WebView to either allow or disallow
346     a Remote Web Inspector to attach to it.
347 */
348 - (void)setAllowsRemoteInspection:(BOOL)allow;
349
350 /*!
351     @method setShowingInspectorIndication
352     @param enabled Show the indication when true, hide when false.
353     @abstract indicate this WebView on screen for a remote inspector.
354 */
355 - (void)setShowingInspectorIndication:(BOOL)enabled;
356
357 #if TARGET_OS_IPHONE
358 - (void)_setHostApplicationProcessIdentifier:(pid_t)pid auditToken:(audit_token_t)auditToken;
359 #endif
360
361 #endif // ENABLE_REMOTE_INSPECTOR
362
363 #if !TARGET_OS_IPHONE
364 /*!
365     @method setBackgroundColor:
366     @param backgroundColor Color to use as the default background.
367     @abstract Sets what color the receiver draws under transparent page background colors and images.
368     This color is also used when no page is loaded. A color with alpha should only be used when the receiver is
369     in a non-opaque window, since the color is drawn using NSCompositeCopy.
370 */
371 - (void)setBackgroundColor:(NSColor *)backgroundColor;
372
373 /*!
374     @method backgroundColor
375     @result Returns the background color drawn under transparent page background colors and images.
376     This color is also used when no page is loaded. A color with alpha should only be used when the receiver is
377     in a non-opaque window, since the color is drawn using NSCompositeCopy.
378 */
379 - (NSColor *)backgroundColor;
380 #else
381 - (void)setBackgroundColor:(CGColorRef)backgroundColor;
382 - (CGColorRef)backgroundColor;
383 #endif
384
385 /*!
386 Could be worth adding to the API.
387  @method _loadBackForwardListFromOtherView:
388  @abstract Loads the view with the contents of the other view, including its backforward list.
389  @param otherView   The WebView from which to copy contents.
390  */
391 - (void)_loadBackForwardListFromOtherView:(WebView *)otherView;
392
393 /*
394  @method _reportException:inContext:
395  @abstract Logs the exception to the Web Inspector. This only needs called for exceptions that
396  occur while using the JavaScriptCore APIs with a context owned by a WebKit.
397  @param exception The exception value to log.
398  @param context   The context the exception occured in.
399 */
400 + (void)_reportException:(JSValueRef)exception inContext:(JSContextRef)context;
401
402 /*!
403  @method _dispatchPendingLoadRequests:
404  @abstract Dispatches any pending load requests that have been scheduled because of recent DOM additions or style changes.
405  @discussion You only need to call this method if you require synchronous notification of loads through the resource load delegate.
406  Otherwise the resource load delegate will be notified about loads during a future run loop iteration.
407  */
408 - (void)_dispatchPendingLoadRequests;
409
410 #if !TARGET_OS_IPHONE
411 + (NSArray *)_supportedFileExtensions;
412 #endif
413
414 /*!
415     @method canShowFile:
416     @abstract Checks if the WebKit can show the content of the file at the specified path.
417     @param path The path of the file to check
418     @result YES if the WebKit can show the content of the file at the specified path.
419 */
420 + (BOOL)canShowFile:(NSString *)path;
421
422 #if !TARGET_OS_IPHONE
423 /*!
424     @method suggestedFileExtensionForMIMEType:
425     @param MIMEType The MIME type to check.
426     @result The extension based on the MIME type
427 */
428 + (NSString *)suggestedFileExtensionForMIMEType: (NSString *)MIMEType;
429 #endif
430
431 + (NSString *)_standardUserAgentWithApplicationName:(NSString *)applicationName;
432 #if TARGET_OS_IPHONE
433 - (void)_setBrowserUserAgentProductVersion:(NSString *)productVersion buildVersion:(NSString *)buildVersion bundleVersion:(NSString *)bundleVersion;
434 - (void)_setUIWebViewUserAgentWithBuildVersion:(NSString *)buildVersion;
435 #endif
436
437 /*!
438     @method canCloseAllWebViews
439     @abstract Checks if all the open WebViews can be closed (by dispatching the beforeUnload event to the pages).
440     @result YES if all the WebViews can be closed.
441 */
442 + (BOOL)canCloseAllWebViews;
443
444 #if TARGET_OS_IPHONE
445 - (id)initSimpleHTMLDocumentWithStyle:(NSString *)style frame:(CGRect)frame preferences:(WebPreferences *)preferences groupName:(NSString *)groupName;
446 - (id)_formDelegateForwarder;
447 - (id)_formDelegateForSelector:(SEL)selector;
448 - (id)_webMailDelegate;
449 - (void)setWebMailDelegate:(id)delegate;
450 - (id <WebCaretChangeListener>)caretChangeListener;
451 - (void)setCaretChangeListener:(id <WebCaretChangeListener>)listener;
452
453 - (NSSet *)caretChangeListeners;
454 - (void)addCaretChangeListener:(id <WebCaretChangeListener>)listener;
455 - (void)removeCaretChangeListener:(id <WebCaretChangeListener>)listener;
456 - (void)removeAllCaretChangeListeners;
457
458 - (void)caretChanged;
459
460 - (void)_dispatchUnloadEvent;
461
462 - (DOMCSSStyleDeclaration *)styleAtSelectionStart;
463
464 - (NSUInteger)_renderTreeSize;
465
466 - (void)_setResourceLoadSchedulerSuspended:(BOOL)suspend;
467 + (void)_setTileCacheLayerPoolCapacity:(unsigned)capacity;
468
469 + (void)_setAllowCookies:(BOOL)allow;
470 + (BOOL)_allowCookies;
471 + (void)_releaseMemoryNow;
472
473 - (void)_replaceCurrentHistoryItem:(WebHistoryItem *)item;
474
475 #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000
476 - (BOOL)_requestStartDataInteraction:(CGPoint)clientPosition globalPosition:(CGPoint)globalPosition;
477 - (WebUITextIndicatorData *)_getDataInteractionData;
478 @property (nonatomic, readonly, strong, getter=_dataOperationTextIndicator) WebUITextIndicatorData *dataOperationTextIndicator;
479 @property (nonatomic, readonly) NSUInteger _dragSourceAction;
480 @property (nonatomic, strong, readonly) NSString *_draggedLinkTitle;
481 @property (nonatomic, strong, readonly) NSURL *_draggedLinkURL;
482 @property (nonatomic, readonly) CGRect _draggedElementBounds;
483 - (uint64_t)_enteredDataInteraction:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation;
484 - (uint64_t)_updatedDataInteraction:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation;
485 - (void)_exitedDataInteraction:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation;
486 - (void)_performDataInteraction:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation;
487 - (BOOL)_tryToPerformDataInteraction:(id <UIDropSession>)session client:(CGPoint)clientPosition global:(CGPoint)globalPosition operation:(uint64_t)operation;
488 - (void)_endedDataInteraction:(CGPoint)clientPosition global:(CGPoint)clientPosition;
489
490 @property (nonatomic, readonly, getter=_dataInteractionCaretRect) CGRect dataInteractionCaretRect;
491 #endif
492
493 // Deprecated. Use -[WebDataSource _quickLookContent] instead.
494 - (NSDictionary *)quickLookContentForURL:(NSURL *)url;
495 #endif
496
497 // May well become public
498 - (void)_setFormDelegate:(id<WebFormDelegate>)delegate;
499 - (id<WebFormDelegate>)_formDelegate;
500
501 - (BOOL)_isClosed;
502
503 // _close is now replaced by public method -close. It remains here only for backward compatibility
504 // until callers can be weaned off of it.
505 - (void)_close;
506
507 // Indicates if the WebView is in the midst of a user gesture.
508 - (BOOL)_isProcessingUserGesture;
509
510 // Determining and updating page visibility state.
511 - (BOOL)_isViewVisible;
512 - (void)_updateVisibilityState;
513
514 // SPI for DumpRenderTree
515 - (void)_updateActiveState;
516
517 - (void)_didScrollDocumentInFrameView:(WebFrameView *)frameView;
518
519 /*!
520     @method _registerViewClass:representationClass:forURLScheme:
521     @discussion Register classes that implement WebDocumentView and WebDocumentRepresentation respectively.
522     @param viewClass The WebDocumentView class to use to render data for a given MIME type.
523     @param representationClass The WebDocumentRepresentation class to use to represent data of the given MIME type.
524     @param URLScheme The URL scheme to represent with an object of the given class.
525 */
526 + (void)_registerViewClass:(Class)viewClass representationClass:(Class)representationClass forURLScheme:(NSString *)URLScheme;
527
528 + (void)_unregisterViewClassAndRepresentationClassForMIMEType:(NSString *)MIMEType;
529
530 /*!
531      @method _canHandleRequest:
532      @abstract Performs a "preflight" operation that performs some
533      speculative checks to see if a request can be used to create
534      a WebDocumentView and WebDocumentRepresentation.
535      @discussion The result of this method is valid only as long as no
536      protocols or schemes are registered or unregistered, and as long as
537      the request is not mutated (if the request is mutable). Hence, clients
538      should be prepared to handle failures even if they have performed request
539      preflighting by caling this method.
540      @param request The request to preflight.
541      @result YES if it is likely that a WebDocumentView and WebDocumentRepresentation
542      can be created for the request, NO otherwise.
543 */
544 + (BOOL)_canHandleRequest:(NSURLRequest *)request;
545
546 + (NSString *)_decodeData:(NSData *)data;
547
548 + (void)_setAlwaysUsesComplexTextCodePath:(BOOL)f;
549
550 #if !TARGET_OS_IPHONE
551 - (NSCachedURLResponse *)_cachedResponseForURL:(NSURL *)URL;
552 #endif
553
554 #if ENABLE_DASHBOARD_SUPPORT
555 - (void)_addScrollerDashboardRegions:(NSMutableDictionary *)regions;
556 - (NSDictionary *)_dashboardRegions;
557
558 - (void)_setDashboardBehavior:(WebDashboardBehavior)behavior to:(BOOL)flag;
559 - (BOOL)_dashboardBehavior:(WebDashboardBehavior)behavior;
560 #endif
561
562 + (void)_setShouldUseFontSmoothing:(BOOL)f;
563 + (BOOL)_shouldUseFontSmoothing;
564
565 #if !TARGET_OS_IPHONE
566 // These two methods are useful for a test harness that needs a consistent appearance for the focus rings
567 // regardless of OS X version.
568 + (void)_setUsesTestModeFocusRingColor:(BOOL)f;
569 + (BOOL)_usesTestModeFocusRingColor;
570 #endif
571
572 #if TARGET_OS_IPHONE
573 - (void)_setUIKitDelegate:(id)delegate;
574 - (id)_UIKitDelegate;
575 - (void)_clearDelegates;
576
577 - (NSURL *)_displayURL;
578
579 + (NSArray *)_productivityDocumentMIMETypes;
580
581 - (void)_setAllowsMessaging:(BOOL)aFlag;
582 - (BOOL)_allowsMessaging;
583
584 - (void)_setCustomFixedPositionLayoutRectInWebThread:(CGRect)rect synchronize:(BOOL)synchronize;
585 - (void)_setCustomFixedPositionLayoutRect:(CGRect)rect;
586
587 - (WebFixedPositionContent*)_fixedPositionContent;
588
589 - (void)_viewGeometryDidChange;
590 - (void)_overflowScrollPositionChangedTo:(CGPoint)offset forNode:(DOMNode *)node isUserScroll:(BOOL)userScroll;
591
592 #if ENABLE_TOUCH_EVENTS
593 - (NSArray *)_touchEventRegions;
594 #endif
595
596 /*!
597     @method _doNotStartObservingNetworkReachability
598     @abstract Does not start observation of network reachability in any WebView.
599     @discussion To take effect, this method must be called before the first WebView is created.
600  */
601 + (void)_doNotStartObservingNetworkReachability;
602 #endif
603
604 #if !TARGET_OS_IPHONE
605 /*!
606     @method setAlwaysShowVerticalScroller:
607     @abstract Forces the vertical scroller to be visible if flag is YES, otherwise
608     if flag is NO the scroller with automatically show and hide as needed.
609  */
610 - (void)setAlwaysShowVerticalScroller:(BOOL)flag;
611
612 /*!
613     @method alwaysShowVerticalScroller
614     @result YES if the vertical scroller is always shown
615  */
616 - (BOOL)alwaysShowVerticalScroller;
617
618 /*!
619     @method setAlwaysShowHorizontalScroller:
620     @abstract Forces the horizontal scroller to be visible if flag is YES, otherwise
621     if flag is NO the scroller with automatically show and hide as needed.
622  */
623 - (void)setAlwaysShowHorizontalScroller:(BOOL)flag;
624
625 /*!
626     @method alwaysShowHorizontalScroller
627     @result YES if the horizontal scroller is always shown
628  */
629 - (BOOL)alwaysShowHorizontalScroller;
630
631 /*!
632     @method setProhibitsMainFrameScrolling:
633     @abstract Prohibits scrolling in the WebView's main frame.  Used to "lock" a WebView
634     to a specific scroll position.
635   */
636 - (void)setProhibitsMainFrameScrolling:(BOOL)prohibits;
637
638 /*!
639     @method _setAdditionalWebPlugInPaths:
640     @abstract Sets additional plugin search paths for a specific WebView.
641  */
642 - (void)_setAdditionalWebPlugInPaths:(NSArray *)newPaths;
643 #endif /* !TARGET_OS_IPHONE */
644
645 #if TARGET_OS_IPHONE
646 /*!
647     @method _pluginsAreRunning
648     @result Returns YES if any plug-ins in the WebView are running.
649  */
650 - (BOOL)_pluginsAreRunning;
651 /*!
652     @method _destroyAllPlugIns
653     @abstract Destroys all plug-ins in all of the WebView's frames.
654  */
655 - (void)_destroyAllPlugIns;
656 /*!
657     @method _startAllPlugIns
658     @abstract Starts all plug-ins in all of the WebView's frames.
659  */
660 - (void)_startAllPlugIns;
661 /*!
662     @method _stopAllPlugIns
663     @abstract Stops all plug-ins in all of the WebView's frames.
664  */
665 - (void)_stopAllPlugIns;
666 /*!
667     @method _stopAllPlugInsForPageCache
668     @abstract Stops all plug-ins in all of the WebView's frames.
669     Called when the page is entering the PageCache and lets the
670     plug-in know this by sending -webPlugInStopForPageCache.
671 */
672 - (void)_stopAllPlugInsForPageCache;
673 /*!
674     @method _restorePlugInsFromCache
675     @abstract Reconnects plug-ins from all of the WebView's frames to the
676     WebView and performs any other necessary reinitialization.
677  */
678 - (void)_restorePlugInsFromCache;
679
680 /*!
681     @method _setMediaLayer:forPluginView:
682     @abstract Set the layer that renders plug-in content for the given pluginView.
683     If layer is NULL, removes any existing layer. Returns YES if the set or
684     remove was successful.
685  */
686 - (BOOL)_setMediaLayer:(CALayer*)layer forPluginView:(NSView*)pluginView;
687
688 /*!
689  @method _wantsTelephoneNumberParsing
690  @abstract Does this WebView want phone number parsing? (This could ultimately be disallowed by the document itself).
691  */
692
693 - (BOOL)_wantsTelephoneNumberParsing;
694
695 /*!
696  @method _setWantsTelephoneNumberParsing
697  @abstract Explicitly disable WebKit phone number parsing on this WebView, or say that you want it enabled if possible.
698  */
699
700 - (void)_setWantsTelephoneNumberParsing:(BOOL)flag;
701
702 /*!
703     @method _setNeedsUnrestrictedGetMatchedCSSRules
704     @abstract Explicitly enables/disables cross origin CSS rules matching.
705  */
706 - (void)_setNeedsUnrestrictedGetMatchedCSSRules:(BOOL)flag;
707 #endif /* TARGET_OS_IPHONE */
708
709 /*!
710     @method _attachScriptDebuggerToAllFrames
711     @abstract Attaches a script debugger to all frames belonging to the receiver.
712  */
713 - (void)_attachScriptDebuggerToAllFrames;
714
715 /*!
716     @method _detachScriptDebuggerFromAllFrames
717     @abstract Detaches any script debuggers from all frames belonging to the receiver.
718  */
719 - (void)_detachScriptDebuggerFromAllFrames;
720
721 - (BOOL)defersCallbacks; // called by QuickTime plug-in
722 - (void)setDefersCallbacks:(BOOL)defer; // called by QuickTime plug-in
723
724 - (BOOL)usesPageCache;
725 - (void)setUsesPageCache:(BOOL)usesPageCache;
726
727 - (WebHistoryItem *)_globalHistoryItem;
728
729 /*!
730     @method textIteratorForRect:
731     @param rect The rectangle of the document that we're interested in text from.
732     @result WebTextIterator object, initialized with a range that corresponds to
733     the passed-in rectangle.
734     @abstract This method gives the text for the approximate range of the document
735     corresponding to the rectangle. The range is determined by using hit testing at
736     the top left and bottom right of the rectangle. Because of that, there can be
737     text visible in the rectangle that is not included in the iterator. If you need
738     a guarantee of iterating all text that is visible, then you need to instead make
739     a WebTextIterator with a DOMRange that covers the entire document.
740  */
741 - (WebTextIterator *)textIteratorForRect:(NSRect)rect;
742
743 #if !TARGET_OS_IPHONE
744 - (void)_clearUndoRedoOperations;
745 #endif
746
747 /* Used to do fast (lower quality) scaling of images so that window resize can be quick. */
748 - (BOOL)_inFastImageScalingMode;
749 - (void)_setUseFastImageScalingMode:(BOOL)flag;
750
751 - (BOOL)_cookieEnabled;
752 - (void)_setCookieEnabled:(BOOL)enable;
753
754 // SPI for DumpRenderTree
755 - (void)_executeCoreCommandByName:(NSString *)name value:(NSString *)value;
756 - (void)_clearMainFrameName;
757
758 - (void)setSelectTrailingWhitespaceEnabled:(BOOL)flag;
759 - (BOOL)isSelectTrailingWhitespaceEnabled;
760
761 - (void)setMemoryCacheDelegateCallsEnabled:(BOOL)suspend;
762 - (BOOL)areMemoryCacheDelegateCallsEnabled;
763
764 // SPI for DumpRenderTree
765 - (BOOL)_postsAcceleratedCompositingNotifications;
766 - (void)_setPostsAcceleratedCompositingNotifications:(BOOL)flag;
767 - (BOOL)_isUsingAcceleratedCompositing;
768 - (void)_setBaseCTM:(CGAffineTransform)transform forContext:(CGContextRef)context;
769
770 // For DumpRenderTree
771 - (BOOL)interactiveFormValidationEnabled;
772 - (void)setInteractiveFormValidationEnabled:(BOOL)enabled;
773 - (int)validationMessageTimerMagnification;
774 - (void)setValidationMessageTimerMagnification:(int)newValue;
775 - (NSDictionary *)_contentsOfUserInterfaceItem:(NSString *)userInterfaceItem;
776
777 // Returns YES if NSView -displayRectIgnoringOpacity:inContext: will produce a faithful representation of the content.
778 - (BOOL)_isSoftwareRenderable;
779
780 - (void)setTracksRepaints:(BOOL)flag;
781 - (BOOL)isTrackingRepaints;
782 - (void)resetTrackedRepaints;
783 - (NSArray*)trackedRepaintRects; // Returned array contains rectValue NSValues.
784
785 #if !TARGET_OS_IPHONE
786 // Which pasteboard text is coming from in editing delegate methods such as shouldInsertNode.
787 - (NSPasteboard *)_insertionPasteboard;
788 #endif
789
790 // Whitelists access from an origin (sourceOrigin) to a set of one or more origins described by the parameters:
791 // - destinationProtocol: The protocol to grant access to.
792 // - destinationHost: The host to grant access to.
793 // - allowDestinationSubdomains: If host is a domain, setting this to YES will whitelist host and all its subdomains, recursively.
794 + (void)_addOriginAccessWhitelistEntryWithSourceOrigin:(NSString *)sourceOrigin destinationProtocol:(NSString *)destinationProtocol destinationHost:(NSString *)destinationHost allowDestinationSubdomains:(BOOL)allowDestinationSubdomains;
795 + (void)_removeOriginAccessWhitelistEntryWithSourceOrigin:(NSString *)sourceOrigin destinationProtocol:(NSString *)destinationProtocol destinationHost:(NSString *)destinationHost allowDestinationSubdomains:(BOOL)allowDestinationSubdomains;
796
797 // Removes all white list entries created with _addOriginAccessWhitelistEntryWithSourceOrigin.
798 + (void)_resetOriginAccessWhitelists;
799
800 // FIXME: The following two methods are deprecated in favor of the overloads below that take the WebUserContentInjectedFrames argument. https://bugs.webkit.org/show_bug.cgi?id=41800.
801 + (void)_addUserScriptToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist injectionTime:(WebUserScriptInjectionTime)injectionTime;
802 + (void)_addUserStyleSheetToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist;
803
804 + (void)_addUserScriptToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist injectionTime:(WebUserScriptInjectionTime)injectionTime injectedFrames:(WebUserContentInjectedFrames)injectedFrames;
805 + (void)_addUserStyleSheetToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist injectedFrames:(WebUserContentInjectedFrames)injectedFrames;
806 + (void)_removeUserScriptFromGroup:(NSString *)groupName world:(WebScriptWorld *)world url:(NSURL *)url;
807 + (void)_removeUserStyleSheetFromGroup:(NSString *)groupName world:(WebScriptWorld *)world url:(NSURL *)url;
808 + (void)_removeUserScriptsFromGroup:(NSString *)groupName world:(WebScriptWorld *)world;
809 + (void)_removeUserStyleSheetsFromGroup:(NSString *)groupName world:(WebScriptWorld *)world;
810 + (void)_removeAllUserContentFromGroup:(NSString *)groupName;
811
812 // SPI for DumpRenderTree
813 + (void)_setLoadResourcesSerially:(BOOL)serialize;
814
815 /*!
816     @method cssAnimationsSuspended
817     @abstract Returns whether or not CSS Animations are suspended.
818     @result YES if CSS Animations are suspended.
819 */
820 - (BOOL)cssAnimationsSuspended;
821
822 /*!
823     @method setCSSAnimationsSuspended
824     @param suspended YES to suspend animations, NO to resume animations.
825     @discussion Suspends or resumes all running animations and transitions in the page.
826 */
827 - (void)setCSSAnimationsSuspended:(BOOL)suspended;
828
829 /*
830     SPI to revert back to buggy behavior that would allow new transitions
831     and animations to run even when the view is suspended (e.g. loading a
832     new document).
833 */
834 - (BOOL)allowsNewCSSAnimationsWhileSuspended;
835 - (void)setAllowsNewCSSAnimationsWhileSuspended:(BOOL)allowed;
836
837 + (void)_setDomainRelaxationForbidden:(BOOL)forbidden forURLScheme:(NSString *)scheme;
838 + (void)_registerURLSchemeAsSecure:(NSString *)scheme;
839 + (void)_registerURLSchemeAsAllowingLocalStorageAccessInPrivateBrowsing:(NSString *)scheme;
840 + (void)_registerURLSchemeAsAllowingDatabaseAccessInPrivateBrowsing:(NSString *)scheme;
841
842 - (void)_scaleWebView:(float)scale atOrigin:(NSPoint)origin;
843 - (float)_viewScaleFactor; // This is actually pageScaleFactor.
844
845 - (void)_setUseFixedLayout:(BOOL)fixed;
846 - (void)_setFixedLayoutSize:(NSSize)size;
847
848 - (BOOL)_useFixedLayout;
849 - (NSSize)_fixedLayoutSize;
850
851 - (void)_setPaginationMode:(WebPaginationMode)paginationMode;
852 - (WebPaginationMode)_paginationMode;
853
854 - (void)_listenForLayoutMilestones:(WebLayoutMilestones)layoutMilestones;
855 - (WebLayoutMilestones)_layoutMilestones;
856
857 - (WebPageVisibilityState)_visibilityState;
858 - (void)_setVisibilityState:(WebPageVisibilityState)visibilityState isInitialState:(BOOL)isInitialState;
859
860 // Whether the column-break-{before,after} properties are respected instead of the
861 // page-break-{before,after} properties.
862 - (void)_setPaginationBehavesLikeColumns:(BOOL)behavesLikeColumns;
863 - (BOOL)_paginationBehavesLikeColumns;
864
865 // Set to 0 to have the page length equal the view length.
866 - (void)_setPageLength:(CGFloat)pageLength;
867 - (CGFloat)_pageLength;
868 - (void)_setGapBetweenPages:(CGFloat)pageGap;
869 - (CGFloat)_gapBetweenPages;
870 - (NSUInteger)_pageCount;
871
872 // Whether or not a line grid is enabled by default when paginated via the pagination API.
873 - (void)_setPaginationLineGridEnabled:(BOOL)lineGridEnabled;
874 - (BOOL)_paginationLineGridEnabled;
875
876 #if !TARGET_OS_IPHONE
877 - (void)_setCustomBackingScaleFactor:(CGFloat)overrideScaleFactor;
878 - (CGFloat)_backingScaleFactor;
879 #endif
880
881 // Deprecated. Use the methods in pending public above instead.
882 - (NSUInteger)markAllMatchesForText:(NSString *)string caseSensitive:(BOOL)caseFlag highlight:(BOOL)highlight limit:(NSUInteger)limit;
883 - (NSUInteger)countMatchesForText:(NSString *)string caseSensitive:(BOOL)caseFlag highlight:(BOOL)highlight limit:(NSUInteger)limit markMatches:(BOOL)markMatches;
884
885 /*!
886  @method searchFor:direction:caseSensitive:wrap:startInSelection:
887  @abstract Searches a document view for a string and highlights the string if it is found.
888  Starts the search from the current selection.  Will search across all frames.
889  @param string The string to search for.
890  @param forward YES to search forward, NO to seach backwards.
891  @param caseFlag YES to for case-sensitive search, NO for case-insensitive search.
892  @param wrapFlag YES to wrap around, NO to avoid wrapping.
893  @param startInSelection YES to begin search in the selected text (useful for incremental searching), NO to begin search after the selected text.
894  @result YES if found, NO if not found.
895  */
896 // Deprecated. Use findString.
897 - (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag startInSelection:(BOOL)startInSelection;
898
899 /*!
900     @method _HTTPPipeliningEnabled
901     @abstract Checks the HTTP pipelining status.
902     @discussion Defaults to NO.
903     @result YES if HTTP pipelining is enabled, NO if not enabled.
904  */
905 + (BOOL)_HTTPPipeliningEnabled;
906
907 /*!
908     @method _setHTTPPipeliningEnabled:
909     @abstract Set the HTTP pipelining status.
910     @discussion Defaults to NO.
911     @param enabled The new HTTP pipelining status.
912  */
913 + (void)_setHTTPPipeliningEnabled:(BOOL)enabled;
914
915 @property (nonatomic, copy, getter=_sourceApplicationAuditData, setter=_setSourceApplicationAuditData:) NSData *sourceApplicationAuditData;
916
917 - (void)_setFontFallbackPrefersPictographs:(BOOL)flag;
918
919 - (void)showCandidates:(NSArray *)candidates forString:(NSString *)string inRect:(NSRect)rectOfTypedString forSelectedRange:(NSRange)range view:(NSView *)view completionHandler:(void (^)(NSTextCheckingResult *acceptedCandidate))completionBlock;
920 - (void)forceRequestCandidatesForTesting;
921 - (BOOL)shouldRequestCandidates;
922
923 typedef struct WebEdgeInsets {
924     CGFloat top;
925     CGFloat left;
926     CGFloat bottom;
927     CGFloat right;
928 } WebEdgeInsets;
929
930 @property (nonatomic, assign, setter=_setUnobscuredSafeAreaInsets:) WebEdgeInsets _unobscuredSafeAreaInsets;
931
932 @end
933
934 #if !TARGET_OS_IPHONE
935 @interface WebView (WebViewPrintingPrivate)
936 /*!
937     @method _adjustPrintingMarginsForHeaderAndFooter:
938     @abstract Increase the top and bottom margins for the current print operation to
939     account for the header and footer height. 
940     @discussion Called by <WebDocument> implementors once when a print job begins. If the
941     <WebDocument> implementor implements knowsPageRange:, this should be called from there.
942     Otherwise this should be called from beginDocument. The <WebDocument> implementors need
943     to also call _drawHeaderAndFooter.
944 */
945 - (void)_adjustPrintingMarginsForHeaderAndFooter;
946
947 /*!
948     @method _drawHeaderAndFooter
949     @abstract Gives the WebView's UIDelegate a chance to draw a header and footer on the
950     printed page. 
951     @discussion This should be called by <WebDocument> implementors from an override of
952     drawPageBorderWithSize:.
953 */
954 - (void)_drawHeaderAndFooter;
955 @end
956
957 @interface WebView (WebViewGrammarChecking)
958
959 // FIXME: These two methods should be merged into WebViewEditing when we're not in API freeze
960 - (BOOL)isGrammarCheckingEnabled;
961 - (void)setGrammarCheckingEnabled:(BOOL)flag;
962
963 // FIXME: This method should be merged into WebIBActions when we're not in API freeze
964 - (void)toggleGrammarChecking:(id)sender;
965
966 @end
967
968 @interface WebView (WebViewTextChecking)
969
970 - (BOOL)isAutomaticQuoteSubstitutionEnabled;
971 - (BOOL)isAutomaticLinkDetectionEnabled;
972 - (BOOL)isAutomaticDashSubstitutionEnabled;
973 - (BOOL)isAutomaticTextReplacementEnabled;
974 - (BOOL)isAutomaticSpellingCorrectionEnabled;
975 - (void)setAutomaticQuoteSubstitutionEnabled:(BOOL)flag;
976 - (void)toggleAutomaticQuoteSubstitution:(id)sender;
977 - (void)setAutomaticLinkDetectionEnabled:(BOOL)flag;
978 - (void)toggleAutomaticLinkDetection:(id)sender;
979 - (void)setAutomaticDashSubstitutionEnabled:(BOOL)flag;
980 - (void)toggleAutomaticDashSubstitution:(id)sender;
981 - (void)setAutomaticTextReplacementEnabled:(BOOL)flag;
982 - (void)toggleAutomaticTextReplacement:(id)sender;
983 - (void)setAutomaticSpellingCorrectionEnabled:(BOOL)flag;
984 - (void)toggleAutomaticSpellingCorrection:(id)sender;
985 @end
986 #endif /* !TARGET_OS_IPHONE */
987
988 @interface WebView (WebViewEditingInMail)
989 - (void)_insertNewlineInQuotedContent;
990 - (void)_replaceSelectionWithNode:(DOMNode *)node matchStyle:(BOOL)matchStyle;
991 - (BOOL)_selectionIsCaret;
992 - (BOOL)_selectionIsAll;
993 - (void)_simplifyMarkup:(DOMNode *)startNode endNode:(DOMNode *)endNode;
994
995 @end
996
997 @interface WebView (WebViewDeviceOrientation)
998 - (void)_setDeviceOrientationProvider:(id<WebDeviceOrientationProvider>)deviceOrientationProvider;
999 - (id<WebDeviceOrientationProvider>)_deviceOrientationProvider;
1000 @end
1001
1002 #if TARGET_OS_IPHONE
1003 @protocol WebGeolocationProvider;
1004
1005 @protocol WebGeolocationProviderInitializationListener <NSObject>
1006 - (void)initializationAllowedWebView:(WebView *)webView;
1007 - (void)initializationDeniedWebView:(WebView *)webView;
1008 @end
1009
1010 #endif
1011
1012 @interface WebView (WebViewUserMedia)
1013 - (void)_setUserMediaClient:(id<WebUserMediaClient>)userMediaClient;
1014 - (id<WebUserMediaClient>)_userMediaClient;
1015 @end
1016
1017 @protocol WebGeolocationProvider <NSObject>
1018 - (void)registerWebView:(WebView *)webView;
1019 - (void)unregisterWebView:(WebView *)webView;
1020 - (WebGeolocationPosition *)lastPosition;
1021 #if TARGET_OS_IPHONE
1022 - (void)setEnableHighAccuracy:(BOOL)enableHighAccuracy;
1023 - (void)initializeGeolocationForWebView:(WebView *)webView listener:(id<WebGeolocationProviderInitializationListener>)listener;
1024 - (void)stopTrackingWebView:(WebView *)webView;
1025 #endif
1026 @end
1027
1028 @protocol WebNotificationProvider
1029 - (void)registerWebView:(WebView *)webView;
1030 - (void)unregisterWebView:(WebView *)webView;
1031
1032 - (void)showNotification:(WebNotification *)notification fromWebView:(WebView *)webView;
1033 - (void)cancelNotification:(WebNotification *)notification;
1034 - (void)notificationDestroyed:(WebNotification *)notification;
1035 - (void)clearNotifications:(NSArray *)notificationIDs;
1036 - (WebNotificationPermission)policyForOrigin:(WebSecurityOrigin *)origin;
1037
1038 - (void)webView:(WebView *)webView didShowNotification:(uint64_t)notificationID;
1039 - (void)webView:(WebView *)webView didClickNotification:(uint64_t)notificationID;
1040 - (void)webView:(WebView *)webView didCloseNotifications:(NSArray *)notificationIDs;
1041 @end
1042
1043 @interface WebView (WebViewGeolocation)
1044 - (void)_setGeolocationProvider:(id<WebGeolocationProvider>)locationProvider;
1045 - (id<WebGeolocationProvider>)_geolocationProvider;
1046
1047 - (void)_geolocationDidChangePosition:(WebGeolocationPosition *)position;
1048 - (void)_geolocationDidFailWithMessage:(NSString *)errorMessage;
1049 #if TARGET_OS_IPHONE
1050 - (void)_resetAllGeolocationPermission;
1051 #endif
1052 @end
1053
1054 @interface WebView (WebViewNotification)
1055 - (void)_setNotificationProvider:(id<WebNotificationProvider>)notificationProvider;
1056 - (id<WebNotificationProvider>)_notificationProvider;
1057
1058 - (void)_notificationDidShow:(uint64_t)notificationID;
1059 - (void)_notificationDidClick:(uint64_t)notificationID;
1060 - (void)_notificationsDidClose:(NSArray *)notificationIDs;
1061
1062 - (uint64_t)_notificationIDForTesting:(JSValueRef)jsNotification;
1063 @end
1064
1065 @interface WebView (WebViewFontSelection)
1066 + (void)_setFontWhitelist:(NSArray *)whitelist;
1067 @end
1068
1069 #if TARGET_OS_IPHONE
1070 @interface WebView (WebViewIOSPDF)
1071 + (Class)_getPDFRepresentationClass;
1072 + (void)_setPDFRepresentationClass:(Class)pdfRepresentationClass;
1073
1074 + (Class)_getPDFViewClass;
1075 + (void)_setPDFViewClass:(Class)pdfViewClass;
1076 @end
1077 #endif
1078
1079 @interface NSObject (WebViewFrameLoadDelegatePrivate)
1080 - (void)webView:(WebView *)sender didFirstLayoutInFrame:(WebFrame *)frame;
1081
1082 // didFinishDocumentLoadForFrame is sent when the document has finished loading, though not necessarily all
1083 // of its subresources.
1084 // FIXME 5259339: Currently this callback is not sent for (some?) pages loaded entirely from the cache.
1085 - (void)webView:(WebView *)sender didFinishDocumentLoadForFrame:(WebFrame *)frame;
1086
1087 // Addresses 4192534.  SPI for now.
1088 - (void)webView:(WebView *)sender didHandleOnloadEventsForFrame:(WebFrame *)frame;
1089
1090 - (void)webView:(WebView *)sender didFirstVisuallyNonEmptyLayoutInFrame:(WebFrame *)frame;
1091
1092 - (void)webView:(WebView *)sender didLayout:(WebLayoutMilestones)milestones;
1093
1094 // For implementing the WebInspector's test harness
1095 - (void)webView:(WebView *)webView didClearInspectorWindowObject:(WebScriptObject *)windowObject forFrame:(WebFrame *)frame;
1096
1097 @end
1098
1099 @interface NSObject (WebViewResourceLoadDelegatePrivate)
1100 // Addresses <rdar://problem/5008925> - SPI for now
1101 - (NSCachedURLResponse *)webView:(WebView *)sender resource:(id)identifier willCacheResponse:(NSCachedURLResponse *)response fromDataSource:(WebDataSource *)dataSource;
1102 @end
1103
1104 #ifdef __cplusplus
1105 extern "C" {
1106 #endif
1107
1108 // This is a C function to avoid calling +[WebView initialize].
1109 void WebInstallMemoryPressureHandler(void);
1110
1111 #ifdef __cplusplus
1112 }
1113 #endif