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