1 /*
   2  * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
   3  */
   4 #ifndef FrameLoaderClientJava_H
   5 #define FrameLoaderClientJava_H
   6 
   7 #include "Document.h"
   8 #include "DocumentLoader.h"
   9 #include "Frame.h"
  10 #include "FrameLoader.h"
  11 #include "FrameLoaderClient.h"
  12 #include "FrameView.h"
  13 #include "FormState.h"
  14 #include "HTMLFrameOwnerElement.h"
  15 
  16 #include "ResourceRequest.h"
  17 #include "ResourceResponse.h"
  18 #include "Widget.h"
  19 #include "PluginWidgetJava.h"
  20 #include "ProgressTrackerClient.h"
  21 
  22 #include "JavaEnv.h"
  23 
  24 namespace WebCore {
  25 
  26     class FrameLoaderClientJava : public FrameLoaderClient, public ProgressTrackerClient {
  27     public:
  28         FrameLoaderClientJava(const JLObject &webPage);
  29         virtual void frameLoaderDestroyed();
  30 
  31         virtual bool hasWebView() const;
  32 
  33         virtual bool privateBrowsingEnabled() const;
  34 
  35         virtual void makeDocumentView();
  36         virtual void makeRepresentation(DocumentLoader*);
  37         virtual void setDocumentViewFromCachedPage(CachedPage*);
  38         virtual void forceLayout();
  39         virtual void forceLayoutForNonHTML();
  40 
  41         virtual void setCopiesOnScroll();
  42 
  43         virtual void detachedFromParent1();
  44         virtual void detachedFromParent2();
  45         virtual void detachedFromParent3();
  46         virtual void detachedFromParent4();
  47 
  48         virtual void loadedFromCachedPage();
  49 
  50         virtual void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&);
  51 
  52         virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long  identifier, ResourceRequest&, const ResourceResponse& redirectResponse);
  53         virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
  54         virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long  identifier, const AuthenticationChallenge&);
  55         virtual void dispatchDidReceiveResponse(DocumentLoader*, unsigned long  identifier, const ResourceResponse&);
  56         virtual void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long identifier, int lengthReceived);
  57         virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long  identifier);
  58         virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long  identifier, const ResourceError&);
  59         virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length);
  60 //        virtual void dispatchDidLoadResourceByXMLHttpRequest(unsigned long identifier, const String&);
  61 
  62         virtual void dispatchDidHandleOnloadEvents();
  63         virtual void dispatchDidPushStateWithinPage();
  64         virtual void dispatchDidReplaceStateWithinPage();
  65         virtual void dispatchDidPopStateWithinPage();
  66         virtual void dispatchDidChangeBackForwardIndex() const;
  67         virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();
  68         virtual void dispatchDidCancelClientRedirect();
  69         virtual void dispatchWillPerformClientRedirect(const URL&, double, double);
  70         virtual void dispatchDidChangeLocationWithinPage();
  71         virtual void dispatchWillClose();
  72         virtual void dispatchDidReceiveIcon();
  73         virtual void dispatchDidStartProvisionalLoad();
  74         virtual void dispatchDidReceiveTitle(const StringWithDirection&);
  75         virtual void dispatchDidChangeIcons(IconType);
  76         virtual void dispatchDidCommitLoad();
  77         virtual void dispatchDidFailProvisionalLoad(const ResourceError&);
  78         virtual void dispatchDidFailLoad(const ResourceError&);
  79         virtual void dispatchDidFinishDocumentLoad();
  80         virtual void dispatchDidFinishLoad();
  81         virtual void dispatchDidFirstLayout();
  82         virtual void dispatchDidFirstVisuallyNonEmptyLayout();
  83         virtual void dispatchDidClearWindowObjectInWorld(WebCore::DOMWrapperWorld&);
  84 
  85         virtual Frame* dispatchCreatePage(const NavigationAction&);
  86         virtual void dispatchShow();
  87 
  88         virtual void dispatchDecidePolicyForResponse(const ResourceResponse&, const ResourceRequest&, FramePolicyFunction);
  89         virtual void dispatchDecidePolicyForNewWindowAction(const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, const String&, FramePolicyFunction);
  90         virtual void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, PassRefPtr<FormState>, FramePolicyFunction);
  91         virtual void cancelPolicyCheck();
  92 
  93         virtual void dispatchUnableToImplementPolicy(const ResourceError&);
  94 
  95         virtual void dispatchWillSendSubmitEvent(PassRefPtr<FormState>) {};
  96         virtual void dispatchWillSubmitForm(PassRefPtr<FormState>, FramePolicyFunction);
  97 
  98         virtual void dispatchDidLoadMainResource(DocumentLoader*);
  99 
 100         virtual void dispatchDidChangeIcons() {}
 101 
 102         virtual void revertToProvisionalState(DocumentLoader*);
 103         virtual void setMainDocumentError(DocumentLoader*, const ResourceError&);
 104         virtual void clearUnarchivingState(DocumentLoader*);
 105 
 106         // ProgressTrackerClient methods
 107         virtual void progressStarted(Frame& originatingProgressFrame);
 108         virtual void progressEstimateChanged(Frame& originatingProgressFrame);
 109         virtual void progressFinished(Frame& originatingProgressFrame);
 110         virtual void progressTrackerDestroyed();
 111 
 112         virtual RefPtr<Frame> createFrame(const URL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
 113                                    const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);
 114         virtual RefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const URL&, const Vector<String>&, const Vector<String>&, const String&, bool loadManually);
 115         virtual void recreatePlugin(Widget*) { }
 116         virtual void redirectDataToPlugin(Widget* pluginWidget);
 117         virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const URL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues);
 118         virtual String overrideMediaType() const;
 119 
 120         virtual ObjectContentType objectContentType(const URL&, const String& mimeType, bool shouldPreferPlugInsForImages);
 121 
 122         virtual void setMainFrameDocumentReady(bool);
 123 
 124         virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceResponse&);
 125         virtual void startDownload(const ResourceRequest&, const String& suggestedName = String());
 126 
 127         virtual void willChangeTitle(DocumentLoader*);
 128         virtual void didChangeTitle(DocumentLoader*);
 129 
 130         virtual void committedLoad(DocumentLoader*, const char*, int);
 131         virtual void finishedLoading(DocumentLoader*);
 132         virtual void finalSetupForReplace(DocumentLoader*);
 133 
 134         virtual void updateGlobalHistory();
 135         virtual void updateGlobalHistoryRedirectLinks();
 136 
 137         virtual bool shouldGoToHistoryItem(HistoryItem*) const;
 138         virtual bool shouldStopLoadingForHistoryItem(HistoryItem*) const;
 139         virtual void dispatchDidAddBackForwardItem(HistoryItem*) const;
 140         virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const;
 141 
 142 
 143         // This frame has displayed inactive content (such as an image) from an
 144         // insecure source.  Inactive content cannot spread to other frames.
 145         virtual void didDisplayInsecureContent();
 146 
 147         // The indicated security origin has run active content (such as a
 148         // script) from an insecure source.  Note that the insecure content can
 149         // spread to other frames in the same origin.
 150         virtual void didRunInsecureContent(SecurityOrigin*, const URL&);
 151         virtual void didDetectXSS(const URL&, bool);
 152 
 153         virtual ResourceError cancelledError(const ResourceRequest&);
 154         virtual ResourceError blockedError(const ResourceRequest&);
 155         virtual ResourceError cannotShowURLError(const ResourceRequest&);
 156         virtual ResourceError interruptedForPolicyChangeError(const ResourceRequest&);
 157 
 158         virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&);
 159         virtual ResourceError fileDoesNotExistError(const ResourceResponse&);
 160         virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&);
 161 
 162         virtual bool shouldFallBack(const ResourceError&);
 163 
 164         virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long identifier);
 165 
 166         virtual bool isArchiveLoadPending(ResourceLoader*) const;
 167         virtual void cancelPendingArchiveLoad(ResourceLoader*);
 168         virtual void clearArchivedResources();
 169 
 170         virtual bool canHandleRequest(const ResourceRequest&) const;
 171         virtual bool canShowMIMEType(const String&) const;
 172         virtual bool canShowMIMETypeAsHTML(const String& MIMEType) const;
 173         virtual bool representationExistsForURLScheme(const String&) const;
 174         virtual String generatedMIMETypeForURLScheme(const String&) const;
 175 
 176         virtual void frameLoadCompleted();
 177         virtual void saveViewStateToItem(HistoryItem*);
 178         virtual void restoreViewState();
 179         virtual void provisionalLoadStarted();
 180         virtual void didFinishLoad();
 181         virtual void prepareForDataSourceReplacement();
 182 
 183         virtual Ref<DocumentLoader> createDocumentLoader(const ResourceRequest&, const SubstituteData&);
 184         virtual void setTitle(const StringWithDirection& title, const URL&);
 185 
 186         void willReplaceMultipartContent() override;
 187         void didReplaceMultipartContent() override;
 188         void updateCachedDocumentLoader(DocumentLoader&) override;
 189 
 190         virtual String userAgent(const URL&);
 191 
 192         virtual void savePlatformDataToCachedFrame(CachedFrame*);
 193         virtual void transitionToCommittedFromCachedFrame(CachedFrame*);
 194         virtual void transitionToCommittedForNewPage();
 195 
 196         virtual bool canCachePage() const;
 197         virtual void convertMainResourceLoadToDownload(DocumentLoader*, const ResourceRequest&, const ResourceResponse&);
 198 
 199         virtual void didSaveToPageCache();
 200         virtual void didRestoreFromPageCache();
 201 
 202         virtual void dispatchDidBecomeFrameset(bool); // Can change due to navigation or DOM modification.
 203 
 204         virtual void didTransferChildFrameToNewDocument(Page* oldPage);
 205         virtual void transferLoadingResourceFromPage(ResourceLoader*, const ResourceRequest&, Page*);
 206         virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext();
 207 
 208         virtual void documentElementAvailable();
 209         // "Navigation" here means a transition from one page to another that ends up in the back/forward list.
 210         virtual void didPerformFirstNavigation() const;
 211 
 212         virtual void registerForIconNotification(bool listen = true);
 213 
 214         void setFrame(Frame* frame);
 215 
 216         virtual bool isJavaFrameLoaderClient() override { return true; }
 217     private:
 218         Page* m_page;
 219         Frame* m_frame;
 220         ResourceResponse m_response;
 221         int mainResourceRequestID;
 222         bool m_isPageRedirected;
 223         bool m_hasRepresentation;
 224         bool m_FrameLoaderClientDestroyed;
 225         bool m_ProgressTrackerClientDestroyed;
 226 
 227         JGObject m_webPage;
 228 
 229         Page* page();
 230         Frame* frame();
 231 
 232         void setRequestURL(Frame* f, int identifier, String url);
 233         void removeRequestURL(Frame* f, int identifier);
 234 
 235         void postLoadEvent(Frame* f, int state, String url, String contentType, double progress, int errorCode = 0);
 236         void postResourceLoadEvent(Frame* f, int state, int id, String contentType, double progress, int errorCode = 0);
 237 
 238         void destroyIfNeeded();
 239         void dispatchDidNavigateWithinPage();
 240 
 241         // Plugin widget for handling data redirection
 242 //        PluginWidgetJava* m_pluginWidget;
 243     };
 244 
 245 }
 246 
 247 #endif