Home | History | Annotate | Download | only in loader
      1 /*
      2  * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
      3  * Copyright (C) 2012 Google 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  *
      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.
     14  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     15  *     its contributors may be used to endorse or promote products derived
     16  *     from this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     21  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     22  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28  */
     29 
     30 #ifndef FrameLoaderClient_h
     31 #define FrameLoaderClient_h
     32 
     33 #include "core/dom/IconURL.h"
     34 #include "core/loader/FrameLoaderTypes.h"
     35 #include "core/loader/NavigationPolicy.h"
     36 #include "platform/network/ResourceLoadPriority.h"
     37 #include "wtf/Forward.h"
     38 #include "wtf/Vector.h"
     39 
     40 typedef class _jobject* jobject;
     41 
     42 namespace v8 {
     43 class Context;
     44 template<class T> class Handle;
     45 }
     46 
     47 namespace blink {
     48 class WebCookieJar;
     49 class WebServiceWorkerProvider;
     50 class WebServiceWorkerProviderClient;
     51 }
     52 
     53 namespace WebCore {
     54 
     55     class Color;
     56     class DOMWindowExtension;
     57     class DOMWrapperWorld;
     58     class DocumentLoader;
     59     class Element;
     60 class FetchRequest;
     61     class FormState;
     62     class Frame;
     63     class FrameLoader;
     64     class FrameNetworkingContext;
     65     class HistoryItem;
     66     class HTMLAppletElement;
     67     class HTMLFormElement;
     68     class HTMLFrameOwnerElement;
     69     class HTMLPlugInElement;
     70     class IntSize;
     71     class KURL;
     72     class MessageEvent;
     73     class Page;
     74     class PluginView;
     75     class ResourceError;
     76     class ResourceHandle;
     77     class ResourceRequest;
     78     class ResourceResponse;
     79     class RTCPeerConnectionHandler;
     80     class SecurityOrigin;
     81     class SharedBuffer;
     82     class SocketStreamHandle;
     83     class SubstituteData;
     84     class Widget;
     85 
     86     enum NavigationHistoryPolicy {
     87         NavigationCreatedHistoryEntry,
     88         NavigationReusedHistoryEntry
     89     };
     90 
     91     class FrameLoaderClient {
     92     public:
     93         virtual ~FrameLoaderClient() { }
     94 
     95         virtual void frameLoaderDestroyed() = 0;
     96 
     97         virtual bool hasWebView() const = 0; // mainly for assertions
     98 
     99         virtual void detachedFromParent() = 0;
    100 
    101         virtual void dispatchWillRequestAfterPreconnect(ResourceRequest&) { }
    102         virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse) = 0;
    103         virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&) = 0;
    104         virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier) = 0;
    105         virtual void dispatchDidLoadResourceFromMemoryCache(const ResourceRequest&, const ResourceResponse&) = 0;
    106 
    107         virtual void dispatchDidHandleOnloadEvents() = 0;
    108         virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() = 0;
    109         virtual void dispatchDidNavigateWithinPage(NavigationHistoryPolicy, HistoryItem*) { }
    110         virtual void dispatchWillClose() = 0;
    111         virtual void dispatchDidStartProvisionalLoad() = 0;
    112         virtual void dispatchDidReceiveTitle(const String&) = 0;
    113         virtual void dispatchDidChangeIcons(IconType) = 0;
    114         virtual void dispatchDidCommitLoad(Frame*, HistoryItem*, NavigationHistoryPolicy) = 0;
    115         virtual void dispatchDidFailProvisionalLoad(const ResourceError&) = 0;
    116         virtual void dispatchDidFailLoad(const ResourceError&) = 0;
    117         virtual void dispatchDidFinishDocumentLoad() = 0;
    118         virtual void dispatchDidFinishLoad() = 0;
    119         virtual void dispatchDidFirstVisuallyNonEmptyLayout() = 0;
    120 
    121         virtual NavigationPolicy decidePolicyForNavigation(const ResourceRequest&, DocumentLoader*, NavigationPolicy) = 0;
    122 
    123         virtual void dispatchWillRequestResource(FetchRequest*) { }
    124 
    125         virtual void dispatchWillSendSubmitEvent(PassRefPtr<FormState>) = 0;
    126         virtual void dispatchWillSubmitForm(PassRefPtr<FormState>) = 0;
    127 
    128         // Maybe these should go into a ProgressTrackerClient some day
    129         virtual void postProgressStartedNotification() = 0;
    130         virtual void postProgressEstimateChangedNotification() = 0;
    131         virtual void postProgressFinishedNotification() = 0;
    132 
    133         virtual void loadURLExternally(const ResourceRequest&, NavigationPolicy, const String& suggestedName = String()) = 0;
    134 
    135         virtual bool navigateBackForward(int offset) const = 0;
    136 
    137         // Another page has accessed the initial empty document of this frame.
    138         // It is no longer safe to display a provisional URL, since a URL spoof
    139         // is now possible.
    140         virtual void didAccessInitialDocument() { }
    141 
    142         // This frame has set its opener to null, disowning it for the lifetime of the frame.
    143         // See http://html.spec.whatwg.org/#dom-opener.
    144         // FIXME: JSC should allow disowning opener. - <https://bugs.webkit.org/show_bug.cgi?id=103913>.
    145         virtual void didDisownOpener() { }
    146 
    147         // This frame has displayed inactive content (such as an image) from an
    148         // insecure source.  Inactive content cannot spread to other frames.
    149         virtual void didDisplayInsecureContent() = 0;
    150 
    151         // The indicated security origin has run active content (such as a
    152         // script) from an insecure source.  Note that the insecure content can
    153         // spread to other frames in the same origin.
    154         virtual void didRunInsecureContent(SecurityOrigin*, const KURL&) = 0;
    155         virtual void didDetectXSS(const KURL&, bool didBlockEntirePage) = 0;
    156         virtual void didDispatchPingLoader(const KURL&) = 0;
    157 
    158         // Transmits the change in the set of watched CSS selectors property
    159         // that match any element on the frame.
    160         virtual void selectorMatchChanged(const Vector<String>& addedSelectors, const Vector<String>& removedSelectors) = 0;
    161 
    162         virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest&, const SubstituteData&) = 0;
    163 
    164         virtual String userAgent(const KURL&) = 0;
    165 
    166         virtual String doNotTrackValue() = 0;
    167 
    168         virtual void transitionToCommittedForNewPage() = 0;
    169 
    170         virtual PassRefPtr<Frame> createFrame(const KURL&, const String& name, const String& referrer, HTMLFrameOwnerElement*) = 0;
    171         virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool loadManually) = 0;
    172 
    173         virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues) = 0;
    174 
    175         virtual ObjectContentType objectContentType(const KURL&, const String& mimeType, bool shouldPreferPlugInsForImages) = 0;
    176 
    177         virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*) = 0;
    178         virtual void documentElementAvailable() = 0;
    179 
    180         virtual void didExhaustMemoryAvailableForScript() { };
    181 
    182         virtual void didCreateScriptContext(v8::Handle<v8::Context>, int extensionGroup, int worldId) = 0;
    183         virtual void willReleaseScriptContext(v8::Handle<v8::Context>, int worldId) = 0;
    184         virtual bool allowScriptExtension(const String& extensionName, int extensionGroup, int worldId) = 0;
    185 
    186         virtual void didChangeScrollOffset() { }
    187 
    188         virtual bool allowScript(bool enabledPerSettings) { return enabledPerSettings; }
    189         virtual bool allowScriptFromSource(bool enabledPerSettings, const KURL&) { return enabledPerSettings; }
    190         virtual bool allowPlugins(bool enabledPerSettings) { return enabledPerSettings; }
    191         virtual bool allowImage(bool enabledPerSettings, const KURL&) { return enabledPerSettings; }
    192         virtual bool allowDisplayingInsecureContent(bool enabledPerSettings, SecurityOrigin*, const KURL&) { return enabledPerSettings; }
    193         virtual bool allowRunningInsecureContent(bool enabledPerSettings, SecurityOrigin*, const KURL&) { return enabledPerSettings; }
    194 
    195         // This callback notifies the client that the frame was about to run
    196         // JavaScript but did not because allowScript returned false. We
    197         // have a separate callback here because there are a number of places
    198         // that need to know if JavaScript is enabled but are not necessarily
    199         // preparing to execute script.
    200         virtual void didNotAllowScript() { }
    201         // This callback is similar, but for plugins.
    202         virtual void didNotAllowPlugins() { }
    203 
    204         virtual blink::WebCookieJar* cookieJar() const = 0;
    205 
    206         // Returns true if the embedder intercepted the postMessage call
    207         virtual bool willCheckAndDispatchMessageEvent(SecurityOrigin* /*target*/, MessageEvent*) const { return false; }
    208 
    209         virtual void didChangeName(const String&) { }
    210 
    211         virtual void dispatchWillOpenSocketStream(SocketStreamHandle*) { }
    212 
    213         virtual void dispatchWillStartUsingPeerConnectionHandler(RTCPeerConnectionHandler*) { }
    214 
    215         virtual void didRequestAutocomplete(PassRefPtr<FormState>) = 0;
    216 
    217         virtual bool allowWebGL(bool enabledPerSettings) { return enabledPerSettings; }
    218         // Informs the embedder that a WebGL canvas inside this frame received a lost context
    219         // notification with the given GL_ARB_robustness guilt/innocence code (see Extensions3D.h).
    220         virtual void didLoseWebGLContext(int) { }
    221 
    222         // Returns true if WebGL extension WEBGL_debug_renderer_info is allowed.
    223         virtual bool allowWebGLDebugRendererInfo() { return false; }
    224 
    225         // If an HTML document is being loaded, informs the embedder that the document will have its <body> attached soon.
    226         virtual void dispatchWillInsertBody() { }
    227 
    228         virtual void dispatchDidChangeResourcePriority(unsigned long /*identifier*/, ResourceLoadPriority) { }
    229 
    230         virtual PassOwnPtr<blink::WebServiceWorkerProvider> createServiceWorkerProvider(PassOwnPtr<blink::WebServiceWorkerProviderClient>) = 0;
    231 
    232         virtual void didStopAllLoaders() { }
    233 
    234         virtual bool isFrameLoaderClientImpl() const { return false; }
    235     };
    236 
    237 } // namespace WebCore
    238 
    239 #endif // FrameLoaderClient_h
    240