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 49 Frame* getFrame() { return m_frame; } 50 static FrameLoaderClientAndroid* get(const Frame* frame); 51 52 void setFrame(Frame* frame) { m_frame = frame; } 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 205 virtual void didCreateScriptContextForFrame() { } 206 virtual void didDestroyScriptContextForFrame() { } 207 virtual void didCreateIsolatedScriptContext() { } 208 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 222 CacheBuilder& getCacheBuilder() { return m_cacheBuilder; } 223 224 void enableOnDemandPlugins() { m_onDemandPluginsEnabled = true; } 225 226 void dispatchDidChangeIcons(); 227 void dispatchWillSendSubmitEvent(HTMLFormElement*); 228 229 virtual void didSaveToPageCache() { } 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