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