• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2007, The Android Open Source Project
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *  * Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  *  * Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef FrameLoaderClientAndroid_h
27 #define FrameLoaderClientAndroid_h
28 
29 #include "CacheBuilder.h"
30 #include "FrameLoaderClient.h"
31 #include "ResourceResponse.h"
32 #include "WebIconDatabase.h"
33 #include <wtf/Forward.h>
34 
35 namespace WebCore {
36 class PluginManualLoader;
37 }
38 
39 using namespace WebCore;
40 
41 namespace android {
42     class WebFrame;
43 
44     class FrameLoaderClientAndroid : public FrameLoaderClient,
45             WebIconDatabaseClient {
46     public:
47         FrameLoaderClientAndroid(WebFrame* webframe);
48 
getFrame()49         Frame* getFrame() { return m_frame; }
50         static FrameLoaderClientAndroid* get(const Frame* frame);
51 
setFrame(Frame * frame)52         void setFrame(Frame* frame) { m_frame = frame; }
webFrame()53         WebFrame* webFrame() const { return m_webFrame; }
54 
55         virtual void frameLoaderDestroyed();
56 
57         virtual bool hasWebView() const; // mainly for assertions
58 
59         virtual void makeRepresentation(DocumentLoader*);
60         virtual void forceLayout();
61         virtual void forceLayoutForNonHTML();
62 
63         virtual void setCopiesOnScroll();
64 
65         virtual void detachedFromParent2();
66         virtual void detachedFromParent3();
67 
68         virtual void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&);
69 
70         virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse);
71         virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long identifier);
72         virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
73         virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
74         virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&);
75         virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long identifier, int lengthReceived);
76         virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier);
77         virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long identifier, const ResourceError&);
78         virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length);
79 
80         virtual void dispatchDidHandleOnloadEvents();
81         virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();
82         virtual void dispatchDidCancelClientRedirect();
83         virtual void dispatchWillPerformClientRedirect(const KURL&, double interval, double fireDate);
84         virtual void dispatchDidChangeLocationWithinPage();
85         virtual void dispatchDidPushStateWithinPage();
86         virtual void dispatchDidReplaceStateWithinPage();
87         virtual void dispatchDidPopStateWithinPage();
88         virtual void dispatchWillClose();
89         virtual void dispatchDidReceiveIcon();
90         virtual void dispatchDidStartProvisionalLoad();
91         virtual void dispatchDidReceiveTitle(const StringWithDirection& title);
92         virtual void dispatchDidCommitLoad();
93         virtual void dispatchDidFailProvisionalLoad(const ResourceError&);
94         virtual void dispatchDidFailLoad(const ResourceError&);
95         virtual void dispatchDidFinishDocumentLoad();
96         virtual void dispatchDidFinishLoad();
97         virtual void dispatchDidFirstLayout();
98         virtual void dispatchDidFirstVisuallyNonEmptyLayout();
99 
100         virtual Frame* dispatchCreatePage(const NavigationAction&);
101         virtual void dispatchShow();
102 
103         virtual void dispatchDecidePolicyForResponse(FramePolicyFunction, const ResourceResponse&, const ResourceRequest&);
104         virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String& frameName);
105         virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>);
106         virtual void cancelPolicyCheck();
107 
108         virtual void dispatchUnableToImplementPolicy(const ResourceError&);
109 
110         virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>);
111 
112         virtual void dispatchDidLoadMainResource(DocumentLoader*);
113         virtual void revertToProvisionalState(DocumentLoader*);
114         virtual void setMainDocumentError(DocumentLoader*, const ResourceError&);
115 
116         virtual void willChangeEstimatedProgress();
117         virtual void didChangeEstimatedProgress();
118         virtual void postProgressStartedNotification();
119         virtual void postProgressEstimateChangedNotification();
120         virtual void postProgressFinishedNotification();
121 
122         virtual void setMainFrameDocumentReady(bool);
123 
124         virtual void startDownload(const ResourceRequest&);
125 
126         virtual void willChangeTitle(DocumentLoader*);
127         virtual void didChangeTitle(DocumentLoader*);
128 
129         virtual void committedLoad(DocumentLoader*, const char*, int);
130         virtual void finishedLoading(DocumentLoader*);
131 
132         virtual void updateGlobalHistory();
133         virtual void updateGlobalHistoryRedirectLinks();
134 
135         virtual bool shouldGoToHistoryItem(HistoryItem*) const;
136         virtual bool shouldStopLoadingForHistoryItem(HistoryItem*) const;
137 
138         virtual void didDisplayInsecureContent();
139         virtual void didRunInsecureContent(SecurityOrigin*, const KURL&);
140 
141         virtual void dispatchDidAddBackForwardItem(HistoryItem*) const;
142         virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const;
143         virtual void dispatchDidChangeBackForwardIndex() const;
144 
145         virtual ResourceError cancelledError(const ResourceRequest&);
146         virtual ResourceError blockedError(const ResourceRequest&);
147         virtual ResourceError cannotShowURLError(const ResourceRequest&);
148         virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&);
149 
150         virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&);
151         virtual ResourceError fileDoesNotExistError(const ResourceResponse&);
152         virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&);
153 
154         virtual bool shouldFallBack(const ResourceError&);
155 
156         virtual bool canHandleRequest(const ResourceRequest&) const;
157         virtual bool canShowMIMEType(const String& MIMEType) const;
158         virtual bool canShowMIMETypeAsHTML(const String& MIMEType) const;
159         virtual bool representationExistsForURLScheme(const String& URLScheme) const;
160         virtual String generatedMIMETypeForURLScheme(const String& URLScheme) const;
161 
162         virtual void frameLoadCompleted();
163         virtual void saveViewStateToItem(HistoryItem*);
164         virtual void restoreViewState();
165         virtual void provisionalLoadStarted();
166         virtual void didFinishLoad();
167         virtual void prepareForDataSourceReplacement();
168 
169         virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest&, const SubstituteData&);
170         virtual void setTitle(const StringWithDirection& title, const KURL&);
171 
172         // This provides the userAgent to WebCore. It is used by WebCore to
173         // populate navigator.userAgent and to set the HTTP header in
174         // ResourceRequest objects. We also set a userAgent on WebRequestContext
175         // for the Chromium HTTP stack, which overrides the value on the
176         // ResourceRequest.
177         virtual String userAgent(const KURL&);
178 
179         virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*);
180         virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*);
181         virtual void transitionToCommittedForNewPage();
182 
183         virtual void dispatchDidBecomeFrameset(bool isFrameSet);
184 
185         virtual bool canCachePage() const;
186         virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&);
187 
188         virtual WTF::PassRefPtr<Frame> createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement, const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);
189         virtual void didTransferChildFrameToNewDocument(WebCore::Page*);
190         virtual void transferLoadingResourceFromPage(unsigned long identifier, DocumentLoader*, const ResourceRequest&, Page* oldPage);
191         virtual WTF::PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const WTF::Vector<String>&, const WTF::Vector<String>&, const String&, bool loadManually);
192         virtual void redirectDataToPlugin(Widget* pluginWidget);
193 
194         virtual WTF::PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL& baseURL, const WTF::Vector<String>& paramNames, const WTF::Vector<String>& paramValues);
195 
196         virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType, bool shouldPreferPlugInsForImages);
197         virtual String overrideMediaType() const;
198 
199         virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*);
200         virtual void documentElementAvailable();
201         virtual void didPerformFirstNavigation() const;
202 
203 #if USE(V8)
204         // TODO(benm): Implement
didCreateScriptContextForFrame()205         virtual void didCreateScriptContextForFrame() { }
didDestroyScriptContextForFrame()206         virtual void didDestroyScriptContextForFrame() { }
didCreateIsolatedScriptContext()207         virtual void didCreateIsolatedScriptContext() { }
208 
allowScriptExtension(const String & extensionName,int extensionGroup)209          virtual bool allowScriptExtension(const String& extensionName, int extensionGroup) { return false; }
210 #endif
211 
212         virtual void registerForIconNotification(bool listen = true);
213 
214         virtual void dispatchDidReceiveTouchIconURL(const String& url, bool precomposed);
215 
216         virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext();
217 
218         // WebIconDatabaseClient api
219         virtual void didAddIconForPageUrl(const String& pageUrl);
220 
221         // FIXME: this doesn't really go here, but it's better than Frame
getCacheBuilder()222         CacheBuilder& getCacheBuilder() { return m_cacheBuilder; }
223 
enableOnDemandPlugins()224         void enableOnDemandPlugins() { m_onDemandPluginsEnabled = true; }
225 
226         void dispatchDidChangeIcons();
227         void dispatchWillSendSubmitEvent(HTMLFormElement*);
228 
didSaveToPageCache()229         virtual void didSaveToPageCache() { }
didRestoreFromPageCache()230         virtual void didRestoreFromPageCache() { }
231     private:
232         CacheBuilder m_cacheBuilder;
233         Frame* m_frame;
234         WebFrame* m_webFrame;
235         PluginManualLoader* m_manualLoader;
236         bool m_hasSentResponseToPlugin;
237         bool m_onDemandPluginsEnabled;
238         mutable bool m_didReceiveServerRedirect;
239 
240         enum ResourceErrors {
241             InternalErrorCancelled = -99,
242             InternalErrorCannotShowUrl,
243             InternalErrorInterrupted,
244             InternalErrorCannotShowMimeType,
245             InternalErrorFileDoesNotExist,
246             InternalErrorPluginWillHandleLoadError,
247             InternalErrorLast
248         };
249 
250         /* XXX: These must match android.net.http.EventHandler */
251         enum EventHandlerErrors {
252             Error                      = -1,
253             ErrorLookup                = -2,
254             ErrorUnsupportedAuthScheme = -3,
255             ErrorAuth                  = -4,
256             ErrorProxyAuth             = -5,
257             ErrorConnect               = -6,
258             ErrorIO                    = -7,
259             ErrorTimeout               = -8,
260             ErrorRedirectLoop          = -9,
261             ErrorUnsupportedScheme     = -10,
262             ErrorFailedSslHandshake    = -11,
263             ErrorBadUrl                = -12,
264             ErrorFile                  = -13,
265             ErrorFileNotFound          = -14,
266             ErrorTooManyRequests       = -15
267         };
268         friend class CacheBuilder;
269     };
270 
271 }
272 
273 #endif
274