WebCore:
[WebKit-https.git] / WebKit / WebView.subproj / WebViewPrivate.h
1 /*      
2     WebViewPrivate.m
3     Copyright 2001, Apple, Inc. All rights reserved.
4 */
5
6 #import <WebKit/WebPolicyDelegate.h>
7 #import <WebKit/WebView.h>
8 #import <WebKit/WebFramePrivate.h>
9
10 @class DOMCSSStyleDeclaration;
11 @class DOMNode;
12 @class DOMRange;
13 @class NSError;
14 @class WebBackForwardList;
15 @class WebFrame;
16 @class WebPreferences;
17 @class WebCoreSettings;
18 @protocol WebFormDelegate;
19
20 #define NUM_LOCATION_CHANGE_DELEGATE_SELECTORS  10
21
22 typedef struct _WebResourceDelegateImplementationCache {
23     uint delegateImplementsDidCancelAuthenticationChallenge:1;
24     uint delegateImplementsDidReceiveAuthenticationChallenge:1;
25     uint delegateImplementsDidReceiveResponse:1;
26     uint delegateImplementsDidReceiveContentLength:1;
27     uint delegateImplementsDidFinishLoadingFromDataSource:1;
28     uint delegateImplementsWillSendRequest:1;
29     uint delegateImplementsIdentifierForRequest:1;
30 } WebResourceDelegateImplementationCache;
31
32 extern NSString *_WebCanGoBackKey;
33 extern NSString *_WebCanGoForwardKey;
34 extern NSString *_WebEstimatedProgressKey;
35 extern NSString *_WebIsLoadingKey;
36 extern NSString *_WebMainFrameIconKey;
37 extern NSString *_WebMainFrameTitleKey;
38 extern NSString *_WebMainFrameURLKey;
39
40 @interface WebViewPrivate : NSObject
41 {
42 @public
43     WebFrame *mainFrame;
44     
45     id UIDelegate;
46     id UIDelegateForwarder;
47     id resourceProgressDelegate;
48     id resourceProgressDelegateForwarder;
49     id downloadDelegate;
50     id policyDelegate;
51     id policyDelegateForwarder;
52     id frameLoadDelegate;
53     id frameLoadDelegateForwarder;
54     id <WebFormDelegate> formDelegate;
55     id editingDelegate;
56     id editingDelegateForwarder;
57     
58     WebBackForwardList *backForwardList;
59     BOOL useBackForwardList;
60     
61     float textSizeMultiplier;
62
63     NSString *applicationNameForUserAgent;
64     NSString *userAgent;
65     BOOL userAgentOverridden;
66     
67     BOOL defersCallbacks;
68
69     NSString *setName;
70
71     WebPreferences *preferences;
72     WebCoreSettings *settings;
73         
74     BOOL lastElementWasNonNil;
75
76     NSWindow *hostWindow;
77
78     int programmaticFocusCount;
79     
80     WebResourceDelegateImplementationCache resourceLoadDelegateImplementations;
81
82     long long totalPageAndResourceBytesToLoad;
83     long long totalBytesReceived;
84     double progressValue;
85     double lastNotifiedProgressValue;
86     double lastNotifiedProgressTime;
87     double progressNotificationInterval;
88     double progressNotificationTimeInterval;
89     BOOL finalProgressChangedSent;
90     WebFrame *orginatingProgressFrame;
91     
92     int numProgressTrackedFrames;
93     NSMutableDictionary *progressItems;
94     
95     void *observationInfo;
96     
97     NSArray *draggedTypes;
98 }
99 @end
100
101 @interface WebView (WebPendingPublic)
102
103 - (void)setMainFrameURL:(NSString *)URLString;
104 - (NSString *)mainFrameURL;
105 - (BOOL)isLoading;
106 - (NSString *)mainFrameTitle;
107 - (NSImage *)mainFrameIcon;
108
109 @end
110
111 @interface WebView (WebPrivate)
112
113 + (BOOL)_viewClass:(Class *)vClass andRepresentationClass:(Class *)rClass forMIMEType:(NSString *)MIMEType;
114
115 + (NSArray *)_supportedFileExtensions;
116
117 /*!
118     @method canShowFile:
119     @abstract Checks if the WebKit can show the content of the file at the specified path.
120     @param path The path of the file to check
121     @result YES if the WebKit can show the content of the file at the specified path.
122 */
123 + (BOOL)canShowFile:(NSString *)path;
124
125 /*!
126     @method suggestedFileExtensionForMIMEType:
127     @param MIMEType The MIME type to check.
128     @result The extension based on the MIME type
129 */
130 + (NSString *)suggestedFileExtensionForMIMEType: (NSString *)MIMEType;
131
132 /*!
133     @method frameForDataSource:
134     @abstract Return the frame associated with the data source.
135     @discussion Traverses the frame tree to find the frame associated
136     with a datasource.
137     @param datasource The datasource to  match against each frame.
138     @result The frame that has the associated datasource.
139 */
140 - (WebFrame *)_frameForDataSource: (WebDataSource *)dataSource;
141
142     /*!
143             @method frameForView:
144      @abstract Return the frame associated with the view.
145      @discussion Traverses the frame tree to find the view.
146      @param aView The view to match against each frame.
147      @result The frame that has the associated view.
148      */
149 - (WebFrame *)_frameForView: (WebFrameView *)aView;
150
151 - (WebFrame *)_createFrameNamed:(NSString *)name inParent:(WebFrame *)parent allowsScrolling:(BOOL)allowsScrolling;
152
153 - (void)_finishedLoadingResourceFromDataSource:(WebDataSource *)dataSource;
154 - (void)_receivedError:(NSError *)error fromDataSource:(WebDataSource *)dataSource;
155 - (void)_mainReceivedBytesSoFar:(unsigned)bytesSoFar fromDataSource:(WebDataSource *)dataSource complete:(BOOL)isComplete;
156 - (void)_mainReceivedError:(NSError *)error fromDataSource:(WebDataSource *)dataSource complete:(BOOL)isComplete;
157 + (NSString *)_MIMETypeForFile:(NSString *)path;
158 - (void)_downloadURL:(NSURL *)URL;
159 - (void)_downloadURL:(NSURL *)URL toDirectory:(NSString *)directoryPath;
160
161 - (BOOL)defersCallbacks;
162 - (void)setDefersCallbacks:(BOOL)defers;
163
164 - (void)_setTopLevelFrameName:(NSString *)name;
165 - (WebFrame *)_findFrameInThisWindowNamed: (NSString *)name;
166 - (WebFrame *)_findFrameNamed: (NSString *)name;
167
168 - (WebView *)_openNewWindowWithRequest:(NSURLRequest *)request;
169
170 - (NSMenu *)_menuForElement:(NSDictionary *)element;
171
172 - (void)_mouseDidMoveOverElement:(NSDictionary *)dictionary modifierFlags:(unsigned)modifierFlags;
173
174 /*!
175 Could be worth adding to the API.
176     @method loadItem:
177     @abstract Loads the view with the contents described by the item, including frame content
178         described by child items.
179     @param item   The item to load.  It is not retained, but a copy will appear in the
180         BackForwardList on this WebView.
181 */
182 - (void)_loadItem:(WebHistoryItem *)item;
183 /*!
184 Could be worth adding to the API.
185     @method loadItemsFromOtherView:
186     @abstract Loads the view with the contents of the other view, including its backforward list.
187     @param otherView   The WebView from which to copy contents.
188 */
189 - (void)_loadBackForwardListFromOtherView:(WebView *)otherView;
190
191 - (void)_goToItem:(WebHistoryItem *)item withLoadType:(WebFrameLoadType)type;
192
193 // May well become public
194 - (void)_setFormDelegate:(id<WebFormDelegate>)delegate;
195 - (id<WebFormDelegate>)_formDelegate;
196
197 - (WebCoreSettings *)_settings;
198 - (void)_updateWebCoreSettingsFromPreferences:(WebPreferences *)prefs;
199
200 - (id)_frameLoadDelegateForwarder;
201 - (id)_resourceLoadDelegateForwarder;
202 - (void)_cacheResourceLoadDelegateImplementations;
203 - (WebResourceDelegateImplementationCache)_resourceLoadDelegateImplementations;
204 - (id)_policyDelegateForwarder;
205 - (id)_UIDelegateForwarder;
206 - (id)_editingDelegateForwarder;
207
208 - (void)_closeWindow;
209
210 - (void)_registerDraggedTypes;
211
212 - (void)_close;
213
214 /*!
215     @method _registerViewClass:representationClass:forURLScheme:
216     @discussion Register classes that implement WebDocumentView and WebDocumentRepresentation respectively.
217     @param viewClass The WebDocumentView class to use to render data for a given MIME type.
218     @param representationClass The WebDocumentRepresentation class to use to represent data of the given MIME type.
219     @param scheme The URL scheme to represent with an object of the given class.
220 */
221 + (void)_registerViewClass:(Class)viewClass representationClass:(Class)representationClass forURLScheme:(NSString *)URLScheme;
222
223 + (void)_unregisterViewClassAndRepresentationClassForMIMEType:(NSString *)MIMEType;
224
225 + (NSString *)_generatedMIMETypeForURLScheme:(NSString *)URLScheme;
226 + (BOOL)_representationExistsForURLScheme:(NSString *)URLScheme;
227 /*!
228      @method _canHandleRequest:
229      @abstract Performs a "preflight" operation that performs some
230      speculative checks to see if a request can be used to create
231      a WebDocumentView and WebDocumentRepresentation.
232      @discussion The result of this method is valid only as long as no
233      protocols or schemes are registered or unregistered, and as long as
234      the request is not mutated (if the request is mutable). Hence, clients
235      should be prepared to handle failures even if they have performed request
236      preflighting by caling this method.
237      @param request The request to preflight.
238      @result YES if it is likely that a WebDocumentView and WebDocumentRepresentation
239      can be created for the request, NO otherwise.
240 */
241 + (BOOL)_canHandleRequest:(NSURLRequest *)request;
242
243 + (NSString *)_decodeData:(NSData *)data;
244
245 - (void)_pushPerformingProgrammaticFocus;
246 - (void)_popPerformingProgrammaticFocus;
247 - (BOOL)_isPerformingProgrammaticFocus;
248
249 // Methods dealing with the estimated progress completion.
250 - (void)_progressStarted:(WebFrame *)frame;
251 - (void)_progressCompleted:(WebFrame *)frame;
252 - (void)_incrementProgressForConnectionDelegate:(id)connectionDelegate response:(NSURLResponse *)response;
253 - (void)_incrementProgressForConnectionDelegate:(id)connectionDelegate data:(NSData *)dataSource;
254 - (void)_completeProgressForConnectionDelegate:(id)connectionDelegate;
255
256 - (void)_didStartProvisionalLoadForFrame:(WebFrame *)frame;
257 - (void)_didCommitLoadForFrame:(WebFrame *)frame;
258 - (void)_didFinishLoadForFrame:(WebFrame *)frame;
259 - (void)_didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame;
260 - (void)_didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame;
261
262 - (void)_willChangeValueForKey:(NSString *)key;
263 - (void)_didChangeValueForKey:(NSString *)key;
264
265 - (void)_reloadForPluginChanges;
266 + (void)_setAlwaysUseATSU:(BOOL)f;
267
268 - (NSCachedURLResponse *)_cachedResponseForURL:(NSURL *)URL;
269
270 @end
271
272 @interface WebView (WebViewPrintingPrivate)
273 /*!
274     @method _adjustPrintingMarginsForHeaderAndFooter:
275     @abstract Increase the top and bottom margins for the current print operation to
276     account for the header and footer height. 
277     @discussion Called by <WebDocument> implementors once when a print job begins. If the
278     <WebDocument> implementor implements knowsPageRange:, this should be called from there.
279     Otherwise this should be called from beginDocument. The <WebDocument> implementors need
280     to also call _drawHeaderAndFooter.
281 */
282 - (void)_adjustPrintingMarginsForHeaderAndFooter;
283
284 /*!
285     @method _drawHeaderAndFooter
286     @abstract Gives the WebView's UIDelegate a chance to draw a header and footer on the
287     printed page. 
288     @discussion This should be called by <WebDocument> implementors from an override of
289     drawPageBorderWithSize:.
290 */
291 - (void)_drawHeaderAndFooter;
292 @end
293
294 @interface _WebSafeForwarder : NSObject
295 {
296     id target;  // Non-retained.  Don't retain delegates;
297     id defaultTarget;
298     Class templateClass;
299 }
300 - (id)initWithTarget:(id)t defaultTarget:(id)dt templateClass:(Class)aClass;
301 + (id)safeForwarderWithTarget:(id)t defaultTarget:(id)dt templateClass:(Class)aClass;
302 @end
303
304
305
306 /* ------------------------------------------------------------------*/
307
308 typedef enum
309 {
310         WebViewInsertActionTyped,       
311         WebViewInsertActionPasted,      
312         WebViewInsertActionDropped,     
313 } WebViewInsertAction;
314
315 extern NSString * const WebViewDidBeginEditingNotification;
316 extern NSString * const WebViewDidChangeNotification;
317 extern NSString * const WebViewDidEndEditingNotification;
318 extern NSString * const WebViewDidChangeTypingStyleNotification;
319 extern NSString * const WebViewDidChangeSelectionNotification;
320
321 @interface NSObject (WebViewEditingDelegate)
322 - (BOOL)webViewShouldBeginEditing:(WebView *)webView;
323 - (BOOL)webViewShouldEndEditing:(WebView *)webView;
324 - (BOOL)webView:(WebView *)webView shouldInsertNode:(DOMNode *)node replacingDOMRange:(DOMRange *)range givenAction:(WebViewInsertAction)action;
325 - (BOOL)webView:(WebView *)webView shouldInsertText:(NSString *)text replacingDOMRange:(DOMRange *)range givenAction:(WebViewInsertAction)action;
326 - (BOOL)webView:(WebView *)webView shouldDeleteDOMRange:(DOMRange *)range;
327 - (BOOL)webView:(WebView *)webView shouldChangeSelectedDOMRange:(DOMRange *)currentRange toDOMRange:(DOMRange *)proposedRange;
328 - (BOOL)webView:(WebView *)webView shouldApplyStyle:(DOMCSSStyleDeclaration *)style toElementsInDOMRange:(DOMRange *)range;
329 - (BOOL)webView:(WebView *)webView shouldChangeTypingStyle:(DOMCSSStyleDeclaration *)currentStyle toStyle:(DOMCSSStyleDeclaration *)proposedStyle;
330 - (BOOL)webView:(WebView *)webView doCommandBySelector:(SEL)selector;
331 - (void)webViewDidBeginEditing:(NSNotification *)notification;
332 - (void)webViewDidChange:(NSNotification *)notification;
333 - (void)webViewDidEndEditing:(NSNotification *)notification;
334 - (void)webViewDidChangeTypingStyle:(NSNotification *)notification;
335 - (void)webViewDidChangeSelection:(NSNotification *)notification;
336 - (NSUndoManager *)undoManagerForWebView:(WebView *)webView;
337 @end
338
339 @interface WebView (WebEditingExtras)
340 - (WebBridge *)_bridgeForCurrentSelection;
341 - (void)setSelectedDOMRange:(DOMRange *)range;
342 - (DOMRange *)selectedDOMRange;
343 - (void)setEditingDelegate:(id)delegate;
344 - (id)editingDelegate;
345 - (void)editingKeyDown:(NSEvent *)event;
346 @end
347
348
349 @interface WebView (WebViewUndoableEditing)
350 - (void)insertText:(NSString *)text replacingDOMRange:(DOMRange *)range;    
351 @end