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 EmptyClients_h
27 #define EmptyClients_h
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"
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).
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.
51 Ideally, whenever you change a Client class, you should add a stub here.
52 Brittle, yes. Unfortunate, yes. Hopefully temporary.
57 class EmptyChromeClient : public ChromeClient {
59 virtual ~EmptyChromeClient() { }
60 virtual void chromeDestroyed() { }
62 virtual void setWindowRect(const FloatRect&) { }
63 virtual FloatRect windowRect() { return FloatRect(); }
65 virtual FloatRect pageRect() { return FloatRect(); }
67 virtual float scaleFactor() { return 1.f; }
69 virtual void focus() { }
70 virtual void unfocus() { }
72 virtual bool canTakeFocus(FocusDirection) { return false; }
73 virtual void takeFocus(FocusDirection) { }
75 virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&) { return 0; }
76 virtual void show() { }
78 virtual bool canRunModal() { return false; }
79 virtual void runModal() { }
81 virtual void setToolbarsVisible(bool) { }
82 virtual bool toolbarsVisible() { return false; }
84 virtual void setStatusbarVisible(bool) { }
85 virtual bool statusbarVisible() { return false; }
87 virtual void setScrollbarsVisible(bool) { }
88 virtual bool scrollbarsVisible() { return false; }
90 virtual void setMenubarVisible(bool) { }
91 virtual bool menubarVisible() { return false; }
93 virtual void setResizable(bool) { }
95 virtual void addMessageToConsole(const String&, unsigned, const String&) { }
97 virtual bool canRunBeforeUnloadConfirmPanel() { return false; }
98 virtual bool runBeforeUnloadConfirmPanel(const String&, Frame*) { return true; }
100 virtual void closeWindowSoon() { }
102 virtual void runJavaScriptAlert(Frame*, const String&) { }
103 virtual bool runJavaScriptConfirm(Frame*, const String&) { return false; }
104 virtual bool runJavaScriptPrompt(Frame*, const String&, const String&, String&) { return false; }
105 virtual bool shouldInterruptJavaScript() { return false; }
107 virtual void setStatusbarText(const String&) { }
109 virtual bool tabsToLinks() const { return false; }
111 virtual IntRect windowResizerRect() const { return IntRect(); }
112 virtual void addToDirtyRegion(const IntRect&) { }
113 virtual void scrollBackingStore(int, int, const IntRect&, const IntRect&) { }
114 virtual void updateBackingStore() { }
116 virtual void repaint(const IntRect&, bool, bool, bool) { }
117 virtual void scroll(const IntSize&, const IntRect&, const IntRect&) { }
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 virtual void contentsSizeChanged(Frame*, const IntSize&) const { }
123 virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) { }
125 virtual void setToolTip(const String&) { }
127 virtual void print(Frame*) { }
129 virtual void exceededDatabaseQuota(Frame*, const String&) { }
131 virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) { }
133 virtual void formStateDidChange(const Node*) { }
136 class EmptyFrameLoaderClient : public FrameLoaderClient {
138 virtual ~EmptyFrameLoaderClient() { }
139 virtual void frameLoaderDestroyed() { }
141 virtual bool hasWebView() const { return true; } // mainly for assertions
143 virtual void makeRepresentation(DocumentLoader*) { }
144 virtual void forceLayout() { }
145 virtual void forceLayoutForNonHTML() { }
147 virtual void setCopiesOnScroll() { }
149 virtual void detachedFromParent2() { }
150 virtual void detachedFromParent3() { }
152 virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&) { }
154 virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) { }
155 virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) { return false; }
156 virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) { }
157 virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
158 virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
159 virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) { }
160 virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) { }
161 virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) { }
162 virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) { }
163 virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) { return false; }
165 virtual void dispatchDidHandleOnloadEvents() { }
166 virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
167 virtual void dispatchDidCancelClientRedirect() { }
168 virtual void dispatchWillPerformClientRedirect(const KURL&, double, double) { }
169 virtual void dispatchDidChangeLocationWithinPage() { }
170 virtual void dispatchWillClose() { }
171 virtual void dispatchDidReceiveIcon() { }
172 virtual void dispatchDidStartProvisionalLoad() { }
173 virtual void dispatchDidReceiveTitle(const String&) { }
174 virtual void dispatchDidCommitLoad() { }
175 virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
176 virtual void dispatchDidFailLoad(const ResourceError&) { }
177 virtual void dispatchDidFinishDocumentLoad() { }
178 virtual void dispatchDidFinishLoad() { }
179 virtual void dispatchDidFirstLayout() { }
180 virtual void dispatchDidFirstVisuallyNonEmptyLayout() { }
182 virtual Frame* dispatchCreatePage() { return 0; }
183 virtual void dispatchShow() { }
185 virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String&, const ResourceRequest&) { }
186 virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&) { }
187 virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>) { }
188 virtual void cancelPolicyCheck() { }
190 virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
192 virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
194 virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
195 virtual void revertToProvisionalState(DocumentLoader*) { }
196 virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
198 virtual void willChangeEstimatedProgress() { }
199 virtual void didChangeEstimatedProgress() { }
200 virtual void postProgressStartedNotification() { }
201 virtual void postProgressEstimateChangedNotification() { }
202 virtual void postProgressFinishedNotification() { }
204 virtual void setMainFrameDocumentReady(bool) { }
206 virtual void startDownload(const ResourceRequest&) { }
208 virtual void willChangeTitle(DocumentLoader*) { }
209 virtual void didChangeTitle(DocumentLoader*) { }
211 virtual void committedLoad(DocumentLoader*, const char*, int) { }
212 virtual void finishedLoading(DocumentLoader*) { }
214 virtual ResourceError cancelledError(const ResourceRequest&) { return ResourceError(); }
215 virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError(); }
216 virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError(); }
217 virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError(); }
219 virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError(); }
220 virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError(); }
221 virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) { return ResourceError(); }
223 virtual bool shouldFallBack(const ResourceError&) { return false; }
225 virtual bool canHandleRequest(const ResourceRequest&) const { return false; }
226 virtual bool canShowMIMEType(const String&) const { return false; }
227 virtual bool representationExistsForURLScheme(const String&) const { return false; }
228 virtual String generatedMIMETypeForURLScheme(const String&) const { return ""; }
230 virtual void frameLoadCompleted() { }
231 virtual void restoreViewState() { }
232 virtual void provisionalLoadStarted() { }
233 virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; }
234 virtual void didFinishLoad() { }
235 virtual void prepareForDataSourceReplacement() { }
237 virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request, const SubstituteData& substituteData) { return DocumentLoader::create(request, substituteData); }
238 virtual void setTitle(const String&, const KURL&) { }
240 virtual String userAgent(const KURL&) { return ""; }
242 virtual void savePlatformDataToCachedFrame(CachedFrame*) { }
243 virtual void transitionToCommittedFromCachedFrame(CachedFrame*) { }
244 virtual void transitionToCommittedForNewPage() { }
246 virtual void updateGlobalHistory() { }
247 virtual void updateGlobalHistoryForRedirectWithoutHistoryItem() { }
248 virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
249 #ifdef ANDROID_HISTORY_CLIENT
250 virtual void dispatchDidAddHistoryItem(HistoryItem*) const {}
251 virtual void dispatchDidRemoveHistoryItem(HistoryItem*, int) const {}
252 virtual void dispatchDidChangeHistoryIndex(BackForwardList*) const {}
254 virtual void saveViewStateToItem(HistoryItem*) { }
255 virtual bool canCachePage() const { return false; }
257 virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) { 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; }
261 virtual ObjectContentType objectContentType(const KURL&, const String&) { return ObjectContentType(); }
262 virtual String overrideMediaType() const { return String(); }
264 virtual void redirectDataToPlugin(Widget*) { }
265 virtual void windowObjectCleared() { }
266 virtual void didPerformFirstNavigation() const { }
268 virtual void registerForIconNotification(bool) { }
271 virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const { return response; }
276 class EmptyEditorClient : public EditorClient {
278 virtual ~EmptyEditorClient() { }
279 virtual void pageDestroyed() { }
281 virtual bool shouldDeleteRange(Range*) { return false; }
282 virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
283 virtual bool smartInsertDeleteEnabled() { return false; }
284 virtual bool isSelectTrailingWhitespaceEnabled() { 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(const String&, Range*, EditorInsertAction) { return false; }
299 virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) { return false; }
301 virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
302 virtual bool shouldMoveRangeAfterDelete(Range*, Range*) { return false; }
303 // virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
304 // virtual bool doCommandBySelector(SEL selector) { return false; }
306 virtual void didBeginEditing() { }
307 virtual void respondToChangedContents() { }
308 virtual void respondToChangedSelection() { }
309 virtual void didEndEditing() { }
310 virtual void didWriteSelectionToPasteboard() { }
311 virtual void didSetSelectionTypesForPasteboard() { }
312 // virtual void webViewDidChangeTypingStyle:(NSNotification *)notification { }
313 // virtual void webViewDidChangeSelection:(NSNotification *)notification { }
314 // virtual NSUndoManager* undoManagerForWebView:(WebView *)webView { return 0; }
316 virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
317 virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
318 virtual void clearUndoRedoOperations() { }
320 virtual bool canUndo() const { return false; }
321 virtual bool canRedo() const { return false; }
323 virtual void undo() { }
324 virtual void redo() { }
326 virtual void handleKeyboardEvent(KeyboardEvent*) { }
327 virtual void handleInputMethodKeydown(KeyboardEvent*) { }
329 virtual void textFieldDidBeginEditing(Element*) { }
330 virtual void textFieldDidEndEditing(Element*) { }
331 virtual void textDidChangeInTextField(Element*) { }
332 virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) { return false; }
333 virtual void textWillBeDeletedInTextField(Element*) { }
334 virtual void textDidChangeInTextArea(Element*) { }
337 virtual void markedTextAbandoned(Frame*) { }
339 virtual NSString* userVisibleString(NSURL*) { return 0; }
340 #ifdef BUILDING_ON_TIGER
341 virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; }
344 virtual void ignoreWordInSpellDocument(const String&) { }
345 virtual void learnWord(const String&) { }
346 virtual void checkSpellingOfString(const UChar*, int, int*, int*) { }
347 virtual void checkGrammarOfString(const UChar*, int, Vector<GrammarDetail>&, int*, int*) { }
348 virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) { }
349 virtual void updateSpellingUIWithMisspelledWord(const String&) { }
350 virtual void showSpellingUI(bool) { }
351 virtual bool spellingUIIsShowing() { return false; }
352 virtual void getGuessesForWord(const String&, Vector<String>&) { }
353 virtual void setInputMethodState(bool) { }
358 class EmptyContextMenuClient : public ContextMenuClient {
360 virtual ~EmptyContextMenuClient() { }
361 virtual void contextMenuDestroyed() { }
363 virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
364 virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
366 virtual void downloadURL(const KURL&) { }
367 virtual void copyImageToClipboard(const HitTestResult&) { }
368 virtual void searchWithGoogle(const Frame*) { }
369 virtual void lookUpInDictionary(Frame*) { }
370 virtual void speak(const String&) { }
371 virtual void stopSpeaking() { }
374 virtual void searchWithSpotlight() { }
378 class EmptyDragClient : public DragClient {
380 virtual ~EmptyDragClient() {}
381 virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
382 virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*) { }
383 virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
384 virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; }
385 virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { }
386 virtual DragImageRef createDragImageForLink(KURL&, const String&, Frame*) { return 0; }
387 virtual void dragControllerDestroyed() { }
390 class EmptyInspectorClient : public InspectorClient {
392 virtual ~EmptyInspectorClient() { }
394 virtual void inspectorDestroyed() { }
396 virtual Page* createPage() { return 0; };
398 virtual String localizedStringsURL() { return String(); }
400 virtual void showWindow() { }
401 virtual void closeWindow() { }
403 virtual void attachWindow() { }
404 virtual void detachWindow() { }
406 virtual void setAttachedWindowHeight(unsigned) { }
408 virtual void highlight(Node*) { }
409 virtual void hideHighlight() { }
410 virtual void inspectedURLChanged(const String&) { }
412 virtual void populateSetting(const String&, InspectorController::Setting&) { }
413 virtual void storeSetting(const String&, const InspectorController::Setting&) { }
414 virtual void removeSetting(const String&) { }
419 #endif // EmptyClients_h