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 repaint(const IntRect&, bool contentChanged, bool immediate = false, bool repaintContentOnly = false) { }
117     virtual void scroll(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect) { }
118     virtual IntPoint screenToWindow(const IntPoint& p) const { return p; }
119     virtual IntRect windowToScreen(const IntRect& r) const { return r; }
120
121     virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags) { }
122
123     virtual void setToolTip(const String&) { }
124
125     virtual void print(Frame*) { }
126
127     virtual void exceededDatabaseQuota(Frame*, const String&) { }
128 };
129
130 class EmptyFrameLoaderClient : public FrameLoaderClient {
131 public:
132     virtual ~EmptyFrameLoaderClient() {  }
133     virtual void frameLoaderDestroyed() { }
134
135     virtual bool hasWebView() const { return true; } // mainly for assertions
136     virtual bool hasFrameView() const { return true; } // ditto
137
138     virtual void makeRepresentation(DocumentLoader*) { }
139     virtual void forceLayout() { }
140     virtual void forceLayoutForNonHTML() { }
141
142     virtual void updateHistoryForCommit() { }
143
144     virtual void updateHistoryForBackForwardNavigation() { }
145     virtual void updateHistoryForReload() { }
146     virtual void updateHistoryForStandardLoad() { }
147     virtual void updateHistoryForInternalLoad() { }
148
149     virtual void updateHistoryAfterClientRedirect() { }
150
151     virtual void setCopiesOnScroll() { }
152
153     virtual void detachedFromParent2() { }
154     virtual void detachedFromParent3() { }
155     virtual void detachedFromParent4() { }
156
157     virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&) { }
158
159     virtual void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&) { }
160     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse) { }
161     virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) { }
162     virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) { }
163     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&) { }
164     virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long identifier, int lengthReceived) { }
165     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier) { }
166     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long identifier, const ResourceError&) { }
167     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length) { return false; }
168
169     virtual void dispatchDidHandleOnloadEvents() { }
170     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
171     virtual void dispatchDidCancelClientRedirect() { }
172     virtual void dispatchWillPerformClientRedirect(const KURL&, double interval, double fireDate) { }
173     virtual void dispatchDidChangeLocationWithinPage() { }
174     virtual void dispatchWillClose() { }
175     virtual void dispatchDidReceiveIcon() { }
176     virtual void dispatchDidStartProvisionalLoad() { }
177     virtual void dispatchDidReceiveTitle(const String& title) { }
178     virtual void dispatchDidCommitLoad() { }
179     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
180     virtual void dispatchDidFailLoad(const ResourceError&) { }
181     virtual void dispatchDidFinishDocumentLoad() { }
182     virtual void dispatchDidFinishLoad() { }
183     virtual void dispatchDidFirstLayout() { }
184
185     virtual Frame* dispatchCreatePage() { return 0; }
186     virtual void dispatchShow() { }
187
188     virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String& MIMEType, const ResourceRequest&) { }
189     virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String& frameName) { }
190     virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>) { }
191     virtual void cancelPolicyCheck() { }
192
193     virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
194
195     virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
196
197     virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
198     virtual void revertToProvisionalState(DocumentLoader*) { }
199     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
200
201     virtual void willChangeEstimatedProgress() { }
202     virtual void didChangeEstimatedProgress() { }
203     virtual void postProgressStartedNotification() { }
204     virtual void postProgressEstimateChangedNotification() { }
205     virtual void postProgressFinishedNotification() { }
206
207     virtual void setMainFrameDocumentReady(bool) { }
208
209     virtual void startDownload(const ResourceRequest&) { }
210
211     virtual void willChangeTitle(DocumentLoader*) { }
212     virtual void didChangeTitle(DocumentLoader*) { }
213
214     virtual void committedLoad(DocumentLoader*, const char*, int) { }
215     virtual void finishedLoading(DocumentLoader*) { }
216
217     virtual ResourceError cancelledError(const ResourceRequest&) { return ResourceError(); }
218     virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError(); }
219     virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError(); }
220     virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError(); }
221
222     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError(); }
223     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError(); }
224     virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) { return ResourceError(); }
225
226     virtual bool shouldFallBack(const ResourceError&) { return false; }
227
228     virtual bool canHandleRequest(const ResourceRequest&) const { return false; }
229     virtual bool canShowMIMEType(const String& MIMEType) const { return false; }
230     virtual bool representationExistsForURLScheme(const String& URLScheme) const { return false; }
231     virtual String generatedMIMETypeForURLScheme(const String& URLScheme) const { return ""; }
232
233     virtual void frameLoadCompleted() { }
234     virtual void restoreViewState() { }
235     virtual void provisionalLoadStarted() { }
236     virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; }
237     virtual void addHistoryItemForFragmentScroll() { }
238     virtual void didFinishLoad() { }
239     virtual void prepareForDataSourceReplacement() { }
240
241     virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request, const SubstituteData& substituteData) { return DocumentLoader::create(request, substituteData); }
242     virtual void setTitle(const String& title, const KURL&) { }
243
244     virtual String userAgent(const KURL&) { return ""; }
245
246     virtual void savePlatformDataToCachedPage(CachedPage*) { }
247     virtual void transitionToCommittedFromCachedPage(CachedPage*) { }
248     virtual void transitionToCommittedForNewPage() { }    
249
250     virtual void updateGlobalHistory(const KURL&) { }
251     virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
252     virtual void saveViewStateToItem(HistoryItem*) { }
253     virtual bool canCachePage() const { return false; }
254
255     virtual PassRefPtr<Frame> createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
256                                const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) { return 0; }
257     virtual Widget* createPlugin(const IntSize&,Element*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; }
258     virtual Widget* createJavaAppletWidget(const IntSize&, Element*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; }
259
260     virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType) { return ObjectContentType(); }
261     virtual String overrideMediaType() const { return String(); }
262
263     virtual void redirectDataToPlugin(Widget*) {}
264     virtual void windowObjectCleared() {}
265     virtual void didPerformFirstNavigation() const {}
266
267     virtual void registerForIconNotification(bool listen) {}
268
269 #if PLATFORM(MAC)
270     virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long identifier, NSCachedURLResponse* response) const { return response; }
271 #endif
272
273 };
274
275 class EmptyEditorClient : public EditorClient {
276 public:
277     virtual ~EmptyEditorClient() { }
278     virtual void pageDestroyed() { }
279
280     virtual bool shouldDeleteRange(Range*) { return false; }
281     virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
282     virtual bool smartInsertDeleteEnabled() { return false; }
283     virtual bool isContinuousSpellCheckingEnabled() { return false; }
284     virtual void toggleContinuousSpellChecking() { }
285     virtual bool isGrammarCheckingEnabled() { return false; }
286     virtual void toggleGrammarChecking() { }
287     virtual int spellCheckerDocumentTag() { return -1; }
288
289     virtual bool selectWordBeforeMenuEvent() { return false; }
290     virtual bool isEditable() { return false; }
291
292     virtual bool shouldBeginEditing(Range*) { return false; }
293     virtual bool shouldEndEditing(Range*) { return false; }
294     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; }
295     //  virtual bool shouldInsertNode(Node*, Range* replacingRange, WebViewInsertAction) { return false; }
296     virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) { return false; }
297     virtual bool shouldChangeSelectedRange(Range* fromRange, Range* toRange, EAffinity, bool stillSelecting) { return false; }
298
299     virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
300     virtual bool shouldMoveRangeAfterDelete(Range*, Range*) { return false; }
301     //  virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
302     //  virtual bool doCommandBySelector(SEL selector) { return false; }
303     //
304     virtual void didBeginEditing() { }
305     virtual void respondToChangedContents() { }
306     virtual void respondToChangedSelection() { }
307     virtual void didEndEditing() { }
308     virtual void didWriteSelectionToPasteboard() { }
309     virtual void didSetSelectionTypesForPasteboard() { }
310     //  virtual void webViewDidChangeTypingStyle:(NSNotification *)notification { }
311     //  virtual void webViewDidChangeSelection:(NSNotification *)notification { }
312     //  virtual NSUndoManager* undoManagerForWebView:(WebView *)webView { return 0; }
313
314     virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
315     virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
316     virtual void clearUndoRedoOperations() { }
317
318     virtual bool canUndo() const { return false; }
319     virtual bool canRedo() const { return false; }
320
321     virtual void undo() { }
322     virtual void redo() { }
323
324     virtual void handleKeyboardEvent(KeyboardEvent*) { }
325     virtual void handleInputMethodKeydown(KeyboardEvent*) { }
326
327     virtual void textFieldDidBeginEditing(Element*) { }
328     virtual void textFieldDidEndEditing(Element*) { }
329     virtual void textDidChangeInTextField(Element*) { }
330     virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) { return false; }
331     virtual void textWillBeDeletedInTextField(Element*) { }
332     virtual void textDidChangeInTextArea(Element*) { }
333
334 #if PLATFORM(MAC)
335     virtual void markedTextAbandoned(Frame*) { }
336
337     virtual NSString* userVisibleString(NSURL*) { return 0; }
338 #ifdef BUILDING_ON_TIGER
339     virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; }
340 #endif
341 #endif
342     virtual void ignoreWordInSpellDocument(const String&) { }
343     virtual void learnWord(const String&) { }
344     virtual void checkSpellingOfString(const UChar*, int length, int* misspellingLocation, int* misspellingLength) { }
345     virtual void checkGrammarOfString(const UChar*, int length, Vector<GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength) { }
346     virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) { }
347     virtual void updateSpellingUIWithMisspelledWord(const String&) { }
348     virtual void showSpellingUI(bool show) { }
349     virtual bool spellingUIIsShowing() { return false; }
350     virtual void getGuessesForWord(const String&, Vector<String>& guesses) { }
351     virtual void setInputMethodState(bool enabled) { }
352
353
354 };
355
356 class EmptyContextMenuClient : public ContextMenuClient {
357 public:
358     virtual ~EmptyContextMenuClient() {  }
359     virtual void contextMenuDestroyed() { }
360
361     virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
362     virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
363
364     virtual void downloadURL(const KURL& url) { }
365     virtual void copyImageToClipboard(const HitTestResult&) { }
366     virtual void searchWithGoogle(const Frame*) { }
367     virtual void lookUpInDictionary(Frame*) { }
368     virtual void speak(const String&) { }
369     virtual void stopSpeaking() { }
370
371 #if PLATFORM(MAC)
372     virtual void searchWithSpotlight() { }
373 #endif
374 };
375
376 class EmptyDragClient : public DragClient {
377 public:
378     virtual ~EmptyDragClient() {}
379     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
380     virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*) { }
381     virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
382     virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; }
383     virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { }
384     virtual DragImageRef createDragImageForLink(KURL&, const String& label, Frame*) { return 0; }
385     virtual void dragControllerDestroyed() { }
386 };
387
388 class EmptyInspectorClient : public InspectorClient {
389 public:
390     virtual ~EmptyInspectorClient() {}
391
392     virtual void inspectorDestroyed() {};
393
394     virtual Page* createPage() { return 0; };
395
396     virtual String localizedStringsURL() { return String(); };
397
398     virtual void showWindow() {};
399     virtual void closeWindow() {};
400
401     virtual void attachWindow() {};
402     virtual void detachWindow() {};
403
404     virtual void setAttachedWindowHeight(unsigned) {};
405
406     virtual void highlight(Node*) {};
407     virtual void hideHighlight() {};
408     virtual void inspectedURLChanged(const String& newURL) {};
409 };
410
411 }
412
413 #endif // EmptyClients_h