• 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 APPLE COMPUTER, INC. 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 
34 using namespace WebCore;
35 
36 namespace android {
37     class WebFrame;
38 
39     class FrameLoaderClientAndroid : public FrameLoaderClient,
40             WebIconDatabaseClient {
41     public:
42         FrameLoaderClientAndroid(WebFrame* webframe);
43 
getFrame()44         Frame* getFrame() { return m_frame; }
45         static FrameLoaderClientAndroid* get(const Frame* frame);
46 
setFrame(Frame * frame)47         void setFrame(Frame* frame) { m_frame = frame; }
webFrame()48         WebFrame* webFrame() const { return m_webFrame; }
49 
50         virtual void frameLoaderDestroyed();
51 
52         virtual bool hasWebView() const; // mainly for assertions
53 
54         virtual void makeRepresentation(DocumentLoader*);
55         virtual void forceLayout();
56         virtual void forceLayoutForNonHTML();
57 
58         virtual void setCopiesOnScroll();
59 
60         virtual void detachedFromParent2();
61         virtual void detachedFromParent3();
62 
63         virtual void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&);
64 
65         virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse);
66         virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long identifier);
67         virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
68         virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
69         virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&);
70         virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long identifier, int lengthReceived);
71         virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier);
72         virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long identifier, const ResourceError&);
73         virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length);
74         virtual void dispatchDidLoadResourceByXMLHttpRequest(unsigned long identifier, const ScriptString&);
75 
76         virtual void dispatchDidHandleOnloadEvents();
77         virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();
78         virtual void dispatchDidCancelClientRedirect();
79         virtual void dispatchWillPerformClientRedirect(const KURL&, double interval, double fireDate);
80         virtual void dispatchDidChangeLocationWithinPage();
81         virtual void dispatchWillClose();
82         virtual void dispatchDidReceiveIcon();
83         virtual void dispatchDidStartProvisionalLoad();
84         virtual void dispatchDidReceiveTitle(const String& title);
85         virtual void dispatchDidCommitLoad();
86         virtual void dispatchDidFailProvisionalLoad(const ResourceError&);
87         virtual void dispatchDidFailLoad(const ResourceError&);
88         virtual void dispatchDidFinishDocumentLoad();
89         virtual void dispatchDidFinishLoad();
90         virtual void dispatchDidFirstLayout();
91         virtual void dispatchDidFirstVisuallyNonEmptyLayout();
92 
93         virtual Frame* dispatchCreatePage();
94         virtual void dispatchShow();
95 
96         virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String& MIMEType, const ResourceRequest&);
97         virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String& frameName);
98         virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>);
99         virtual void cancelPolicyCheck();
100 
101         virtual void dispatchUnableToImplementPolicy(const ResourceError&);
102 
103         virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>);
104 
105         virtual void dispatchDidLoadMainResource(DocumentLoader*);
106         virtual void revertToProvisionalState(DocumentLoader*);
107         virtual void setMainDocumentError(DocumentLoader*, const ResourceError&);
108 
109         virtual void willChangeEstimatedProgress();
110         virtual void didChangeEstimatedProgress();
111         virtual void postProgressStartedNotification();
112         virtual void postProgressEstimateChangedNotification();
113         virtual void postProgressFinishedNotification();
114 
115         virtual void setMainFrameDocumentReady(bool);
116 
117         virtual void startDownload(const ResourceRequest&);
118 
119         virtual void willChangeTitle(DocumentLoader*);
120         virtual void didChangeTitle(DocumentLoader*);
121 
122         virtual void committedLoad(DocumentLoader*, const char*, int);
123         virtual void finishedLoading(DocumentLoader*);
124 
125         virtual void updateGlobalHistory();
126         virtual void updateGlobalHistoryRedirectLinks();
127 
128         virtual bool shouldGoToHistoryItem(HistoryItem*) const;
129 #ifdef ANDROID_HISTORY_CLIENT
130         virtual void dispatchDidAddHistoryItem(HistoryItem*) const;
131         virtual void dispatchDidRemoveHistoryItem(HistoryItem*, int) const;
132         virtual void dispatchDidChangeHistoryIndex(BackForwardList*) const;
133 #endif
134 
135         virtual ResourceError cancelledError(const ResourceRequest&);
136         virtual ResourceError blockedError(const ResourceRequest&);
137         virtual ResourceError cannotShowURLError(const ResourceRequest&);
138         virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&);
139 
140         virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&);
141         virtual ResourceError fileDoesNotExistError(const ResourceResponse&);
142         virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&);
143 
144         virtual bool shouldFallBack(const ResourceError&);
145 
146         virtual bool canHandleRequest(const ResourceRequest&) const;
147         virtual bool canShowMIMEType(const String& MIMEType) const;
148         virtual bool representationExistsForURLScheme(const String& URLScheme) const;
149         virtual String generatedMIMETypeForURLScheme(const String& URLScheme) const;
150 
151         virtual void frameLoadCompleted();
152         virtual void saveViewStateToItem(HistoryItem*);
153         virtual void restoreViewState();
154         virtual void provisionalLoadStarted();
155         virtual void didFinishLoad();
156         virtual void prepareForDataSourceReplacement();
157 
158         virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest&, const SubstituteData&);
159         virtual void setTitle(const String& title, const KURL&);
160 
161         virtual String userAgent(const KURL&);
162 
163         virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*);
164         virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*);
165         virtual void transitionToCommittedForNewPage();
166 
167         virtual bool canCachePage() const;
168         virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&);
169 
170         virtual WTF::PassRefPtr<Frame> createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
171                                    const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);
172        virtual WTF::PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&,
173                const WTF::Vector<String>&, const WTF::Vector<String>&,
174                const String&, bool loadManually);
175         virtual void redirectDataToPlugin(Widget* pluginWidget);
176 
177         virtual WTF::PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL& baseURL, const WTF::Vector<String>& paramNames, const WTF::Vector<String>& paramValues);
178 
179         virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType);
180         virtual String overrideMediaType() const;
181 
182         virtual void windowObjectCleared();
183         virtual void documentElementAvailable();
184         virtual void didPerformFirstNavigation() const;
185 
186 #if USE(V8)
187         // TODO(benm): Implement
didCreateScriptContextForFrame()188         virtual void didCreateScriptContextForFrame() { }
didDestroyScriptContextForFrame()189         virtual void didDestroyScriptContextForFrame() { }
didCreateIsolatedScriptContext()190         virtual void didCreateIsolatedScriptContext() { }
191 #endif
192 
193         virtual void registerForIconNotification(bool listen = true);
194 
195         virtual void dispatchDidReceiveTouchIconURL(const String& url, bool precomposed);
196 
197         // WebIconDatabaseClient api
198         virtual void didAddIconForPageUrl(const String& pageUrl);
199 
200         // FIXME: this doesn't really go here, but it's better than Frame
getCacheBuilder()201         CacheBuilder& getCacheBuilder() { return m_cacheBuilder; }
202     private:
203         CacheBuilder m_cacheBuilder;
204         Frame*              m_frame;
205         WebFrame*  m_webFrame;
206 
207         enum ResourceErrors {
208             InternalErrorCancelled = -99,
209             InternalErrorCannotShowUrl,
210             InternalErrorInterrupted,
211             InternalErrorCannotShowMimeType,
212             InternalErrorFileDoesNotExist,
213             InternalErrorPluginWillHandleLoadError,
214             InternalErrorLast
215         };
216 
217         /* XXX: These must match android.net.http.EventHandler */
218         enum EventHandlerErrors {
219             Error                      = -1,
220             ErrorLookup                = -2,
221             ErrorUnsupportedAuthScheme = -3,
222             ErrorAuth                  = -4,
223             ErrorProxyAuth             = -5,
224             ErrorConnect               = -6,
225             ErrorIO                    = -7,
226             ErrorTimeout               = -8,
227             ErrorRedirectLoop          = -9,
228             ErrorUnsupportedScheme     = -10,
229             ErrorFailedSslHandshake    = -11,
230             ErrorBadUrl                = -12,
231             ErrorFile                  = -13,
232             ErrorFileNotFound          = -14,
233             ErrorTooManyRequests       = -15
234         };
235         friend class CacheBuilder;
236     };
237 
238 }
239 
240 #endif
241