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