Title: [272313] trunk
Revision
272313
Author
[email protected]
Date
2021-02-03 07:08:38 -0800 (Wed, 03 Feb 2021)

Log Message

Add a loader for <model> resources
https://bugs.webkit.org/show_bug.cgi?id=221255

Reviewed by Youenn Fablet.

Source/WebCore:

In order to load <model> resources, we make the MediaResourceLoader constructor take
a FetchOptions::Destination to determine the type of resource loaded. We piggyback on
the media loading code for <model> resources since it handles things like CORS and CSP,
contrary to CachedRawResource.

* Modules/fetch/FetchRequest.idl:
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
* loader/FetchOptions.h:
* loader/LinkLoader.cpp:
(WebCore::createLinkPreloadResourceClient):
* loader/MediaResourceLoader.cpp:
(WebCore::MediaResourceLoader::MediaResourceLoader):
(WebCore::MediaResourceLoader::contextDestroyed):
(WebCore::MediaResourceLoader::requestResource):
* loader/MediaResourceLoader.h:
* loader/ResourceLoadInfo.cpp:
(WebCore::ContentExtensions::toResourceType):
* loader/SubresourceLoader.cpp:
(WebCore::logResourceLoaded):
* loader/cache/CachedResource.cpp:
(WebCore::CachedResource::defaultPriorityForResourceType):
* loader/cache/CachedResource.h:
(WebCore::CachedResource::isMainOrMediaOrIconOrRawResource const):
* loader/cache/CachedResourceLoader.cpp:
(WebCore::createResource):
(WebCore::CachedResourceLoader::requestMedia):
(WebCore::contentTypeFromResourceType):
(WebCore::CachedResourceLoader::checkInsecureContent const):
(WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):
(WebCore::destinationForType):
* platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
(WebCore::CachedResourceMediaLoader::create): Explicitly set the destination, which used to
default to EmptyString, to ensure we don't hit the ASSERT_NOT_REACHED() added to
CachedResourceLoader::requestMedia().
* platform/network/ResourceRequestBase.h:

Source/WebKit:

* NetworkProcess/NetworkLoadChecker.cpp:
(WebKit::NetworkLoadChecker::isAllowedByContentSecurityPolicy):
* NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::resourceLoadInfo):
* WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::maximumBufferingTime):

Tools:

* TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
(TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (272312 => 272313)


--- trunk/Source/WebCore/ChangeLog	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/ChangeLog	2021-02-03 15:08:38 UTC (rev 272313)
@@ -1,3 +1,47 @@
+2021-02-03  Antoine Quint  <[email protected]>
+
+        Add a loader for <model> resources
+        https://bugs.webkit.org/show_bug.cgi?id=221255
+
+        Reviewed by Youenn Fablet.
+
+        In order to load <model> resources, we make the MediaResourceLoader constructor take
+        a FetchOptions::Destination to determine the type of resource loaded. We piggyback on
+        the media loading code for <model> resources since it handles things like CORS and CSP,
+        contrary to CachedRawResource.
+
+        * Modules/fetch/FetchRequest.idl:
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
+        * loader/FetchOptions.h:
+        * loader/LinkLoader.cpp:
+        (WebCore::createLinkPreloadResourceClient):
+        * loader/MediaResourceLoader.cpp:
+        (WebCore::MediaResourceLoader::MediaResourceLoader):
+        (WebCore::MediaResourceLoader::contextDestroyed):
+        (WebCore::MediaResourceLoader::requestResource):
+        * loader/MediaResourceLoader.h:
+        * loader/ResourceLoadInfo.cpp:
+        (WebCore::ContentExtensions::toResourceType):
+        * loader/SubresourceLoader.cpp:
+        (WebCore::logResourceLoaded):
+        * loader/cache/CachedResource.cpp:
+        (WebCore::CachedResource::defaultPriorityForResourceType):
+        * loader/cache/CachedResource.h:
+        (WebCore::CachedResource::isMainOrMediaOrIconOrRawResource const):
+        * loader/cache/CachedResourceLoader.cpp:
+        (WebCore::createResource):
+        (WebCore::CachedResourceLoader::requestMedia):
+        (WebCore::contentTypeFromResourceType):
+        (WebCore::CachedResourceLoader::checkInsecureContent const):
+        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):
+        (WebCore::destinationForType):
+        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
+        (WebCore::CachedResourceMediaLoader::create): Explicitly set the destination, which used to
+        default to EmptyString, to ensure we don't hit the ASSERT_NOT_REACHED() added to
+        CachedResourceLoader::requestMedia().
+        * platform/network/ResourceRequestBase.h:
+
 2021-02-03  Zalan Bujtas  <[email protected]>
 
         [LFC][IFC] Handles cases when the candidate content is overflowing from the get-go

Modified: trunk/Source/WebCore/Modules/fetch/FetchRequest.idl (272312 => 272313)


--- trunk/Source/WebCore/Modules/fetch/FetchRequest.idl	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/Modules/fetch/FetchRequest.idl	2021-02-03 15:08:38 UTC (rev 272313)
@@ -26,7 +26,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-enum FetchRequestDestination { "", "audio", "audioworklet", "document", "embed", "font", "image", "manifest", "object", "paintworklet", "report", "script", "serviceworker", "sharedworker", "style", "track", "video", "worker", "xslt" };
+enum FetchRequestDestination { "", "audio", "audioworklet", "document", "embed", "font", "image", "manifest", "model", "object", "paintworklet", "report", "script", "serviceworker", "sharedworker", "style", "track", "video", "worker", "xslt" };
 
 typedef (FetchRequest or USVString) RequestInfo;
 

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (272312 => 272313)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2021-02-03 15:08:38 UTC (rev 272313)
@@ -6941,7 +6941,8 @@
 
 RefPtr<PlatformMediaResourceLoader> HTMLMediaElement::mediaPlayerCreateResourceLoader()
 {
-    auto mediaResourceLoader = adoptRef(*new MediaResourceLoader(document(), *this, crossOrigin()));
+    auto destination = isVideo() ? FetchOptions::Destination::Video : FetchOptions::Destination::Audio;
+    auto mediaResourceLoader = adoptRef(*new MediaResourceLoader(document(), *this, crossOrigin(), destination));
 
     m_lastMediaResourceLoaderForTesting = makeWeakPtr(mediaResourceLoader.get());
 

Modified: trunk/Source/WebCore/loader/FetchOptions.h (272312 => 272313)


--- trunk/Source/WebCore/loader/FetchOptions.h	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/loader/FetchOptions.h	2021-02-03 15:08:38 UTC (rev 272313)
@@ -36,7 +36,7 @@
 namespace WebCore {
 
 struct FetchOptions {
-    enum class Destination : uint8_t { EmptyString, Audio, Audioworklet, Document, Embed, Font, Image, Manifest, Object, Paintworklet, Report, Script, Serviceworker, Sharedworker, Style, Track, Video, Worker, Xslt };
+    enum class Destination : uint8_t { EmptyString, Audio, Audioworklet, Document, Embed, Font, Image, Manifest, Model, Object, Paintworklet, Report, Script, Serviceworker, Sharedworker, Style, Track, Video, Worker, Xslt };
     enum class Mode : uint8_t { Navigate, SameOrigin, NoCors, Cors };
     enum class Credentials : uint8_t { Omit, SameOrigin, Include };
     enum class Cache : uint8_t { Default, NoStore, Reload, NoCache, ForceCache, OnlyIfCached };
@@ -113,6 +113,7 @@
         WebCore::FetchOptions::Destination::Font,
         WebCore::FetchOptions::Destination::Image,
         WebCore::FetchOptions::Destination::Manifest,
+        WebCore::FetchOptions::Destination::Model,
         WebCore::FetchOptions::Destination::Object,
         WebCore::FetchOptions::Destination::Paintworklet,
         WebCore::FetchOptions::Destination::Report,

Modified: trunk/Source/WebCore/loader/LinkLoader.cpp (272312 => 272313)


--- trunk/Source/WebCore/loader/LinkLoader.cpp	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/loader/LinkLoader.cpp	2021-02-03 15:08:38 UTC (rev 272313)
@@ -167,6 +167,9 @@
 #if ENABLE(APPLICATION_MANIFEST)
     case CachedResource::Type::ApplicationManifest:
 #endif
+#if ENABLE(MODEL_ELEMENT)
+    case CachedResource::Type::ModelResource:
+#endif
         // None of these values is currently supported as an `as` value.
         ASSERT_NOT_REACHED();
     }

Modified: trunk/Source/WebCore/loader/MediaResourceLoader.cpp (272312 => 272313)


--- trunk/Source/WebCore/loader/MediaResourceLoader.cpp	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/loader/MediaResourceLoader.cpp	2021-02-03 15:08:38 UTC (rev 272313)
@@ -34,8 +34,8 @@
 #include "CachedResourceRequest.h"
 #include "CrossOriginAccessControl.h"
 #include "Document.h"
+#include "Element.h"
 #include "FrameLoaderClient.h"
-#include "HTMLMediaElement.h"
 #include "InspectorInstrumentation.h"
 #include "SecurityOrigin.h"
 #include <wtf/NeverDestroyed.h>
@@ -49,11 +49,12 @@
     shouldRecordResponsesForTesting = true;
 }
 
-MediaResourceLoader::MediaResourceLoader(Document& document, HTMLMediaElement& mediaElement, const String& crossOriginMode)
+MediaResourceLoader::MediaResourceLoader(Document& document, Element& element, const String& crossOriginMode, FetchOptions::Destination destination)
     : ContextDestructionObserver(&document)
     , m_document(makeWeakPtr(document))
-    , m_mediaElement(makeWeakPtr(mediaElement))
+    , m_element(makeWeakPtr(element))
     , m_crossOriginMode(crossOriginMode)
+    , m_destination(destination)
 {
 }
 
@@ -66,7 +67,7 @@
 {
     ContextDestructionObserver::contextDestroyed();
     m_document = nullptr;
-    m_mediaElement = nullptr;
+    m_element = nullptr;
 }
 
 void MediaResourceLoader::sendH2Ping(const URL& url, CompletionHandler<void(Expected<Seconds, ResourceError>&&)>&& completionHandler)
@@ -88,8 +89,8 @@
 
     request.setRequester(ResourceRequest::Requester::Media);
 
-    if (m_mediaElement)
-        request.setInspectorInitiatorNodeIdentifier(InspectorInstrumentation::identifierForNode(*m_mediaElement));
+    if (m_element)
+        request.setInspectorInitiatorNodeIdentifier(InspectorInstrumentation::identifierForNode(*m_element));
 
 #if PLATFORM(MAC)
     // FIXME: Workaround for <rdar://problem/26071607>. We are not able to do CORS checking on 304 responses because they are usually missing the headers we need.
@@ -97,7 +98,7 @@
         request.makeUnconditional();
 #endif
 
-    ContentSecurityPolicyImposition contentSecurityPolicyImposition = m_mediaElement && m_mediaElement->isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck;
+    ContentSecurityPolicyImposition contentSecurityPolicyImposition = m_element && m_element->isInUserAgentShadowTree() ? ContentSecurityPolicyImposition::SkipPolicyCheck : ContentSecurityPolicyImposition::DoPolicyCheck;
     ResourceLoaderOptions loaderOptions {
         SendCallbackPolicy::SendCallbacks,
         ContentSniffingPolicy::DoNotSniffContent,
@@ -111,10 +112,10 @@
         contentSecurityPolicyImposition,
         DefersLoadingPolicy::AllowDefersLoading,
         cachingPolicy };
-    loaderOptions.destination = m_mediaElement && !m_mediaElement->isVideo() ? FetchOptions::Destination::Audio : FetchOptions::Destination::Video;
+    loaderOptions.destination = m_destination;
     auto cachedRequest = createPotentialAccessControlRequest(WTFMove(request), WTFMove(loaderOptions), *m_document, m_crossOriginMode);
-    if (m_mediaElement)
-        cachedRequest.setInitiator(*m_mediaElement);
+    if (m_element)
+        cachedRequest.setInitiator(*m_element);
 
     auto resource = m_document->cachedResourceLoader().requestMedia(WTFMove(cachedRequest)).value_or(nullptr);
     if (!resource)

Modified: trunk/Source/WebCore/loader/MediaResourceLoader.h (272312 => 272313)


--- trunk/Source/WebCore/loader/MediaResourceLoader.h	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/loader/MediaResourceLoader.h	2021-02-03 15:08:38 UTC (rev 272313)
@@ -30,6 +30,7 @@
 #include "CachedRawResourceClient.h"
 #include "CachedResourceHandle.h"
 #include "ContextDestructionObserver.h"
+#include "FetchOptions.h"
 #include "PlatformMediaResourceLoader.h"
 #include "ResourceResponse.h"
 #include <wtf/HashSet.h>
@@ -41,12 +42,12 @@
 
 class CachedRawResource;
 class Document;
-class HTMLMediaElement;
+class Element;
 class MediaResource;
 
 class MediaResourceLoader final : public PlatformMediaResourceLoader, public CanMakeWeakPtr<MediaResourceLoader>, public ContextDestructionObserver {
 public:
-    WEBCORE_EXPORT MediaResourceLoader(Document&, HTMLMediaElement&, const String& crossOriginMode);
+    WEBCORE_EXPORT MediaResourceLoader(Document&, Element&, const String& crossOriginMode, FetchOptions::Destination);
     WEBCORE_EXPORT virtual ~MediaResourceLoader();
 
     RefPtr<PlatformMediaResource> requestResource(ResourceRequest&&, LoadOptions) final;
@@ -64,10 +65,11 @@
     void contextDestroyed() override;
 
     WeakPtr<Document> m_document;
-    WeakPtr<HTMLMediaElement> m_mediaElement;
+    WeakPtr<Element> m_element;
     String m_crossOriginMode;
     HashSet<MediaResource*> m_resources;
     Vector<ResourceResponse> m_responsesForTesting;
+    FetchOptions::Destination m_destination;
 };
 
 class MediaResource : public PlatformMediaResource, CachedRawResourceClient {

Modified: trunk/Source/WebCore/loader/ResourceLoadInfo.cpp (272312 => 272313)


--- trunk/Source/WebCore/loader/ResourceLoadInfo.cpp	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/loader/ResourceLoadInfo.cpp	2021-02-03 15:08:38 UTC (rev 272313)
@@ -64,6 +64,9 @@
     case CachedResource::Type::Ping:
     case CachedResource::Type::Icon:
     case CachedResource::Type::RawResource:
+#if ENABLE(MODEL_ELEMENT)
+    case CachedResource::Type::ModelResource:
+#endif
         return ResourceType::Raw;
 
     case CachedResource::Type::TextTrackResource:

Modified: trunk/Source/WebCore/loader/SubresourceLoader.cpp (272312 => 272313)


--- trunk/Source/WebCore/loader/SubresourceLoader.cpp	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/loader/SubresourceLoader.cpp	2021-02-03 15:08:38 UTC (rev 272313)
@@ -580,6 +580,9 @@
     case CachedResource::Type::Beacon:
     case CachedResource::Type::Ping:
     case CachedResource::Type::MediaResource:
+#if ENABLE(MODEL_ELEMENT)
+    case CachedResource::Type::ModelResource:
+#endif
     case CachedResource::Type::Icon:
     case CachedResource::Type::RawResource:
         resourceType = DiagnosticLoggingKeys::rawKey();

Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (272312 => 272313)


--- trunk/Source/WebCore/loader/cache/CachedResource.cpp	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp	2021-02-03 15:08:38 UTC (rev 272313)
@@ -105,6 +105,10 @@
     case Type::TextTrackResource:
         return ResourceLoadPriority::Low;
 #endif
+#if ENABLE(MODEL_ELEMENT)
+    case Type::ModelResource:
+        return ResourceLoadPriority::Medium;
+#endif
 #if ENABLE(APPLICATION_MANIFEST)
     case Type::ApplicationManifest:
         return ResourceLoadPriority::Low;

Modified: trunk/Source/WebCore/loader/cache/CachedResource.h (272312 => 272313)


--- trunk/Source/WebCore/loader/cache/CachedResource.h	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h	2021-02-03 15:08:38 UTC (rev 272313)
@@ -73,6 +73,9 @@
         FontResource,
         SVGFontResource,
         MediaResource,
+#if ENABLE(MODEL_ELEMENT)
+        ModelResource,
+#endif
         RawResource,
         Icon,
         Beacon,
@@ -178,7 +181,7 @@
 
     bool isImage() const { return type() == Type::ImageResource; }
     // FIXME: CachedRawResource could be a main resource, an audio/video resource, or a raw XHR/icon resource.
-    bool isMainOrMediaOrIconOrRawResource() const { return type() == Type::MainResource || type() == Type::MediaResource || type() == Type::Icon || type() == Type::RawResource || type() == Type::Beacon || type() == Type::Ping; }
+    bool isMainOrMediaOrIconOrRawResource() const;
 
     // Whether this request should impact request counting and delay window.onload.
     bool ignoreForRequestCount() const
@@ -406,6 +409,19 @@
     Timer m_timer;
 };
 
+inline bool CachedResource::isMainOrMediaOrIconOrRawResource() const
+{
+    return type() == Type::MainResource
+        || type() == Type::MediaResource
+#if ENABLE(MODEL_ELEMENT)
+        || type() == Type::ModelResource
+#endif
+        || type() == Type::Icon
+        || type() == Type::RawResource
+        || type() == Type::Beacon
+        || type() == Type::Ping;
+}
+
 } // namespace WebCore
 
 #define SPECIALIZE_TYPE_TRAITS_CACHED_RESOURCE(ToClassName, CachedResourceType) \

Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (272312 => 272313)


--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2021-02-03 15:08:38 UTC (rev 272313)
@@ -131,6 +131,9 @@
     case CachedResource::Type::Beacon:
     case CachedResource::Type::Ping:
     case CachedResource::Type::MediaResource:
+#if ENABLE(MODEL_ELEMENT)
+    case CachedResource::Type::ModelResource:
+#endif
     case CachedResource::Type::RawResource:
     case CachedResource::Type::Icon:
     case CachedResource::Type::MainResource:
@@ -173,6 +176,9 @@
     case CachedResource::Type::RawResource:
     case CachedResource::Type::Icon:
     case CachedResource::Type::MainResource:
+#if ENABLE(MODEL_ELEMENT)
+    case CachedResource::Type::ModelResource:
+#endif
         return new CachedRawResource(WTFMove(request), resource.type(), resource.sessionID(), resource.cookieJar());
 #if ENABLE(XSLT)
     case CachedResource::Type::XSLStyleSheet:
@@ -317,8 +323,21 @@
 
 ResourceErrorOr<CachedResourceHandle<CachedRawResource>> CachedResourceLoader::requestMedia(CachedResourceRequest&& request)
 {
-    // FIXME: Assert request.options().destination is FetchOptions::Destination::{Audio, Video}.
-    return castCachedResourceTo<CachedRawResource>(requestResource(CachedResource::Type::MediaResource, WTFMove(request)));
+    auto resourceType = CachedResource::Type::MediaResource;
+    switch (request.options().destination) {
+    case FetchOptions::Destination::Audio:
+    case FetchOptions::Destination::Video:
+        break;
+    case FetchOptions::Destination::Model:
+#if ENABLE(MODEL_ELEMENT)
+        resourceType = CachedResource::Type::ModelResource;
+        break;
+#endif
+    default:
+        ASSERT_NOT_REACHED();
+    }
+
+    return castCachedResourceTo<CachedRawResource>(requestResource(resourceType, WTFMove(request)));
 }
 
 ResourceErrorOr<CachedResourceHandle<CachedRawResource>> CachedResourceLoader::requestIcon(CachedResourceRequest&& request)
@@ -363,7 +382,10 @@
     // 3.1. Optionally-blockable Content
     case CachedResource::Type::ImageResource:
     case CachedResource::Type::MediaResource:
-            return MixedContentChecker::ContentType::ActiveCanWarn;
+#if ENABLE(MODEL_ELEMENT)
+    case CachedResource::Type::ModelResource:
+#endif
+        return MixedContentChecker::ContentType::ActiveCanWarn;
 
     case CachedResource::Type::CSSStyleSheet:
     case CachedResource::Type::Script:
@@ -426,6 +448,9 @@
 #if ENABLE(VIDEO)
     case CachedResource::Type::TextTrackResource:
 #endif
+#if ENABLE(MODEL_ELEMENT)
+    case CachedResource::Type::ModelResource:
+#endif
     case CachedResource::Type::MediaResource:
     case CachedResource::Type::RawResource:
     case CachedResource::Type::Icon:
@@ -496,6 +521,9 @@
     case CachedResource::Type::Beacon:
     case CachedResource::Type::Ping:
     case CachedResource::Type::RawResource:
+#if ENABLE(MODEL_ELEMENT)
+    case CachedResource::Type::ModelResource:
+#endif
         return true;
 #if ENABLE(APPLICATION_MANIFEST)
     case CachedResource::Type::ApplicationManifest:
@@ -793,6 +821,9 @@
     case CachedResource::Type::LinkPrefetch:
     case CachedResource::Type::RawResource:
     case CachedResource::Type::MediaResource:
+#if ENABLE(MODEL_ELEMENT)
+    case CachedResource::Type::ModelResource:
+#endif
         // The caller is responsible for setting the appropriate destination.
         return FetchOptions::Destination::EmptyString;
     }

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm (272312 => 272313)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm	2021-02-03 15:08:38 UTC (rev 272313)
@@ -72,7 +72,7 @@
 {
     // FIXME: Skip Content Security Policy check if the element that inititated this request
     // is in a user-agent shadow tree. See <https://bugs.webkit.org/show_bug.cgi?id=173498>.
-    CachedResourceRequest request(WTFMove(resourceRequest), ResourceLoaderOptions(
+    ResourceLoaderOptions loaderOptions(
         SendCallbackPolicy::SendCallbacks,
         ContentSniffingPolicy::DoNotSniffContent,
         DataBufferingPolicy::BufferData,
@@ -84,7 +84,10 @@
         CertificateInfoPolicy::DoNotIncludeCertificateInfo,
         ContentSecurityPolicyImposition::DoPolicyCheck,
         DefersLoadingPolicy::AllowDefersLoading,
-        CachingPolicy::DisallowCaching));
+        CachingPolicy::DisallowCaching
+    );
+    loaderOptions.destination = FetchOptions::Destination::Video;
+    CachedResourceRequest request(WTFMove(resourceRequest), loaderOptions);
 
     auto resource = loader.requestMedia(WTFMove(request)).value_or(nullptr);
     if (!resource)

Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.h (272312 => 272313)


--- trunk/Source/WebCore/platform/network/ResourceRequestBase.h	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.h	2021-02-03 15:08:38 UTC (rev 272313)
@@ -165,7 +165,7 @@
     bool hiddenFromInspector() const { return m_hiddenFromInspector; }
     void setHiddenFromInspector(bool hiddenFromInspector) { m_hiddenFromInspector = hiddenFromInspector; }
 
-    enum class Requester : uint8_t { Unspecified, Main, XHR, Fetch, Media, ImportScripts, Ping, Beacon };
+    enum class Requester : uint8_t { Unspecified, Main, XHR, Fetch, Media, Model, ImportScripts, Ping, Beacon };
     Requester requester() const { return m_requester; }
     void setRequester(Requester requester) { m_requester = requester; }
 

Modified: trunk/Source/WebKit/ChangeLog (272312 => 272313)


--- trunk/Source/WebKit/ChangeLog	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebKit/ChangeLog	2021-02-03 15:08:38 UTC (rev 272313)
@@ -1,3 +1,17 @@
+2021-02-03  Antoine Quint  <[email protected]>
+
+        Add a loader for <model> resources
+        https://bugs.webkit.org/show_bug.cgi?id=221255
+
+        Reviewed by Youenn Fablet.
+
+        * NetworkProcess/NetworkLoadChecker.cpp:
+        (WebKit::NetworkLoadChecker::isAllowedByContentSecurityPolicy):
+        * NetworkProcess/NetworkResourceLoader.cpp:
+        (WebKit::NetworkResourceLoader::resourceLoadInfo):
+        * WebProcess/Network/WebLoaderStrategy.cpp:
+        (WebKit::maximumBufferingTime):
+
 2021-02-03  Kimmo Kinnunen  <[email protected]>
 
         MachSemaphore does not work well with IPC messages

Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp (272312 => 272313)


--- trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp	2021-02-03 15:08:38 UTC (rev 272313)
@@ -327,6 +327,7 @@
     case FetchOptions::Destination::Font:
     case FetchOptions::Destination::Image:
     case FetchOptions::Destination::Manifest:
+    case FetchOptions::Destination::Model:
     case FetchOptions::Destination::Object:
     case FetchOptions::Destination::Report:
     case FetchOptions::Destination::Style:

Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (272312 => 272313)


--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp	2021-02-03 15:08:38 UTC (rev 272313)
@@ -392,6 +392,10 @@
             return ResourceLoadInfo::Type::Image;
         case WebCore::FetchOptions::Destination::Manifest:
             return ResourceLoadInfo::Type::ApplicationManifest;
+#if ENABLE(MODEL_ELEMENT)
+        case WebCore::FetchOptions::Destination::Model:
+            return ResourceLoadInfo::Type::Media;
+#endif
         case WebCore::FetchOptions::Destination::Object:
             return ResourceLoadInfo::Type::Object;
         case WebCore::FetchOptions::Destination::Paintworklet:

Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp (272312 => 272313)


--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp	2021-02-03 15:08:38 UTC (rev 272313)
@@ -140,6 +140,9 @@
 #if ENABLE(APPLICATION_MANIFEST)
     case CachedResource::Type::ApplicationManifest:
 #endif
+#if ENABLE(MODEL_ELEMENT)
+    case CachedResource::Type::ModelResource:
+#endif
         return Seconds::infinity();
     case CachedResource::Type::ImageResource:
         return 500_ms;

Modified: trunk/Tools/ChangeLog (272312 => 272313)


--- trunk/Tools/ChangeLog	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Tools/ChangeLog	2021-02-03 15:08:38 UTC (rev 272313)
@@ -1,3 +1,13 @@
+2021-02-03  Antoine Quint  <[email protected]>
+
+        Add a loader for <model> resources
+        https://bugs.webkit.org/show_bug.cgi?id=221255
+
+        Reviewed by Youenn Fablet.
+
+        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
+        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
+
 2021-02-03  Ryan Haddad  <[email protected]>
 
         Big Sur test262 queues failing download-built-product step

Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm (272312 => 272313)


--- trunk/Tools/TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm	2021-02-03 14:40:46 UTC (rev 272312)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm	2021-02-03 15:08:38 UTC (rev 272313)
@@ -126,7 +126,7 @@
         delegate = [[TestNSURLSessionDataDelegate alloc] init];
         frame = [view _mainCoreFrame];
         mediaElement = HTMLVideoElement::create(*frame->document());
-        loader = adoptRef(new MediaResourceLoader(*frame->document(), *mediaElement.get(), emptyString()));
+        loader = adoptRef(new MediaResourceLoader(*frame->document(), *mediaElement.get(), emptyString(), FetchOptions::Destination::Video));
     }
 
     virtual void TearDown()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to