1/*
2 * Copyright (C) 2006 Eric Seidel (eric@webkit.org)
3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#ifndef EmptyClients_h
28#define EmptyClients_h
29
30#include "ChromeClient.h"
31#include "ContextMenuClient.h"
32#include "Console.h"
33#include "DocumentLoader.h"
34#include "DragClient.h"
35#include "EditCommand.h"
36#include "EditorClient.h"
37#include "FloatRect.h"
38#include "FocusDirection.h"
39#include "FormState.h"
40#include "FrameLoaderClient.h"
41#include "InspectorClient.h"
42#include "PluginHalterClient.h"
43#include "ResourceError.h"
44#include "SharedBuffer.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 EmptyChromeClient : public ChromeClient {
62public:
63    virtual ~EmptyChromeClient() { }
64    virtual void chromeDestroyed() { }
65
66    virtual void setWindowRect(const FloatRect&) { }
67    virtual FloatRect windowRect() { return FloatRect(); }
68
69    virtual FloatRect pageRect() { return FloatRect(); }
70
71    virtual float scaleFactor() { return 1.f; }
72
73#ifdef ANDROID_USER_GESTURE
74    virtual void focus(bool userGesture) { }
75#else
76    virtual void focus() { }
77#endif
78    virtual void unfocus() { }
79
80    virtual bool canTakeFocus(FocusDirection) { return false; }
81    virtual void takeFocus(FocusDirection) { }
82
83    virtual void focusedNodeChanged(Node*) { }
84
85    virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&) { return 0; }
86    virtual void show() { }
87
88    virtual bool canRunModal() { return false; }
89    virtual void runModal() { }
90
91    virtual void setToolbarsVisible(bool) { }
92    virtual bool toolbarsVisible() { return false; }
93
94    virtual void setStatusbarVisible(bool) { }
95    virtual bool statusbarVisible() { return false; }
96
97    virtual void setScrollbarsVisible(bool) { }
98    virtual bool scrollbarsVisible() { return false; }
99
100    virtual void setMenubarVisible(bool) { }
101    virtual bool menubarVisible() { return false; }
102
103    virtual void setResizable(bool) { }
104
105    virtual void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String&, unsigned, const String&) { }
106
107    virtual bool canRunBeforeUnloadConfirmPanel() { return false; }
108    virtual bool runBeforeUnloadConfirmPanel(const String&, Frame*) { return true; }
109
110    virtual void closeWindowSoon() { }
111
112    virtual void runJavaScriptAlert(Frame*, const String&) { }
113    virtual bool runJavaScriptConfirm(Frame*, const String&) { return false; }
114    virtual bool runJavaScriptPrompt(Frame*, const String&, const String&, String&) { return false; }
115    virtual bool shouldInterruptJavaScript() { return false; }
116
117    virtual void setStatusbarText(const String&) { }
118
119    virtual bool tabsToLinks() const { return false; }
120
121    virtual IntRect windowResizerRect() const { return IntRect(); }
122    virtual void addToDirtyRegion(const IntRect&) { }
123    virtual void scrollBackingStore(int, int, const IntRect&, const IntRect&) { }
124    virtual void updateBackingStore() { }
125
126    virtual void repaint(const IntRect&, bool, bool, bool) { }
127    virtual void scroll(const IntSize&, const IntRect&, const IntRect&) { }
128    virtual IntPoint screenToWindow(const IntPoint& p) const { return p; }
129    virtual IntRect windowToScreen(const IntRect& r) const { return r; }
130    virtual PlatformPageClient platformPageClient() const { return 0; }
131    virtual void contentsSizeChanged(Frame*, const IntSize&) const { }
132
133    virtual void scrollbarsModeDidChange() const { }
134    virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) { }
135
136    virtual void setToolTip(const String&, TextDirection) { }
137
138    virtual void print(Frame*) { }
139
140#if ENABLE(DATABASE)
141    virtual void exceededDatabaseQuota(Frame*, const String&) { }
142#endif
143
144#if ENABLE(OFFLINE_WEB_APPLICATIONS)
145    virtual void reachedMaxAppCacheSize(int64_t) { }
146#endif
147
148#if ENABLE(NOTIFICATIONS)
149    virtual NotificationPresenter* notificationPresenter() const { return 0; }
150#endif
151
152    virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) { }
153
154    virtual void formStateDidChange(const Node*) { }
155
156    virtual void formDidFocus(const Node*) { }
157    virtual void formDidBlur(const Node*) { }
158
159    virtual PassOwnPtr<HTMLParserQuirks> createHTMLParserQuirks() { return 0; }
160
161    virtual bool setCursor(PlatformCursorHandle) { return false; }
162
163    virtual void scrollRectIntoView(const IntRect&, const ScrollView*) const {}
164
165    virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) {}
166    virtual void cancelGeolocationPermissionRequestForFrame(Frame*) {}
167
168#if USE(ACCELERATED_COMPOSITING)
169    virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*) {};
170    virtual void setNeedsOneShotDrawingSynchronization() {};
171    virtual void scheduleCompositingLayerSync() {};
172#endif
173
174#if ENABLE(TOUCH_EVENTS)
175    virtual void needTouchEvents(bool) { }
176#endif
177};
178
179class EmptyFrameLoaderClient : public FrameLoaderClient, public Noncopyable {
180public:
181    virtual ~EmptyFrameLoaderClient() {  }
182    virtual void frameLoaderDestroyed() { }
183
184    virtual bool hasWebView() const { return true; } // mainly for assertions
185
186    virtual void makeRepresentation(DocumentLoader*) { }
187    virtual void forceLayout() { }
188    virtual void forceLayoutForNonHTML() { }
189
190    virtual void setCopiesOnScroll() { }
191
192    virtual void detachedFromParent2() { }
193    virtual void detachedFromParent3() { }
194
195    virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&) { }
196
197    virtual void assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const ResourceRequest&) { }
198    virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long) { return false; }
199    virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) { }
200    virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
201    virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&) { }
202    virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) { }
203    virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int) { }
204    virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) { }
205    virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&) { }
206    virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int) { return false; }
207    virtual void dispatchDidLoadResourceByXMLHttpRequest(unsigned long, const ScriptString&) { }
208
209    virtual void dispatchDidHandleOnloadEvents() { }
210    virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
211    virtual void dispatchDidCancelClientRedirect() { }
212    virtual void dispatchWillPerformClientRedirect(const KURL&, double, double) { }
213    virtual void dispatchDidChangeLocationWithinPage() { }
214    virtual void dispatchDidPushStateWithinPage() { }
215    virtual void dispatchDidReplaceStateWithinPage() { }
216    virtual void dispatchDidPopStateWithinPage() { }
217    virtual void dispatchWillClose() { }
218    virtual void dispatchDidReceiveIcon() { }
219    virtual void dispatchDidStartProvisionalLoad() { }
220    virtual void dispatchDidReceiveTitle(const String&) { }
221    virtual void dispatchDidCommitLoad() { }
222    virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
223    virtual void dispatchDidFailLoad(const ResourceError&) { }
224    virtual void dispatchDidFinishDocumentLoad() { }
225    virtual void dispatchDidFinishLoad() { }
226    virtual void dispatchDidFirstLayout() { }
227    virtual void dispatchDidFirstVisuallyNonEmptyLayout() { }
228
229    virtual Frame* dispatchCreatePage() { return 0; }
230    virtual void dispatchShow() { }
231
232    virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String&, const ResourceRequest&) { }
233    virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&) { }
234    virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>) { }
235    virtual void cancelPolicyCheck() { }
236
237    virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
238
239    virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
240
241    virtual void dispatchDidLoadMainResource(DocumentLoader*) { }
242    virtual void revertToProvisionalState(DocumentLoader*) { }
243    virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
244
245    virtual void willChangeEstimatedProgress() { }
246    virtual void didChangeEstimatedProgress() { }
247    virtual void postProgressStartedNotification() { }
248    virtual void postProgressEstimateChangedNotification() { }
249    virtual void postProgressFinishedNotification() { }
250
251    virtual void setMainFrameDocumentReady(bool) { }
252
253    virtual void startDownload(const ResourceRequest&) { }
254
255    virtual void willChangeTitle(DocumentLoader*) { }
256    virtual void didChangeTitle(DocumentLoader*) { }
257
258    virtual void committedLoad(DocumentLoader*, const char*, int) { }
259    virtual void finishedLoading(DocumentLoader*) { }
260
261    virtual ResourceError cancelledError(const ResourceRequest&) { ResourceError error("", 0, "", ""); error.setIsCancellation(true); return error; }
262    virtual ResourceError blockedError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
263    virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
264    virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError("", 0, "", ""); }
265
266    virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
267    virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
268    virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&) { return ResourceError("", 0, "", ""); }
269
270    virtual bool shouldFallBack(const ResourceError&) { return false; }
271
272    virtual bool canHandleRequest(const ResourceRequest&) const { return false; }
273    virtual bool canShowMIMEType(const String&) const { return false; }
274    virtual bool representationExistsForURLScheme(const String&) const { return false; }
275    virtual String generatedMIMETypeForURLScheme(const String&) const { return ""; }
276
277    virtual void frameLoadCompleted() { }
278    virtual void restoreViewState() { }
279    virtual void provisionalLoadStarted() { }
280    virtual bool shouldTreatURLAsSameAsCurrent(const KURL&) const { return false; }
281    virtual void didFinishLoad() { }
282    virtual void prepareForDataSourceReplacement() { }
283
284    virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request, const SubstituteData& substituteData) { return DocumentLoader::create(request, substituteData); }
285    virtual void setTitle(const String&, const KURL&) { }
286
287    virtual String userAgent(const KURL&) { return ""; }
288
289    virtual void savePlatformDataToCachedFrame(CachedFrame*) { }
290    virtual void transitionToCommittedFromCachedFrame(CachedFrame*) { }
291    virtual void transitionToCommittedForNewPage() { }
292
293    virtual void updateGlobalHistory() { }
294    virtual void updateGlobalHistoryRedirectLinks() { }
295    virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; }
296    virtual void dispatchDidAddBackForwardItem(HistoryItem*) const { }
297    virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const { };
298    virtual void dispatchDidChangeBackForwardIndex() const { }
299    virtual void saveViewStateToItem(HistoryItem*) { }
300    virtual bool canCachePage() const { return false; }
301    virtual void didDisplayInsecureContent() { }
302    virtual void didRunInsecureContent(SecurityOrigin*) { }
303    virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) { return 0; }
304    virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; }
305    virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; }
306
307    virtual ObjectContentType objectContentType(const KURL&, const String&) { return ObjectContentType(); }
308    virtual String overrideMediaType() const { return String(); }
309
310    virtual void redirectDataToPlugin(Widget*) { }
311    virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*) { }
312    virtual void documentElementAvailable() { }
313    virtual void didPerformFirstNavigation() const { }
314
315    virtual void registerForIconNotification(bool) { }
316
317#if USE(V8)
318    virtual void didCreateScriptContextForFrame() { }
319    virtual void didDestroyScriptContextForFrame() { }
320    virtual void didCreateIsolatedScriptContext() { }
321#endif
322
323#if PLATFORM(MAC)
324    virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long, NSCachedURLResponse* response) const { return response; }
325#endif
326#if USE(CFNETWORK)
327    virtual bool shouldCacheResponse(DocumentLoader*, unsigned long, const ResourceResponse&, const unsigned char*, unsigned long long) { return true; }
328#endif
329
330};
331
332class EmptyEditorClient : public EditorClient, public Noncopyable {
333public:
334    virtual ~EmptyEditorClient() { }
335    virtual void pageDestroyed() { }
336
337    virtual bool shouldDeleteRange(Range*) { return false; }
338    virtual bool shouldShowDeleteInterface(HTMLElement*) { return false; }
339    virtual bool smartInsertDeleteEnabled() { return false; }
340    virtual bool isSelectTrailingWhitespaceEnabled() { return false; }
341    virtual bool isContinuousSpellCheckingEnabled() { return false; }
342    virtual void toggleContinuousSpellChecking() { }
343    virtual bool isGrammarCheckingEnabled() { return false; }
344    virtual void toggleGrammarChecking() { }
345    virtual int spellCheckerDocumentTag() { return -1; }
346
347    virtual bool selectWordBeforeMenuEvent() { return false; }
348    virtual bool isEditable() { return false; }
349
350    virtual bool shouldBeginEditing(Range*) { return false; }
351    virtual bool shouldEndEditing(Range*) { return false; }
352    virtual bool shouldInsertNode(Node*, Range*, EditorInsertAction) { return false; }
353    //  virtual bool shouldInsertNode(Node*, Range* replacingRange, WebViewInsertAction) { return false; }
354    virtual bool shouldInsertText(const String&, Range*, EditorInsertAction) { return false; }
355    virtual bool shouldChangeSelectedRange(Range*, Range*, EAffinity, bool) { return false; }
356
357    virtual bool shouldApplyStyle(CSSStyleDeclaration*, Range*) { return false; }
358    virtual bool shouldMoveRangeAfterDelete(Range*, Range*) { return false; }
359    //  virtual bool shouldChangeTypingStyle(CSSStyleDeclaration* fromStyle, CSSStyleDeclaration* toStyle) { return false; }
360    //  virtual bool doCommandBySelector(SEL selector) { return false; }
361    //
362    virtual void didBeginEditing() { }
363    virtual void respondToChangedContents() { }
364    virtual void respondToChangedSelection() { }
365    virtual void didEndEditing() { }
366    virtual void didWriteSelectionToPasteboard() { }
367    virtual void didSetSelectionTypesForPasteboard() { }
368    //  virtual void webViewDidChangeTypingStyle:(NSNotification *)notification { }
369    //  virtual void webViewDidChangeSelection:(NSNotification *)notification { }
370    //  virtual NSUndoManager* undoManagerForWebView:(WebView *)webView { return 0; }
371
372    virtual void registerCommandForUndo(PassRefPtr<EditCommand>) { }
373    virtual void registerCommandForRedo(PassRefPtr<EditCommand>) { }
374    virtual void clearUndoRedoOperations() { }
375
376    virtual bool canUndo() const { return false; }
377    virtual bool canRedo() const { return false; }
378
379    virtual void undo() { }
380    virtual void redo() { }
381
382    virtual void handleKeyboardEvent(KeyboardEvent*) { }
383    virtual void handleInputMethodKeydown(KeyboardEvent*) { }
384
385    virtual void textFieldDidBeginEditing(Element*) { }
386    virtual void textFieldDidEndEditing(Element*) { }
387    virtual void textDidChangeInTextField(Element*) { }
388    virtual bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*) { return false; }
389    virtual void textWillBeDeletedInTextField(Element*) { }
390    virtual void textDidChangeInTextArea(Element*) { }
391
392#if PLATFORM(MAC)
393    virtual void markedTextAbandoned(Frame*) { }
394
395    virtual NSString* userVisibleString(NSURL*) { return 0; }
396#ifdef BUILDING_ON_TIGER
397    virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; }
398#endif
399#endif
400#if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
401    virtual void uppercaseWord() { }
402    virtual void lowercaseWord() { }
403    virtual void capitalizeWord() { }
404    virtual void showSubstitutionsPanel(bool) { }
405    virtual bool substitutionsPanelIsShowing() { return false; }
406    virtual void toggleSmartInsertDelete() { }
407    virtual bool isAutomaticQuoteSubstitutionEnabled() { return false; }
408    virtual void toggleAutomaticQuoteSubstitution() { }
409    virtual bool isAutomaticLinkDetectionEnabled() { return false; }
410    virtual void toggleAutomaticLinkDetection() { }
411    virtual bool isAutomaticDashSubstitutionEnabled() { return false; }
412    virtual void toggleAutomaticDashSubstitution() { }
413    virtual bool isAutomaticTextReplacementEnabled() { return false; }
414    virtual void toggleAutomaticTextReplacement() { }
415    virtual bool isAutomaticSpellingCorrectionEnabled() { return false; }
416    virtual void toggleAutomaticSpellingCorrection() { }
417#endif
418    virtual void ignoreWordInSpellDocument(const String&) { }
419    virtual void learnWord(const String&) { }
420    virtual void checkSpellingOfString(const UChar*, int, int*, int*) { }
421    virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) { return String(); }
422    virtual void checkGrammarOfString(const UChar*, int, Vector<GrammarDetail>&, int*, int*) { }
423#if PLATFORM(MAC) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
424    virtual void checkTextOfParagraph(const UChar*, int, uint64_t, Vector<TextCheckingResult>&) { };
425#endif
426    virtual void updateSpellingUIWithGrammarString(const String&, const GrammarDetail&) { }
427    virtual void updateSpellingUIWithMisspelledWord(const String&) { }
428    virtual void showSpellingUI(bool) { }
429    virtual bool spellingUIIsShowing() { return false; }
430    virtual void getGuessesForWord(const String&, Vector<String>&) { }
431    virtual void setInputMethodState(bool) { }
432
433
434};
435
436#if ENABLE(CONTEXT_MENUS)
437class EmptyContextMenuClient : public ContextMenuClient, public Noncopyable {
438public:
439    virtual ~EmptyContextMenuClient() {  }
440    virtual void contextMenuDestroyed() { }
441
442    virtual PlatformMenuDescription getCustomMenuFromDefaultItems(ContextMenu*) { return 0; }
443    virtual void contextMenuItemSelected(ContextMenuItem*, const ContextMenu*) { }
444
445    virtual void downloadURL(const KURL&) { }
446    virtual void copyImageToClipboard(const HitTestResult&) { }
447    virtual void searchWithGoogle(const Frame*) { }
448    virtual void lookUpInDictionary(Frame*) { }
449    virtual bool isSpeaking() { return false; }
450    virtual void speak(const String&) { }
451    virtual void stopSpeaking() { }
452
453#if PLATFORM(MAC)
454    virtual void searchWithSpotlight() { }
455#endif
456};
457#endif // ENABLE(CONTEXT_MENUS)
458
459#if ENABLE(DRAG_SUPPORT)
460class EmptyDragClient : public DragClient, public Noncopyable {
461public:
462    virtual ~EmptyDragClient() {}
463    virtual void willPerformDragDestinationAction(DragDestinationAction, DragData*) { }
464    virtual void willPerformDragSourceAction(DragSourceAction, const IntPoint&, Clipboard*) { }
465    virtual DragDestinationAction actionMaskForDrag(DragData*) { return DragDestinationActionNone; }
466    virtual DragSourceAction dragSourceActionMaskForPoint(const IntPoint&) { return DragSourceActionNone; }
467    virtual void startDrag(DragImageRef, const IntPoint&, const IntPoint&, Clipboard*, Frame*, bool) { }
468    virtual DragImageRef createDragImageForLink(KURL&, const String&, Frame*) { return 0; }
469    virtual void dragControllerDestroyed() { }
470};
471#endif // ENABLE(DRAG_SUPPORT)
472
473class EmptyInspectorClient : public InspectorClient, public Noncopyable {
474public:
475    virtual ~EmptyInspectorClient() { }
476
477    virtual void inspectorDestroyed() { }
478
479    virtual Page* createPage() { return 0; };
480
481    virtual String localizedStringsURL() { return String(); }
482
483    virtual String hiddenPanels() { return String(); }
484
485    virtual void showWindow() { }
486    virtual void closeWindow() { }
487
488    virtual void attachWindow() { }
489    virtual void detachWindow() { }
490
491    virtual void setAttachedWindowHeight(unsigned) { }
492
493    virtual void highlight(Node*) { }
494    virtual void hideHighlight() { }
495    virtual void inspectedURLChanged(const String&) { }
496
497    virtual void populateSetting(const String&, String*) { }
498    virtual void storeSetting(const String&, const String&) { }
499
500    virtual void inspectorWindowObjectCleared() { }
501};
502
503}
504
505#endif // EmptyClients_h
506
507