1/* 2 * Copyright (C) 2006 Eric Seidel (eric@webkit.org) 3 * Copyright (C) 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 4 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 5 * Copyright (C) 2012 Samsung Electronics. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 20 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 24 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#ifndef EmptyClients_h 30#define EmptyClients_h 31 32#include "ChromeClient.h" 33#include "ContextMenuClient.h" 34#include "DeviceMotionClient.h" 35#include "DeviceOrientationClient.h" 36#include "DragClient.h" 37#include "EditorClient.h" 38#include "TextCheckerClient.h" 39#include "FloatRect.h" 40#include "FocusDirection.h" 41#include "FrameLoaderClient.h" 42#include "InspectorClient.h" 43#include "Page.h" 44#include "ResourceError.h" 45 46/* 47 This file holds empty Client stubs for use by WebCore. 48 Viewless element needs to create a dummy Page->Frame->FrameView tree for use in parsing or executing JavaScript. 49 This tree depends heavily on Clients (usually provided by WebKit classes). 50 51 This file was first created for SVGImage as it had no way to access the current Page (nor should it, 52 since Images are not tied to a page). 53 See http://bugs.webkit.org/show_bug.cgi?id=5971 for the original discussion about this file. 54 55 Ideally, whenever you change a Client class, you should add a stub here. 56 Brittle, yes. Unfortunate, yes. Hopefully temporary. 57*/ 58 59namespace WebCore { 60 61class GraphicsContext3D; 62 63class EmptyChromeClient : public ChromeClient { 64 WTF_MAKE_FAST_ALLOCATED; 65public: 66 virtual ~EmptyChromeClient() { } 67 virtual void chromeDestroyed() { } 68 69 virtual void setWindowRect(const FloatRect&) { } 70 virtual FloatRect windowRect() { return FloatRect(); } 71 72 virtual FloatRect pageRect() { return FloatRect(); } 73 74 virtual void focus() { } 75 virtual void unfocus() { } 76 77 virtual bool canTakeFocus(FocusDirection) { return false; } 78 virtual void takeFocus(FocusDirection) { } 79 80 virtual void focusedNodeChanged(Node*) { } 81 virtual void focusedFrameChanged(Frame*) { } 82 83 virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&) { return 0; } 84 virtual void show() { } 85 86 virtual bool canRunModal() { return false; } 87 virtual void runModal() { } 88 89 virtual void setToolbarsVisible(bool) { } 90 virtual bool toolbarsVisible() { return false; } 91 92 virtual void setStatusbarVisible(bool) { } 93 virtual bool statusbarVisible() { return false; } 94 95 virtual void setScrollbarsVisible(bool) { } 96 virtual bool scrollbarsVisible() { return false; } 97 98 virtual void setMenubarVisible(bool) { } 99 virtual bool menubarVisible() { return false; } 100 101 virtual void setResizable(bool) { } 102 103 virtual void addMessageToConsole(MessageSource, MessageLevel, const String&, unsigned, unsigned, const String&) { } 104 105 virtual bool canRunBeforeUnloadConfirmPanel() { return false; } 106 virtual bool runBeforeUnloadConfirmPanel(const String&, Frame*) { return true; } 107 108 virtual void closeWindowSoon() { } 109 110 virtual void runJavaScriptAlert(Frame*, const String&) { } 111 virtual bool runJavaScriptConfirm(Frame*, const String&) { return false; } 112 virtual bool runJavaScriptPrompt(Frame*, const String&, const String&, String&) { return false; } 113 virtual bool shouldInterruptJavaScript() { return false; } 114 115 virtual bool selectItemWritingDirectionIsNatural() { return false; } 116 virtual bool selectItemAlignmentFollowsMenuWritingDirection() { return false; } 117 virtual bool hasOpenedPopup() const OVERRIDE { return false; } 118 virtual PassRefPtr<PopupMenu> createPopupMenu(PopupMenuClient*) const OVERRIDE; 119 virtual PassRefPtr<SearchPopupMenu> createSearchPopupMenu(PopupMenuClient*) const OVERRIDE; 120 121 virtual void setStatusbarText(const String&) { } 122 123 virtual KeyboardUIMode keyboardUIMode() { return KeyboardAccessDefault; } 124 125 virtual IntRect windowResizerRect() const { return IntRect(); } 126 127 virtual void invalidateRootView(const IntRect&, bool) OVERRIDE { } 128 virtual void invalidateContentsAndRootView(const IntRect&, bool) OVERRIDE { } 129 virtual void invalidateContentsForSlowScroll(const IntRect&, bool) OVERRIDE { } 130 virtual void scroll(const IntSize&, const IntRect&, const IntRect&) { } 131#if USE(TILED_BACKING_STORE) 132 virtual void delegatedScrollRequested(const IntPoint&) { } 133#endif 134#if ENABLE(REQUEST_ANIMATION_FRAME) && !USE(REQUEST_ANIMATION_FRAME_TIMER) 135 virtual void scheduleAnimation() { } 136#endif 137 138 virtual IntPoint screenToRootView(const IntPoint& p) const OVERRIDE { return p; } 139 virtual IntRect rootViewToScreen(const IntRect& r) const OVERRIDE { return r; } 140 virtual PlatformPageClient platformPageClient() const { return 0; } 141 virtual void contentsSizeChanged(Frame*, const IntSize&) const { } 142 143 virtual void scrollbarsModeDidChange() const { } 144 virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) { } 145 146 virtual void setToolTip(const String&, TextDirection) { } 147 148 virtual void print(Frame*) { } 149 150#if ENABLE(SQL_DATABASE) 151 virtual void exceededDatabaseQuota(Frame*, const String&, DatabaseDetails) { } 152#endif 153 154 virtual void reachedMaxAppCacheSize(int64_t) { } 155 virtual void reachedApplicationCacheOriginQuota(SecurityOrigin*, int64_t) { } 156 157#if ENABLE(DIRECTORY_UPLOAD) 158 virtual void enumerateChosenDirectory(FileChooser*) { } 159#endif 160 161#if ENABLE(INPUT_TYPE_COLOR) 162 virtual PassOwnPtr<ColorChooser> createColorChooser(ColorChooserClient*, const Color&) OVERRIDE; 163#endif 164 165#if ENABLE(DATE_AND_TIME_INPUT_TYPES) 166 virtual PassRefPtr<DateTimeChooser> openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&) OVERRIDE; 167#endif 168 169 virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) OVERRIDE; 170 virtual void loadIconForFiles(const Vector<String>&, FileIconLoader*) { } 171 172 virtual void formStateDidChange(const Node*) { } 173 174 virtual void elementDidFocus(const Node*) { } 175 virtual void elementDidBlur(const Node*) { } 176 177 virtual void setCursor(const Cursor&) { } 178 virtual void setCursorHiddenUntilMouseMoves(bool) { } 179 180 virtual void scrollRectIntoView(const IntRect&) const { } 181 182#if USE(ACCELERATED_COMPOSITING) 183 virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) { } 184 virtual void setNeedsOneShotDrawingSynchronization() { } 185 virtual void scheduleCompositingLayerFlush() { } 186#endif 187 188#if PLATFORM(WIN) 189 virtual void setLastSetCursorToCurrentCursor() { } 190 virtual void AXStartFrameLoad() { } 191 virtual void AXFinishFrameLoad() { } 192#endif 193#if ENABLE(TOUCH_EVENTS) 194 virtual void needTouchEvents(bool) { } 195#endif 196 197 virtual void numWheelEventHandlersChanged(unsigned) OVERRIDE { } 198 199 virtual bool shouldRubberBandInDirection(WebCore::ScrollDirection) const { return false; } 200 201 virtual bool isEmptyChromeClient() const { return true; } 202 203 virtual void didAssociateFormControls(const Vector<RefPtr<Element> >&) { } 204 virtual bool shouldNotifyOnFormChanges() { return false; } 205}; 206 207// FIXME (bug 116233): Get rid of EmptyFrameLoaderClient. It is a travesty. 208 209class EmptyFrameLoaderClient : public FrameLoaderClient { 210 WTF_MAKE_NONCOPYABLE(EmptyFrameLoaderClient); WTF_MAKE_FAST_ALLOCATED; 211public: 212 EmptyFrameLoaderClient() { } 213 virtual ~EmptyFrameLoaderClient() { } 214 virtual void frameLoaderDestroyed() { } 215 216 virtual bool hasWebView() const { return true; } // mainly for assertions 217 218 virtual void makeRepresentation(DocumentLoader*) { } 219 virtual void forceLayout() { } 220 virtual void forceLayoutForNonHTML() { } 221 222 virtual void setCopiesOnScroll() { } 223 224 virtual void detachedFromParent2() { } 225 virtual void detachedFromParent3() { } 226 227 virtual void convertMainResourceLoadToDownload(DocumentLoader*, const ResourceRequest&, const ResourceResponse&) OVERRIDE { } 228 229 virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) { } 230 virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) { return false; } 231 virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) { } 232 virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { } 233 virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { } 234#if USE(PROTECTION_SPACE_AUTH_CALLBACK) 235 virtual bool canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long, const ProtectionSpace&) { return false; } 236#endif 237 virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) { } 238 virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) { } 239 virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) { } 240 virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) { } 241 virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) { return false; } 242 243 virtual void dispatchDidHandleOnloadEvents() { } 244 virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { } 245 virtual void dispatchDidCancelClientRedirect() { } 246 virtual void dispatchWillPerformClientRedirect(const KURL&, double, double) { } 247 virtual void dispatchDidChangeLocationWithinPage() { } 248 virtual void dispatchDidPushStateWithinPage() { } 249 virtual void dispatchDidReplaceStateWithinPage() { } 250 virtual void dispatchDidPopStateWithinPage() { } 251 virtual void dispatchWillClose() { } 252 virtual void dispatchDidReceiveIcon() { } 253 virtual void dispatchDidStartProvisionalLoad() { } 254 virtual void dispatchDidReceiveTitle(const StringWithDirection&) { } 255 virtual void dispatchDidChangeIcons(IconType) { } 256 virtual void dispatchDidCommitLoad() { } 257 virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { } 258 virtual void dispatchDidFailLoad(const ResourceError&) { } 259 virtual void dispatchDidFinishDocumentLoad() { } 260 virtual void dispatchDidFinishLoad() { } 261 virtual void dispatchDidLayout(LayoutMilestones) { } 262 263 virtual Frame* dispatchCreatePage(const NavigationAction&) { return 0; } 264 virtual void dispatchShow() { } 265 266 virtual void dispatchDecidePolicyForResponse(FramePolicyFunction, const ResourceResponse&, const ResourceRequest&) { } 267 virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&) OVERRIDE; 268 virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>) OVERRIDE; 269 virtual void cancelPolicyCheck() { } 270 271 virtual void dispatchUnableToImplementPolicy(const ResourceError&) { } 272 273 virtual void dispatchWillSendSubmitEvent(PassRefPtr<FormState>) OVERRIDE; 274 virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) OVERRIDE; 275 276 virtual void revertToProvisionalState(DocumentLoader*) { } 277 virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { } 278 279 virtual void willChangeEstimatedProgress() { } 280 virtual void didChangeEstimatedProgress() { } 281 virtual void postProgressStartedNotification() { } 282 virtual void postProgressEstimateChangedNotification() { } 283 virtual void postProgressFinishedNotification() { } 284 285 virtual void setMainFrameDocumentReady(bool) { } 286 287 virtual void startDownload(const ResourceRequest&, const String& suggestedName = String()) { UNUSED_PARAM(suggestedName); } 288 289 virtual void willChangeTitle(DocumentLoader*) { } 290 virtual void didChangeTitle(DocumentLoader*) { } 291 292 virtual void committedLoad(DocumentLoader*, const char*, int) { } 293 virtual void finishedLoading(DocumentLoader*) { } 294 295 virtual ResourceError cancelledError(const ResourceRequest&) { ResourceError error("", 0, "", ""); error.setIsCancellation(true); return error; } 296 virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError("", 0, "", ""); } 297 virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError("", 0, "", ""); } 298 virtual ResourceError interruptedForPolicyChangeError(const ResourceRequest&) { return ResourceError("", 0, "", ""); } 299 300 virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError("", 0, "", ""); } 301 virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError("", 0, "", ""); } 302 virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) { return ResourceError("", 0, "", ""); } 303 304 virtual bool shouldFallBack(const ResourceError&) { return false; } 305 306 virtual bool canHandleRequest(const ResourceRequest&) const { return false; } 307 virtual bool canShowMIMEType(const String&) const { return false; } 308 virtual bool canShowMIMETypeAsHTML(const String&) const { return false; } 309 virtual bool representationExistsForURLScheme(const String&) const { return false; } 310 virtual String generatedMIMETypeForURLScheme(const String&) const { return ""; } 311 312 virtual void frameLoadCompleted() { } 313 virtual void restoreViewState() { } 314 virtual void provisionalLoadStarted() { } 315 virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; } 316 virtual void didFinishLoad() { } 317 virtual void prepareForDataSourceReplacement() { } 318 319 virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest&, const SubstituteData&) OVERRIDE; 320 virtual void setTitle(const StringWithDirection&, const KURL&) { } 321 322 virtual String userAgent(const KURL&) { return ""; } 323 324 virtual void savePlatformDataToCachedFrame(CachedFrame*) { } 325 virtual void transitionToCommittedFromCachedFrame(CachedFrame*) { } 326 virtual void transitionToCommittedForNewPage() { } 327 328 virtual void didSaveToPageCache() { } 329 virtual void didRestoreFromPageCache() { } 330 331 virtual void dispatchDidBecomeFrameset(bool) { } 332 333 virtual void updateGlobalHistory() { } 334 virtual void updateGlobalHistoryRedirectLinks() { } 335 virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; } 336 virtual bool shouldStopLoadingForHistoryItem(HistoryItem*) const { return false; } 337 virtual void updateGlobalHistoryItemForPage() { } 338 virtual void saveViewStateToItem(HistoryItem*) { } 339 virtual bool canCachePage() const { return false; } 340 virtual void didDisplayInsecureContent() { } 341 virtual void didRunInsecureContent(SecurityOrigin*, const KURL&) { } 342 virtual void didDetectXSS(const KURL&, bool) { } 343 virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) OVERRIDE; 344 virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) OVERRIDE; 345 virtual void recreatePlugin(Widget*) OVERRIDE; 346 virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&) OVERRIDE; 347#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) 348 virtual PassRefPtr<Widget> createMediaPlayerProxyPlugin(const IntSize&, HTMLMediaElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&) OVERRIDE; 349 virtual void hideMediaPlayerProxyPlugin(Widget*) { } 350 virtual void showMediaPlayerProxyPlugin(Widget*) { } 351#endif 352 353 virtual ObjectContentType objectContentType(const KURL&, const String&, bool) { return ObjectContentType(); } 354 virtual String overrideMediaType() const { return String(); } 355 356 virtual void redirectDataToPlugin(Widget*) { } 357 virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*) { } 358 virtual void documentElementAvailable() { } 359 virtual void didPerformFirstNavigation() const { } 360 361 virtual void registerForIconNotification(bool) { } 362 363#if PLATFORM(MAC) 364 virtual RemoteAXObjectRef accessibilityRemoteObject() { return 0; } 365 virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const { return response; } 366#endif 367#if PLATFORM(WIN) && USE(CFNETWORK) 368 // FIXME: Windows should use willCacheResponse - <https://bugs.webkit.org/show_bug.cgi?id=57257>. 369 virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) { return true; } 370#endif 371 372 virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext() OVERRIDE; 373 374 virtual bool isEmptyFrameLoaderClient() OVERRIDE { return true; } 375}; 376 377class EmptyTextCheckerClient : public TextCheckerClient { 378public: 379 virtual bool shouldEraseMarkersAfterChangeSelection(TextCheckingType) const { return true; } 380 virtual void ignoreWordInSpellDocument(const String&) { } 381 virtual void learnWord(const String&) { } 382 virtual void checkSpellingOfString(const UChar*, int, int*, int*) { } 383 virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) { return String(); } 384 virtual void checkGrammarOfString(const UChar*, int, Vector<GrammarDetail>&, int*, int*) { } 385 386#if USE(UNIFIED_TEXT_CHECKING) 387 virtual void checkTextOfParagraph(const UChar*, int, TextCheckingTypeMask, Vector<TextCheckingResult>&) { }; 388#endif 389 390 virtual void getGuessesForWord(const String&, const String&, Vector<String>&) { } 391 virtual void requestCheckingOfString(PassRefPtr<TextCheckingRequest>) OVERRIDE; 392}; 393 394class EmptyEditorClient : public EditorClient { 395 WTF_MAKE_NONCOPYABLE(EmptyEditorClient); WTF_MAKE_FAST_ALLOCATED; 396public: 397 EmptyEditorClient() { } 398 virtual ~EmptyEditorClient() { } 399 virtual void pageDestroyed() { } 400 virtual void frameWillDetachPage(Frame*) { } 401 402 virtual bool shouldDeleteRange(Range*) { return false; } 403 virtual bool smartInsertDeleteEnabled() { return false; } 404 virtual bool isSelectTrailingWhitespaceEnabled() { return false; } 405 virtual bool isContinuousSpellCheckingEnabled() { return false; } 406 virtual void toggleContinuousSpellChecking() { } 407 virtual bool isGrammarCheckingEnabled() { return false; } 408 virtual void toggleGrammarChecking() { } 409 virtual int spellCheckerDocumentTag() { return -1; } 410 411 virtual bool selectWordBeforeMenuEvent() { return false; } 412 virtual bool isEditable() { return false; } 413 414 virtual bool shouldBeginEditing(Range*) { return false; } 415 virtual bool shouldEndEditing(Range*) { return false; } 416 virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; } 417 virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) { return false; } 418 virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) { return false; } 419 420 virtual bool shouldApplyStyle(StylePropertySet*, Range*) { return false; } 421 virtual bool shouldMoveRangeAfterDelete(Range*, Range*) { return false; } 422 423 virtual void didBeginEditing() { } 424 virtual void respondToChangedContents() { } 425 virtual void respondToChangedSelection(Frame*) { } 426 virtual void didEndEditing() { } 427 virtual void willWriteSelectionToPasteboard(Range*) { } 428 virtual void didWriteSelectionToPasteboard() { } 429 virtual void getClientPasteboardDataForRange(Range*, Vector<String>&, Vector<RefPtr<SharedBuffer> >&) { } 430 virtual void didSetSelectionTypesForPasteboard() { } 431 432 virtual void registerUndoStep(PassRefPtr<UndoStep>) OVERRIDE; 433 virtual void registerRedoStep(PassRefPtr<UndoStep>) OVERRIDE; 434 virtual void clearUndoRedoOperations() { } 435 436 virtual bool canCopyCut(Frame*, bool defaultValue) const { return defaultValue; } 437 virtual bool canPaste(Frame*, bool defaultValue) const { return defaultValue; } 438 virtual bool canUndo() const { return false; } 439 virtual bool canRedo() const { return false; } 440 441 virtual void undo() { } 442 virtual void redo() { } 443 444 virtual void handleKeyboardEvent(KeyboardEvent*) { } 445 virtual void handleInputMethodKeydown(KeyboardEvent*) { } 446 447 virtual void textFieldDidBeginEditing(Element*) { } 448 virtual void textFieldDidEndEditing(Element*) { } 449 virtual void textDidChangeInTextField(Element*) { } 450 virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) { return false; } 451 virtual void textWillBeDeletedInTextField(Element*) { } 452 virtual void textDidChangeInTextArea(Element*) { } 453 454#if PLATFORM(MAC) 455 virtual void markedTextAbandoned(Frame*) { } 456 457 virtual NSString* userVisibleString(NSURL*) { return 0; } 458 virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector<RefPtr<ArchiveResource> >&) { return 0; }; 459 virtual void setInsertionPasteboard(const String&) { }; 460 virtual NSURL* canonicalizeURL(NSURL*) { return 0; } 461 virtual NSURL* canonicalizeURLString(NSString*) { return 0; } 462#endif 463 464#if USE(APPKIT) 465 virtual void uppercaseWord() { } 466 virtual void lowercaseWord() { } 467 virtual void capitalizeWord() { } 468#endif 469 470#if USE(AUTOMATIC_TEXT_REPLACEMENT) 471 virtual void showSubstitutionsPanel(bool) { } 472 virtual bool substitutionsPanelIsShowing() { return false; } 473 virtual void toggleSmartInsertDelete() { } 474 virtual bool isAutomaticQuoteSubstitutionEnabled() { return false; } 475 virtual void toggleAutomaticQuoteSubstitution() { } 476 virtual bool isAutomaticLinkDetectionEnabled() { return false; } 477 virtual void toggleAutomaticLinkDetection() { } 478 virtual bool isAutomaticDashSubstitutionEnabled() { return false; } 479 virtual void toggleAutomaticDashSubstitution() { } 480 virtual bool isAutomaticTextReplacementEnabled() { return false; } 481 virtual void toggleAutomaticTextReplacement() { } 482 virtual bool isAutomaticSpellingCorrectionEnabled() { return false; } 483 virtual void toggleAutomaticSpellingCorrection() { } 484#endif 485 486#if ENABLE(DELETION_UI) 487 virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; } 488#endif 489 490#if PLATFORM(GTK) 491 virtual bool shouldShowUnicodeMenu() { return false; } 492#endif 493 TextCheckerClient* textChecker() { return &m_textCheckerClient; } 494 495 virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) { } 496 virtual void updateSpellingUIWithMisspelledWord(const String&) { } 497 virtual void showSpellingUI(bool) { } 498 virtual bool spellingUIIsShowing() { return false; } 499 500 virtual void willSetInputMethodState() { } 501 virtual void setInputMethodState(bool) { } 502 503private: 504 EmptyTextCheckerClient m_textCheckerClient; 505}; 506 507#if ENABLE(CONTEXT_MENUS) 508class EmptyContextMenuClient : public ContextMenuClient { 509 WTF_MAKE_NONCOPYABLE(EmptyContextMenuClient); WTF_MAKE_FAST_ALLOCATED; 510public: 511 EmptyContextMenuClient() { } 512 virtual ~EmptyContextMenuClient() { } 513 virtual void contextMenuDestroyed() { } 514 515#if USE(CROSS_PLATFORM_CONTEXT_MENUS) 516 virtual PassOwnPtr<ContextMenu> customizeMenu(PassOwnPtr<ContextMenu>) OVERRIDE; 517#else 518 virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; } 519#endif 520 virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { } 521 522 virtual void downloadURL(const KURL&) { } 523 virtual void copyImageToClipboard(const HitTestResult&) { } 524 virtual void searchWithGoogle(const Frame*) { } 525 virtual void lookUpInDictionary(Frame*) { } 526 virtual bool isSpeaking() { return false; } 527 virtual void speak(const String&) { } 528 virtual void stopSpeaking() { } 529 530#if PLATFORM(MAC) 531 virtual void searchWithSpotlight() { } 532#endif 533 534#if USE(ACCESSIBILITY_CONTEXT_MENUS) 535 virtual void showContextMenu() { } 536#endif 537}; 538#endif // ENABLE(CONTEXT_MENUS) 539 540#if ENABLE(DRAG_SUPPORT) 541class EmptyDragClient : public DragClient { 542 WTF_MAKE_NONCOPYABLE(EmptyDragClient); WTF_MAKE_FAST_ALLOCATED; 543public: 544 EmptyDragClient() { } 545 virtual ~EmptyDragClient() {} 546 virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { } 547 virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*) { } 548 virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; } 549 virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; } 550 virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { } 551 virtual void dragControllerDestroyed() { } 552}; 553#endif // ENABLE(DRAG_SUPPORT) 554 555class EmptyInspectorClient : public InspectorClient { 556 WTF_MAKE_NONCOPYABLE(EmptyInspectorClient); WTF_MAKE_FAST_ALLOCATED; 557public: 558 EmptyInspectorClient() { } 559 virtual ~EmptyInspectorClient() { } 560 561 virtual void inspectorDestroyed() { } 562 563 virtual InspectorFrontendChannel* openInspectorFrontend(InspectorController*) { return 0; } 564 virtual void closeInspectorFrontend() { } 565 virtual void bringFrontendToFront() { } 566 567 virtual void highlight() { } 568 virtual void hideHighlight() { } 569}; 570 571class EmptyDeviceClient : public DeviceClient { 572public: 573 virtual void startUpdating() OVERRIDE { } 574 virtual void stopUpdating() OVERRIDE { } 575}; 576 577class EmptyDeviceMotionClient : public DeviceMotionClient { 578public: 579 virtual void setController(DeviceMotionController*) { } 580 virtual DeviceMotionData* lastMotion() const { return 0; } 581 virtual void deviceMotionControllerDestroyed() { } 582}; 583 584class EmptyDeviceOrientationClient : public DeviceOrientationClient { 585public: 586 virtual void setController(DeviceOrientationController*) { } 587 virtual DeviceOrientationData* lastOrientation() const { return 0; } 588 virtual void deviceOrientationControllerDestroyed() { } 589}; 590 591void fillWithEmptyClients(Page::PageClients&); 592 593} 594 595#endif // EmptyClients_h 596