Changeset 215384 in webkit
- Timestamp:
- Apr 14, 2017, 5:52:10 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 13 edited
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/loader/SubresourceLoader.cpp (modified) (1 diff)
-
Source/WebKit2/ChangeLog (modified) (1 diff)
-
Source/WebKit2/UIProcess/Cocoa/NavigationState.mm (modified) (2 diffs)
-
Source/WebKit2/UIProcess/WebURLSchemeHandlerTask.cpp (modified) (1 diff)
-
Source/WebKit2/WebProcess/Network/WebLoaderStrategy.cpp (modified) (2 diffs)
-
Source/WebKit2/WebProcess/Network/WebLoaderStrategy.h (modified) (2 diffs)
-
Source/WebKit2/WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp (modified) (3 diffs)
-
Source/WebKit2/WebProcess/WebPage/WebURLSchemeHandlerProxy.h (modified) (1 diff)
-
Source/WebKit2/WebProcess/WebPage/WebURLSchemeHandlerTaskProxy.cpp (modified) (5 diffs)
-
Source/WebKit2/WebProcess/WebPage/WebURLSchemeHandlerTaskProxy.h (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (modified) (4 diffs)
-
Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r215382 r215384 1 2017-04-14 Brady Eidson <beidson@apple.com> 2 3 Fix basic WKURLSchemeHandler bugs. 4 <rdar://problem/30647559> and https://bugs.webkit.org/show_bug.cgi?id=170862 5 6 Reviewed by Andy Estes. 7 8 Covered by new API tests. 9 10 * loader/SubresourceLoader.cpp: 11 (WebCore::SubresourceLoader::didReceiveDataOrBuffer): 12 1 13 2017-04-14 Jiewen Tan <jiewen_tan@apple.com> 2 14 -
trunk/Source/WebCore/loader/SubresourceLoader.cpp
r214266 r215384 391 391 void SubresourceLoader::didReceiveDataOrBuffer(const char* data, int length, RefPtr<SharedBuffer>&& buffer, long long encodedDataLength, DataPayloadType dataPayloadType) 392 392 { 393 ASSERT(m_resource); 394 393 395 if (m_resource->response().httpStatusCode() >= 400 && !m_resource->shouldIgnoreHTTPStatusCodeErrors()) 394 396 return; -
trunk/Source/WebKit2/ChangeLog
r215362 r215384 1 2017-04-14 Brady Eidson <beidson@apple.com> 2 3 Fix basic WKURLSchemeHandler bugs. 4 <rdar://problem/30647559> and https://bugs.webkit.org/show_bug.cgi?id=170862 5 6 Reviewed by Andy Estes. 7 8 * UIProcess/Cocoa/NavigationState.mm: 9 (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction): 10 11 * UIProcess/WebURLSchemeHandlerTask.cpp: 12 (WebKit::WebURLSchemeHandlerTask::didReceiveResponse): 13 14 * WebProcess/Network/WebLoaderStrategy.cpp: 15 (WebKit::WebLoaderStrategy::addURLSchemeHandlerTaskProxy): 16 (WebKit::WebLoaderStrategy::removeURLSchemeHandlerTaskProxy): 17 (WebKit::WebLoaderStrategy::remove): 18 * WebProcess/Network/WebLoaderStrategy.h: 19 20 * WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp: 21 (WebKit::WebURLSchemeHandlerProxy::startNewTask): 22 (WebKit::WebURLSchemeHandlerProxy::taskDidComplete): 23 (WebKit::WebURLSchemeHandlerProxy::taskDidStopLoading): 24 * WebProcess/WebPage/WebURLSchemeHandlerProxy.h: 25 26 * WebProcess/WebPage/WebURLSchemeHandlerTaskProxy.cpp: 27 (WebKit::WebURLSchemeHandlerTaskProxy::WebURLSchemeHandlerTaskProxy): 28 (WebKit::WebURLSchemeHandlerTaskProxy::stopLoading): 29 (WebKit::WebURLSchemeHandlerTaskProxy::didReceiveResponse): 30 (WebKit::WebURLSchemeHandlerTaskProxy::didReceiveData): 31 (WebKit::WebURLSchemeHandlerTaskProxy::didComplete): 32 (WebKit::WebURLSchemeHandlerTaskProxy::hasLoader): 33 * WebProcess/WebPage/WebURLSchemeHandlerTaskProxy.h: 34 (WebKit::WebURLSchemeHandlerTaskProxy::identifier): 35 1 36 2017-04-14 Jer Noble <jer.noble@apple.com> 2 37 -
trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm
r215173 r215384 312 312 RefPtr<WebFramePolicyListenerProxy> localListener = WTFMove(listener); 313 313 314 tryAppLink(WTFMove(localNavigationAction), mainFrameURLString, [ localListener, localNavigationAction = RefPtr<API::NavigationAction>(&navigationAction)] (bool followedLinkToApp) {314 tryAppLink(WTFMove(localNavigationAction), mainFrameURLString, [webPage = RefPtr<WebPageProxy>(&webPageProxy), localListener, localNavigationAction = RefPtr<API::NavigationAction>(&navigationAction)] (bool followedLinkToApp) { 315 315 if (followedLinkToApp) { 316 316 localListener->ignore(); … … 324 324 325 325 RetainPtr<NSURLRequest> nsURLRequest = adoptNS(wrapper(API::URLRequest::create(localNavigationAction->request()).leakRef())); 326 if ([NSURLConnection canHandleRequest:nsURLRequest.get()] ) {326 if ([NSURLConnection canHandleRequest:nsURLRequest.get()] || webPage->urlSchemeHandlerForScheme([nsURLRequest URL].scheme)) { 327 327 if (localNavigationAction->shouldPerformDownload()) 328 328 localListener->download(); -
trunk/Source/WebKit2/UIProcess/WebURLSchemeHandlerTask.cpp
r213686 r215384 61 61 62 62 m_responseSent = true; 63 64 response.includeCertificateInfo(); 63 65 m_page->send(Messages::WebPage::URLSchemeHandlerTaskDidReceiveResponse(m_urlSchemeHandler->identifier(), m_identifier, response)); 64 66 return WebURLSchemeHandlerTask::ExceptionType::None; -
trunk/Source/WebKit2/WebProcess/Network/WebLoaderStrategy.cpp
r215160 r215384 265 265 } 266 266 267 void WebLoaderStrategy::addURLSchemeHandlerTaskProxy(WebURLSchemeHandlerTaskProxy& task) 268 { 269 auto result = m_urlSchemeHandlerTasks.add(task.identifier(), &task); 270 ASSERT_UNUSED(result, result.isNewEntry); 271 } 272 273 void WebLoaderStrategy::removeURLSchemeHandlerTaskProxy(WebURLSchemeHandlerTaskProxy& task) 274 { 275 m_urlSchemeHandlerTasks.remove(task.identifier()); 276 } 277 267 278 void WebLoaderStrategy::remove(ResourceLoader* resourceLoader) 268 279 { … … 270 281 LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::remove, url '%s'", resourceLoader->url().string().utf8().data()); 271 282 283 if (auto task = m_urlSchemeHandlerTasks.take(resourceLoader->identifier())) { 284 ASSERT(!m_internallyFailedResourceLoaders.contains(resourceLoader)); 285 task->stopLoading(); 286 return; 287 } 288 272 289 if (m_internallyFailedResourceLoaders.contains(resourceLoader)) { 273 290 m_internallyFailedResourceLoaders.remove(resourceLoader); 274 return;275 }276 277 if (auto task = m_urlSchemeHandlerTasks.take(resourceLoader->identifier())) {278 task->stopLoading();279 291 return; 280 292 } -
trunk/Source/WebKit2/WebProcess/Network/WebLoaderStrategy.h
r215255 r215384 67 67 void networkProcessCrashed(); 68 68 69 void addURLSchemeHandlerTaskProxy(WebURLSchemeHandlerTaskProxy&); 70 void removeURLSchemeHandlerTaskProxy(WebURLSchemeHandlerTaskProxy&); 71 69 72 private: 70 73 void scheduleLoad(WebCore::ResourceLoader&, WebCore::CachedResource*, bool shouldClearReferrerOnHTTPSToHTTPRedirect); … … 77 80 78 81 HashMap<unsigned long, RefPtr<WebResourceLoader>> m_webResourceLoaders; 79 HashMap<unsigned long, std::unique_ptr<WebURLSchemeHandlerTaskProxy>> m_urlSchemeHandlerTasks;82 HashMap<unsigned long, WebURLSchemeHandlerTaskProxy*> m_urlSchemeHandlerTasks; 80 83 }; 81 84 -
trunk/Source/WebKit2/WebProcess/WebPage/WebURLSchemeHandlerProxy.cpp
r213686 r215384 28 28 29 29 #include "WebErrors.h" 30 #include "WebLoaderStrategy.h" 31 #include "WebProcess.h" 30 32 #include <WebCore/ResourceLoader.h> 31 33 … … 50 52 ASSERT(result.isNewEntry); 51 53 54 WebProcess::singleton().webLoaderStrategy().addURLSchemeHandlerTaskProxy(*result.iterator->value); 52 55 result.iterator->value->startLoading(); 53 56 } … … 78 81 return; 79 82 83 WebProcess::singleton().webLoaderStrategy().removeURLSchemeHandlerTaskProxy(*task); 80 84 task->didComplete(error); 81 85 } 82 86 87 void WebURLSchemeHandlerProxy::taskDidStopLoading(WebURLSchemeHandlerTaskProxy& task) 88 { 89 ASSERT(m_tasks.get(task.identifier()) == &task); 90 m_tasks.remove(task.identifier()); 91 } 92 83 93 } // namespace WebKit -
trunk/Source/WebKit2/WebProcess/WebPage/WebURLSchemeHandlerProxy.h
r213686 r215384 53 53 void taskDidReceiveData(uint64_t taskIdentifier, size_t, const uint8_t* data); 54 54 void taskDidComplete(uint64_t taskIdentifier, const WebCore::ResourceError&); 55 void taskDidStopLoading(WebURLSchemeHandlerTaskProxy&); 55 56 56 57 private: -
trunk/Source/WebKit2/WebProcess/WebPage/WebURLSchemeHandlerTaskProxy.cpp
r213686 r215384 43 43 , m_coreLoader(&loader) 44 44 , m_request(loader.request()) 45 , m_identifier(loader.identifier()) 45 46 { 46 47 } … … 54 55 void WebURLSchemeHandlerTaskProxy::stopLoading() 55 56 { 56 if (!m_coreLoader) 57 return; 58 57 ASSERT(m_coreLoader); 59 58 m_urlSchemeHandler.page().send(Messages::WebPageProxy::StopURLSchemeHandlerTask(m_urlSchemeHandler.identifier(), m_coreLoader->identifier())); 60 59 m_coreLoader = nullptr; 60 61 // This line will result in this being deleted. 62 m_urlSchemeHandler.taskDidStopLoading(*this); 61 63 } 62 64 63 65 void WebURLSchemeHandlerTaskProxy::didReceiveResponse(const ResourceResponse& response) 64 66 { 65 if (! m_coreLoader)67 if (!hasLoader()) 66 68 return; 67 69 … … 71 73 void WebURLSchemeHandlerTaskProxy::didReceiveData(size_t size, const uint8_t* data) 72 74 { 73 if (! m_coreLoader)75 if (!hasLoader()) 74 76 return; 75 77 … … 79 81 void WebURLSchemeHandlerTaskProxy::didComplete(const ResourceError& error) 80 82 { 81 if (! m_coreLoader)83 if (!hasLoader()) 82 84 return; 83 85 … … 90 92 } 91 93 94 bool WebURLSchemeHandlerTaskProxy::hasLoader() 95 { 96 if (m_coreLoader && m_coreLoader->reachedTerminalState()) 97 m_coreLoader = nullptr; 98 99 return m_coreLoader; 100 } 101 92 102 } // namespace WebKit -
trunk/Source/WebKit2/WebProcess/WebPage/WebURLSchemeHandlerTaskProxy.h
r213686 r215384 52 52 void didComplete(const WebCore::ResourceError&); 53 53 54 unsigned long identifier() const { return m_identifier; } 55 54 56 private: 57 bool hasLoader(); 58 55 59 WebURLSchemeHandlerProxy& m_urlSchemeHandler; 56 60 RefPtr<WebCore::ResourceLoader> m_coreLoader; 57 61 WebCore::ResourceRequest m_request; 58 62 unsigned long m_identifier; 59 63 }; 60 64 -
trunk/Tools/ChangeLog
r215381 r215384 1 2017-04-14 Brady Eidson <beidson@apple.com> 2 3 Fix basic WKURLSchemeHandler bugs. 4 <rdar://problem/30647559> and https://bugs.webkit.org/show_bug.cgi?id=170862 5 6 Reviewed by Andy Estes. 7 8 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 9 * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm: Added. 10 (-[SchemeHandler initWithData:mimeType:]): 11 (-[SchemeHandler dealloc]): 12 (-[SchemeHandler webView:startTask:]): 13 (-[SchemeHandler webView:stopTask:]): 14 (TEST): 15 1 16 2017-04-14 Bill Ming <mbbill@gmail.com> 2 17 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r215355 r215384 155 155 51BCEE4E1C84F53B0042C82E /* IndexedDBMultiProcess-1.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 51BCEE4C1C84F52C0042C82E /* IndexedDBMultiProcess-1.html */; }; 156 156 51BCEE4F1C84F53B0042C82E /* IndexedDBMultiProcess-2.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 51BCEE4D1C84F52C0042C82E /* IndexedDBMultiProcess-2.html */; }; 157 51C683DE1EA134E800650183 /* WKURLSchemeHandler-1.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51C683DD1EA134DB00650183 /* WKURLSchemeHandler-1.mm */; }; 157 158 51CD1C6C1B38CE4300142CA5 /* ModalAlerts.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51CD1C6A1B38CE3600142CA5 /* ModalAlerts.mm */; }; 158 159 51CD1C721B38D48400142CA5 /* modal-alerts-in-new-about-blank-window.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 51CD1C711B38D48400142CA5 /* modal-alerts-in-new-about-blank-window.html */; }; … … 1077 1078 51BCEE4C1C84F52C0042C82E /* IndexedDBMultiProcess-1.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "IndexedDBMultiProcess-1.html"; sourceTree = "<group>"; }; 1078 1079 51BCEE4D1C84F52C0042C82E /* IndexedDBMultiProcess-2.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "IndexedDBMultiProcess-2.html"; sourceTree = "<group>"; }; 1080 51C683DD1EA134DB00650183 /* WKURLSchemeHandler-1.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "WKURLSchemeHandler-1.mm"; sourceTree = "<group>"; }; 1079 1081 51CB4AD71B3A079C00C1B1C6 /* ModalAlertsSPI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ModalAlertsSPI.cpp; sourceTree = "<group>"; }; 1080 1082 51CD1C6A1B38CE3600142CA5 /* ModalAlerts.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ModalAlerts.mm; sourceTree = "<group>"; }; … … 1714 1716 2D00065D1C1F58940088E6A7 /* WKPDFViewResizeCrash.mm */, 1715 1717 5E4B1D2C1D404C6100053621 /* WKScrollViewDelegateCrash.mm */, 1718 51C683DD1EA134DB00650183 /* WKURLSchemeHandler-1.mm */, 1716 1719 5CE354D81E70D9C300BEFE3B /* WKUserContentExtensionStore.mm */, 1717 1720 2EFF06D61D8AF34A0004BB30 /* WKWebViewCandidateTests.mm */, … … 2921 2924 5769C50B1D9B0002000847FB /* SerializedCryptoKeyWrap.mm in Sources */, 2922 2925 7CCE7ECB1A411A7E00447C4C /* SetAndUpdateCacheModel.mm in Sources */, 2926 51C683DE1EA134E800650183 /* WKURLSchemeHandler-1.mm in Sources */, 2923 2927 7CCE7ECC1A411A7E00447C4C /* SetDocumentURI.mm in Sources */, 2924 2928 7C83E0521D0A641800FEBCF3 /* SharedBuffer.cpp in Sources */,
Note:
See TracChangeset
for help on using the changeset viewer.