2 * Copyright (C) 2006 Eric Seidel (eric@webkit.org)
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
26 #ifndef SVGImageEmptyClients_h
27 #define SVGImageEmptyClients_h
31 #include "ChromeClient.h"
32 #include "ContextMenuClient.h"
33 #include "DragClient.h"
34 #include "EditorClient.h"
35 #include "FocusDirection.h"
36 #include "FrameLoaderClient.h"
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).
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.
46 Ideally, whenever you change a Client class, you should add a stub here.
47 Brittle, yes. Unfortunate, yes. Hopefully temporary.
52 class SVGEmptyChromeClient : public ChromeClient {
54 virtual ~SVGEmptyChromeClient() { }
55 virtual void chromeDestroyed() { }
57 virtual void setWindowRect(const FloatRect&) { }
58 virtual FloatRect windowRect() { return FloatRect(); }
60 virtual FloatRect pageRect() { return FloatRect(); }
62 virtual float scaleFactor() { return 1.f; }
64 virtual void focus() { }
65 virtual void unfocus() { }
67 virtual bool canTakeFocus(FocusDirection) { return false; }
68 virtual void takeFocus(FocusDirection) { }
70 virtual Page* createWindow(const FrameLoadRequest&) { return 0; }
71 virtual Page* createModalDialog(const FrameLoadRequest&) { return 0; }
72 virtual void show() { }
74 virtual bool canRunModal() { return false; }
75 virtual void runModal() { }
77 virtual void setToolbarsVisible(bool) { }
78 virtual bool toolbarsVisible() { return false; }
80 virtual void setStatusbarVisible(bool) { }
81 virtual bool statusbarVisible() { return false; }
83 virtual void setScrollbarsVisible(bool) { }
84 virtual bool scrollbarsVisible() { return false; }
86 virtual void setMenubarVisible(bool) { }
87 virtual bool menubarVisible() { return false; }
89 virtual void setResizable(bool) { }
91 virtual void addMessageToConsole(const String& message, unsigned int lineNumber, const String& sourceID) { }
93 virtual bool canRunBeforeUnloadConfirmPanel() { return false; }
94 virtual bool runBeforeUnloadConfirmPanel(const String& message, Frame* frame) { return true; }
96 virtual void closeWindowSoon() { }
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&) { }
104 class SVGEmptyFrameLoaderClient : public FrameLoaderClient {
106 virtual ~SVGEmptyFrameLoaderClient() { }
107 virtual void frameLoaderDestroyed() { }
109 virtual bool hasWebView() const { return true; } // mainly for assertions
110 virtual bool hasFrameView() const { return true; } // ditto
112 virtual bool hasBackForwardList() const { return false; }
113 virtual void resetBackForwardList() { }
115 virtual bool provisionalItemIsTarget() const { return false; }
116 virtual bool loadProvisionalItemFromPageCache() { return false; }
117 virtual void invalidateCurrentItemPageCache() { }
119 virtual bool privateBrowsingEnabled() const { return false; }
121 virtual void makeDocumentView() { }
122 virtual void makeRepresentation(DocumentLoader*) { }
124 virtual void setDocumentViewFromPageCache(NSDictionary *) { }
126 virtual void forceLayout() { }
127 virtual void forceLayoutForNonHTML() { }
129 virtual void updateHistoryForCommit() { }
131 virtual void updateHistoryForBackForwardNavigation() { }
132 virtual void updateHistoryForReload() { }
133 virtual void updateHistoryForStandardLoad() { }
134 virtual void updateHistoryForInternalLoad() { }
136 virtual void updateHistoryAfterClientRedirect() { }
138 virtual void setCopiesOnScroll() { }
140 virtual void detachedFromParent1() { }
141 virtual void detachedFromParent2() { }
142 virtual void detachedFromParent3() { }
143 virtual void detachedFromParent4() { }
145 virtual void loadedFromPageCache() { }
148 virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceResponse&) { }
150 virtual void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&) { }
151 virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse) { }
152 virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) { }
153 virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&) { }
154 virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&) { }
155 virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long identifier, int lengthReceived) { }
156 virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier) { }
157 virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long identifier, const ResourceError&) { }
158 virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length) { return false; }
161 virtual void dispatchDidHandleOnloadEvents() { }
162 virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
163 virtual void dispatchDidCancelClientRedirect() { }
164 virtual void dispatchWillPerformClientRedirect(const KURL&, double interval, double fireDate) { }
165 virtual void dispatchDidChangeLocationWithinPage() { }
166 virtual void dispatchWillClose() { }
167 virtual void dispatchDidReceiveIcon() { }
168 virtual void dispatchDidStartProvisionalLoad() { }
169 virtual void dispatchDidReceiveTitle(const String& title) { }
170 virtual void dispatchDidCommitLoad() { }
172 virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
173 virtual void dispatchDidFailLoad(const ResourceError&) { }
175 virtual void dispatchDidFinishDocumentLoad() { }
176 virtual void dispatchDidFinishLoad() { }
177 virtual void dispatchDidFirstLayout() { }
180 virtual Frame* dispatchCreatePage() { return 0; }
182 virtual void dispatchShow() { }
185 virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String& MIMEType, const ResourceRequest&) { }
186 virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, const String& frameName) { }
187 virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&) { }
189 virtual void cancelPolicyCheck() { }
192 virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
195 virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
197 virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
198 virtual void clearLoadingFromPageCache(DocumentLoader*) { }
199 virtual bool isLoadingFromPageCache(DocumentLoader*) { return 0; }
200 virtual void revertToProvisionalState(DocumentLoader*) { }
202 virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
204 virtual void clearUnarchivingState(DocumentLoader*) { }
206 virtual void willChangeEstimatedProgress() { }
207 virtual void didChangeEstimatedProgress() { }
208 virtual void postProgressStartedNotification() { }
209 virtual void postProgressEstimateChangedNotification() { }
210 virtual void postProgressFinishedNotification() { }
212 virtual void setMainFrameDocumentReady(bool) { }
215 virtual void startDownload(const ResourceRequest&) { }
218 virtual void willChangeTitle(DocumentLoader*) { }
219 virtual void didChangeTitle(DocumentLoader*) { }
222 virtual void committedLoad(DocumentLoader*, const char*, int) { }
224 virtual void finishedLoading(DocumentLoader*) { }
225 virtual void finalSetupForReplace(DocumentLoader*) { }
228 virtual ResourceError cancelledError(const ResourceRequest&) { return ResourceError(); }
229 virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError(); }
230 virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError(); }
232 virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError(); }
233 virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError(); }
235 virtual bool shouldFallBack(const ResourceError&) { return false; }
238 virtual void setDefersLoading(bool) { }
241 virtual bool willUseArchive(ResourceLoader*, const ResourceRequest&, const KURL& originalURL) const { return false; }
243 virtual bool isArchiveLoadPending(ResourceLoader*) const { return false; }
244 virtual void cancelPendingArchiveLoad(ResourceLoader*) { }
245 virtual void clearArchivedResources() { }
247 virtual bool canHandleRequest(const ResourceRequest&) const { return false; }
248 virtual bool canShowMIMEType(const String& MIMEType) const { return false; }
249 virtual bool representationExistsForURLScheme(const String& URLScheme) const { return false; }
250 virtual String generatedMIMETypeForURLScheme(const String& URLScheme) const { return ""; }
252 virtual void frameLoadCompleted() { }
253 virtual void restoreScrollPositionAndViewState() { }
254 virtual void provisionalLoadStarted() { }
255 virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; }
256 virtual void addHistoryItemForFragmentScroll() { }
257 virtual void didFinishLoad() { }
258 virtual void prepareForDataSourceReplacement() { }
261 virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request) { return new DocumentLoader(request); }
263 virtual void setTitle(const String& title, const KURL&) { }
265 virtual String userAgent() { return ""; }
267 virtual void setDocumentViewFromPageCache(PageCache*) { }
268 virtual void updateGlobalHistoryForStandardLoad(const KURL&) { }
269 virtual void updateGlobalHistoryForReload(const KURL&) { }
270 virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
271 virtual void saveScrollPositionAndViewStateToItem(HistoryItem*) { }
272 virtual void saveDocumentViewToPageCache(PageCache*) { }
273 virtual bool canCachePage() const { return false; }
277 class SVGEmptyEditorClient : public EditorClient {
279 virtual ~SVGEmptyEditorClient() { }
280 virtual void pageDestroyed() { }
282 virtual bool shouldDeleteRange(Range*) { return false; }
283 virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
284 virtual bool smartInsertDeleteEnabled() { return false; }
285 virtual bool isContinuousSpellCheckingEnabled() { return false; }
286 virtual void toggleContinuousSpellChecking() { }
287 virtual bool isGrammarCheckingEnabled() { return false; }
288 virtual void toggleGrammarChecking() { }
289 virtual int spellCheckerDocumentTag() { return -1; }
291 virtual bool selectWordBeforeMenuEvent() { return false; }
292 virtual bool isEditable() { return false; }
294 virtual bool shouldBeginEditing(Range*) { return false; }
295 virtual bool shouldEndEditing(Range*) { return false; }
296 virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; }
297 // virtual bool shouldInsertNode(Node*, Range* replacingRange, WebViewInsertAction) { return false; }
298 virtual bool shouldInsertText(String, Range*, EditorInsertAction) { return false; }
299 // virtual bool shouldChangeSelectedRange(Range* fromRange, Range* toRange, NSSelectionAffinity, bool stillSelecting) { return false; }
300 virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
301 // virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
302 // virtual bool doCommandBySelector(SEL selector) { return false; }
304 virtual void didBeginEditing() { }
305 virtual void respondToChangedContents() { }
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; }
313 virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
314 virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
315 virtual void clearUndoRedoOperations() { }
317 virtual bool canUndo() const { return false; }
318 virtual bool canRedo() const { return false; }
320 virtual void undo() { }
321 virtual void redo() { }
324 // FIXME: This should become SelectionController::toWebArchive()
325 virtual NSData* dataForArchivedSelection(Frame*) { return 0; }
327 virtual NSString* userVisibleString(NSURL*) { return 0; }
328 #ifdef BUILDING_ON_TIGER
329 virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; }
336 class SVGEmptyContextMenuClient : public ContextMenuClient {
338 virtual ~SVGEmptyContextMenuClient() { }
339 virtual void contextMenuDestroyed() { }
341 virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
342 virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
344 virtual void downloadURL(const KURL& url) { }
345 virtual void copyImageToClipboard(const HitTestResult&) { }
346 virtual void searchWithGoogle(const Frame*) { }
347 virtual void lookUpInDictionary(Frame*) { }
348 virtual void speak(const String&) { }
349 virtual void stopSpeaking() { }
352 virtual void searchWithSpotlight() { }
356 class SVGEmptyDragClient : public DragClient {
358 virtual ~SVGEmptyDragClient() {}
359 virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
360 virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
361 virtual void dragControllerDestroyed() { }
366 #endif // SVG_SUPPORT
368 #endif // SVGImageEmptyClients_h