Changeset 17238 in webkit
- Timestamp:
- Oct 23, 2006, 8:28:02 PM (19 years ago)
- Location:
- trunk
- Files:
-
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r17236 r17238 1 2006-10-23 Darin Adler <darin@apple.com> 2 3 Reviewed by Maciej. 4 5 - converted WebFrameLoader to C++ 6 7 * WebCore.exp: Added many new entry points for WebKit. 8 * WebCore.xcodeproj/project.pbxproj: Made more files private (SPI). 9 10 * bridge/mac/WebCoreFrameBridge.h: 11 * bridge/mac/WebCoreFrameBridge.mm: 12 (-[WebCoreFrameBridge initMainFrameWithPage:withEditorClient:]): 13 (-[WebCoreFrameBridge initSubframeWithOwnerElement:withEditorClient:]): 14 (-[WebCoreFrameBridge dealloc]): 15 (-[WebCoreFrameBridge close]): 16 (-[WebCoreFrameBridge clearFrame]): 17 (-[WebCoreFrameBridge setFrameLoaderClient:]): 18 (-[WebCoreFrameBridge frameLoader]): 19 (-[WebCoreFrameBridge setTitle:]): 20 (-[WebCoreFrameBridge didFirstLayout]): 21 (-[WebCoreFrameBridge notifyIconChanged:]): 22 (-[WebCoreFrameBridge originalRequestURL]): 23 (-[WebCoreFrameBridge isLoadTypeReload]): 24 (-[WebCoreFrameBridge frameDetached]): 25 (-[WebCoreFrameBridge tokenizerProcessedData]): 26 (-[WebCoreFrameBridge receivedData:textEncodingName:]): 27 (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:]): 28 (-[WebCoreFrameBridge objectLoadedFromCacheWithURL:response:data:]): 29 (-[WebCoreFrameBridge startLoadingResource:withMethod:URL:customHeaders:postData:]): 30 (-[WebCoreFrameBridge reportClientRedirectToURL:delay:fireDate:lockHistory:isJavaScriptFormAction:]): 31 (-[WebCoreFrameBridge reportClientRedirectCancelled:]): 32 (-[WebCoreFrameBridge loadURL:referrer:reload:userGesture:target:triggeringEvent:form:formValues:]): 33 (-[WebCoreFrameBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]): 34 (-[WebCoreFrameBridge syncLoadResourceWithMethod:URL:customHeaders:postData:finalURL:responseHeaders:statusCode:]): 35 (-[WebCoreFrameBridge incomingReferrer]): 36 (-[WebCoreFrameBridge isReloading]): 37 (-[WebCoreFrameBridge handledOnloadEvents]): 38 (-[WebCoreFrameBridge mainResourceURLResponse]): 39 (-[WebCoreFrameBridge loadEmptyDocumentSynchronously]): 40 * loader/mac/WebDocumentLoader.h: 41 * loader/mac/WebDocumentLoader.mm: 42 (-[WebDocumentLoader frameLoader]): 43 (-[WebDocumentLoader dealloc]): 44 (-[WebDocumentLoader mainResourceData]): 45 (-[WebDocumentLoader setRequest:]): 46 (-[WebDocumentLoader bridge]): 47 (-[WebDocumentLoader setMainDocumentError:]): 48 (-[WebDocumentLoader mainReceivedError:complete:]): 49 (-[WebDocumentLoader stopLoading]): 50 (-[WebDocumentLoader setupForReplace]): 51 (-[WebDocumentLoader commitIfReady]): 52 (-[WebDocumentLoader finishedLoading]): 53 (-[WebDocumentLoader commitLoadWithData:]): 54 (-[WebDocumentLoader doesProgressiveLoadWithMIMEType:]): 55 (-[WebDocumentLoader setupForReplaceByMIMEType:]): 56 (-[WebDocumentLoader updateLoading]): 57 (-[WebDocumentLoader setFrame:]): 58 (-[WebDocumentLoader attachToFrame]): 59 (-[WebDocumentLoader detachFromFrame]): 60 (-[WebDocumentLoader prepareForLoadStart]): 61 (-[WebDocumentLoader setPrimaryLoadComplete:]): 62 (-[WebDocumentLoader isLoadingInAPISense]): 63 (-[WebDocumentLoader setTitle:]): 64 * loader/mac/WebFrameLoader.h: 65 (WebCore::FrameLoader::frame): 66 * loader/mac/WebFrameLoader.mm: 67 (WebCore::FrameLoader::FrameLoader): 68 (WebCore::FrameLoader::~FrameLoader): 69 (WebCore::FrameLoader::activeDocumentLoader): 70 (WebCore::FrameLoader::addPlugInStreamLoader): 71 (WebCore::FrameLoader::removePlugInStreamLoader): 72 (WebCore::FrameLoader::defersCallbacksChanged): 73 (WebCore::FrameLoader::defersCallbacks): 74 (WebCore::setAllDefersCallbacks): 75 (WebCore::FrameLoader::setDefersCallbacks): 76 (WebCore::cancelAll): 77 (WebCore::FrameLoader::stopLoadingPlugIns): 78 (WebCore::FrameLoader::isLoadingMainResource): 79 (WebCore::FrameLoader::isLoadingSubresources): 80 (WebCore::FrameLoader::isLoadingPlugIns): 81 (WebCore::FrameLoader::isLoading): 82 (WebCore::FrameLoader::stopLoadingSubresources): 83 (WebCore::FrameLoader::addSubresourceLoader): 84 (WebCore::FrameLoader::removeSubresourceLoader): 85 (WebCore::FrameLoader::mainResourceData): 86 (WebCore::FrameLoader::releaseMainResourceLoader): 87 (WebCore::FrameLoader::cancelMainResourceLoad): 88 (WebCore::FrameLoader::startLoadingMainResource): 89 (WebCore::FrameLoader::stopLoading): 90 (WebCore::FrameLoader::setDocumentLoader): 91 (WebCore::FrameLoader::documentLoader): 92 (WebCore::FrameLoader::setPolicyDocumentLoader): 93 (WebCore::FrameLoader::provisionalDocumentLoader): 94 (WebCore::FrameLoader::setProvisionalDocumentLoader): 95 (WebCore::FrameLoader::state): 96 (WebCore::FrameLoader::timeOfLastCompletedLoad): 97 (WebCore::FrameLoader::provisionalLoadStarted): 98 (WebCore::FrameLoader::setState): 99 (WebCore::FrameLoader::clearProvisionalLoad): 100 (WebCore::FrameLoader::markLoadComplete): 101 (WebCore::FrameLoader::commitProvisionalLoad): 102 (WebCore::FrameLoader::stopLoadingSubframes): 103 (WebCore::FrameLoader::startLoading): 104 (WebCore::FrameLoader::setupForReplace): 105 (WebCore::FrameLoader::identifierForInitialRequest): 106 (WebCore::FrameLoader::willSendRequest): 107 (WebCore::FrameLoader::didReceiveAuthenticationChallenge): 108 (WebCore::FrameLoader::didCancelAuthenticationChallenge): 109 (WebCore::FrameLoader::didReceiveResponse): 110 (WebCore::FrameLoader::didReceiveData): 111 (WebCore::FrameLoader::didFinishLoad): 112 (WebCore::FrameLoader::didFailToLoad): 113 (WebCore::FrameLoader::privateBrowsingEnabled): 114 (WebCore::FrameLoader::originalRequest): 115 (WebCore::FrameLoader::receivedMainResourceError): 116 (WebCore::FrameLoader::clientRedirectCancelledOrFinished): 117 (WebCore::FrameLoader::clientRedirected): 118 (WebCore::FrameLoader::shouldReload): 119 (WebCore::FrameLoader::load): 120 (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy): 121 (WebCore::FrameLoader::closeOldDataSources): 122 (WebCore::FrameLoader::opened): 123 (WebCore::FrameLoader::initialRequest): 124 (WebCore::FrameLoader::receivedData): 125 (WebCore::FrameLoader::setRequest): 126 (WebCore::FrameLoader::download): 127 (WebCore::FrameLoader::bridge): 128 (WebCore::FrameLoader::handleFallbackContent): 129 (WebCore::FrameLoader::isStopping): 130 (WebCore::FrameLoader::setupForReplaceByMIMEType): 131 (WebCore::FrameLoader::setResponse): 132 (WebCore::FrameLoader::mainReceivedError): 133 (WebCore::FrameLoader::finishedLoading): 134 (WebCore::FrameLoader::notifyIconChanged): 135 (WebCore::FrameLoader::URL): 136 (WebCore::FrameLoader::cancelledError): 137 (WebCore::FrameLoader::fileDoesNotExistError): 138 (WebCore::FrameLoader::willUseArchive): 139 (WebCore::FrameLoader::isArchiveLoadPending): 140 (WebCore::FrameLoader::cancelPendingArchiveLoad): 141 (WebCore::FrameLoader::handleUnimplementablePolicy): 142 (WebCore::FrameLoader::cannotShowMIMEType): 143 (WebCore::FrameLoader::interruptionForPolicyChangeError): 144 (WebCore::FrameLoader::isHostedByObjectElement): 145 (WebCore::FrameLoader::isLoadingMainFrame): 146 (WebCore::FrameLoader::canShowMIMEType): 147 (WebCore::FrameLoader::representationExistsForURLScheme): 148 (WebCore::FrameLoader::generatedMIMETypeForURLScheme): 149 (WebCore::FrameLoader::checkNavigationPolicy): 150 (WebCore::FrameLoader::checkContentPolicy): 151 (WebCore::FrameLoader::cancelContentPolicyCheck): 152 (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL): 153 (WebCore::FrameLoader::reloadAllowingStaleData): 154 (WebCore::FrameLoader::reload): 155 (WebCore::FrameLoader::didReceiveServerRedirectForProvisionalLoadForFrame): 156 (WebCore::FrameLoader::finishedLoadingDocument): 157 (WebCore::FrameLoader::committedLoad): 158 (WebCore::FrameLoader::isReplacing): 159 (WebCore::FrameLoader::setReplacing): 160 (WebCore::FrameLoader::revertToProvisional): 161 (WebCore::FrameLoader::setMainDocumentError): 162 (WebCore::FrameLoader::mainReceivedCompleteError): 163 (WebCore::FrameLoader::finalSetupForReplace): 164 (WebCore::FrameLoader::prepareForLoadStart): 165 (WebCore::FrameLoader::subframeIsLoading): 166 (WebCore::FrameLoader::willChangeTitle): 167 (WebCore::FrameLoader::didChangeTitle): 168 (WebCore::FrameLoader::loadType): 169 (WebCore::FrameLoader::invalidatePendingPolicyDecision): 170 (WebCore::FrameLoader::checkNewWindowPolicy): 171 (WebCore::FrameLoader::continueAfterNewWindowPolicy): 172 (WebCore::FrameLoader::continueAfterNavigationPolicy): 173 (WebCore::FrameLoader::continueAfterWillSubmitForm): 174 (WebCore::FrameLoader::continueLoadRequestAfterNavigationPolicy): 175 (WebCore::FrameLoader::didFirstLayout): 176 (WebCore::FrameLoader::frameLoadCompleted): 177 (WebCore::FrameLoader::firstLayoutDone): 178 (WebCore::FrameLoader::isQuickRedirectComing): 179 (WebCore::FrameLoader::transitionToCommitted): 180 (WebCore::FrameLoader::checkLoadCompleteForThisFrame): 181 (WebCore::FrameLoader::continueLoadRequestAfterNewWindowPolicy): 182 (WebCore::FrameLoader::sendRemainingDelegateMessages): 183 (WebCore::FrameLoader::requestFromDelegate): 184 (WebCore::FrameLoader::post): 185 (WebCore::FrameLoader::detachChildren): 186 (WebCore::FrameLoader::detachFromParent): 187 (WebCore::FrameLoader::addExtraFieldsToRequest): 188 (WebCore::FrameLoader::safeLoad): 189 (WebCore::FrameLoader::actionInformation): 190 (WebCore::FrameLoader::checkLoadComplete): 191 (WebCore::FrameLoader::setFrameLoaderClient): 192 (WebCore::FrameLoader::client): 193 (WebCore::FrameLoader::asDelegate): 194 (-[WebCoreFrameLoaderAsDelegate initWithLoader:]): 195 (-[WebCoreFrameLoaderAsDelegate detachFromLoader]): 196 (-[WebCoreFrameLoaderAsDelegate continueFragmentScrollAfterNavigationPolicy:formState:]): 197 (-[WebCoreFrameLoaderAsDelegate continueAfterNewWindowPolicy:]): 198 (-[WebCoreFrameLoaderAsDelegate continueAfterNavigationPolicy:]): 199 (-[WebCoreFrameLoaderAsDelegate continueAfterWillSubmitForm:]): 200 (-[WebCoreFrameLoaderAsDelegate continueLoadRequestAfterNavigationPolicy:formState:]): 201 (-[WebCoreFrameLoaderAsDelegate continueLoadRequestAfterNewWindowPolicy:frameName:formState:]): 202 * loader/mac/WebLoader.h: 203 (WebCore::WebResourceLoader::identifier): 204 (WebCore::WebResourceLoader::reachedTerminalState): 205 (WebCore::WebResourceLoader::cancelled): 206 * loader/mac/WebLoader.mm: 207 (WebCore::WebResourceLoader::WebResourceLoader): 208 (WebCore::WebResourceLoader::releaseResources): 209 (WebCore::WebResourceLoader::load): 210 (WebCore::WebResourceLoader::frameLoader): 211 (WebCore::WebResourceLoader::willSendRequest): 212 (WebCore::WebResourceLoader::didReceiveAuthenticationChallenge): 213 (WebCore::WebResourceLoader::didCancelAuthenticationChallenge): 214 (WebCore::WebResourceLoader::didReceiveResponse): 215 (WebCore::WebResourceLoader::didReceiveData): 216 (WebCore::WebResourceLoader::didFinishLoading): 217 (WebCore::WebResourceLoader::didFinishLoadingOnePart): 218 (WebCore::WebResourceLoader::didFail): 219 (WebCore::WebResourceLoader::willCacheResponse): 220 (WebCore::WebResourceLoader::didCancel): 221 (WebCore::WebResourceLoader::cancel): 222 (WebCore::WebResourceLoader::cancelledError): 223 (WebCore::WebResourceLoader::delegate): 224 * loader/mac/WebMainResourceLoader.h: 225 * loader/mac/WebMainResourceLoader.mm: 226 (WebCore::MainResourceLoader::MainResourceLoader): 227 (WebCore::MainResourceLoader::create): 228 (WebCore::MainResourceLoader::receivedError): 229 (WebCore::MainResourceLoader::didCancel): 230 (WebCore::MainResourceLoader::interruptionForPolicyChangeError): 231 (WebCore::MainResourceLoader::isPostOrRedirectAfterPost): 232 (WebCore::MainResourceLoader::addData): 233 (WebCore::MainResourceLoader::willSendRequest): 234 (WebCore::MainResourceLoader::continueAfterContentPolicy): 235 (WebCore::MainResourceLoader::didReceiveResponse): 236 (WebCore::MainResourceLoader::didReceiveData): 237 (WebCore::MainResourceLoader::didFinishLoading): 238 (WebCore::MainResourceLoader::didFail): 239 (WebCore::MainResourceLoader::loadNow): 240 (WebCore::MainResourceLoader::policyDelegate): 241 * loader/mac/WebNetscapePlugInStreamLoader.h: 242 * loader/mac/WebNetscapePlugInStreamLoader.mm: 243 (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader): 244 (WebCore::NetscapePlugInStreamLoader::create): 245 (WebCore::NetscapePlugInStreamLoader::didReceiveResponse): 246 (WebCore::NetscapePlugInStreamLoader::didFinishLoading): 247 (WebCore::NetscapePlugInStreamLoader::didFail): 248 (WebCore::NetscapePlugInStreamLoader::didCancel): 249 * loader/mac/WebSubresourceLoader.h: 250 * loader/mac/WebSubresourceLoader.mm: 251 (-[WebCoreSubresourceHandle initWithLoader:]): 252 1 253 2006-10-23 Geoffrey Garen <ggaren@apple.com> 2 254 -
trunk/WebCore/WebCore.exp
r17206 r17238 120 120 .objc_class_name_WebDashboardRegion 121 121 .objc_class_name_WebDocumentLoader 122 .objc_class_name_WebFrameLoader123 122 .objc_class_name_WebPolicyDecider 124 123 .objc_class_name_WebScriptObject … … 132 131 _WebCoreShouldUseFontSmoothing 133 132 _WebCoreTextFloatWidth 134 __Z21isBackForwardLoadType13FrameLoadType135 133 __ZN7WebCore10StringImplD1Ev 134 __ZN7WebCore11FrameLoader11stopLoadingEP7NSError 135 __ZN7WebCore11FrameLoader11stopLoadingEv 136 __ZN7WebCore11FrameLoader12shouldReloadEP5NSURLS2_ 137 __ZN7WebCore11FrameLoader14detachChildrenEv 138 __ZN7WebCore11FrameLoader16detachFromParentEv 139 __ZN7WebCore11FrameLoader17actionInformationE13FrameLoadTypebP7NSEventP5NSURL 140 __ZN7WebCore11FrameLoader17actionInformationE14NavigationTypeP7NSEventP5NSURL 141 __ZN7WebCore11FrameLoader21addPlugInStreamLoaderEPNS_17WebResourceLoaderE 142 __ZN7WebCore11FrameLoader21commitProvisionalLoadEP12NSDictionary 143 __ZN7WebCore11FrameLoader22defersCallbacksChangedEv 144 __ZN7WebCore11FrameLoader23addExtraFieldsToRequestEP19NSMutableURLRequestbb 145 __ZN7WebCore11FrameLoader23reloadAllowingStaleDataEP8NSString 146 __ZN7WebCore11FrameLoader23timeOfLastCompletedLoadEv 147 __ZN7WebCore11FrameLoader24removePlugInStreamLoaderEPNS_17WebResourceLoaderE 148 __ZN7WebCore11FrameLoader25provisionalDocumentLoaderEv 149 __ZN7WebCore11FrameLoader4loadEP12NSURLRequest 150 __ZN7WebCore11FrameLoader4loadEP12NSURLRequestP12NSDictionary13FrameLoadTypeN3WTF10PassRefPtrINS_9FormStateEEE 151 __ZN7WebCore11FrameLoader4loadEP12NSURLRequestP8NSString 152 __ZN7WebCore11FrameLoader4loadEP17WebDocumentLoader 153 __ZN7WebCore11FrameLoader4loadEP17WebDocumentLoader13FrameLoadTypeN3WTF10PassRefPtrINS_9FormStateEEE 154 __ZN7WebCore11FrameLoader4loadEP5NSURLP8NSString13FrameLoadTypeS4_P7NSEventP10DOMElementP12NSDictionary 155 __ZN7WebCore11FrameLoader6reloadEv 156 __ZN7WebCore11FrameLoader8safeLoadEP5NSURL 136 157 __ZN7WebCore17WebResourceLoader14cancelledErrorEv 137 158 __ZN7WebCore17WebResourceLoader20inConnectionCallbackEv 138 __ZN7WebCore26NetscapePlugInStreamLoader6createEP14WebFrameLoaderP11objc_object 159 __ZN7WebCore21isBackForwardLoadTypeE13FrameLoadType 160 __ZN7WebCore26NetscapePlugInStreamLoader6createEPNS_5FrameEP11objc_object 161 __ZNK7WebCore11FrameLoader14documentLoaderEv 162 __ZNK7WebCore11FrameLoader15defersCallbacksEv 163 __ZNK7WebCore11FrameLoader15firstLayoutDoneEv 164 __ZNK7WebCore11FrameLoader20activeDocumentLoaderEv 165 __ZNK7WebCore11FrameLoader21isQuickRedirectComingEv 166 __ZNK7WebCore11FrameLoader6clientEv 167 __ZNK7WebCore11FrameLoader8loadTypeEv 139 168 __ZNK7WebCore17WebResourceLoader11frameLoaderEv 140 169 __ZNK7WebCore26NetscapePlugInStreamLoader6isDoneEv -
trunk/WebCore/WebCore.xcodeproj/project.pbxproj
r17230 r17238 376 376 65BF022F0974816300C43196 /* Frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 65BF022A0974816300C43196 /* Frame.h */; settings = {ATTRIBUTES = (Private, ); }; }; 377 377 65BF02300974816300C43196 /* FramePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 65BF022B0974816300C43196 /* FramePrivate.h */; }; 378 65BF02440974819000C43196 /* FrameMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 65BF023B0974819000C43196 /* FrameMac.h */; };378 65BF02440974819000C43196 /* FrameMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 65BF023B0974819000C43196 /* FrameMac.h */; settings = {ATTRIBUTES = (Private, ); }; }; 379 379 65BF02450974819000C43196 /* FrameMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 65BF023C0974819000C43196 /* FrameMac.mm */; }; 380 380 65C7F4320979E2620022E453 /* WebCorePageBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C7F4310979E2620022E453 /* WebCorePageBridge.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 515 515 85031B3C0A44EFC700F992E0 /* BeforeUnloadEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 85031B260A44EFC700F992E0 /* BeforeUnloadEvent.cpp */; }; 516 516 85031B3D0A44EFC700F992E0 /* BeforeUnloadEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 85031B270A44EFC700F992E0 /* BeforeUnloadEvent.h */; }; 517 85031B3E0A44EFC700F992E0 /* Clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 85031B280A44EFC700F992E0 /* Clipboard.h */; };517 85031B3E0A44EFC700F992E0 /* Clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 85031B280A44EFC700F992E0 /* Clipboard.h */; settings = {ATTRIBUTES = (Private, ); }; }; 518 518 85031B3F0A44EFC700F992E0 /* ClipboardEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 85031B290A44EFC700F992E0 /* ClipboardEvent.cpp */; }; 519 519 85031B400A44EFC700F992E0 /* ClipboardEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 85031B2A0A44EFC700F992E0 /* ClipboardEvent.h */; }; … … 1400 1400 935C476309AC4CE600A6AAB4 /* MouseEventWithHitTestResults.h in Headers */ = {isa = PBXBuildFile; fileRef = 935C476209AC4CE600A6AAB4 /* MouseEventWithHitTestResults.h */; }; 1401 1401 935C476809AC4D4300A6AAB4 /* PlatformKeyboardEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 935C476609AC4D4300A6AAB4 /* PlatformKeyboardEvent.h */; }; 1402 935C476909AC4D4300A6AAB4 /* PlatformMouseEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 935C476709AC4D4300A6AAB4 /* PlatformMouseEvent.h */; };1402 935C476909AC4D4300A6AAB4 /* PlatformMouseEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 935C476709AC4D4300A6AAB4 /* PlatformMouseEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1403 1403 935C476B09AC4D4F00A6AAB4 /* PlatformWheelEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 935C476A09AC4D4F00A6AAB4 /* PlatformWheelEvent.h */; }; 1404 1404 935C476D09AC4D6300A6AAB4 /* FoundationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 935C476C09AC4D6300A6AAB4 /* FoundationExtras.h */; }; … … 1533 1533 93F199E008245E59001E9ABC /* Slider.h in Headers */ = {isa = PBXBuildFile; fileRef = BC86FB8D061F5C23006BB822 /* Slider.h */; }; 1534 1534 93F199E508245E59001E9ABC /* HTMLCanvasElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F6A3D60663BF04004D2919 /* HTMLCanvasElement.h */; }; 1535 93F199E708245E59001E9ABC /* ClipboardMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D90660B0665D937006B6F1A /* ClipboardMac.h */; };1535 93F199E708245E59001E9ABC /* ClipboardMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D90660B0665D937006B6F1A /* ClipboardMac.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1536 1536 93F199EC08245E59001E9ABC /* XSLStyleSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = BC06F24A06D18A7E004A6FA3 /* XSLStyleSheet.h */; }; 1537 1537 93F199ED08245E59001E9ABC /* XSLTProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC06F24C06D18A7E004A6FA3 /* XSLTProcessor.h */; }; … … 2531 2531 BC3FCAA90AC3DB5800BA54AD /* PlatformScrollBar.h in Headers */ = {isa = PBXBuildFile; fileRef = BC3FCAA80AC3DB5800BA54AD /* PlatformScrollBar.h */; }; 2532 2532 BC6B7BAF0993603C0052867B /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC6B7BAE0993603C0052867B /* Image.cpp */; }; 2533 BC6B7ECF0998AC7F0052867B /* ImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6B7ECE0998AC7F0052867B /* ImageSource.h */; };2533 BC6B7ECF0998AC7F0052867B /* ImageSource.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6B7ECE0998AC7F0052867B /* ImageSource.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2534 2534 BC6D6DD209AF906600F59759 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC6D6DD009AF906600F59759 /* Font.cpp */; }; 2535 2535 BC6D6DD309AF906600F59759 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6D6DD109AF906600F59759 /* Font.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 2542 2542 BC6DB4D40A1AFEEF00E5CD14 /* GlyphMapMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC6DB4D30A1AFEEF00E5CD14 /* GlyphMapMac.cpp */; }; 2543 2543 BC73E25D0978682700EDFF8A /* FloatSize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC73E25B0978682700EDFF8A /* FloatSize.cpp */; }; 2544 BC73E25E0978682700EDFF8A /* FloatSize.h in Headers */ = {isa = PBXBuildFile; fileRef = BC73E25C0978682700EDFF8A /* FloatSize.h */; };2544 BC73E25E0978682700EDFF8A /* FloatSize.h in Headers */ = {isa = PBXBuildFile; fileRef = BC73E25C0978682700EDFF8A /* FloatSize.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2545 2545 BC73E3190978AFFC00EDFF8A /* IntPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = BC73E3180978AFFB00EDFF8A /* IntPoint.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2546 2546 BC73E3920978CED700EDFF8A /* FloatPoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC73E3900978CED700EDFF8A /* FloatPoint.cpp */; }; … … 2604 2604 BCCD74DC0A4C8D35005FDA6D /* HTMLViewSourceDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = BCCD74DB0A4C8D35005FDA6D /* HTMLViewSourceDocument.h */; }; 2605 2605 BCCD74E50A4C8DDF005FDA6D /* HTMLViewSourceDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCCD74E40A4C8DDF005FDA6D /* HTMLViewSourceDocument.cpp */; }; 2606 BCD75ABC0989A446003E28DF /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = BCD75ABB0989A446003E28DF /* Image.h */; };2606 BCD75ABC0989A446003E28DF /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = BCD75ABB0989A446003E28DF /* Image.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2607 2607 BCEA478F097CAAC80094C9E4 /* CSSComputedStyleDeclaration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCEA477C097CAAC80094C9E4 /* CSSComputedStyleDeclaration.cpp */; }; 2608 2608 BCEA4790097CAAC80094C9E4 /* CSSComputedStyleDeclaration.h in Headers */ = {isa = PBXBuildFile; fileRef = BCEA477D097CAAC80094C9E4 /* CSSComputedStyleDeclaration.h */; }; -
trunk/WebCore/bridge/mac/WebCoreFrameBridge.h
r17236 r17238 32 32 33 33 namespace WebCore { 34 class EditorClient; 35 class Element; 36 class FrameLoader; 34 37 class FrameMac; 35 class Element;36 class EditorClient;37 38 } 38 39 39 typedef WebCore:: FrameMac WebCoreMacFrame;40 typedef WebCore::EditorClient WebCoreEditorClient; 40 41 typedef WebCore::Element WebCoreElement; 41 typedef WebCore::EditorClient WebCoreEditorClient; 42 typedef WebCore::FrameLoader WebCoreFrameLoader; 43 typedef WebCore::FrameMac WebCoreFrameMac; 42 44 43 45 #else 44 46 45 47 @class NSMenu; 46 @class WebCore MacFrame;48 @class WebCoreEditorClient; 47 49 @class WebCoreElement; 48 @class WebCoreEditorClient; 50 @class WebCoreFrameLoader; 51 @class WebCoreFrameMac; 49 52 50 53 #endif … … 63 66 @class WebCoreSettings; 64 67 @class WebFrame; 65 @class WebFrameLoader;66 68 @class WebScriptObject; 67 69 @class WebView; … … 187 189 @interface WebCoreFrameBridge : NSObject 188 190 { 189 WebCore MacFrame *m_frame;190 Web FrameLoader *_frameLoader;191 WebCoreFrameMac* m_frame; 192 WebCoreFrameLoader* m_frameLoader; 191 193 192 194 BOOL _shouldCreateRenderers; … … 518 520 519 521 - (void)setFrameLoaderClient:(id<WebFrameLoaderClient>)client; 520 - (Web FrameLoader *)frameLoader;522 - (WebCoreFrameLoader *)frameLoader; 521 523 522 524 - (void)setTitle:(NSString *)title; … … 549 551 // The encoding is the standard form encoding for uploading files. 550 552 551 @class WebFrameLoader;552 553 553 @protocol WebCoreFrameBridge 554 554 … … 715 715 716 716 @interface WebCoreFrameBridge (WebCoreInternalUse) 717 - (WebCore MacFrame*)impl;717 - (WebCoreFrameMac*)impl; 718 718 @end 719 719 -
trunk/WebCore/bridge/mac/WebCoreFrameBridge.mm
r17206 r17238 485 485 486 486 m_frame = new FrameMac([page impl], 0, client); 487 m_frameLoader = new FrameLoader(m_frame); 487 488 m_frame->setBridge(self); 488 489 _shouldCreateRenderers = YES; … … 494 495 initializedObjectCacheSize = true; 495 496 } 496 497 _frameLoader = [[WebFrameLoader alloc] initWithFrameBridge:self];498 497 499 498 return self; … … 506 505 507 506 m_frame = new FrameMac(ownerElement->document()->frame()->page(), ownerElement, client); 507 m_frameLoader = new FrameLoader(m_frame); 508 508 m_frame->setBridge(self); 509 509 _shouldCreateRenderers = YES; 510 510 511 _frameLoader = [[WebFrameLoader alloc] initWithFrameBridge:self];512 513 511 return self; 514 512 } … … 527 525 { 528 526 ASSERT(_closed); 529 530 [_frameLoader release];531 _frameLoader = nil;532 533 527 [super dealloc]; 534 528 } … … 544 538 [self removeFromFrame]; 545 539 [self clearFrame]; 546 [_frameLoader release];547 _frameLoader = nil;548 540 _closed = YES; 549 541 } … … 758 750 { 759 751 m_frame = 0; 752 delete m_frameLoader; 753 m_frameLoader = 0; 760 754 } 761 755 … … 2620 2614 - (void)setFrameLoaderClient:(id<WebFrameLoaderClient>)client 2621 2615 { 2622 [_frameLoader setFrameLoaderClient:client];2623 } 2624 2625 - ( WebFrameLoader *)frameLoader2626 { 2627 return _frameLoader;2616 m_frameLoader->setFrameLoaderClient(client); 2617 } 2618 2619 - (FrameLoader *)frameLoader 2620 { 2621 return m_frameLoader; 2628 2622 } 2629 2623 … … 2674 2668 - (void)setTitle:(NSString *)title 2675 2669 { 2676 [[[self frameLoader] documentLoader] setTitle:stringByCollapsingNonPrintingCharacters(title)]; 2670 if (!m_frame) 2671 return; 2672 [m_frameLoader->documentLoader() setTitle:stringByCollapsingNonPrintingCharacters(title)]; 2677 2673 } 2678 2674 2679 2675 - (void)didFirstLayout 2680 2676 { 2681 [[self frameLoader] didFirstLayout]; 2677 if (!m_frame) 2678 return; 2679 m_frameLoader->didFirstLayout(); 2682 2680 } 2683 2681 2684 2682 - (void)notifyIconChanged:(NSURL*)iconURL 2685 2683 { 2686 [[self frameLoader] _notifyIconChanged:iconURL]; 2684 if (!m_frame) 2685 return; 2686 m_frameLoader->notifyIconChanged(iconURL); 2687 2687 } 2688 2688 2689 2689 - (NSURL*)originalRequestURL 2690 2690 { 2691 return [[ [[self frameLoader] activeDocumentLoader]initialRequest] URL];2691 return [[m_frameLoader->activeDocumentLoader() initialRequest] URL]; 2692 2692 } 2693 2693 2694 2694 - (BOOL)isLoadTypeReload 2695 2695 { 2696 return [[self frameLoader] loadType]== FrameLoadTypeReload;2696 return m_frameLoader->loadType() == FrameLoadTypeReload; 2697 2697 } 2698 2698 2699 2699 - (void)frameDetached 2700 2700 { 2701 [[self frameLoader] stopLoading];2702 [[self frameLoader] detachFromParent];2701 m_frameLoader->stopLoading(); 2702 m_frameLoader->detachFromParent(); 2703 2703 } 2704 2704 2705 2705 - (void)tokenizerProcessedData 2706 2706 { 2707 [[self frameLoader] checkLoadComplete];2707 m_frameLoader->checkLoadComplete(); 2708 2708 } 2709 2709 … … 2711 2711 { 2712 2712 // Set the encoding. This only needs to be done once, but it's harmless to do it again later. 2713 NSString *encoding = [ [[self frameLoader] documentLoader]overrideEncoding];2713 NSString *encoding = [m_frameLoader->documentLoader() overrideEncoding]; 2714 2714 BOOL userChosen = encoding != nil; 2715 2715 if (encoding == nil) { … … 2733 2733 [self canLoadURL:URL fromReferrer:[self referrer] hideReferrer:&hideReferrer]; 2734 2734 2735 return SubresourceLoader::create( [self frameLoader], resourceLoader,2735 return SubresourceLoader::create(m_frame, resourceLoader, 2736 2736 method, URL, customHeaders, hideReferrer ? nil : [self referrer]); 2737 2737 } … … 2740 2740 { 2741 2741 // FIXME: If the WebKit client changes or cancels the request, WebCore does not respect this and continues the load. 2742 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:URL]; 2742 2743 NSError *error; 2743 2744 id identifier; 2744 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:URL]; 2745 [[self frameLoader] requestFromDelegateForRequest:request identifier:&identifier error:&error]; 2746 [[self frameLoader] sendRemainingDelegateMessagesWithIdentifier:identifier response:response length:[data length] error:error]; 2745 m_frameLoader->requestFromDelegate(request, identifier, error); 2746 m_frameLoader->sendRemainingDelegateMessages(identifier, response, [data length], error); 2747 2747 [request release]; 2748 2748 } … … 2761 2761 [self canLoadURL:URL fromReferrer:[self referrer] hideReferrer:&hideReferrer]; 2762 2762 2763 return SubresourceLoader::create( [self frameLoader], resourceLoader,2763 return SubresourceLoader::create(m_frame, resourceLoader, 2764 2764 method, URL, customHeaders, postData, hideReferrer ? nil : [self referrer]); 2765 2765 } … … 2767 2767 - (void)reportClientRedirectToURL:(NSURL *)URL delay:(NSTimeInterval)seconds fireDate:(NSDate *)date lockHistory:(BOOL)lockHistory isJavaScriptFormAction:(BOOL)isJavaScriptFormAction 2768 2768 { 2769 [[self frameLoader] clientRedirectedTo:URL delay:seconds fireDate:date lockHistory:lockHistory isJavaScriptFormAction:(BOOL)isJavaScriptFormAction];2769 m_frameLoader->clientRedirected(URL, seconds, date, lockHistory, isJavaScriptFormAction); 2770 2770 } 2771 2771 2772 2772 - (void)reportClientRedirectCancelled:(BOOL)cancelWithLoadInProgress 2773 2773 { 2774 [[self frameLoader] clientRedirectCancelledOrFinished:cancelWithLoadInProgress];2774 m_frameLoader->clientRedirectCancelledOrFinished(cancelWithLoadInProgress); 2775 2775 } 2776 2776 … … 2781 2781 return; 2782 2782 2783 if ([target length] == 0) {2783 if ([target length] == 0) 2784 2784 target = nil; 2785 }2786 2785 2787 2786 WebCoreFrameBridge *targetFrame = [self findFrameNamed:target]; 2788 if (![self canTargetLoadInFrame:targetFrame]) { 2789 return; 2790 } 2787 if (![self canTargetLoadInFrame:targetFrame]) 2788 return; 2791 2789 2792 2790 FrameLoadType loadType; 2793 2794 2791 if (reload) 2795 2792 loadType = FrameLoadTypeReload; … … 2798 2795 else 2799 2796 loadType = FrameLoadTypeStandard; 2800 [[self frameLoader] loadURL:URL referrer:(hideReferrer ? nil : referrer) loadType:loadType target:target triggeringEvent:event form:form formValues:values];2801 2802 if (targetFrame != nil && self != targetFrame) {2797 m_frameLoader->load(URL, (hideReferrer ? nil : referrer), loadType, target, event, form, values); 2798 2799 if (targetFrame != nil && self != targetFrame) 2803 2800 [targetFrame activateWindow]; 2804 }2805 2801 } 2806 2802 … … 2818 2814 return; 2819 2815 2820 [[self frameLoader] postWithURL:URL referrer:(hideReferrer ? nil : referrer) target:target 2821 data:postData contentType:contentType 2822 triggeringEvent:event form:form formValues:values]; 2816 m_frameLoader->post(URL, (hideReferrer ? nil : referrer), target, postData, contentType, event, form, values); 2823 2817 2824 2818 if (targetFrame != nil && self != targetFrame) … … 2852 2846 [request setCachePolicy:NSURLRequestReloadIgnoringCacheData]; 2853 2847 else 2854 [request setCachePolicy:[[ [[self frameLoader] documentLoader]request] cachePolicy]];2848 [request setCachePolicy:[[m_frameLoader->documentLoader() request] cachePolicy]]; 2855 2849 if (!hideReferrer) 2856 2850 setHTTPReferrer(request, [self referrer]); 2857 2851 2858 2852 WebCorePageBridge *page = [self page]; 2859 [request setMainDocumentURL:[[[[ [page mainFrame] frameLoader] documentLoader]request] URL]];2853 [request setMainDocumentURL:[[[[page mainFrame] frameLoader]->documentLoader() request] URL]]; 2860 2854 [request setValue:[self userAgentForURL:[request URL]] forHTTPHeaderField:@"User-Agent"]; 2861 2855 2862 2856 NSError *error = nil; 2863 2857 id identifier = nil; 2864 NSURLRequest *newRequest = [[self frameLoader] requestFromDelegateForRequest:request identifier:&identifier error:&error];2858 NSURLRequest *newRequest = m_frameLoader->requestFromDelegate(request, identifier, error); 2865 2859 2866 2860 NSURLResponse *response = nil; … … 2891 2885 } 2892 2886 2893 [[self frameLoader] sendRemainingDelegateMessagesWithIdentifier:identifier response:response length:[result length] error:error];2887 m_frameLoader->sendRemainingDelegateMessages(identifier, response, [result length], error); 2894 2888 [request release]; 2895 2889 … … 2900 2894 - (NSString *)incomingReferrer 2901 2895 { 2902 return [[ [[self frameLoader] documentLoader]request] valueForHTTPHeaderField:@"Referer"];2896 return [[m_frameLoader->documentLoader() request] valueForHTTPHeaderField:@"Referer"]; 2903 2897 } 2904 2898 2905 2899 - (BOOL)isReloading 2906 2900 { 2907 return [[ [[self frameLoader] documentLoader]request] cachePolicy] == NSURLRequestReloadIgnoringCacheData;2901 return [[m_frameLoader->documentLoader() request] cachePolicy] == NSURLRequestReloadIgnoringCacheData; 2908 2902 } 2909 2903 2910 2904 - (void)handledOnloadEvents 2911 2905 { 2912 [ [[self frameLoader] client]_dispatchDidHandleOnloadEventsForFrame];2906 [m_frameLoader->client() _dispatchDidHandleOnloadEventsForFrame]; 2913 2907 } 2914 2908 2915 2909 - (NSURLResponse*)mainResourceURLResponse 2916 2910 { 2917 return [ [[self frameLoader] documentLoader]response];2911 return [m_frameLoader->documentLoader() response]; 2918 2912 } 2919 2913 … … 2922 2916 NSURL *url = [[NSURL alloc] initWithString:@""]; 2923 2917 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; 2924 [[self frameLoader] loadRequest:request];2918 m_frameLoader->load(request); 2925 2919 [request release]; 2926 2920 [url release]; -
trunk/WebCore/loader/mac/WebDocumentLoader.h
r16967 r17238 29 29 #import <Cocoa/Cocoa.h> 30 30 31 @class WebFrameLoader; 31 namespace WebCore { 32 class Frame; 33 class FrameLoader; 34 } 32 35 33 36 @interface WebDocumentLoader : NSObject 34 37 { 35 38 @public 36 Web FrameLoader *frameLoader;39 WebCore::Frame* m_frame; 37 40 38 41 NSData *mainResourceData; … … 89 92 90 93 - (id)initWithRequest:(NSURLRequest *)request; 91 - (void)setFrame Loader:(WebFrameLoader *)fl;92 - (Web FrameLoader*)frameLoader;94 - (void)setFrame:(WebCore::Frame*)frame; 95 - (WebCore::FrameLoader*)frameLoader; 93 96 - (void)setMainResourceData:(NSData *)data; 94 97 - (NSData *)mainResourceData; … … 119 122 - (void)mainReceivedError:(NSError *)error complete:(BOOL)isComplete; 120 123 - (void)setResponse:(NSURLResponse *)resp; 121 - (void)detachFromFrameLoader; 124 - (void)attachToFrame; 125 - (void)detachFromFrame; 122 126 - (void)prepareForLoadStart; 123 127 - (double)loadingStartedTime; -
trunk/WebCore/loader/mac/WebDocumentLoader.mm
r16999 r17238 30 30 #import "WebDocumentLoader.h" 31 31 32 #import <wtf/Assertions.h> 33 #import "WebFrameLoader.h" 34 #import "WebDataProtocol.h" 32 #import "FrameMac.h" 35 33 #import "WebCoreFrameBridge.h" 36 34 #import "WebCoreSystemInterface.h" 35 #import "WebDataProtocol.h" 36 #import "WebFrameLoader.h" 37 #import <wtf/Assertions.h> 38 39 using namespace WebCore; 37 40 38 41 @implementation WebDocumentLoader … … 52 55 } 53 56 57 - (FrameLoader*)frameLoader 58 { 59 if (!m_frame) 60 return 0; 61 return [Mac(m_frame)->bridge() frameLoader]; 62 } 63 54 64 - (void)dealloc 55 65 { 56 ASSERT([frameLoader activeDocumentLoader] != self || ![frameLoader isLoading]); 57 66 ASSERT(!m_frame || [self frameLoader]->activeDocumentLoader() != self || ![self frameLoader]->isLoading()); 58 67 59 68 [mainResourceData release]; … … 72 81 73 82 74 - (void)setFrameLoader:(WebFrameLoader *)fl75 {76 ASSERT(fl);77 ASSERT(!frameLoader);78 79 frameLoader = fl;80 }81 82 - (WebFrameLoader *)frameLoader83 {84 return frameLoader;85 }86 87 83 - (void)setMainResourceData:(NSData *)data 88 84 { … … 94 90 - (NSData *)mainResourceData 95 91 { 96 return mainResourceData != nil ? mainResourceData : [ frameLoader mainResourceData];92 return mainResourceData != nil ? mainResourceData : [self frameLoader]->mainResourceData(); 97 93 } 98 94 … … 175 171 // Also, don't send it when replacing unreachable URLs with alternate content. 176 172 if (!handlingUnreachableURL && ![[oldRequest URL] isEqual:[req URL]]) 177 [ frameLoader didReceiveServerRedirectForProvisionalLoadForFrame];173 [self frameLoader]->didReceiveServerRedirectForProvisionalLoadForFrame(); 178 174 179 175 [oldRequest release]; … … 194 190 - (WebCoreFrameBridge *)bridge 195 191 { 196 return [frameLoader bridge]; 192 if (!m_frame) 193 return nil; 194 return Mac(m_frame)->bridge(); 197 195 } 198 196 … … 203 201 mainDocumentError = error; 204 202 205 [ frameLoader documentLoader:self setMainDocumentError:error];203 [self frameLoader]->setMainDocumentError(self, error); 206 204 } 207 205 … … 219 217 - (void)mainReceivedError:(NSError *)error complete:(BOOL)isComplete 220 218 { 221 if (! frameLoader)219 if (![self frameLoader]) 222 220 return; 223 221 224 222 [self setMainDocumentError:error]; 225 223 226 if (isComplete) { 227 [frameLoader documentLoader:self mainReceivedCompleteError:error]; 228 } 224 if (isComplete) 225 [self frameLoader]->mainReceivedCompleteError(self, error); 229 226 } 230 227 … … 243 240 return; 244 241 242 RefPtr<Frame> protect(m_frame); 245 243 [self retain]; 246 244 247 245 stopping = YES; 248 249 if ([frameLoader isLoadingMainResource]) { 246 247 FrameLoader* frameLoader = [self frameLoader]; 248 249 if (frameLoader->isLoadingMainResource()) 250 250 // Stop the main resource loader and let it send the cancelled message. 251 [frameLoader cancelMainResourceLoad];252 } else if ([frameLoader isLoadingSubresources]) {251 frameLoader->cancelMainResourceLoad(); 252 else if (frameLoader->isLoadingSubresources()) 253 253 // The main resource loader already finished loading. Set the cancelled error on the 254 254 // document and let the subresourceLoaders send individual cancelled messages below. 255 [self setMainDocumentError: [frameLoader cancelledErrorWithRequest:request]];256 } else {255 [self setMainDocumentError:frameLoader->cancelledError(request)]; 256 else 257 257 // If there are no resource loaders, we need to manufacture a cancelled message. 258 258 // (A back/forward navigation has no resource loaders because its resources are cached.) 259 [self mainReceivedError:[frameLoader cancelledErrorWithRequest:request] complete:YES]; 260 } 261 262 [frameLoader stopLoadingSubresources]; 263 [frameLoader stopLoadingPlugIns]; 259 [self mainReceivedError:frameLoader->cancelledError(request) complete:YES]; 260 261 frameLoader->stopLoadingSubresources(); 262 frameLoader->stopLoadingPlugIns(); 264 263 265 264 stopping = NO; … … 270 269 - (void)setupForReplace 271 270 { 272 [ frameLoader setupForReplace];271 [self frameLoader]->setupForReplace(); 273 272 committed = NO; 274 273 } … … 278 277 if (gotFirstByte && !committed) { 279 278 committed = YES; 280 [ frameLoader commitProvisionalLoad:nil];279 [self frameLoader]->commitProvisionalLoad(nil); 281 280 } 282 281 } … … 286 285 gotFirstByte = YES; 287 286 [self commitIfReady]; 288 [ frameLoader finishedLoadingDocument:self];287 [self frameLoader]->finishedLoadingDocument(self); 289 288 [[self bridge] end]; 290 289 } … … 317 316 [self commitIfReady]; 318 317 319 [frameLoader committedLoadWithDocumentLoader:self data:data]; 318 if (FrameLoader* frameLoader = [self frameLoader]) 319 frameLoader->committedLoad(self, data); 320 320 321 321 [self release]; … … 324 324 - (BOOL)doesProgressiveLoadWithMIMEType:(NSString *)MIMEType 325 325 { 326 return ![ frameLoader isReplacing]|| [MIMEType isEqualToString:@"text/html"];326 return ![self frameLoader]->isReplacing() || [MIMEType isEqualToString:@"text/html"]; 327 327 } 328 328 … … 343 343 344 344 if (![self doesProgressiveLoadWithMIMEType:oldMIMEType]) { 345 [ frameLoader revertToProvisionalWithDocumentLoader:self];345 [self frameLoader]->revertToProvisional(self); 346 346 [self setupForReplace]; 347 347 [self commitLoadWithData:[self mainResourceData]]; 348 348 } 349 349 350 [ frameLoader finishedLoadingDocument:self];350 [self frameLoader]->finishedLoadingDocument(self); 351 351 [[self bridge] end]; 352 352 353 [ frameLoader setReplacing];353 [self frameLoader]->setReplacing(); 354 354 gotFirstByte = NO; 355 355 356 356 if ([self doesProgressiveLoadWithMIMEType:newMIMEType]) { 357 [ frameLoader revertToProvisionalWithDocumentLoader:self];357 [self frameLoader]->revertToProvisional(self); 358 358 [self setupForReplace]; 359 359 } 360 360 361 [ frameLoader stopLoadingSubresources];362 [ frameLoader stopLoadingPlugIns];363 364 [ frameLoader finalSetupForReplaceWithDocumentLoader:self];361 [self frameLoader]->stopLoadingSubresources(); 362 [self frameLoader]->stopLoadingPlugIns(); 363 364 [self frameLoader]->finalSetupForReplace(self); 365 365 } 366 366 367 367 - (void)updateLoading 368 368 { 369 ASSERT(self == [ frameLoader activeDocumentLoader]);370 371 [self setLoading:[ frameLoader isLoading]];369 ASSERT(self == [self frameLoader]->activeDocumentLoader()); 370 371 [self setLoading:[self frameLoader]->isLoading()]; 372 372 } 373 373 … … 377 377 } 378 378 379 - (void)detachFromFrameLoader 380 { 381 frameLoader = nil; 379 - (void)setFrame:(Frame*)frame 380 { 381 if (m_frame == frame) 382 return; 383 ASSERT(frame && !m_frame); 384 m_frame = frame; 385 [self attachToFrame]; 386 } 387 388 - (void)attachToFrame 389 { 390 ASSERT(m_frame); 391 } 392 393 - (void)detachFromFrame 394 { 395 ASSERT(m_frame); 396 m_frame = 0; 382 397 } 383 398 … … 386 401 ASSERT(!stopping); 387 402 [self setPrimaryLoadComplete:NO]; 388 ASSERT( frameLoader != nil);403 ASSERT([self frameLoader]); 389 404 [self clearErrors]; 390 405 … … 394 409 [self setLoading:YES]; 395 410 396 [ frameLoader prepareForLoadStart];411 [self frameLoader]->prepareForLoadStart(); 397 412 } 398 413 … … 417 432 418 433 if (flag) { 419 if ([ frameLoader isLoadingMainResource]) {420 [self setMainResourceData:[ frameLoader mainResourceData]];421 [ frameLoader releaseMainResourceLoader];434 if ([self frameLoader]->isLoadingMainResource()) { 435 [self setMainResourceData:[self frameLoader]->mainResourceData()]; 436 [self frameLoader]->releaseMainResourceLoader(); 422 437 } 423 438 … … 430 445 // Once a frame has loaded, we no longer need to consider subresources, 431 446 // but we still need to consider subframes. 432 if ([ frameLoader state]!= WebFrameStateComplete) {447 if ([self frameLoader]->state() != WebFrameStateComplete) { 433 448 if (!primaryLoadComplete && [self isLoading]) 434 449 return YES; 435 if ([ frameLoader isLoadingSubresources])450 if ([self frameLoader]->isLoadingSubresources()) 436 451 return YES; 437 if (![[ frameLoaderbridge] doneProcessingData])452 if (![[self bridge] doneProcessingData]) 438 453 return YES; 439 454 } 440 455 441 return [ frameLoader subframeIsLoading];456 return [self frameLoader]->subframeIsLoading(); 442 457 } 443 458 … … 513 528 514 529 if ([trimmed length] != 0 && ![pageTitle isEqualToString:trimmed]) { 515 [ frameLoader willChangeTitleForDocument:self];530 [self frameLoader]->willChangeTitle(self); 516 531 [pageTitle release]; 517 532 pageTitle = [trimmed copy]; 518 [ frameLoader didChangeTitleForDocument:self];533 [self frameLoader]->didChangeTitle(self); 519 534 } 520 535 -
trunk/WebCore/loader/mac/WebFrameLoader.h
r17206 r17238 28 28 29 29 #import "FrameLoaderTypes.h" 30 #import <Cocoa/Cocoa.h>30 #import "RetainPtr.h" 31 31 #import <wtf/Forward.h> 32 32 #import <wtf/HashSet.h> 33 #import <wtf/Noncopyable.h> 33 34 #import <wtf/RefPtr.h> 34 #import <wtf/Vector.h> 35 36 @class DOMElement; 37 @class WebCoreFrameBridge; 38 @class WebCoreFrameLoaderAsDelegate; 39 @class WebDocumentLoader; 40 @class WebPolicyDecider; 41 @protocol WebFrameLoaderClient; 35 42 36 43 namespace WebCore { 44 37 45 class FormState; 46 class Frame; 38 47 class MainResourceLoader; 39 48 class WebResourceLoader; 49 50 bool isBackForwardLoadType(FrameLoadType); 51 52 class FrameLoader : Noncopyable { 53 public: 54 FrameLoader(Frame*); 55 ~FrameLoader(); 56 57 Frame* frame() const { return m_frame; } 58 59 void addPlugInStreamLoader(WebResourceLoader*); 60 void removePlugInStreamLoader(WebResourceLoader*); 61 void stopLoadingPlugIns(); 62 bool isLoadingMainResource() const; 63 bool isLoadingSubresources() const; 64 bool isLoading() const; 65 void stopLoadingSubresources(); 66 void addSubresourceLoader(WebResourceLoader*); 67 void removeSubresourceLoader(WebResourceLoader*); 68 NSData *mainResourceData() const; 69 void releaseMainResourceLoader(); 70 void cancelMainResourceLoad(); 71 void stopLoading(NSError *); 72 void stopLoading(); 73 74 WebDocumentLoader *activeDocumentLoader() const; 75 WebDocumentLoader *documentLoader() const; 76 WebDocumentLoader *provisionalDocumentLoader(); 77 WebFrameState state() const; 78 void setupForReplace(); 79 static double timeOfLastCompletedLoad(); 80 81 bool defersCallbacks() const; 82 void defersCallbacksChanged(); 83 id identifierForInitialRequest(NSURLRequest *); 84 NSURLRequest *willSendRequest(WebResourceLoader*, NSMutableURLRequest *, NSURLResponse *redirectResponse); 85 void didReceiveAuthenticationChallenge(WebResourceLoader*, NSURLAuthenticationChallenge *); 86 void didCancelAuthenticationChallenge(WebResourceLoader*, NSURLAuthenticationChallenge *); 87 void didReceiveResponse(WebResourceLoader*, NSURLResponse *); 88 void didReceiveData(WebResourceLoader*, NSData *, int lengthReceived); 89 void didFinishLoad(WebResourceLoader*); 90 void didFailToLoad(WebResourceLoader*, NSError *); 91 bool privateBrowsingEnabled() const; 92 NSURLRequest *originalRequest() const; 93 void receivedMainResourceError(NSError *, bool isComplete); 94 NSURLRequest *initialRequest() const; 95 void receivedData(NSData *); 96 void setRequest(NSURLRequest *); 97 void download(NSURLConnection *, NSURLRequest *request, NSURLResponse *, id proxy); 98 void handleFallbackContent(); 99 bool isStopping() const; 100 void setupForReplaceByMIMEType(NSString *newMIMEType); 101 void setResponse(NSURLResponse *); 102 103 void finishedLoading(); 104 NSURL *URL() const; 105 106 NSError *cancelledError(NSURLRequest *) const; 107 NSError *fileDoesNotExistError(NSURLResponse *) const; 108 bool willUseArchive(WebResourceLoader*, NSURLRequest *, NSURL *) const; 109 bool isArchiveLoadPending(WebResourceLoader*) const; 110 void cancelPendingArchiveLoad(WebResourceLoader*); 111 void cannotShowMIMEType(NSURLResponse *); 112 NSError *interruptionForPolicyChangeError(NSURLRequest *); 113 bool isHostedByObjectElement() const; 114 bool isLoadingMainFrame() const; 115 bool canShowMIMEType(NSString *MIMEType) const; 116 bool representationExistsForURLScheme(NSString *URLScheme); 117 NSString *generatedMIMETypeForURLScheme(NSString *URLScheme); 118 void notifyIconChanged(NSURL *iconURL); 119 void checkNavigationPolicy(NSURLRequest *newRequest, id continuationObject, SEL continuationSelector); 120 void checkContentPolicy(NSString *MIMEType, id continuationObject, SEL continuationSelector); 121 void cancelContentPolicyCheck(); 122 void reload(); 123 void reloadAllowingStaleData(NSString *overrideEncoding); 124 void load(NSURLRequest *, NSDictionary *triggeringAaction, FrameLoadType, PassRefPtr<FormState>); 125 126 void didReceiveServerRedirectForProvisionalLoadForFrame(); 127 void finishedLoadingDocument(WebDocumentLoader *); 128 void committedLoad(WebDocumentLoader *, NSData *data); 129 bool isReplacing() const; 130 void setReplacing(); 131 void revertToProvisional(WebDocumentLoader *); 132 void setMainDocumentError(WebDocumentLoader *, NSError *); 133 void mainReceivedCompleteError(WebDocumentLoader *, NSError *); 134 void finalSetupForReplace(WebDocumentLoader *); 135 void prepareForLoadStart(); 136 bool subframeIsLoading() const; 137 void willChangeTitle(WebDocumentLoader *); 138 void didChangeTitle(WebDocumentLoader *); 139 140 FrameLoadType loadType() const; 141 142 void load(WebDocumentLoader *); 143 void load(WebDocumentLoader *, FrameLoadType, PassRefPtr<FormState>); 144 145 void didFirstLayout(); 146 bool firstLayoutDone() const; 147 148 void clientRedirectCancelledOrFinished(bool cancelWithLoadInProgress); 149 void clientRedirected(NSURL *, double delay, NSDate *fireDate, bool lockHistory, bool isJavaScriptFormAction); 150 void load(NSURL *, NSString *referrer, FrameLoadType loadType, NSString *target, NSEvent *event, DOMElement *form, NSDictionary *formValues); 151 void commitProvisionalLoad(NSDictionary *pageCache); 152 bool isQuickRedirectComing() const; 153 bool shouldReload(NSURL *currentURL, NSURL *destinationURL); 154 155 void sendRemainingDelegateMessages(id identifier, NSURLResponse *, unsigned length, NSError *); 156 NSURLRequest *requestFromDelegate(NSURLRequest *, id& identifier, NSError *& error); 157 void load(NSURLRequest *); 158 void load(NSURLRequest *, NSString *frameName); 159 void post(NSURL *, NSString *referrer, NSString *target, NSArray *postData, NSString *contentType, NSEvent *, DOMElement *form, NSDictionary *formValues); 160 161 void checkLoadComplete(); 162 void detachFromParent(); 163 void safeLoad(NSURL *); 164 void detachChildren(); 165 void addExtraFieldsToRequest(NSMutableURLRequest *, bool isMainResource, bool alwaysFromRequest); 166 NSDictionary *actionInformation(NavigationType, NSEvent *, NSURL *); 167 NSDictionary *actionInformation(FrameLoadType loadType, bool isFormSubmission, NSEvent *, NSURL *); 168 169 void setFrameLoaderClient(id <WebFrameLoaderClient>); 170 id <WebFrameLoaderClient> client() const; 171 172 void continueAfterWillSubmitForm(WebPolicyAction); 173 void continueAfterNewWindowPolicy(WebPolicyAction); 174 void continueAfterNavigationPolicy(WebPolicyAction); 175 void continueLoadRequestAfterNavigationPolicy(NSURLRequest *, FormState*); 176 void continueFragmentScrollAfterNavigationPolicy(NSURLRequest *); 177 void continueLoadRequestAfterNewWindowPolicy(NSURLRequest *, NSString *frameName, FormState*); 178 179 private: 180 void setDefersCallbacks(bool); 181 bool startLoadingMainResource(NSMutableURLRequest *, id identifier); 182 void clearProvisionalLoad(); 183 void stopLoadingSubframes(); 184 void markLoadComplete(); 185 void commitProvisionalLoad(); 186 void startLoading(); 187 void provisionalLoadStarted(); 188 void frameLoadCompleted(); 189 190 void mainReceivedError(NSError *, bool isComplete); 191 192 void setLoadType(FrameLoadType); 193 194 void invalidatePendingPolicyDecision(bool callDefaultAction); 195 void checkNewWindowPolicy(NSURLRequest *, NSDictionary *, NSString *frameName, PassRefPtr<FormState>); 196 void checkNavigationPolicy(NSURLRequest *, WebDocumentLoader *, PassRefPtr<FormState>, id continuationObject, SEL continuationSelector); 197 198 void transitionToCommitted(NSDictionary *pageCache); 199 void checkLoadCompleteForThisFrame(); 200 201 void setDocumentLoader(WebDocumentLoader *); 202 void setPolicyDocumentLoader(WebDocumentLoader *); 203 void setProvisionalDocumentLoader(WebDocumentLoader *); 204 205 bool isLoadingPlugIns() const; 206 207 void setState(WebFrameState); 208 209 WebCoreFrameBridge *bridge() const; 210 211 WebCoreFrameLoaderAsDelegate *asDelegate(); 212 213 void closeOldDataSources(); 214 void opened(); 215 216 void handleUnimplementablePolicy(NSError *); 217 bool shouldReloadToHandleUnreachableURL(NSURLRequest *); 218 219 Frame* m_frame; 220 RetainPtr<WebCoreFrameLoaderAsDelegate> m_asDelegate; 221 222 RefPtr<MainResourceLoader> m_mainResourceLoader; 223 HashSet<RefPtr<WebResourceLoader> > m_subresourceLoaders; 224 HashSet<RefPtr<WebResourceLoader> > m_plugInStreamLoaders; 225 226 id <WebFrameLoaderClient> m_client; 227 228 RetainPtr<WebDocumentLoader> m_documentLoader; 229 RetainPtr<WebDocumentLoader> m_provisionalDocumentLoader; 230 RetainPtr<WebDocumentLoader> m_policyDocumentLoader; 231 232 WebFrameState m_state; 233 FrameLoadType m_loadType; 234 235 // state we'll need to continue after waiting for the policy delegate's decision 236 RetainPtr<WebPolicyDecider> m_policyDecider; 237 238 RetainPtr<NSURLRequest> m_policyRequest; 239 RetainPtr<NSString> m_policyFrameName; 240 RetainPtr<id> m_policyTarget; 241 SEL m_policySelector; 242 RefPtr<FormState> m_policyFormState; 243 FrameLoadType m_policyLoadType; 244 245 bool m_delegateIsHandlingProvisionalLoadError; 246 bool m_delegateIsDecidingNavigationPolicy; 247 bool m_delegateIsHandlingUnimplementablePolicy; 248 249 bool m_firstLayoutDone; 250 bool m_quickRedirectComing; 251 bool m_sentRedirectNotification; 252 bool m_isStoppingLoad; 253 }; 254 40 255 } 41 42 @class DOMElement;43 @class WebDocumentLoader;44 @class WebCoreFrameBridge;45 @class WebPolicyDecider;46 @protocol WebFrameLoaderClient;47 48 bool isBackForwardLoadType(FrameLoadType);49 50 @interface WebFrameLoader : NSObject51 {52 WebCoreFrameBridge *frameBridge;53 54 WebCore::MainResourceLoader *m_mainResourceLoader;55 56 HashSet<RefPtr<WebCore::WebResourceLoader> >* m_subresourceLoaders;57 HashSet<RefPtr<WebCore::WebResourceLoader> >* m_plugInStreamLoaders;58 59 id <WebFrameLoaderClient> client;60 WebDocumentLoader *documentLoader;61 WebDocumentLoader *provisionalDocumentLoader;62 WebDocumentLoader *policyDocumentLoader;63 64 WebFrameState state;65 66 FrameLoadType loadType;67 68 // state we'll need to continue after waiting for the policy delegate's decision69 WebPolicyDecider *policyDecider;70 71 NSURLRequest *policyRequest;72 NSString *policyFrameName;73 id policyTarget;74 SEL policySelector;75 WebCore::FormState *policyFormState;76 FrameLoadType policyLoadType;77 78 BOOL delegateIsHandlingProvisionalLoadError;79 BOOL delegateIsDecidingNavigationPolicy;80 BOOL delegateIsHandlingUnimplementablePolicy;81 82 BOOL firstLayoutDone;83 BOOL quickRedirectComing;84 BOOL sentRedirectNotification;85 BOOL isStoppingLoad;86 }87 88 - (id)initWithFrameBridge:(WebCoreFrameBridge *)bridge;89 - (void)addPlugInStreamLoader:(WebCore::WebResourceLoader *)loader;90 - (void)removePlugInStreamLoader:(WebCore::WebResourceLoader *)loader;91 - (void)setDefersCallbacks:(BOOL)defers;92 - (void)stopLoadingPlugIns;93 - (BOOL)isLoadingMainResource;94 - (BOOL)isLoadingSubresources;95 - (BOOL)isLoading;96 - (void)stopLoadingSubresources;97 - (void)addSubresourceLoader:(WebCore::WebResourceLoader *)loader;98 - (void)removeSubresourceLoader:(WebCore::WebResourceLoader *)loader;99 - (NSData *)mainResourceData;100 - (void)releaseMainResourceLoader;101 - (void)cancelMainResourceLoad;102 - (BOOL)startLoadingMainResourceWithRequest:(NSMutableURLRequest *)request identifier:(id)identifier;103 - (void)stopLoadingWithError:(NSError *)error;104 - (void)clearProvisionalLoad;105 - (void)stopLoading;106 - (void)stopLoadingSubframes;107 - (void)markLoadComplete;108 - (void)commitProvisionalLoad;109 - (void)startLoading;110 - (void)startProvisionalLoad:(WebDocumentLoader *)loader;111 - (WebDocumentLoader *)activeDocumentLoader;112 - (WebDocumentLoader *)documentLoader;113 - (WebDocumentLoader *)provisionalDocumentLoader;114 - (WebFrameState)state;115 - (void)setupForReplace;116 + (CFAbsoluteTime)timeOfLastCompletedLoad;117 - (void)provisionalLoadStarted;118 - (void)frameLoadCompleted;119 120 - (BOOL)defersCallbacks;121 - (void)defersCallbacksChanged;122 - (id)_identifierForInitialRequest:(NSURLRequest *)clientRequest;123 - (NSURLRequest *)_willSendRequest:(NSMutableURLRequest *)clientRequest forResource:(id)identifier redirectResponse:(NSURLResponse *)redirectResponse;124 - (void)_didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)currentWebChallenge forResource:(id)identifier;125 - (void)_didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)currentWebChallenge forResource:(id)identifier;126 - (void)_didReceiveResponse:(NSURLResponse *)r forResource:(id)identifier;127 - (void)_didReceiveData:(NSData *)data contentLength:(int)lengthReceived forResource:(id)identifier;128 - (void)_didFinishLoadingForResource:(id)identifier;129 - (void)_didFailLoadingWithError:(NSError *)error forResource:(id)identifier;130 - (BOOL)_privateBrowsingEnabled;131 - (void)_didFailLoadingWithError:(NSError *)error forResource:(id)identifier;132 - (void)_finishedLoadingResource;133 - (void)_receivedError:(NSError *)error;134 - (NSURLRequest *)_originalRequest;135 - (void)_receivedMainResourceError:(NSError *)error complete:(BOOL)isComplete;136 - (NSURLRequest *)initialRequest;137 - (void)_receivedData:(NSData *)data;138 - (void)_setRequest:(NSURLRequest *)request;139 - (void)_downloadWithLoadingConnection:(NSURLConnection *)connection request:(NSURLRequest *)request response:(NSURLResponse *)r proxy:(id)proxy;140 - (void)_handleFallbackContent;141 - (BOOL)_isStopping;142 - (void)_setupForReplaceByMIMEType:(NSString *)newMIMEType;143 - (void)_setResponse:(NSURLResponse *)response;144 - (void)_mainReceivedError:(NSError *)error complete:(BOOL)isComplete;145 - (void)_finishedLoading;146 - (NSURL *)_URL;147 148 - (NSError *)cancelledErrorWithRequest:(NSURLRequest *)request;149 - (NSError *)fileDoesNotExistErrorWithResponse:(NSURLResponse *)response;150 - (BOOL)willUseArchiveForRequest:(NSURLRequest *)request originalURL:(NSURL *)originalURL loader:(WebCore::WebResourceLoader *)loader;151 - (BOOL)archiveLoadPendingForLoader:(WebCore::WebResourceLoader *)loader;152 - (void)cancelPendingArchiveLoadForLoader:(WebCore::WebResourceLoader *)loader;153 - (void)cannotShowMIMETypeWithResponse:(NSURLResponse *)response;154 - (NSError *)interruptForPolicyChangeErrorWithRequest:(NSURLRequest *)request;155 - (BOOL)isHostedByObjectElement;156 - (BOOL)isLoadingMainFrame;157 - (BOOL)_canShowMIMEType:(NSString *)MIMEType;158 - (BOOL)_representationExistsForURLScheme:(NSString *)URLScheme;159 - (NSString *)_generatedMIMETypeForURLScheme:(NSString *)URLScheme;160 - (void)_notifyIconChanged:(NSURL *)iconURL;161 - (void)_checkNavigationPolicyForRequest:(NSURLRequest *)newRequest andCall:(id)obj withSelector:(SEL)sel;162 - (void)_checkContentPolicyForMIMEType:(NSString *)MIMEType andCall:(id)obj withSelector:(SEL)sel;163 - (void)cancelContentPolicy;164 - (void)reload;165 - (void)_reloadAllowingStaleDataWithOverrideEncoding:(NSString *)encoding;166 - (void)_loadRequest:(NSURLRequest *)request triggeringAction:(NSDictionary *)action loadType:(FrameLoadType)loadType formState:(PassRefPtr<WebCore::FormState>)formState;167 168 - (void)didReceiveServerRedirectForProvisionalLoadForFrame;169 - (WebCoreFrameBridge *)bridge;170 - (void)finishedLoadingDocument:(WebDocumentLoader *)loader;171 - (void)committedLoadWithDocumentLoader:(WebDocumentLoader *)loader data:(NSData *)data;172 - (BOOL)isReplacing;173 - (void)setReplacing;174 - (void)revertToProvisionalWithDocumentLoader:(WebDocumentLoader *)loader;175 - (void)documentLoader:(WebDocumentLoader *)loader setMainDocumentError:(NSError *)error;176 - (void)documentLoader:(WebDocumentLoader *)loader mainReceivedCompleteError:(NSError *)error;177 - (void)finalSetupForReplaceWithDocumentLoader:(WebDocumentLoader *)loader;178 - (void)prepareForLoadStart;179 - (BOOL)subframeIsLoading;180 - (void)willChangeTitleForDocument:(WebDocumentLoader *)loader;181 - (void)didChangeTitleForDocument:(WebDocumentLoader *)loader;182 183 - (FrameLoadType)loadType;184 - (void)setLoadType:(FrameLoadType)type;185 186 - (void)invalidatePendingPolicyDecisionCallingDefaultAction:(BOOL)call;187 - (void)checkNewWindowPolicyForRequest:(NSURLRequest *)request action:(NSDictionary *)action frameName:(NSString *)frameName formState:(PassRefPtr<WebCore::FormState>)formState andCall:(id)target withSelector:(SEL)selector;188 - (void)checkNavigationPolicyForRequest:(NSURLRequest *)request documentLoader:(WebDocumentLoader *)loader formState:(PassRefPtr<WebCore::FormState>)formState andCall:(id)target withSelector:(SEL)selector;189 - (void)continueAfterWillSubmitForm:(WebPolicyAction)policy;190 - (void)loadDocumentLoader:(WebDocumentLoader *)loader;191 - (void)loadDocumentLoader:(WebDocumentLoader *)loader withLoadType:(FrameLoadType)loadType formState:(PassRefPtr<WebCore::FormState>)formState;192 193 - (void)didFirstLayout;194 - (BOOL)firstLayoutDone;195 196 - (void)clientRedirectCancelledOrFinished:(BOOL)cancelWithLoadInProgress;197 - (void)clientRedirectedTo:(NSURL *)URL delay:(NSTimeInterval)seconds fireDate:(NSDate *)date lockHistory:(BOOL)lockHistory isJavaScriptFormAction:(BOOL)isJavaScriptFormAction;198 - (void)loadURL:(NSURL *)URL referrer:(NSString *)referrer loadType:(FrameLoadType)loadType target:(NSString *)target triggeringEvent:(NSEvent *)event form:(DOMElement *)form formValues:(NSDictionary *)values;199 - (void)commitProvisionalLoad:(NSDictionary *)pageCache;200 - (BOOL)isQuickRedirectComing;201 - (BOOL)shouldReloadForCurrent:(NSURL *)currentURL andDestination:(NSURL *)destinationURL;202 203 - (void)transitionToCommitted:(NSDictionary *)pageCache;204 - (void)checkLoadCompleteForThisFrame;205 - (void)sendRemainingDelegateMessagesWithIdentifier:(id)identifier response:(NSURLResponse *)response length:(unsigned)length error:(NSError *)error;206 - (NSURLRequest *)requestFromDelegateForRequest:(NSURLRequest *)request identifier:(id *)identifier error:(NSError **)error;207 - (void)loadRequest:(NSURLRequest *)request;208 - (void)loadRequest:(NSURLRequest *)request inFrameNamed:(NSString *)frameName;209 - (void)postWithURL:(NSURL *)URL referrer:(NSString *)referrer target:(NSString *)target data:(NSArray *)postData contentType:(NSString *)contentType triggeringEvent:(NSEvent *)event form:(DOMElement *)form formValues:(NSDictionary *)values;210 211 - (void)checkLoadComplete;212 - (void)detachFromParent;213 - (void)safeLoadURL:(NSURL *)URL;214 - (void)defersCallbacksChanged;215 - (void)detachChildren;216 - (void)addExtraFieldsToRequest:(NSMutableURLRequest *)request mainResource:(BOOL)mainResource alwaysFromRequest:(BOOL)alwaysFromRequest;217 - (NSDictionary *)actionInformationForNavigationType:(NavigationType)navigationType event:(NSEvent *)event originalURL:(NSURL *)URL;218 - (NSDictionary *)actionInformationForLoadType:(FrameLoadType)loadType isFormSubmission:(BOOL)isFormSubmission event:(NSEvent *)event originalURL:(NSURL *)URL;219 220 - (void)setFrameLoaderClient:(id<WebFrameLoaderClient>)cli;221 - (id<WebFrameLoaderClient>)client;222 223 @end -
trunk/WebCore/loader/mac/WebFrameLoader.mm
r17206 r17238 31 31 32 32 #import "DOMElementInternal.h" 33 #import "DOMHTMLObjectElement.h"34 33 #import "Element.h" 35 34 #import "FrameMac.h" 35 #import "FrameTree.h" 36 #import "HTMLNames.h" 36 37 #import "LoaderNSURLExtras.h" 37 38 #import "LoaderNSURLRequestExtras.h" … … 51 52 using namespace WebCore; 52 53 54 @interface WebCoreFrameLoaderAsDelegate : NSObject 55 { 56 FrameLoader* m_loader; 57 } 58 - (id)initWithLoader:(FrameLoader*)loader; 59 - (void)detachFromLoader; 60 @end 61 53 62 namespace WebCore { 54 63 64 using namespace HTMLNames; 65 55 66 typedef HashSet<RefPtr<WebCore::WebResourceLoader> > ResourceLoaderSet; 56 67 57 static void setDefersCallbacks(const ResourceLoaderSet* set, bool defers) 58 { 59 if (!set) 60 return; 61 const ResourceLoaderSet copy = *set; 62 ResourceLoaderSet::const_iterator end = copy.end(); 63 for (ResourceLoaderSet::const_iterator it = copy.begin(); it != end; ++it) 64 (*it)->setDefersCallbacks(defers); 65 } 66 67 static void cancelAll(const ResourceLoaderSet* set) 68 { 69 if (!set) 70 return; 71 const ResourceLoaderSet copy = *set; 72 ResourceLoaderSet::const_iterator end = copy.end(); 73 for (ResourceLoaderSet::const_iterator it = copy.begin(); it != end; ++it) 74 (*it)->cancel(); 75 } 76 77 } 68 static double storedTimeOfLastCompletedLoad; 78 69 79 70 static bool isCaseInsensitiveEqual(NSString *a, NSString *b) … … 101 92 } 102 93 103 @implementation WebFrameLoader 104 105 - (id)initWithFrameBridge:(WebCoreFrameBridge *)bridge 106 { 107 self = [super init]; 108 if (self) { 109 frameBridge = bridge; 110 state = WebFrameStateCommittedPage; 111 } 112 return self; 113 } 114 115 - (void)dealloc 116 { 117 // FIXME: Is there really a possiblity that any of these could be non-null? 118 if (m_mainResourceLoader) 119 m_mainResourceLoader->deref(); 120 delete m_subresourceLoaders; 121 delete m_plugInStreamLoaders; 122 [documentLoader release]; 123 [provisionalDocumentLoader release]; 124 125 ASSERT(!policyDocumentLoader); 126 ASSERT(!policyFormState); 127 128 [super dealloc]; 129 } 130 131 - (void)finalize 132 { 133 if (m_mainResourceLoader) 134 m_mainResourceLoader->deref(); 135 [super finalize]; 136 } 137 138 - (WebDocumentLoader *)activeDocumentLoader 139 { 140 if (state == WebFrameStateProvisional) 141 return provisionalDocumentLoader; 142 143 return documentLoader; 144 } 145 146 - (void)addPlugInStreamLoader:(WebResourceLoader *)loader 147 { 148 if (!m_plugInStreamLoaders) 149 m_plugInStreamLoaders = new ResourceLoaderSet; 150 m_plugInStreamLoaders->add(loader); 151 [[self activeDocumentLoader] setLoading:YES]; 152 } 153 154 - (void)removePlugInStreamLoader:(WebResourceLoader *)loader 155 { 156 ASSERT(m_plugInStreamLoaders); 157 m_plugInStreamLoaders->remove(loader); 158 [[self activeDocumentLoader] updateLoading]; 159 } 160 161 - (void)defersCallbacksChanged 162 { 163 BOOL defers = [frameBridge defersLoading]; 164 for (WebCoreFrameBridge *frame = frameBridge; frame; frame = [frame traverseNextFrameStayWithin:frameBridge]) 165 [[frame frameLoader] setDefersCallbacks:defers]; 166 } 167 168 - (BOOL)defersCallbacks 169 { 170 return [frameBridge defersLoading]; 171 } 172 173 - (void)setDefersCallbacks:(BOOL)defers 94 FrameLoader::FrameLoader(Frame* frame) 95 : m_frame(frame) 96 , m_client(nil) 97 , m_state(WebFrameStateCommittedPage) 98 , m_loadType(FrameLoadTypeStandard) 99 , m_delegateIsHandlingProvisionalLoadError(false) 100 , m_delegateIsDecidingNavigationPolicy(false) 101 , m_delegateIsHandlingUnimplementablePolicy(false) 102 , m_firstLayoutDone(false) 103 , m_quickRedirectComing(false) 104 , m_sentRedirectNotification(false) 105 , m_isStoppingLoad(false) 106 { 107 } 108 109 FrameLoader::~FrameLoader() 110 { 111 [m_asDelegate.get() detachFromLoader]; 112 } 113 114 WebDocumentLoader *FrameLoader::activeDocumentLoader() const 115 { 116 if (m_state == WebFrameStateProvisional) 117 return m_provisionalDocumentLoader.get(); 118 return m_documentLoader.get(); 119 } 120 121 void FrameLoader::addPlugInStreamLoader(WebResourceLoader* loader) 122 { 123 m_plugInStreamLoaders.add(loader); 124 [activeDocumentLoader() setLoading:YES]; 125 } 126 127 void FrameLoader::removePlugInStreamLoader(WebResourceLoader* loader) 128 { 129 m_plugInStreamLoaders.remove(loader); 130 [activeDocumentLoader() updateLoading]; 131 } 132 133 void FrameLoader::defersCallbacksChanged() 134 { 135 bool defers = defersCallbacks(); 136 for (Frame* child = m_frame; child; child = child->tree()->traverseNext(m_frame)) 137 [Mac(child)->bridge() frameLoader]->setDefersCallbacks(defers); 138 } 139 140 bool FrameLoader::defersCallbacks() const 141 { 142 return [bridge() defersLoading]; 143 } 144 145 static void setAllDefersCallbacks(const ResourceLoaderSet& loaders, bool defers) 146 { 147 const ResourceLoaderSet copy = loaders; 148 ResourceLoaderSet::const_iterator end = copy.end(); 149 for (ResourceLoaderSet::const_iterator it = copy.begin(); it != end; ++it) 150 (*it)->setDefersCallbacks(defers); 151 } 152 153 void FrameLoader::setDefersCallbacks(bool defers) 174 154 { 175 155 if (m_mainResourceLoader) 176 156 m_mainResourceLoader->setDefersCallbacks(defers); 177 setDefersCallbacks(m_subresourceLoaders, defers); 178 setDefersCallbacks(m_plugInStreamLoaders, defers); 179 [client _setDefersCallbacks:defers]; 180 } 181 182 - (void)stopLoadingPlugIns 157 setAllDefersCallbacks(m_subresourceLoaders, defers); 158 setAllDefersCallbacks(m_plugInStreamLoaders, defers); 159 [m_client _setDefersCallbacks:defers]; 160 } 161 162 static void cancelAll(const ResourceLoaderSet& loaders) 163 { 164 const ResourceLoaderSet copy = loaders; 165 ResourceLoaderSet::const_iterator end = copy.end(); 166 for (ResourceLoaderSet::const_iterator it = copy.begin(); it != end; ++it) 167 (*it)->cancel(); 168 } 169 170 void FrameLoader::stopLoadingPlugIns() 183 171 { 184 172 cancelAll(m_plugInStreamLoaders); 185 173 } 186 174 187 - (BOOL)isLoadingMainResource 188 { 189 return m_mainResourceLoader != 0;190 } 191 192 - (BOOL)isLoadingSubresources 193 { 194 return m_subresourceLoaders && !m_subresourceLoaders->isEmpty();195 } 196 197 - (BOOL)isLoadingPlugIns 198 { 199 return m_plugInStreamLoaders && !m_plugInStreamLoaders->isEmpty();200 } 201 202 - (BOOL)isLoading 203 { 204 return [self isLoadingMainResource] || [self isLoadingSubresources] || [self isLoadingPlugIns];205 } 206 207 - (void)stopLoadingSubresources 175 bool FrameLoader::isLoadingMainResource() const 176 { 177 return m_mainResourceLoader; 178 } 179 180 bool FrameLoader::isLoadingSubresources() const 181 { 182 return !m_subresourceLoaders.isEmpty(); 183 } 184 185 bool FrameLoader::isLoadingPlugIns() const 186 { 187 return !m_plugInStreamLoaders.isEmpty(); 188 } 189 190 bool FrameLoader::isLoading() const 191 { 192 return isLoadingMainResource() || isLoadingSubresources() || isLoadingPlugIns(); 193 } 194 195 void FrameLoader::stopLoadingSubresources() 208 196 { 209 197 cancelAll(m_subresourceLoaders); 210 198 } 211 199 212 - (void)addSubresourceLoader:(WebResourceLoader *)loader 213 { 214 ASSERT(!provisionalDocumentLoader); 215 if (!m_subresourceLoaders) 216 m_subresourceLoaders = new ResourceLoaderSet; 217 m_subresourceLoaders->add(loader); 218 [[self activeDocumentLoader] setLoading:YES]; 219 } 220 221 - (void)removeSubresourceLoader:(WebResourceLoader *)loader 222 { 223 ASSERT(m_subresourceLoaders); 224 m_subresourceLoaders->remove(loader); 225 [[self activeDocumentLoader] updateLoading]; 226 } 227 228 - (NSData *)mainResourceData 200 void FrameLoader::addSubresourceLoader(WebResourceLoader* loader) 201 { 202 ASSERT(!m_provisionalDocumentLoader); 203 m_subresourceLoaders.add(loader); 204 [activeDocumentLoader() setLoading:YES]; 205 } 206 207 void FrameLoader::removeSubresourceLoader(WebResourceLoader* loader) 208 { 209 m_subresourceLoaders.remove(loader); 210 [activeDocumentLoader() updateLoading]; 211 checkLoadComplete(); 212 } 213 214 NSData *FrameLoader::mainResourceData() const 229 215 { 230 216 if (!m_mainResourceLoader) … … 233 219 } 234 220 235 - (void)releaseMainResourceLoader 236 { 237 if (!m_mainResourceLoader) 238 return; 239 m_mainResourceLoader->deref(); 221 void FrameLoader::releaseMainResourceLoader() 222 { 240 223 m_mainResourceLoader = 0; 241 224 } 242 225 243 - (void)cancelMainResourceLoad 226 void FrameLoader::cancelMainResourceLoad() 244 227 { 245 228 if (m_mainResourceLoader) … … 247 230 } 248 231 249 - (BOOL)startLoadingMainResourceWithRequest:(NSMutableURLRequest *)request identifier:(id)identifier 232 bool FrameLoader::startLoadingMainResource(NSMutableURLRequest *request, id identifier) 250 233 { 251 234 ASSERT(!m_mainResourceLoader); 252 m_mainResourceLoader = MainResourceLoader::create(self).release(); 253 235 m_mainResourceLoader = MainResourceLoader::create(m_frame); 254 236 m_mainResourceLoader->setIdentifier(identifier); 255 [self addExtraFieldsToRequest:request mainResource:YES alwaysFromRequest:NO];237 addExtraFieldsToRequest(request, true, false); 256 238 if (!m_mainResourceLoader->load(request)) { 257 // FIXME: if this should really be caught, we should just ASSERT this doesn't happen;239 // FIXME: If this should really be caught, we should just ASSERT this doesn't happen; 258 240 // should it be caught by other parts of WebKit or other parts of the app? 259 241 LOG_ERROR("could not create WebResourceHandle for URL %@ -- should be caught by policy handler level", [request URL]); 260 m_mainResourceLoader->deref();261 242 m_mainResourceLoader = 0; 262 return NO; 263 } 264 265 return YES; 266 } 267 268 - (void)stopLoadingWithError:(NSError *)error 243 return false; 244 } 245 return true; 246 } 247 248 void FrameLoader::stopLoading(NSError *error) 269 249 { 270 250 m_mainResourceLoader->cancel(error); 271 251 } 272 252 273 - (void)setDocumentLoader:(WebDocumentLoader *)loader 274 { 275 if (loader == nil && documentLoader == nil) 276 return; 277 278 ASSERT(loader != documentLoader); 279 280 [client _prepareForDataSourceReplacement]; 281 [documentLoader detachFromFrameLoader]; 282 253 void FrameLoader::setDocumentLoader(WebDocumentLoader* loader) 254 { 255 if (!loader && !m_documentLoader) 256 return; 257 258 ASSERT(loader != m_documentLoader); 259 ASSERT(!loader || [loader frameLoader] == this); 260 261 [m_client _prepareForDataSourceReplacement]; 262 [m_documentLoader.get() detachFromFrame]; 263 264 m_documentLoader = loader; 265 } 266 267 WebDocumentLoader *FrameLoader::documentLoader() const 268 { 269 return m_documentLoader.get(); 270 } 271 272 void FrameLoader::setPolicyDocumentLoader(WebDocumentLoader *loader) 273 { 274 if (m_policyDocumentLoader == loader) 275 return; 276 277 ASSERT(m_frame); 278 [loader setFrame:m_frame]; 279 if (m_policyDocumentLoader != m_provisionalDocumentLoader && m_policyDocumentLoader != m_documentLoader) 280 [m_policyDocumentLoader.get() detachFromFrame]; 281 282 m_policyDocumentLoader = loader; 283 } 284 285 WebDocumentLoader* FrameLoader::provisionalDocumentLoader() 286 { 287 return m_provisionalDocumentLoader.get(); 288 } 289 290 void FrameLoader::setProvisionalDocumentLoader(WebDocumentLoader *loader) 291 { 292 ASSERT(!loader || !m_provisionalDocumentLoader); 293 ASSERT(!loader || [loader frameLoader] == this); 294 295 if (m_provisionalDocumentLoader != m_documentLoader) 296 [m_provisionalDocumentLoader.get() detachFromFrame]; 297 298 m_provisionalDocumentLoader = loader; 299 } 300 301 WebFrameState FrameLoader::state() const 302 { 303 return m_state; 304 } 305 306 double FrameLoader::timeOfLastCompletedLoad() 307 { 308 return storedTimeOfLastCompletedLoad; 309 } 310 311 void FrameLoader::provisionalLoadStarted() 312 { 313 m_firstLayoutDone = false; 314 [bridge() provisionalLoadStarted]; 315 [m_client _provisionalLoadStarted]; 316 } 317 318 void FrameLoader::setState(WebFrameState newState) 319 { 320 m_state = newState; 321 322 if (newState == WebFrameStateProvisional) 323 provisionalLoadStarted(); 324 else if (newState == WebFrameStateComplete) { 325 frameLoadCompleted(); 326 storedTimeOfLastCompletedLoad = CFAbsoluteTimeGetCurrent(); 327 [documentLoader() stopRecordingResponses]; 328 } 329 } 330 331 void FrameLoader::clearProvisionalLoad() 332 { 333 setProvisionalDocumentLoader(nil); 334 [m_client _progressCompleted]; 335 setState(WebFrameStateComplete); 336 } 337 338 void FrameLoader::markLoadComplete() 339 { 340 setState(WebFrameStateComplete); 341 } 342 343 void FrameLoader::commitProvisionalLoad() 344 { 345 stopLoadingSubresources(); 346 stopLoadingPlugIns(); 347 348 setDocumentLoader(m_provisionalDocumentLoader.get()); 349 setProvisionalDocumentLoader(nil); 350 setState(WebFrameStateCommittedPage); 351 } 352 353 void FrameLoader::stopLoadingSubframes() 354 { 355 for (Frame* child = m_frame->tree()->firstChild(); child; child = child->tree()->nextSibling()) 356 [Mac(child)->bridge() frameLoader]->stopLoading(); 357 } 358 359 void FrameLoader::stopLoading() 360 { 361 // If this method is called from within this method, infinite recursion can occur (3442218). Avoid this. 362 if (m_isStoppingLoad) 363 return; 364 365 m_isStoppingLoad = true; 366 367 invalidatePendingPolicyDecision(true); 368 369 stopLoadingSubframes(); 370 [m_provisionalDocumentLoader.get() stopLoading]; 371 [m_documentLoader.get() stopLoading]; 372 setProvisionalDocumentLoader(nil); 373 [m_client _clearArchivedResources]; 374 375 m_isStoppingLoad = false; 376 } 377 378 // FIXME: Poor method name; also, why is this not part of startProvisionalLoad:? 379 void FrameLoader::startLoading() 380 { 381 [m_provisionalDocumentLoader.get() prepareForLoadStart]; 382 383 if (isLoadingMainResource()) 384 return; 385 386 [m_client _clearLoadingFromPageCacheForDocumentLoader:m_provisionalDocumentLoader.get()]; 387 388 id identifier = [m_client _dispatchIdentifierForInitialRequest:[m_provisionalDocumentLoader.get() originalRequest] 389 fromDocumentLoader:m_provisionalDocumentLoader.get()]; 390 391 if (!startLoadingMainResource([m_provisionalDocumentLoader.get() actualRequest], identifier)) 392 [m_provisionalDocumentLoader.get() updateLoading]; 393 } 394 395 void FrameLoader::setupForReplace() 396 { 397 setState(WebFrameStateProvisional); 398 m_provisionalDocumentLoader = m_documentLoader; 399 m_documentLoader = nil; 400 detachChildren(); 401 } 402 403 id FrameLoader::identifierForInitialRequest(NSURLRequest *clientRequest) 404 { 405 return [m_client _dispatchIdentifierForInitialRequest:clientRequest fromDocumentLoader:activeDocumentLoader()]; 406 } 407 408 NSURLRequest *FrameLoader::willSendRequest(WebResourceLoader* loader, NSMutableURLRequest *clientRequest, NSURLResponse *redirectResponse) 409 { 410 [clientRequest setValue:[bridge() userAgentForURL:[clientRequest URL]] forHTTPHeaderField:@"User-Agent"]; 411 return [m_client _dispatchResource:loader->identifier() willSendRequest:clientRequest 412 redirectResponse:redirectResponse fromDocumentLoader:activeDocumentLoader()]; 413 } 414 415 void FrameLoader::didReceiveAuthenticationChallenge(WebResourceLoader* loader, NSURLAuthenticationChallenge *currentWebChallenge) 416 { 417 [m_client _dispatchDidReceiveAuthenticationChallenge:currentWebChallenge 418 forResource:loader->identifier() fromDocumentLoader:activeDocumentLoader()]; 419 } 420 421 void FrameLoader::didCancelAuthenticationChallenge(WebResourceLoader* loader, NSURLAuthenticationChallenge *currentWebChallenge) 422 { 423 [m_client _dispatchDidCancelAuthenticationChallenge:currentWebChallenge 424 forResource:loader->identifier() fromDocumentLoader:activeDocumentLoader()]; 425 } 426 427 void FrameLoader::didReceiveResponse(WebResourceLoader* loader, NSURLResponse *r) 428 { 429 [activeDocumentLoader() addResponse:r]; 430 431 [m_client _incrementProgressForIdentifier:loader->identifier() response:r]; 432 [m_client _dispatchResource:loader->identifier() didReceiveResponse:r fromDocumentLoader:activeDocumentLoader()]; 433 } 434 435 void FrameLoader::didReceiveData(WebResourceLoader* loader, NSData *data, int lengthReceived) 436 { 437 [m_client _incrementProgressForIdentifier:loader->identifier() data:data]; 438 [m_client _dispatchResource:loader->identifier() didReceiveContentLength:lengthReceived fromDocumentLoader:activeDocumentLoader()]; 439 } 440 441 void FrameLoader::didFinishLoad(WebResourceLoader* loader) 442 { 443 [m_client _completeProgressForIdentifier:loader->identifier()]; 444 [m_client _dispatchResource:loader->identifier() didFinishLoadingFromDocumentLoader:activeDocumentLoader()]; 445 } 446 447 void FrameLoader::didFailToLoad(WebResourceLoader* loader, NSError *error) 448 { 449 [m_client _completeProgressForIdentifier:loader->identifier()]; 450 if (error) 451 [m_client _dispatchResource:loader->identifier() didFailLoadingWithError:error fromDocumentLoader:activeDocumentLoader()]; 452 } 453 454 bool FrameLoader::privateBrowsingEnabled() const 455 { 456 return [m_client _privateBrowsingEnabled]; 457 } 458 459 NSURLRequest *FrameLoader::originalRequest() const 460 { 461 return [activeDocumentLoader() originalRequestCopy]; 462 } 463 464 void FrameLoader::receivedMainResourceError(NSError *error, bool isComplete) 465 { 466 WebDocumentLoader *loader = activeDocumentLoader(); 283 467 [loader retain]; 284 [documentLoader release]; 285 documentLoader = loader; 286 } 287 288 - (WebDocumentLoader *)documentLoader 289 { 290 return documentLoader; 291 } 292 293 - (void)setPolicyDocumentLoader:(WebDocumentLoader *)loader 294 { 295 if (policyDocumentLoader == loader) 296 return; 297 298 if (policyDocumentLoader != provisionalDocumentLoader && policyDocumentLoader != documentLoader) 299 [policyDocumentLoader detachFromFrameLoader]; 300 301 [policyDocumentLoader release]; 302 [loader retain]; 303 policyDocumentLoader = loader; 304 } 305 306 - (WebDocumentLoader *)provisionalDocumentLoader 307 { 308 return provisionalDocumentLoader; 309 } 310 311 - (void)setProvisionalDocumentLoader:(WebDocumentLoader *)loader 312 { 313 ASSERT(!loader || !provisionalDocumentLoader); 314 315 if (provisionalDocumentLoader != documentLoader) 316 [provisionalDocumentLoader detachFromFrameLoader]; 317 318 [loader retain]; 319 [provisionalDocumentLoader release]; 320 provisionalDocumentLoader = loader; 321 } 322 323 - (WebFrameState)state 324 { 325 return state; 326 } 327 328 #if !LOG_DISABLED 329 static const char * const stateNames[] = { 330 "WebFrameStateProvisional", 331 "WebFrameStateCommittedPage", 332 "WebFrameStateComplete" 333 }; 334 #endif 335 336 static CFAbsoluteTime _timeOfLastCompletedLoad; 337 338 + (CFAbsoluteTime)timeOfLastCompletedLoad 339 { 340 return _timeOfLastCompletedLoad; 341 } 342 343 - (void)provisionalLoadStarted 344 { 345 firstLayoutDone = NO; 346 [frameBridge provisionalLoadStarted]; 347 348 [client _provisionalLoadStarted]; 349 } 350 351 - (void)setState:(WebFrameState)newState 352 { 353 state = newState; 354 355 if (state == WebFrameStateProvisional) 356 [self provisionalLoadStarted]; 357 else if (state == WebFrameStateComplete) { 358 [self frameLoadCompleted]; 359 _timeOfLastCompletedLoad = CFAbsoluteTimeGetCurrent(); 360 [[self documentLoader] stopRecordingResponses]; 361 } 362 } 363 364 - (void)clearProvisionalLoad 365 { 366 [self setProvisionalDocumentLoader:nil]; 367 [client _progressCompleted]; 368 [self setState:WebFrameStateComplete]; 369 } 370 371 - (void)markLoadComplete 372 { 373 [self setState:WebFrameStateComplete]; 374 } 375 376 - (void)commitProvisionalLoad 377 { 378 [self stopLoadingSubresources]; 379 [self stopLoadingPlugIns]; 380 381 [self setDocumentLoader:provisionalDocumentLoader]; 382 [self setProvisionalDocumentLoader:nil]; 383 [self setState:WebFrameStateCommittedPage]; 384 } 385 386 - (void)stopLoadingSubframes 387 { 388 for (WebCoreFrameBridge *child = [frameBridge firstChild]; child; child = [child nextSibling]) 389 [[child frameLoader] stopLoading]; 390 } 391 392 - (void)stopLoading 393 { 394 // If this method is called from within this method, infinite recursion can occur (3442218). Avoid this. 395 if (isStoppingLoad) 396 return; 397 398 isStoppingLoad = YES; 399 400 [self invalidatePendingPolicyDecisionCallingDefaultAction:YES]; 401 402 [self stopLoadingSubframes]; 403 [provisionalDocumentLoader stopLoading]; 404 [documentLoader stopLoading]; 405 [self setProvisionalDocumentLoader:nil]; 406 [client _clearArchivedResources]; 407 408 isStoppingLoad = NO; 409 } 410 411 // FIXME: poor method name; also why is this not part of startProvisionalLoad:? 412 - (void)startLoading 413 { 414 [provisionalDocumentLoader prepareForLoadStart]; 415 416 if ([self isLoadingMainResource]) 417 return; 418 419 [client _clearLoadingFromPageCacheForDocumentLoader:provisionalDocumentLoader]; 420 421 id identifier = [client _dispatchIdentifierForInitialRequest:[provisionalDocumentLoader originalRequest] fromDocumentLoader:provisionalDocumentLoader]; 422 423 if (![self startLoadingMainResourceWithRequest:[provisionalDocumentLoader actualRequest] identifier:identifier]) 424 [provisionalDocumentLoader updateLoading]; 425 } 426 427 - (void)startProvisionalLoad:(WebDocumentLoader *)loader 428 { 429 [self setProvisionalDocumentLoader:loader]; 430 [self setState:WebFrameStateProvisional]; 431 } 432 433 - (void)setupForReplace 434 { 435 [self setState:WebFrameStateProvisional]; 436 WebDocumentLoader *old = provisionalDocumentLoader; 437 provisionalDocumentLoader = documentLoader; 438 documentLoader = nil; 439 [old release]; 440 441 [self detachChildren]; 442 } 443 444 - (id)_identifierForInitialRequest:(NSURLRequest *)clientRequest 445 { 446 // FIXME: why retain here, but not in the other place this happens? 447 448 // The identifier is released after the last callback, rather than in dealloc, 449 // to avoid potential cycles. 450 return [[client _dispatchIdentifierForInitialRequest:clientRequest fromDocumentLoader:[self activeDocumentLoader]] retain]; 451 } 452 453 - (NSURLRequest *)_willSendRequest:(NSMutableURLRequest *)clientRequest forResource:(id)identifier redirectResponse:(NSURLResponse *)redirectResponse 454 { 455 [clientRequest setValue:[frameBridge userAgentForURL:[clientRequest URL]] forHTTPHeaderField:@"User-Agent"]; 456 return [client _dispatchResource:identifier willSendRequest:clientRequest redirectResponse:redirectResponse fromDocumentLoader:[self activeDocumentLoader]]; 457 } 458 459 - (void)_didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)currentWebChallenge forResource:(id)identifier 460 { 461 [client _dispatchDidReceiveAuthenticationChallenge:currentWebChallenge forResource:identifier fromDocumentLoader:[self activeDocumentLoader]]; 462 } 463 464 - (void)_didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)currentWebChallenge forResource:(id)identifier 465 { 466 [client _dispatchDidCancelAuthenticationChallenge:currentWebChallenge forResource:identifier fromDocumentLoader:[self activeDocumentLoader]]; 467 } 468 469 - (void)_didReceiveResponse:(NSURLResponse *)r forResource:(id)identifier 470 { 471 [[self activeDocumentLoader] addResponse:r]; 472 473 [client _incrementProgressForIdentifier:identifier response:r]; 474 [client _dispatchResource:identifier didReceiveResponse:r fromDocumentLoader:[self activeDocumentLoader]]; 475 } 476 477 - (void)_didReceiveData:(NSData *)data contentLength:(int)lengthReceived forResource:(id)identifier 478 { 479 [client _incrementProgressForIdentifier:identifier data:data]; 480 [client _dispatchResource:identifier didReceiveContentLength:lengthReceived fromDocumentLoader:[self activeDocumentLoader]]; 481 } 482 483 - (void)_didFinishLoadingForResource:(id)identifier 484 { 485 [client _completeProgressForIdentifier:identifier]; 486 [client _dispatchResource:identifier didFinishLoadingFromDocumentLoader:[self activeDocumentLoader]]; 487 } 488 489 - (void)_didFailLoadingWithError:(NSError *)error forResource:(id)identifier 490 { 491 [client _completeProgressForIdentifier:identifier]; 492 if (error) 493 [client _dispatchResource:identifier didFailLoadingWithError:error fromDocumentLoader:[self activeDocumentLoader]]; 494 } 495 496 - (BOOL)_privateBrowsingEnabled 497 { 498 return [client _privateBrowsingEnabled]; 499 } 500 501 - (void)_finishedLoadingResource 502 { 503 [self checkLoadComplete]; 504 } 505 506 - (void)_receivedError:(NSError *)error 507 { 508 [self checkLoadComplete]; 509 } 510 511 - (NSURLRequest *)_originalRequest 512 { 513 return [[self activeDocumentLoader] originalRequestCopy]; 514 } 515 516 - (void)_receivedMainResourceError:(NSError *)error complete:(BOOL)isComplete 517 { 518 WebDocumentLoader *loader = [self activeDocumentLoader]; 519 [loader retain]; 520 521 WebCoreFrameBridge *bridge = frameBridge; 468 469 WebCoreFrameBridge *bridge = FrameLoader::bridge(); 522 470 523 471 // Retain the bridge because the stop may release the last reference to it. 524 472 [bridge retain]; 525 473 526 id<WebFrameLoaderClient> cli = [ client retain];474 id<WebFrameLoaderClient> cli = [m_client retain]; 527 475 528 476 if (isComplete) { 529 477 // FIXME: Don't want to do this if an entirely new load is going, so should check 530 // that both data sources on the frame are either selfor nil.478 // that both data sources on the frame are either this or nil. 531 479 // Can't call _bridge because we might not have commited yet 532 480 [bridge stop]; … … 535 483 } 536 484 537 if ( [self state]== WebFrameStateProvisional) {538 NSURL *failedURL = [[ provisionalDocumentLoaderoriginalRequestCopy] URL];485 if (m_state == WebFrameStateProvisional) { 486 NSURL *failedURL = [[m_provisionalDocumentLoader.get() originalRequestCopy] URL]; 539 487 [bridge didNotOpenURL:failedURL]; 540 [ client _invalidateCurrentItemPageCache];488 [m_client _invalidateCurrentItemPageCache]; 541 489 542 // Call -_clientRedirectCancelledOrFinished:here so that the frame load delegate is notified that the redirect's543 // status has changed, if there was a redirect. 544 // the redirect in its -webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:. 490 // Call clientRedirectCancelledOrFinished here so that the frame load delegate is notified that the redirect's 491 // status has changed, if there was a redirect. The frame load delegate may have saved some state about 492 // the redirect in its -webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:. Since we are definitely 545 493 // not going to use this provisional resource, as it was cancelled, notify the frame load delegate that the redirect 546 494 // has ended. 547 if ( sentRedirectNotification)548 [self clientRedirectCancelledOrFinished:NO];495 if (m_sentRedirectNotification) 496 clientRedirectCancelledOrFinished(false); 549 497 } 550 498 … … 557 505 } 558 506 559 - (void)clientRedirectCancelledOrFinished:(BOOL)cancelWithLoadInProgress 507 void FrameLoader::clientRedirectCancelledOrFinished(bool cancelWithLoadInProgress) 560 508 { 561 509 // Note that -webView:didCancelClientRedirectForFrame: is called on the frame load delegate even if 562 510 // the redirect succeeded. We should either rename this API, or add a new method, like 563 511 // -webView:didFinishClientRedirectForFrame: 564 [ client _dispatchDidCancelClientRedirectForFrame];512 [m_client _dispatchDidCancelClientRedirectForFrame]; 565 513 566 514 if (!cancelWithLoadInProgress) 567 quickRedirectComing = NO;568 569 sentRedirectNotification = NO;570 } 571 572 - (void)clientRedirectedTo:(NSURL *)URL delay:(NSTimeInterval)seconds fireDate:(NSDate *)date lockHistory:(BOOL)lockHistory isJavaScriptFormAction:(BOOL)isJavaScriptFormAction 573 { 574 [ client _dispatchWillPerformClientRedirectToURL:URL delay:seconds fireDate:date];515 m_quickRedirectComing = false; 516 517 m_sentRedirectNotification = false; 518 } 519 520 void FrameLoader::clientRedirected(NSURL *URL, double seconds, NSDate *date, bool lockHistory, bool isJavaScriptFormAction) 521 { 522 [m_client _dispatchWillPerformClientRedirectToURL:URL delay:seconds fireDate:date]; 575 523 576 524 // Remember that we sent a redirect notification to the frame load delegate so that when we commit 577 525 // the next provisional load, we can send a corresponding -webView:didCancelClientRedirectForFrame: 578 sentRedirectNotification = YES;526 m_sentRedirectNotification = true; 579 527 580 528 // If a "quick" redirect comes in an, we set a special mode so we treat the next 581 // load as part of the same navigation. 582 583 if (!documentLoader || isJavaScriptFormAction) { 584 // If we don't have a dataSource, we have no "original" load on which to base a redirect, 585 // so we better just treat the redirect as a normal load. 586 quickRedirectComing = NO; 587 } else { 588 quickRedirectComing = lockHistory; 589 } 590 } 591 592 - (BOOL)shouldReloadForCurrent:(NSURL *)currentURL andDestination:(NSURL *)destinationURL 593 { 594 return !(([currentURL fragment] || [destinationURL fragment]) && 595 [urlByRemovingFragment(currentURL) isEqual:urlByRemovingFragment(destinationURL)]); 596 } 597 598 // main funnel for navigating via callback from WebCore (e.g., clicking a link, redirect) 599 - (void)loadURL:(NSURL *)URL referrer:(NSString *)referrer loadType:(FrameLoadType)_loadType target:(NSString *)target triggeringEvent:(NSEvent *)event form:(DOMElement *)form formValues:(NSDictionary *)values 600 { 601 BOOL isFormSubmission = (values != nil); 529 // load as part of the same navigation. If we don't have a document loader, we have 530 // no "original" load on which to base a redirect, so we treat the redirect as a normal load. 531 m_quickRedirectComing = lockHistory && m_documentLoader && !isJavaScriptFormAction; 532 } 533 534 bool FrameLoader::shouldReload(NSURL *currentURL, NSURL *destinationURL) 535 { 536 return !(([currentURL fragment] || [destinationURL fragment]) 537 && [urlByRemovingFragment(currentURL) isEqual:urlByRemovingFragment(destinationURL)]); 538 } 539 540 void FrameLoader::load(NSURL *URL, NSString *referrer, FrameLoadType newLoadType, NSString *target, NSEvent *event, DOMElement *form, NSDictionary *values) 541 { 542 bool isFormSubmission = values != nil; 602 543 603 544 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL]; 604 545 setHTTPReferrer(request, referrer); 605 [self addExtraFieldsToRequest:request mainResource:YES alwaysFromRequest:(event != nil || isFormSubmission)];606 if ( _loadType == FrameLoadTypeReload)546 addExtraFieldsToRequest(request, true, event || isFormSubmission); 547 if (newLoadType == FrameLoadTypeReload) 607 548 [request setCachePolicy:NSURLRequestReloadIgnoringCacheData]; 608 609 // I believe this is never called with LoadSame. If it is, we probably want to set the cache 610 // policy of LoadFromOrigin, but I didn't test that. 611 ASSERT(_loadType != FrameLoadTypeSame); 612 613 NSDictionary *action = [self actionInformationForLoadType:_loadType isFormSubmission:isFormSubmission event:event originalURL:URL]; 549 550 ASSERT(newLoadType != FrameLoadTypeSame); 551 552 NSDictionary *action = actionInformation(newLoadType, isFormSubmission, event, URL); 614 553 RefPtr<FormState> formState; 615 554 if (form && values) 616 formState = FormState::create(form, values, frameBridge); 617 618 if (target != nil) { 619 WebCoreFrameBridge *targetFrame = [frameBridge findFrameNamed:target]; 620 if (targetFrame != nil) { 621 [[targetFrame frameLoader] loadURL:URL referrer:referrer loadType:_loadType target:nil triggeringEvent:event form:form formValues:values]; 622 } else { 623 [self checkNewWindowPolicyForRequest:request 624 action:action 625 frameName:target 626 formState:formState.release() 627 andCall:self 628 withSelector:@selector(continueLoadRequestAfterNewWindowPolicy:frameName:formState:)]; 629 } 555 formState = FormState::create(form, values, bridge()); 556 557 if (target) { 558 Frame* targetFrame = m_frame->tree()->find(target); 559 if (targetFrame) 560 [Mac(targetFrame)->bridge() frameLoader]->load(URL, referrer, newLoadType, nil, event, form, values); 561 else 562 checkNewWindowPolicy(request, action, target, formState.release()); 630 563 [request release]; 631 564 return; 632 565 } 633 634 WebDocumentLoader *oldDocumentLoader = [ documentLoaderretain];635 636 BOOL sameURL = [client _shouldTreatURLAsSameAsCurrent:URL];566 567 WebDocumentLoader *oldDocumentLoader = [m_documentLoader.get() retain]; 568 569 bool sameURL = [m_client _shouldTreatURLAsSameAsCurrent:URL]; 637 570 638 571 // Make sure to do scroll to anchor processing even if the URL is … … 640 573 // work properly. 641 574 if (!isFormSubmission 642 && _loadType != FrameLoadTypeReload 643 && _loadType != FrameLoadTypeSame 644 && ![self shouldReloadForCurrent:URL andDestination:[frameBridge URL]] 645 575 && newLoadType != FrameLoadTypeReload 576 && newLoadType != FrameLoadTypeSame 577 && !shouldReload(URL, [bridge() URL]) 646 578 // We don't want to just scroll if a link from within a 647 579 // frameset is trying to reload the frameset into _top. 648 && ![ frameBridgeisFrameSet]) {649 580 && ![bridge() isFrameSet]) { 581 650 582 // Just do anchor navigation within the existing content. 651 583 … … 657 589 658 590 [oldDocumentLoader setTriggeringAction:action]; 659 [self invalidatePendingPolicyDecisionCallingDefaultAction:YES]; 660 [self checkNavigationPolicyForRequest:request 661 documentLoader:oldDocumentLoader formState:formState.release() 662 andCall:self withSelector:@selector(continueFragmentScrollAfterNavigationPolicy:formState:)]; 591 invalidatePendingPolicyDecision(true); 592 checkNavigationPolicy(request, oldDocumentLoader, formState.release(), 593 asDelegate(), @selector(continueFragmentScrollAfterNavigationPolicy:formState:)); 663 594 } else { 664 595 // must grab this now, since this load may stop the previous load and clear this flag 665 BOOL isRedirect =quickRedirectComing;666 [self _loadRequest:request triggeringAction:action loadType:_loadType formState:formState.release()];596 bool isRedirect = m_quickRedirectComing; 597 load(request, action, newLoadType, formState.release()); 667 598 if (isRedirect) { 668 quickRedirectComing = NO;669 [ provisionalDocumentLoadersetIsClientRedirect:YES];670 } else if (sameURL) {599 m_quickRedirectComing = false; 600 [m_provisionalDocumentLoader.get() setIsClientRedirect:YES]; 601 } else if (sameURL) 671 602 // Example of this case are sites that reload the same URL with a different cookie 672 603 // driving the generated content, or a master frame with links that drive a target 673 604 // frame, where the user has clicked on the same link repeatedly. 674 [self setLoadType:FrameLoadTypeSame]; 675 } 605 m_loadType = FrameLoadTypeSame; 676 606 } 677 607 … … 680 610 } 681 611 682 -(void)continueFragmentScrollAfterNavigationPolicy:(NSURLRequest *)request formState:(FormState *)formState 612 void FrameLoader::continueFragmentScrollAfterNavigationPolicy(NSURLRequest *request) 683 613 { 684 614 if (!request) … … 687 617 NSURL *URL = [request URL]; 688 618 689 BOOL isRedirect =quickRedirectComing;690 quickRedirectComing = NO;691 692 [ documentLoaderreplaceRequestURLForAnchorScrollWithURL:URL];693 if (!isRedirect && ![ client _shouldTreatURLAsSameAsCurrent:URL]) {619 bool isRedirect = m_quickRedirectComing; 620 m_quickRedirectComing = false; 621 622 [m_documentLoader.get() replaceRequestURLForAnchorScrollWithURL:URL]; 623 if (!isRedirect && ![m_client _shouldTreatURLAsSameAsCurrent:URL]) { 694 624 // NB: must happen after _setURL, since we add based on the current request. 695 625 // Must also happen before we openURL and displace the scroll position, since … … 703 633 // but it's not an obvious case. 704 634 705 [ client _addHistoryItemForFragmentScroll];706 } 707 708 [ frameBridgescrollToAnchorWithURL:URL];709 710 if (!isRedirect) {635 [m_client _addHistoryItemForFragmentScroll]; 636 } 637 638 [bridge() scrollToAnchorWithURL:URL]; 639 640 if (!isRedirect) 711 641 // This will clear previousItem from the rest of the frame tree tree that didn't 712 // doing any loading. We need to make a pass on this now, since for anchor nav 713 // we'll not go through a real load and reach Completed state 714 [self checkLoadComplete]; 715 } 642 // doing any loading. We need to make a pass on this now, since for anchor nav 643 // we'll not go through a real load and reach Completed state. 644 checkLoadComplete(); 716 645 717 [ client _dispatchDidChangeLocationWithinPageForFrame];718 [ client _didFinishLoad];719 } 720 721 - (void)closeOldDataSources 722 { 723 // FIXME: is it important for this traversal to be postorder instead of preorder?724 // FIXME: add helpers for postorder traversal?725 for (WebCoreFrameBridge *child = [frameBridge firstChild]; child; child = [child nextSibling])726 [[child frameLoader] closeOldDataSources];727 728 if (documentLoader)729 [client _dispatchWillCloseFrame];730 731 [client _setMainFrameDocumentReady:NO]; // stop giving out the actual DOMDocument to observers 732 } 733 734 // Called after we send an openURL:... down to WebCore. 735 - (void)opened 736 { 737 if ( [self loadType] == FrameLoadTypeStandard && [documentLoaderisClientRedirect])738 [ client _updateHistoryAfterClientRedirect];739 740 if ([ client _isDocumentLoaderLoadingFromPageCache:documentLoader]) {646 [m_client _dispatchDidChangeLocationWithinPageForFrame]; 647 [m_client _didFinishLoad]; 648 } 649 650 void FrameLoader::closeOldDataSources() 651 { 652 // FIXME: Is it important for this traversal to be postorder instead of preorder? 653 // If so, add helpers for postorder traversal, and use them. If not, then lets not 654 // use a recursive algorithm here. 655 for (Frame* child = m_frame->tree()->firstChild(); child; child = child->tree()->nextSibling()) 656 [Mac(child)->bridge() frameLoader]->closeOldDataSources(); 657 658 if (m_documentLoader) 659 [m_client _dispatchWillCloseFrame]; 660 661 [m_client _setMainFrameDocumentReady:NO]; // stop giving out the actual DOMDocument to observers 662 } 663 664 void FrameLoader::opened() 665 { 666 if (m_loadType == FrameLoadTypeStandard && [m_documentLoader.get() isClientRedirect]) 667 [m_client _updateHistoryAfterClientRedirect]; 668 669 if ([m_client _isDocumentLoaderLoadingFromPageCache:m_documentLoader.get()]) { 741 670 // Force a layout to update view size and thereby update scrollbars. 742 [ client _forceLayout];743 744 NSArray *responses = [ [self documentLoader]responses];671 [m_client _forceLayout]; 672 673 NSArray *responses = [m_documentLoader.get() responses]; 745 674 NSURLResponse *response; 746 675 int i, count = [responses count]; … … 751 680 id identifier; 752 681 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[response URL]]; 753 [self requestFromDelegateForRequest:request identifier:&identifier error:&error];754 [self sendRemainingDelegateMessagesWithIdentifier:identifier response:response length:(unsigned)[response expectedContentLength] error:error];682 requestFromDelegate(request, identifier, error); 683 sendRemainingDelegateMessages(identifier, response, (unsigned)[response expectedContentLength], error); 755 684 [request release]; 756 685 } 757 686 758 [ client _loadedFromPageCache];759 760 [ [self documentLoader]setPrimaryLoadComplete:YES];687 [m_client _loadedFromPageCache]; 688 689 [m_documentLoader.get() setPrimaryLoadComplete:YES]; 761 690 762 691 // FIXME: Why only this frame and not parent frames? 763 [self checkLoadCompleteForThisFrame];764 } 765 } 766 767 - (void)commitProvisionalLoad:(NSDictionary *)pageCache 768 { 769 bool reload = loadType == FrameLoadTypeReload ||loadType == FrameLoadTypeReloadAllowingStaleData;770 771 WebDocumentLoader *pdl = [ provisionalDocumentLoaderretain];692 checkLoadCompleteForThisFrame(); 693 } 694 } 695 696 void FrameLoader::commitProvisionalLoad(NSDictionary *pageCache) 697 { 698 bool reload = m_loadType == FrameLoadTypeReload || m_loadType == FrameLoadTypeReloadAllowingStaleData; 699 700 WebDocumentLoader *pdl = [m_provisionalDocumentLoader.get() retain]; 772 701 773 702 NSURLResponse *response = [pdl response]; … … 776 705 ? [(NSHTTPURLResponse *)response allHeaderFields] : nil; 777 706 778 if ( loadType != FrameLoadTypeReplace)779 [self closeOldDataSources];707 if (m_loadType != FrameLoadTypeReplace) 708 closeOldDataSources(); 780 709 781 710 if (!pageCache) 782 [ client _makeRepresentationForDocumentLoader:pdl];783 784 [self transitionToCommitted:pageCache];711 [m_client _makeRepresentationForDocumentLoader:pdl]; 712 713 transitionToCommitted(pageCache); 785 714 786 715 // Call -_clientRedirectCancelledOrFinished: here so that the frame load delegate is notified that the redirect's … … 788 717 // the redirect in its -webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:. Since we are 789 718 // just about to commit a new page, there cannot possibly be a pending redirect at this point. 790 if ( sentRedirectNotification)791 [self clientRedirectCancelledOrFinished:NO];719 if (m_sentRedirectNotification) 720 clientRedirectCancelledOrFinished(false); 792 721 793 722 NSURL *baseURL = [[pdl request] _webDataRequestBaseURL]; … … 797 726 URL = [NSURL URLWithString:@"about:blank"]; 798 727 799 [ frameBridgeopenURL:URL800 801 802 803 804 805 806 [self opened];728 [bridge() openURL:URL 729 reload:reload 730 contentType:[response MIMEType] 731 refresh:[headers objectForKey:@"Refresh"] 732 lastModified:(pageCache ? nil : wkGetNSURLResponseLastModifiedDate(response)) 733 pageCache:pageCache]; 734 735 opened(); 807 736 808 737 [pdl release]; 809 738 } 810 739 811 - (NSURLRequest *)initialRequest 812 { 813 return [[self activeDocumentLoader] initialRequest]; 814 } 815 816 - (void)_receivedData:(NSData *)data 817 { 818 [[self activeDocumentLoader] receivedData:data]; 819 } 820 821 - (void)_setRequest:(NSURLRequest *)request 822 { 823 [[self activeDocumentLoader] setRequest:request]; 824 } 825 826 - (void)_downloadWithLoadingConnection:(NSURLConnection *)connection 827 request:(NSURLRequest *)request response:(NSURLResponse *)response proxy:(id)proxy 828 { 829 [client _downloadWithLoadingConnection:connection request:request response:response proxy:proxy]; 830 } 831 832 - (WebCoreFrameBridge *)bridge 833 { 834 return frameBridge; 835 } 836 837 - (void)_handleFallbackContent 838 { 839 [frameBridge handleFallbackContent]; 840 } 841 842 - (BOOL)_isStopping 843 { 844 return [[self activeDocumentLoader] isStopping]; 845 } 846 847 - (void)_setupForReplaceByMIMEType:(NSString *)newMIMEType 848 { 849 [[self activeDocumentLoader] setupForReplaceByMIMEType:newMIMEType]; 850 } 851 852 - (void)_setResponse:(NSURLResponse *)response 853 { 854 [[self activeDocumentLoader] setResponse:response]; 855 } 856 857 - (void)_mainReceivedError:(NSError *)error complete:(BOOL)isComplete 858 { 859 [[self activeDocumentLoader] mainReceivedError:error complete:isComplete]; 860 } 861 862 - (void)_finishedLoading 863 { 864 WebDocumentLoader *dl = [self activeDocumentLoader]; 865 866 WebCoreFrameBridge *bridge = frameBridge; 740 NSURLRequest *FrameLoader::initialRequest() const 741 { 742 return [activeDocumentLoader() initialRequest]; 743 } 744 745 void FrameLoader::receivedData(NSData *data) 746 { 747 [activeDocumentLoader() receivedData:data]; 748 } 749 750 void FrameLoader::setRequest(NSURLRequest *request) 751 { 752 [activeDocumentLoader() setRequest:request]; 753 } 754 755 void FrameLoader::download(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *response, id proxy) 756 { 757 [m_client _downloadWithLoadingConnection:connection request:request response:response proxy:proxy]; 758 } 759 760 WebCoreFrameBridge *FrameLoader::bridge() const 761 { 762 return Mac(m_frame)->bridge(); 763 } 764 765 void FrameLoader::handleFallbackContent() 766 { 767 [bridge() handleFallbackContent]; 768 } 769 770 bool FrameLoader::isStopping() const 771 { 772 return [activeDocumentLoader() isStopping]; 773 } 774 775 void FrameLoader::setupForReplaceByMIMEType(NSString *newMIMEType) 776 { 777 [activeDocumentLoader() setupForReplaceByMIMEType:newMIMEType]; 778 } 779 780 void FrameLoader::setResponse(NSURLResponse *response) 781 { 782 [activeDocumentLoader() setResponse:response]; 783 } 784 785 void FrameLoader::mainReceivedError(NSError *error, bool isComplete) 786 { 787 [activeDocumentLoader() mainReceivedError:error complete:isComplete]; 788 } 789 790 void FrameLoader::finishedLoading() 791 { 792 WebDocumentLoader *dl = activeDocumentLoader(); 793 794 WebCoreFrameBridge *bridge = FrameLoader::bridge(); 867 795 868 796 [bridge retain]; … … 875 803 876 804 [dl setPrimaryLoadComplete:YES]; 877 [ client _dispatchDidLoadMainResourceForDocumentLoader:dl];878 [self checkLoadComplete];805 [m_client _dispatchDidLoadMainResourceForDocumentLoader:dl]; 806 checkLoadComplete(); 879 807 880 808 [bridge release]; 881 809 } 882 810 883 - (void)_notifyIconChanged:(NSURL *)iconURL 811 void FrameLoader::notifyIconChanged(NSURL *iconURL) 884 812 { 885 813 ASSERT([[WebCoreIconDatabaseBridge sharedInstance] _isEnabled]); 886 814 NSImage *icon = [[WebCoreIconDatabaseBridge sharedInstance] 887 iconForPageURL:urlOriginalDataAsString([ [self activeDocumentLoader]URL])815 iconForPageURL:urlOriginalDataAsString([activeDocumentLoader() URL]) 888 816 withSize:NSMakeSize(16, 16)]; 889 [client _dispatchDidReceiveIcon:icon]; 890 } 891 892 - (NSURL *)_URL 893 { 894 return [[self activeDocumentLoader] URL]; 895 } 896 897 - (NSError *)cancelledErrorWithRequest:(NSURLRequest *)request 898 { 899 return [client _cancelledErrorWithRequest:request]; 900 } 901 902 - (NSError *)fileDoesNotExistErrorWithResponse:(NSURLResponse *)response 903 { 904 return [client _fileDoesNotExistErrorWithResponse:response]; 905 } 906 907 - (BOOL)willUseArchiveForRequest:(NSURLRequest *)request originalURL:(NSURL *)originalURL loader:(WebResourceLoader *)loader 908 { 909 return [client _willUseArchiveForRequest:request originalURL:originalURL loader:loader]; 910 } 911 912 - (BOOL)archiveLoadPendingForLoader:(WebResourceLoader *)loader 913 { 914 return [client _archiveLoadPendingForLoader:loader]; 915 } 916 917 - (void)cancelPendingArchiveLoadForLoader:(WebResourceLoader *)loader 918 { 919 [client _cancelPendingArchiveLoadForLoader:loader]; 920 } 921 922 - (void)handleUnimplementablePolicyWithError:(NSError *)error 923 { 924 delegateIsHandlingUnimplementablePolicy = YES; 925 [client _dispatchUnableToImplementPolicyWithError:error]; 926 delegateIsHandlingUnimplementablePolicy = NO; 927 } 928 929 - (void)cannotShowMIMETypeWithResponse:(NSURLResponse *)response 930 { 931 [self handleUnimplementablePolicyWithError:[client _cannotShowMIMETypeErrorWithResponse:response]]; 932 } 933 934 - (NSError *)interruptForPolicyChangeErrorWithRequest:(NSURLRequest *)request 935 { 936 return [client _interruptForPolicyChangeErrorWithRequest:request]; 937 } 938 939 - (BOOL)isHostedByObjectElement 940 { 941 // Handle <object> fallback for error cases. 942 DOMHTMLElement *hostElement = [frameBridge frameElement]; 943 return hostElement && [hostElement isKindOfClass:[DOMHTMLObjectElement class]]; 944 } 945 946 - (BOOL)isLoadingMainFrame 947 { 948 return [frameBridge isMainFrame]; 949 } 950 951 - (BOOL)_canShowMIMEType:(NSString *)MIMEType 952 { 953 return [client _canShowMIMEType:MIMEType]; 954 } 955 956 - (BOOL)_representationExistsForURLScheme:(NSString *)URLScheme 957 { 958 return [client _representationExistsForURLScheme:URLScheme]; 959 } 960 961 - (NSString *)_generatedMIMETypeForURLScheme:(NSString *)URLScheme 962 { 963 return [client _generatedMIMETypeForURLScheme:URLScheme]; 964 } 965 966 - (void)_checkNavigationPolicyForRequest:(NSURLRequest *)newRequest andCall:(id)obj withSelector:(SEL)sel 967 { 968 [self checkNavigationPolicyForRequest:newRequest 969 documentLoader:[self activeDocumentLoader] 970 formState:nil 971 andCall:obj 972 withSelector:sel]; 973 } 974 975 - (void)_checkContentPolicyForMIMEType:(NSString *)MIMEType andCall:(id)obj withSelector:(SEL)sel 976 { 977 WebPolicyDecider *d = [client _createPolicyDeciderWithTarget:obj action:sel]; 978 policyDecider = d; 979 980 [d retain]; 981 982 [client _dispatchDecidePolicyForMIMEType:MIMEType request:[[self activeDocumentLoader] request] decider:d]; 983 817 [m_client _dispatchDidReceiveIcon:icon]; 818 } 819 820 NSURL *FrameLoader::URL() const 821 { 822 return [activeDocumentLoader() URL]; 823 } 824 825 NSError *FrameLoader::cancelledError(NSURLRequest *request) const 826 { 827 return [m_client _cancelledErrorWithRequest:request]; 828 } 829 830 NSError *FrameLoader::fileDoesNotExistError(NSURLResponse *response) const 831 { 832 return [m_client _fileDoesNotExistErrorWithResponse:response]; 833 } 834 835 bool FrameLoader::willUseArchive(WebResourceLoader* loader, NSURLRequest *request, NSURL *originalURL) const 836 { 837 return [m_client _willUseArchiveForRequest:request originalURL:originalURL loader:loader]; 838 } 839 840 bool FrameLoader::isArchiveLoadPending(WebResourceLoader* loader) const 841 { 842 return [m_client _archiveLoadPendingForLoader:loader]; 843 } 844 845 void FrameLoader::cancelPendingArchiveLoad(WebResourceLoader* loader) 846 { 847 [m_client _cancelPendingArchiveLoadForLoader:loader]; 848 } 849 850 void FrameLoader::handleUnimplementablePolicy(NSError *error) 851 { 852 m_delegateIsHandlingUnimplementablePolicy = YES; 853 [m_client _dispatchUnableToImplementPolicyWithError:error]; 854 m_delegateIsHandlingUnimplementablePolicy = NO; 855 } 856 857 void FrameLoader::cannotShowMIMEType(NSURLResponse *response) 858 { 859 handleUnimplementablePolicy([m_client _cannotShowMIMETypeErrorWithResponse:response]); 860 } 861 862 NSError *FrameLoader::interruptionForPolicyChangeError(NSURLRequest *request) 863 { 864 return [m_client _interruptForPolicyChangeErrorWithRequest:request]; 865 } 866 867 bool FrameLoader::isHostedByObjectElement() const 868 { 869 Element* owner = m_frame->ownerElement(); 870 return owner && owner->hasTagName(objectTag); 871 } 872 873 bool FrameLoader::isLoadingMainFrame() const 874 { 875 return [bridge() isMainFrame]; 876 } 877 878 bool FrameLoader::canShowMIMEType(NSString *MIMEType) const 879 { 880 return [m_client _canShowMIMEType:MIMEType]; 881 } 882 883 bool FrameLoader::representationExistsForURLScheme(NSString *URLScheme) 884 { 885 return [m_client _representationExistsForURLScheme:URLScheme]; 886 } 887 888 NSString *FrameLoader::generatedMIMETypeForURLScheme(NSString *URLScheme) 889 { 890 return [m_client _generatedMIMETypeForURLScheme:URLScheme]; 891 } 892 893 void FrameLoader::checkNavigationPolicy(NSURLRequest *newRequest, id obj, SEL sel) 894 { 895 checkNavigationPolicy(newRequest, activeDocumentLoader(), 0, obj, sel); 896 } 897 898 void FrameLoader::checkContentPolicy(NSString *MIMEType, id obj, SEL sel) 899 { 900 WebPolicyDecider *d = [m_client _createPolicyDeciderWithTarget:obj action:sel]; 901 m_policyDecider = d; 902 [m_client _dispatchDecidePolicyForMIMEType:MIMEType request:[activeDocumentLoader() request] decider:d]; 984 903 [d release]; 985 904 } 986 905 987 - (void)cancelContentPolicy 988 { 989 [policyDecider invalidate]; 990 [policyDecider release]; 991 policyDecider = nil; 992 } 993 994 - (BOOL)shouldReloadToHandleUnreachableURLFromRequest:(NSURLRequest *)request 906 void FrameLoader::cancelContentPolicyCheck() 907 { 908 [m_policyDecider.get() invalidate]; 909 m_policyDecider = nil; 910 } 911 912 bool FrameLoader::shouldReloadToHandleUnreachableURL(NSURLRequest *request) 995 913 { 996 914 NSURL *unreachableURL = [request _webDataRequestUnreachableURL]; 997 915 if (unreachableURL == nil) 998 return NO;999 1000 if (!isBackForwardLoadType( policyLoadType))1001 return NO;1002 916 return false; 917 918 if (!isBackForwardLoadType(m_policyLoadType)) 919 return false; 920 1003 921 // We only treat unreachableURLs specially during the delegate callbacks 1004 922 // for provisional load errors and navigation policy decisions. The former … … 1007 925 // at other times behaves like a standard load. 1008 926 WebDocumentLoader *compareDocumentLoader = nil; 1009 if (delegateIsDecidingNavigationPolicy || delegateIsHandlingUnimplementablePolicy) 1010 compareDocumentLoader = policyDocumentLoader; 1011 else if (delegateIsHandlingProvisionalLoadError) 1012 compareDocumentLoader = [self provisionalDocumentLoader]; 1013 1014 return compareDocumentLoader != nil && [unreachableURL isEqual:[[compareDocumentLoader request] URL]]; 1015 } 1016 1017 - (void)loadDocumentLoader:(WebDocumentLoader *)newDocumentLoader 1018 { 1019 if (policyDocumentLoader) 1020 [self invalidatePendingPolicyDecisionCallingDefaultAction:YES]; 1021 1022 [self setPolicyDocumentLoader:newDocumentLoader]; 1023 1024 NSMutableURLRequest *r = [policyDocumentLoader request]; 1025 [self addExtraFieldsToRequest:r mainResource:YES alwaysFromRequest:NO]; 927 if (m_delegateIsDecidingNavigationPolicy || m_delegateIsHandlingUnimplementablePolicy) 928 compareDocumentLoader = m_policyDocumentLoader.get(); 929 else if (m_delegateIsHandlingProvisionalLoadError) 930 compareDocumentLoader = m_provisionalDocumentLoader.get(); 931 932 return compareDocumentLoader && [unreachableURL isEqual:[[compareDocumentLoader request] URL]]; 933 } 934 935 void FrameLoader::load(WebDocumentLoader *newDocumentLoader) 936 { 937 invalidatePendingPolicyDecision(true); 938 setPolicyDocumentLoader(newDocumentLoader); 939 940 NSMutableURLRequest *r = [newDocumentLoader request]; 941 addExtraFieldsToRequest(r, true, false); 1026 942 FrameLoadType type; 1027 if ([ client _shouldTreatURLAsSameAsCurrent:[[policyDocumentLoader originalRequest] URL]]) {943 if ([m_client _shouldTreatURLAsSameAsCurrent:[[newDocumentLoader originalRequest] URL]]) { 1028 944 [r setCachePolicy:NSURLRequestReloadIgnoringCacheData]; 1029 945 type = FrameLoadTypeSame; … … 1031 947 type = FrameLoadTypeStandard; 1032 948 1033 [ policyDocumentLoader setOverrideEncoding:[[self documentLoader]overrideEncoding]];949 [newDocumentLoader setOverrideEncoding:[documentLoader() overrideEncoding]]; 1034 950 1035 951 // When we loading alternate content for an unreachable URL that we're 1036 952 // visiting in the b/f list, we treat it as a reload so the b/f list 1037 953 // is appropriately maintained. 1038 if ( [self shouldReloadToHandleUnreachableURLFromRequest:[policyDocumentLoader originalRequest]]) {954 if (shouldReloadToHandleUnreachableURL([newDocumentLoader originalRequest])) { 1039 955 ASSERT(type == FrameLoadTypeStandard); 1040 956 type = FrameLoadTypeReload; 1041 957 } 1042 1043 [self loadDocumentLoader:policyDocumentLoader withLoadType:type formState:nil]; 1044 } 1045 1046 - (void)_loadRequest:(NSURLRequest *)request triggeringAction:(NSDictionary *)action loadType:(FrameLoadType)type formState:(PassRefPtr<FormState>)formState 1047 { 1048 ASSERT(!policyDocumentLoader); 1049 policyDocumentLoader = [client _createDocumentLoaderWithRequest:request]; 1050 1051 [policyDocumentLoader setTriggeringAction:action]; 1052 [policyDocumentLoader setOverrideEncoding:[[self documentLoader] overrideEncoding]]; 1053 1054 [self loadDocumentLoader:policyDocumentLoader withLoadType:type formState:formState]; 1055 } 1056 1057 - (void)_reloadAllowingStaleDataWithOverrideEncoding:(NSString *)encoding 1058 { 1059 if (documentLoader == nil) 1060 return; 1061 1062 NSMutableURLRequest *request = [[documentLoader request] mutableCopy]; 1063 NSURL *unreachableURL = [documentLoader unreachableURL]; 1064 if (unreachableURL != nil) 958 959 load(newDocumentLoader, type, 0); 960 } 961 962 void FrameLoader::load(NSURLRequest *request, NSDictionary *action, FrameLoadType type, PassRefPtr<FormState> formState) 963 { 964 WebDocumentLoader *loader = [m_client _createDocumentLoaderWithRequest:request]; 965 setPolicyDocumentLoader(loader); 966 [loader release]; 967 968 [loader setTriggeringAction:action]; 969 [loader setOverrideEncoding:[m_documentLoader.get() overrideEncoding]]; 970 971 load(loader, type, formState); 972 } 973 974 void FrameLoader::reloadAllowingStaleData(NSString *encoding) 975 { 976 if (!m_documentLoader) 977 return; 978 979 NSMutableURLRequest *request = [[m_documentLoader.get() request] mutableCopy]; 980 NSURL *unreachableURL = [m_documentLoader.get() unreachableURL]; 981 if (unreachableURL) 1065 982 [request setURL:unreachableURL]; 1066 983 1067 984 [request setCachePolicy:NSURLRequestReturnCacheDataElseLoad]; 1068 ASSERT(!policyDocumentLoader); 1069 policyDocumentLoader = [client _createDocumentLoaderWithRequest:request]; 985 986 WebDocumentLoader *loader = [m_client _createDocumentLoaderWithRequest:request]; 987 setPolicyDocumentLoader(loader); 988 [loader release]; 989 1070 990 [request release]; 1071 1072 [ policyDocumentLoader setOverrideEncoding:encoding];1073 1074 [self loadDocumentLoader:policyDocumentLoader withLoadType:FrameLoadTypeReloadAllowingStaleData formState:nil];1075 } 1076 1077 - (void)reload 1078 { 1079 if ( documentLoader == nil)1080 return; 1081 1082 NSMutableURLRequest *initialRequest = [ documentLoaderrequest];991 992 [loader setOverrideEncoding:encoding]; 993 994 load(loader, FrameLoadTypeReloadAllowingStaleData, 0); 995 } 996 997 void FrameLoader::reload() 998 { 999 if (!m_documentLoader) 1000 return; 1001 1002 NSMutableURLRequest *initialRequest = [m_documentLoader.get() request]; 1083 1003 1084 1004 // If a window is created by javascript, its main frame can have an empty but non-nil URL. 1085 1005 // Reloading in this case will lose the current contents (see 4151001). 1086 if ([[[ [documentLoader request]URL] absoluteString] length] == 0)1006 if ([[[initialRequest URL] absoluteString] length] == 0) 1087 1007 return; 1088 1008 … … 1092 1012 initialRequest = [NSURLRequest requestWithURL:unreachableURL]; 1093 1013 1094 ASSERT(!policyDocumentLoader); 1095 policyDocumentLoader = [client _createDocumentLoaderWithRequest:initialRequest]; 1096 NSMutableURLRequest *request = [policyDocumentLoader request]; 1014 WebDocumentLoader *loader = [m_client _createDocumentLoaderWithRequest:initialRequest]; 1015 setPolicyDocumentLoader(loader); 1016 [loader release]; 1017 1018 NSMutableURLRequest *request = [loader request]; 1097 1019 1098 1020 [request setCachePolicy:NSURLRequestReloadIgnoringCacheData]; … … 1100 1022 // If we're about to rePOST, set up action so the app can warn the user 1101 1023 if (isCaseInsensitiveEqual([request HTTPMethod], @"POST")) { 1102 NSDictionary *action = [self actionInformationForNavigationType:NavigationTypeFormResubmitted 1103 event:nil originalURL:[request URL]]; 1104 [policyDocumentLoader setTriggeringAction:action]; 1105 } 1106 1107 [policyDocumentLoader setOverrideEncoding:[documentLoader overrideEncoding]]; 1108 1109 [self loadDocumentLoader:policyDocumentLoader withLoadType:FrameLoadTypeReload formState:nil]; 1110 } 1111 1112 - (void)didReceiveServerRedirectForProvisionalLoadForFrame 1113 { 1114 [client _dispatchDidReceiveServerRedirectForProvisionalLoadForFrame]; 1115 } 1116 1117 - (void)finishedLoadingDocument:(WebDocumentLoader *)loader 1118 { 1119 [client _finishedLoadingDocument:loader]; 1120 } 1121 1122 - (void)committedLoadWithDocumentLoader:(WebDocumentLoader *)loader data:(NSData *)data 1123 { 1124 [client _committedLoadWithDocumentLoader:loader data:data]; 1125 } 1126 1127 - (BOOL)isReplacing 1128 { 1129 return loadType == FrameLoadTypeReplace; 1130 } 1131 1132 - (void)setReplacing 1133 { 1134 loadType = FrameLoadTypeReplace; 1135 } 1136 1137 - (void)revertToProvisionalWithDocumentLoader:(WebDocumentLoader *)loader 1138 { 1139 [client _revertToProvisionalStateForDocumentLoader:loader]; 1140 } 1141 1142 - (void)documentLoader:(WebDocumentLoader *)loader setMainDocumentError:(NSError *)error 1143 { 1144 [client _setMainDocumentError:error forDocumentLoader:loader]; 1145 } 1146 1147 - (void)documentLoader:(WebDocumentLoader *)loader mainReceivedCompleteError:(NSError *)error 1024 NSDictionary *action = actionInformation(NavigationTypeFormResubmitted, nil, [request URL]); 1025 [loader setTriggeringAction:action]; 1026 } 1027 1028 [loader setOverrideEncoding:[m_documentLoader.get() overrideEncoding]]; 1029 1030 load(loader, FrameLoadTypeReload, 0); 1031 } 1032 1033 void FrameLoader::didReceiveServerRedirectForProvisionalLoadForFrame() 1034 { 1035 [m_client _dispatchDidReceiveServerRedirectForProvisionalLoadForFrame]; 1036 } 1037 1038 void FrameLoader::finishedLoadingDocument(WebDocumentLoader *loader) 1039 { 1040 [m_client _finishedLoadingDocument:loader]; 1041 } 1042 1043 void FrameLoader::committedLoad(WebDocumentLoader *loader, NSData *data) 1044 { 1045 [m_client _committedLoadWithDocumentLoader:loader data:data]; 1046 } 1047 1048 bool FrameLoader::isReplacing() const 1049 { 1050 return m_loadType == FrameLoadTypeReplace; 1051 } 1052 1053 void FrameLoader::setReplacing() 1054 { 1055 m_loadType = FrameLoadTypeReplace; 1056 } 1057 1058 void FrameLoader::revertToProvisional(WebDocumentLoader *loader) 1059 { 1060 [m_client _revertToProvisionalStateForDocumentLoader:loader]; 1061 } 1062 1063 void FrameLoader::setMainDocumentError(WebDocumentLoader *loader, NSError *error) 1064 { 1065 [m_client _setMainDocumentError:error forDocumentLoader:loader]; 1066 } 1067 1068 void FrameLoader::mainReceivedCompleteError(WebDocumentLoader *loader, NSError *error) 1148 1069 { 1149 1070 [loader setPrimaryLoadComplete:YES]; 1150 [ client _dispatchDidLoadMainResourceForDocumentLoader:[self activeDocumentLoader]];1151 [self checkLoadComplete];1152 } 1153 1154 - (void)finalSetupForReplaceWithDocumentLoader:(WebDocumentLoader *)loader 1155 { 1156 [ client _clearUnarchivingStateForLoader:loader];1157 } 1158 1159 - (void)prepareForLoadStart 1160 { 1161 [ client _progressStarted];1162 [ client _dispatchDidStartProvisionalLoadForFrame];1163 } 1164 1165 - (BOOL)subframeIsLoading 1071 [m_client _dispatchDidLoadMainResourceForDocumentLoader:activeDocumentLoader()]; 1072 checkLoadComplete(); 1073 } 1074 1075 void FrameLoader::finalSetupForReplace(WebDocumentLoader *loader) 1076 { 1077 [m_client _clearUnarchivingStateForLoader:loader]; 1078 } 1079 1080 void FrameLoader::prepareForLoadStart() 1081 { 1082 [m_client _progressStarted]; 1083 [m_client _dispatchDidStartProvisionalLoadForFrame]; 1084 } 1085 1086 bool FrameLoader::subframeIsLoading() const 1166 1087 { 1167 1088 // It's most likely that the last added frame is the last to load so we walk backwards. 1168 for (WebCoreFrameBridge *frame = [frameBridge lastChild]; frame; frame = [frame previousSibling]) 1169 if ([[[frame frameLoader] documentLoader] isLoadingInAPISense] || [[[frame frameLoader] provisionalDocumentLoader] isLoadingInAPISense]) 1170 return YES; 1171 return NO; 1172 } 1173 1174 - (void)willChangeTitleForDocument:(WebDocumentLoader *)loader 1175 { 1176 [client _willChangeTitleForDocument:loader]; 1177 } 1178 1179 - (void)didChangeTitleForDocument:(WebDocumentLoader *)loader 1180 { 1181 [client _didChangeTitleForDocument:loader]; 1089 for (Frame* child = m_frame->tree()->lastChild(); child; child = child->tree()->previousSibling()) { 1090 FrameLoader* childLoader = [Mac(child)->bridge() frameLoader]; 1091 if ([childLoader->documentLoader() isLoadingInAPISense] || [childLoader->provisionalDocumentLoader() isLoadingInAPISense]) 1092 return true; 1093 } 1094 return false; 1095 } 1096 1097 void FrameLoader::willChangeTitle(WebDocumentLoader *loader) 1098 { 1099 [m_client _willChangeTitleForDocument:loader]; 1100 } 1101 1102 void FrameLoader::didChangeTitle(WebDocumentLoader *loader) 1103 { 1104 [m_client _didChangeTitleForDocument:loader]; 1182 1105 1183 1106 // The title doesn't get communicated to the WebView until we are committed. … … 1187 1110 // Must update the entries in the back-forward list too. 1188 1111 // This must go through the WebFrame because it has the right notion of the current b/f item. 1189 [ client _setTitle:[loader title] forURL:URLForHistory];1190 [ client _setMainFrameDocumentReady:YES]; // update observers with new DOMDocument1191 [ client _dispatchDidReceiveTitle:[loader title]];1112 [m_client _setTitle:[loader title] forURL:URLForHistory]; 1113 [m_client _setMainFrameDocumentReady:YES]; // update observers with new DOMDocument 1114 [m_client _dispatchDidReceiveTitle:[loader title]]; 1192 1115 } 1193 1116 } 1194 1117 } 1195 1118 1196 - (FrameLoadType)loadType 1197 { 1198 return loadType; 1199 } 1200 1201 - (void)setLoadType:(FrameLoadType)type 1202 { 1203 loadType = type; 1204 } 1205 1206 - (void)invalidatePendingPolicyDecisionCallingDefaultAction:(BOOL)call 1207 { 1208 [policyDecider invalidate]; 1209 [policyDecider release]; 1210 policyDecider = nil; 1211 1212 NSURLRequest *request = policyRequest; 1213 NSString *frameName = policyFrameName; 1214 id target = policyTarget; 1215 SEL selector = policySelector; 1216 RefPtr<FormState> formState = adoptRef(policyFormState); 1217 1218 policyRequest = nil; 1219 policyFrameName = nil; 1220 policyTarget = nil; 1221 policySelector = nil; 1222 policyFormState = 0; 1223 1224 if (call) { 1225 if (frameName) 1226 objc_msgSend(target, selector, nil, nil, nil); 1119 FrameLoadType FrameLoader::loadType() const 1120 { 1121 return m_loadType; 1122 } 1123 1124 void FrameLoader::invalidatePendingPolicyDecision(bool callDefaultAction) 1125 { 1126 [m_policyDecider.get() invalidate]; 1127 m_policyDecider = nil; 1128 1129 bool hadFrameName = m_policyFrameName; 1130 RetainPtr<id> target = m_policyTarget; 1131 SEL selector = m_policySelector; 1132 1133 m_policyRequest = nil; 1134 m_policyFrameName = nil; 1135 m_policyTarget = nil; 1136 m_policyFormState = 0; 1137 1138 if (callDefaultAction) { 1139 if (hadFrameName) 1140 objc_msgSend(target.get(), selector, nil, nil, nil); 1227 1141 else 1228 objc_msgSend(target, selector, nil, nil); 1229 } 1230 1231 [request release]; 1232 [frameName release]; 1233 [target release]; 1234 } 1235 1236 - (void)checkNewWindowPolicyForRequest:(NSURLRequest *)request action:(NSDictionary *)action frameName:(NSString *)frameName formState:(PassRefPtr<FormState>)formState andCall:(id)target withSelector:(SEL)selector 1237 { 1238 WebPolicyDecider *decider = [client _createPolicyDeciderWithTarget:self action:@selector(continueAfterNewWindowPolicy:)]; 1239 1240 policyRequest = [request retain]; 1241 policyTarget = [target retain]; 1242 policyFrameName = [frameName retain]; 1243 policySelector = selector; 1244 policyDecider = [decider retain]; 1245 ASSERT(!policyFormState); 1246 policyFormState = formState.release(); 1247 1248 [client _dispatchDecidePolicyForNewWindowAction:action request:request newFrameName:frameName decider:decider]; 1249 1142 objc_msgSend(target.get(), selector, nil, nil); 1143 } 1144 } 1145 1146 void FrameLoader::checkNewWindowPolicy(NSURLRequest *request, NSDictionary *action, 1147 NSString *frameName, PassRefPtr<FormState> formState) 1148 { 1149 WebPolicyDecider *decider = [m_client _createPolicyDeciderWithTarget:asDelegate() 1150 action:@selector(continueAfterNewWindowPolicy:)]; 1151 1152 m_policyRequest = request; 1153 m_policyTarget = asDelegate(); 1154 m_policyFrameName = frameName; 1155 m_policySelector = @selector(continueLoadRequestAfterNewWindowPolicy:frameName:formState:); 1156 m_policyDecider = decider; 1157 m_policyFormState = formState; 1158 1159 [m_client _dispatchDecidePolicyForNewWindowAction:action request:request 1160 newFrameName:frameName decider:decider]; 1161 1250 1162 [decider release]; 1251 1163 } 1252 1164 1253 - (void)continueAfterNewWindowPolicy:(WebPolicyAction)policy 1254 { 1255 NSURLRequest *request = [[policyRequest retain] autorelease]; 1256 NSString *frameName = [[policyFrameName retain] autorelease]; 1257 id target = [[policyTarget retain] autorelease]; 1258 SEL selector = policySelector; 1259 RefPtr<FormState> formState = policyFormState; 1260 1261 // will release policy* objects, hence the above retains 1262 [self invalidatePendingPolicyDecisionCallingDefaultAction:NO]; 1165 void FrameLoader::continueAfterNewWindowPolicy(WebPolicyAction policy) 1166 { 1167 RetainPtr<NSURLRequest> request = m_policyRequest; 1168 RetainPtr<NSString> frameName = m_policyFrameName; 1169 RetainPtr<id> target = m_policyTarget; 1170 SEL selector = m_policySelector; 1171 RefPtr<FormState> formState = m_policyFormState; 1172 1173 invalidatePendingPolicyDecision(false); 1263 1174 1264 1175 switch (policy) { … … 1267 1178 break; 1268 1179 case WebPolicyDownload: 1269 [ client _startDownloadWithRequest:request];1180 [m_client _startDownloadWithRequest:request.get()]; 1270 1181 request = nil; 1271 1182 break; … … 1274 1185 } 1275 1186 1276 objc_msgSend(target, selector, request, frameName, formState.get()); 1277 } 1278 1279 - (void)checkNavigationPolicyForRequest:(NSURLRequest *)request 1280 documentLoader:(WebDocumentLoader *)loader 1281 formState:(PassRefPtr<FormState>)formState 1282 andCall:(id)target 1283 withSelector:(SEL)selector 1187 objc_msgSend(target.get(), selector, request.get(), frameName.get(), formState.get()); 1188 } 1189 1190 void FrameLoader::checkNavigationPolicy(NSURLRequest *request, WebDocumentLoader *loader, 1191 PassRefPtr<FormState> formState, id target, SEL selector) 1284 1192 { 1285 1193 NSDictionary *action = [loader triggeringAction]; 1286 1194 if (action == nil) { 1287 action = [self actionInformationForNavigationType:NavigationTypeOther 1288 event:nil originalURL:[request URL]]; 1195 action = actionInformation(NavigationTypeOther, nil, [request URL]); 1289 1196 [loader setTriggeringAction:action]; 1290 1197 } … … 1293 1200 // This avoids confusion on the part of the client. 1294 1201 if ([request isEqual:[loader lastCheckedRequest]] || urlIsEmpty([request URL])) { 1295 [target performSelector:selector withObject:request withObject:nil];1202 objc_msgSend(target, selector, request, nil); 1296 1203 return; 1297 1204 } … … 1300 1207 // treat it like a reload so it maintains the right state for b/f list. 1301 1208 if ([request _webDataRequestUnreachableURL] != nil) { 1302 if (isBackForwardLoadType( policyLoadType))1303 policyLoadType = FrameLoadTypeReload;1304 [target performSelector:selector withObject:request withObject:nil];1209 if (isBackForwardLoadType(m_policyLoadType)) 1210 m_policyLoadType = FrameLoadTypeReload; 1211 objc_msgSend(target, selector, request, nil); 1305 1212 return; 1306 1213 } … … 1308 1215 [loader setLastCheckedRequest:request]; 1309 1216 1310 WebPolicyDecider *decider = [client _createPolicyDeciderWithTarget:self action:@selector(continueAfterNavigationPolicy:)]; 1311 1312 ASSERT(policyRequest == nil); 1313 policyRequest = [request retain]; 1314 ASSERT(policyTarget == nil); 1315 policyTarget = [target retain]; 1316 policySelector = selector; 1317 ASSERT(policyDecider == nil); 1318 policyDecider = [decider retain]; 1319 ASSERT(!policyFormState); 1320 policyFormState = formState.release(); 1321 1322 delegateIsDecidingNavigationPolicy = YES; 1323 [client _dispatchDecidePolicyForNavigationAction:action request:request decider:decider]; 1324 delegateIsDecidingNavigationPolicy = NO; 1217 WebPolicyDecider *decider = [m_client _createPolicyDeciderWithTarget:asDelegate() 1218 action:@selector(continueAfterNavigationPolicy:)]; 1219 1220 m_policyRequest = request; 1221 m_policyTarget = target; 1222 m_policySelector = selector; 1223 m_policyDecider = decider; 1224 m_policyFormState = formState; 1225 1226 m_delegateIsDecidingNavigationPolicy = true; 1227 [m_client _dispatchDecidePolicyForNavigationAction:action request:request decider:decider]; 1228 m_delegateIsDecidingNavigationPolicy = false; 1325 1229 1326 1230 [decider release]; 1327 1231 } 1328 1232 1329 - (void)continueAfterNavigationPolicy:(WebPolicyAction)policy 1330 { 1331 NSURLRequest *request = [[policyRequest retain] autorelease]; 1332 id target = [[policyTarget retain] autorelease]; 1333 SEL selector = policySelector; 1334 RefPtr<FormState> formState = policyFormState; 1335 1336 // will release policy* objects, hence the above retains 1337 [self invalidatePendingPolicyDecisionCallingDefaultAction:NO]; 1233 void FrameLoader::continueAfterNavigationPolicy(WebPolicyAction policy) 1234 { 1235 RetainPtr<NSURLRequest> request = m_policyRequest; 1236 RetainPtr<id> target = m_policyTarget; 1237 SEL selector = m_policySelector; 1238 RefPtr<FormState> formState = m_policyFormState.release(); 1239 1240 invalidatePendingPolicyDecision(false); 1338 1241 1339 1242 switch (policy) { … … 1342 1245 break; 1343 1246 case WebPolicyDownload: 1344 [ client _startDownloadWithRequest:request];1247 [m_client _startDownloadWithRequest:request.get()]; 1345 1248 request = nil; 1346 1249 break; 1347 1250 case WebPolicyUse: 1348 if (![ client _canHandleRequest:request]) {1349 [self handleUnimplementablePolicyWithError:[client _cannotShowURLErrorWithRequest:request]];1251 if (![m_client _canHandleRequest:request.get()]) { 1252 handleUnimplementablePolicy([m_client _cannotShowURLErrorWithRequest:request.get()]); 1350 1253 request = nil; 1351 1254 } … … 1353 1256 } 1354 1257 1355 objc_msgSend(target, selector, request, formState.get()); 1356 } 1357 1358 // Called after the FormsDelegate is done processing willSubmitForm: 1359 - (void)continueAfterWillSubmitForm:(WebPolicyAction)policy 1360 { 1361 if (policyDecider) { 1362 [policyDecider invalidate]; 1363 [policyDecider release]; 1364 policyDecider = nil; 1365 } 1366 [self startLoading]; 1367 } 1368 1369 - (void)continueLoadRequestAfterNavigationPolicy:(NSURLRequest *)request formState:(FormState *)formState 1258 objc_msgSend(target.get(), selector, request.get(), formState.get()); 1259 } 1260 1261 void FrameLoader::continueAfterWillSubmitForm(WebPolicyAction policy) 1262 { 1263 if (m_policyDecider) { 1264 [m_policyDecider.get() invalidate]; 1265 m_policyDecider = nil; 1266 } 1267 startLoading(); 1268 } 1269 1270 void FrameLoader::continueLoadRequestAfterNavigationPolicy(NSURLRequest *request, FormState* formState) 1370 1271 { 1371 1272 // If we loaded an alternate page to replace an unreachableURL, we'll get in here with a 1372 1273 // nil policyDataSource because loading the alternate page will have passed 1373 1274 // through this method already, nested; otherwise, policyDataSource should still be set. 1374 ASSERT( policyDocumentLoader || [provisionalDocumentLoaderunreachableURL] != nil);1375 1376 BOOL isTargetItem = [ client _provisionalItemIsTarget];1275 ASSERT(m_policyDocumentLoader || [m_provisionalDocumentLoader.get() unreachableURL] != nil); 1276 1277 BOOL isTargetItem = [m_client _provisionalItemIsTarget]; 1377 1278 1378 1279 // Two reasons we can't continue: … … 1381 1282 // 2) User responded Cancel to an alert popped up by the before unload event handler. 1382 1283 // The "before unload" event handler runs only for the main frame. 1383 BOOL canContinue = request && (![self isLoadingMainFrame] || [frameBridgeshouldClose]);1284 bool canContinue = request && (!isLoadingMainFrame() || [bridge() shouldClose]); 1384 1285 1385 1286 if (!canContinue) { 1386 1287 // If we were waiting for a quick redirect, but the policy delegate decided to ignore it, then we 1387 1288 // need to report that the client redirect was cancelled. 1388 if ( quickRedirectComing)1389 [self clientRedirectCancelledOrFinished:NO];1390 1391 [self setPolicyDocumentLoader:nil];1289 if (m_quickRedirectComing) 1290 clientRedirectCancelledOrFinished(false); 1291 1292 setPolicyDocumentLoader(nil); 1392 1293 1393 1294 // If the navigation request came from the back/forward menu, and we punt on it, we have the 1394 1295 // problem that we have optimistically moved the b/f cursor already, so move it back. For sanity, 1395 1296 // we only do this when punting a navigation for the target frame or top-level frame. 1396 if ((isTargetItem || [self isLoadingMainFrame]) && isBackForwardLoadType(policyLoadType)) 1397 [client _resetBackForwardList]; 1398 1399 return; 1400 } 1401 1402 FrameLoadType type = policyLoadType; 1403 WebDocumentLoader *dl = [policyDocumentLoader retain]; 1404 1405 [self stopLoading]; 1406 loadType = type; 1407 1408 [self startProvisionalLoad:dl]; 1409 1410 [dl release]; 1411 [self setPolicyDocumentLoader:nil]; 1412 1413 if (isBackForwardLoadType(type) && [client _loadProvisionalItemFromPageCache]) 1297 if ((isTargetItem || isLoadingMainFrame()) && isBackForwardLoadType(m_policyLoadType)) 1298 [m_client _resetBackForwardList]; 1299 1300 return; 1301 } 1302 1303 FrameLoadType type = m_policyLoadType; 1304 stopLoading(); 1305 setProvisionalDocumentLoader(m_policyDocumentLoader.get()); 1306 m_loadType = type; 1307 setState(WebFrameStateProvisional); 1308 1309 setPolicyDocumentLoader(nil); 1310 1311 if (isBackForwardLoadType(type) && [m_client _loadProvisionalItemFromPageCache]) 1414 1312 return; 1415 1313 … … 1417 1315 // It's a bit of a hack to reuse the WebPolicyDecisionListener for the continuation 1418 1316 // mechanism across the willSubmitForm callout. 1419 policyDecider = [client _createPolicyDeciderWithTarget:self action:@selector(continueAfterWillSubmitForm:)]; 1420 [client _dispatchSourceFrame:Mac(formState->sourceFrame())->bridge() 1317 WebPolicyDecider *decider = [m_client _createPolicyDeciderWithTarget:asDelegate() action:@selector(continueAfterWillSubmitForm:)]; 1318 m_policyDecider = decider; 1319 [m_client _dispatchSourceFrame:Mac(formState->sourceFrame())->bridge() 1421 1320 willSubmitForm:[DOMElement _elementWith:formState->form()] 1422 withValues:formState->valuesAsNSDictionary() submissionDecider:policyDecider]; 1321 withValues:formState->valuesAsNSDictionary() submissionDecider:decider]; 1322 [decider release]; 1423 1323 } else 1424 [self continueAfterWillSubmitForm:WebPolicyUse];1425 } 1426 1427 - (void)loadDocumentLoader:(WebDocumentLoader *)loader withLoadType:(FrameLoadType)type formState:(PassRefPtr<FormState>)formState 1428 { 1429 ASSERT([ client _hasWebView]);1324 continueAfterWillSubmitForm(WebPolicyUse); 1325 } 1326 1327 void FrameLoader::load(WebDocumentLoader *loader, FrameLoadType type, PassRefPtr<FormState> formState) 1328 { 1329 ASSERT([m_client _hasWebView]); 1430 1330 1431 1331 // Unfortunately the view must be non-nil, this is ultimately due 1432 1332 // to parser requiring a FrameView. We should fix this dependency. 1433 1333 1434 ASSERT([client _hasFrameView]); 1435 1436 policyLoadType = type; 1437 1438 WebCoreFrameBridge *parentFrame = [[self bridge] parent]; 1439 if (parentFrame) 1440 [loader setOverrideEncoding:[[[parentFrame frameLoader] documentLoader] overrideEncoding]]; 1441 1442 [loader setFrameLoader:self]; 1443 1444 [self invalidatePendingPolicyDecisionCallingDefaultAction:YES]; 1445 1446 [self setPolicyDocumentLoader:loader]; 1447 1448 [self checkNavigationPolicyForRequest:[loader request] 1449 documentLoader:loader 1450 formState:formState 1451 andCall:self 1452 withSelector:@selector(continueLoadRequestAfterNavigationPolicy:formState:)]; 1453 } 1454 1455 - (void)didFirstLayout 1456 { 1457 if (isBackForwardLoadType(loadType) && [client _hasBackForwardList]) 1458 [client _restoreScrollPositionAndViewState]; 1459 1460 firstLayoutDone = YES; 1461 [client _dispatchDidFirstLayoutInFrame]; 1462 } 1463 1464 - (void)frameLoadCompleted 1465 { 1466 [client _frameLoadCompleted]; 1467 1468 // After a canceled provisional load, firstLayoutDone is NO. Reset it to YES if we're displaying a page. 1469 if (documentLoader) 1470 firstLayoutDone = YES; 1471 } 1472 1473 - (BOOL)firstLayoutDone 1474 { 1475 return firstLayoutDone; 1476 } 1477 1478 - (BOOL)isQuickRedirectComing 1479 { 1480 return quickRedirectComing; 1481 } 1482 1483 - (void)transitionToCommitted:(NSDictionary *)pageCache 1484 { 1485 ASSERT([client _hasWebView]); 1486 ASSERT([self state] == WebFrameStateProvisional); 1487 1488 if ([self state] != WebFrameStateProvisional) 1489 return; 1490 1491 [client _setCopiesOnScroll]; 1492 [client _updateHistoryForCommit]; 1334 ASSERT([m_client _hasFrameView]); 1335 1336 m_policyLoadType = type; 1337 1338 if (Frame* parent = m_frame->tree()->parent()) 1339 [loader setOverrideEncoding:[[Mac(parent)->bridge() frameLoader]->documentLoader() overrideEncoding]]; 1340 1341 invalidatePendingPolicyDecision(true); 1342 setPolicyDocumentLoader(loader); 1343 1344 checkNavigationPolicy([loader request], loader, formState, 1345 asDelegate(), @selector(continueLoadRequestAfterNavigationPolicy:formState:)); 1346 } 1347 1348 void FrameLoader::didFirstLayout() 1349 { 1350 if (isBackForwardLoadType(m_loadType) && [m_client _hasBackForwardList]) 1351 [m_client _restoreScrollPositionAndViewState]; 1352 1353 m_firstLayoutDone = true; 1354 [m_client _dispatchDidFirstLayoutInFrame]; 1355 } 1356 1357 void FrameLoader::frameLoadCompleted() 1358 { 1359 [m_client _frameLoadCompleted]; 1360 1361 // After a canceled provisional load, firstLayoutDone is false. 1362 // Reset it to YES if we're displaying a page. 1363 if (m_documentLoader) 1364 m_firstLayoutDone = true; 1365 } 1366 1367 bool FrameLoader::firstLayoutDone() const 1368 { 1369 return m_firstLayoutDone; 1370 } 1371 1372 bool FrameLoader::isQuickRedirectComing() const 1373 { 1374 return m_quickRedirectComing; 1375 } 1376 1377 void FrameLoader::transitionToCommitted(NSDictionary *pageCache) 1378 { 1379 ASSERT([m_client _hasWebView]); 1380 ASSERT(m_state == WebFrameStateProvisional); 1381 1382 if (m_state != WebFrameStateProvisional) 1383 return; 1384 1385 [m_client _setCopiesOnScroll]; 1386 [m_client _updateHistoryForCommit]; 1493 1387 1494 1388 // The call to closeURL invokes the unload event handler, which can execute arbitrary 1495 1389 // JavaScript. If the script initiates a new load, we need to abandon the current load, 1496 1390 // or the two will stomp each other. 1497 WebDocumentLoader *pdl = provisionalDocumentLoader;1498 [ frameBridgecloseURL];1499 if (pdl != provisionalDocumentLoader)1500 return; 1501 1502 [self commitProvisionalLoad];1391 WebDocumentLoader *pdl = m_provisionalDocumentLoader.get(); 1392 [bridge() closeURL]; 1393 if (pdl != m_provisionalDocumentLoader) 1394 return; 1395 1396 commitProvisionalLoad(); 1503 1397 1504 1398 // Handle adding the URL to the back/forward list. 1505 WebDocumentLoader *dl = documentLoader;1399 WebDocumentLoader *dl = m_documentLoader.get(); 1506 1400 NSString *ptitle = [dl title]; 1507 1401 1508 switch ( loadType) {1402 switch (m_loadType) { 1509 1403 case FrameLoadTypeForward: 1510 1404 case FrameLoadTypeBack: 1511 1405 case FrameLoadTypeIndexedBackForward: 1512 if ([ client _hasBackForwardList]) {1513 [ client _updateHistoryForBackForwardNavigation];1406 if ([m_client _hasBackForwardList]) { 1407 [m_client _updateHistoryForBackForwardNavigation]; 1514 1408 1515 1409 // Create a document view for this document, or used the cached view. 1516 1410 if (pageCache) 1517 [ client _setDocumentViewFromPageCache:pageCache];1411 [m_client _setDocumentViewFromPageCache:pageCache]; 1518 1412 else 1519 [ client _makeDocumentView];1413 [m_client _makeDocumentView]; 1520 1414 } 1521 1415 break; … … 1524 1418 case FrameLoadTypeSame: 1525 1419 case FrameLoadTypeReplace: 1526 [ client _updateHistoryForReload];1527 [ client _makeDocumentView];1420 [m_client _updateHistoryForReload]; 1421 [m_client _makeDocumentView]; 1528 1422 break; 1529 1423 1530 1424 // FIXME - just get rid of this case, and merge FrameLoadTypeReloadAllowingStaleData with the above case 1531 1425 case FrameLoadTypeReloadAllowingStaleData: 1532 [ client _makeDocumentView];1426 [m_client _makeDocumentView]; 1533 1427 break; 1534 1428 1535 1429 case FrameLoadTypeStandard: 1536 [ client _updateHistoryForStandardLoad];1537 [ client _makeDocumentView];1430 [m_client _updateHistoryForStandardLoad]; 1431 [m_client _makeDocumentView]; 1538 1432 break; 1539 1433 1540 1434 case FrameLoadTypeInternal: 1541 [ client _updateHistoryForInternalLoad];1542 [ client _makeDocumentView];1435 [m_client _updateHistoryForInternalLoad]; 1436 [m_client _makeDocumentView]; 1543 1437 break; 1544 1438 … … 1550 1444 1551 1445 // Tell the client we've committed this URL. 1552 ASSERT([ client _hasFrameView]);1553 [ client _dispatchDidCommitLoadForFrame];1446 ASSERT([m_client _hasFrameView]); 1447 [m_client _dispatchDidCommitLoadForFrame]; 1554 1448 1555 1449 // If we have a title let the WebView know about it. 1556 1450 if (ptitle) 1557 [ client _dispatchDidReceiveTitle:ptitle];1558 } 1559 1560 - (void)checkLoadCompleteForThisFrame 1561 { 1562 ASSERT([ client _hasWebView]);1563 1564 switch ( [self state]) {1451 [m_client _dispatchDidReceiveTitle:ptitle]; 1452 } 1453 1454 void FrameLoader::checkLoadCompleteForThisFrame() 1455 { 1456 ASSERT([m_client _hasWebView]); 1457 1458 switch (m_state) { 1565 1459 case WebFrameStateProvisional: { 1566 if ( delegateIsHandlingProvisionalLoadError)1460 if (m_delegateIsHandlingProvisionalLoadError) 1567 1461 return; 1568 1462 1569 WebDocumentLoader *pdl = [provisionalDocumentLoader retain];1463 WebDocumentLoader *pdl = m_provisionalDocumentLoader.get(); 1570 1464 1571 1465 // If we've received any errors we may be stuck in the provisional state and actually complete. 1572 1466 NSError *error = [pdl mainDocumentError]; 1573 if (error != nil) { 1574 // Check all children first. 1575 LoadErrorResetToken *resetToken = [client _tokenForLoadErrorReset]; 1576 BOOL shouldReset = YES; 1577 if (![pdl isLoadingInAPISense]) { 1578 delegateIsHandlingProvisionalLoadError = YES; 1579 [client _dispatchDidFailProvisionalLoadWithError:error]; 1580 delegateIsHandlingProvisionalLoadError = NO; 1581 1582 // FIXME: can stopping loading here possibly have 1583 // any effect, if isLoading is false, which it 1584 // must be, to be in this branch of the if? And is it ok to just do 1585 // a full-on stopLoading? 1586 [self stopLoadingSubframes]; 1587 [pdl stopLoading]; 1588 1589 // Finish resetting the load state, but only if another load hasn't been started by the 1590 // delegate callback. 1591 if (pdl == provisionalDocumentLoader) 1592 [self clearProvisionalLoad]; 1593 else { 1594 NSURL *unreachableURL = [provisionalDocumentLoader unreachableURL]; 1595 if (unreachableURL != nil && [unreachableURL isEqual:[[pdl request] URL]]) 1596 shouldReset = NO; 1597 } 1467 if (!error) 1468 return; 1469 1470 [pdl retain]; 1471 1472 // Check all children first. 1473 LoadErrorResetToken *resetToken = [m_client _tokenForLoadErrorReset]; 1474 bool shouldReset = true; 1475 if (![pdl isLoadingInAPISense]) { 1476 m_delegateIsHandlingProvisionalLoadError = true; 1477 [m_client _dispatchDidFailProvisionalLoadWithError:error]; 1478 m_delegateIsHandlingProvisionalLoadError = false; 1479 1480 // FIXME: can stopping loading here possibly have any effect, if isLoading is false, 1481 // which it must be to be in this branch of the if? And is it OK to just do a full-on 1482 // stopLoading instead of stopLoadingSubframes? 1483 stopLoadingSubframes(); 1484 [pdl stopLoading]; 1485 1486 // Finish resetting the load state, but only if another load hasn't been started by the 1487 // delegate callback. 1488 if (pdl == m_provisionalDocumentLoader) 1489 clearProvisionalLoad(); 1490 else { 1491 NSURL *unreachableURL = [m_provisionalDocumentLoader.get() unreachableURL]; 1492 if (unreachableURL != nil && [unreachableURL isEqual:[[pdl request] URL]]) 1493 shouldReset = false; 1598 1494 } 1599 if (shouldReset)1600 [client _resetAfterLoadError:resetToken];1601 else1602 [client _doNotResetAfterLoadError:resetToken];1603 1495 } 1496 if (shouldReset) 1497 [m_client _resetAfterLoadError:resetToken]; 1498 else 1499 [m_client _doNotResetAfterLoadError:resetToken]; 1604 1500 [pdl release]; 1605 1501 return; … … 1607 1503 1608 1504 case WebFrameStateCommittedPage: { 1609 WebDocumentLoader *dl = documentLoader; 1610 1611 if (![dl isLoadingInAPISense]) { 1612 [self markLoadComplete]; 1613 1614 // FIXME: Is this subsequent work important if we already navigated away? 1615 // Maybe there are bugs because of that, or extra work we can skip because 1616 // the new page is ready. 1617 1618 [client _forceLayoutForNonHTML]; 1619 1620 // If the user had a scroll point, scroll to it, overriding the anchor point if any. 1621 if ((isBackForwardLoadType([self loadType]) || [self loadType] == FrameLoadTypeReload) 1622 && [client _hasBackForwardList]) 1623 [client _restoreScrollPositionAndViewState]; 1624 1625 NSError *error = [dl mainDocumentError]; 1626 if (error != nil) 1627 [client _dispatchDidFailLoadWithError:error]; 1628 else 1629 [client _dispatchDidFinishLoadForFrame]; 1630 1631 [client _progressCompleted]; 1632 1505 WebDocumentLoader *dl = m_documentLoader.get(); 1506 if ([dl isLoadingInAPISense]) 1633 1507 return; 1634 } 1508 1509 markLoadComplete(); 1510 1511 // FIXME: Is this subsequent work important if we already navigated away? 1512 // Maybe there are bugs because of that, or extra work we can skip because 1513 // the new page is ready. 1514 1515 [m_client _forceLayoutForNonHTML]; 1516 1517 // If the user had a scroll point, scroll to it, overriding the anchor point if any. 1518 if ((isBackForwardLoadType(m_loadType) || m_loadType == FrameLoadTypeReload) 1519 && [m_client _hasBackForwardList]) 1520 [m_client _restoreScrollPositionAndViewState]; 1521 1522 NSError *error = [dl mainDocumentError]; 1523 if (error) 1524 [m_client _dispatchDidFailLoadWithError:error]; 1525 else 1526 [m_client _dispatchDidFinishLoadForFrame]; 1527 1528 [m_client _progressCompleted]; 1635 1529 return; 1636 1530 } … … 1639 1533 // Even if already complete, we might have set a previous item on a frame that 1640 1534 // didn't do any data loading on the past transaction. Make sure to clear these out. 1641 [ client _frameLoadCompleted];1535 [m_client _frameLoadCompleted]; 1642 1536 return; 1643 1537 } … … 1646 1540 } 1647 1541 1648 - (void)continueLoadRequestAfterNewWindowPolicy:(NSURLRequest *)request frameName:(NSString *)frameName formState:(FormState *)formState 1542 void FrameLoader::continueLoadRequestAfterNewWindowPolicy(NSURLRequest *request, NSString *frameName, FormState* formState) 1649 1543 { 1650 1544 if (!request) 1651 1545 return; 1652 1546 1653 WebCoreFrameBridge <WebCoreFrameBridge> *bridge = frameBridge; 1654 [bridge retain]; 1655 1656 WebCoreFrameBridge *mainBridge = [client _dispatchCreateWebViewWithRequest:nil]; 1547 RefPtr<Frame> frame = m_frame; 1548 1549 WebCoreFrameBridge *mainBridge = [m_client _dispatchCreateWebViewWithRequest:nil]; 1657 1550 if (!mainBridge) 1658 goto exit;1551 return; 1659 1552 1660 1553 [mainBridge retain]; 1661 1554 1662 1555 [mainBridge setName:frameName]; 1663 1664 [[[mainBridge frameLoader] client] _dispatchShow]; 1665 1666 [mainBridge setOpener:bridge]; 1667 [[mainBridge frameLoader] _loadRequest:request triggeringAction:nil loadType:FrameLoadTypeStandard formState:formState]; 1556 [[mainBridge frameLoader]->client() _dispatchShow]; 1557 [mainBridge impl]->setOpener(frame.get()); 1558 [mainBridge frameLoader]->load(request, nil, FrameLoadTypeStandard, formState); 1668 1559 1669 1560 [mainBridge release]; 1670 1671 exit: 1672 [bridge release]; 1673 } 1674 1675 - (void)sendRemainingDelegateMessagesWithIdentifier:(id)identifier response:(NSURLResponse *)response length:(unsigned)length error:(NSError *)error 1561 } 1562 1563 void FrameLoader::sendRemainingDelegateMessages(id identifier, NSURLResponse *response, unsigned length, NSError *error) 1676 1564 { 1677 if (response != nil)1678 [ client _dispatchResource:identifier didReceiveResponse:response fromDocumentLoader:documentLoader];1565 if (response) 1566 [m_client _dispatchResource:identifier didReceiveResponse:response fromDocumentLoader:m_documentLoader.get()]; 1679 1567 1680 1568 if (length > 0) 1681 [ client _dispatchResource:identifier didReceiveContentLength:length fromDocumentLoader:documentLoader];1682 1683 if ( error == nil)1684 [ client _dispatchResource:identifier didFinishLoadingFromDocumentLoader:documentLoader];1569 [m_client _dispatchResource:identifier didReceiveContentLength:length fromDocumentLoader:m_documentLoader.get()]; 1570 1571 if (!error) 1572 [m_client _dispatchResource:identifier didFinishLoadingFromDocumentLoader:m_documentLoader.get()]; 1685 1573 else 1686 [ client _dispatchResource:identifier didFailLoadingWithError:error fromDocumentLoader:documentLoader];1687 } 1688 1689 - (NSURLRequest *)requestFromDelegateForRequest:(NSURLRequest *)request identifier:(id *)identifier error:(NSError **)error 1574 [m_client _dispatchResource:identifier didFailLoadingWithError:error fromDocumentLoader:m_documentLoader.get()]; 1575 } 1576 1577 NSURLRequest *FrameLoader::requestFromDelegate(NSURLRequest *request, id& identifier, NSError *& error) 1690 1578 { 1691 1579 ASSERT(request != nil); 1692 1693 *identifier = [client _dispatchIdentifierForInitialRequest:request fromDocumentLoader:documentLoader]; 1694 NSURLRequest *newRequest = [client _dispatchResource:*identifier willSendRequest:request redirectResponse:nil fromDocumentLoader:documentLoader]; 1695 1580 1581 identifier = [m_client _dispatchIdentifierForInitialRequest:request fromDocumentLoader:m_documentLoader.get()]; 1582 NSURLRequest *newRequest = [m_client _dispatchResource:identifier 1583 willSendRequest:request redirectResponse:nil fromDocumentLoader:m_documentLoader.get()]; 1584 1696 1585 if (newRequest == nil) 1697 *error = [client _cancelledErrorWithRequest:request];1586 error = [m_client _cancelledErrorWithRequest:request]; 1698 1587 else 1699 *error = nil;1700 1588 error = nil; 1589 1701 1590 return newRequest; 1702 1591 } 1703 1592 1704 - (void)loadRequest:(NSURLRequest *)request 1705 { 1706 // FIXME: is this the right place to reset loadType? Perhaps this should be done 1707 // after loading is finished or aborted. 1708 [self setLoadType:FrameLoadTypeStandard]; 1709 WebDocumentLoader *dl = [client _createDocumentLoaderWithRequest:request]; 1710 [self loadDocumentLoader:dl]; 1593 void FrameLoader::load(NSURLRequest *request) 1594 { 1595 // FIXME: is this the right place to reset loadType? Perhaps this should be done after loading is finished or aborted. 1596 m_loadType = FrameLoadTypeStandard; 1597 WebDocumentLoader *dl = [m_client _createDocumentLoaderWithRequest:request]; 1598 load(dl); 1711 1599 [dl release]; 1712 1600 } 1713 1601 1714 - (void)loadRequest:(NSURLRequest *)request inFrameNamed:(NSString *)frameName 1715 { 1716 if (frameName == nil) { 1717 [self loadRequest:request]; 1718 return; 1719 } 1720 1721 WebCoreFrameBridge *frame = [frameBridge findFrameNamed:frameName]; 1722 if (frame != nil) { 1723 [[frame frameLoader] loadRequest:request]; 1724 return; 1725 } 1726 1727 NSDictionary *action = [self actionInformationForNavigationType:NavigationTypeOther 1728 event:nil originalURL:[request URL]]; 1729 [self checkNewWindowPolicyForRequest:request action:action frameName:frameName formState:nil 1730 andCall:self withSelector:@selector(continueLoadRequestAfterNewWindowPolicy:frameName:formState:)]; 1731 } 1732 1733 - (void)postWithURL:(NSURL *)URL referrer:(NSString *)referrer target:(NSString *)target 1734 data:(NSArray *)postData contentType:(NSString *)contentType 1735 triggeringEvent:(NSEvent *)event form:(DOMElement *)form formValues:(NSDictionary *)values 1602 void FrameLoader::load(NSURLRequest *request, NSString *frameName) 1603 { 1604 if (!frameName) { 1605 load(request); 1606 return; 1607 } 1608 1609 Frame* frame = m_frame->tree()->find(frameName); 1610 if (frame) { 1611 [Mac(frame)->bridge() frameLoader]->load(request); 1612 return; 1613 } 1614 1615 NSDictionary *action = actionInformation(NavigationTypeOther, nil, [request URL]); 1616 checkNewWindowPolicy(request, action, frameName, 0); 1617 } 1618 1619 void FrameLoader::post(NSURL *URL, NSString *referrer, NSString *target, NSArray *postData, 1620 NSString *contentType, NSEvent *event, DOMElement *form, NSDictionary *formValues) 1736 1621 { 1737 1622 // When posting, use the NSURLRequestReloadIgnoringCacheData load flag. … … 1742 1627 1743 1628 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL]; 1744 [self addExtraFieldsToRequest:request mainResource:YES alwaysFromRequest:YES];1629 addExtraFieldsToRequest(request, true, true); 1745 1630 1746 1631 setHTTPReferrer(request, referrer); … … 1749 1634 [request setValue:contentType forHTTPHeaderField:@"Content-Type"]; 1750 1635 1751 NSDictionary *action = [self actionInformationForLoadType:FrameLoadTypeStandard isFormSubmission:YES event:event originalURL:URL];1636 NSDictionary *action = actionInformation(FrameLoadTypeStandard, true, event, URL); 1752 1637 RefPtr<FormState> formState; 1753 if (form && values)1754 formState = FormState::create(form, values, frameBridge);1638 if (form && formValues) 1639 formState = FormState::create(form, formValues, bridge()); 1755 1640 1756 1641 if (target != nil) { 1757 WebCoreFrameBridge *targetFrame = [frameBridge findFrameNamed:target];1758 if (targetFrame != nil)1759 [ [targetFrame frameLoader] _loadRequest:request triggeringAction:action loadType:FrameLoadTypeStandard formState:formState.release()];1642 Frame* targetFrame = m_frame->tree()->find(target); 1643 if (targetFrame) 1644 [Mac(targetFrame)->bridge() frameLoader]->load(request, action, FrameLoadTypeStandard, formState.release()); 1760 1645 else 1761 [self checkNewWindowPolicyForRequest:request action:action frameName:target formState:formState.release() 1762 andCall:self withSelector:@selector(continueLoadRequestAfterNewWindowPolicy:frameName:formState:)]; 1646 checkNewWindowPolicy(request, action, target, formState.release()); 1763 1647 } else 1764 [self _loadRequest:request triggeringAction:action loadType:FrameLoadTypeStandard formState:formState.release()];1648 load(request, action, FrameLoadTypeStandard, formState.release()); 1765 1649 1766 1650 [request release]; 1767 1651 } 1768 1652 1769 - (void)detachChildren 1770 { 1771 // FIXME: is it really necessary to do this in reverse order any more? 1772 WebCoreFrameBridge *child = [frameBridge lastChild]; 1773 WebCoreFrameBridge *prev = [child previousSibling]; 1774 for (; child; child = prev, prev = [child previousSibling]) 1775 [[child frameLoader] detachFromParent]; 1776 } 1777 1778 - (void)detachFromParent 1779 { 1780 WebCoreFrameBridge *bridge = [frameBridge retain]; 1653 void FrameLoader::detachChildren() 1654 { 1655 // FIXME: Is it really necessary to do this in reverse order? 1656 Frame* previous; 1657 for (Frame* child = m_frame->tree()->lastChild(); child; child = previous) { 1658 previous = child->tree()->previousSibling(); 1659 [Mac(child)->bridge() frameLoader]->detachFromParent(); 1660 } 1661 } 1662 1663 void FrameLoader::detachFromParent() 1664 { 1665 WebCoreFrameBridge *bridge = [FrameLoader::bridge() retain]; 1666 id <WebFrameLoaderClient> client = [m_client retain]; 1781 1667 1782 1668 [bridge closeURL]; 1783 [self stopLoading];1669 stopLoading(); 1784 1670 [client _detachedFromParent1]; 1785 [self detachChildren];1671 detachChildren(); 1786 1672 [client _detachedFromParent2]; 1787 [self setDocumentLoader:nil];1673 setDocumentLoader(nil); 1788 1674 [client _detachedFromParent3]; 1789 [[frameBridge parent] removeChild:bridge]; 1790 1791 id<WebFrameLoaderClient> c = [client retain]; 1675 if (Frame* parent = m_frame->tree()->parent()) 1676 parent->tree()->removeChild(m_frame); 1792 1677 [bridge close]; 1793 [c _detachedFromParent4];1794 [c release]; 1795 1678 [client _detachedFromParent4]; 1679 1680 [client release]; 1796 1681 [bridge release]; 1797 1682 } 1798 1683 1799 - (void)addExtraFieldsToRequest:(NSMutableURLRequest *)request mainResource:(BOOL)mainResource alwaysFromRequest:(BOOL)f 1800 { 1801 [request setValue:[ frameBridgeuserAgentForURL:[request URL]] forHTTPHeaderField:@"User-Agent"];1802 1803 if ( [self loadType]== FrameLoadTypeReload)1684 void FrameLoader::addExtraFieldsToRequest(NSMutableURLRequest *request, bool mainResource, bool alwaysFromRequest) 1685 { 1686 [request setValue:[bridge() userAgentForURL:[request URL]] forHTTPHeaderField:@"User-Agent"]; 1687 1688 if (m_loadType == FrameLoadTypeReload) 1804 1689 [request setValue:@"max-age=0" forHTTPHeaderField:@"Cache-Control"]; 1805 1690 1806 1691 // Don't set the cookie policy URL if it's already been set. 1807 1692 if ([request mainDocumentURL] == nil) { 1808 if (mainResource && ( [self isLoadingMainFrame] || f))1693 if (mainResource && (isLoadingMainFrame() || alwaysFromRequest)) 1809 1694 [request setMainDocumentURL:[request URL]]; 1810 1695 else 1811 [request setMainDocumentURL:[ client _mainFrameURL]];1696 [request setMainDocumentURL:[m_client _mainFrameURL]]; 1812 1697 } 1813 1698 … … 1816 1701 } 1817 1702 1818 - (void)safeLoadURL:(NSURL *)URL 1819 { 1820 // Call the bridge because this is where our security checks are made. 1821 [frameBridge loadURL:URL 1822 referrer:urlOriginalDataAsString([[documentLoader request] URL]) 1823 reload:NO 1824 userGesture:YES 1825 target:nil 1826 triggeringEvent:[NSApp currentEvent] 1827 form:nil 1828 formValues:nil]; 1829 } 1830 1831 - (NSDictionary *)actionInformationForLoadType:(FrameLoadType)type isFormSubmission:(BOOL)isFormSubmission event:(NSEvent *)event originalURL:(NSURL *)URL 1703 void FrameLoader::safeLoad(NSURL *URL) 1704 { 1705 [bridge() loadURL:URL 1706 referrer:urlOriginalDataAsString([[m_documentLoader.get() request] URL]) 1707 reload:NO 1708 userGesture:YES 1709 target:nil 1710 triggeringEvent:[NSApp currentEvent] 1711 form:nil 1712 formValues:nil]; 1713 } 1714 1715 NSDictionary *FrameLoader::actionInformation(FrameLoadType type, bool isFormSubmission, NSEvent *event, NSURL *originalURL) 1832 1716 { 1833 1717 NavigationType navType; 1834 if (isFormSubmission) {1718 if (isFormSubmission) 1835 1719 navType = NavigationTypeFormSubmitted; 1836 } else if (event == nil) { 1837 if (type == FrameLoadTypeReload) 1838 navType = NavigationTypeReload; 1839 else if (isBackForwardLoadType(type)) 1840 navType = NavigationTypeBackForward; 1841 else 1842 navType = NavigationTypeOther; 1843 } else { 1720 else if (event) 1844 1721 navType = NavigationTypeLinkClicked; 1845 } 1846 return [self actionInformationForNavigationType:navType event:event originalURL:URL]; 1722 else if (type == FrameLoadTypeReload) 1723 navType = NavigationTypeReload; 1724 else if (isBackForwardLoadType(type)) 1725 navType = NavigationTypeBackForward; 1726 else 1727 navType = NavigationTypeOther; 1728 return actionInformation(navType, event, originalURL); 1847 1729 } 1848 1730 1849 NSString *ActionNavigationTypeKey = @"WebActionNavigationTypeKey"; 1850 NSString *ActionElementKey = @"WebActionElementKey"; 1851 NSString *ActionButtonKey = @"WebActionButtonKey"; 1852 NSString *ActionModifierFlagsKey = @"WebActionModifierFlagsKey"; 1853 NSString *ActionOriginalURLKey = @"WebActionOriginalURLKey"; 1854 1855 - (NSDictionary *)actionInformationForNavigationType:(NavigationType)navigationType event:(NSEvent *)event originalURL:(NSURL *)URL 1856 { 1857 NSDictionary *elementInfo = [client _elementForEvent:event]; 1731 NSDictionary *FrameLoader::actionInformation(NavigationType navigationType, NSEvent *event, NSURL *originalURL) 1732 { 1733 NSString *ActionNavigationTypeKey = @"WebActionNavigationTypeKey"; 1734 NSString *ActionElementKey = @"WebActionElementKey"; 1735 NSString *ActionButtonKey = @"WebActionButtonKey"; 1736 NSString *ActionModifierFlagsKey = @"WebActionModifierFlagsKey"; 1737 NSString *ActionOriginalURLKey = @"WebActionOriginalURLKey"; 1738 NSDictionary *elementInfo = [m_client _elementForEvent:event]; 1858 1739 if (elementInfo) 1859 1740 return [NSDictionary dictionaryWithObjectsAndKeys: … … 1862 1743 [NSNumber numberWithInt:[event buttonNumber]], ActionButtonKey, 1863 1744 [NSNumber numberWithInt:[event modifierFlags]], ActionModifierFlagsKey, 1864 URL, ActionOriginalURLKey,1745 originalURL, ActionOriginalURLKey, 1865 1746 nil]; 1866 1747 return [NSDictionary dictionaryWithObjectsAndKeys: 1867 1748 [NSNumber numberWithInt:navigationType], ActionNavigationTypeKey, 1868 1749 [NSNumber numberWithInt:[event modifierFlags]], ActionModifierFlagsKey, 1869 URL, ActionOriginalURLKey,1750 originalURL, ActionOriginalURLKey, 1870 1751 nil]; 1871 1752 } 1872 1753 1873 1754 // Called every time a resource is completely loaded, or an error is received. 1874 - (void)checkLoadComplete 1875 { 1876 ASSERT([client _hasWebView]); 1877 1878 WebCoreFrameBridge *parent; 1879 for (WebCoreFrameBridge *frame = frameBridge; frame; frame = parent) { 1880 [frame retain]; 1881 [[frame frameLoader] checkLoadCompleteForThisFrame]; 1882 parent = [frame parent]; 1883 [frame release]; 1884 } 1885 } 1886 1887 - (void)setFrameLoaderClient:(id<WebFrameLoaderClient>)cli 1888 { 1889 client = cli; 1890 } 1891 1892 - (id<WebFrameLoaderClient>)client 1893 { 1894 return client; 1755 void FrameLoader::checkLoadComplete() 1756 { 1757 ASSERT([m_client _hasWebView]); 1758 1759 for (RefPtr<Frame> frame = m_frame; frame; frame = frame->tree()->parent()) 1760 [Mac(frame.get())->bridge() frameLoader]->checkLoadCompleteForThisFrame(); 1761 } 1762 1763 void FrameLoader::setFrameLoaderClient(id <WebFrameLoaderClient> client) 1764 { 1765 m_client = client; 1766 } 1767 1768 id <WebFrameLoaderClient> FrameLoader::client() const 1769 { 1770 return m_client; 1771 } 1772 1773 WebCoreFrameLoaderAsDelegate *FrameLoader::asDelegate() 1774 { 1775 if (!m_asDelegate) { 1776 WebCoreFrameLoaderAsDelegate *d = [[WebCoreFrameLoaderAsDelegate alloc] initWithLoader:this]; 1777 m_asDelegate = d; 1778 [d release]; 1779 } 1780 return m_asDelegate.get(); 1781 } 1782 1783 } 1784 1785 @implementation WebCoreFrameLoaderAsDelegate 1786 1787 - (id)initWithLoader:(FrameLoader*)loader 1788 { 1789 self = [self init]; 1790 if (!self) 1791 return nil; 1792 m_loader = loader; 1793 return self; 1794 } 1795 1796 - (void)detachFromLoader 1797 { 1798 m_loader = 0; 1799 } 1800 1801 - (void)continueFragmentScrollAfterNavigationPolicy:(NSURLRequest *)request formState:(FormState*)formState 1802 { 1803 if (m_loader) 1804 m_loader->continueFragmentScrollAfterNavigationPolicy(request); 1805 } 1806 1807 - (void)continueAfterNewWindowPolicy:(WebPolicyAction)policy 1808 { 1809 if (m_loader) 1810 m_loader->continueAfterNewWindowPolicy(policy); 1811 } 1812 1813 - (void)continueAfterNavigationPolicy:(WebPolicyAction)policy 1814 { 1815 if (m_loader) 1816 m_loader->continueAfterNavigationPolicy(policy); 1817 } 1818 1819 - (void)continueAfterWillSubmitForm:(WebPolicyAction)policy 1820 { 1821 if (m_loader) 1822 m_loader->continueAfterWillSubmitForm(policy); 1823 } 1824 1825 - (void)continueLoadRequestAfterNavigationPolicy:(NSURLRequest *)request formState:(FormState*)formState 1826 { 1827 if (m_loader) 1828 m_loader->continueLoadRequestAfterNavigationPolicy(request, formState); 1829 } 1830 1831 - (void)continueLoadRequestAfterNewWindowPolicy:(NSURLRequest *)request frameName:(NSString *)frameName formState:(FormState *)formState 1832 { 1833 if (m_loader) 1834 m_loader->continueLoadRequestAfterNewWindowPolicy(request, frameName, formState); 1895 1835 } 1896 1836 -
trunk/WebCore/loader/mac/WebLoader.h
r17206 r17238 29 29 #include "RetainPtr.h" 30 30 #include "Shared.h" 31 #include <wtf/RefPtr.h> 31 32 32 33 @class NSError; … … 35 36 @class NSURLRequest; 36 37 @class NSURLResponse; 37 @class WebFrameLoader; 38 @class WebCoreResourceLoaderDelegate; 38 @class WebCoreResourceLoaderAsDelegate; 39 39 40 40 namespace WebCore { 41 42 class Frame; 43 class FrameLoader; 41 44 42 45 // FIXME: Rename to ResourceLoader after resolving conflict with existing class of that name. … … 47 50 virtual bool load(NSURLRequest *); 48 51 49 virtual void signalFinish();52 FrameLoader *frameLoader() const; 50 53 51 void setFrameLoader(WebFrameLoader *); 52 WebFrameLoader *frameLoader() const; 53 54 virtual void cancel(); 55 virtual void cancel(NSError *); 54 virtual void cancel(NSError * = nil); 56 55 NSError *cancelledError(); 57 56 … … 60 59 61 60 void setIdentifier(id); 61 id identifier() const { return m_identifier.get(); } 62 62 63 63 virtual void releaseResources(); … … 86 86 87 87 protected: 88 WebResourceLoader( WebFrameLoader*);89 WebCoreResourceLoader Delegate *delegate();88 WebResourceLoader(Frame*); 89 WebCoreResourceLoaderAsDelegate *delegate(); 90 90 virtual void releaseDelegate(); 91 92 virtual void didCancel(NSError *); 93 void didFinishLoadingOnePart(); 91 94 92 95 NSURLConnection *connection() const { return m_connection.get(); } 93 96 NSURLRequest *request() const { return m_request.get(); } 94 97 bool reachedTerminalState() const { return m_reachedTerminalState; } 95 bool signalledFinish() const { return m_signalledFinish; }96 98 bool cancelled() const { return m_cancelled; } 97 id identifier() const { return m_identifier.get(); }98 99 99 100 RetainPtr<NSURLConnection> m_connection; … … 102 103 RetainPtr<NSURLRequest> m_request; 103 104 bool m_reachedTerminalState; 104 bool m_signalledFinish;105 105 bool m_cancelled; 106 bool m_calledDidFinishLoad; 106 107 107 Re tainPtr<WebFrameLoader> m_frameLoader;108 RefPtr<Frame> m_frame; 108 109 RetainPtr<id> m_identifier; 109 110 RetainPtr<NSURLResponse> m_response; … … 113 114 RetainPtr<NSURL> m_originalURL; 114 115 RetainPtr<NSMutableData> m_resourceData; 115 RetainPtr<WebCoreResourceLoader Delegate> m_delegate;116 RetainPtr<WebCoreResourceLoaderAsDelegate> m_delegate; 116 117 }; 117 118 -
trunk/WebCore/loader/mac/WebLoader.mm
r17206 r17238 30 30 #import "WebLoader.h" 31 31 32 #import "FrameMac.h" 33 #import "WebCoreFrameBridge.h" 32 34 #import "WebCoreSystemInterface.h" 33 35 #import "WebDataProtocol.h" … … 42 44 using namespace WebCore; 43 45 44 @interface WebCoreResourceLoader Delegate : NSObject <NSURLAuthenticationChallengeSender>46 @interface WebCoreResourceLoaderAsDelegate : NSObject <NSURLAuthenticationChallengeSender> 45 47 { 46 48 WebResourceLoader* m_loader; … … 67 69 #endif 68 70 69 WebResourceLoader::WebResourceLoader( WebFrameLoader *frameLoader)71 WebResourceLoader::WebResourceLoader(Frame* frame) 70 72 : m_reachedTerminalState(false) 71 , m_signalledFinish(false)72 73 , m_cancelled(false) 73 , m_frameLoader(frameLoader) 74 , m_calledDidFinishLoad(false) 75 , m_frame(frame) 74 76 , m_currentConnectionChallenge(nil) 75 , m_defersCallbacks( [frameLoader defersCallbacks])77 , m_defersCallbacks(frameLoader()->defersCallbacks()) 76 78 { 77 79 static bool initialized = false; … … 98 100 RefPtr<WebResourceLoader> protector(this); 99 101 102 m_frame = 0; 103 100 104 // We need to set reachedTerminalState to true before we release 101 105 // the resources to prevent a double dealloc of WebView <rdar://problem/4372628> … … 104 108 m_identifier = nil; 105 109 m_connection = nil; 106 m_frameLoader = nil;107 110 m_resourceData = nil; 108 111 … … 113 116 { 114 117 ASSERT(m_connection == nil); 115 ASSERT(! [m_frameLoader.get() archiveLoadPendingForLoader:this]);118 ASSERT(!frameLoader()->isArchiveLoadPending(this)); 116 119 117 120 m_originalURL = [r URL]; … … 119 122 NSURLRequest *clientRequest = willSendRequest(r, nil); 120 123 if (clientRequest == nil) { 121 didFail( [m_frameLoader.get() cancelledErrorWithRequest:r]);124 didFail(frameLoader()->cancelledError(r)); 122 125 return false; 123 126 } 124 127 r = clientRequest; 125 128 126 if ( [m_frameLoader.get() willUseArchiveForRequest:r originalURL:m_originalURL.get() loader:this])129 if (frameLoader()->willUseArchive(this, r, m_originalURL.get())) 127 130 return true; 128 131 … … 153 156 } 154 157 155 void WebResourceLoader::setFrameLoader(WebFrameLoader *fl) 156 { 157 ASSERT(fl); 158 m_frameLoader = fl; 159 setDefersCallbacks([fl defersCallbacks]); 160 } 161 162 WebFrameLoader *WebResourceLoader::frameLoader() const 163 { 164 return m_frameLoader.get(); 158 FrameLoader* WebResourceLoader::frameLoader() const 159 { 160 if (!m_frame) 161 return 0; 162 return [Mac(m_frame.get())->bridge() frameLoader]; 165 163 } 166 164 … … 225 223 haveDataSchemeRequest = true; 226 224 227 if (!m_identifier) { 228 id identifier = [m_frameLoader.get() _identifierForInitialRequest:clientRequest]; 229 m_identifier = identifier; 230 [identifier release]; 231 } 232 233 NSURLRequest *updatedRequest = [m_frameLoader.get() _willSendRequest:clientRequest 234 forResource:m_identifier.get() redirectResponse:redirectResponse]; 225 if (!m_identifier) 226 m_identifier = frameLoader()->identifierForInitialRequest(clientRequest); 227 228 NSURLRequest *updatedRequest = frameLoader()->willSendRequest(this, clientRequest, redirectResponse); 235 229 236 230 if (!haveDataSchemeRequest) … … 279 273 m_currentWebChallenge = webChallenge; 280 274 281 [m_frameLoader.get() _didReceiveAuthenticationChallenge:webChallenge forResource:m_identifier.get()];275 frameLoader()->didReceiveAuthenticationChallenge(this, webChallenge); 282 276 283 277 [webChallenge release]; … … 295 289 RefPtr<WebResourceLoader> protector(this); 296 290 297 [m_frameLoader.get() _didCancelAuthenticationChallenge:m_currentWebChallenge.get() 298 forResource:m_identifier.get()]; 291 frameLoader()->didCancelAuthenticationChallenge(this, m_currentWebChallenge.get()); 299 292 } 300 293 … … 315 308 m_response = r; 316 309 317 [m_frameLoader.get() _didReceiveResponse:r forResource:m_identifier.get()];310 frameLoader()->didReceiveResponse(this, r); 318 311 } 319 312 … … 329 322 // anything including possibly derefing this; one example of this is Radar 3266216. 330 323 RefPtr<WebResourceLoader> protector(this); 331 324 332 325 addData(data, allAtOnce); 333 334 [m_frameLoader.get() _didReceiveData:data contentLength:(int)lengthReceived forResource:m_identifier.get()];326 if (m_frame) 327 frameLoader()->didReceiveData(this, data, lengthReceived); 335 328 } 336 329 … … 343 336 } 344 337 345 void WebResourceLoader::signalFinish()346 {347 m_signalledFinish = true;348 [m_frameLoader.get() _didFinishLoadingForResource:m_identifier.get()];349 }350 351 338 void WebResourceLoader::didFinishLoading() 352 339 { 353 340 // If load has been cancelled after finishing (which could happen with a 354 // javascript that changes the window location), do nothing.341 // JavaScript that changes the window location), do nothing. 355 342 if (m_cancelled) 356 343 return; 357 358 ASSERT(!m_reachedTerminalState); 359 360 if (!m_signalledFinish) 361 signalFinish(); 362 344 ASSERT(!m_reachedTerminalState); 345 346 didFinishLoadingOnePart(); 363 347 releaseResources(); 364 348 } 365 349 350 void WebResourceLoader::didFinishLoadingOnePart() 351 { 352 if (m_cancelled) 353 return; 354 ASSERT(!m_reachedTerminalState); 355 356 if (m_calledDidFinishLoad) 357 return; 358 m_calledDidFinishLoad = true; 359 frameLoader()->didFinishLoad(this); 360 } 361 366 362 void WebResourceLoader::didFail(NSError *error) 367 363 { 368 364 if (m_cancelled) 369 365 return; 370 371 366 ASSERT(!m_reachedTerminalState); 372 367 … … 375 370 RefPtr<WebResourceLoader> protector(this); 376 371 377 [m_frameLoader.get() _didFailLoadingWithError:error forResource:m_identifier.get()];372 frameLoader()->didFailToLoad(this, error); 378 373 379 374 releaseResources(); … … 383 378 { 384 379 // When in private browsing mode, prevent caching to disk 385 if ([cachedResponse storagePolicy] == NSURLCacheStorageAllowed && [m_frameLoader.get() _privateBrowsingEnabled]) {380 if ([cachedResponse storagePolicy] == NSURLCacheStorageAllowed && frameLoader()->privateBrowsingEnabled()) 386 381 cachedResponse = [[[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response] 387 382 data:[cachedResponse data] 388 383 userInfo:[cachedResponse userInfo] 389 384 storagePolicy:NSURLCacheStorageAllowedInMemoryOnly] autorelease]; 390 }391 385 return cachedResponse; 392 386 } 393 387 394 void WebResourceLoader::cancel(NSError *error) 395 { 388 void WebResourceLoader::didCancel(NSError *error) 389 { 390 ASSERT(!m_cancelled); 396 391 ASSERT(!m_reachedTerminalState); 397 392 … … 406 401 m_currentWebChallenge = nil; 407 402 408 [m_frameLoader.get() cancelPendingArchiveLoadForLoader:this];403 frameLoader()->cancelPendingArchiveLoad(this); 409 404 [m_connection.get() cancel]; 410 405 411 [m_frameLoader.get() _didFailLoadingWithError:error forResource:m_identifier.get()];406 frameLoader()->didFailToLoad(this, error); 412 407 413 408 releaseResources(); 414 409 } 415 410 416 void WebResourceLoader::cancel() 417 { 418 if (!m_reachedTerminalState) 419 cancel(cancelledError()); 411 void WebResourceLoader::cancel(NSError *error) 412 { 413 if (m_reachedTerminalState) 414 return; 415 if (error) 416 didCancel(error); 417 else 418 didCancel(cancelledError()); 420 419 } 421 420 … … 437 436 NSError *WebResourceLoader::cancelledError() 438 437 { 439 return [m_frameLoader.get() cancelledErrorWithRequest:m_request.get()];438 return frameLoader()->cancelledError(m_request.get()); 440 439 } 441 440 … … 472 471 } 473 472 474 WebCoreResourceLoader Delegate *WebResourceLoader::delegate()473 WebCoreResourceLoaderAsDelegate *WebResourceLoader::delegate() 475 474 { 476 475 if (!m_delegate) { 477 WebCoreResourceLoader Delegate *d = [[WebCoreResourceLoaderDelegate alloc] initWithLoader:this];476 WebCoreResourceLoaderAsDelegate *d = [[WebCoreResourceLoaderAsDelegate alloc] initWithLoader:this]; 478 477 m_delegate = d; 479 478 [d release]; … … 492 491 } 493 492 494 @implementation WebCoreResourceLoader Delegate493 @implementation WebCoreResourceLoaderAsDelegate 495 494 496 495 - (id)initWithLoader:(WebResourceLoader*)loader -
trunk/WebCore/loader/mac/WebMainResourceLoader.h
r17206 r17238 31 31 #import <wtf/Forward.h> 32 32 33 @class WebCoreMainResourceLoader PolicyDelegate;33 @class WebCoreMainResourceLoaderAsPolicyDelegate; 34 34 35 35 namespace WebCore { … … 37 37 class MainResourceLoader : public WebResourceLoader { 38 38 public: 39 static PassRefPtr<MainResourceLoader> create( WebFrameLoader*);39 static PassRefPtr<MainResourceLoader> create(Frame*); 40 40 41 41 virtual ~MainResourceLoader(); 42 42 43 43 virtual bool load(NSURLRequest *); 44 45 using WebResourceLoader::cancel;46 virtual void cancel(NSError *);47 44 48 45 virtual void setDefersCallbacks(bool); … … 60 57 61 58 private: 62 MainResourceLoader(WebFrameLoader *); 59 virtual void didCancel(NSError *); 60 61 MainResourceLoader(Frame*); 63 62 64 63 virtual void releaseDelegate(); 65 64 66 WebCoreMainResourceLoader PolicyDelegate *policyDelegate();65 WebCoreMainResourceLoaderAsPolicyDelegate *policyDelegate(); 67 66 void releasePolicyDelegate(); 68 67 … … 81 80 RetainPtr<id> m_proxy; 82 81 RetainPtr<NSURLRequest> m_initialRequest; 83 RetainPtr<WebCoreMainResourceLoader PolicyDelegate> m_policyDelegate;82 RetainPtr<WebCoreMainResourceLoaderAsPolicyDelegate> m_policyDelegate; 84 83 bool m_loadingMultipartContent; 85 84 }; -
trunk/WebCore/loader/mac/WebMainResourceLoader.mm
r17206 r17238 39 39 #import <wtf/Assertions.h> 40 40 #import <wtf/PassRefPtr.h> 41 #import <wtf/Vector.h> 41 42 42 43 // FIXME: More that is in common with SubresourceLoader should move up into WebResourceLoader. … … 44 45 using namespace WebCore; 45 46 46 @interface WebCoreMainResourceLoader PolicyDelegate : NSObject47 @interface WebCoreMainResourceLoaderAsPolicyDelegate : NSObject 47 48 { 48 49 MainResourceLoader* m_loader; … … 56 57 const size_t URLBufferLength = 2048; 57 58 58 MainResourceLoader::MainResourceLoader( WebFrameLoader *fl)59 : WebResourceLoader(f l)59 MainResourceLoader::MainResourceLoader(Frame* frame) 60 : WebResourceLoader(frame) 60 61 , m_contentLength(0) 61 62 , m_bytesReceived(0) … … 78 79 } 79 80 80 PassRefPtr<MainResourceLoader> MainResourceLoader::create( WebFrameLoader *fl)81 { 82 return new MainResourceLoader(f l);81 PassRefPtr<MainResourceLoader> MainResourceLoader::create(Frame* frame) 82 { 83 return new MainResourceLoader(frame); 83 84 } 84 85 85 86 void MainResourceLoader::receivedError(NSError *error) 86 87 { 87 // Calling _receivedMainResourceError will likely result in the last reference to this object to go away. 88 RefPtr<MainResourceLoader> protect(this); 89 90 WebFrameLoader *fl = [frameLoader() retain]; // WebResourceLoader::didFailWithError will release the frameLoader 88 // Calling receivedMainResourceError will likely result in the last reference to this object to go away. 89 RefPtr<MainResourceLoader> protect(this); 91 90 92 91 if (!cancelled()) { 93 92 ASSERT(!reachedTerminalState()); 94 [fl _didFailLoadingWithError:error forResource:identifier()];95 } 96 97 [fl _receivedMainResourceError:error complete:YES];93 frameLoader()->didFailToLoad(this, error); 94 } 95 96 frameLoader()->receivedMainResourceError(error, true); 98 97 99 98 if (!cancelled()) … … 101 100 102 101 ASSERT(reachedTerminalState()); 103 104 [fl release]; 105 } 106 107 void MainResourceLoader::cancel(NSError *error) 108 { 109 // Calling _receivedMainResourceError will likely result in the last reference to this class to go away. 110 RefPtr<MainResourceLoader> protect(this); 111 112 [frameLoader() cancelContentPolicy]; 113 [frameLoader() retain]; 114 [frameLoader() _receivedMainResourceError:error complete:YES]; 115 [frameLoader() release]; 116 117 WebResourceLoader::cancel(error); 102 } 103 104 void MainResourceLoader::didCancel(NSError *error) 105 { 106 // Calling receivedMainResourceError will likely result in the last reference to this object to go away. 107 RefPtr<MainResourceLoader> protect(this); 108 109 frameLoader()->cancelContentPolicyCheck(); 110 frameLoader()->receivedMainResourceError(error, true); 111 WebResourceLoader::didCancel(error); 118 112 } 119 113 120 114 NSError *MainResourceLoader::interruptionForPolicyChangeError() const 121 115 { 122 return [frameLoader() interruptForPolicyChangeErrorWithRequest:request()];116 return frameLoader()->interruptionForPolicyChangeError(request()); 123 117 } 124 118 … … 142 136 int status = [(NSHTTPURLResponse *)redirectResponse statusCode]; 143 137 if (((status >= 301 && status <= 303) || status == 307) 144 && [[ [frameLoader() initialRequest]HTTPMethod] isEqualToString:@"POST"])138 && [[frameLoader()->initialRequest() HTTPMethod] isEqualToString:@"POST"]) 145 139 return true; 146 140 } … … 152 146 { 153 147 WebResourceLoader::addData(data, allAtOnce); 154 [frameLoader() _receivedData:data];148 frameLoader()->receivedData(data); 155 149 } 156 150 … … 172 166 // Update cookie policy base URL as URL changes, except for subframes, which use the 173 167 // URL of the main frame which doesn't change when we redirect. 174 if ( [frameLoader() isLoadingMainFrame]) {168 if (frameLoader()->isLoadingMainFrame()) { 175 169 mutableRequest = [newRequest mutableCopy]; 176 170 [mutableRequest setMainDocumentURL:URL]; … … 195 189 196 190 // Don't set this on the first request. It is set when the main load was started. 197 [frameLoader() _setRequest:newRequest]; 198 199 [frameLoader() _checkNavigationPolicyForRequest:newRequest 200 andCall:policyDelegate() withSelector:@selector(continueAfterNavigationPolicy:formState:)]; 191 frameLoader()->setRequest(newRequest); 192 193 frameLoader()->checkNavigationPolicy(newRequest, policyDelegate(), @selector(continueAfterNavigationPolicy:formState:)); 201 194 202 195 return newRequest; … … 232 225 bool isRemote = ![URL isFileURL] && ![WebDataProtocol _webIsDataProtocolURL:URL]; 233 226 bool isRemoteWebArchive = isRemote && isCaseInsensitiveEqual(@"application/x-webarchive", MIMEType); 234 if (! [frameLoader() _canShowMIMEType:MIMEType]|| isRemoteWebArchive) {235 [frameLoader() cannotShowMIMETypeWithResponse:r];227 if (!frameLoader()->canShowMIMEType(MIMEType) || isRemoteWebArchive) { 228 frameLoader()->cannotShowMIMEType(r); 236 229 // Check reachedTerminalState since the load may have already been cancelled inside of _handleUnimplementablePolicyWithErrorCode::. 237 230 if (!reachedTerminalState()) … … 241 234 break; 242 235 } 236 243 237 case WebPolicyDownload: 244 238 [m_proxy.get() setDelegate:nil]; 245 [frameLoader() _downloadWithLoadingConnection:connection() request:request() response:r proxy:m_proxy.get()];239 frameLoader()->download(connection(), request(), r, m_proxy.get()); 246 240 m_proxy = nil; 247 241 receivedError(interruptionForPolicyChangeError()); … … 261 255 int status = [(NSHTTPURLResponse *)r statusCode]; 262 256 if (status < 200 || status >= 300) { 263 bool hostedByObject = [frameLoader() isHostedByObjectElement];264 265 [frameLoader() _handleFallbackContent];257 bool hostedByObject = frameLoader()->isHostedByObjectElement(); 258 259 frameLoader()->handleFallbackContent(); 266 260 // object elements are no longer rendered after we fallback, so don't 267 261 // keep trying to process data from their load … … 276 270 WebResourceLoader::didReceiveResponse(r); 277 271 278 if ( ![frameLoader() _isStopping] && (shouldLoadAsEmptyDocument(URL) || [frameLoader() _representationExistsForURLScheme:[URL scheme]]))272 if (frameLoader() && !frameLoader()->isStopping() && (shouldLoadAsEmptyDocument(URL) || frameLoader()->representationExistsForURLScheme([URL scheme]))) 279 273 didFinishLoading(); 280 274 } … … 282 276 void MainResourceLoader::continueAfterContentPolicy(WebPolicyAction policy) 283 277 { 284 bool isStopping = [frameLoader() _isStopping];285 [frameLoader() cancelContentPolicy];278 bool isStopping = frameLoader()->isStopping(); 279 frameLoader()->cancelContentPolicyCheck(); 286 280 if (!isStopping) 287 281 continueAfterContentPolicy(policy, m_response.get()); … … 291 285 { 292 286 ASSERT(shouldLoadAsEmptyDocument([r URL]) || !defersCallbacks()); 293 ASSERT(shouldLoadAsEmptyDocument([r URL]) || ! [frameLoader() defersCallbacks]);287 ASSERT(shouldLoadAsEmptyDocument([r URL]) || !frameLoader()->defersCallbacks()); 294 288 295 289 if (m_loadingMultipartContent) { 296 [frameLoader() _setupForReplaceByMIMEType:[r MIMEType]];290 frameLoader()->setupForReplaceByMIMEType([r MIMEType]); 297 291 clearResourceData(); 298 292 } … … 305 299 RefPtr<MainResourceLoader> protect(this); 306 300 307 [frameLoader() _setResponse:r];301 frameLoader()->setResponse(r); 308 302 m_contentLength = (int)[r expectedContentLength]; 309 303 310 304 m_response = r; 311 [frameLoader() _checkContentPolicyForMIMEType:[m_response.get() MIMEType] 312 andCall:policyDelegate() withSelector:@selector(continueAfterContentPolicy:)]; 305 frameLoader()->checkContentPolicy([m_response.get() MIMEType], policyDelegate(), @selector(continueAfterContentPolicy:)); 313 306 } 314 307 … … 318 311 ASSERT([data length] != 0); 319 312 ASSERT(!defersCallbacks()); 320 ASSERT(! [frameLoader() defersCallbacks]);313 ASSERT(!frameLoader()->defersCallbacks()); 321 314 322 315 // The additional processing can do anything including possibly removing the last … … 330 323 void MainResourceLoader::didFinishLoading() 331 324 { 332 ASSERT(shouldLoadAsEmptyDocument( [frameLoader() _URL]) || !defersCallbacks());333 ASSERT(shouldLoadAsEmptyDocument( [frameLoader() _URL]) || ![frameLoader() defersCallbacks]);325 ASSERT(shouldLoadAsEmptyDocument(frameLoader()->URL()) || !defersCallbacks()); 326 ASSERT(shouldLoadAsEmptyDocument(frameLoader()->URL()) || !frameLoader()->defersCallbacks()); 334 327 335 328 // The additional processing can do anything including possibly removing the last … … 337 330 RefPtr<MainResourceLoader> protect(this); 338 331 339 [frameLoader() _finishedLoading];332 frameLoader()->finishedLoading(); 340 333 WebResourceLoader::didFinishLoading(); 341 334 } … … 344 337 { 345 338 ASSERT(!defersCallbacks()); 346 ASSERT(! [frameLoader() defersCallbacks]);339 ASSERT(!frameLoader()->defersCallbacks()); 347 340 348 341 receivedError(error); … … 355 348 ASSERT(!connection()); 356 349 ASSERT(shouldLoadEmptyBeforeRedirect || !defersCallbacks()); 357 ASSERT(shouldLoadEmptyBeforeRedirect || ! [frameLoader() defersCallbacks]);350 ASSERT(shouldLoadEmptyBeforeRedirect || !frameLoader()->defersCallbacks()); 358 351 359 352 // Send this synthetic delegate callback since clients expect it, and … … 367 360 return r; 368 361 369 if (shouldLoadEmpty || [frameLoader() _representationExistsForURLScheme:[URL scheme]]) {362 if (shouldLoadEmpty || frameLoader()->representationExistsForURLScheme([URL scheme])) { 370 363 NSString *MIMEType; 371 364 if (shouldLoadEmpty) 372 365 MIMEType = @"text/html"; 373 366 else 374 MIMEType = [frameLoader() _generatedMIMETypeForURLScheme:[URL scheme]];367 MIMEType = frameLoader()->generatedMIMETypeForURLScheme([URL scheme]); 375 368 376 369 NSURLResponse *resp = [[NSURLResponse alloc] initWithURL:URL MIMEType:MIMEType … … 426 419 } 427 420 428 WebCoreMainResourceLoader PolicyDelegate *MainResourceLoader::policyDelegate()421 WebCoreMainResourceLoaderAsPolicyDelegate *MainResourceLoader::policyDelegate() 429 422 { 430 423 if (!m_policyDelegate) { 431 WebCoreMainResourceLoader PolicyDelegate *d = [[WebCoreMainResourceLoaderPolicyDelegate alloc] initWithLoader:this];424 WebCoreMainResourceLoaderAsPolicyDelegate *d = [[WebCoreMainResourceLoaderAsPolicyDelegate alloc] initWithLoader:this]; 432 425 m_policyDelegate = d; 433 426 [d release]; … … 446 439 } 447 440 448 @implementation WebCoreMainResourceLoader PolicyDelegate441 @implementation WebCoreMainResourceLoaderAsPolicyDelegate 449 442 450 443 - (id)initWithLoader:(MainResourceLoader*)loader -
trunk/WebCore/loader/mac/WebNetscapePlugInStreamLoader.h
r17206 r17238 35 35 class NetscapePlugInStreamLoader : public WebResourceLoader { 36 36 public: 37 static PassRefPtr<NetscapePlugInStreamLoader> create( WebFrameLoader*, id <WebPlugInStreamLoaderDelegate>);37 static PassRefPtr<NetscapePlugInStreamLoader> create(Frame*, id <WebPlugInStreamLoaderDelegate>); 38 38 virtual ~NetscapePlugInStreamLoader(); 39 39 … … 44 44 virtual void didFinishLoading(); 45 45 virtual void didFail(NSError *); 46 virtual void cancel(NSError *);47 46 48 47 virtual void releaseResources(); 49 48 50 49 private: 51 NetscapePlugInStreamLoader(WebFrameLoader*, id <WebPlugInStreamLoaderDelegate>); 50 NetscapePlugInStreamLoader(Frame*, id <WebPlugInStreamLoaderDelegate>); 51 52 virtual void didCancel(NSError *); 52 53 53 54 RetainPtr<id <WebPlugInStreamLoaderDelegate> > m_stream; -
trunk/WebCore/loader/mac/WebNetscapePlugInStreamLoader.mm
r17206 r17238 35 35 namespace WebCore { 36 36 37 NetscapePlugInStreamLoader::NetscapePlugInStreamLoader( WebFrameLoader *fl, id <WebPlugInStreamLoaderDelegate> stream)38 : WebResourceLoader(f l)37 NetscapePlugInStreamLoader::NetscapePlugInStreamLoader(Frame* frame, id <WebPlugInStreamLoaderDelegate> stream) 38 : WebResourceLoader(frame) 39 39 , m_stream(stream) 40 40 { … … 45 45 } 46 46 47 PassRefPtr<NetscapePlugInStreamLoader> NetscapePlugInStreamLoader::create( WebFrameLoader* fl, id <WebPlugInStreamLoaderDelegate> d)47 PassRefPtr<NetscapePlugInStreamLoader> NetscapePlugInStreamLoader::create(Frame* frame, id <WebPlugInStreamLoaderDelegate> d) 48 48 { 49 return new NetscapePlugInStreamLoader(f l, d);49 return new NetscapePlugInStreamLoader(frame, d); 50 50 } 51 51 … … 78 78 if ([theResponse isKindOfClass:[NSHTTPURLResponse class]] && 79 79 ([(NSHTTPURLResponse *)theResponse statusCode] >= 400 || [(NSHTTPURLResponse *)theResponse statusCode] < 100)) { 80 NSError *error = [frameLoader() fileDoesNotExistErrorWithResponse:theResponse];80 NSError *error = frameLoader()->fileDoesNotExistError(theResponse); 81 81 [m_stream.get() cancelLoadAndDestroyStreamWithError:error]; 82 82 } … … 99 99 RefPtr<NetscapePlugInStreamLoader> protect(this); 100 100 101 [frameLoader() removePlugInStreamLoader:this]; 102 [frameLoader() _finishedLoadingResource]; 101 frameLoader()->removePlugInStreamLoader(this); 103 102 [m_stream.get() finishedLoadingWithData:resourceData()]; 104 103 WebResourceLoader::didFinishLoading(); … … 110 109 // anything including possibly getting rid of the last reference to this object. 111 110 // One example of this is Radar 3266216. 111 RefPtr<NetscapePlugInStreamLoader> protect(this); 112 112 113 [frameLoader() removePlugInStreamLoader:this]; 114 [frameLoader() _receivedError:error]; 113 frameLoader()->removePlugInStreamLoader(this); 115 114 [m_stream.get() destroyStreamWithError:error]; 116 115 WebResourceLoader::didFail(error); 117 116 } 118 117 119 void NetscapePlugInStreamLoader:: cancel(NSError *error)118 void NetscapePlugInStreamLoader::didCancel(NSError *error) 120 119 { 121 120 // Calling removePlugInStreamLoader will likely result in a call to deref, so we must protect. 122 121 RefPtr<NetscapePlugInStreamLoader> protect(this); 123 122 124 [frameLoader() removePlugInStreamLoader:this];123 frameLoader()->removePlugInStreamLoader(this); 125 124 [m_stream.get() destroyStreamWithError:error]; 126 WebResourceLoader:: cancel(error);125 WebResourceLoader::didCancel(error); 127 126 } 128 127 -
trunk/WebCore/loader/mac/WebSubresourceLoader.h
r17206 r17238 34 34 class SubresourceLoader : public WebResourceLoader { 35 35 public: 36 static id <WebCoreResourceHandle> create( WebFrameLoader*, id <WebCoreResourceLoader>,36 static id <WebCoreResourceHandle> create(Frame*, id <WebCoreResourceLoader>, 37 37 NSString *method, NSURL *URL, NSDictionary *customHeaders, NSString *referrer); 38 static id <WebCoreResourceHandle> create( WebFrameLoader*, id <WebCoreResourceLoader>,38 static id <WebCoreResourceHandle> create(Frame*, id <WebCoreResourceLoader>, 39 39 NSString *method, NSURL *URL, NSDictionary *customHeaders, NSArray *postData, NSString *referrer); 40 40 41 41 virtual ~SubresourceLoader(); 42 43 virtual void signalFinish();44 virtual void cancel();45 42 46 43 virtual NSURLRequest *willSendRequest(NSURLRequest *, NSURLResponse *redirectResponse); … … 51 48 52 49 private: 53 static id <WebCoreResourceHandle> create( WebFrameLoader*, id <WebCoreResourceLoader>,50 static id <WebCoreResourceHandle> create(Frame*, id <WebCoreResourceLoader>, 54 51 NSMutableURLRequest *, NSString *method, NSDictionary *customHeaders, NSString *referrer); 55 52 56 SubresourceLoader( WebFrameLoader*, id <WebCoreResourceLoader>);53 SubresourceLoader(Frame*, id <WebCoreResourceLoader>); 57 54 id <WebCoreResourceHandle> handle(); 58 55 59 v oid receivedError(NSError *error);56 virtual void didCancel(NSError *); 60 57 61 58 RetainPtr<id <WebCoreResourceLoader> > m_coreLoader; -
trunk/WebCore/loader/mac/WebSubresourceLoader.mm
r17206 r17238 32 32 #import "LoaderNSURLExtras.h" 33 33 #import "LoaderNSURLRequestExtras.h" 34 #import "FrameMac.h" 35 #import "WebCoreFrameBridge.h" 34 36 #import "WebCoreResourceLoader.h" 35 37 #import "WebCoreSystemInterface.h" … … 50 52 namespace WebCore { 51 53 52 SubresourceLoader::SubresourceLoader( WebFrameLoader *fl, id <WebCoreResourceLoader> l)53 : WebResourceLoader(f l)54 SubresourceLoader::SubresourceLoader(Frame* frame, id <WebCoreResourceLoader> l) 55 : WebResourceLoader(frame) 54 56 , m_coreLoader(l) 55 57 , m_loadingMultipartContent(false) 56 58 { 57 [fl addSubresourceLoader:this];59 frameLoader()->addSubresourceLoader(this); 58 60 } 59 61 … … 62 64 } 63 65 64 id <WebCoreResourceHandle> SubresourceLoader::create( WebFrameLoader *fl, id <WebCoreResourceLoader> rLoader,66 id <WebCoreResourceHandle> SubresourceLoader::create(Frame* frame, id <WebCoreResourceLoader> rLoader, 65 67 NSMutableURLRequest *newRequest, NSString *method, NSDictionary *customHeaders, NSString *referrer) 66 68 { 67 if ([fl state] == WebFrameStateProvisional) 69 FrameLoader* fl = [Mac(frame)->bridge() frameLoader]; 70 if (fl->state() == WebFrameStateProvisional) 68 71 return nil; 69 72 … … 88 91 [newRequest setCachePolicy:NSURLRequestReloadIgnoringCacheData]; 89 92 else 90 [newRequest setCachePolicy:[ [fl _originalRequest]cachePolicy]];93 [newRequest setCachePolicy:[fl->originalRequest() cachePolicy]]; 91 94 setHTTPReferrer(newRequest, referrer); 92 95 93 [fl addExtraFieldsToRequest:newRequest mainResource:NO alwaysFromRequest:NO];94 95 RefPtr<SubresourceLoader> loader(new SubresourceLoader(f l, rLoader));96 fl->addExtraFieldsToRequest(newRequest, false, false); 97 98 RefPtr<SubresourceLoader> loader(new SubresourceLoader(frame, rLoader)); 96 99 if (!loader->load(newRequest)) 97 100 return nil; … … 99 102 } 100 103 101 id <WebCoreResourceHandle> SubresourceLoader::create( WebFrameLoader *fl, id <WebCoreResourceLoader> rLoader,104 id <WebCoreResourceHandle> SubresourceLoader::create(Frame* frame, id <WebCoreResourceLoader> rLoader, 102 105 NSString *method, NSURL *URL, NSDictionary *customHeaders, NSString *referrer) 103 106 { 104 107 NSMutableURLRequest *newRequest = [[NSMutableURLRequest alloc] initWithURL:URL]; 105 id <WebCoreResourceHandle> handle = create(f l, rLoader, newRequest, method, customHeaders, referrer);108 id <WebCoreResourceHandle> handle = create(frame, rLoader, newRequest, method, customHeaders, referrer); 106 109 [newRequest release]; 107 110 return handle; 108 111 } 109 112 110 id <WebCoreResourceHandle> SubresourceLoader::create( WebFrameLoader *fl, id <WebCoreResourceLoader> rLoader,113 id <WebCoreResourceHandle> SubresourceLoader::create(Frame* frame, id <WebCoreResourceLoader> rLoader, 111 114 NSString *method, NSURL *URL, NSDictionary *customHeaders, NSArray *postData, NSString *referrer) 112 115 { 113 116 NSMutableURLRequest *newRequest = [[NSMutableURLRequest alloc] initWithURL:URL]; 114 117 webSetHTTPBody(newRequest, postData); 115 id <WebCoreResourceHandle> handle = create(f l, rLoader, newRequest, method, customHeaders, referrer);118 id <WebCoreResourceHandle> handle = create(frame, rLoader, newRequest, method, customHeaders, referrer); 116 119 [newRequest release]; 117 120 return handle; 118 }119 120 void SubresourceLoader::receivedError(NSError *error)121 {122 [frameLoader() _receivedError:error];123 121 } 124 122 … … 150 148 151 149 if (m_loadingMultipartContent && [resourceData() length]) { 152 // A subresource loader does not load multipart sections progressively, deliver the previously received data to the coreLoader all at once 150 // Since a subresource loader does not load multipart sections progressively, 151 // deliver the previously received data to the coreLoader all at once now. 152 // Then clear the data to make way for the next multipart section. 153 153 [m_coreLoader.get() addData:resourceData()]; 154 155 // Clears the data to make way for the next multipart section156 154 clearResourceData(); 157 155 158 156 // After the first multipart section is complete, signal to delegates that this load is "finished" 159 if (!signalledFinish()) 160 signalFinish(); 157 didFinishLoadingOnePart(); 161 158 } 162 159 } … … 168 165 RefPtr<SubresourceLoader> protect(this); 169 166 170 // A subresource loader does not load multipart sections progressively, don't deliver any data to the coreLoader yet 167 // A subresource loader does not load multipart sections progressively. 168 // So don't deliver any data to the coreLoader yet. 171 169 if (!m_loadingMultipartContent) 172 170 [m_coreLoader.get() addData:data]; … … 174 172 } 175 173 176 void SubresourceLoader::signalFinish()177 {178 [frameLoader() removeSubresourceLoader:this];179 [frameLoader() _finishedLoadingResource];180 WebResourceLoader::signalFinish();181 }182 183 174 void SubresourceLoader::didFinishLoading() 184 175 { 176 if (cancelled()) 177 return; 178 ASSERT(!reachedTerminalState()); 179 185 180 // Calling removeSubresourceLoader will likely result in a call to deref, so we must protect ourselves. 186 181 RefPtr<SubresourceLoader> protect(this); 187 182 188 183 [m_coreLoader.get() finishWithData:resourceData()]; 189 190 if (!signalledFinish()) 191 signalFinish(); 192 184 if (cancelled()) 185 return; 186 frameLoader()->removeSubresourceLoader(this); 193 187 WebResourceLoader::didFinishLoading(); 194 188 } … … 196 190 void SubresourceLoader::didFail(NSError *error) 197 191 { 192 if (cancelled()) 193 return; 194 ASSERT(!reachedTerminalState()); 195 198 196 // Calling removeSubresourceLoader will likely result in a call to deref, so we must protect ourselves. 199 197 RefPtr<SubresourceLoader> protect(this); 200 198 201 199 [m_coreLoader.get() reportError]; 202 [frameLoader() removeSubresourceLoader:this]; 203 receivedError(error); 200 if (cancelled()) 201 return; 202 frameLoader()->removeSubresourceLoader(this); 204 203 WebResourceLoader::didFail(error); 205 204 } 206 205 207 void SubresourceLoader::cancel() 208 { 206 void SubresourceLoader::didCancel(NSError *error) 207 { 208 ASSERT(!reachedTerminalState()); 209 209 210 // Calling removeSubresourceLoader will likely result in a call to deref, so we must protect ourselves. 210 211 RefPtr<SubresourceLoader> protect(this); 211 212 212 213 [m_coreLoader.get() cancel]; 213 [frameLoader() removeSubresourceLoader:this]; 214 receivedError(cancelledError()); 215 WebResourceLoader::cancel(); 214 if (cancelled()) 215 return; 216 frameLoader()->removeSubresourceLoader(this); 217 WebResourceLoader::didCancel(error); 216 218 } 217 219 -
trunk/WebKit/ChangeLog
r17236 r17238 1 2006-10-23 Darin Adler <darin@apple.com> 2 3 Reviewed by Maciej. 4 5 - converted WebFrameLoader to C++ 6 7 * History/WebHistoryItem.m: 8 (+[WebHistoryItem _closeObjectsInPendingPageCaches]): 9 * Plugins/WebBaseNetscapePluginView.mm: 10 (-[WebBaseNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]): 11 * Plugins/WebNetscapePluginStream.mm: 12 (-[WebNetscapePluginStream start]): 13 (-[WebNetscapePluginStream stop]): 14 * Plugins/WebPluginController.mm: 15 (-[WebPluginController webPlugInContainerLoadRequest:inFrame:]): 16 (-[WebPluginController pluginView:receivedResponse:]): 17 * WebCoreSupport/WebFrameBridge.h: 18 * WebKit.xcodeproj/project.pbxproj: 19 * WebView/WebDataSource.mm: 20 (-[WebDataSource _loadFromPageCache:]): 21 (-[WebDataSource _webView]): 22 (-[WebDataSource webFrame]): 23 * WebView/WebDocumentLoaderMac.h: 24 * WebView/WebDocumentLoaderMac.m: 25 (-[WebDocumentLoaderMac dealloc]): 26 (-[WebDocumentLoaderMac attachToFrame]): 27 (-[WebDocumentLoaderMac detachFromFrame]): 28 * WebView/WebFrame.mm: 29 (+[WebFrame _timeOfLastCompletedLoad]): 30 (-[WebFrame _loadItem:withLoadType:]): 31 (-[WebFrame _loadURL:referrer:intoChild:]): 32 (-[WebFrame _currentBackForwardListItemToResetTo]): 33 (-[WebFrame _itemForRestoringDocState]): 34 (-[WebFrame _frameLoader]): 35 (-[WebFrame _firstLayoutDone]): 36 (-[WebFrame _loadType]): 37 (-[WebFrame provisionalDataSource]): 38 (-[WebFrame dataSource]): 39 (-[WebFrame loadRequest:]): 40 (-[WebFrame loadArchive:]): 41 (-[WebFrame stopLoading]): 42 (-[WebFrame reload]): 43 (-[WebFrame _updateHistoryForCommit]): 44 (-[WebFrame _updateHistoryForReload]): 45 (-[WebFrame _updateHistoryForInternalLoad]): 46 (-[WebFrame _deliverArchivedResourcesAfterDelay]): 47 (-[WebFrame _willUseArchiveForRequest:originalURL:loader:]): 48 (-[WebFrame _deliverArchivedResources]): 49 (-[WebFrame _prepareForDataSourceReplacement]): 50 (-[WebFrame _provisionalLoadStarted]): 51 * WebView/WebFrameInternal.h: 52 * WebView/WebHTMLView.m: 53 (-[WebHTMLView _clearLastHitViewIfSelf]): 54 (-[WebHTMLView _updateMouseoverWithEvent:]): 55 (-[NSArray removeMouseMovedObserverUnconditionally]): 56 (-[NSArray removeMouseMovedObserver]): 57 (-[NSArray viewWillMoveToWindow:]): 58 (-[NSArray viewDidMoveToWindow]): 59 (-[WebHTMLView _canMakeTextSmaller]): 60 (-[WebHTMLView _canMakeTextLarger]): 61 (-[WebHTMLView _canMakeTextStandardSize]): 62 * WebView/WebPDFView.mm: 63 (-[WebPDFView PDFViewWillClickOnLink:withURL:]): 64 * WebView/WebView.mm: 65 (-[WebView _close]): 66 (-[WebView setDefersCallbacks:]): 67 (-[WebView setCustomTextEncodingName:]): 68 1 69 2006-10-23 Geoffrey Garen <ggaren@apple.com> 2 70 -
trunk/WebKit/History/WebHistoryItem.m
r16873 r17238 715 715 if ([HTMLView isKindOfClass:[WebHTMLView class]]) { 716 716 // To avoid any possible retain cycles, call close on all the WebHTMLView. 717 // Don't close the WebHTMLV Iew that is currently being viewed.717 // Don't close the WebHTMLView that is currently being viewed. 718 718 if ([[[HTMLView _frame] frameView] documentView] != HTMLView) 719 719 [HTMLView close]; -
trunk/WebKit/Plugins/WebBaseNetscapePluginView.mm
r17229 r17238 1895 1895 // don't let a plugin start any loads if it is no longer part of a document that is being 1896 1896 // displayed 1897 if ([[self dataSource] _documentLoader] != [[[self webFrame] _frameLoader] activeDocumentLoader])1897 if ([[self dataSource] _documentLoader] != [[self webFrame] _frameLoader]->activeDocumentLoader()) 1898 1898 return NPERR_GENERIC_ERROR; 1899 1899 -
trunk/WebKit/Plugins/WebNetscapePluginStream.mm
r17229 r17238 30 30 31 31 #import <Foundation/NSURLConnection.h> 32 #import <WebCore/FrameMac.h> 32 33 #import <WebCore/WebFrameLoader.h> 33 34 #import <WebCore/WebNetscapePlugInStreamLoader.h> … … 73 74 [(NSMutableURLRequest *)request _web_setHTTPReferrer:nil]; 74 75 75 _loader = NetscapePlugInStreamLoader::create([ [view webFrame] _frameLoader], self).release();76 _loader = NetscapePlugInStreamLoader::create([bridge impl], self).release(); 76 77 77 78 isTerminated = NO; … … 99 100 ASSERT(request); 100 101 101 [_loader->frameLoader() addPlugInStreamLoader:_loader]; 102 102 _loader->frameLoader()->addPlugInStreamLoader(_loader); 103 103 if (!_loader->load(request)) 104 [_loader->frameLoader() removePlugInStreamLoader:_loader];104 _loader->frameLoader()->removePlugInStreamLoader(_loader); 105 105 } 106 106 … … 113 113 - (void)stop 114 114 { 115 [self cancelLoadAndDestroyStreamWithError:_loader->cancelledError()]; 115 if (!_loader->isDone()) 116 [self cancelLoadAndDestroyStreamWithError:_loader->cancelledError()]; 116 117 } 117 118 -
trunk/WebKit/Plugins/WebPluginController.mm
r17229 r17238 301 301 return; 302 302 } 303 [ [frame _frameLoader] loadRequest:request inFrameNamed:target];303 [frame _frameLoader]->load(request, target); 304 304 } 305 305 } … … 376 376 pluginName:nil // FIXME: Get this from somewhere 377 377 MIMEType:[response MIMEType]]; 378 [[ [_dataSource _documentLoader] frameLoader] stopLoadingWithError:error];378 [[_dataSource _documentLoader] frameLoader]->stopLoading(error); 379 379 [error release]; 380 380 } -
trunk/WebKit/WebCoreSupport/WebFrameBridge.h
r17025 r17238 30 30 31 31 @class WebPageBridge; 32 @class WebCoreRenderPart;33 32 @class WebFrame; 34 @class WebFrameLoader;35 33 @class WebFrameView; 36 34 -
trunk/WebKit/WebKit.xcodeproj/project.pbxproj
r17236 r17238 390 390 65EEDE56084FFC9E0002DB25 /* WebNSFileManagerExtras.m */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = WebNSFileManagerExtras.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; }; 391 391 65FFB7FA0AD0B7D30048CD05 /* WebDocumentLoaderMac.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebDocumentLoaderMac.h; sourceTree = "<group>"; }; 392 65FFB7FB0AD0B7D30048CD05 /* WebDocumentLoaderMac.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WebDocumentLoaderMac.m; sourceTree = "<group>"; };392 65FFB7FB0AD0B7D30048CD05 /* WebDocumentLoaderMac.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = WebDocumentLoaderMac.m; sourceTree = "<group>"; }; 393 393 700BC50B04144DA100A80182 /* WebDefaultResourceLoadDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = WebDefaultResourceLoadDelegate.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; }; 394 394 700BC50C04144DA100A80182 /* WebDefaultResourceLoadDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = WebDefaultResourceLoadDelegate.m; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; }; -
trunk/WebKit/WebView/WebDataSource.mm
r17229 r17238 56 56 #import "WebDocumentLoaderMac.h" 57 57 58 using namespace WebCore; 59 58 60 @interface WebDataSourcePrivate : NSObject 59 61 { … … 289 291 _private->loadingFromPageCache = YES; 290 292 [_private->loader setCommitted:YES]; 291 [ [_private->loader frameLoader] commitProvisionalLoad:pageCache];293 [_private->loader frameLoader]->commitProvisionalLoad(pageCache); 292 294 } 293 295 … … 305 307 - (WebView *)_webView 306 308 { 307 return [ (WebFrame *)[[_private->loader frameLoader] client] webView];309 return [[self webFrame] webView]; 308 310 } 309 311 … … 405 407 - (WebFrame *)webFrame 406 408 { 407 return (WebFrame *)[[_private->loader frameLoader] client]; 409 FrameLoader* frameLoader = [_private->loader frameLoader]; 410 if (!frameLoader) 411 return nil; 412 return (WebFrame *)frameLoader->client(); 408 413 } 409 414 -
trunk/WebKit/WebView/WebDocumentLoaderMac.h
r16967 r17238 21 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF … … 33 33 @interface WebDocumentLoaderMac : WebDocumentLoader 34 34 { 35 @public36 35 WebDataSource *dataSource; 37 36 WebDataSource *detachedDataSource; // not retained 38 37 } 39 40 - (id)initWithRequest:(NSURLRequest *)request;41 38 - (void)setDataSource:(WebDataSource *)dataSource; 42 39 - (WebDataSource *)dataSource; 43 44 40 @end -
trunk/WebKit/WebView/WebDocumentLoaderMac.m
r16919 r17238 31 31 #import <JavaScriptCore/Assertions.h> 32 32 33 #import <WebKitSystemInterface.h>34 35 33 @implementation WebDocumentLoaderMac 36 37 38 - (id)initWithRequest:(NSURLRequest *)req39 {40 self = [super initWithRequest:req];41 return self;42 }43 34 44 35 - (void)dealloc 45 36 { 46 37 [dataSource release]; 47 48 38 [super dealloc]; 49 39 } … … 61 51 } 62 52 63 - (void) setFrameLoader:(WebFrameLoader *)fl53 - (void)attachToFrame 64 54 { 65 [super setFrameLoader:fl];55 [super attachToFrame]; 66 56 if (detachedDataSource) { 67 57 ASSERT(!dataSource); … … 71 61 } 72 62 73 - (void)detachFromFrame Loader63 - (void)detachFromFrame 74 64 { 75 [super detachFromFrame Loader];65 [super detachFromFrame]; 76 66 detachedDataSource = dataSource; 77 67 [self setDataSource:nil]; … … 79 69 80 70 @end 81 82 83 84 -
trunk/WebKit/WebView/WebFrame.mm
r17229 r17238 392 392 + (CFAbsoluteTime)_timeOfLastCompletedLoad 393 393 { 394 return [WebFrameLoader timeOfLastCompletedLoad];394 return FrameLoader::timeOfLastCompletedLoad(); 395 395 } 396 396 … … 478 478 // FIXME: These checks don't match the ones in _loadURL:referrer:loadType:target:triggeringEvent:isFormSubmission: 479 479 // Perhaps they should. 480 if (!formData && ![[self _frameLoader] shouldReloadForCurrent:itemURL andDestination:currentURL] && [self _URLsMatchItem:item] ) 481 { 480 if (!formData && ![self _frameLoader]->shouldReload(itemURL, currentURL) && [self _URLsMatchItem:item]) { 482 481 #if 0 483 482 // FIXME: We need to normalize the code paths for anchor navigation. Something … … 501 500 // Fake the URL change by updating the data source's request. This will no longer 502 501 // be necessary if we do the better fix described above. 503 [[ [self _frameLoader] documentLoader]replaceRequestURLForAnchorScrollWithURL:itemURL];502 [[self _frameLoader]->documentLoader() replaceRequestURLForAnchorScrollWithURL:itemURL]; 504 503 505 504 [[[self webView] _frameLoadDelegateForwarder] webView:[self webView] … … 522 521 if (delta <= [[[self webView] preferences] _backForwardCacheExpirationInterval]) { 523 522 newDataSource = [pageCache objectForKey: WebPageCacheDataSourceKey]; 524 [ [self _frameLoader] loadDocumentLoader:[newDataSource _documentLoader] withLoadType:loadType formState:0];523 [self _frameLoader]->load([newDataSource _documentLoader], loadType, 0); 525 524 inPageCache = YES; 526 525 } else { … … 532 531 if (!inPageCache) { 533 532 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:itemURL]; 534 [ [self _frameLoader] addExtraFieldsToRequest:request mainResource:YES alwaysFromRequest:(formData != nil) ? YES : NO];533 [self _frameLoader]->addExtraFieldsToRequest(request, true, (formData != nil)); 535 534 536 535 // If this was a repost that failed the page cache, we might try to repost the form. … … 542 541 [request _web_setHTTPContentType:[item formContentType]]; 543 542 544 // Slight hack to test if the WFcache contains the page we're going to. We want543 // Slight hack to test if the NSURL cache contains the page we're going to. We want 545 544 // to know this before talking to the policy delegate, since it affects whether we 546 545 // show the DoYouReallyWantToRepost nag. … … 553 552 [NSURLConnection sendSynchronousRequest:request returningResponse:&synchResponse error:nil]; 554 553 if (synchResponse == nil) { 555 // Not in WFcache554 // Not in the NSURL cache 556 555 [request setCachePolicy:NSURLRequestReloadIgnoringCacheData]; 557 action = [ [self _frameLoader] actionInformationForNavigationType:NavigationTypeFormResubmitted event:nil originalURL:itemURL];558 } else {556 action = [self _frameLoader]->actionInformation(NavigationTypeFormResubmitted, nil, itemURL); 557 } else 559 558 // We can use the cache, don't use navType=resubmit 560 action = [[self _frameLoader] actionInformationForLoadType:loadType isFormSubmission:NO event:nil originalURL:itemURL]; 561 } 559 action = [self _frameLoader]->actionInformation(loadType, false, nil, itemURL); 562 560 } else { 563 561 switch (loadType) { … … 582 580 } 583 581 584 action = [ [self _frameLoader] actionInformationForLoadType:loadType isFormSubmission:NO event:nil originalURL:itemOriginalURL];582 action = [self _frameLoader]->actionInformation(loadType, false, nil, itemOriginalURL); 585 583 } 586 584 587 [ [self _frameLoader] _loadRequest:request triggeringAction:action loadType:loadType formState:0];585 [self _frameLoader]->load(request, action, loadType, 0); 588 586 [request release]; 589 587 } … … 667 665 WebHistoryItem *parentItem = _private->currentItem; 668 666 NSArray *childItems = [parentItem children]; 669 FrameLoadType loadType = [ [self _frameLoader] loadType];667 FrameLoadType loadType = [self _frameLoader]->loadType(); 670 668 FrameLoadType childLoadType = FrameLoadTypeInternal; 671 669 WebHistoryItem *childItem = nil; … … 701 699 [childFrame loadArchive:archive]; 702 700 else 703 [ [childFrame _frameLoader] loadURL:URL referrer:referrer loadType:childLoadType target:nil triggeringEvent:nil form:nil formValues:nil];701 [childFrame _frameLoader]->load(URL, referrer, childLoadType, nil, nil, nil, nil); 704 702 } 705 703 … … 752 750 - (WebHistoryItem *)_currentBackForwardListItemToResetTo 753 751 { 754 if (isBackForwardLoadType([ [self _frameLoader] loadType]) && [self _isMainFrame])752 if (isBackForwardLoadType([self _frameLoader]->loadType()) && [self _isMainFrame]) 755 753 return _private->currentItem; 756 754 return nil; … … 775 773 - (WebHistoryItem *)_itemForRestoringDocState 776 774 { 777 switch ([ [self _frameLoader] loadType]) {775 switch ([self _frameLoader]->loadType()) { 778 776 case FrameLoadTypeReload: 779 777 case FrameLoadTypeReloadAllowingStaleData: … … 1049 1047 } 1050 1048 1051 - ( WebFrameLoader*)_frameLoader1049 - (FrameLoader*)_frameLoader 1052 1050 { 1053 1051 return [_private->bridge frameLoader]; … … 1101 1099 - (BOOL)_firstLayoutDone 1102 1100 { 1103 return [ [self _frameLoader] firstLayoutDone];1101 return [self _frameLoader]->firstLayoutDone(); 1104 1102 } 1105 1103 1106 1104 - (WebFrameLoadType)_loadType 1107 1105 { 1108 return (WebFrameLoadType)[ [self _frameLoader] loadType];1106 return (WebFrameLoadType)[self _frameLoader]->loadType(); 1109 1107 } 1110 1108 … … 1170 1168 - (WebDataSource *)provisionalDataSource 1171 1169 { 1172 return dataSource([ [self _frameLoader] provisionalDocumentLoader]);1170 return dataSource([self _frameLoader]->provisionalDocumentLoader()); 1173 1171 } 1174 1172 1175 1173 - (WebDataSource *)dataSource 1176 1174 { 1177 return dataSource([ [self _frameLoader] documentLoader]);1175 return dataSource([self _frameLoader]->documentLoader()); 1178 1176 } 1179 1177 1180 1178 - (void)loadRequest:(NSURLRequest *)request 1181 1179 { 1182 [ [self _frameLoader] loadRequest:request];1180 [self _frameLoader]->load(request); 1183 1181 } 1184 1182 … … 1226 1224 WebDocumentLoader *documentLoader = [self _createDocumentLoaderWithRequest:request]; 1227 1225 [dataSource(documentLoader) _addToUnarchiveState:archive]; 1228 [ [self _frameLoader] loadDocumentLoader:documentLoader];1226 [self _frameLoader]->load(documentLoader); 1229 1227 } 1230 1228 } … … 1232 1230 - (void)stopLoading 1233 1231 { 1234 [ [self _frameLoader] stopLoading];1232 [self _frameLoader]->stopLoading(); 1235 1233 } 1236 1234 1237 1235 - (void)reload 1238 1236 { 1239 [ [self _frameLoader] reload];1237 [self _frameLoader]->reload(); 1240 1238 } 1241 1239 … … 1340 1338 - (void)_updateHistoryForCommit 1341 1339 { 1342 FrameLoadType type = [ [self _frameLoader] loadType];1340 FrameLoadType type = [self _frameLoader]->loadType(); 1343 1341 if (isBackForwardLoadType(type) || 1344 1342 (type == FrameLoadTypeReload && [[self provisionalDataSource] unreachableURL] != nil)) { … … 1359 1357 LOG(PageCache, "Clearing back/forward cache, %@\n", [currItem URL]); 1360 1358 [currItem setHasPageCache:NO]; 1361 if ([ [self _frameLoader] loadType]== FrameLoadTypeReload)1359 if ([self _frameLoader]->loadType() == FrameLoadTypeReload) 1362 1360 [self _saveScrollPositionAndViewStateToItem:currItem]; 1363 1361 WebDataSource *dataSource = [self dataSource]; … … 1416 1414 { 1417 1415 // Add an item to the item tree for this frame 1418 ASSERT(![[ [self _frameLoader] documentLoader]isClientRedirect]);1416 ASSERT(![[self _frameLoader]->documentLoader() isClientRedirect]); 1419 1417 WebFrame *parentFrame = [self parentFrame]; 1420 1418 if (parentFrame) { … … 1967 1965 if (_private->pendingArchivedResources->isEmpty()) 1968 1966 return; 1969 if ([ [self _frameLoader] defersCallbacks])1967 if ([self _frameLoader]->defersCallbacks()) 1970 1968 return; 1971 1969 … … 1980 1978 if (![self _canUseResourceForRequest:r]) 1981 1979 return NO; 1982 WebResource *resource = [dataSource([ [self _frameLoader] activeDocumentLoader]) _archivedSubresourceForURL:originalURL];1980 WebResource *resource = [dataSource([self _frameLoader]->activeDocumentLoader()) _archivedSubresourceForURL:originalURL]; 1983 1981 if (!resource) 1984 1982 return NO; … … 2024 2022 if (_private->pendingArchivedResources->isEmpty()) 2025 2023 return; 2026 if ([ [self _frameLoader] defersCallbacks])2024 if ([self _frameLoader]->defersCallbacks()) 2027 2025 return; 2028 2026 … … 2173 2171 NSWindow *window = [frameView window]; 2174 2172 NSResponder *firstResp = [window firstResponder]; 2175 if ([firstResp isKindOfClass:[NSView class]] 2176 && [(NSView *)firstResp isDescendantOf:frameView]) 2177 { 2173 if ([firstResp isKindOfClass:[NSView class]] && [(NSView *)firstResp isDescendantOf:frameView]) 2178 2174 [window endEditingFor:firstResp]; 2179 } 2180 2181 [[self _frameLoader] detachChildren]; 2175 2176 [self _frameLoader]->detachChildren(); 2182 2177 } 2183 2178 … … 2201 2196 - (void)_provisionalLoadStarted 2202 2197 { 2203 FrameLoadType loadType = [ [self _frameLoader] loadType];2198 FrameLoadType loadType = [self _frameLoader]->loadType(); 2204 2199 2205 2200 // FIXME: This is OK as long as no one resizes the window, … … 2217 2212 && [_private->bridge canCachePage] 2218 2213 && item 2219 && ![ [self _frameLoader] isQuickRedirectComing]2214 && ![self _frameLoader]->isQuickRedirectComing() 2220 2215 && loadType != FrameLoadTypeReload 2221 2216 && loadType != FrameLoadTypeReloadAllowingStaleData 2222 2217 && loadType != FrameLoadTypeSame 2223 2218 && ![[self dataSource] isLoading] 2224 && ![[ [self _frameLoader] documentLoader]isStopping]) {2219 && ![[self _frameLoader]->documentLoader() isStopping]) { 2225 2220 if ([[[self dataSource] representation] isKindOfClass:[WebHTMLRepresentation class]]) { 2226 2221 if (![item pageCache]){ -
trunk/WebKit/WebView/WebFrameInternal.h
r17029 r17238 35 35 @class WebDocumentLoader; 36 36 @class WebInspector; 37 @class WebFrameLoader;38 37 @class WebFrameView; 39 38 @class WebFrameBridge; 39 40 #ifdef __cplusplus 41 namespace WebCore { 42 class FrameLoader; 43 } 44 typedef WebCore::FrameLoader WebCoreFrameLoader; 45 #else 46 @class WebCoreFrameLoader; 47 #endif 40 48 41 49 @interface WebFrame (WebInternal) … … 65 73 - (void)_removeInspector:(WebInspector *)inspector; 66 74 67 - (Web FrameLoader*)_frameLoader;75 - (WebCoreFrameLoader*)_frameLoader; 68 76 - (WebDataSource *)_dataSourceForDocumentLoader:(WebDocumentLoader *)loader; 69 77 -
trunk/WebKit/WebView/WebHTMLView.m
r17162 r17238 1025 1025 - (void)_clearLastHitViewIfSelf 1026 1026 { 1027 if (lastHitView == self) {1027 if (lastHitView == self) 1028 1028 lastHitView = nil; 1029 }1030 1029 } 1031 1030 … … 1167 1166 [view retain]; 1168 1167 1169 if (lastHitView != view && lastHitView != nil) {1168 if (lastHitView != view && lastHitView && [lastHitView _frame]) { 1170 1169 // If we are moving out of a view (or frame), let's pretend the mouse moved 1171 1170 // all the way out of that view. But we have to account for scrolling, because … … 2321 2320 } 2322 2321 2323 - (void)removeMouseMovedObserver 2324 { 2325 // Don't remove the observer if we're running the Dashboard. 2326 // FIXME: Right for the windowDidResignKey: case, but wrong for the viewWillMoveToWindow: case. 2327 if ([[self _webView] _dashboardBehavior:WebDashboardBehaviorAlwaysSendMouseEventsToAllWindows]) 2328 return; 2329 2330 [[self _webView] _mouseDidMoveOverElement:nil modifierFlags:0]; 2322 - (void)removeMouseMovedObserverUnconditionally 2323 { 2331 2324 [[NSNotificationCenter defaultCenter] removeObserver:self 2332 2325 name:WKMouseMovedNotification() object:nil]; 2326 } 2327 2328 - (void)removeMouseMovedObserver 2329 { 2330 // Don't remove the observer if we're running the Dashboard. 2331 if ([[self _webView] _dashboardBehavior:WebDashboardBehaviorAlwaysSendMouseEventsToAllWindows]) 2332 return; 2333 2334 [[self _webView] _mouseDidMoveOverElement:nil modifierFlags:0]; 2335 [self removeMouseMovedObserverUnconditionally]; 2333 2336 } 2334 2337 … … 2417 2420 // are created by initWithCoder: and so won't be normally 2418 2421 // initialized. The stub views are discarded by WebView. 2419 if (_private) { 2420 // FIXME: Some of these calls may not work because this view may be already removed from it's superview. 2421 [self removeMouseMovedObserver]; 2422 [self removeWindowObservers]; 2423 [self removeSuperviewObservers]; 2424 [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(_updateMouseoverWithFakeEvent) object:nil]; 2425 2426 [[self _pluginController] stopAllPlugins]; 2427 } 2422 if (!_private) 2423 return; 2424 2425 // FIXME: Some of these calls may not work because this view may be already removed from it's superview. 2426 [self removeMouseMovedObserverUnconditionally]; 2427 [self removeWindowObservers]; 2428 [self removeSuperviewObservers]; 2429 [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(_updateMouseoverWithFakeEvent) object:nil]; 2430 2431 [[self _pluginController] stopAllPlugins]; 2428 2432 } 2429 2433 … … 2434 2438 // are created by initWithCoder: and so won't be normally 2435 2439 // initialized. The stub views are discarded by WebView. 2436 if (_private) { 2437 [self _stopAutoscrollTimer]; 2438 if ([self window]) { 2439 _private->lastScrollPosition = [[self superview] bounds].origin; 2440 [self addWindowObservers]; 2441 [self addSuperviewObservers]; 2442 [self addMouseMovedObserver]; 2443 2444 // Schedule this update, rather than making the call right now. 2445 // The reason is that placing the caret in the just-installed view requires 2446 // the HTML/XML document to be available on the WebCore side, but it is not 2447 // at the time this code is running. However, it will be there on the next 2448 // crank of the run loop. Doing this helps to make a blinking caret appear 2449 // in a new, empty window "automatic". 2450 [self performSelector:@selector(_updateActiveState) withObject:nil afterDelay:0]; 2451 2452 [[self _pluginController] startAllPlugins]; 2453 2454 _private->lastScrollPosition = NSZeroPoint; 2455 } 2440 if (!_private) 2441 return; 2442 2443 [self _stopAutoscrollTimer]; 2444 if ([self window]) { 2445 _private->lastScrollPosition = [[self superview] bounds].origin; 2446 [self addWindowObservers]; 2447 [self addSuperviewObservers]; 2448 [self addMouseMovedObserver]; 2449 2450 // Schedule this update, rather than making the call right now. 2451 // The reason is that placing the caret in the just-installed view requires 2452 // the HTML/XML document to be available on the WebCore side, but it is not 2453 // at the time this code is running. However, it will be there on the next 2454 // crank of the run loop. Doing this helps to make a blinking caret appear 2455 // in a new, empty window "automatic". 2456 [self performSelector:@selector(_updateActiveState) withObject:nil afterDelay:0]; 2457 2458 [[self _pluginController] startAllPlugins]; 2459 2460 _private->lastScrollPosition = NSZeroPoint; 2456 2461 } 2457 2462 } … … 4834 4839 4835 4840 // never sent because we track the common size factor 4836 - (BOOL)_canMakeTextSmaller { ASSERT_NOT_REACHED(); return NO; } 4837 - (BOOL)_canMakeTextLarger { ASSERT_NOT_REACHED(); return NO; } 4838 - (BOOL)_canMakeTextStandardSize { ASSERT_NOT_REACHED(); return NO; } 4841 - (BOOL)_canMakeTextSmaller 4842 { 4843 ASSERT_NOT_REACHED(); 4844 return NO; 4845 } 4846 4847 - (BOOL)_canMakeTextLarger 4848 { 4849 ASSERT_NOT_REACHED(); 4850 return NO; 4851 } 4852 4853 - (BOOL)_canMakeTextStandardSize 4854 { 4855 ASSERT_NOT_REACHED(); 4856 return NO; 4857 } 4839 4858 4840 4859 @end -
trunk/WebKit/WebView/WebPDFView.mm
r17229 r17238 817 817 - (void)PDFViewWillClickOnLink:(PDFView *)sender withURL:(NSURL *)URL 818 818 { 819 if (URL != nil)820 [[ [dataSource webFrame] _frameLoader] safeLoadURL:URL];819 if (URL) 820 [[dataSource webFrame] _frameLoader]->safeLoad(URL); 821 821 } 822 822 -
trunk/WebKit/WebView/WebView.mm
r17229 r17238 30 30 #import "WebViewInternal.h" 31 31 32 #import <JavaScriptCore/Assertions.h>33 32 #import "WebBackForwardList.h" 34 33 #import "WebBaseNetscapePluginView.h" 35 34 #import "WebDOMOperationsPrivate.h" 36 35 #import "WebDashboardRegion.h" 37 #import <WebCore/WebDataProtocol.h>38 36 #import "WebDataSourceInternal.h" 39 37 #import "WebDefaultEditingDelegate.h" … … 45 43 #import "WebDocument.h" 46 44 #import "WebDocumentInternal.h" 47 #import <WebCore/WebDocumentLoader.h>48 45 #import "WebDownload.h" 49 46 #import "WebDownloadInternal.h" … … 53 50 #import "WebFrameBridge.h" 54 51 #import "WebFrameInternal.h" 55 #import <WebCore/WebFrameLoader.h>56 52 #import "WebFrameViewInternal.h" 57 53 #import "WebHTMLRepresentation.h" … … 76 72 #import "WebNSUserDefaultsExtras.h" 77 73 #import "WebNSViewExtras.h" 74 #import "WebPDFView.h" 78 75 #import "WebPageBridge.h" 79 #import "WebPDFView.h"80 76 #import "WebPluginDatabase.h" 81 77 #import "WebPolicyDelegate.h" 78 #import "WebPreferenceKeysPrivate.h" 82 79 #import "WebPreferencesPrivate.h" 83 #import "WebPreferenceKeysPrivate.h"84 80 #import "WebResourceLoadDelegate.h" 85 81 #import "WebScriptDebugDelegatePrivate.h" … … 89 85 #import <CoreFoundation/CFSet.h> 90 86 #import <Foundation/NSURLConnection.h> 87 #import <JavaScriptCore/Assertions.h> 91 88 #import <WebCore/WebCoreEncodings.h> 92 89 #import <WebCore/WebCoreFrameBridge.h> 93 90 #import <WebCore/WebCoreSettings.h> 91 #import <WebCore/WebCoreTextRenderer.h> 94 92 #import <WebCore/WebCoreView.h> 93 #import <WebCore/WebDataProtocol.h> 94 #import <WebCore/WebDocumentLoader.h> 95 #import <WebCore/WebFrameLoader.h> 95 96 #import <WebKit/DOM.h> 97 #import <WebKit/DOMExtensions.h> 96 98 #import <WebKit/DOMPrivate.h> 97 #import <WebKit/DOMExtensions.h>98 99 #import <WebKitSystemInterface.h> 99 100 #import <objc/objc-runtime.h> 100 101 101 #import <WebCore/WebCoreTextRenderer.h> 102 using namespace WebCore; 102 103 103 104 #if defined(__ppc__) || defined(__ppc64__) … … 622 623 [self removeDragCaret]; 623 624 624 [[[self mainFrame] _frameLoader] detachFromParent]; 625 FrameLoader* mainFrameLoader = [[self mainFrame] _frameLoader]; 626 if (mainFrameLoader) 627 mainFrameLoader->detachFromParent(); 625 628 [_private->_pageBridge close]; 626 629 [_private->_pageBridge release]; … … 695 698 - (void)setDefersCallbacks:(BOOL)defers 696 699 { 697 if (defers == _private->defersCallbacks) {700 if (defers == _private->defersCallbacks) 698 701 return; 699 }700 702 701 703 _private->defersCallbacks = defers; 702 [[[self mainFrame] _frameLoader] defersCallbacksChanged]; 704 FrameLoader* mainFrameLoader = [[self mainFrame] _frameLoader]; 705 if (mainFrameLoader) 706 mainFrameLoader->defersCallbacksChanged(); 703 707 } 704 708 … … 2186 2190 { 2187 2191 NSString *oldEncoding = [self customTextEncodingName]; 2188 if (encoding == oldEncoding || [encoding isEqualToString:oldEncoding]) {2192 if (encoding == oldEncoding || [encoding isEqualToString:oldEncoding]) 2189 2193 return; 2190 } 2191 [[[self mainFrame] _frameLoader] _reloadAllowingStaleDataWithOverrideEncoding:encoding]; 2194 FrameLoader* mainFrameLoader = [[self mainFrame] _frameLoader]; 2195 if (mainFrameLoader) 2196 mainFrameLoader->reloadAllowingStaleData(encoding); 2192 2197 } 2193 2198
Note:
See TracChangeset
for help on using the changeset viewer.