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