WebCore:
[WebKit-https.git] / WebCore / loader / EmptyClients.h
1 /*
2  * Copyright (C) 2006 Eric Seidel (eric@webkit.org)
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  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef EmptyClients_h
27 #define EmptyClients_h
28
29 #include "ChromeClient.h"
30 #include "ContextMenuClient.h"
31 #include "DragClient.h"
32 #include "DocumentLoader.h"
33 #include "EditCommand.h"
34 #include "EditorClient.h"
35 #include "FocusDirection.h"
36 #include "FloatRect.h"
37 #include "FrameLoaderClient.h"
38 #include "InspectorClient.h"
39 #include "ResourceError.h"
40 #include "SharedBuffer.h"
41
42 /*
43  This file holds empty Client stubs for use by WebCore.
44  Viewless element needs to create a dummy Page->Frame->FrameView tree for use in parsing or executing JavaScript.
45  This tree depends heavily on Clients (usually provided by WebKit classes).
46
47  This file was first created for SVGImage as it had no way to access the current Page (nor should it,
48  since Images are not tied to a page).
49  See http://bugs.webkit.org/show_bug.cgi?id=5971 for the original discussion about this file.
50
51  Ideally, whenever you change a Client class, you should add a stub here.
52  Brittle, yes.  Unfortunate, yes.  Hopefully temporary.
53 */
54
55 namespace WebCore {
56
57 class EmptyChromeClient : public ChromeClient {
58 public:
59     virtual ~EmptyChromeClient() { }
60     virtual void chromeDestroyed() { }
61
62     virtual void setWindowRect(const FloatRect&) { }
63     virtual FloatRect windowRect() { return FloatRect(); }
64
65     virtual FloatRect pageRect() { return FloatRect(); }
66
67     virtual float scaleFactor() { return 1.f; }
68
69     virtual void focus() { }
70     virtual void unfocus() { }
71
72     virtual bool canTakeFocus(FocusDirection) { return false; }
73     virtual void takeFocus(FocusDirection) { }
74
75     virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&) { return 0; }
76     virtual void show() { }
77
78     virtual bool canRunModal() { return false; }
79     virtual void runModal() { }
80
81     virtual void setToolbarsVisible(bool) { }
82     virtual bool toolbarsVisible() { return false; }
83
84     virtual void setStatusbarVisible(bool) { }
85     virtual bool statusbarVisible() { return false; }
86
87     virtual void setScrollbarsVisible(bool) { }
88     virtual bool scrollbarsVisible() { return false; }
89
90     virtual void setMenubarVisible(bool) { }
91     virtual bool menubarVisible() { return false; }
92
93     virtual void setResizable(bool) { }
94
95     virtual void addMessageToConsole(const String& message, unsigned int lineNumber, const String& sourceID) { }
96
97     virtual bool canRunBeforeUnloadConfirmPanel() { return false; }
98     virtual bool runBeforeUnloadConfirmPanel(const String& message, Frame* frame) { return true; }
99
100     virtual void closeWindowSoon() { }
101
102     virtual void runJavaScriptAlert(Frame*, const String&) { }
103     virtual bool runJavaScriptConfirm(Frame*, const String&) { return false; }
104     virtual bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result) { return false; }
105     virtual bool shouldInterruptJavaScript() { return false; }
106
107     virtual void setStatusbarText(const String&) { }
108
109     virtual bool tabsToLinks() const { return false; }
110
111     virtual IntRect windowResizerRect() const { return IntRect(); }
112     virtual void addToDirtyRegion(const IntRect&) { }
113     virtual void scrollBackingStore(int dx, int dy, const IntRect& scrollViewRect, const IntRect& clipRect) { }
114     virtual void updateBackingStore() { }
115
116     virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags) { }
117
118     virtual void setToolTip(const String&) { }
119
120     virtual void print(Frame*) { }
121
122     virtual void exceededDatabaseQuota(Frame*, const String&) { }
123 };
124
125 class EmptyFrameLoaderClient : public FrameLoaderClient {
126 public:
127     virtual ~EmptyFrameLoaderClient() {  }
128     virtual void frameLoaderDestroyed() { }
129
130     virtual bool hasWebView() const { return true; } // mainly for assertions
131     virtual bool hasFrameView() const { return true; } // ditto
132
133     virtual void makeRepresentation(DocumentLoader*) { }
134     virtual void forceLayout() { }
135     virtual void forceLayoutForNonHTML() { }
136
137     virtual void updateHistoryForCommit() { }
138
139     virtual void updateHistoryForBackForwardNavigation() { }
140     virtual void updateHistoryForReload() { }
141     virtual void updateHistoryForStandardLoad() { }
142     virtual void updateHistoryForInternalLoad() { }
143
144     virtual void updateHistoryAfterClientRedirect() { }
145
146     virtual void setCopiesOnScroll() { }
147
148     virtual void detachedFromParent2() { }
149     virtual void detachedFromParent3() { }
150     virtual void detachedFromParent4() { }
151
152     virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&) { }
153
154     virtual void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&) { }
155     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse) { }
156     virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) { }
157     virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) { }
158     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&) { }
159     virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long identifier, int lengthReceived) { }
160     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier) { }
161     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long identifier, const ResourceError&) { }
162     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length) { return false; }
163
164     virtual void dispatchDidHandleOnloadEvents() { }
165     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
166     virtual void dispatchDidCancelClientRedirect() { }
167     virtual void dispatchWillPerformClientRedirect(const KURL&, double interval, double fireDate) { }
168     virtual void dispatchDidChangeLocationWithinPage() { }
169     virtual void dispatchWillClose() { }
170     virtual void dispatchDidReceiveIcon() { }
171     virtual void dispatchDidStartProvisionalLoad() { }
172     virtual void dispatchDidReceiveTitle(const String& title) { }
173     virtual void dispatchDidCommitLoad() { }
174     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
175     virtual void dispatchDidFailLoad(const ResourceError&) { }
176     virtual void dispatchDidFinishDocumentLoad() { }
177     virtual void dispatchDidFinishLoad() { }
178     virtual void dispatchDidFirstLayout() { }
179
180     virtual Frame* dispatchCreatePage() { return 0; }
181     virtual void dispatchShow() { }
182
183     virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String& MIMEType, const ResourceRequest&) { }
184     virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String& frameName) { }
185     virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>) { }
186     virtual void cancelPolicyCheck() { }
187
188     virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
189
190     virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
191
192     virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
193     virtual void revertToProvisionalState(DocumentLoader*) { }
194     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
195
196     virtual void willChangeEstimatedProgress() { }
197     virtual void didChangeEstimatedProgress() { }
198     virtual void postProgressStartedNotification() { }
199     virtual void postProgressEstimateChangedNotification() { }
200     virtual void postProgressFinishedNotification() { }
201
202     virtual void setMainFrameDocumentReady(bool) { }
203
204     virtual void startDownload(const ResourceRequest&) { }
205
206     virtual void willChangeTitle(DocumentLoader*) { }
207     virtual void didChangeTitle(DocumentLoader*) { }
208
209     virtual void committedLoad(DocumentLoader*, const char*, int) { }
210     virtual void finishedLoading(DocumentLoader*) { }
211
212     virtual ResourceError cancelledError(const ResourceRequest&) { return ResourceError(); }
213     virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError(); }
214     virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError(); }
215     virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError(); }
216
217     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError(); }
218     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError(); }
219     virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) { return ResourceError(); }
220
221     virtual bool shouldFallBack(const ResourceError&) { return false; }
222
223     virtual bool canHandleRequest(const ResourceRequest&) const { return false; }
224     virtual bool canShowMIMEType(const String& MIMEType) const { return false; }
225     virtual bool representationExistsForURLScheme(const String& URLScheme) const { return false; }
226     virtual String generatedMIMETypeForURLScheme(const String& URLScheme) const { return ""; }
227
228     virtual void frameLoadCompleted() { }
229     virtual void restoreViewState() { }
230     virtual void provisionalLoadStarted() { }
231     virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; }
232     virtual void addHistoryItemForFragmentScroll() { }
233     virtual void didFinishLoad() { }
234     virtual void prepareForDataSourceReplacement() { }
235
236     virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request, const SubstituteData& substituteData) { return DocumentLoader::create(request, substituteData); }
237     virtual void setTitle(const String& title, const KURL&) { }
238
239     virtual String userAgent(const KURL&) { return ""; }
240
241     virtual void savePlatformDataToCachedPage(CachedPage*) { }
242     virtual void transitionToCommittedFromCachedPage(CachedPage*) { }
243     virtual void transitionToCommittedForNewPage() { }    
244
245     virtual void updateGlobalHistory(const KURL&) { }
246     virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
247     virtual void saveViewStateToItem(HistoryItem*) { }
248     virtual bool canCachePage() const { return false; }
249
250     virtual PassRefPtr<Frame> createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
251                                const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) { return 0; }
252     virtual Widget* createPlugin(const IntSize&,Element*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; }
253     virtual Widget* createJavaAppletWidget(const IntSize&, Element*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; }
254
255     virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType) { return ObjectContentType(); }
256     virtual String overrideMediaType() const { return String(); }
257
258     virtual void redirectDataToPlugin(Widget*) {}
259     virtual void windowObjectCleared() {}
260     virtual void didPerformFirstNavigation() const {}
261
262     virtual void registerForIconNotification(bool listen) {}
263
264 #if PLATFORM(MAC)
265     virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long identifier, NSCachedURLResponse* response) const { return response; }
266 #endif
267
268 };
269
270 class EmptyEditorClient : public EditorClient {
271 public:
272     virtual ~EmptyEditorClient() { }
273     virtual void pageDestroyed() { }
274
275     virtual bool shouldDeleteRange(Range*) { return false; }
276     virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
277     virtual bool smartInsertDeleteEnabled() { return false; }
278     virtual bool isContinuousSpellCheckingEnabled() { return false; }
279     virtual void toggleContinuousSpellChecking() { }
280     virtual bool isGrammarCheckingEnabled() { return false; }
281     virtual void toggleGrammarChecking() { }
282     virtual int spellCheckerDocumentTag() { return -1; }
283
284     virtual bool selectWordBeforeMenuEvent() { return false; }
285     virtual bool isEditable() { return false; }
286
287     virtual bool shouldBeginEditing(Range*) { return false; }
288     virtual bool shouldEndEditing(Range*) { return false; }
289     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; }
290     //  virtual bool shouldInsertNode(Node*, Range* replacingRange, WebViewInsertAction) { return false; }
291     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) { return false; }
292     virtual bool shouldChangeSelectedRange(Range* fromRange, Range* toRange, EAffinity, bool stillSelecting) { return false; }
293
294     virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
295     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) { return false; }
296     //  virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
297     //  virtual bool doCommandBySelector(SEL selector) { return false; }
298     //
299     virtual void didBeginEditing() { }
300     virtual void respondToChangedContents() { }
301     virtual void respondToChangedSelection() { }
302     virtual void didEndEditing() { }
303     virtual void didWriteSelectionToPasteboard() { }
304     virtual void didSetSelectionTypesForPasteboard() { }
305     //  virtual void webViewDidChangeTypingStyle:(NSNotification *)notification { }
306     //  virtual void webViewDidChangeSelection:(NSNotification *)notification { }
307     //  virtual NSUndoManager* undoManagerForWebView:(WebView *)webView { return 0; }
308
309     virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
310     virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
311     virtual void clearUndoRedoOperations() { }
312
313     virtual bool canUndo() const { return false; }
314     virtual bool canRedo() const { return false; }
315
316     virtual void undo() { }
317     virtual void redo() { }
318
319     virtual void handleKeyboardEvent(KeyboardEvent*) { }
320     virtual void handleInputMethodKeydown(KeyboardEvent*) { }
321
322     virtual void textFieldDidBeginEditing(Element*) { }
323     virtual void textFieldDidEndEditing(Element*) { }
324     virtual void textDidChangeInTextField(Element*) { }
325     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) { return false; }
326     virtual void textWillBeDeletedInTextField(Element*) { }
327     virtual void textDidChangeInTextArea(Element*) { }
328
329 #if PLATFORM(MAC)
330     virtual void markedTextAbandoned(Frame*) { }
331
332     virtual NSString* userVisibleString(NSURL*) { return 0; }
333 #ifdef BUILDING_ON_TIGER
334     virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; }
335 #endif
336 #endif
337     virtual void ignoreWordInSpellDocument(const String&) { }
338     virtual void learnWord(const String&) { }
339     virtual void checkSpellingOfString(const UChar*, int length, int* misspellingLocation, int* misspellingLength) { }
340     virtual void checkGrammarOfString(const UChar*, int length, Vector<GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength) { }
341     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) { }
342     virtual void updateSpellingUIWithMisspelledWord(const String&) { }
343     virtual void showSpellingUI(bool show) { }
344     virtual bool spellingUIIsShowing() { return false; }
345     virtual void getGuessesForWord(const String&, Vector<String>& guesses) { }
346     virtual void setInputMethodState(bool enabled) { }
347
348
349 };
350
351 class EmptyContextMenuClient : public ContextMenuClient {
352 public:
353     virtual ~EmptyContextMenuClient() {  }
354     virtual void contextMenuDestroyed() { }
355
356     virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
357     virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
358
359     virtual void downloadURL(const KURL& url) { }
360     virtual void copyImageToClipboard(const HitTestResult&) { }
361     virtual void searchWithGoogle(const Frame*) { }
362     virtual void lookUpInDictionary(Frame*) { }
363     virtual void speak(const String&) { }
364     virtual void stopSpeaking() { }
365
366 #if PLATFORM(MAC)
367     virtual void searchWithSpotlight() { }
368 #endif
369 };
370
371 class EmptyDragClient : public DragClient {
372 public:
373     virtual ~EmptyDragClient() {}
374     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
375     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*) { }
376     virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
377     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; }
378     virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { }
379     virtual DragImageRef createDragImageForLink(KURL&, const String& label, Frame*) { return 0; }
380     virtual void dragControllerDestroyed() { }
381 };
382
383 class EmptyInspectorClient : public InspectorClient {
384 public:
385     virtual ~EmptyInspectorClient() {}
386
387     virtual void inspectorDestroyed() {};
388
389     virtual Page* createPage() { return 0; };
390
391     virtual String localizedStringsURL() { return String(); };
392
393     virtual void showWindow() {};
394     virtual void closeWindow() {};
395
396     virtual void attachWindow() {};
397     virtual void detachWindow() {};
398
399     virtual void setAttachedWindowHeight(unsigned) {};
400
401     virtual void highlight(Node*) {};
402     virtual void hideHighlight() {};
403     virtual void inspectedURLChanged(const String& newURL) {};
404 };
405
406 }
407
408 #endif // EmptyClients_h