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*) { }
123 virtual void forceLayout() { }
124 virtual void forceLayoutForNonHTML() { }
126 virtual void updateHistoryForCommit() { }
128 virtual void updateHistoryForBackForwardNavigation() { }
129 virtual void updateHistoryForReload() { }
130 virtual void updateHistoryForStandardLoad() { }
131 virtual void updateHistoryForInternalLoad() { }
133 virtual void updateHistoryAfterClientRedirect() { }
135 virtual void setCopiesOnScroll() { }
137 virtual void detachedFromParent2() { }
138 virtual void detachedFromParent3() { }
139 virtual void detachedFromParent4() { }
141 virtual void loadedFromPageCache() { }
143 virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceResponse&) { }
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; }
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() { }
171 virtual Frame* dispatchCreatePage() { return 0; }
172 virtual void dispatchShow() { }
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() { }
179 virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
181 virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
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*) { }
190 virtual void willChangeEstimatedProgress() { }
191 virtual void didChangeEstimatedProgress() { }
192 virtual void postProgressStartedNotification() { }
193 virtual void postProgressEstimateChangedNotification() { }
194 virtual void postProgressFinishedNotification() { }
196 virtual void setMainFrameDocumentReady(bool) { }
198 virtual void startDownload(const ResourceRequest&) { }
200 virtual void willChangeTitle(DocumentLoader*) { }
201 virtual void didChangeTitle(DocumentLoader*) { }
203 virtual void committedLoad(DocumentLoader*, const char*, int) { }
204 virtual void finishedLoading(DocumentLoader*) { }
205 virtual void finalSetupForReplace(DocumentLoader*) { }
207 virtual ResourceError cancelledError(const ResourceRequest&) { return ResourceError(); }
208 virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError(); }
209 virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError(); }
211 virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError(); }
212 virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError(); }
214 virtual bool shouldFallBack(const ResourceError&) { return false; }
216 virtual void setDefersLoading(bool) { }
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() { }
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 ""; }
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() { }
236 virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request) { return new DocumentLoader(request); }
237 virtual void setTitle(const String& title, const KURL&) { }
239 virtual String userAgent() { return ""; }
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; }
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; }
254 virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType) { return ObjectContentType(); }
255 virtual String overrideMediaType() const { return String(); }
257 virtual void redirectDataToPlugin(WebCore::Widget*) {}
258 virtual void windowObjectCleared() const {}
261 class SVGEmptyEditorClient : public EditorClient {
263 virtual ~SVGEmptyEditorClient() { }
264 virtual void pageDestroyed() { }
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; }
275 virtual bool selectWordBeforeMenuEvent() { return false; }
276 virtual bool isEditable() { return false; }
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; }
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; }
297 virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
298 virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
299 virtual void clearUndoRedoOperations() { }
301 virtual bool canUndo() const { return false; }
302 virtual bool canRedo() const { return false; }
304 virtual void undo() { }
305 virtual void redo() { }
308 // FIXME: This should become SelectionController::toWebArchive()
309 virtual NSData* dataForArchivedSelection(Frame*) { return 0; }
311 virtual NSString* userVisibleString(NSURL*) { return 0; }
312 #ifdef BUILDING_ON_TIGER
313 virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; }
320 class SVGEmptyContextMenuClient : public ContextMenuClient {
322 virtual ~SVGEmptyContextMenuClient() { }
323 virtual void contextMenuDestroyed() { }
325 virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
326 virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
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() { }
336 virtual void searchWithSpotlight() { }
340 class SVGEmptyDragClient : public DragClient {
342 virtual ~SVGEmptyDragClient() {}
343 virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
344 virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
345 virtual void dragControllerDestroyed() { }
350 #endif // SVG_SUPPORT
352 #endif // SVGImageEmptyClients_h