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
41namespace blink {
42
43class WebLocalFrameImpl;
44class WebPluginContainerImpl;
45class WebPluginLoadObserver;
46
47class FrameLoaderClientImpl FINAL : public FrameLoaderClient {
48public:
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
171private:
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
181DEFINE_TYPE_CASTS(FrameLoaderClientImpl, FrameLoaderClient, client, client->isFrameLoaderClientImpl(), client.isFrameLoaderClientImpl());
182
183} // namespace blink
184
185#endif
186