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