Reviewed by Chris Blumenberg.
[WebKit-https.git] / WebKit / WebView.subproj / WebViewPrivate.h
1 /*
2  * Copyright (C) 2005 Apple Computer, 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 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. 
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 <WebKit/WebView.h>
30 #import <WebKit/WebFramePrivate.h>
31
32 @class NSError;
33 @class WebFrame;
34 @class WebPreferences;
35 @class WebCoreSettings;
36
37 @protocol WebFormDelegate;
38
39 typedef struct _WebResourceDelegateImplementationCache {
40     uint delegateImplementsDidCancelAuthenticationChallenge:1;
41     uint delegateImplementsDidReceiveAuthenticationChallenge:1;
42     uint delegateImplementsDidReceiveResponse:1;
43     uint delegateImplementsDidReceiveContentLength:1;
44     uint delegateImplementsDidFinishLoadingFromDataSource:1;
45     uint delegateImplementsWillSendRequest:1;
46     uint delegateImplementsIdentifierForRequest:1;
47 } WebResourceDelegateImplementationCache;
48
49 extern NSString *_WebCanGoBackKey;
50 extern NSString *_WebCanGoForwardKey;
51 extern NSString *_WebEstimatedProgressKey;
52 extern NSString *_WebIsLoadingKey;
53 extern NSString *_WebMainFrameIconKey;
54 extern NSString *_WebMainFrameTitleKey;
55 extern NSString *_WebMainFrameURLKey;
56
57 typedef enum {
58         WebDashboardBehaviorAlwaysSendMouseEventsToAllWindows,
59         WebDashboardBehaviorAlwaysSendActiveNullEventsToPlugIns,
60         WebDashboardBehaviorAlwaysAcceptsFirstMouse,
61         WebDashboardBehaviorAllowWheelScrolling
62 } WebDashboardBehavior;
63
64
65 @interface WebView (WebPendingPublic)
66
67 - (void)setMainFrameURL:(NSString *)URLString;
68 - (NSString *)mainFrameURL;
69 - (BOOL)isLoading;
70 - (NSString *)mainFrameTitle;
71 - (NSImage *)mainFrameIcon;
72
73 - (void)setDrawsBackground:(BOOL)drawsBackround;
74 - (BOOL)drawsBackground;
75
76 - (IBAction)toggleContinuousSpellChecking:(id)sender;
77
78 - (BOOL)isContinuousGrammarCheckingEnabled;
79 - (void)setContinuousGrammarCheckingEnabled:(BOOL)flag;
80 - (void)toggleContinuousGrammarChecking:(id)sender;
81
82 - (void)toggleSmartInsertDelete:(id)sender;
83
84 - (BOOL)canMakeTextStandardSize;
85 - (IBAction)makeTextStandardSize:(id)sender;
86
87 // If true, the selection will be maintained even when the first responder is outside
88 // of the webview. Returns true only if self is editable at this level. Subclasses can
89 // override to enforce additional criteria.
90 - (BOOL)maintainsInactiveSelection;
91
92 @end
93
94 @interface WebView (WebPrivate)
95
96 + (BOOL)_viewClass:(Class *)vClass andRepresentationClass:(Class *)rClass forMIMEType:(NSString *)MIMEType;
97
98 + (NSArray *)_supportedFileExtensions;
99
100 /*!
101     @method canShowFile:
102     @abstract Checks if the WebKit can show the content of the file at the specified path.
103     @param path The path of the file to check
104     @result YES if the WebKit can show the content of the file at the specified path.
105 */
106 + (BOOL)canShowFile:(NSString *)path;
107
108 /*!
109     @method suggestedFileExtensionForMIMEType:
110     @param MIMEType The MIME type to check.
111     @result The extension based on the MIME type
112 */
113 + (NSString *)suggestedFileExtensionForMIMEType: (NSString *)MIMEType;
114
115 /*!
116     @method frameForDataSource:
117     @abstract Return the frame associated with the data source.
118     @discussion Traverses the frame tree to find the frame associated
119     with a datasource.
120     @param datasource The datasource to  match against each frame.
121     @result The frame that has the associated datasource.
122 */
123 - (WebFrame *)_frameForDataSource: (WebDataSource *)dataSource;
124
125     /*!
126             @method frameForView:
127      @abstract Return the frame associated with the view.
128      @discussion Traverses the frame tree to find the view.
129      @param aView The view to match against each frame.
130      @result The frame that has the associated view.
131      */
132 - (WebFrame *)_frameForView: (WebFrameView *)aView;
133
134 - (WebFrame *)_createFrameNamed:(NSString *)name inParent:(WebFrame *)parent allowsScrolling:(BOOL)allowsScrolling;
135
136 - (void)_finishedLoadingResourceFromDataSource:(WebDataSource *)dataSource;
137 - (void)_receivedError:(NSError *)error fromDataSource:(WebDataSource *)dataSource;
138 - (void)_mainReceivedBytesSoFar:(unsigned)bytesSoFar fromDataSource:(WebDataSource *)dataSource complete:(BOOL)isComplete;
139 - (void)_mainReceivedError:(NSError *)error fromDataSource:(WebDataSource *)dataSource complete:(BOOL)isComplete;
140 + (NSString *)_MIMETypeForFile:(NSString *)path;
141 - (void)_downloadURL:(NSURL *)URL;
142 - (void)_downloadURL:(NSURL *)URL toDirectory:(NSString *)directoryPath;
143
144 - (BOOL)defersCallbacks;
145 - (void)setDefersCallbacks:(BOOL)defers;
146
147 - (void)_setTopLevelFrameName:(NSString *)name;
148 - (WebFrame *)_findFrameInThisWindowNamed:(NSString *)name sourceFrame:(WebFrame *)source;
149 - (WebFrame *)_findFrameNamed:(NSString *)name sourceFrame:(WebFrame *)source;
150
151 - (WebView *)_openNewWindowWithRequest:(NSURLRequest *)request;
152
153 - (NSMenu *)_menuForElement:(NSDictionary *)element defaultItems:(NSArray *)items;
154
155 - (void)_mouseDidMoveOverElement:(NSDictionary *)dictionary modifierFlags:(unsigned)modifierFlags;
156
157 /*!
158 Could be worth adding to the API.
159     @method loadItem:
160     @abstract Loads the view with the contents described by the item, including frame content
161         described by child items.
162     @param item   The item to load.  It is not retained, but a copy will appear in the
163         BackForwardList on this WebView.
164 */
165 - (void)_loadItem:(WebHistoryItem *)item;
166 /*!
167 Could be worth adding to the API.
168     @method loadItemsFromOtherView:
169     @abstract Loads the view with the contents of the other view, including its backforward list.
170     @param otherView   The WebView from which to copy contents.
171 */
172 - (void)_loadBackForwardListFromOtherView:(WebView *)otherView;
173
174 - (void)_goToItem:(WebHistoryItem *)item withLoadType:(WebFrameLoadType)type;
175
176 // May well become public
177 - (void)_setFormDelegate:(id<WebFormDelegate>)delegate;
178 - (id<WebFormDelegate>)_formDelegate;
179
180 - (WebCoreSettings *)_settings;
181 - (void)_updateWebCoreSettingsFromPreferences:(WebPreferences *)prefs;
182
183 - (id)_frameLoadDelegateForwarder;
184 - (id)_resourceLoadDelegateForwarder;
185 - (void)_cacheResourceLoadDelegateImplementations;
186 - (WebResourceDelegateImplementationCache)_resourceLoadDelegateImplementations;
187 - (id)_policyDelegateForwarder;
188 - (id)_UIDelegateForwarder;
189 - (id)_editingDelegateForwarder;
190
191 - (void)_closeWindow;
192
193 - (void)_setInitiatedDrag:(BOOL)initiatedDrag;
194
195 - (void)_close;
196
197 /*!
198     @method _registerViewClass:representationClass:forURLScheme:
199     @discussion Register classes that implement WebDocumentView and WebDocumentRepresentation respectively.
200     @param viewClass The WebDocumentView class to use to render data for a given MIME type.
201     @param representationClass The WebDocumentRepresentation class to use to represent data of the given MIME type.
202     @param scheme The URL scheme to represent with an object of the given class.
203 */
204 + (void)_registerViewClass:(Class)viewClass representationClass:(Class)representationClass forURLScheme:(NSString *)URLScheme;
205
206 + (void)_unregisterViewClassAndRepresentationClassForMIMEType:(NSString *)MIMEType;
207
208 + (NSString *)_generatedMIMETypeForURLScheme:(NSString *)URLScheme;
209 + (BOOL)_representationExistsForURLScheme:(NSString *)URLScheme;
210 /*!
211      @method _canHandleRequest:
212      @abstract Performs a "preflight" operation that performs some
213      speculative checks to see if a request can be used to create
214      a WebDocumentView and WebDocumentRepresentation.
215      @discussion The result of this method is valid only as long as no
216      protocols or schemes are registered or unregistered, and as long as
217      the request is not mutated (if the request is mutable). Hence, clients
218      should be prepared to handle failures even if they have performed request
219      preflighting by caling this method.
220      @param request The request to preflight.
221      @result YES if it is likely that a WebDocumentView and WebDocumentRepresentation
222      can be created for the request, NO otherwise.
223 */
224 + (BOOL)_canHandleRequest:(NSURLRequest *)request;
225
226 + (NSString *)_decodeData:(NSData *)data;
227
228 - (void)_pushPerformingProgrammaticFocus;
229 - (void)_popPerformingProgrammaticFocus;
230 - (BOOL)_isPerformingProgrammaticFocus;
231
232 // Methods dealing with the estimated progress completion.
233 - (void)_progressStarted:(WebFrame *)frame;
234 - (void)_progressCompleted:(WebFrame *)frame;
235 - (void)_incrementProgressForConnectionDelegate:(id)connectionDelegate response:(NSURLResponse *)response;
236 - (void)_incrementProgressForConnectionDelegate:(id)connectionDelegate data:(NSData *)dataSource;
237 - (void)_completeProgressForConnectionDelegate:(id)connectionDelegate;
238
239 - (void)_didStartProvisionalLoadForFrame:(WebFrame *)frame;
240 - (void)_didCommitLoadForFrame:(WebFrame *)frame;
241 - (void)_didFinishLoadForFrame:(WebFrame *)frame;
242 - (void)_didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame;
243 - (void)_didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame;
244
245 - (void)_willChangeValueForKey:(NSString *)key;
246 - (void)_didChangeValueForKey:(NSString *)key;
247
248 - (void)_reloadForPluginChanges;
249 + (void)_setAlwaysUseATSU:(BOOL)f;
250
251 - (NSCachedURLResponse *)_cachedResponseForURL:(NSURL *)URL;
252
253 - (void)_writeImageElement:(NSDictionary *)element withPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard;
254 - (void)_writeLinkElement:(NSDictionary *)element withPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard;
255
256 - (void)_addScrollerDashboardRegions:(NSMutableDictionary *)regions;
257 - (NSDictionary *)_dashboardRegions;
258
259 - (void)_setDashboardBehavior:(WebDashboardBehavior)behavior to:(BOOL)flag;
260 - (BOOL)_dashboardBehavior:(WebDashboardBehavior)behavior;
261
262 - (void)handleAuthenticationForResource:(id)identifier challenge:(NSURLAuthenticationChallenge *)challenge fromDataSource:(WebDataSource *)dataSource;
263
264 + (void)_setShouldUseFontSmoothing:(BOOL)f;
265 + (BOOL)_shouldUseFontSmoothing;
266
267 @end
268
269 @interface WebView (WebViewPrintingPrivate)
270 /*!
271     @method _adjustPrintingMarginsForHeaderAndFooter:
272     @abstract Increase the top and bottom margins for the current print operation to
273     account for the header and footer height. 
274     @discussion Called by <WebDocument> implementors once when a print job begins. If the
275     <WebDocument> implementor implements knowsPageRange:, this should be called from there.
276     Otherwise this should be called from beginDocument. The <WebDocument> implementors need
277     to also call _drawHeaderAndFooter.
278 */
279 - (void)_adjustPrintingMarginsForHeaderAndFooter;
280
281 /*!
282     @method _drawHeaderAndFooter
283     @abstract Gives the WebView's UIDelegate a chance to draw a header and footer on the
284     printed page. 
285     @discussion This should be called by <WebDocument> implementors from an override of
286     drawPageBorderWithSize:.
287 */
288 - (void)_drawHeaderAndFooter;
289 @end
290
291 @interface WebView (WebViewEditingInMail)
292 - (void)_insertNewlineInQuotedContent;
293 - (BOOL)_selectWordBeforeMenuEvent;
294 - (void)_setSelectWordBeforeMenuEvent:(BOOL)flag;
295 @end
296
297 @interface _WebSafeForwarder : NSObject
298 {
299     id target;  // Non-retained.  Don't retain delegates;
300     id defaultTarget;
301     Class templateClass;
302 }
303 - (id)initWithTarget:(id)t defaultTarget:(id)dt templateClass:(Class)aClass;
304 + (id)safeForwarderWithTarget:(id)t defaultTarget:(id)dt templateClass:(Class)aClass;
305 @end
306
307 @interface NSObject (WebFrameLoadDelegatePrivate)
308 - (void)webView:(WebView *)sender didFirstLayoutInFrame:(WebFrame *)frame;
309 @end