Changeset 293417 in webkit
- Timestamp:
- Apr 25, 2022 11:57:34 PM (3 months ago)
- Location:
- trunk
- Files:
-
- 6 edited
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/embed-and-object-are-not-intercepted.https-expected.txt (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/loader/DocumentLoader.cpp (modified) (5 diffs)
-
Source/WebCore/loader/DocumentLoader.h (modified) (1 diff)
-
Source/WebCore/loader/ImageLoader.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/imported/w3c/ChangeLog
r293322 r293417 1 2022-04-25 Youenn Fablet <youenn@apple.com> 2 3 Service workers should not intercept embed/object related loads 4 https://bugs.webkit.org/show_bug.cgi?id=239642 5 6 Reviewed by Chris Dumez. 7 8 * web-platform-tests/service-workers/service-worker/embed-and-object-are-not-intercepted.https-expected.txt: 9 1 10 2022-04-25 Ziran Sun <zsun@igalia.com> 2 11 -
trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/embed-and-object-are-not-intercepted.https-expected.txt
r267647 r293417 1 1 2 2 PASS initialize global state 3 FAIL requests for EMBED elements of embedded HTML content should not be intercepted by service workers assert_equals: expected "request for embedded content was not intercepted" but got "request for embedded content was intercepted by service worker" 4 FAIL requests for OBJECT elements of embedded HTML content should not be intercepted by service workers assert_equals: expected "request for embedded content was not intercepted" but got "request for embedded content was intercepted by service worker" 5 FAIL requests for EMBED elements of an image should not be intercepted by service workers assert_equals: expected "request was not intercepted" but got "FAIL: request was intercepted" 6 FAIL requests for OBJECT elements of an image should not be intercepted by service workers assert_equals: expected "request was not intercepted" but got "FAIL: request was intercepted" 7 FAIL post-load navigation of OBJECT elements should not be intercepted by service workers assert_equals: expected "request for embedded content was not intercepted" but got "request for embedded content was intercepted by service worker" 8 FAIL post-load navigation of EMBED elements should not be intercepted by service workers assert_equals: expected "request for embedded content was not intercepted" but got "request for embedded content was intercepted by service worker" 3 PASS requests for EMBED elements of embedded HTML content should not be intercepted by service workers 4 PASS requests for OBJECT elements of embedded HTML content should not be intercepted by service workers 5 PASS requests for EMBED elements of an image should not be intercepted by service workers 6 PASS requests for OBJECT elements of an image should not be intercepted by service workers 7 PASS post-load navigation of OBJECT elements should not be intercepted by service workers 8 PASS post-load navigation of EMBED elements should not be intercepted by service workers 9 9 PASS restore global state 10 10 -
trunk/Source/WebCore/ChangeLog
r293409 r293417 1 2022-04-25 Youenn Fablet <youenn@apple.com> 2 3 Service workers should not intercept embed/object related loads 4 https://bugs.webkit.org/show_bug.cgi?id=239642 5 6 Reviewed by Chris Dumez. 7 8 In case document loader or image loader are triggered by embed/object elements, 9 set service worker mode to none. 10 11 Covered by rebased test. 12 13 * loader/DocumentLoader.cpp: 14 * loader/DocumentLoader.h: 15 * loader/ImageLoader.cpp: 16 1 17 2022-04-25 Devin Rousso <drousso@apple.com> 2 18 -
trunk/Source/WebCore/loader/DocumentLoader.cpp
r293309 r293417 572 572 void DocumentLoader::matchRegistration(const URL& url, SWClientConnection::RegistrationCallback&& callback) 573 573 { 574 auto shouldTryLoadingThroughServiceWorker = !frameLoader()->isReloadingFromOrigin() && m_frame->page() && m_frame->settings().serviceWorkersEnabled() && url.protocolIsInHTTPFamily();574 bool shouldTryLoadingThroughServiceWorker = m_canUseServiceWorkers && !frameLoader()->isReloadingFromOrigin() && m_frame->page() && url.protocolIsInHTTPFamily(); 575 575 if (!shouldTryLoadingThroughServiceWorker) { 576 576 callback(std::nullopt); … … 892 892 893 893 #if ENABLE(SERVICE_WORKER) 894 if (m_ frame && m_frame->settings().serviceWorkersEnabled()&& response.source() == ResourceResponse::Source::MemoryCache) {894 if (m_canUseServiceWorkers && response.source() == ResourceResponse::Source::MemoryCache) { 895 895 matchRegistration(response.url(), [this, protectedThis = Ref { *this }, response, completionHandler = WTFMove(completionHandler)](auto&& registrationData) mutable { 896 896 if (!m_mainDocumentError.isNull() || !m_frame) { … … 1245 1245 #endif 1246 1246 #if ENABLE(SERVICE_WORKER) 1247 if (m_ frame && m_frame->settings().serviceWorkersEnabled()) {1247 if (m_canUseServiceWorkers) { 1248 1248 if (!document.securityOrigin().isUnique()) { 1249 1249 if (m_serviceWorkerRegistrationData && m_serviceWorkerRegistrationData->activeWorker) { … … 2020 2020 } 2021 2021 2022 #if ENABLE(SERVICE_WORKER) 2023 static bool canUseServiceWorkers(Frame* frame) 2024 { 2025 if (!frame || !frame->settings().serviceWorkersEnabled()) 2026 return false; 2027 auto* ownerElement = frame->ownerElement(); 2028 return !ownerElement || !is<HTMLPlugInElement>(ownerElement); 2029 } 2030 #endif 2031 2022 2032 void DocumentLoader::startLoadingMainResource() 2023 2033 { 2034 #if ENABLE(SERVICE_WORKER) 2035 m_canUseServiceWorkers = canUseServiceWorkers(m_frame.get()); 2036 #endif 2024 2037 m_mainDocumentError = ResourceError(); 2025 2038 timing().markStartTime(); … … 2139 2152 2140 2153 #if ENABLE(SERVICE_WORKER) 2141 if (m_frame && m_frame->settings().serviceWorkersEnabled()) { 2142 if (!isSandboxingAllowingServiceWorkerFetchHandling(frameLoader()->effectiveSandboxFlags())) 2143 mainResourceLoadOptions.serviceWorkersMode = ServiceWorkersMode::None; 2144 else { 2145 // The main navigation load will trigger the registration of the client. 2146 if (m_resultingClientId) 2147 scriptExecutionContextIdentifierToLoaderMap().remove(m_resultingClientId); 2148 m_resultingClientId = ScriptExecutionContextIdentifier::generate(); 2149 ASSERT(!scriptExecutionContextIdentifierToLoaderMap().contains(m_resultingClientId)); 2150 scriptExecutionContextIdentifierToLoaderMap().add(m_resultingClientId, this); 2151 mainResourceLoadOptions.clientIdentifier = m_resultingClientId; 2152 } 2154 if (!m_canUseServiceWorkers || !isSandboxingAllowingServiceWorkerFetchHandling(frameLoader()->effectiveSandboxFlags())) 2155 mainResourceLoadOptions.serviceWorkersMode = ServiceWorkersMode::None; 2156 else { 2157 // The main navigation load will trigger the registration of the client. 2158 if (m_resultingClientId) 2159 scriptExecutionContextIdentifierToLoaderMap().remove(m_resultingClientId); 2160 m_resultingClientId = ScriptExecutionContextIdentifier::generate(); 2161 ASSERT(!scriptExecutionContextIdentifierToLoaderMap().contains(m_resultingClientId)); 2162 scriptExecutionContextIdentifierToLoaderMap().add(m_resultingClientId, this); 2163 mainResourceLoadOptions.clientIdentifier = m_resultingClientId; 2153 2164 } 2154 2165 #endif -
trunk/Source/WebCore/loader/DocumentLoader.h
r293195 r293417 709 709 #if ENABLE(SERVICE_WORKER) 710 710 std::optional<ServiceWorkerRegistrationData> m_serviceWorkerRegistrationData; 711 bool m_canUseServiceWorkers { true }; 711 712 #endif 712 713 ScriptExecutionContextIdentifier m_resultingClientId; -
trunk/Source/WebCore/loader/ImageLoader.cpp
r292801 r293417 193 193 options.loadedFromPluginElement = is<HTMLPlugInElement>(element()) ? LoadedFromPluginElement::Yes : LoadedFromPluginElement::No; 194 194 options.sameOriginDataURLFlag = SameOriginDataURLFlag::Set; 195 options.serviceWorkersMode = is<HTMLPlugInElement>(element()) ? ServiceWorkersMode::None : ServiceWorkersMode::All; 195 196 bool isImageElement = is<HTMLImageElement>(element()); 196 197 if (isImageElement)
Note: See TracChangeset
for help on using the changeset viewer.