Home | History | Annotate | Download | only in web
      1 /*
      2  * Copyright (C) 2009, 2012 Google Inc. All rights reserved.
      3  * Copyright (C) 2011 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 are
      7  * met:
      8  *
      9  *     * Redistributions of source code must retain the above copyright
     10  * notice, this list of conditions and the following disclaimer.
     11  *     * Redistributions in binary form must reproduce the above
     12  * copyright notice, this list of conditions and the following disclaimer
     13  * in the documentation and/or other materials provided with the
     14  * distribution.
     15  *     * Neither the name of Google Inc. nor the names of its
     16  * contributors may be used to endorse or promote products derived from
     17  * this software without specific prior written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 #ifndef FrameLoaderClientImpl_h
     33 #define FrameLoaderClientImpl_h
     34 
     35 #include "core/loader/FrameLoaderClient.h"
     36 #include "platform/heap/Handle.h"
     37 #include "platform/weborigin/KURL.h"
     38 #include "wtf/PassOwnPtr.h"
     39 #include "wtf/RefPtr.h"
     40 
     41 namespace blink {
     42 
     43 class WebLocalFrameImpl;
     44 class WebPluginContainerImpl;
     45 class WebPluginLoadObserver;
     46 
     47 class FrameLoaderClientImpl FINAL : public FrameLoaderClient {
     48 public:
     49     explicit FrameLoaderClientImpl(WebLocalFrameImpl* webFrame);
     50     virtual ~FrameLoaderClientImpl();
     51 
     52     WebLocalFrameImpl* webFrame() const { return m_webFrame; }
     53 
     54     // FrameLoaderClient ----------------------------------------------
     55 
     56     // Notifies the WebView delegate that the JS window object has been cleared,
     57     // giving it a chance to bind native objects to the window before script
     58     // parsing begins.
     59     virtual void dispatchDidClearWindowObjectInMainWorld() OVERRIDE;
     60     virtual void documentElementAvailable() OVERRIDE;
     61 
     62     virtual void didCreateScriptContext(v8::Handle<v8::Context>, int extensionGroup, int worldId) OVERRIDE;
     63     virtual void willReleaseScriptContext(v8::Handle<v8::Context>, int worldId) OVERRIDE;
     64 
     65     // Returns true if we should allow the given V8 extension to be added to
     66     // the script context at the currently loading page and given extension group.
     67     virtual bool allowScriptExtension(const String& extensionName, int extensionGroup, int worldId) OVERRIDE;
     68 
     69     virtual bool hasWebView() const OVERRIDE;
     70     virtual Frame* opener() const OVERRIDE;
     71     virtual void setOpener(Frame*) OVERRIDE;
     72     virtual Frame* parent() const OVERRIDE;
     73     virtual Frame* top() const OVERRIDE;
     74     virtual Frame* previousSibling() const OVERRIDE;
     75     virtual Frame* nextSibling() const OVERRIDE;
     76     virtual Frame* firstChild() const OVERRIDE;
     77     virtual Frame* lastChild() const OVERRIDE;
     78     virtual void detachedFromParent() OVERRIDE;
     79     virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse) OVERRIDE;
     80     virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&) OVERRIDE;
     81     virtual void dispatchDidChangeResourcePriority(unsigned long identifier, ResourceLoadPriority, int intraPriorityValue) OVERRIDE;
     82     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier) OVERRIDE;
     83     virtual void dispatchDidLoadResourceFromMemoryCache(const ResourceRequest&, const ResourceResponse&) OVERRIDE;
     84     virtual void dispatchDidHandleOnloadEvents() OVERRIDE;
     85     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() OVERRIDE;
     86     virtual void dispatchDidNavigateWithinPage(HistoryItem*, HistoryCommitType) OVERRIDE;
     87     virtual void dispatchWillClose() OVERRIDE;
     88     virtual void dispatchDidStartProvisionalLoad(bool isTransitionNavigation) OVERRIDE;
     89     virtual void dispatchDidReceiveTitle(const String&) OVERRIDE;
     90     virtual void dispatchDidChangeIcons(IconType) OVERRIDE;
     91     virtual void dispatchDidCommitLoad(LocalFrame*, HistoryItem*, HistoryCommitType) OVERRIDE;
     92     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) OVERRIDE;
     93     virtual void dispatchDidFailLoad(const ResourceError&) OVERRIDE;
     94     virtual void dispatchDidFinishDocumentLoad() OVERRIDE;
     95     virtual void dispatchDidFinishLoad() OVERRIDE;
     96     virtual void dispatchDidFirstVisuallyNonEmptyLayout() OVERRIDE;
     97 
     98     virtual void dispatchDidChangeThemeColor() OVERRIDE;
     99     virtual NavigationPolicy decidePolicyForNavigation(const ResourceRequest&, DocumentLoader*, NavigationPolicy, bool isTransitionNavigation) OVERRIDE;
    100     virtual void dispatchAddNavigationTransitionData(const String& allowedDestinationOrigin, const String& selector, const String& markup) OVERRIDE;
    101     virtual void dispatchWillRequestResource(FetchRequest*) OVERRIDE;
    102     virtual void dispatchWillSendSubmitEvent(HTMLFormElement*) OVERRIDE;
    103     virtual void dispatchWillSubmitForm(HTMLFormElement*) OVERRIDE;
    104     virtual void didStartLoading(LoadStartType) OVERRIDE;
    105     virtual void didStopLoading() OVERRIDE;
    106     virtual void progressEstimateChanged(double progressEstimate) OVERRIDE;
    107     virtual void loadURLExternally(const ResourceRequest&, NavigationPolicy, const String& suggestedName = String()) OVERRIDE;
    108     virtual bool navigateBackForward(int offset) const OVERRIDE;
    109     virtual void didAccessInitialDocument() OVERRIDE;
    110     virtual void didDisplayInsecureContent() OVERRIDE;
    111     virtual void didRunInsecureContent(SecurityOrigin*, const KURL& insecureURL) OVERRIDE;
    112     virtual void didDetectXSS(const KURL&, bool didBlockEntirePage) OVERRIDE;
    113     virtual void didDispatchPingLoader(const KURL&) OVERRIDE;
    114     virtual void selectorMatchChanged(const Vector<String>& addedSelectors, const Vector<String>& removedSelectors) OVERRIDE;
    115     virtual PassRefPtr<DocumentLoader> createDocumentLoader(LocalFrame*, const ResourceRequest&, const SubstituteData&) OVERRIDE;
    116     virtual WTF::String userAgent(const KURL&) OVERRIDE;
    117     virtual WTF::String doNotTrackValue() OVERRIDE;
    118     virtual void transitionToCommittedForNewPage() OVERRIDE;
    119     virtual PassRefPtrWillBeRawPtr<LocalFrame> createFrame(const KURL&, const WTF::AtomicString& name, const Referrer&, HTMLFrameOwnerElement*) OVERRIDE;
    120     virtual bool canCreatePluginWithoutRenderer(const String& mimeType) const;
    121     virtual PassRefPtr<Widget> createPlugin(
    122         HTMLPlugInElement*, const KURL&,
    123         const Vector<WTF::String>&, const Vector<WTF::String>&,
    124         const WTF::String&, bool loadManually, DetachedPluginPolicy) OVERRIDE;
    125     virtual PassRefPtr<Widget> createJavaAppletWidget(
    126         HTMLAppletElement*,
    127         const KURL& /* base_url */,
    128         const Vector<WTF::String>& paramNames,
    129         const Vector<WTF::String>& paramValues) OVERRIDE;
    130     virtual ObjectContentType objectContentType(
    131         const KURL&, const WTF::String& mimeType, bool shouldPreferPlugInsForImages) OVERRIDE;
    132     virtual void didChangeScrollOffset() OVERRIDE;
    133     virtual void didUpdateCurrentHistoryItem() OVERRIDE;
    134     virtual void didRemoveAllPendingStylesheet() OVERRIDE;
    135     virtual bool allowScript(bool enabledPerSettings) OVERRIDE;
    136     virtual bool allowScriptFromSource(bool enabledPerSettings, const KURL& scriptURL) OVERRIDE;
    137     virtual bool allowPlugins(bool enabledPerSettings) OVERRIDE;
    138     virtual bool allowImage(bool enabledPerSettings, const KURL& imageURL) OVERRIDE;
    139     virtual bool allowMedia(const KURL& mediaURL) OVERRIDE;
    140     virtual bool allowDisplayingInsecureContent(bool enabledPerSettings, SecurityOrigin*, const KURL&) OVERRIDE;
    141     virtual bool allowRunningInsecureContent(bool enabledPerSettings, SecurityOrigin*, const KURL&) OVERRIDE;
    142     virtual void didNotAllowScript() OVERRIDE;
    143     virtual void didNotAllowPlugins() OVERRIDE;
    144 
    145     virtual WebCookieJar* cookieJar() const OVERRIDE;
    146     virtual bool willCheckAndDispatchMessageEvent(SecurityOrigin* target, MessageEvent*, LocalFrame* sourceFrame) const OVERRIDE;
    147     virtual void didChangeName(const String&) OVERRIDE;
    148 
    149     virtual void dispatchWillOpenSocketStream(SocketStreamHandle*) OVERRIDE;
    150     virtual void dispatchWillOpenWebSocket(WebSocketHandle*) OVERRIDE;
    151 
    152     virtual void dispatchWillStartUsingPeerConnectionHandler(WebRTCPeerConnectionHandler*) OVERRIDE;
    153 
    154     virtual void didRequestAutocomplete(HTMLFormElement*) OVERRIDE;
    155 
    156     virtual bool allowWebGL(bool enabledPerSettings) OVERRIDE;
    157     virtual void didLoseWebGLContext(int arbRobustnessContextLostReason) OVERRIDE;
    158 
    159     virtual void dispatchWillInsertBody() OVERRIDE;
    160 
    161     virtual PassOwnPtr<WebServiceWorkerProvider> createServiceWorkerProvider() OVERRIDE;
    162     virtual bool isControlledByServiceWorker() OVERRIDE;
    163     virtual SharedWorkerRepositoryClient* sharedWorkerRepositoryClient() OVERRIDE;
    164 
    165     virtual PassOwnPtr<WebApplicationCacheHost> createApplicationCacheHost(WebApplicationCacheHostClient*) OVERRIDE;
    166 
    167     virtual void didStopAllLoaders() OVERRIDE;
    168 
    169     virtual void dispatchDidChangeManifest() OVERRIDE;
    170 
    171 private:
    172     virtual bool isFrameLoaderClientImpl() const OVERRIDE { return true; }
    173 
    174     PassOwnPtr<WebPluginLoadObserver> pluginLoadObserver(DocumentLoader*);
    175 
    176     // The WebFrame that owns this object and manages its lifetime. Therefore,
    177     // the web frame object is guaranteed to exist.
    178     WebLocalFrameImpl* m_webFrame;
    179 };
    180 
    181 DEFINE_TYPE_CASTS(FrameLoaderClientImpl, FrameLoaderClient, client, client->isFrameLoaderClientImpl(), client.isFrameLoaderClientImpl());
    182 
    183 } // namespace blink
    184 
    185 #endif
    186