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/frame/FrameClient.h" 35 #include "core/loader/FrameLoaderTypes.h" 36 #include "core/loader/NavigationPolicy.h" 37 #include "platform/heap/Handle.h" 38 #include "platform/network/ResourceLoadPriority.h" 39 #include "platform/weborigin/Referrer.h" 40 #include "wtf/Forward.h" 41 #include "wtf/Vector.h" 42 #include <v8.h> 43 44 namespace blink { 45 class WebCookieJar; 46 class WebRTCPeerConnectionHandler; 47 class WebServiceWorkerProvider; 48 class WebSocketHandle; 49 class WebApplicationCacheHost; 50 class WebApplicationCacheHostClient; 51 } 52 53 namespace blink { 54 55 class DocumentLoader; 56 class FetchRequest; 57 class HTMLAppletElement; 58 class HTMLFormElement; 59 class HTMLFrameOwnerElement; 60 class HTMLPlugInElement; 61 class HistoryItem; 62 class KURL; 63 class LocalFrame; 64 class MessageEvent; 65 class ResourceError; 66 class ResourceRequest; 67 class ResourceResponse; 68 class SecurityOrigin; 69 class SharedWorkerRepositoryClient; 70 class SocketStreamHandle; 71 class SubstituteData; 72 class Widget; 73 74 class FrameLoaderClient : public FrameClient { 75 public: 76 virtual ~FrameLoaderClient() { } 77 78 virtual bool hasWebView() const = 0; // mainly for assertions 79 80 virtual void detachedFromParent() = 0; 81 82 virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse) = 0; 83 virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&) = 0; 84 virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier) = 0; 85 virtual void dispatchDidLoadResourceFromMemoryCache(const ResourceRequest&, const ResourceResponse&) = 0; 86 87 virtual void dispatchDidHandleOnloadEvents() = 0; 88 virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() = 0; 89 virtual void dispatchDidNavigateWithinPage(HistoryItem*, HistoryCommitType) { } 90 virtual void dispatchWillClose() = 0; 91 virtual void dispatchDidStartProvisionalLoad(bool isTransitionNavigation) = 0; 92 virtual void dispatchDidReceiveTitle(const String&) = 0; 93 virtual void dispatchDidChangeIcons(IconType) = 0; 94 virtual void dispatchDidCommitLoad(LocalFrame*, HistoryItem*, HistoryCommitType) = 0; 95 virtual void dispatchDidFailProvisionalLoad(const ResourceError&) = 0; 96 virtual void dispatchDidFailLoad(const ResourceError&) = 0; 97 virtual void dispatchDidFinishDocumentLoad() = 0; 98 virtual void dispatchDidFinishLoad() = 0; 99 virtual void dispatchDidFirstVisuallyNonEmptyLayout() = 0; 100 virtual void dispatchDidChangeThemeColor() = 0; 101 102 virtual NavigationPolicy decidePolicyForNavigation(const ResourceRequest&, DocumentLoader*, NavigationPolicy, bool isTransitionNavigation) = 0; 103 104 virtual void dispatchAddNavigationTransitionData(const String& origin, const String& selector, const String& markup) { } 105 virtual void dispatchWillRequestResource(FetchRequest*) { } 106 107 virtual void dispatchWillSendSubmitEvent(HTMLFormElement*) = 0; 108 virtual void dispatchWillSubmitForm(HTMLFormElement*) = 0; 109 110 virtual void didStartLoading(LoadStartType) = 0; 111 virtual void progressEstimateChanged(double progressEstimate) = 0; 112 virtual void didStopLoading() = 0; 113 114 virtual void loadURLExternally(const ResourceRequest&, NavigationPolicy, const String& suggestedName = String()) = 0; 115 116 virtual bool navigateBackForward(int offset) const = 0; 117 118 // Another page has accessed the initial empty document of this frame. 119 // It is no longer safe to display a provisional URL, since a URL spoof 120 // is now possible. 121 virtual void didAccessInitialDocument() { } 122 123 // This frame has displayed inactive content (such as an image) from an 124 // insecure source. Inactive content cannot spread to other frames. 125 virtual void didDisplayInsecureContent() = 0; 126 127 // The indicated security origin has run active content (such as a 128 // script) from an insecure source. Note that the insecure content can 129 // spread to other frames in the same origin. 130 virtual void didRunInsecureContent(SecurityOrigin*, const KURL&) = 0; 131 virtual void didDetectXSS(const KURL&, bool didBlockEntirePage) = 0; 132 virtual void didDispatchPingLoader(const KURL&) = 0; 133 134 // Transmits the change in the set of watched CSS selectors property 135 // that match any element on the frame. 136 virtual void selectorMatchChanged(const Vector<String>& addedSelectors, const Vector<String>& removedSelectors) = 0; 137 138 virtual PassRefPtr<DocumentLoader> createDocumentLoader(LocalFrame*, const ResourceRequest&, const SubstituteData&) = 0; 139 140 virtual String userAgent(const KURL&) = 0; 141 142 virtual String doNotTrackValue() = 0; 143 144 virtual void transitionToCommittedForNewPage() = 0; 145 146 virtual PassRefPtrWillBeRawPtr<LocalFrame> createFrame(const KURL&, const AtomicString& name, const Referrer&, HTMLFrameOwnerElement*) = 0; 147 // Whether or not plugin creation should fail if the HTMLPlugInElement isn't in the DOM after plugin initialization. 148 enum DetachedPluginPolicy { 149 FailOnDetachedPlugin, 150 AllowDetachedPlugin, 151 }; 152 virtual bool canCreatePluginWithoutRenderer(const String& mimeType) const = 0; 153 virtual PassRefPtr<Widget> createPlugin(HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool loadManually, DetachedPluginPolicy) = 0; 154 155 virtual PassRefPtr<Widget> createJavaAppletWidget(HTMLAppletElement*, const KURL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues) = 0; 156 157 virtual ObjectContentType objectContentType(const KURL&, const String& mimeType, bool shouldPreferPlugInsForImages) = 0; 158 159 virtual void dispatchDidClearWindowObjectInMainWorld() = 0; 160 virtual void documentElementAvailable() = 0; 161 162 virtual void didCreateScriptContext(v8::Handle<v8::Context>, int extensionGroup, int worldId) = 0; 163 virtual void willReleaseScriptContext(v8::Handle<v8::Context>, int worldId) = 0; 164 virtual bool allowScriptExtension(const String& extensionName, int extensionGroup, int worldId) = 0; 165 166 virtual void didChangeScrollOffset() { } 167 virtual void didUpdateCurrentHistoryItem() { } 168 virtual void didRemoveAllPendingStylesheet() { } 169 170 virtual bool allowScript(bool enabledPerSettings) { return enabledPerSettings; } 171 virtual bool allowScriptFromSource(bool enabledPerSettings, const KURL&) { return enabledPerSettings; } 172 virtual bool allowPlugins(bool enabledPerSettings) { return enabledPerSettings; } 173 virtual bool allowImage(bool enabledPerSettings, const KURL&) { return enabledPerSettings; } 174 virtual bool allowMedia(const KURL&) { return true; } 175 virtual bool allowDisplayingInsecureContent(bool enabledPerSettings, SecurityOrigin*, const KURL&) { return enabledPerSettings; } 176 virtual bool allowRunningInsecureContent(bool enabledPerSettings, SecurityOrigin*, const KURL&) { return enabledPerSettings; } 177 178 // This callback notifies the client that the frame was about to run 179 // JavaScript but did not because allowScript returned false. We 180 // have a separate callback here because there are a number of places 181 // that need to know if JavaScript is enabled but are not necessarily 182 // preparing to execute script. 183 virtual void didNotAllowScript() { } 184 // This callback is similar, but for plugins. 185 virtual void didNotAllowPlugins() { } 186 187 virtual blink::WebCookieJar* cookieJar() const = 0; 188 189 virtual void didChangeName(const String&) { } 190 191 virtual void dispatchWillOpenSocketStream(SocketStreamHandle*) { } 192 virtual void dispatchWillOpenWebSocket(blink::WebSocketHandle*) { } 193 194 virtual void dispatchWillStartUsingPeerConnectionHandler(blink::WebRTCPeerConnectionHandler*) { } 195 196 virtual void didRequestAutocomplete(HTMLFormElement*) = 0; 197 198 virtual bool allowWebGL(bool enabledPerSettings) { return enabledPerSettings; } 199 // Informs the embedder that a WebGL canvas inside this frame received a lost context 200 // notification with the given GL_ARB_robustness guilt/innocence code (see Extensions3D.h). 201 virtual void didLoseWebGLContext(int) { } 202 203 // If an HTML document is being loaded, informs the embedder that the document will have its <body> attached soon. 204 virtual void dispatchWillInsertBody() { } 205 206 virtual void dispatchDidChangeResourcePriority(unsigned long identifier, ResourceLoadPriority, int intraPriorityValue) { } 207 208 virtual PassOwnPtr<blink::WebServiceWorkerProvider> createServiceWorkerProvider() = 0; 209 210 virtual bool isControlledByServiceWorker() = 0; 211 212 virtual SharedWorkerRepositoryClient* sharedWorkerRepositoryClient() { return 0; } 213 214 virtual PassOwnPtr<blink::WebApplicationCacheHost> createApplicationCacheHost(blink::WebApplicationCacheHostClient*) = 0; 215 216 virtual void didStopAllLoaders() { } 217 218 virtual void dispatchDidChangeManifest() { } 219 220 virtual bool isFrameLoaderClientImpl() const { return false; } 221 }; 222 223 } // namespace blink 224 225 #endif // FrameLoaderClient_h 226