Title: [258017] trunk
Revision
258017
Author
david_ques...@apple.com
Date
2020-03-06 12:25:25 -0800 (Fri, 06 Mar 2020)

Log Message

Add _WKResourceLoadInfo.resourceType SPI
https://bugs.webkit.org/show_bug.cgi?id=208723

Reviewed by Alex Christensen.

Source/WebCore:

Covered by API tests.

* Modules/beacon/NavigatorBeacon.cpp:
(WebCore::NavigatorBeacon::sendBeacon):
* loader/PingLoader.cpp:
(WebCore::PingLoader::sendPing):
* platform/network/ResourceRequestBase.h:

Source/WebKit:

* NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::resourceLoadInfo):
* Shared/ResourceLoadInfo.h:
(WebKit::ResourceLoadInfo::encode const):
(WebKit::ResourceLoadInfo::decode):
* UIProcess/API/APIResourceLoadInfo.h:
* UIProcess/API/Cocoa/_WKResourceLoadInfo.h:
* UIProcess/API/Cocoa/_WKResourceLoadInfo.mm:
(toWKResourceLoadInfoResourceType):
(-[_WKResourceLoadInfo resourceType]):
(-[_WKResourceLoadInfo initWithCoder:]):
(-[_WKResourceLoadInfo encodeWithCoder:]):

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
(TEST):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (258016 => 258017)


--- trunk/Source/WebCore/ChangeLog	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Source/WebCore/ChangeLog	2020-03-06 20:25:25 UTC (rev 258017)
@@ -1,3 +1,18 @@
+2020-03-06  David Quesada  <david_ques...@apple.com>
+
+        Add _WKResourceLoadInfo.resourceType SPI
+        https://bugs.webkit.org/show_bug.cgi?id=208723
+
+        Reviewed by Alex Christensen.
+
+        Covered by API tests.
+
+        * Modules/beacon/NavigatorBeacon.cpp:
+        (WebCore::NavigatorBeacon::sendBeacon):
+        * loader/PingLoader.cpp:
+        (WebCore::PingLoader::sendPing):
+        * platform/network/ResourceRequestBase.h:
+
 2020-03-06  Youenn Fablet  <you...@apple.com>
 
         Add support for NowPlaying commands in GPUProcess

Modified: trunk/Source/WebCore/Modules/beacon/NavigatorBeacon.cpp (258016 => 258017)


--- trunk/Source/WebCore/Modules/beacon/NavigatorBeacon.cpp	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Source/WebCore/Modules/beacon/NavigatorBeacon.cpp	2020-03-06 20:25:25 UTC (rev 258017)
@@ -121,6 +121,7 @@
 
     ResourceRequest request(parsedUrl);
     request.setHTTPMethod("POST"_s);
+    request.setRequester(ResourceRequest::Requester::Beacon);
 
     ResourceLoaderOptions options;
     options.credentials = FetchOptions::Credentials::Include;

Modified: trunk/Source/WebCore/loader/PingLoader.cpp (258016 => 258017)


--- trunk/Source/WebCore/loader/PingLoader.cpp	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Source/WebCore/loader/PingLoader.cpp	2020-03-06 20:25:25 UTC (rev 258017)
@@ -119,6 +119,8 @@
         return;
 
     ResourceRequest request(pingURL);
+    request.setRequester(ResourceRequest::Requester::Ping);
+
 #if ENABLE(CONTENT_EXTENSIONS)
     if (processContentRuleListsForLoad(frame, request, { ContentExtensions::ResourceType::Raw, ContentExtensions::ResourceType::Ping }))
         return;

Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.h (258016 => 258017)


--- trunk/Source/WebCore/platform/network/ResourceRequestBase.h	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.h	2020-03-06 20:25:25 UTC (rev 258017)
@@ -164,7 +164,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 };
+    enum class Requester : uint8_t { Unspecified, Main, XHR, Fetch, Media, ImportScripts, Ping, Beacon };
     Requester requester() const { return m_requester; }
     void setRequester(Requester requester) { m_requester = requester; }
 

Modified: trunk/Source/WebKit/ChangeLog (258016 => 258017)


--- trunk/Source/WebKit/ChangeLog	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Source/WebKit/ChangeLog	2020-03-06 20:25:25 UTC (rev 258017)
@@ -1,3 +1,23 @@
+2020-03-06  David Quesada  <david_ques...@apple.com>
+
+        Add _WKResourceLoadInfo.resourceType SPI
+        https://bugs.webkit.org/show_bug.cgi?id=208723
+
+        Reviewed by Alex Christensen.
+
+        * NetworkProcess/NetworkResourceLoader.cpp:
+        (WebKit::NetworkResourceLoader::resourceLoadInfo):
+        * Shared/ResourceLoadInfo.h:
+        (WebKit::ResourceLoadInfo::encode const):
+        (WebKit::ResourceLoadInfo::decode):
+        * UIProcess/API/APIResourceLoadInfo.h:
+        * UIProcess/API/Cocoa/_WKResourceLoadInfo.h:
+        * UIProcess/API/Cocoa/_WKResourceLoadInfo.mm:
+        (toWKResourceLoadInfoResourceType):
+        (-[_WKResourceLoadInfo resourceType]):
+        (-[_WKResourceLoadInfo initWithCoder:]):
+        (-[_WKResourceLoadInfo encodeWithCoder:]):
+
 2020-03-06  Youenn Fablet  <you...@apple.com>
 
         Add support for NowPlaying commands in GPUProcess

Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (258016 => 258017)


--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp	2020-03-06 20:25:25 UTC (rev 258017)
@@ -359,7 +359,62 @@
         }
         return false;
     };
-    
+
+    auto resourceType = [] (WebCore::ResourceRequestBase::Requester requester, WebCore::FetchOptions::Destination destination) {
+        switch (requester) {
+        case WebCore::ResourceRequestBase::Requester::XHR:
+            return ResourceLoadInfo::Type::XMLHTTPRequest;
+        case WebCore::ResourceRequestBase::Requester::Fetch:
+            return ResourceLoadInfo::Type::Fetch;
+        case WebCore::ResourceRequestBase::Requester::Ping:
+            return ResourceLoadInfo::Type::Ping;
+        case WebCore::ResourceRequestBase::Requester::Beacon:
+            return ResourceLoadInfo::Type::Beacon;
+        default:
+            break;
+        }
+
+        switch (destination) {
+        case WebCore::FetchOptions::Destination::EmptyString:
+            return ResourceLoadInfo::Type::Other;
+        case WebCore::FetchOptions::Destination::Audio:
+            return ResourceLoadInfo::Type::Media;
+        case WebCore::FetchOptions::Destination::Document:
+            return ResourceLoadInfo::Type::Document;
+        case WebCore::FetchOptions::Destination::Embed:
+            return ResourceLoadInfo::Type::Object;
+        case WebCore::FetchOptions::Destination::Font:
+            return ResourceLoadInfo::Type::Font;
+        case WebCore::FetchOptions::Destination::Image:
+            return ResourceLoadInfo::Type::Image;
+        case WebCore::FetchOptions::Destination::Manifest:
+            return ResourceLoadInfo::Type::ApplicationManifest;
+        case WebCore::FetchOptions::Destination::Object:
+            return ResourceLoadInfo::Type::Object;
+        case WebCore::FetchOptions::Destination::Report:
+            return ResourceLoadInfo::Type::CSPReport;
+        case WebCore::FetchOptions::Destination::Script:
+            return ResourceLoadInfo::Type::Script;
+        case WebCore::FetchOptions::Destination::Serviceworker:
+            return ResourceLoadInfo::Type::Other;
+        case WebCore::FetchOptions::Destination::Sharedworker:
+            return ResourceLoadInfo::Type::Other;
+        case WebCore::FetchOptions::Destination::Style:
+            return ResourceLoadInfo::Type::Stylesheet;
+        case WebCore::FetchOptions::Destination::Track:
+            return ResourceLoadInfo::Type::Media;
+        case WebCore::FetchOptions::Destination::Video:
+            return ResourceLoadInfo::Type::Media;
+        case WebCore::FetchOptions::Destination::Worker:
+            return ResourceLoadInfo::Type::Other;
+        case WebCore::FetchOptions::Destination::Xslt:
+            return ResourceLoadInfo::Type::XSLT;
+        }
+
+        ASSERT_NOT_REACHED();
+        return ResourceLoadInfo::Type::Other;
+    };
+
     return ResourceLoadInfo {
         m_resourceLoadID,
         m_parameters.webFrameID,
@@ -367,7 +422,8 @@
         originalRequest().url(),
         originalRequest().httpMethod(),
         WallTime::now(),
-        loadedFromCache(m_response)
+        loadedFromCache(m_response),
+        resourceType(originalRequest().requester(), m_parameters.options.destination)
     };
 }
 

Modified: trunk/Source/WebKit/Shared/ResourceLoadInfo.h (258016 => 258017)


--- trunk/Source/WebKit/Shared/ResourceLoadInfo.h	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Source/WebKit/Shared/ResourceLoadInfo.h	2020-03-06 20:25:25 UTC (rev 258017)
@@ -35,6 +35,24 @@
 
 struct ResourceLoadInfo {
 
+    enum class Type : uint8_t {
+        ApplicationManifest,
+        Beacon,
+        CSPReport,
+        Document,
+        Fetch,
+        Font,
+        Image,
+        Media,
+        Object,
+        Other,
+        Ping,
+        Script,
+        Stylesheet,
+        XMLHTTPRequest,
+        XSLT
+    };
+    
     NetworkResourceLoadIdentifier resourceLoadID;
     Optional<WebCore::FrameIdentifier> frameID;
     Optional<WebCore::FrameIdentifier> parentFrameID;
@@ -42,7 +60,8 @@
     String originalHTTPMethod;
     WallTime eventTimestamp;
     bool loadedFromCache { false };
-    
+    Type type { Type::Other };
+
     void encode(IPC::Encoder& encoder) const
     {
         encoder << resourceLoadID;
@@ -52,6 +71,7 @@
         encoder << originalHTTPMethod;
         encoder << eventTimestamp;
         encoder << loadedFromCache;
+        encoder << type;
     }
 
     static Optional<ResourceLoadInfo> decode(IPC::Decoder& decoder)
@@ -91,6 +111,11 @@
         if (!loadedFromCache)
             return WTF::nullopt;
 
+        Optional<Type> type;
+        decoder >> type;
+        if (!type)
+            return WTF::nullopt;
+
         return {{
             WTFMove(*resourceLoadID),
             WTFMove(*frameID),
@@ -99,8 +124,34 @@
             WTFMove(*originalHTTPMethod),
             WTFMove(*eventTimestamp),
             WTFMove(*loadedFromCache),
+            WTFMove(*type),
         }};
     }
 };
 
 } // namespace WebKit
+
+namespace WTF {
+
+template<> struct EnumTraits<WebKit::ResourceLoadInfo::Type> {
+    using values = EnumValues<
+        WebKit::ResourceLoadInfo::Type,
+        WebKit::ResourceLoadInfo::Type::ApplicationManifest,
+        WebKit::ResourceLoadInfo::Type::Beacon,
+        WebKit::ResourceLoadInfo::Type::CSPReport,
+        WebKit::ResourceLoadInfo::Type::Document,
+        WebKit::ResourceLoadInfo::Type::Fetch,
+        WebKit::ResourceLoadInfo::Type::Font,
+        WebKit::ResourceLoadInfo::Type::Image,
+        WebKit::ResourceLoadInfo::Type::Media,
+        WebKit::ResourceLoadInfo::Type::Object,
+        WebKit::ResourceLoadInfo::Type::Other,
+        WebKit::ResourceLoadInfo::Type::Ping,
+        WebKit::ResourceLoadInfo::Type::Script,
+        WebKit::ResourceLoadInfo::Type::Stylesheet,
+        WebKit::ResourceLoadInfo::Type::XMLHTTPRequest,
+        WebKit::ResourceLoadInfo::Type::XSLT
+    >;
+};
+
+} // namespace WTF

Modified: trunk/Source/WebKit/UIProcess/API/APIResourceLoadInfo.h (258016 => 258017)


--- trunk/Source/WebKit/UIProcess/API/APIResourceLoadInfo.h	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Source/WebKit/UIProcess/API/APIResourceLoadInfo.h	2020-03-06 20:25:25 UTC (rev 258017)
@@ -47,6 +47,7 @@
     const WTF::String& originalHTTPMethod() const { return m_info.originalHTTPMethod; }
     WallTime eventTimestamp() const { return m_info.eventTimestamp; }
     bool loadedFromCache() const { return m_info.loadedFromCache; }
+    WebKit::ResourceLoadInfo::Type resourceLoadType() const { return m_info.type; }
 
 private:
     const WebKit::ResourceLoadInfo m_info;

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadInfo.h (258016 => 258017)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadInfo.h	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadInfo.h	2020-03-06 20:25:25 UTC (rev 258017)
@@ -29,6 +29,24 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
+typedef NS_ENUM(NSInteger, _WKResourceLoadInfoResourceType) {
+    _WKResourceLoadInfoResourceTypeApplicationManifest,
+    _WKResourceLoadInfoResourceTypeBeacon,
+    _WKResourceLoadInfoResourceTypeCSPReport,
+    _WKResourceLoadInfoResourceTypeDocument,
+    _WKResourceLoadInfoResourceTypeImage,
+    _WKResourceLoadInfoResourceTypeFetch,
+    _WKResourceLoadInfoResourceTypeFont,
+    _WKResourceLoadInfoResourceTypeMedia,
+    _WKResourceLoadInfoResourceTypeObject,
+    _WKResourceLoadInfoResourceTypePing,
+    _WKResourceLoadInfoResourceTypeScript,
+    _WKResourceLoadInfoResourceTypeStylesheet,
+    _WKResourceLoadInfoResourceTypeXMLHTTPRequest,
+    _WKResourceLoadInfoResourceTypeXSLT,
+    _WKResourceLoadInfoResourceTypeOther = -1,
+};
+
 WK_CLASS_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA))
 @interface _WKResourceLoadInfo : NSObject <NSSecureCoding>
 
@@ -42,6 +60,7 @@
 @property (nonatomic, readonly) NSString *originalHTTPMethod;
 @property (nonatomic, readonly) NSDate *eventTimestamp;
 @property (nonatomic, readonly) BOOL loadedFromCache;
+@property (nonatomic, readonly) _WKResourceLoadInfoResourceType resourceType;
 
 @end
 

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadInfo.mm (258016 => 258017)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadInfo.mm	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadInfo.mm	2020-03-06 20:25:25 UTC (rev 258017)
@@ -32,6 +32,47 @@
 #import "_WKFrameHandleInternal.h"
 #import "_WKResourceLoadInfoInternal.h"
 
+static _WKResourceLoadInfoResourceType toWKResourceLoadInfoResourceType(WebKit::ResourceLoadInfo::Type type)
+{
+    using namespace WebKit;
+    switch (type) {
+    case ResourceLoadInfo::Type::ApplicationManifest:
+        return _WKResourceLoadInfoResourceTypeApplicationManifest;
+    case ResourceLoadInfo::Type::Beacon:
+        return _WKResourceLoadInfoResourceTypeBeacon;
+    case ResourceLoadInfo::Type::CSPReport:
+        return _WKResourceLoadInfoResourceTypeCSPReport;
+    case ResourceLoadInfo::Type::Document:
+        return _WKResourceLoadInfoResourceTypeDocument;
+    case ResourceLoadInfo::Type::Fetch:
+        return _WKResourceLoadInfoResourceTypeFetch;
+    case ResourceLoadInfo::Type::Font:
+        return _WKResourceLoadInfoResourceTypeFont;
+    case ResourceLoadInfo::Type::Image:
+        return _WKResourceLoadInfoResourceTypeImage;
+    case ResourceLoadInfo::Type::Media:
+        return _WKResourceLoadInfoResourceTypeMedia;
+    case ResourceLoadInfo::Type::Object:
+        return _WKResourceLoadInfoResourceTypeObject;
+    case ResourceLoadInfo::Type::Other:
+        return _WKResourceLoadInfoResourceTypeOther;
+    case ResourceLoadInfo::Type::Ping:
+        return _WKResourceLoadInfoResourceTypePing;
+    case ResourceLoadInfo::Type::Script:
+        return _WKResourceLoadInfoResourceTypeScript;
+    case ResourceLoadInfo::Type::Stylesheet:
+        return _WKResourceLoadInfoResourceTypeStylesheet;
+    case ResourceLoadInfo::Type::XMLHTTPRequest:
+        return _WKResourceLoadInfoResourceTypeXMLHTTPRequest;
+    case ResourceLoadInfo::Type::XSLT:
+        return _WKResourceLoadInfoResourceTypeXSLT;
+    }
+    
+    ASSERT_NOT_REACHED();
+    return _WKResourceLoadInfoResourceTypeOther;
+}
+
+
 @implementation _WKResourceLoadInfo
 
 - (void)dealloc
@@ -79,6 +120,11 @@
     return _info->loadedFromCache();
 }
 
+- (_WKResourceLoadInfoResourceType)resourceType
+{
+    return toWKResourceLoadInfoResourceType(_info->resourceLoadType());
+}
+
 - (API::Object&)_apiObject
 {
     return *_info;
@@ -136,6 +182,12 @@
         return nil;
     }
 
+    NSNumber *type = [coder decodeObjectOfClass:[NSNumber class] forKey:@"type"];
+    if (!type) {
+        [self release];
+        return nil;
+    }
+
     WebKit::ResourceLoadInfo info {
         makeObjectIdentifier<WebKit::NetworkResourceLoadIdentifierType>(resourceLoadID.unsignedLongLongValue),
         makeObjectIdentifier<WebCore::FrameIdentifierType>(frame.unsignedLongLongValue),
@@ -143,7 +195,8 @@
         originalURL,
         originalHTTPMethod,
         WallTime::fromRawSeconds(eventTimestamp.timeIntervalSince1970),
-        static_cast<bool>(loadedFromCache.boolValue)
+        static_cast<bool>(loadedFromCache.boolValue),
+        static_cast<WebKit::ResourceLoadInfo::Type>(type.unsignedCharValue),
     };
 
     API::Object::constructInWrapper<API::ResourceLoadInfo>(self, WTFMove(info));
@@ -160,6 +213,7 @@
     [coder encodeObject:self.originalHTTPMethod forKey:@"originalHTTPMethod"];
     [coder encodeObject:self.eventTimestamp forKey:@"eventTimestamp"];
     [coder encodeObject:@(self.loadedFromCache) forKey:@"loadedFromCache"];
+    [coder encodeObject:@(static_cast<unsigned char>(_info->resourceLoadType())) forKey:@"type"];
 }
 
 @end

Modified: trunk/Tools/ChangeLog (258016 => 258017)


--- trunk/Tools/ChangeLog	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Tools/ChangeLog	2020-03-06 20:25:25 UTC (rev 258017)
@@ -1,3 +1,13 @@
+2020-03-06  David Quesada  <david_ques...@apple.com>
+
+        Add _WKResourceLoadInfo.resourceType SPI
+        https://bugs.webkit.org/show_bug.cgi?id=208723
+
+        Reviewed by Alex Christensen.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm:
+        (TEST):
+
 2020-03-06  Jonathan Bedard  <jbed...@apple.com>
 
         Stop reporting to webkit-test-results.webkit.org

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm (258016 => 258017)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm	2020-03-06 20:24:05 UTC (rev 258016)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadDelegate.mm	2020-03-06 20:25:25 UTC (rev 258017)
@@ -199,6 +199,73 @@
     TestWebKitAPI::Util::run(&done);
 }
 
+TEST(ResourceLoadDelegate, ResourceType)
+{
+    const char* testJS = R"TESTJS(
+    function loadMoreThingsAfterFetchAndXHR() {
+        navigator.sendBeacon('beaconTarget');
+
+        var img = document.createElement('img');
+        img.src = '';
+        document.body.appendChild(img);
+
+        var style = document.createElement('link');
+        style.rel = 'stylesheet';
+        style.type = 'text/css';
+        style.href = '';
+        document.head.appendChild(style);
+    }
+    fetch('fetchTarget', { body: 'a=b&c=d', method: 'post'}).then(()=>{
+        var xhr = new XMLHttpRequest();
+        xhr._onreadystatechange_ = function () {
+            if (this.readyState == 4)
+                loadMoreThingsAfterFetchAndXHR();
+        };
+        xhr.open('GET', 'xhrTarget');
+        xhr.send();
+    })
+    )TESTJS";
+    TestWebKitAPI::HTTPServer server({
+        { "/", { "<script src=''></script><div>text needing a font</div>" } },
+        { "/scriptSrc", { {{ "Content-Type", "application/_javascript_" }}, testJS } },
+        { "/fetchTarget", { "hi" } },
+        { "/xhrTarget", { {{ "Content-Type", "application/octet-stream" }}, "hi" } },
+        { "/beaconTarget", { "hi" } },
+        { "/imageSource", { "not really an image" } },
+        { "/styleSource", { "@font-face { font-family: TestFontFamily; src: url(fontSource) } div { font-family: TestFontFamily }" } },
+        { "/fontSource", { "not really a font" } },
+    });
+
+    __block Vector<RetainPtr<_WKResourceLoadInfo>> loadInfos;
+
+    __block size_t requestCount = 0;
+    auto delegate = adoptNS([TestResourceLoadDelegate new]);
+    [delegate setDidSendRequest:^(WKWebView *webView, _WKResourceLoadInfo *loadInfo, NSURLRequest *request) {
+        loadInfos.append(loadInfo);
+        requestCount++;
+    }];
+
+    auto webView = adoptNS([WKWebView new]);
+    [webView _setResourceLoadDelegate:delegate.get()];
+    [webView loadRequest:server.request()];
+
+    Vector<_WKResourceLoadInfoResourceType> expectedTypes {
+        _WKResourceLoadInfoResourceTypeDocument,
+        _WKResourceLoadInfoResourceTypeScript,
+        _WKResourceLoadInfoResourceTypeFetch,
+        _WKResourceLoadInfoResourceTypeXMLHTTPRequest,
+        _WKResourceLoadInfoResourceTypeBeacon,
+        _WKResourceLoadInfoResourceTypeImage,
+        _WKResourceLoadInfoResourceTypeStylesheet,
+        _WKResourceLoadInfoResourceTypeFont,
+    };
+
+    while (requestCount < expectedTypes.size())
+        TestWebKitAPI::Util::spinRunLoop();
+    for (size_t i = 0; i < expectedTypes.size(); ++i)
+        EXPECT_EQ(loadInfos[i].get().resourceType, expectedTypes[i]);
+}
+
 TEST(ResourceLoadDelegate, LoadInfo)
 {
     TestWebKitAPI::HTTPServer server({
@@ -274,12 +341,13 @@
     EXPECT_EQ(loadInfos[6].get().resourceLoadID, loadInfos[7].get().resourceLoadID);
     EXPECT_EQ(loadInfos[6].get().resourceLoadID, loadInfos[8].get().resourceLoadID);
     EXPECT_NE(loadInfos[6].get().resourceLoadID, loadInfos[0].get().resourceLoadID);
-    auto checkFrames = ^(size_t index, _WKFrameHandle *expectedFrame, _WKFrameHandle *expectedParent) {
+    auto checkFrames = ^(size_t index, _WKFrameHandle *expectedFrame, _WKFrameHandle *expectedParent, _WKResourceLoadInfoResourceType expectedType) {
         _WKResourceLoadInfo *info = loadInfos[index].get();
         EXPECT_EQ(!!info.frame, !!expectedFrame);
         EXPECT_EQ(!!info.parentFrame, !!expectedParent);
         EXPECT_EQ(info.frame.frameID, expectedFrame.frameID);
         EXPECT_EQ(info.parentFrame.frameID, expectedParent.frameID);
+        EXPECT_EQ(info.resourceType, expectedType);
     };
     _WKFrameHandle *main = loadInfos[0].get().frame;
     _WKFrameHandle *sub = loadInfos[8].get().frame;
@@ -286,15 +354,15 @@
     EXPECT_TRUE(!!main);
     EXPECT_TRUE(!!sub);
     EXPECT_TRUE(main.frameID != sub.frameID);
-    checkFrames(0, main, nil);
-    checkFrames(1, main, nil);
-    checkFrames(2, main, nil);
-    checkFrames(3, sub, main);
-    checkFrames(4, sub, main);
-    checkFrames(5, sub, main);
-    checkFrames(6, sub, main);
-    checkFrames(7, sub, main);
-    checkFrames(8, sub, main);
+    checkFrames(0, main, nil, _WKResourceLoadInfoResourceTypeDocument);
+    checkFrames(1, main, nil, _WKResourceLoadInfoResourceTypeDocument);
+    checkFrames(2, main, nil, _WKResourceLoadInfoResourceTypeDocument);
+    checkFrames(3, sub, main, _WKResourceLoadInfoResourceTypeDocument);
+    checkFrames(4, sub, main, _WKResourceLoadInfoResourceTypeDocument);
+    checkFrames(5, sub, main, _WKResourceLoadInfoResourceTypeDocument);
+    checkFrames(6, sub, main, _WKResourceLoadInfoResourceTypeFetch);
+    checkFrames(7, sub, main, _WKResourceLoadInfoResourceTypeFetch);
+    checkFrames(8, sub, main, _WKResourceLoadInfoResourceTypeFetch);
 
     EXPECT_EQ(otherParameters.size(), 12ull);
     EXPECT_WK_STREQ(NSStringFromClass([otherParameters[0] class]), "NSMutableURLRequest");
@@ -325,7 +393,7 @@
     _WKResourceLoadInfo *original = loadInfos[0].get();
     NSError *error = nil;
     NSData *archiveData = [NSKeyedArchiver archivedDataWithRootObject:original requiringSecureCoding:YES error:&error];
-    EXPECT_EQ(archiveData.length, 589ull);
+    EXPECT_EQ(archiveData.length, 607ull);
     EXPECT_FALSE(error);
     _WKResourceLoadInfo *deserialized = [NSKeyedUnarchiver unarchivedObjectOfClass:[_WKResourceLoadInfo class] fromData:archiveData error:&error];
     EXPECT_FALSE(error);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to