Reviewed by Maciej
[WebKit-https.git] / WebCore / platform / graphics / svg / 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 #ifdef SVG_SUPPORT
30
31 #include "ChromeClient.h"
32 #include "ContextMenuClient.h"
33 #include "DragClient.h"
34 #include "EditorClient.h"
35 #include "FocusDirection.h"
36 #include "FrameLoaderClient.h"
37
38 /*
39  This file holds empty Client stubs for use by SVGImage.
40  SVGImage needs to create a dummy Page->Frame->FrameView tree for use in parsing an SVGDocument.
41  This tree depends heavily on Clients (usually provided by WebKit classes).
42  
43  SVGImage has no way to access the current Page (nor should it, since Images are not tied to a page).
44  See http://bugs.webkit.org/show_bug.cgi?id=5971 for more discussion on this issue.
45  
46  Ideally, whenever you change a Client class, you should add a stub here.
47  Brittle, yes.  Unfortunate, yes.  Hopefully temporary.
48 */
49
50 namespace WebCore {
51
52 class SVGEmptyChromeClient : public ChromeClient {
53 public:
54     virtual ~SVGEmptyChromeClient() { }
55     virtual void chromeDestroyed() { }
56     
57     virtual void setWindowRect(const FloatRect&) { }
58     virtual FloatRect windowRect() { return FloatRect(); }
59     
60     virtual FloatRect pageRect() { return FloatRect(); }
61     
62     virtual float scaleFactor() { return 1.f; }
63     
64     virtual void focus() { }
65     virtual void unfocus() { }
66     
67     virtual bool canTakeFocus(FocusDirection) { return false; }
68     virtual void takeFocus(FocusDirection) { }
69     
70     virtual Page* createWindow(const FrameLoadRequest&) { return 0; }
71     virtual Page* createModalDialog(const FrameLoadRequest&) { return 0; }
72     virtual void show() { }
73     
74     virtual bool canRunModal() { return false; }
75     virtual void runModal() { }
76     
77     virtual void setToolbarsVisible(bool) { }
78     virtual bool toolbarsVisible() { return false; }
79     
80     virtual void setStatusbarVisible(bool) { }
81     virtual bool statusbarVisible() { return false; }
82     
83     virtual void setScrollbarsVisible(bool) { }
84     virtual bool scrollbarsVisible() { return false; }
85     
86     virtual void setMenubarVisible(bool) { }
87     virtual bool menubarVisible() { return false; }
88     
89     virtual void setResizable(bool) { }
90     
91     virtual void addMessageToConsole(const String& message, unsigned int lineNumber, const String& sourceID) { }
92     
93     virtual bool canRunBeforeUnloadConfirmPanel() { return false; }
94     virtual bool runBeforeUnloadConfirmPanel(const String& message, Frame* frame) { return true; }
95     
96     virtual void closeWindowSoon() { }
97     
98     virtual void runJavaScriptAlert(Frame*, const String&) { }
99     virtual bool runJavaScriptConfirm(Frame*, const String&) { return false; }
100     virtual bool runJavaScriptPrompt(Frame*, const String& message, const String& defaultValue, String& result) { return false; }
101     virtual void setStatusbarText(const String&) { }
102 };
103
104 class SVGEmptyFrameLoaderClient : public FrameLoaderClient {
105 public:
106     virtual ~SVGEmptyFrameLoaderClient() {  }
107     virtual void frameLoaderDestroyed() { }
108     
109     virtual bool hasWebView() const { return true; } // mainly for assertions
110     virtual bool hasFrameView() const { return true; } // ditto
111     
112     virtual bool hasBackForwardList() const { return false; }
113     virtual void resetBackForwardList() { }
114     
115     virtual bool provisionalItemIsTarget() const { return false; }
116     virtual bool loadProvisionalItemFromPageCache() { return false; }
117     virtual void invalidateCurrentItemPageCache() { }
118     
119     virtual bool privateBrowsingEnabled() const { return false; }
120     
121     virtual void makeDocumentView() { }
122     virtual void makeRepresentation(DocumentLoader*) { }
123     virtual void forceLayout() { }
124     virtual void forceLayoutForNonHTML() { }
125     
126     virtual void updateHistoryForCommit() { }
127     
128     virtual void updateHistoryForBackForwardNavigation() { }
129     virtual void updateHistoryForReload() { }
130     virtual void updateHistoryForStandardLoad() { }
131     virtual void updateHistoryForInternalLoad() { }
132     
133     virtual void updateHistoryAfterClientRedirect() { }
134     
135     virtual void setCopiesOnScroll() { }
136         
137     virtual void detachedFromParent2() { }
138     virtual void detachedFromParent3() { }
139     virtual void detachedFromParent4() { }
140     
141     virtual void loadedFromPageCache() { }
142     
143     virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceResponse&) { }
144     
145     virtual void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&) { }
146     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse) { }
147     virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) { }
148     virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) { }
149     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&) { }
150     virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long identifier, int lengthReceived) { }
151     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier) { }
152     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long identifier, const ResourceError&) { }
153     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length) { return false; }
154     
155     virtual void dispatchDidHandleOnloadEvents() { }
156     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
157     virtual void dispatchDidCancelClientRedirect() { }
158     virtual void dispatchWillPerformClientRedirect(const KURL&, double interval, double fireDate) { }
159     virtual void dispatchDidChangeLocationWithinPage() { }
160     virtual void dispatchWillClose() { }
161     virtual void dispatchDidReceiveIcon() { }
162     virtual void dispatchDidStartProvisionalLoad() { }
163     virtual void dispatchDidReceiveTitle(const String& title) { }
164     virtual void dispatchDidCommitLoad() { }
165     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
166     virtual void dispatchDidFailLoad(const ResourceError&) { }
167     virtual void dispatchDidFinishDocumentLoad() { }
168     virtual void dispatchDidFinishLoad() { }
169     virtual void dispatchDidFirstLayout() { }
170     
171     virtual Frame* dispatchCreatePage() { return 0; }
172     virtual void dispatchShow() { }
173     
174     virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String& MIMEType, const ResourceRequest&) { }
175     virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, const String& frameName) { }
176     virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&) { }
177     virtual void cancelPolicyCheck() { }
178     
179     virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
180
181     virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
182     
183     virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
184     virtual void clearLoadingFromPageCache(DocumentLoader*) { }
185     virtual bool isLoadingFromPageCache(DocumentLoader*) { return 0; }
186     virtual void revertToProvisionalState(DocumentLoader*) { }
187     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
188     virtual void clearUnarchivingState(DocumentLoader*) { }
189     
190     virtual void willChangeEstimatedProgress() { }
191     virtual void didChangeEstimatedProgress() { }
192     virtual void postProgressStartedNotification() { }
193     virtual void postProgressEstimateChangedNotification() { }
194     virtual void postProgressFinishedNotification() { }
195     
196     virtual void setMainFrameDocumentReady(bool) { }
197     
198     virtual void startDownload(const ResourceRequest&) { }
199     
200     virtual void willChangeTitle(DocumentLoader*) { }
201     virtual void didChangeTitle(DocumentLoader*) { }
202     
203     virtual void committedLoad(DocumentLoader*, const char*, int) { }
204     virtual void finishedLoading(DocumentLoader*) { }
205     virtual void finalSetupForReplace(DocumentLoader*) { }
206     
207     virtual ResourceError cancelledError(const ResourceRequest&) { return ResourceError(); }
208     virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError(); }
209     virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError(); }
210     
211     virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError(); }
212     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError(); }
213     
214     virtual bool shouldFallBack(const ResourceError&) { return false; }
215     
216     virtual void setDefersLoading(bool) { }
217     
218     virtual bool willUseArchive(ResourceLoader*, const ResourceRequest&, const KURL& originalURL) const { return false; }
219     virtual bool isArchiveLoadPending(ResourceLoader*) const { return false; }
220     virtual void cancelPendingArchiveLoad(ResourceLoader*) { }
221     virtual void clearArchivedResources() { }
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 restoreScrollPositionAndViewState() { }
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) { return new DocumentLoader(request); }
237     virtual void setTitle(const String& title, const KURL&) { }
238     
239     virtual String userAgent() { return ""; }
240     
241     virtual void setDocumentViewFromPageCache(PageCache*) { }
242     virtual void updateGlobalHistoryForStandardLoad(const KURL&) { }
243     virtual void updateGlobalHistoryForReload(const KURL&) { }
244     virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
245     virtual void saveScrollPositionAndViewStateToItem(HistoryItem*) { }
246     virtual void saveDocumentViewToPageCache(PageCache*) { }
247     virtual bool canCachePage() const { return false; }
248
249     virtual Frame* createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
250                                const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) { return 0; }
251     virtual Widget* createPlugin(Element*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; }
252     virtual Widget* createJavaAppletWidget(const IntSize&, Element*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; }
253     
254     virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType) { return ObjectContentType(); }
255     virtual String overrideMediaType() const { return String(); }
256
257     virtual void redirectDataToPlugin(WebCore::Widget*) {}
258     virtual void windowObjectCleared() const {}
259 };
260
261 class SVGEmptyEditorClient : public EditorClient {
262 public:
263     virtual ~SVGEmptyEditorClient() { }
264     virtual void pageDestroyed() { }
265     
266     virtual bool shouldDeleteRange(Range*) { return false; }
267     virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
268     virtual bool smartInsertDeleteEnabled() { return false; } 
269     virtual bool isContinuousSpellCheckingEnabled() { return false; }
270     virtual void toggleContinuousSpellChecking() { }
271     virtual bool isGrammarCheckingEnabled() { return false; }
272     virtual void toggleGrammarChecking() { }
273     virtual int spellCheckerDocumentTag() { return -1; }
274     
275     virtual bool selectWordBeforeMenuEvent() { return false; }
276     virtual bool isEditable() { return false; }
277     
278     virtual bool shouldBeginEditing(Range*) { return false; }
279     virtual bool shouldEndEditing(Range*) { return false; }
280     virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; }
281     //  virtual bool shouldInsertNode(Node*, Range* replacingRange, WebViewInsertAction) { return false; }
282     virtual bool shouldInsertText(String, Range*, EditorInsertAction) { return false; }
283     //  virtual bool shouldChangeSelectedRange(Range* fromRange, Range* toRange, NSSelectionAffinity, bool stillSelecting) { return false; }
284     virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
285     //  virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
286     //  virtual bool doCommandBySelector(SEL selector) { return false; }
287     //
288     virtual void didBeginEditing() { }
289     virtual void respondToChangedContents() { }
290     virtual void didEndEditing() { }
291     virtual void didWriteSelectionToPasteboard() { }
292     virtual void didSetSelectionTypesForPasteboard() { }
293     //  virtual void webViewDidChangeTypingStyle:(NSNotification *)notification { }
294     //  virtual void webViewDidChangeSelection:(NSNotification *)notification { }
295     //  virtual NSUndoManager* undoManagerForWebView:(WebView *)webView { return 0; }
296     
297     virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
298     virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
299     virtual void clearUndoRedoOperations() { }
300     
301     virtual bool canUndo() const { return false; }
302     virtual bool canRedo() const { return false; }
303     
304     virtual void undo() { }
305     virtual void redo() { }
306     
307 #if PLATFORM(MAC)
308     // FIXME: This should become SelectionController::toWebArchive()
309     virtual NSData* dataForArchivedSelection(Frame*) { return 0; } 
310     
311     virtual NSString* userVisibleString(NSURL*) { return 0; }
312 #ifdef BUILDING_ON_TIGER
313     virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; }
314 #endif
315 #endif
316   
317     
318 };
319
320 class SVGEmptyContextMenuClient : public ContextMenuClient {
321 public:
322     virtual ~SVGEmptyContextMenuClient() {  }
323     virtual void contextMenuDestroyed() { }
324     
325     virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
326     virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
327     
328     virtual void downloadURL(const KURL& url) { }
329     virtual void copyImageToClipboard(const HitTestResult&) { }
330     virtual void searchWithGoogle(const Frame*) { }
331     virtual void lookUpInDictionary(Frame*) { }
332     virtual void speak(const String&) { }
333     virtual void stopSpeaking() { }
334     
335 #if PLATFORM(MAC)
336     virtual void searchWithSpotlight() { }
337 #endif
338 };
339
340 class SVGEmptyDragClient : public DragClient {
341 public:
342     virtual ~SVGEmptyDragClient() {}
343     virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
344     virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
345     virtual void dragControllerDestroyed() { }
346 };
347     
348 }
349
350 #endif // SVG_SUPPORT
351
352 #endif // SVGImageEmptyClients_h
353