Home | History | Annotate | Download | only in loader
      1 /*
      2  * Copyright (C) 2006 Eric Seidel (eric (at) 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 "core/editing/UndoStep.h"
     33 #include "core/inspector/InspectorClient.h"
     34 #include "core/loader/FrameLoaderClient.h"
     35 #include "core/page/BackForwardClient.h"
     36 #include "core/page/ChromeClient.h"
     37 #include "core/page/ContextMenuClient.h"
     38 #include "core/page/DragClient.h"
     39 #include "core/page/EditorClient.h"
     40 #include "core/page/FocusType.h"
     41 #include "core/page/Page.h"
     42 #include "core/page/SpellCheckerClient.h"
     43 #include "core/page/StorageClient.h"
     44 #include "platform/DragImage.h"
     45 #include "platform/geometry/FloatRect.h"
     46 #include "platform/network/ResourceError.h"
     47 #include "platform/text/TextCheckerClient.h"
     48 #include "public/platform/WebScreenInfo.h"
     49 #include "wtf/Forward.h"
     50 #include <v8.h>
     51 
     52 /*
     53  This file holds empty Client stubs for use by WebCore.
     54  Viewless element needs to create a dummy Page->LocalFrame->FrameView tree for use in parsing or executing JavaScript.
     55  This tree depends heavily on Clients (usually provided by WebKit classes).
     56 
     57  This file was first created for SVGImage as it had no way to access the current Page (nor should it,
     58  since Images are not tied to a page).
     59  See http://bugs.webkit.org/show_bug.cgi?id=5971 for the original discussion about this file.
     60 
     61  Ideally, whenever you change a Client class, you should add a stub here.
     62  Brittle, yes.  Unfortunate, yes.  Hopefully temporary.
     63 */
     64 
     65 namespace WebCore {
     66 
     67 class EmptyChromeClient : public ChromeClient {
     68     WTF_MAKE_FAST_ALLOCATED;
     69 public:
     70     virtual ~EmptyChromeClient() { }
     71     virtual void chromeDestroyed() OVERRIDE { }
     72 
     73     virtual void* webView() const OVERRIDE { return 0; }
     74     virtual void setWindowRect(const FloatRect&) OVERRIDE { }
     75     virtual FloatRect windowRect() OVERRIDE { return FloatRect(); }
     76 
     77     virtual FloatRect pageRect() OVERRIDE { return FloatRect(); }
     78 
     79     virtual void focus() OVERRIDE { }
     80 
     81     virtual bool canTakeFocus(FocusType) OVERRIDE { return false; }
     82     virtual void takeFocus(FocusType) OVERRIDE { }
     83 
     84     virtual void focusedNodeChanged(Node*) OVERRIDE { }
     85     virtual void focusedFrameChanged(LocalFrame*) OVERRIDE { }
     86     virtual Page* createWindow(LocalFrame*, const FrameLoadRequest&, const WindowFeatures&, NavigationPolicy, ShouldSendReferrer) OVERRIDE { return 0; }
     87     virtual void show(NavigationPolicy) OVERRIDE { }
     88 
     89     virtual bool canRunModal() OVERRIDE { return false; }
     90     virtual void runModal() OVERRIDE { }
     91 
     92     virtual void setToolbarsVisible(bool) OVERRIDE { }
     93     virtual bool toolbarsVisible() OVERRIDE { return false; }
     94 
     95     virtual void setStatusbarVisible(bool) OVERRIDE { }
     96     virtual bool statusbarVisible() OVERRIDE { return false; }
     97 
     98     virtual void setScrollbarsVisible(bool) OVERRIDE { }
     99     virtual bool scrollbarsVisible() OVERRIDE { return false; }
    100 
    101     virtual void setMenubarVisible(bool) OVERRIDE { }
    102     virtual bool menubarVisible() OVERRIDE { return false; }
    103 
    104     virtual void setResizable(bool) OVERRIDE { }
    105 
    106     virtual bool shouldReportDetailedMessageForSource(const String&) OVERRIDE { return false; }
    107     virtual void addMessageToConsole(LocalFrame*, MessageSource, MessageLevel, const String&, unsigned, const String&, const String&) OVERRIDE { }
    108 
    109     virtual bool canRunBeforeUnloadConfirmPanel() OVERRIDE { return false; }
    110     virtual bool runBeforeUnloadConfirmPanel(const String&, LocalFrame*) OVERRIDE { return true; }
    111 
    112     virtual void closeWindowSoon() OVERRIDE { }
    113 
    114     virtual void runJavaScriptAlert(LocalFrame*, const String&) OVERRIDE { }
    115     virtual bool runJavaScriptConfirm(LocalFrame*, const String&) OVERRIDE { return false; }
    116     virtual bool runJavaScriptPrompt(LocalFrame*, const String&, const String&, String&) OVERRIDE { return false; }
    117 
    118     virtual bool hasOpenedPopup() const OVERRIDE { return false; }
    119     virtual PassRefPtr<PopupMenu> createPopupMenu(LocalFrame&, PopupMenuClient*) const OVERRIDE;
    120     virtual void setPagePopupDriver(PagePopupDriver*) OVERRIDE { }
    121     virtual void resetPagePopupDriver() OVERRIDE { }
    122 
    123     virtual void setStatusbarText(const String&) OVERRIDE { }
    124 
    125     virtual bool tabsToLinks() OVERRIDE { return false; }
    126 
    127     virtual IntRect windowResizerRect() const OVERRIDE { return IntRect(); }
    128 
    129     virtual void invalidateContentsAndRootView(const IntRect&) OVERRIDE { }
    130     virtual void invalidateContentsForSlowScroll(const IntRect&) OVERRIDE { }
    131     virtual void scroll(const IntSize&, const IntRect&, const IntRect&) OVERRIDE { }
    132     virtual void scheduleAnimation() OVERRIDE { }
    133 
    134     virtual IntRect rootViewToScreen(const IntRect& r) const OVERRIDE { return r; }
    135     virtual blink::WebScreenInfo screenInfo() const OVERRIDE { return blink::WebScreenInfo(); }
    136     virtual void contentsSizeChanged(LocalFrame*, const IntSize&) const OVERRIDE { }
    137 
    138     virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned) OVERRIDE { }
    139 
    140     virtual void setToolTip(const String&, TextDirection) OVERRIDE { }
    141 
    142     virtual void print(LocalFrame*) OVERRIDE { }
    143 
    144     virtual void enumerateChosenDirectory(FileChooser*) OVERRIDE { }
    145 
    146     virtual PassOwnPtr<ColorChooser> createColorChooser(LocalFrame*, ColorChooserClient*, const Color&) OVERRIDE;
    147     virtual PassRefPtrWillBeRawPtr<DateTimeChooser> openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&) OVERRIDE;
    148     virtual void openTextDataListChooser(HTMLInputElement&) OVERRIDE;
    149 
    150     virtual void runOpenPanel(LocalFrame*, PassRefPtr<FileChooser>) OVERRIDE;
    151 
    152     virtual void setCursor(const Cursor&) OVERRIDE { }
    153 
    154     virtual void attachRootGraphicsLayer(GraphicsLayer*) OVERRIDE { }
    155 
    156     virtual void needTouchEvents(bool) OVERRIDE { }
    157     virtual void setTouchAction(TouchAction touchAction) OVERRIDE { };
    158 
    159     virtual void didAssociateFormControls(const WillBeHeapVector<RefPtrWillBeMember<Element> >&) OVERRIDE { }
    160 
    161     virtual void annotatedRegionsChanged() OVERRIDE { }
    162     virtual bool paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&) OVERRIDE { return false; }
    163     virtual String acceptLanguages() OVERRIDE;
    164 };
    165 
    166 class EmptyFrameLoaderClient FINAL : public FrameLoaderClient {
    167     WTF_MAKE_NONCOPYABLE(EmptyFrameLoaderClient); WTF_MAKE_FAST_ALLOCATED;
    168 public:
    169     EmptyFrameLoaderClient() { }
    170     virtual ~EmptyFrameLoaderClient() {  }
    171 
    172     virtual bool hasWebView() const OVERRIDE { return true; } // mainly for assertions
    173 
    174     virtual Frame* opener() const OVERRIDE { return 0; }
    175     virtual void setOpener(Frame*) OVERRIDE { }
    176 
    177     virtual Frame* parent() const OVERRIDE { return 0; }
    178     virtual Frame* top() const OVERRIDE { return 0; }
    179     virtual Frame* previousSibling() const OVERRIDE { return 0; }
    180     virtual Frame* nextSibling() const OVERRIDE { return 0; }
    181     virtual Frame* firstChild() const OVERRIDE { return 0; }
    182     virtual Frame* lastChild() const OVERRIDE { return 0; }
    183     virtual void detachedFromParent() OVERRIDE { }
    184 
    185     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&, const ResourceResponse&) OVERRIDE { }
    186     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse&) OVERRIDE { }
    187     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long) OVERRIDE { }
    188     virtual void dispatchDidLoadResourceFromMemoryCache(const ResourceRequest&, const ResourceResponse&) OVERRIDE { }
    189 
    190     virtual void dispatchDidHandleOnloadEvents() OVERRIDE { }
    191     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() OVERRIDE { }
    192     virtual void dispatchWillClose() OVERRIDE { }
    193     virtual void dispatchDidStartProvisionalLoad() OVERRIDE { }
    194     virtual void dispatchDidReceiveTitle(const String&) OVERRIDE { }
    195     virtual void dispatchDidChangeIcons(IconType) OVERRIDE { }
    196     virtual void dispatchDidCommitLoad(LocalFrame*, HistoryItem*, HistoryCommitType) OVERRIDE { }
    197     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) OVERRIDE { }
    198     virtual void dispatchDidFailLoad(const ResourceError&) OVERRIDE { }
    199     virtual void dispatchDidFinishDocumentLoad() OVERRIDE { }
    200     virtual void dispatchDidFinishLoad() OVERRIDE { }
    201     virtual void dispatchDidFirstVisuallyNonEmptyLayout() OVERRIDE { }
    202     virtual void dispatchDidChangeThemeColor() OVERRIDE { };
    203 
    204     virtual NavigationPolicy decidePolicyForNavigation(const ResourceRequest&, DocumentLoader*, NavigationPolicy) OVERRIDE;
    205 
    206     virtual void dispatchWillSendSubmitEvent(HTMLFormElement*) OVERRIDE;
    207     virtual void dispatchWillSubmitForm(HTMLFormElement*) OVERRIDE;
    208 
    209     virtual void didStartLoading(LoadStartType) OVERRIDE { }
    210     virtual void progressEstimateChanged(double) OVERRIDE { }
    211     virtual void didStopLoading() OVERRIDE { }
    212 
    213     virtual void loadURLExternally(const ResourceRequest&, NavigationPolicy, const String& = String()) OVERRIDE { }
    214 
    215     virtual PassRefPtr<DocumentLoader> createDocumentLoader(LocalFrame*, const ResourceRequest&, const SubstituteData&) OVERRIDE;
    216 
    217     virtual String userAgent(const KURL&) OVERRIDE { return ""; }
    218 
    219     virtual String doNotTrackValue() OVERRIDE { return String(); }
    220 
    221     virtual void transitionToCommittedForNewPage() OVERRIDE { }
    222 
    223     virtual bool navigateBackForward(int offset) const OVERRIDE { return false; }
    224     virtual void didDisplayInsecureContent() OVERRIDE { }
    225     virtual void didRunInsecureContent(SecurityOrigin*, const KURL&) OVERRIDE { }
    226     virtual void didDetectXSS(const KURL&, bool) OVERRIDE { }
    227     virtual void didDispatchPingLoader(const KURL&) OVERRIDE { }
    228     virtual void selectorMatchChanged(const Vector<String>&, const Vector<String>&) OVERRIDE { }
    229     virtual PassRefPtr<LocalFrame> createFrame(const KURL&, const AtomicString&, const Referrer&, HTMLFrameOwnerElement*) OVERRIDE;
    230     virtual PassRefPtr<Widget> createPlugin(HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool, DetachedPluginPolicy) OVERRIDE;
    231     virtual bool canCreatePluginWithoutRenderer(const String& mimeType) const OVERRIDE { return false; }
    232     virtual PassRefPtr<Widget> createJavaAppletWidget(HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&) OVERRIDE;
    233 
    234     virtual ObjectContentType objectContentType(const KURL&, const String&, bool) OVERRIDE { return ObjectContentType(); }
    235 
    236     virtual void dispatchDidClearWindowObjectInMainWorld() OVERRIDE { }
    237     virtual void documentElementAvailable() OVERRIDE { }
    238 
    239     virtual void didCreateScriptContext(v8::Handle<v8::Context>, int extensionGroup, int worldId) OVERRIDE { }
    240     virtual void willReleaseScriptContext(v8::Handle<v8::Context>, int worldId) OVERRIDE { }
    241     virtual bool allowScriptExtension(const String& extensionName, int extensionGroup, int worldId) OVERRIDE { return false; }
    242 
    243     virtual blink::WebCookieJar* cookieJar() const OVERRIDE { return 0; }
    244 
    245     virtual void didRequestAutocomplete(HTMLFormElement*) OVERRIDE;
    246 
    247     virtual PassOwnPtr<blink::WebServiceWorkerProvider> createServiceWorkerProvider() OVERRIDE;
    248     virtual PassOwnPtr<blink::WebApplicationCacheHost> createApplicationCacheHost(blink::WebApplicationCacheHostClient*) OVERRIDE;
    249 };
    250 
    251 class EmptyTextCheckerClient FINAL : public TextCheckerClient {
    252 public:
    253     virtual bool shouldEraseMarkersAfterChangeSelection(TextCheckingType) const OVERRIDE { return true; }
    254     virtual void checkSpellingOfString(const String&, int*, int*) OVERRIDE { }
    255     virtual String getAutoCorrectSuggestionForMisspelledWord(const String&) OVERRIDE { return String(); }
    256     virtual void checkGrammarOfString(const String&, Vector<GrammarDetail>&, int*, int*) OVERRIDE { }
    257     virtual void requestCheckingOfString(PassRefPtr<TextCheckingRequest>) OVERRIDE;
    258 };
    259 
    260 class EmptySpellCheckerClient FINAL : public SpellCheckerClient {
    261     WTF_MAKE_NONCOPYABLE(EmptySpellCheckerClient); WTF_MAKE_FAST_ALLOCATED;
    262 public:
    263     EmptySpellCheckerClient() { }
    264     virtual ~EmptySpellCheckerClient() { }
    265 
    266     virtual bool isContinuousSpellCheckingEnabled() OVERRIDE { return false; }
    267     virtual void toggleContinuousSpellChecking() OVERRIDE { }
    268     virtual bool isGrammarCheckingEnabled() OVERRIDE { return false; }
    269 
    270     virtual TextCheckerClient& textChecker() OVERRIDE { return m_textCheckerClient; }
    271 
    272     virtual void updateSpellingUIWithMisspelledWord(const String&) OVERRIDE { }
    273     virtual void showSpellingUI(bool) OVERRIDE { }
    274     virtual bool spellingUIIsShowing() OVERRIDE { return false; }
    275 
    276 private:
    277     EmptyTextCheckerClient m_textCheckerClient;
    278 };
    279 
    280 class EmptyEditorClient FINAL : public EditorClient {
    281     WTF_MAKE_NONCOPYABLE(EmptyEditorClient); WTF_MAKE_FAST_ALLOCATED;
    282 public:
    283     EmptyEditorClient() { }
    284     virtual ~EmptyEditorClient() { }
    285 
    286     virtual void respondToChangedContents() OVERRIDE { }
    287     virtual void respondToChangedSelection(LocalFrame*, SelectionType) OVERRIDE { }
    288 
    289     virtual bool canCopyCut(LocalFrame*, bool defaultValue) const OVERRIDE { return defaultValue; }
    290     virtual bool canPaste(LocalFrame*, bool defaultValue) const OVERRIDE { return defaultValue; }
    291 
    292     virtual bool handleKeyboardEvent() OVERRIDE { return false; }
    293 };
    294 
    295 class EmptyContextMenuClient FINAL : public ContextMenuClient {
    296     WTF_MAKE_NONCOPYABLE(EmptyContextMenuClient); WTF_MAKE_FAST_ALLOCATED;
    297 public:
    298     EmptyContextMenuClient() { }
    299     virtual ~EmptyContextMenuClient() {  }
    300     virtual void showContextMenu(const ContextMenu*) OVERRIDE { }
    301     virtual void clearContextMenu() OVERRIDE { }
    302 };
    303 
    304 class EmptyDragClient FINAL : public DragClient {
    305     WTF_MAKE_NONCOPYABLE(EmptyDragClient); WTF_MAKE_FAST_ALLOCATED;
    306 public:
    307     EmptyDragClient() { }
    308     virtual ~EmptyDragClient() {}
    309     virtual DragDestinationAction actionMaskForDrag(DragData*) OVERRIDE { return DragDestinationActionNone; }
    310     virtual void startDrag(DragImage*, const IntPoint&, const IntPoint&, Clipboard*, LocalFrame*, bool) OVERRIDE { }
    311 };
    312 
    313 class EmptyInspectorClient FINAL : public InspectorClient {
    314     WTF_MAKE_NONCOPYABLE(EmptyInspectorClient); WTF_MAKE_FAST_ALLOCATED;
    315 public:
    316     EmptyInspectorClient() { }
    317     virtual ~EmptyInspectorClient() { }
    318 
    319     virtual void highlight() OVERRIDE { }
    320     virtual void hideHighlight() OVERRIDE { }
    321 };
    322 
    323 class EmptyBackForwardClient FINAL : public BackForwardClient {
    324 public:
    325     virtual int backListCount() OVERRIDE { return 0; }
    326     virtual int forwardListCount() OVERRIDE { return 0; }
    327     virtual int backForwardListCount() OVERRIDE { return 0; }
    328 };
    329 
    330 class EmptyStorageClient FINAL : public StorageClient {
    331 public:
    332     virtual PassOwnPtr<StorageNamespace> createSessionStorageNamespace() OVERRIDE;
    333     virtual bool canAccessStorage(LocalFrame*, StorageType) const OVERRIDE { return false; }
    334 };
    335 
    336 void fillWithEmptyClients(Page::PageClients&);
    337 
    338 }
    339 
    340 #endif // EmptyClients_h
    341