| Differences between
and this patch
- a/Source/WebCore/ChangeLog +15 lines
Lines 1-3 a/Source/WebCore/ChangeLog_sec1
1
2019-08-21  Rob Buis  <rbuis@igalia.com>
2
3
        Cross-origin prefetches should be reused for top-level navigations
4
        https://bugs.webkit.org/show_bug.cgi?id=199162
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Add isPrefetch helper.
9
10
        Test: http/wpt/prefetch/navigate-reuse-prefetch.html
11
12
        * platform/network/ResourceRequestBase.cpp:
13
        (WebCore::ResourceRequestBase::isPrefetch const):
14
        * platform/network/ResourceRequestBase.h:
15
1
2019-08-21  Jer Noble  <jer.noble@apple.com>
16
2019-08-21  Jer Noble  <jer.noble@apple.com>
2
17
3
        [iOS] HLS streams disappear from Now Playing when paused on the lock screen
18
        [iOS] HLS streams disappear from Now Playing when paused on the lock screen
- a/Source/WebKit/ChangeLog +31 lines
Lines 1-3 a/Source/WebKit/ChangeLog_sec1
1
2019-08-22  Rob Buis  <rbuis@igalia.com>
2
3
        Cross-origin prefetches should be reused for top-level navigations
4
        https://bugs.webkit.org/show_bug.cgi?id=199162
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        On navigation, pending loaders are stopped. However pending prefetches
9
        could be fetching the same url the navigation wants. In that case, do
10
        not stop the prefetch load but instead, upon finishing it, use it to
11
        perform the navigation.
12
13
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
14
        (WebKit::NetworkConnectionToWebProcess::didCleanupResourceLoader):
15
        (WebKit::NetworkConnectionToWebProcess::transferOngoingCrossOriginPrefetchLoad):
16
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
17
        (WebKit::NetworkConnectionToWebProcess::prefetchFinished):
18
        * NetworkProcess/NetworkConnectionToWebProcess.h:
19
        * NetworkProcess/NetworkResourceLoader.cpp:
20
        (WebKit::NetworkResourceLoader::abort):
21
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
22
        (WebKit::NetworkResourceLoader::isCrossOriginPrefetch const):
23
        * NetworkProcess/NetworkResourceLoader.h:
24
        * NetworkProcess/NetworkSession.cpp:
25
        (WebKit::NetworkSession::hasOngoingCrossOriginPrefetch const):
26
        (WebKit::NetworkSession::addOngoingCrossOriginPrefetchLoad):
27
        (WebKit::NetworkSession::removeOngoingCrossOriginPrefetchLoad):
28
        (WebKit::NetworkSession::addPendingNavigation):
29
        (WebKit::NetworkSession::takePendingNavigation):
30
        * NetworkProcess/NetworkSession.h:
31
1
2019-08-21  Russell Epstein  <repstein@apple.com>
32
2019-08-21  Russell Epstein  <repstein@apple.com>
2
33
3
        Unreviewed, rolling out r248942.
34
        Unreviewed, rolling out r248942.
- a/Source/WebCore/platform/network/ResourceRequestBase.cpp +5 lines
Lines 270-275 void ResourceRequestBase::setIsTopSite(bool isTopSite) a/Source/WebCore/platform/network/ResourceRequestBase.cpp_sec1
270
    m_platformRequestUpdated = false;
270
    m_platformRequestUpdated = false;
271
}
271
}
272
272
273
bool ResourceRequestBase::isPrefetch() const
274
{
275
    return httpHeaderField(HTTPHeaderName::Purpose) == "prefetch";
276
}
277
273
const String& ResourceRequestBase::httpMethod() const
278
const String& ResourceRequestBase::httpMethod() const
274
{
279
{
275
    updateResourceRequest(); 
280
    updateResourceRequest(); 
- a/Source/WebCore/platform/network/ResourceRequestBase.h +2 lines
Lines 90-95 public: a/Source/WebCore/platform/network/ResourceRequestBase.h_sec1
90
    WEBCORE_EXPORT bool isTopSite() const; // Whether this request is for a top-level navigation.
90
    WEBCORE_EXPORT bool isTopSite() const; // Whether this request is for a top-level navigation.
91
    WEBCORE_EXPORT void setIsTopSite(bool);
91
    WEBCORE_EXPORT void setIsTopSite(bool);
92
92
93
    WEBCORE_EXPORT bool isPrefetch() const;
94
93
    WEBCORE_EXPORT const String& httpMethod() const;
95
    WEBCORE_EXPORT const String& httpMethod() const;
94
    WEBCORE_EXPORT void setHTTPMethod(const String& httpMethod);
96
    WEBCORE_EXPORT void setHTTPMethod(const String& httpMethod);
95
    
97
    
- a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp +38 lines
Lines 120-125 void NetworkConnectionToWebProcess::didCleanupResourceLoader(NetworkResourceLoad a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp_sec1
120
        return;
120
        return;
121
    }
121
    }
122
122
123
    if (loader.isOngoingCrossOriginPrefetchLoad()) {
124
        if (auto* session = networkProcess().networkSession(loader.sessionID()))
125
            session->removeOngoingCrossOriginPrefetchLoad(loader);
126
        return;
127
    }
128
123
    ASSERT(m_networkResourceLoaders.get(loader.identifier()) == &loader);
129
    ASSERT(m_networkResourceLoaders.get(loader.identifier()) == &loader);
124
    m_networkResourceLoaders.remove(loader.identifier());
130
    m_networkResourceLoaders.remove(loader.identifier());
125
}
131
}
Lines 133-138 void NetworkConnectionToWebProcess::transferKeptAliveLoad(NetworkResourceLoader& a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp_sec2
133
        m_networkProcess->addKeptAliveLoad(takenLoader.releaseNonNull());
139
        m_networkProcess->addKeptAliveLoad(takenLoader.releaseNonNull());
134
}
140
}
135
141
142
void NetworkConnectionToWebProcess::transferOngoingCrossOriginPrefetchLoad(NetworkResourceLoader& loader)
143
{
144
    RELEASE_ASSERT(RunLoop::isMain());
145
    ASSERT(m_networkResourceLoaders.get(loader.identifier()) == &loader);
146
    if (auto takenLoader = m_networkResourceLoaders.take(loader.identifier())) {
147
        if (auto* session = networkProcess().networkSession(loader.sessionID()))
148
            session->addOngoingCrossOriginPrefetchLoad(takenLoader.releaseNonNull());
149
    }
150
}
151
136
void NetworkConnectionToWebProcess::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
152
void NetworkConnectionToWebProcess::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
137
{
153
{
138
    if (decoder.messageReceiverName() == Messages::NetworkConnectionToWebProcess::messageReceiverName()) {
154
    if (decoder.messageReceiverName() == Messages::NetworkConnectionToWebProcess::messageReceiverName()) {
Lines 397-402 void NetworkConnectionToWebProcess::scheduleResourceLoad(NetworkResourceLoadPara a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp_sec3
397
    RELEASE_ASSERT(RunLoop::isMain());
413
    RELEASE_ASSERT(RunLoop::isMain());
398
    ASSERT(!m_networkResourceLoaders.contains(identifier));
414
    ASSERT(!m_networkResourceLoaders.contains(identifier));
399
415
416
    if (loadParameters.options.mode == FetchOptions::Mode::Navigate) {
417
        if (auto* session = networkProcess().networkSession(loadParameters.sessionID)) {
418
            const auto& url = loadParameters.request.url();
419
            if (session->hasOngoingCrossOriginPrefetch(url)) {
420
                session->addPendingNavigation(url, WTFMove(loadParameters));
421
                return;
422
            }
423
        }
424
    }
425
400
    auto loader = NetworkResourceLoader::create(WTFMove(loadParameters), *this);
426
    auto loader = NetworkResourceLoader::create(WTFMove(loadParameters), *this);
401
    m_networkResourceLoaders.add(identifier, loader.copyRef());
427
    m_networkResourceLoaders.add(identifier, loader.copyRef());
402
    loader->start();
428
    loader->start();
Lines 909-912 void NetworkConnectionToWebProcess::establishSWServerConnection(PAL::SessionID s a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp_sec4
909
}
935
}
910
#endif
936
#endif
911
937
938
void NetworkConnectionToWebProcess::prefetchFinished(PAL::SessionID sessionID, const URL& url, WebCore::ResourceResponse&& response, RefPtr<WebCore::SharedBuffer>&& buffer)
939
{
940
    if (auto* session = networkProcess().networkSession(sessionID)) {
941
        session->prefetchCache().store(url, WTFMove(response), WTFMove(buffer));
942
        if (auto loadParameters = session->takePendingNavigation(url)) {
943
            auto identifier = loadParameters->identifier;
944
            auto loader = NetworkResourceLoader::create(WTFMove(*loadParameters), *this);
945
            m_networkResourceLoaders.add(identifier, WTFMove(loader)).iterator->value->start();
946
        }
947
    }
948
}
949
912
} // namespace WebKit
950
} // namespace WebKit
- a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h +3 lines
Lines 88-93 public: a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h_sec1
88
88
89
    void didCleanupResourceLoader(NetworkResourceLoader&);
89
    void didCleanupResourceLoader(NetworkResourceLoader&);
90
    void transferKeptAliveLoad(NetworkResourceLoader&);
90
    void transferKeptAliveLoad(NetworkResourceLoader&);
91
    void transferOngoingCrossOriginPrefetchLoad(NetworkResourceLoader&);
91
    void setOnLineState(bool);
92
    void setOnLineState(bool);
92
93
93
    bool captureExtraNetworkLoadMetricsEnabled() const { return m_captureExtraNetworkLoadMetricsEnabled; }
94
    bool captureExtraNetworkLoadMetricsEnabled() const { return m_captureExtraNetworkLoadMetricsEnabled; }
Lines 143-148 public: a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h_sec2
143
144
144
    void removeSocketChannel(uint64_t identifier);
145
    void removeSocketChannel(uint64_t identifier);
145
146
147
    void prefetchFinished(PAL::SessionID, const URL&, WebCore::ResourceResponse&&, RefPtr<WebCore::SharedBuffer>&&);
148
146
private:
149
private:
147
    NetworkConnectionToWebProcess(NetworkProcess&, IPC::Connection::Identifier);
150
    NetworkConnectionToWebProcess(NetworkProcess&, IPC::Connection::Identifier);
148
151
- a/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h +4 lines
Lines 49-54 public: a/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h_sec1
49
    {
49
    {
50
    }
50
    }
51
51
52
    NetworkResourceLoadParameters()
53
        : NetworkLoadParameters(PAL::SessionID(WTF::HashTableEmptyValue))
54
    {
55
    }
52
    void encode(IPC::Encoder&) const;
56
    void encode(IPC::Encoder&) const;
53
    static Optional<NetworkResourceLoadParameters> decode(IPC::Decoder&);
57
    static Optional<NetworkResourceLoadParameters> decode(IPC::Decoder&);
54
58
- a/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp -5 / +13 lines
Lines 221-227 void NetworkResourceLoader::retrieveCacheEntry(const ResourceRequest& request) a/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp_sec1
221
        ASSERT(m_parameters.options.mode == FetchOptions::Mode::Navigate);
221
        ASSERT(m_parameters.options.mode == FetchOptions::Mode::Navigate);
222
        if (auto* session = m_connection->networkProcess().networkSession(sessionID())) {
222
        if (auto* session = m_connection->networkProcess().networkSession(sessionID())) {
223
            if (auto entry = session->prefetchCache().take(request.url())) {
223
            if (auto entry = session->prefetchCache().take(request.url())) {
224
                // FIXME: Deal with credentials (https://bugs.webkit.org/show_bug.cgi?id=200000)
225
                if (!entry->redirectRequest.isNull()) {
224
                if (!entry->redirectRequest.isNull()) {
226
                    auto cacheEntry = m_cache->makeRedirectEntry(request, entry->response, entry->redirectRequest);
225
                    auto cacheEntry = m_cache->makeRedirectEntry(request, entry->response, entry->redirectRequest);
227
                    retrieveCacheEntryInternal(WTFMove(cacheEntry), ResourceRequest { request });
226
                    retrieveCacheEntryInternal(WTFMove(cacheEntry), ResourceRequest { request });
Lines 370-375 void NetworkResourceLoader::abort() a/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp_sec2
370
        return;
369
        return;
371
    }
370
    }
372
371
372
    if (isCrossOriginPrefetch()) {
373
        m_connection->transferOngoingCrossOriginPrefetchLoad(*this);
374
        return;
375
    }
376
373
    if (m_networkLoad) {
377
    if (m_networkLoad) {
374
        if (canUseCache(m_networkLoad->currentRequest())) {
378
        if (canUseCache(m_networkLoad->currentRequest())) {
375
            // We might already have used data from this incomplete load. Ensure older versions don't remain in the cache after cancel.
379
            // We might already have used data from this incomplete load. Ensure older versions don't remain in the cache after cancel.
Lines 500-507 void NetworkResourceLoader::didReceiveResponse(ResourceResponse&& receivedRespon a/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp_sec3
500
        return completionHandler(PolicyAction::Use);
504
        return completionHandler(PolicyAction::Use);
501
    }
505
    }
502
506
503
    if (isCrossOriginPrefetch())
507
    if (isCrossOriginPrefetch()) {
508
        if (response.httpHeaderField(HTTPHeaderName::Vary).contains("Cookie")) {
509
            abort();
510
            return completionHandler(PolicyAction::Ignore);
511
        }
504
        return completionHandler(PolicyAction::Use);
512
        return completionHandler(PolicyAction::Use);
513
    }
505
514
506
    // We wait to receive message NetworkResourceLoader::ContinueDidReceiveResponse before continuing a load for
515
    // We wait to receive message NetworkResourceLoader::ContinueDidReceiveResponse before continuing a load for
507
    // a main resource because the embedding client must decide whether to allow the load.
516
    // a main resource because the embedding client must decide whether to allow the load.
Lines 837-844 void NetworkResourceLoader::tryStoreAsCacheEntry() a/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp_sec4
837
        return;
846
        return;
838
847
839
    if (isCrossOriginPrefetch()) {
848
    if (isCrossOriginPrefetch()) {
840
        if (auto* session = m_connection->networkProcess().networkSession(sessionID()))
849
        m_connection->prefetchFinished(sessionID(), m_networkLoad->currentRequest().url(), WTFMove(m_response), WTFMove(m_bufferedDataForCache));
841
            session->prefetchCache().store(m_networkLoad->currentRequest().url(), WTFMove(m_response), WTFMove(m_bufferedDataForCache));
842
        return;
850
        return;
843
    }
851
    }
844
    m_cache->store(m_networkLoad->currentRequest(), m_response, WTFMove(m_bufferedDataForCache), [loader = makeRef(*this)](auto& mappedBody) mutable {
852
    m_cache->store(m_networkLoad->currentRequest(), m_response, WTFMove(m_bufferedDataForCache), [loader = makeRef(*this)](auto& mappedBody) mutable {
Lines 1184-1190 void NetworkResourceLoader::logSlowCacheRetrieveIfNeeded(const NetworkCache::Cac a/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp_sec5
1184
bool NetworkResourceLoader::isCrossOriginPrefetch() const
1192
bool NetworkResourceLoader::isCrossOriginPrefetch() const
1185
{
1193
{
1186
    auto& request = originalRequest();
1194
    auto& request = originalRequest();
1187
    return request.httpHeaderField(HTTPHeaderName::Purpose) == "prefetch" && !m_parameters.sourceOrigin->canRequest(request.url());
1195
    return request.isPrefetch() && !m_parameters.sourceOrigin->canRequest(request.url());
1188
}
1196
}
1189
1197
1190
} // namespace WebKit
1198
} // namespace WebKit
- a/Source/WebKit/NetworkProcess/NetworkResourceLoader.h +4 lines
Lines 119-124 public: a/Source/WebKit/NetworkProcess/NetworkResourceLoader.h_sec1
119
119
120
    bool isKeptAlive() const { return m_isKeptAlive; }
120
    bool isKeptAlive() const { return m_isKeptAlive; }
121
121
122
    bool isOngoingCrossOriginPrefetchLoad() const { return m_ongoingCrossOriginPrefetchLoad; }
123
    void setIsOngoingCrossOriginPrefetchLoad() { m_ongoingCrossOriginPrefetchLoad = true; }
124
122
private:
125
private:
123
    NetworkResourceLoader(NetworkResourceLoadParameters&&, NetworkConnectionToWebProcess&, Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply&&);
126
    NetworkResourceLoader(NetworkResourceLoadParameters&&, NetworkConnectionToWebProcess&, Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply&&);
124
127
Lines 215-220 private: a/Source/WebKit/NetworkProcess/NetworkResourceLoader.h_sec2
215
    ResponseCompletionHandler m_responseCompletionHandler;
218
    ResponseCompletionHandler m_responseCompletionHandler;
216
    bool m_shouldCaptureExtraNetworkLoadMetrics { false };
219
    bool m_shouldCaptureExtraNetworkLoadMetrics { false };
217
    bool m_isKeptAlive { false };
220
    bool m_isKeptAlive { false };
221
    bool m_ongoingCrossOriginPrefetchLoad { false };
218
222
219
    Optional<NetworkActivityTracker> m_networkActivityTracker;
223
    Optional<NetworkActivityTracker> m_networkActivityTracker;
220
};
224
};
- a/Source/WebKit/NetworkProcess/NetworkSession.cpp +33 lines
Lines 246-249 std::unique_ptr<WebSocketTask> NetworkSession::createWebSocketTask(NetworkSocket a/Source/WebKit/NetworkProcess/NetworkSession.cpp_sec1
246
    return nullptr;
246
    return nullptr;
247
}
247
}
248
248
249
bool NetworkSession::hasOngoingCrossOriginPrefetch(const URL& url) const
250
{
251
    return m_ongoingCrossOriginPrefetchLoads.contains(url);
252
}
253
254
void NetworkSession::addOngoingCrossOriginPrefetchLoad(Ref<NetworkResourceLoader>&& loader)
255
{
256
    auto url = loader->originalRequest().url();
257
    loader->setIsOngoingCrossOriginPrefetchLoad();
258
    m_ongoingCrossOriginPrefetchLoads.add(url, WTFMove(loader));
259
}
260
261
void NetworkSession::removeOngoingCrossOriginPrefetchLoad(NetworkResourceLoader& loader)
262
{
263
    auto url = loader.originalRequest().url();
264
    m_ongoingCrossOriginPrefetchLoads.remove(url);
265
}
266
267
void NetworkSession::addPendingNavigation(const URL& url, NetworkResourceLoadParameters&& parameters)
268
{
269
    m_pendingNavigations.add(url, WTFMove(parameters));
270
}
271
272
Optional<NetworkResourceLoadParameters> NetworkSession::takePendingNavigation(const URL& url)
273
{
274
    auto navigation = m_pendingNavigations.find(url);
275
    if (navigation == m_pendingNavigations.end())
276
        return WTF::nullopt;
277
    auto value = navigation->value;
278
    m_pendingNavigations.remove(navigation);
279
    return value;
280
}
281
249
} // namespace WebKit
282
} // namespace WebKit
- a/Source/WebKit/NetworkProcess/NetworkSession.h +12 lines
Lines 50-55 namespace WebKit { a/Source/WebKit/NetworkProcess/NetworkSession.h_sec1
50
50
51
class AdClickAttributionManager;
51
class AdClickAttributionManager;
52
class NetworkDataTask;
52
class NetworkDataTask;
53
class NetworkResourceLoadParameters;
53
class NetworkProcess;
54
class NetworkProcess;
54
class NetworkResourceLoader;
55
class NetworkResourceLoader;
55
class NetworkSocketChannel;
56
class NetworkSocketChannel;
Lines 118-123 public: a/Source/WebKit/NetworkProcess/NetworkSession.h_sec2
118
119
119
    WebCore::BlobRegistryImpl& blobRegistry() { return m_blobRegistry; }
120
    WebCore::BlobRegistryImpl& blobRegistry() { return m_blobRegistry; }
120
121
122
    bool hasOngoingCrossOriginPrefetch(const URL&) const;
123
    void addOngoingCrossOriginPrefetchLoad(Ref<NetworkResourceLoader>&&);
124
    void removeOngoingCrossOriginPrefetchLoad(NetworkResourceLoader&);
125
126
    void addPendingNavigation(const URL&, NetworkResourceLoadParameters&&);
127
    Optional<NetworkResourceLoadParameters> takePendingNavigation(const URL&);
128
121
protected:
129
protected:
122
    NetworkSession(NetworkProcess&, const NetworkSessionCreationParameters&);
130
    NetworkSession(NetworkProcess&, const NetworkSessionCreationParameters&);
123
131
Lines 141-146 protected: a/Source/WebKit/NetworkProcess/NetworkSession.h_sec3
141
149
142
    HashSet<Ref<NetworkResourceLoader>> m_keptAliveLoads;
150
    HashSet<Ref<NetworkResourceLoader>> m_keptAliveLoads;
143
151
152
    HashMap<URL, Ref<NetworkResourceLoader>> m_ongoingCrossOriginPrefetchLoads;
153
154
    HashMap<URL, NetworkResourceLoadParameters> m_pendingNavigations;
155
144
    PrefetchCache m_prefetchCache;
156
    PrefetchCache m_prefetchCache;
145
157
146
#if !ASSERT_DISABLED
158
#if !ASSERT_DISABLED
- a/Source/WebKit/NetworkProcess/cache/PrefetchCache.cpp -1 / +3 lines
Lines 65-71 std::unique_ptr<PrefetchCache::Entry> PrefetchCache::take(const URL& url) a/Source/WebKit/NetworkProcess/cache/PrefetchCache.cpp_sec1
65
    m_sessionExpirationList.removeAllMatching([&url] (const auto& tuple) {
65
    m_sessionExpirationList.removeAllMatching([&url] (const auto& tuple) {
66
        return std::get<0>(tuple) == url;
66
        return std::get<0>(tuple) == url;
67
    });
67
    });
68
    return resources->take(url);
68
    auto entry = resources->take(url);
69
    ASSERT(!entry || !entry->response.httpHeaderField(WebCore::HTTPHeaderName::Vary).contains("Cookie"));
70
    return entry;
69
}
71
}
70
72
71
static const Seconds expirationTimeout { 5_s };
73
static const Seconds expirationTimeout { 5_s };
- a/LayoutTests/ChangeLog +17 lines
Lines 1-3 a/LayoutTests/ChangeLog_sec1
1
2019-08-22  Rob Buis  <rbuis@igalia.com>
2
3
        Cross-origin prefetches should be reused for top-level navigations
4
        https://bugs.webkit.org/show_bug.cgi?id=199162
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Add test navigate-reuse-prefetch.html.
9
10
        * http/wpt/prefetch/link-prefetch-main-resource-redirect.html:
11
        * http/wpt/prefetch/navigate-reuse-prefetch-expected.txt: Added.
12
        * http/wpt/prefetch/navigate-reuse-prefetch.html: Copied from LayoutTests/http/wpt/prefetch/link-prefetch-main-resource-redirect.html.
13
        * http/wpt/prefetch/resources/main-resource-no-prefetch.py: Added.
14
        (main):
15
        * http/wpt/prefetch/resources/navigate-redirect.sub.html: Renamed from LayoutTests/http/wpt/prefetch/resources/navigate.html.
16
        * http/wpt/prefetch/resources/navigate.sub.html: Added.
17
1
2019-08-21  Russell Epstein  <repstein@apple.com>
18
2019-08-21  Russell Epstein  <repstein@apple.com>
2
19
3
        Unreviewed, rolling out r248942.
20
        Unreviewed, rolling out r248942.
- a/LayoutTests/http/wpt/prefetch/link-prefetch-cross-origin-vary-cookie-expected.txt +3 lines
Line 0 a/LayoutTests/http/wpt/prefetch/link-prefetch-cross-origin-vary-cookie-expected.txt_sec1
1
2
PASS Verify that navigating to a prefetched main resource that sets Vary: Cookie does send cookies. 
3
- a/LayoutTests/http/wpt/prefetch/link-prefetch-cross-origin-vary-cookie.html +22 lines
Line 0 a/LayoutTests/http/wpt/prefetch/link-prefetch-cross-origin-vary-cookie.html_sec1
1
<!DOCTYPE html>
2
<meta charset="utf-8">
3
<script src="/resources/testharness.js"></script>
4
<script src="/resources/testharnessreport.js"></script>
5
<script>
6
7
const wait_for_message = () => {
8
  return new Promise((resolve, reject) => {
9
    window.addEventListener('message', e => {
10
      resolve(e);
11
    }, { once: true });
12
  });
13
};
14
15
promise_test(async function(t) {
16
  let url_from = "resources/navigate-cross-origin-vary-cookie.html";
17
  var w = window.open(url_from);
18
  let message = await wait_for_message();
19
  assert_equals(message.data, 'foo=bar');
20
  w.close();
21
}, 'Verify that navigating to a prefetched main resource that sets Vary: Cookie does send cookies.');
22
</script>
- a/LayoutTests/http/wpt/prefetch/link-prefetch-main-resource-redirect.html -1 / +1 lines
Lines 13-19 const wait_for_message = () => { a/LayoutTests/http/wpt/prefetch/link-prefetch-main-resource-redirect.html_sec1
13
};
13
};
14
14
15
promise_test(async function(t) {
15
promise_test(async function(t) {
16
  let url_from = "resources/navigate.html";
16
  let url_from = "resources/navigate-redirect.sub.html";
17
  var w = window.open(url_from);
17
  var w = window.open(url_from);
18
  let message = await wait_for_message();
18
  let message = await wait_for_message();
19
  assert_equals(message.data, '');
19
  assert_equals(message.data, '');
- a/LayoutTests/http/wpt/prefetch/navigate-reuse-prefetch-expected.txt +3 lines
Line 0 a/LayoutTests/http/wpt/prefetch/navigate-reuse-prefetch-expected.txt_sec1
1
2
PASS Test navigating to slow prefetch. 
3
- a/LayoutTests/http/wpt/prefetch/navigate-reuse-prefetch.html +22 lines
Line 0 a/LayoutTests/http/wpt/prefetch/navigate-reuse-prefetch.html_sec1
1
<!DOCTYPE html>
2
<meta charset="utf-8">
3
<script src="/resources/testharness.js"></script>
4
<script src="/resources/testharnessreport.js"></script>
5
<script>
6
7
const wait_for_message = () => {
8
  return new Promise((resolve, reject) => {
9
    window.addEventListener('message', e => {
10
      resolve(e);
11
    }, { once: true });
12
  });
13
};
14
15
promise_test(async function(t) {
16
  let url_from = "resources/navigate.sub.html";
17
  var w = window.open(url_from);
18
  let message = await wait_for_message();
19
  assert_equals(message.data, 'prefetch');
20
  w.close();
21
}, 'Test navigating to slow prefetch.');
22
</script>
- a/LayoutTests/http/wpt/prefetch/resources/main-resource-cross-origin-set-cookie.py +7 lines
Line 0 a/LayoutTests/http/wpt/prefetch/resources/main-resource-cross-origin-set-cookie.py_sec1
1
def main(request, response):
2
    headers = [("Content-Type", "text/html"), ("Set-Cookie", "foo=bar")]
3
4
    response.headers.set("Access-Control-Allow-Origin", "http://localhost:8800")
5
    response.headers.set("Access-Control-Allow-Credentials", "true")
6
7
    return headers, ""
- a/LayoutTests/http/wpt/prefetch/resources/main-resource-cross-origin-vary-cookie.py +15 lines
Line 0 a/LayoutTests/http/wpt/prefetch/resources/main-resource-cross-origin-vary-cookie.py_sec1
1
def main(request, response):
2
    headers = [("Content-Type", "text/html"), ("Vary", "Cookie")]
3
4
    document = """
5
<!DOCTYPE html>
6
<script>
7
  function test() {
8
    var result = '%(cookie)s';
9
    window.opener.postMessage(result, '*');
10
  }
11
</script>
12
<body onload="test()">
13
"""
14
15
    return headers, document % {'cookie': request.headers.get("Cookie", "") }
- a/LayoutTests/http/wpt/prefetch/resources/main-resource-no-prefetch.py +15 lines
Line 0 a/LayoutTests/http/wpt/prefetch/resources/main-resource-no-prefetch.py_sec1
1
import time
2
3
def main(request, response):
4
    headers = [("Content-Type", "text/html")]
5
    delay = float(request.GET.first("ms", 500)) / 1E3
6
    time.sleep(delay)
7
8
    document = """
9
<!DOCTYPE html>
10
<script>
11
  window.opener.postMessage('{result}', '*');
12
</script>
13
""".format(result=request.headers.get("purpose", ""))
14
15
    return headers, document
- a/LayoutTests/http/wpt/prefetch/resources/navigate-cross-origin-vary-cookie.html +20 lines
Line 0 a/LayoutTests/http/wpt/prefetch/resources/navigate-cross-origin-vary-cookie.html_sec1
1
<!DOCTYPE html>
2
<meta charset="utf-8">
3
<script src="/common/get-host-info.sub.js"></script>
4
<body onload="test()">
5
<script>
6
  if (window.testRunner)
7
    testRunner.setAlwaysAcceptCookies(true);
8
9
  async function test() {
10
    var link = document.createElement("link");
11
    link.rel = "prefetch";
12
    link.href = get_host_info().HTTP_REMOTE_ORIGIN + "/WebKit/prefetch/resources/main-resource-cross-origin-vary-cookie.py";
13
    document.body.appendChild(link);
14
15
    await fetch(get_host_info().HTTP_REMOTE_ORIGIN + "/WebKit/prefetch/resources/main-resource-cross-origin-set-cookie.py", { "credentials": "include" });
16
17
    window.location = get_host_info().HTTP_REMOTE_ORIGIN + "/WebKit/prefetch/resources/main-resource-cross-origin-vary-cookie.py";
18
  }
19
</script>
20
</body>
- a/LayoutTests/http/wpt/prefetch/resources/navigate-redirect.sub.html +12 lines
Line 0 a/LayoutTests/http/wpt/prefetch/resources/navigate-redirect.sub.html_sec1
1
<!DOCTYPE html>
2
<meta charset="utf-8">
3
<script src="/common/get-host-info.sub.js"></script>
4
<body>
5
<script>
6
  var link = document.createElement("link");
7
  link.rel = "prefetch";
8
  link.href = get_host_info().HTTP_REMOTE_ORIGIN + "/WebKit/prefetch/resources/prefetched-main-resource-redirect.py";
9
  document.body.appendChild(link);
10
  internals.addPrefetchLoadEventListener(link, () => { window.location = get_host_info().HTTP_REMOTE_ORIGIN + "/WebKit/prefetch/resources/prefetched-main-resource-redirect.py" });
11
</script>
12
</body>
- a/LayoutTests/http/wpt/prefetch/resources/navigate.html -14 lines
Lines 1-14 a/LayoutTests/http/wpt/prefetch/resources/navigate.html_sec1
1
<!DOCTYPE html>
2
<meta charset="utf-8">
3
<script src="/common/get-host-info.sub.js"></script>
4
<body>
5
<script>
6
  var link = document.createElement("link");
7
  link.rel = "prefetch";
8
  link.href = get_host_info().HTTP_REMOTE_ORIGIN + "/WebKit/prefetch/resources/prefetched-main-resource-redirect.py";
9
  link.onload = function() {
10
    window.location = get_host_info().HTTP_REMOTE_ORIGIN + "/WebKit/prefetch/resources/prefetched-main-resource-redirect.py";
11
  };
12
  document.body.appendChild(link);
13
</script>
14
</body>
- a/LayoutTests/http/wpt/prefetch/resources/navigate.sub.html +11 lines
Line 0 a/LayoutTests/http/wpt/prefetch/resources/navigate.sub.html_sec1
1
<!DOCTYPE html>
2
<meta charset="utf-8">
3
<body>
4
<script>
5
  var link = document.createElement("link");
6
  link.rel = "prefetch";
7
  link.href = "http://{{hosts[alt][]}}:{{ports[http][0]}}/WebKit/prefetch/resources/main-resource-no-prefetch.py?ms=2000";
8
  document.body.appendChild(link);
9
  internals.addPrefetchLoadEventListener(link, () => { window.location = "http://{{hosts[alt][]}}:{{ports[http][0]}}/WebKit/prefetch/resources/main-resource-no-prefetch.py?ms=2000" });
10
</script>
11
</body>
- a/LayoutTests/platform/mac-wk1/TestExpectations -5 / +2 lines
Lines 736-746 webkit.org/b/196915 [ Debug ] inspector/timeline/timeline-recording.html [ Pass a/LayoutTests/platform/mac-wk1/TestExpectations_sec1
736
webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource.html [ Skip ]
736
webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource.html [ Skip ]
737
webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource-iframe.html [ Skip ]
737
webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource-iframe.html [ Skip ]
738
738
739
webkit.org/b/197371 http/wpt/prefetch/link-prefetch-main-resource-redirect.html [ Skip ]
739
# prefetch not supported in WK1
740
webkit.org/b/199499 http/wpt/prefetch/link-prefetch-skip-disk-cache.html [ Skip ]
740
http/wpt/prefetch [ Skip ]
741
742
webkit.org/b/199632 http/wpt/prefetch/beforeload.html [ Skip ]
743
webkit.org/b/199632 http/wpt/prefetch/beforeload-dynamic.html [ Skip ]
744
741
745
webkit.org/b/198177 pointerevents/mouse/compatibility-mouse-events-prevention-mouse-pressed.html [ Skip ]
742
webkit.org/b/198177 pointerevents/mouse/compatibility-mouse-events-prevention-mouse-pressed.html [ Skip ]
746
743
- a/LayoutTests/platform/win/TestExpectations -5 / +2 lines
Lines 4422-4432 webkit.org/b/197310 fast/harness/render-tree-as-text-options.html [ Failure ] a/LayoutTests/platform/win/TestExpectations_sec1
4422
webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource.html [ Skip ]
4422
webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource.html [ Skip ]
4423
webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource-iframe.html [ Skip ]
4423
webkit.org/b/195623 http/tests/cache/link-prefetch-main-resource-iframe.html [ Skip ]
4424
4424
4425
webkit.org/b/197371 http/wpt/prefetch/link-prefetch-main-resource-redirect.html [ Skip ]
4425
# prefetch not supported in WK1
4426
webkit.org/b/199499 http/wpt/prefetch/link-prefetch-skip-disk-cache.html [ Skip ]
4426
http/wpt/prefetch [ Skip ]
4427
4428
webkit.org/b/199632 http/wpt/prefetch/beforeload.html [ Skip ]
4429
webkit.org/b/199632 http/wpt/prefetch/beforeload-dynamic.html [ Skip ]
4430
4427
4431
webkit.org/b/198112 http/tests/security/showModalDialog-sync-cross-origin-page-load2.html [ Skip ]
4428
webkit.org/b/198112 http/tests/security/showModalDialog-sync-cross-origin-page-load2.html [ Skip ]
4432
4429

Return to Bug 199162