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 240 // Plugin widget for handling data redirection 241 // PluginWidgetJava* m_pluginWidget; 242 }; 243 244 } 245 246 #endif