[Resource Timing] Media elements initiated loads should set the initiatorType to...
authorjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 25 Feb 2017 07:50:08 +0000 (07:50 +0000)
committerjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 25 Feb 2017 07:50:08 +0000 (07:50 +0000)
https://bugs.webkit.org/show_bug.cgi?id=168680

Reviewed by Youenn Fablet.

LayoutTests/imported/w3c:

* web-platform-tests/resource-timing/rt-initiatorType-media-expected.txt:
Progression on the initiatorType.

Source/WebCore:

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
Pass in the element so it may be used as the initiator.

* html/HTMLVideoElement.h:
Export create() for TestWebKitAPI to use.

* loader/MediaResourceLoader.cpp:
(WebCore::MediaResourceLoader::MediaResourceLoader):
(WebCore::MediaResourceLoader::contextDestroyed):
(WebCore::MediaResourceLoader::requestResource):
* loader/MediaResourceLoader.h:
Include the HTMLMediaElement as the initiator.

Tools:

* TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
(TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
Include a dummy HTMLVideoElement.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@212994 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/resource-timing/rt-initiatorType-media-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLMediaElement.cpp
Source/WebCore/html/HTMLVideoElement.h
Source/WebCore/loader/MediaResourceLoader.cpp
Source/WebCore/loader/MediaResourceLoader.h
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm

index 04ba743..5168398 100644 (file)
@@ -1,5 +1,15 @@
 2017-02-24  Joseph Pecoraro  <pecoraro@apple.com>
 
+        [Resource Timing] Media elements initiated loads should set the initiatorType to their element name (video/audio)
+        https://bugs.webkit.org/show_bug.cgi?id=168680
+
+        Reviewed by Youenn Fablet.
+
+        * web-platform-tests/resource-timing/rt-initiatorType-media-expected.txt:
+        Progression on the initiatorType.
+
+2017-02-24  Joseph Pecoraro  <pecoraro@apple.com>
+
         [Resource Timing] Gather timing information with reliable responseEnd time
         https://bugs.webkit.org/show_bug.cgi?id=168351
 
index 0eb9b83..a2e566b 100644 (file)
@@ -1,8 +1,8 @@
 Resource Timing: Element localName initiatorType
 
 
-FAIL Type: video - <video src> assert_equals: initiatorType should be 'video' expected "video" but got "other"
+PASS Type: video - <video src> 
 PASS Timing: video - <video src> 
-FAIL Type: audio - <audio src> assert_equals: name should be the url expected "http://localhost:8800/resource-timing/resources/data.json?audio&0.7734679755996403" but got "http://localhost:8800/resource-timing/resources/data.json?video&0.5872075656484804"
+FAIL Type: audio - <audio src> assert_equals: name should be the url expected "http://localhost:8800/resource-timing/resources/data.json?audio&0.033975899379337426" but got "http://localhost:8800/resource-timing/resources/data.json?video&0.019321360269903165"
 PASS Timing: audio - <audio src> 
 
index dd4c9ba..68b9c45 100644 (file)
@@ -1,5 +1,26 @@
 2017-02-24  Joseph Pecoraro  <pecoraro@apple.com>
 
+        [Resource Timing] Media elements initiated loads should set the initiatorType to their element name (video/audio)
+        https://bugs.webkit.org/show_bug.cgi?id=168680
+
+        Reviewed by Youenn Fablet.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
+        Pass in the element so it may be used as the initiator.
+
+        * html/HTMLVideoElement.h:
+        Export create() for TestWebKitAPI to use.
+
+        * loader/MediaResourceLoader.cpp:
+        (WebCore::MediaResourceLoader::MediaResourceLoader):
+        (WebCore::MediaResourceLoader::contextDestroyed):
+        (WebCore::MediaResourceLoader::requestResource):
+        * loader/MediaResourceLoader.h:
+        Include the HTMLMediaElement as the initiator.
+
+2017-02-24  Joseph Pecoraro  <pecoraro@apple.com>
+
         [Resource Timing] Gather timing information with reliable responseEnd time
         https://bugs.webkit.org/show_bug.cgi?id=168351
 
index e730f0e..ba2fe99 100644 (file)
@@ -6433,7 +6433,7 @@ CachedResourceLoader* HTMLMediaElement::mediaPlayerCachedResourceLoader()
 
 RefPtr<PlatformMediaResourceLoader> HTMLMediaElement::mediaPlayerCreateResourceLoader()
 {
-    return adoptRef(*new MediaResourceLoader(document(), crossOrigin()));
+    return adoptRef(*new MediaResourceLoader(document(), *this, crossOrigin()));
 }
 
 bool HTMLMediaElement::mediaPlayerShouldUsePersistentCache() const
index c12b5a5..ab3c4a1 100644 (file)
@@ -37,7 +37,7 @@ class RenderVideo;
 
 class HTMLVideoElement final : public HTMLMediaElement {
 public:
-    static Ref<HTMLVideoElement> create(Document&);
+    WEBCORE_EXPORT static Ref<HTMLVideoElement> create(Document&);
     static Ref<HTMLVideoElement> create(const QualifiedName&, Document&, bool createdByParser);
 
     WEBCORE_EXPORT unsigned videoWidth() const;
index ac708d6..4e2bbde 100644 (file)
 #include "CachedResourceRequest.h"
 #include "CrossOriginAccessControl.h"
 #include "Document.h"
+#include "HTMLMediaElement.h"
 #include "SecurityOrigin.h"
 #include <wtf/NeverDestroyed.h>
 
 namespace WebCore {
 
-MediaResourceLoader::MediaResourceLoader(Document& document, const String& crossOriginMode)
+MediaResourceLoader::MediaResourceLoader(Document& document, HTMLMediaElement& mediaElement, const String& crossOriginMode)
     : ContextDestructionObserver(&document)
     , m_document(&document)
+    , m_mediaElement(&mediaElement)
     , m_crossOriginMode(crossOriginMode)
 {
 }
@@ -55,6 +57,7 @@ void MediaResourceLoader::contextDestroyed()
 {
     ContextDestructionObserver::contextDestroyed();
     m_document = nullptr;
+    m_mediaElement = nullptr;
 }
 
 RefPtr<PlatformMediaResource> MediaResourceLoader::requestResource(ResourceRequest&& request, LoadOptions options)
@@ -75,6 +78,7 @@ RefPtr<PlatformMediaResource> MediaResourceLoader::requestResource(ResourceReque
     // FIXME: Skip Content Security Policy check if the element that initiated this request is in a user-agent shadow tree. See <https://bugs.webkit.org/show_bug.cgi?id=155505>.
     CachedResourceRequest cacheRequest(WTFMove(request), ResourceLoaderOptions(SendCallbacks, DoNotSniffContent, bufferingPolicy, AllowStoredCredentials, ClientCredentialPolicy::MayAskClientForCredentials, FetchOptions::Credentials::Include, DoSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, cachingPolicy));
     cacheRequest.setAsPotentiallyCrossOrigin(m_crossOriginMode, *m_document);
+    cacheRequest.setInitiator(*m_mediaElement);
 
     CachedResourceHandle<CachedRawResource> resource = m_document->cachedResourceLoader().requestMedia(WTFMove(cacheRequest));
     if (!resource)
index 9485d0e..b5abf5a 100644 (file)
@@ -39,11 +39,12 @@ namespace WebCore {
 
 class CachedRawResource;
 class Document;
+class HTMLMediaElement;
 class MediaResource;
 
 class MediaResourceLoader final : public PlatformMediaResourceLoader, public ContextDestructionObserver {
 public:
-    WEBCORE_EXPORT MediaResourceLoader(Document&, const String& crossOriginMode);
+    WEBCORE_EXPORT MediaResourceLoader(Document&, HTMLMediaElement&, const String& crossOriginMode);
     WEBCORE_EXPORT virtual ~MediaResourceLoader();
 
     RefPtr<PlatformMediaResource> requestResource(ResourceRequest&&, LoadOptions) final;
@@ -56,6 +57,7 @@ private:
     void contextDestroyed() override;
 
     Document* m_document;
+    RefPtr<HTMLMediaElement> m_mediaElement;
     String m_crossOriginMode;
     HashSet<MediaResource*> m_resources;
 };
index 1a92028..b3d0f96 100644 (file)
@@ -1,3 +1,14 @@
+2017-02-24  Joseph Pecoraro  <pecoraro@apple.com>
+
+        [Resource Timing] Media elements initiated loads should set the initiatorType to their element name (video/audio)
+        https://bugs.webkit.org/show_bug.cgi?id=168680
+
+        Reviewed by Youenn Fablet.
+
+        * TestWebKitAPI/Tests/WebCore/cocoa/WebCoreNSURLSession.mm:
+        (TestWebKitAPI::WebCoreNSURLSessionTest::SetUp):
+        Include a dummy HTMLVideoElement.
+
 2017-02-24  Wenson Hsieh  <wenson_hsieh@apple.com>
 
         Unreviewed, temporarily disable all data interaction tests.
index 16413cf..c371fe3 100644 (file)
@@ -36,6 +36,7 @@
 #import <WebCore/PageConfiguration.h>
 #import <WebCore/Document.h>
 #import <WebCore/DocumentLoader.h>
+#import <WebCore/HTMLVideoElement.h>
 #import <WebCore/MediaResourceLoader.h>
 #import <WebCore/Settings.h>
 #import <WebCore/SubresourceLoader.h>
@@ -108,6 +109,7 @@ public:
     Frame* frame { nullptr };
     TestNSURLSessionDataDelegate *delegate { nil };
     RefPtr<MediaResourceLoader> loader;
+    RefPtr<HTMLMediaElement> mediaElement;
 
     virtual void SetUp()
     {
@@ -123,7 +125,8 @@ public:
 
         delegate = [[TestNSURLSessionDataDelegate alloc] init];
         frame = [view _mainCoreFrame];
-        loader = adoptRef(new MediaResourceLoader(*frame->document(), emptyString()));
+        mediaElement = HTMLVideoElement::create(*frame->document());
+        loader = adoptRef(new MediaResourceLoader(*frame->document(), *mediaElement.get(), emptyString()));
     }
 
     virtual void TearDown()