Changeset 259392 in webkit
- Timestamp:
- Apr 2, 2020, 10:51:06 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 20 edited
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.cpp (modified) (2 diffs)
-
Source/WebCore/loader/ResourceLoadNotifier.cpp (modified) (2 diffs)
-
Source/WebCore/loader/ResourceLoadNotifier.h (modified) (1 diff)
-
Source/WebCore/page/Page.cpp (modified) (1 diff)
-
Source/WebCore/page/Page.h (modified) (2 diffs)
-
Source/WebCore/page/PageConfiguration.h (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/Shared/WebPageCreationParameters.cpp (modified) (2 diffs)
-
Source/WebKit/Shared/WebPageCreationParameters.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/APIPageConfiguration.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/API/APIPageConfiguration.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h (modified) (1 diff)
-
Source/WebKit/UIProcess/WebPageProxy.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/WebPage/WebPage.cpp (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/cocoa/HTTPServer.h (modified) (2 diffs)
-
Tools/TestWebKitAPI/cocoa/HTTPServer.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r259388 r259392 1 2020-04-02 Alex Christensen <achristensen@webkit.org> 2 3 Add SPI to restrict loading to main resources or non-network loads 4 https://bugs.webkit.org/show_bug.cgi?id=209893 5 6 Reviewed by Tim Horton. 7 8 This will allow two projects that currently use the injected bundle SPI to use these instead. 9 Covered by API tests. 10 11 * Modules/websockets/ThreadableWebSocketChannel.cpp: 12 (WebCore::ThreadableWebSocketChannel::validateURL): 13 * loader/ResourceLoadNotifier.cpp: 14 (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest): 15 (WebCore::ResourceLoadNotifier::dispatchWillSendRequest): 16 * loader/ResourceLoadNotifier.h: 17 * page/Page.cpp: 18 (WebCore::m_loadsFromNetwork): 19 (WebCore::m_deviceOrientationUpdateProvider): Deleted. 20 * page/Page.h: 21 (WebCore::Page::loadsSubresources const): 22 (WebCore::Page::loadsFromNetwork const): 23 * page/PageConfiguration.h: 24 1 25 2020-04-02 Eric Carlson <eric.carlson@apple.com> 2 26 -
trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.cpp
r253965 r259392 83 83 { 84 84 ValidatedURL validatedURL { requestedURL, true }; 85 if (auto* page = document.page()) { 86 if (!page->loadsFromNetwork()) 87 return { }; 85 88 #if ENABLE(CONTENT_EXTENSIONS) 86 if (auto* page = document.page()) {87 89 if (auto* documentLoader = document.loader()) { 88 90 auto results = page->userContentProvider().processContentRuleListsForLoad(validatedURL.url, ContentExtensions::ResourceType::Raw, *documentLoader); … … 95 97 validatedURL.areCookiesAllowed = !results.summary.blockedCookies; 96 98 } 99 #else 100 UNUSED_PARAM(document); 101 #endif 97 102 } 98 #else99 UNUSED_PARAM(document);100 #endif101 103 return validatedURL; 102 104 } -
trunk/Source/WebCore/loader/ResourceLoadNotifier.cpp
r251041 r259392 110 110 void ResourceLoadNotifier::assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request) 111 111 { 112 bool pageIsProvisionallyLoading = false; 113 if (auto* frameLoader = loader ? loader->frameLoader() : nullptr) 114 pageIsProvisionallyLoading = frameLoader->provisionalDocumentLoader() == loader; 115 116 if (pageIsProvisionallyLoading) 117 m_initialRequestIdentifier = identifier; 118 112 119 m_frame.loader().client().assignIdentifierToInitialRequest(identifier, loader, request); 113 120 } … … 127 134 m_frame.loader().documentLoader()->didTellClientAboutLoad(request.url()); 128 135 136 if (auto* page = m_frame.page()) { 137 if (!page->loadsSubresources()) { 138 if (!m_frame.isMainFrame() || (m_initialRequestIdentifier && *m_initialRequestIdentifier != identifier)) 139 request = { }; 140 } else if (!page->loadsFromNetwork() && request.url().protocolIsInHTTPFamily()) 141 request = { }; 142 } 143 129 144 // Notifying the FrameLoaderClient may cause the frame to be destroyed. 130 145 Ref<Frame> protect(m_frame); -
trunk/Source/WebCore/loader/ResourceLoadNotifier.h
r213917 r259392 68 68 private: 69 69 Frame& m_frame; 70 Optional<unsigned long> m_initialRequestIdentifier; 70 71 }; 71 72 -
trunk/Source/WebCore/page/Page.cpp
r259347 r259392 291 291 , m_deviceOrientationUpdateProvider(WTFMove(pageConfiguration.deviceOrientationUpdateProvider)) 292 292 #endif 293 , m_loadsSubresources(pageConfiguration.loadsSubresources) 294 , m_loadsFromNetwork(pageConfiguration.loadsFromNetwork) 293 295 { 294 296 updateTimerThrottlingState(); -
trunk/Source/WebCore/page/Page.h
r259347 r259392 703 703 bool isUtilityPage() const { return m_isUtilityPage; } 704 704 705 bool loadsSubresources() const { return m_loadsSubresources; } 706 bool loadsFromNetwork() const { return m_loadsFromNetwork; } 707 705 708 bool isLowPowerModeEnabled() const; 706 709 WEBCORE_EXPORT void setLowPowerModeEnabledOverrideForTesting(Optional<bool>); … … 1011 1014 Vector<UserStyleSheet> m_userStyleSheetsPendingInjection; 1012 1015 bool m_shouldFireResizeEvents { true }; 1016 bool m_loadsSubresources { true }; 1017 bool m_loadsFromNetwork { true }; 1013 1018 }; 1014 1019 -
trunk/Source/WebCore/page/PageConfiguration.h
r258628 r259392 128 128 Vector<String> corsDisablingPatterns; 129 129 UniqueRef<MediaRecorderProvider> mediaRecorderProvider; 130 bool loadsSubresources { true }; 131 bool loadsFromNetwork { true }; 130 132 }; 131 133 -
trunk/Source/WebKit/ChangeLog
r259384 r259392 1 2020-04-02 Alex Christensen <achristensen@webkit.org> 2 3 Add SPI to restrict loading to main resources or non-network loads 4 https://bugs.webkit.org/show_bug.cgi?id=209893 5 6 Reviewed by Tim Horton. 7 8 * Shared/WebPageCreationParameters.cpp: 9 (WebKit::WebPageCreationParameters::encode const): 10 (WebKit::WebPageCreationParameters::decode): 11 * Shared/WebPageCreationParameters.h: 12 * UIProcess/API/APIPageConfiguration.cpp: 13 (API::PageConfiguration::copy const): 14 * UIProcess/API/APIPageConfiguration.h: 15 (API::PageConfiguration::loadsSubresources const): 16 (API::PageConfiguration::setLoadsSubresources): 17 (API::PageConfiguration::loadsFromNetwork const): 18 (API::PageConfiguration::setLoadsFromNetwork): 19 * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: 20 (-[WKWebViewConfiguration _setLoadsFromNetwork:]): 21 (-[WKWebViewConfiguration _loadsFromNetwork]): 22 (-[WKWebViewConfiguration _setLoadsSubresources:]): 23 (-[WKWebViewConfiguration _loadsSubresources]): 24 * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: 25 * UIProcess/WebPageProxy.cpp: 26 * WebProcess/WebPage/WebPage.cpp: 27 (WebKit::m_processDisplayName): 28 1 29 2020-04-02 youenn fablet <youenn@apple.com> 2 30 -
trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp
r259324 r259392 134 134 encoder << overriddenMediaType; 135 135 encoder << corsDisablingPatterns; 136 encoder << loadsSubresources; 137 encoder << loadsFromNetwork; 136 138 encoder << crossOriginAccessControlCheckEnabled; 137 139 encoder << processDisplayName; … … 417 419 parameters.corsDisablingPatterns = WTFMove(*corsDisablingPatterns); 418 420 421 Optional<bool> loadsSubresources; 422 decoder >> loadsSubresources; 423 if (!loadsSubresources) 424 return WTF::nullopt; 425 parameters.loadsSubresources = *loadsSubresources; 426 427 Optional<bool> loadsFromNetwork; 428 decoder >> loadsFromNetwork; 429 if (!loadsFromNetwork) 430 return WTF::nullopt; 431 parameters.loadsFromNetwork = *loadsFromNetwork; 432 419 433 Optional<bool> crossOriginAccessControlCheckEnabled; 420 434 decoder >> crossOriginAccessControlCheckEnabled; -
trunk/Source/WebKit/Shared/WebPageCreationParameters.h
r259324 r259392 203 203 String overriddenMediaType; 204 204 Vector<String> corsDisablingPatterns; 205 bool loadsSubresources { true }; 206 bool loadsFromNetwork { true }; 207 205 208 bool crossOriginAccessControlCheckEnabled { true }; 206 209 String processDisplayName; -
trunk/Source/WebKit/UIProcess/API/APIPageConfiguration.cpp
r258296 r259392 96 96 copy->m_processDisplayName = this->m_processDisplayName; 97 97 copy->m_ignoresAppBoundDomains = this->m_ignoresAppBoundDomains; 98 copy->m_loadsSubresources = this->m_loadsSubresources; 99 copy->m_loadsFromNetwork = this->m_loadsFromNetwork; 98 100 99 101 return copy; -
trunk/Source/WebKit/UIProcess/API/APIPageConfiguration.h
r259243 r259392 150 150 bool ignoresAppBoundDomains() const { return m_ignoresAppBoundDomains; } 151 151 void setIgnoresAppBoundDomains(bool shouldIgnore) { m_ignoresAppBoundDomains = shouldIgnore; } 152 152 153 bool loadsSubresources() const { return m_loadsSubresources; } 154 void setLoadsSubresources(bool loads) { m_loadsSubresources = loads; } 155 156 bool loadsFromNetwork() const { return m_loadsFromNetwork; } 157 void setLoadsFromNetwork(bool loads) { m_loadsFromNetwork = loads; } 158 153 159 private: 154 160 … … 192 198 WebKit::WebViewCategory m_webViewCategory { WebKit::WebViewCategory::AppBoundDomain }; 193 199 bool m_ignoresAppBoundDomains { false }; 200 bool m_loadsSubresources { true }; 201 bool m_loadsFromNetwork { true }; 194 202 }; 195 203 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm
r258296 r259392 914 914 } 915 915 916 - (void)_setLoadsFromNetwork:(BOOL)loads 917 { 918 _pageConfiguration->setLoadsFromNetwork(loads); 919 } 920 921 - (BOOL)_loadsFromNetwork 922 { 923 return _pageConfiguration->loadsFromNetwork(); 924 } 925 926 - (void)_setLoadsSubresources:(BOOL)loads 927 { 928 _pageConfiguration->setLoadsSubresources(loads); 929 } 930 931 - (BOOL)_loadsSubresources 932 { 933 return _pageConfiguration->loadsSubresources(); 934 } 935 916 936 - (void)_setCrossOriginAccessControlCheckEnabled:(BOOL)enabled 917 937 { -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h
r259351 r259392 87 87 @property (nonatomic, setter=_setCrossOriginAccessControlCheckEnabled:) BOOL _crossOriginAccessControlCheckEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 88 88 89 @property (nonatomic, setter=_setLoadsFromNetwork:) BOOL _loadsFromNetwork WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 90 @property (nonatomic, setter=_setLoadsSubresources:) BOOL _loadsSubresources WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 91 89 92 #if TARGET_OS_IPHONE 90 93 @property (nonatomic, setter=_setClientNavigationsRunAtForegroundPriority:) BOOL _clientNavigationsRunAtForegroundPriority WK_API_AVAILABLE(ios(WK_IOS_TBA)); -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r259324 r259392 7782 7782 parameters.overriddenMediaType = m_overriddenMediaType; 7783 7783 parameters.corsDisablingPatterns = m_configuration->corsDisablingPatterns(); 7784 parameters.loadsFromNetwork = m_configuration->loadsFromNetwork(); 7785 parameters.loadsSubresources = m_configuration->loadsSubresources(); 7784 7786 parameters.crossOriginAccessControlCheckEnabled = m_configuration->crossOriginAccessControlCheckEnabled(); 7785 7787 parameters.hasResourceLoadClient = !!m_resourceLoadClient; -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r259324 r259392 530 530 531 531 pageConfiguration.corsDisablingPatterns = WTFMove(parameters.corsDisablingPatterns); 532 pageConfiguration.loadsSubresources = parameters.loadsSubresources; 533 pageConfiguration.loadsFromNetwork = parameters.loadsFromNetwork; 534 532 535 if (!parameters.crossOriginAccessControlCheckEnabled) 533 536 CrossOriginAccessControlCheckDisabler::singleton().setCrossOriginAccessControlCheckEnabled(false); -
trunk/Tools/ChangeLog
r259386 r259392 1 2020-04-02 Alex Christensen <achristensen@webkit.org> 2 3 Add SPI to restrict loading to main resources or non-network loads 4 https://bugs.webkit.org/show_bug.cgi?id=209893 5 6 Reviewed by Tim Horton. 7 8 * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm: 9 * TestWebKitAPI/cocoa/HTTPServer.h: 10 (TestWebKitAPI::HTTPServer::totalRequests const): 11 * TestWebKitAPI/cocoa/HTTPServer.mm: 12 (TestWebKitAPI::HTTPServer::respondToRequests): 13 1 14 2020-04-02 Kate Cheney <katherine_cheney@apple.com> 2 15 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm
r258798 r259392 1005 1005 } 1006 1006 1007 TEST(URLSchemeHandler, LoadsFromNetwork) 1008 { 1009 TestWebKitAPI::HTTPServer server({ 1010 { "/", { {{ "Access-Control-Allow-Origin", "*" }}, "test content" } } 1011 }); 1012 1013 bool loadSuccess = false; 1014 bool loadFail = false; 1015 bool done = false; 1016 1017 auto handler = adoptNS([TestURLSchemeHandler new]); 1018 1019 WKWebViewConfiguration *configuration = [[[WKWebViewConfiguration alloc] init] autorelease]; 1020 [configuration setURLSchemeHandler:handler.get() forURLScheme:@"test"]; 1021 1022 [handler setStartURLSchemeTaskHandler:[&](WKWebView *, id<WKURLSchemeTask> task) { 1023 if ([task.request.URL.path isEqualToString:@"/main.html"]) { 1024 NSData *data = [[NSString stringWithFormat:@"<script>" 1025 "fetch('http://127.0.0.1:%d/').then(()=>{" 1026 "fetch('/loadSuccess')" 1027 "}).catch(()=>{" 1028 "var ws = new WebSocket('ws://127.0.0.1:%d');" 1029 "ws.onerror = function() { fetch('/loadFail') };" 1030 "})" 1031 "</script>", server.port(), server.port()] dataUsingEncoding:NSUTF8StringEncoding]; 1032 [task didReceiveResponse:[[[NSURLResponse alloc] initWithURL:task.request.URL MIMEType:@"text/html" expectedContentLength:data.length textEncodingName:nil] autorelease]]; 1033 [task didReceiveData:data]; 1034 [task didFinish]; 1035 } else if ([task.request.URL.path isEqualToString:@"/loadSuccess"]) { 1036 loadSuccess = true; 1037 done = true; 1038 } else if ([task.request.URL.path isEqualToString:@"/loadFail"]) { 1039 loadFail = true; 1040 done = true; 1041 } else 1042 ASSERT_NOT_REACHED(); 1043 }]; 1044 1045 { 1046 auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration]); 1047 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"test://host1/main.html"]]]; 1048 TestWebKitAPI::Util::run(&done); 1049 } 1050 EXPECT_TRUE(loadSuccess); 1051 EXPECT_FALSE(loadFail); 1052 EXPECT_EQ(server.totalRequests(), 1u); 1053 1054 loadSuccess = false; 1055 loadFail = false; 1056 done = false; 1057 1058 configuration._loadsFromNetwork = NO; 1059 { 1060 auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration]); 1061 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"test://host1/main.html"]]]; 1062 TestWebKitAPI::Util::run(&done); 1063 } 1064 EXPECT_FALSE(loadSuccess); 1065 EXPECT_TRUE(loadFail); 1066 EXPECT_EQ(server.totalRequests(), 1u); 1067 } 1068 1069 TEST(URLSchemeHandler, LoadsSubresources) 1070 { 1071 bool loadedImage = false; 1072 bool loadedIFrame = false; 1073 1074 auto handler = adoptNS([TestURLSchemeHandler new]); 1075 1076 WKWebViewConfiguration *configuration = [[[WKWebViewConfiguration alloc] init] autorelease]; 1077 [configuration setURLSchemeHandler:handler.get() forURLScheme:@"test"]; 1078 1079 [handler setStartURLSchemeTaskHandler:[&](WKWebView *, id<WKURLSchemeTask> task) { 1080 NSString *response = nil; 1081 if ([task.request.URL.path isEqualToString:@"/main.html"]) 1082 response = @"<img src='/imgsrc'></img><iframe src='/iframesrc'></iframe>"; 1083 else if ([task.request.URL.path isEqualToString:@"/imgsrc"]) { 1084 response = @"image content"; 1085 loadedImage = true; 1086 } else if ([task.request.URL.path isEqualToString:@"/iframesrc"]) { 1087 response = @"iframe content"; 1088 loadedIFrame = true; 1089 } else 1090 ASSERT_NOT_REACHED(); 1091 [task didReceiveResponse:[[[NSURLResponse alloc] initWithURL:task.request.URL MIMEType:@"text/html" expectedContentLength:response.length textEncodingName:nil] autorelease]]; 1092 [task didReceiveData:[response dataUsingEncoding:NSUTF8StringEncoding]]; 1093 [task didFinish]; 1094 }]; 1095 1096 { 1097 auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration]); 1098 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"test://host1/main.html"]]]; 1099 TestWebKitAPI::Util::run(&loadedImage); 1100 TestWebKitAPI::Util::run(&loadedIFrame); 1101 } 1102 1103 loadedImage = false; 1104 loadedIFrame = false; 1105 1106 configuration._loadsSubresources = NO; 1107 { 1108 auto webView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration]); 1109 auto delegate = adoptNS([TestNavigationDelegate new]); 1110 webView.get().navigationDelegate = delegate.get(); 1111 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"test://host1/main.html"]]]; 1112 [delegate waitForDidFinishNavigation]; 1113 TestWebKitAPI::Util::spinRunLoop(100); 1114 EXPECT_FALSE(loadedIFrame); 1115 EXPECT_FALSE(loadedImage); 1116 } 1117 } 1118 1007 1119 #endif // HAVE(NETWORK_FRAMEWORK) 1008 1120 -
trunk/Tools/TestWebKitAPI/cocoa/HTTPServer.h
r255863 r259392 44 44 uint16_t port() const; 45 45 NSURLRequest *request() const; 46 size_t totalRequests() const { return m_totalRequests; } 46 47 47 48 private: … … 51 52 const Protocol m_protocol; 52 53 const HashMap<String, HTTPResponse> m_requestResponseMap; 54 size_t m_totalRequests { 0 }; 53 55 }; 54 56 -
trunk/Tools/TestWebKitAPI/cocoa/HTTPServer.mm
r258004 r259392 101 101 request.append('\0'); 102 102 103 m_totalRequests++; 104 103 105 const char* getPathPrefix = "GET "; 104 106 const char* postPathPrefix = "POST ";
Note:
See TracChangeset
for help on using the changeset viewer.