Home | History | Annotate | Download | only in WebCoreSupport
      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