2 * Copyright (C) 2006 Eric Seidel (eric@webkit.org)
3 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
4 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #ifndef EmptyClients_h
29 #define EmptyClients_h
31 #include "ChromeClient.h"
32 #include "ContextMenuClient.h"
33 #include "DeviceMotionClient.h"
34 #include "DeviceOrientationClient.h"
35 #include "DocumentLoader.h"
36 #include "DragClient.h"
37 #include "EditCommand.h"
38 #include "EditorClient.h"
39 #include "TextCheckerClient.h"
40 #include "FloatRect.h"
41 #include "FocusDirection.h"
42 #include "FrameLoaderClient.h"
43 #include "FrameNetworkingContext.h"
44 #include "InspectorClient.h"
45 #include "PopupMenu.h"
46 #include "ResourceError.h"
47 #include "SearchPopupMenu.h"
50 #include "V8IsolatedContext.h"
54 This file holds empty Client stubs for use by WebCore.
55 Viewless element needs to create a dummy Page->Frame->FrameView tree for use in parsing or executing JavaScript.
56 This tree depends heavily on Clients (usually provided by WebKit classes).
58 This file was first created for SVGImage as it had no way to access the current Page (nor should it,
59 since Images are not tied to a page).
60 See http://bugs.webkit.org/show_bug.cgi?id=5971 for the original discussion about this file.
62 Ideally, whenever you change a Client class, you should add a stub here.
63 Brittle, yes. Unfortunate, yes. Hopefully temporary.
68 class GraphicsContext3D;
70 class EmptyPopupMenu : public PopupMenu {
72 virtual void show(const IntRect&, FrameView*, int) {}
73 virtual void hide() {}
74 virtual void updateFromElement() {}
75 virtual void disconnectClient() {}
78 class EmptySearchPopupMenu : public SearchPopupMenu {
80 virtual PopupMenu* popupMenu() { return m_popup.get(); }
81 virtual void saveRecentSearches(const AtomicString&, const Vector<String>&) {}
82 virtual void loadRecentSearches(const AtomicString&, Vector<String>&) {}
83 virtual bool enabled() { return false; }
86 RefPtr<EmptyPopupMenu> m_popup;
89 class EmptyChromeClient : public ChromeClient {
91 virtual ~EmptyChromeClient() { }
92 virtual void chromeDestroyed() { }
94 virtual void* webView() const { return 0; }
95 virtual void setWindowRect(const FloatRect&) { }
96 virtual FloatRect windowRect() { return FloatRect(); }
98 virtual FloatRect pageRect() { return FloatRect(); }
100 virtual void focus() { }
101 virtual void unfocus() { }
103 virtual bool canTakeFocus(FocusDirection) { return false; }
104 virtual void takeFocus(FocusDirection) { }
106 virtual void focusedNodeChanged(Node*) { }
107 virtual void focusedFrameChanged(Frame*) { }
109 virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&) { return 0; }
110 virtual void show() { }
112 virtual bool canRunModal() { return false; }
113 virtual void runModal() { }
115 virtual void setToolbarsVisible(bool) { }
116 virtual bool toolbarsVisible() { return false; }
118 virtual void setStatusbarVisible(bool) { }
119 virtual bool statusbarVisible() { return false; }
121 virtual void setScrollbarsVisible(bool) { }
122 virtual bool scrollbarsVisible() { return false; }
124 virtual void setMenubarVisible(bool) { }
125 virtual bool menubarVisible() { return false; }
127 virtual void setResizable(bool) { }
129 virtual void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String&, unsigned, const String&) { }
131 virtual bool canRunBeforeUnloadConfirmPanel() { return false; }
132 virtual bool runBeforeUnloadConfirmPanel(const String&, Frame*) { return true; }
134 virtual void closeWindowSoon() { }
136 virtual void runJavaScriptAlert(Frame*, const String&) { }
137 virtual bool runJavaScriptConfirm(Frame*, const String&) { return false; }
138 virtual bool runJavaScriptPrompt(Frame*, const String&, const String&, String&) { return false; }
139 virtual bool shouldInterruptJavaScript() { return false; }
141 virtual bool selectItemWritingDirectionIsNatural() { return false; }
142 virtual bool selectItemAlignmentFollowsMenuWritingDirection() { return false; }
143 virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptyPopupMenu()); }
144 virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const { return adoptRef(new EmptySearchPopupMenu()); }
146 #if ENABLE(CONTEXT_MENUS)
147 virtual void showContextMenu() { }
150 #if ENABLE(REGISTER_PROTOCOL_HANDLER)
151 virtual void registerProtocolHandler(const String&, const String&, const String&, const String&) { }
154 virtual void setStatusbarText(const String&) { }
156 virtual KeyboardUIMode keyboardUIMode() { return KeyboardAccessDefault; }
158 virtual IntRect windowResizerRect() const { return IntRect(); }
160 virtual void invalidateWindow(const IntRect&, bool) { }
161 virtual void invalidateContentsAndWindow(const IntRect&, bool) { }
162 virtual void invalidateContentsForSlowScroll(const IntRect&, bool) {};
163 virtual void scroll(const IntSize&, const IntRect&, const IntRect&) { }
164 #if ENABLE(TILED_BACKING_STORE)
165 virtual void delegatedScrollRequested(const IntPoint&) { }
167 #if ENABLE(REQUEST_ANIMATION_FRAME) && !USE(REQUEST_ANIMATION_FRAME_TIMER)
168 virtual void scheduleAnimation() { }
171 virtual IntPoint screenToWindow(const IntPoint& p) const { return p; }
172 virtual IntRect windowToScreen(const IntRect& r) const { return r; }
173 virtual PlatformPageClient platformPageClient() const { return 0; }
174 virtual void contentsSizeChanged(Frame*, const IntSize&) const { }
176 virtual void scrollbarsModeDidChange() const { }
177 virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) { }
179 virtual void setToolTip(const String&, TextDirection) { }
181 virtual void print(Frame*) { }
184 virtual void exceededDatabaseQuota(Frame*, const String&) { }
187 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
188 virtual void reachedMaxAppCacheSize(int64_t) { }
189 virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*, int64_t) { }
192 #if ENABLE(NOTIFICATIONS)
193 virtual NotificationPresenter* notificationPresenter() const { return 0; }
196 #if ENABLE(DIRECTORY_UPLOAD)
197 virtual void enumerateChosenDirectory(FileChooser*) { }
200 #if ENABLE(INPUT_COLOR)
201 void openColorChooser(ColorChooser*, const Color&) { }
202 void cleanupColorChooser() { }
203 void setSelectedColorInColorChooser(const Color&) { }
206 virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) { }
207 virtual void loadIconForFiles(const Vector<String>&, FileIconLoader*) { }
209 virtual void formStateDidChange(const Node*) { }
211 virtual void elementDidFocus(const Node*) { }
212 virtual void elementDidBlur(const Node*) { }
214 virtual void setCursor(const Cursor&) { }
215 virtual void setCursorHiddenUntilMouseMoves(bool) { }
217 virtual void scrollRectIntoView(const IntRect&) const { }
219 virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) {}
220 virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*) {}
222 #if USE(ACCELERATED_COMPOSITING)
223 virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) {}
224 virtual void setNeedsOneShotDrawingSynchronization() {}
225 virtual void scheduleCompositingLayerSync() {}
229 virtual void setLastSetCursorToCurrentCursor() { }
231 #if ENABLE(TOUCH_EVENTS)
232 virtual void needTouchEvents(bool) { }
235 virtual void numWheelEventHandlersChanged(unsigned) { }
237 virtual bool shouldRubberBandInDirection(WebCore::ScrollDirection) const { return false; }
240 class EmptyFrameLoaderClient : public FrameLoaderClient {
241 WTF_MAKE_NONCOPYABLE(EmptyFrameLoaderClient); WTF_MAKE_FAST_ALLOCATED;
243 EmptyFrameLoaderClient() { }
244 virtual ~EmptyFrameLoaderClient() { }
245 virtual void frameLoaderDestroyed() { }
247 virtual bool hasWebView() const { return true; } // mainly for assertions
249 virtual void makeRepresentation(DocumentLoader*) { }
250 virtual void forceLayout() { }
251 virtual void forceLayoutForNonHTML() { }
253 virtual void setCopiesOnScroll() { }
255 virtual void detachedFromParent2() { }
256 virtual void detachedFromParent3() { }
258 virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&) { }
260 virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) { }
261 virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) { return false; }
262 virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) { }
263 virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
264 virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
265 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
266 virtual bool canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long, const ProtectionSpace&) { return false; }
268 virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) { }
269 virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) { }
270 virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) { }
271 virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) { }
272 virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) { return false; }
274 virtual void dispatchDidHandleOnloadEvents() { }
275 virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
276 virtual void dispatchDidCancelClientRedirect() { }
277 virtual void dispatchWillPerformClientRedirect(const KURL&, double, double) { }
278 virtual void dispatchDidChangeLocationWithinPage() { }
279 virtual void dispatchDidPushStateWithinPage() { }
280 virtual void dispatchDidReplaceStateWithinPage() { }
281 virtual void dispatchDidPopStateWithinPage() { }
282 virtual void dispatchWillClose() { }
283 virtual void dispatchDidReceiveIcon() { }
284 virtual void dispatchDidStartProvisionalLoad() { }
285 virtual void dispatchDidReceiveTitle(const StringWithDirection&) { }
286 virtual void dispatchDidChangeIcons(IconType) { }
287 virtual void dispatchDidCommitLoad() { }
288 virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
289 virtual void dispatchDidFailLoad(const ResourceError&) { }
290 virtual void dispatchDidFinishDocumentLoad() { }
291 virtual void dispatchDidFinishLoad() { }
292 virtual void dispatchDidFirstLayout() { }
293 virtual void dispatchDidFirstVisuallyNonEmptyLayout() { }
295 virtual Frame* dispatchCreatePage(const NavigationAction&) { return 0; }
296 virtual void dispatchShow() { }
298 virtual void dispatchDecidePolicyForResponse(FramePolicyFunction, const ResourceResponse&, const ResourceRequest&) { }
299 virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&) { }
300 virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>) { }
301 virtual void cancelPolicyCheck() { }
303 virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
305 virtual void dispatchWillSendSubmitEvent(HTMLFormElement*) { }
306 virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
308 virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
309 virtual void revertToProvisionalState(DocumentLoader*) { }
310 virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
312 virtual void willChangeEstimatedProgress() { }
313 virtual void didChangeEstimatedProgress() { }
314 virtual void postProgressStartedNotification() { }
315 virtual void postProgressEstimateChangedNotification() { }
316 virtual void postProgressFinishedNotification() { }
318 virtual void setMainFrameDocumentReady(bool) { }
320 virtual void startDownload(const ResourceRequest&, const String& suggestedName = String()) { UNUSED_PARAM(suggestedName); }
322 virtual void willChangeTitle(DocumentLoader*) { }
323 virtual void didChangeTitle(DocumentLoader*) { }
325 virtual void committedLoad(DocumentLoader*, const char*, int) { }
326 virtual void finishedLoading(DocumentLoader*) { }
328 virtual ResourceError cancelledError(const ResourceRequest&) { ResourceError error("", 0, "", ""); error.setIsCancellation(true); return error; }
329 virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
330 virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
331 virtual ResourceError interruptedForPolicyChangeError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
333 virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
334 virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
335 virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
337 virtual bool shouldFallBack(const ResourceError&) { return false; }
339 virtual bool canHandleRequest(const ResourceRequest&) const { return false; }
340 virtual bool canShowMIMEType(const String&) const { return false; }
341 virtual bool canShowMIMETypeAsHTML(const String&) const { return false; }
342 virtual bool representationExistsForURLScheme(const String&) const { return false; }
343 virtual String generatedMIMETypeForURLScheme(const String&) const { return ""; }
345 virtual void frameLoadCompleted() { }
346 virtual void restoreViewState() { }
347 virtual void provisionalLoadStarted() { }
348 virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; }
349 virtual void didFinishLoad() { }
350 virtual void prepareForDataSourceReplacement() { }
352 virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request, const SubstituteData& substituteData) { return DocumentLoader::create(request, substituteData); }
353 virtual void setTitle(const StringWithDirection&, const KURL&) { }
355 virtual String userAgent(const KURL&) { return ""; }
357 virtual void savePlatformDataToCachedFrame(CachedFrame*) { }
358 virtual void transitionToCommittedFromCachedFrame(CachedFrame*) { }
359 virtual void transitionToCommittedForNewPage() { }
361 virtual void didSaveToPageCache() { }
362 virtual void didRestoreFromPageCache() { }
364 virtual void dispatchDidBecomeFrameset(bool) { }
366 virtual void updateGlobalHistory() { }
367 virtual void updateGlobalHistoryRedirectLinks() { }
368 virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
369 virtual bool shouldStopLoadingForHistoryItem(HistoryItem*) const { return false; }
370 virtual void dispatchDidAddBackForwardItem(HistoryItem*) const { }
371 virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const { }
372 virtual void dispatchDidChangeBackForwardIndex() const { }
373 virtual void updateGlobalHistoryItemForPage() { }
374 virtual void saveViewStateToItem(HistoryItem*) { }
375 virtual bool canCachePage() const { return false; }
376 virtual void didDisplayInsecureContent() { }
377 virtual void didRunInsecureContent(SecurityOrigin*, const KURL&) { }
378 virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) { return 0; }
379 virtual void didTransferChildFrameToNewDocument(Page*) { }
380 virtual void transferLoadingResourceFromPage(ResourceLoader*, const ResourceRequest&, Page*) { }
381 virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; }
382 virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; }
383 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
384 virtual PassRefPtr<Widget> createMediaPlayerProxyPlugin(const IntSize&, HTMLMediaElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&) { return 0; }
385 virtual void hideMediaPlayerProxyPlugin(Widget*) { }
386 virtual void showMediaPlayerProxyPlugin(Widget*) { }
389 virtual ObjectContentType objectContentType(const KURL&, const String&, bool) { return ObjectContentType(); }
390 virtual String overrideMediaType() const { return String(); }
392 virtual void redirectDataToPlugin(Widget*) { }
393 virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*) { }
394 virtual void documentElementAvailable() { }
395 virtual void didPerformFirstNavigation() const { }
397 virtual void registerForIconNotification(bool) { }
400 virtual void didCreateScriptContextForFrame() { }
401 virtual void didDestroyScriptContextForFrame() { }
402 virtual void didCreateIsolatedScriptContext(V8IsolatedContext*) { }
403 virtual bool allowScriptExtension(const String& extensionName, int extensionGroup) { return false; }
407 virtual RemoteAXObjectRef accessibilityRemoteObject() { return 0; }
408 virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const { return response; }
410 #if PLATFORM(WIN) && USE(CFNETWORK)
411 // FIXME: Windows should use willCacheResponse - <https://bugs.webkit.org/show_bug.cgi?id=57257>.
412 virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) { return true; }
415 virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext() { return PassRefPtr<FrameNetworkingContext>(); }
418 class EmptyTextCheckerClient : public TextCheckerClient {
420 virtual void ignoreWordInSpellDocument(const String&) { }
421 virtual void learnWord(const String&) { }
422 virtual void checkSpellingOfString(const UChar*, int, int*, int*) { }
423 virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) { return String(); }
424 virtual void checkGrammarOfString(const UChar*, int, Vector<GrammarDetail>&, int*, int*) { }
426 #if USE(UNIFIED_TEXT_CHECKING)
427 virtual void checkTextOfParagraph(const UChar*, int, TextCheckingTypeMask, Vector<TextCheckingResult>&) { };
430 virtual void getGuessesForWord(const String&, const String&, Vector<String>&) { }
431 virtual void requestCheckingOfString(SpellChecker*, int, TextCheckingTypeMask, const String&) { }
434 class EmptyEditorClient : public EditorClient {
435 WTF_MAKE_NONCOPYABLE(EmptyEditorClient); WTF_MAKE_FAST_ALLOCATED;
437 EmptyEditorClient() { }
438 virtual ~EmptyEditorClient() { }
439 virtual void pageDestroyed() { }
441 virtual bool shouldDeleteRange(Range*) { return false; }
442 virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
443 virtual bool smartInsertDeleteEnabled() { return false; }
444 virtual bool isSelectTrailingWhitespaceEnabled() { return false; }
445 virtual bool isContinuousSpellCheckingEnabled() { return false; }
446 virtual void toggleContinuousSpellChecking() { }
447 virtual bool isGrammarCheckingEnabled() { return false; }
448 virtual void toggleGrammarChecking() { }
449 virtual int spellCheckerDocumentTag() { return -1; }
451 virtual bool selectWordBeforeMenuEvent() { return false; }
452 virtual bool isEditable() { return false; }
454 virtual bool shouldBeginEditing(Range*) { return false; }
455 virtual bool shouldEndEditing(Range*) { return false; }
456 virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; }
457 // virtual bool shouldInsertNode(Node*, Range* replacingRange, WebViewInsertAction) { return false; }
458 virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) { return false; }
459 virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) { return false; }
461 virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
462 virtual bool shouldMoveRangeAfterDelete(Range*, Range*) { return false; }
463 // virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
464 // virtual bool doCommandBySelector(SEL selector) { return false; }
466 virtual void didBeginEditing() { }
467 virtual void respondToChangedContents() { }
468 virtual void respondToChangedSelection() { }
469 virtual void didEndEditing() { }
470 virtual void didWriteSelectionToPasteboard() { }
471 virtual void didSetSelectionTypesForPasteboard() { }
472 // virtual void webViewDidChangeTypingStyle:(NSNotification *)notification { }
473 // virtual void webViewDidChangeSelection:(NSNotification *)notification { }
474 // virtual NSUndoManager* undoManagerForWebView:(WebView *)webView { return 0; }
476 virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
477 virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
478 virtual void clearUndoRedoOperations() { }
480 virtual bool canCopyCut(Frame*, bool defaultValue) const { return defaultValue; }
481 virtual bool canPaste(Frame*, bool defaultValue) const { return defaultValue; }
482 virtual bool canUndo() const { return false; }
483 virtual bool canRedo() const { return false; }
485 virtual void undo() { }
486 virtual void redo() { }
488 virtual void handleKeyboardEvent(KeyboardEvent*) { }
489 virtual void handleInputMethodKeydown(KeyboardEvent*) { }
491 virtual void textFieldDidBeginEditing(Element*) { }
492 virtual void textFieldDidEndEditing(Element*) { }
493 virtual void textDidChangeInTextField(Element*) { }
494 virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) { return false; }
495 virtual void textWillBeDeletedInTextField(Element*) { }
496 virtual void textDidChangeInTextArea(Element*) { }
499 virtual void markedTextAbandoned(Frame*) { }
501 virtual NSString* userVisibleString(NSURL*) { return 0; }
502 virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector<RefPtr<ArchiveResource> >&) { return 0; };
503 virtual void setInsertionPasteboard(NSPasteboard*) { };
504 virtual NSURL* canonicalizeURL(NSURL*) { return 0; }
505 virtual NSURL* canonicalizeURLString(NSString*) { return 0; }
507 #if PLATFORM(MAC) && !defined(BUILDING_ON_LEOPARD)
508 virtual void uppercaseWord() { }
509 virtual void lowercaseWord() { }
510 virtual void capitalizeWord() { }
511 virtual void showSubstitutionsPanel(bool) { }
512 virtual bool substitutionsPanelIsShowing() { return false; }
513 virtual void toggleSmartInsertDelete() { }
514 virtual bool isAutomaticQuoteSubstitutionEnabled() { return false; }
515 virtual void toggleAutomaticQuoteSubstitution() { }
516 virtual bool isAutomaticLinkDetectionEnabled() { return false; }
517 virtual void toggleAutomaticLinkDetection() { }
518 virtual bool isAutomaticDashSubstitutionEnabled() { return false; }
519 virtual void toggleAutomaticDashSubstitution() { }
520 virtual bool isAutomaticTextReplacementEnabled() { return false; }
521 virtual void toggleAutomaticTextReplacement() { }
522 virtual bool isAutomaticSpellingCorrectionEnabled() { return false; }
523 virtual void toggleAutomaticSpellingCorrection() { }
525 TextCheckerClient* textChecker() { return &m_textCheckerClient; }
527 #if USE(AUTOCORRECTION_PANEL)
528 virtual void showCorrectionPanel(CorrectionPanelInfo::PanelType, const FloatRect&, const String&, const String&, const Vector<String>&) { }
529 virtual void dismissCorrectionPanel(ReasonForDismissingCorrectionPanel) { }
530 virtual String dismissCorrectionPanelSoon(ReasonForDismissingCorrectionPanel) { return String(); }
531 virtual void recordAutocorrectionResponse(AutocorrectionResponseType, const String&, const String&) { }
533 virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) { }
534 virtual void updateSpellingUIWithMisspelledWord(const String&) { }
535 virtual void showSpellingUI(bool) { }
536 virtual bool spellingUIIsShowing() { return false; }
538 virtual void willSetInputMethodState() { }
539 virtual void setInputMethodState(bool) { }
542 EmptyTextCheckerClient m_textCheckerClient;
545 #if ENABLE(CONTEXT_MENUS)
546 class EmptyContextMenuClient : public ContextMenuClient {
547 WTF_MAKE_NONCOPYABLE(EmptyContextMenuClient); WTF_MAKE_FAST_ALLOCATED;
549 EmptyContextMenuClient() { }
550 virtual ~EmptyContextMenuClient() { }
551 virtual void contextMenuDestroyed() { }
553 #if USE(CROSS_PLATFORM_CONTEXT_MENUS)
554 virtual PassOwnPtr<ContextMenu> customizeMenu(PassOwnPtr<ContextMenu>) { return nullptr; }
556 virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
558 virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
560 virtual void downloadURL(const KURL&) { }
561 virtual void copyImageToClipboard(const HitTestResult&) { }
562 virtual void searchWithGoogle(const Frame*) { }
563 virtual void lookUpInDictionary(Frame*) { }
564 virtual bool isSpeaking() { return false; }
565 virtual void speak(const String&) { }
566 virtual void stopSpeaking() { }
569 virtual void searchWithSpotlight() { }
572 #endif // ENABLE(CONTEXT_MENUS)
574 #if ENABLE(DRAG_SUPPORT)
575 class EmptyDragClient : public DragClient {
576 WTF_MAKE_NONCOPYABLE(EmptyDragClient); WTF_MAKE_FAST_ALLOCATED;
578 EmptyDragClient() { }
579 virtual ~EmptyDragClient() {}
580 virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
581 virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*) { }
582 virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
583 virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; }
584 virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { }
585 virtual void dragControllerDestroyed() { }
587 #endif // ENABLE(DRAG_SUPPORT)
589 class EmptyInspectorClient : public InspectorClient {
590 WTF_MAKE_NONCOPYABLE(EmptyInspectorClient); WTF_MAKE_FAST_ALLOCATED;
592 EmptyInspectorClient() { }
593 virtual ~EmptyInspectorClient() { }
595 virtual void inspectorDestroyed() { }
597 virtual void openInspectorFrontend(InspectorController*) { }
599 virtual void highlight() { }
600 virtual void hideHighlight() { }
602 virtual bool sendMessageToFrontend(const String&) { return false; }
605 class EmptyDeviceMotionClient : public DeviceMotionClient {
607 virtual void setController(DeviceMotionController*) { }
608 virtual void startUpdating() { }
609 virtual void stopUpdating() { }
610 virtual DeviceMotionData* currentDeviceMotion() const { return 0; }
611 virtual void deviceMotionControllerDestroyed() { }
614 class EmptyDeviceOrientationClient : public DeviceOrientationClient {
616 virtual void setController(DeviceOrientationController*) { }
617 virtual void startUpdating() { }
618 virtual void stopUpdating() { }
619 virtual DeviceOrientation* lastOrientation() const { return 0; }
620 virtual void deviceOrientationControllerDestroyed() { }
625 #endif // EmptyClients_h