WebKit Bugzilla
Attachment 360264 Details for
Bug 193213
: Fix Resource Timing buffer edge cases for WPT
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-193213-20190126222056.patch (text/plain), 37.17 KB, created by
cvazac
on 2019-01-26 20:20:59 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
cvazac
Created:
2019-01-26 20:20:59 PST
Size:
37.17 KB
patch
obsolete
>Subversion Revision: 240498 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 354ef06152994edd80b746eac4ec0a2d923278ed..7589af61c765a36b6fb3280d899ed4e7c15b3369 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,17 @@ >+2019-01-26 Charles Vazac <cvazac@akamai.com> >+ >+ Fix Resource Timing buffer edge cases for WPT >+ https://bugs.webkit.org/show_bug.cgi?id=193213 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Tests: imported/w3c/web-platform-tests/resource-timing/redirects.sub.html >+ imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content.html >+ imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content_redirect.html >+ >+ * page/Performance.cpp: >+ (WebCore::Performance::resourceTimingBufferFullTimerFired): Only dispatch the resourcetimingbufferfull event if the buffer is still full (as it may have been cleared or expanded). Also, avoid infinite loops if we aren't able to decrease the number of entries in the secondary buffer. >+ > 2019-01-25 Brent Fulgham <bfulgham@apple.com> > > Activate the WebResourceLoadStatisticsStore in the NetworkProcess and deactivate it in the UIProcess. >diff --git a/Source/WebCore/page/Performance.cpp b/Source/WebCore/page/Performance.cpp >index d51b26d880ec895d7d699edfbcaba2e65a8465a5..a1cada98368fae8dde4489b8634067432e6d1f23 100644 >--- a/Source/WebCore/page/Performance.cpp >+++ b/Source/WebCore/page/Performance.cpp >@@ -212,11 +212,15 @@ bool Performance::isResourceTimingBufferFull() const > void Performance::resourceTimingBufferFullTimerFired() > { > while (!m_backupResourceTimingBuffer.isEmpty()) { >+ auto beforeCount = m_backupResourceTimingBuffer.size(); >+ > auto backupBuffer = WTFMove(m_backupResourceTimingBuffer); > ASSERT(m_backupResourceTimingBuffer.isEmpty()); > >- m_resourceTimingBufferFullFlag = true; >- dispatchEvent(Event::create(eventNames().resourcetimingbufferfullEvent, Event::CanBubble::No, Event::IsCancelable::No)); >+ if (isResourceTimingBufferFull()) { >+ m_resourceTimingBufferFullFlag = true; >+ dispatchEvent(Event::create(eventNames().resourcetimingbufferfullEvent, Event::CanBubble::No, Event::IsCancelable::No)); >+ } > > if (m_resourceTimingBufferFullFlag) { > for (auto& entry : backupBuffer) >@@ -239,6 +243,13 @@ void Performance::resourceTimingBufferFullTimerFired() > } else > m_backupResourceTimingBuffer.append(entry.copyRef()); > } >+ >+ auto afterCount = m_backupResourceTimingBuffer.size(); >+ >+ if (beforeCount <= afterCount) { >+ m_backupResourceTimingBuffer.clear(); >+ break; >+ } > } > m_waitingForBackupBufferToBeProcessed = false; > } >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index ec057412ce368bd74036ff1436c6a5caf449c7af..e25dea45e7d2d223fe8ef0bb87ef0009ff51b26f 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,30 @@ >+2019-01-26 Charles Vazac <cvazac@akamai.com> >+ >+ Fix Resource Timing buffer edge cases for WPT >+ https://bugs.webkit.org/show_bug.cgi?id=193213 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * web-platform-tests/resource-timing/buffer-full-add-after-full-event.html: >+ * web-platform-tests/resource-timing/buffer-full-add-then-clear-expected.txt: >+ * web-platform-tests/resource-timing/buffer-full-then-increased-expected.txt: >+ * web-platform-tests/resource-timing/redirects.sub-expected.txt: Added. >+ * web-platform-tests/resource-timing/redirects.sub.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_redirects.html. >+ * web-platform-tests/resource-timing/resource_connection_reuse.html: >+ * web-platform-tests/resource-timing/resource_connection_reuse.https.html: >+ * web-platform-tests/resource-timing/resource_connection_reuse_mixed_content-expected.txt: Added. >+ * web-platform-tests/resource-timing/resource_connection_reuse_mixed_content.html: Copied from LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.https.html. >+ * web-platform-tests/resource-timing/resource_connection_reuse_mixed_content_redirect-expected.txt: Added. >+ * web-platform-tests/resource-timing/resource_connection_reuse_mixed_content_redirect.html: Copied from LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.https.html. >+ * web-platform-tests/resource-timing/resource_redirects-expected.txt: Removed. >+ * web-platform-tests/resource-timing/resources/blank_page_green.htm.headers: Added. >+ * web-platform-tests/resource-timing/resources/fake_responses.py: >+ (main): >+ * web-platform-tests/resource-timing/resources/fake_responses_https.sub.html: Added. >+ * web-platform-tests/resource-timing/resources/fake_responses_https_redirect.sub.html: Added. >+ * web-platform-tests/resource-timing/resources/w3c-import.log: >+ * web-platform-tests/resource-timing/w3c-import.log: >+ > 2019-01-24 Charles Vazac <cvazac@akamai.com> > > Implement PerformanceObserver.supportedEntryTypes >diff --git a/LayoutTests/http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash-expected.txt b/LayoutTests/http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash-expected.txt >index d0961e94a93ec60c1b1694a2cd5be9c85f1029e4..8eaa75e955a24ac0ddf7076688dc8047bb78b1ba 100644 >--- a/LayoutTests/http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash-expected.txt >+++ b/LayoutTests/http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash-expected.txt >@@ -19,12 +19,10 @@ performance.setResourceTimingBufferSize(1) > PASS resourcesAfterShrinkingBuffer = performance.getEntriesByType("resource"); resourcesAfterShrinkingBuffer.length is 2 > PASS resourcesAfterShrinkingBuffer[0] is originalResources[0] > PASS resourcesAfterShrinkingBuffer[1] is originalResources[1] >- >-Inside resourcetimingbufferfull 2 > PASS performance.clearResourceTimings(); performance.getEntriesByType("resource").length is 0 > > After resourcetimingbufferfull >-PASS resourcetimingbufferfullEventCount is 2 >+PASS resourcetimingbufferfullEventCount is 1 > PASS resourcesAfterClearing = performance.getEntriesByType("resource"); resourcesAfterClearing.length is 1 > PASS resourcesAfterClearing[0].initiatorType is "fetch" > PASS new URL(resourcesAfterClearing[0].name).search is "?resource=2" >diff --git a/LayoutTests/http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html b/LayoutTests/http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html >index eb2240478907ee8f920205f087e6b9d3c2cbd86c..312d58345fd4e8b310b57d6e893d1130eb7662be 100644 >--- a/LayoutTests/http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html >+++ b/LayoutTests/http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html >@@ -42,12 +42,11 @@ performance.onresourcetimingbufferfull = () => { > shouldBe('resourcesAfterShrinkingBuffer = performance.getEntriesByType("resource"); resourcesAfterShrinkingBuffer.length', '2'); > shouldBe('resourcesAfterShrinkingBuffer[0]', 'originalResources[0]'); > shouldBe('resourcesAfterShrinkingBuffer[1]', 'originalResources[1]'); >- } else if (resourcetimingbufferfullEventCount == 2) { > shouldBe('performance.clearResourceTimings(); performance.getEntriesByType("resource").length', '0'); > setTimeout(() => { > debug(''); > debug('After resourcetimingbufferfull'); >- shouldBe('resourcetimingbufferfullEventCount', '2'); >+ shouldBe('resourcetimingbufferfullEventCount', '1'); > shouldBe('resourcesAfterClearing = performance.getEntriesByType("resource"); resourcesAfterClearing.length', '1'); > shouldBeEqualToString('resourcesAfterClearing[0].initiatorType', 'fetch'); > shouldBeEqualToString('new URL(resourcesAfterClearing[0].name).search', '?resource=2'); >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-add-after-full-event.html b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-add-after-full-event.html >index 46264ac562d36efc807d121ae8030d329d65531b..73ad841e92fddff1e05395241d69a0079e7a84da 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-add-after-full-event.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-add-after-full-event.html >@@ -61,7 +61,7 @@ let testThatEntryWasAdded = () => { > reject("After buffer full, entry never added to primary"); > } > } >- step_timeout(waitForIt, 250); >+ step_timeout(waitForIt, 0); > }); > }; > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-add-then-clear-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-add-then-clear-expected.txt >index a0ea4c3d1f8bfcc71ea556ffabe055f2d88dc0ed..dcfe228549dfe03d05900623354536d288706b61 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-add-then-clear-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-add-then-clear-expected.txt >@@ -1,6 +1,3 @@ >-CONSOLE MESSAGE: line 2659: Error: assert_unreached: resourcetimingbufferfull should not fire Reached unreachable code > >-Harness Error (FAIL), message = Error: assert_unreached: resourcetimingbufferfull should not fire Reached unreachable code >- >-FAIL Test that if the buffer is cleared after entries were added to the secondary buffer, those entries make it into the primary one assert_equals: the last 3 resources should be in the buffer, since the first one was cleared expected 3 but got 0 >+PASS Test that if the buffer is cleared after entries were added to the secondary buffer, those entries make it into the primary one > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-then-increased-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-then-increased-expected.txt >index b47fa53c1923a6fa9773374ef1cb25b8b51bcb07..744558bf4e097c3b1e4947cffc0948b69ad38d87 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-then-increased-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/buffer-full-then-increased-expected.txt >@@ -1,6 +1,3 @@ >-CONSOLE MESSAGE: line 2659: Error: assert_unreached: resourcetimingbufferfull should not fire Reached unreachable code > >-Harness Error (FAIL), message = Error: assert_unreached: resourcetimingbufferfull should not fire Reached unreachable code >- >-FAIL Test that overflowing the buffer and immediately increasing its limit does not trigger the resourcetimingbufferfull event assert_equals: All resources should be in the buffer, since its size was increased expected 3 but got 1 >+PASS Test that overflowing the buffer and immediately increasing its limit does not trigger the resourcetimingbufferfull event > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/redirects.sub-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/redirects.sub-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..0fcf24b05781f9c4b5cea243fa107591c3db64ca >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/redirects.sub-expected.txt >@@ -0,0 +1,8 @@ >+CONSOLE MESSAGE: line 6: NetworkError: A network error occurred. >+Description >+ >+This test validates that redirects do not alter the URL. >+ >+ >+FAIL Testing resource entries assert_unreached: http://localhost:8800/common/redirect.py?location=https://www.localhost:9443/resource-timing/resources/blank_page_green.htm?id=xhr is expected to be in the Resource Timing buffer Reached unreachable code >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/redirects.sub.html b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/redirects.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0e3f405e14b7af9f0b2a4fe5ce916ed1e47534de >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/redirects.sub.html >@@ -0,0 +1,60 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8" /> >+<title>Resource Timing redirect names</title> >+<link rel="author" title="Google" href="http://www.google.com/" /> >+<link rel="help" href="http://www.w3.org/TR/resource-timing/#performanceresourcetiming"/> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/webperftestharness.js"></script> >+<script src="resources/webperftestharnessextension.js"></script> >+<script> >+let iframe; >+const redirect_url = 'common/redirect.py'; >+const url_prefix = redirect_url + '?location=/resource-timing/resources/'; >+const https_url_prefix = redirect_url + '?location=https://{{hosts[][www]}}:{{ports[https][0]}}/resource-timing/resources/'; >+function setup_iframe() { >+ const iframe_content = >+ '<link rel="stylesheet" href="/' + url_prefix + 'resource_timing_test0.css"></link>' + >+ '<img src="/' + url_prefix + 'blue.png"></img>' + >+ '<iframe src="/' + url_prefix + 'blank_page_green.htm"></iframe>' + >+ '<script src="/' + url_prefix + 'empty_script.js"></scr' + 'ipt>' + >+ '<scr' + 'ipt>' + >+ 'const xhr = new XMLHttpRequest;' + >+ 'xhr.open("GET", "/' + url_prefix + 'blank_page_green.htm?id=xhr", false);' + >+ 'xhr.send();' + >+ 'const xhr2 = new XMLHttpRequest;' + >+ 'xhr2.open("GET", "/' + https_url_prefix + 'blank_page_green.htm?id=xhr", false);' + >+ 'xhr2.send();' + >+ '</scr' + 'ipt>'; >+ iframe = document.getElementById('frameContext'); >+ iframe.contentWindow.document.write(iframe_content); >+} >+function onload_test() { >+ const context = new PerformanceContext(iframe.contentWindow.performance); >+ const entries = context.getEntriesByType('resource'); >+ >+ const index = window.location.pathname.lastIndexOf('resource-timing'); >+ const pathname = window.location.pathname.substring(0, index) + url_prefix; >+ const https_pathname = window.location.pathname.substring(0, index) + https_url_prefix; >+ let expected_entries = {}; >+ expected_entries[pathname + 'resource_timing_test0.css'] = 'link'; >+ expected_entries[pathname + 'blue.png'] = 'img'; >+ expected_entries[pathname + 'blank_page_green.htm'] = 'iframe'; >+ expected_entries[pathname + 'empty_script.js'] = 'script'; >+ expected_entries[pathname + 'blank_page_green.htm?id=xhr'] = 'xmlhttprequest'; >+ expected_entries[https_pathname + 'blank_page_green.htm?id=xhr'] = 'xmlhttprequest'; >+ >+ test_resource_entries(entries, expected_entries); >+} >+window.setup_iframe = setup_iframe; >+</script> >+</head> >+<body> >+<h1>Description</h1> >+<p>This test validates that redirects do not alter the URL.</p> >+<div id="log"></div> >+<iframe id="frameContext" onload="onload_test();" src="resources/inject_resource_test.html"></iframe> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.html b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.html >index 7a31a7e1ab31d4d1a83fb5e2911b8ed95f0f2d92..f347a0b23e15e9134ba2bf37fdafa4cab5e8d809 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.html >@@ -41,7 +41,7 @@ function onload_test() { > test_equals(entry.fetchStart, entry.connectStart, 'connectStart and fetchStart should be the same'); > test_equals(entry.fetchStart, entry.connectEnd, 'connectEnd and fetchStart should be the same'); > if(!window.isSecureConnection) { >- test_equals(entry.secureConnectionStart, 0, 'secureConnectStart should be zero'); >+ test_equals(entry.secureConnectionStart, 0, 'secureConnectionStart should be zero'); > } > test_equals(entry.fetchStart, entry.domainLookupStart, 'domainLookupStart and fetchStart should be the same') > test_equals(entry.fetchStart, entry.domainLookupEnd, 'domainLookupEnd and fetchStart should be the same') >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.https.html b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.https.html >index bc79a8519b20659085b6cda9e98685a0aaf33785..86864090a2eea7e62f7f204ec7baf4eccc9f6771 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.https.html >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.https.html >@@ -40,7 +40,7 @@ function onload_test() { > const entry = entries[1]; > test_equals(entry.fetchStart, entry.connectStart, 'connectStart and fetchStart should be the same'); > test_equals(entry.fetchStart, entry.connectEnd, 'connectEnd and fetchStart should be the same'); >- test_equals(entry.fetchStart, entry.secureConnectionStart, 'secureConnectStart and fetchStart should be the same'); >+ test_equals(entry.fetchStart, entry.secureConnectionStart, 'secureConnectionStart and fetchStart should be the same'); > test_equals(entry.fetchStart, entry.domainLookupStart, 'domainLookupStart and fetchStart should be the same') > test_equals(entry.fetchStart, entry.domainLookupEnd, 'domainLookupEnd and fetchStart should be the same') > } >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..bda5213eb38119a33d9e8840393118df1a4c4e7c >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content-expected.txt >@@ -0,0 +1,11 @@ >+Blocked access to external URL https://www.localhost:9443/resource-timing/resources/fake_responses.py >+CONSOLE MESSAGE: line 8: NetworkError: A network error occurred. >+Description >+ >+This test validates that connectStart and connectEnd are the same when a connection is reused (e.g. when a persistent connection is used). >+ >+ >+PASS window.performance is defined >+PASS window.performance.getEntriesByType is defined >+FAIL There should be 2 PerformanceEntries assert_equals: There should be 2 PerformanceEntries expected 2 but got 0 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content.html b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content.html >new file mode 100644 >index 0000000000000000000000000000000000000000..51c04ee604c963cb248ca6cb6b536ef9bf21ee12 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content.html >@@ -0,0 +1,55 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8" /> >+<title>Resource Timing connection reuse</title> >+<link rel="author" title="Google" href="http://www.google.com/" /> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/webperftestharness.js"></script> >+<script src="resources/webperftestharnessextension.js"></script> >+<script> >+setup({explicit_done: true}); >+let iframe; >+let d; >+let body; >+ >+// Explicitly test the namespace before we start testing. >+test_namespace('getEntriesByType'); >+ >+function setup_iframe() { >+ iframe = document.getElementById('frameContext'); >+ d = iframe.contentWindow.document; >+ iframe.addEventListener('load', onload_test, false); >+} >+ >+function onload_test() { >+ const entries = iframe.contentWindow.performance.getEntriesByType('resource'); >+ >+ // When a persistent connection is used, follow-on resources should be included as PerformanceResourceTiming objects. >+ test_equals(entries.length, 2, 'There should be 2 PerformanceEntries'); >+ >+ if (entries.length >= 2) { >+ // When a persistent connection is used, for the resource that reuses the socket, connectStart and connectEnd should have the same value as fetchStart. >+ const entry = entries[1]; >+ test_equals(entry.fetchStart, entry.connectStart, 'connectStart and fetchStart should be the same'); >+ test_equals(entry.fetchStart, entry.connectEnd, 'connectEnd and fetchStart should be the same'); >+ // secureConnectionStart is the same as fetchStart since the subresource is fetched over https >+ test_equals(entry.fetchStart, entry.secureConnectionStart, 'secureConnectionStart and fetchStart should be the same'); >+ test_equals(entry.fetchStart, entry.domainLookupStart, 'domainLookupStart and fetchStart should be the same') >+ test_equals(entry.fetchStart, entry.domainLookupEnd, 'domainLookupEnd and fetchStart should be the same') >+ } >+ >+ done(); >+} >+ >+window.setup_iframe = setup_iframe; >+</script> >+</head> >+<body> >+<h1>Description</h1> >+<p>This test validates that connectStart and connectEnd are the same when a connection is reused (e.g. when a persistent connection is used).</p> >+<div id="log"></div> >+<iframe id="frameContext" src="resources/fake_responses_https.sub.html"></iframe> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content_redirect-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content_redirect-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..9a3823255c4d8ccb230912ae48dea7c4ae5781d6 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content_redirect-expected.txt >@@ -0,0 +1,11 @@ >+Blocked access to external URL http://www.localhost:8800/resource-timing/resources/fake_responses.py?redirect=https://www.localhost:9443/resource-timing/resources/fake_responses.py >+CONSOLE MESSAGE: line 10: NetworkError: A network error occurred. >+Description >+ >+This test validates that connectStart and connectEnd are the same when a connection is reused (e.g. when a persistent connection is used). >+ >+ >+PASS window.performance is defined >+PASS window.performance.getEntriesByType is defined >+FAIL There should be 2 PerformanceEntries assert_equals: There should be 2 PerformanceEntries expected 2 but got 0 >+ >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content_redirect.html b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content_redirect.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a46d14c9f159ad2839546ed4f595d7e8d7cf4ffa >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content_redirect.html >@@ -0,0 +1,55 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<meta charset="utf-8" /> >+<title>Resource Timing connection reuse</title> >+<link rel="author" title="Google" href="http://www.google.com/" /> >+<script src="/resources/testharness.js"></script> >+<script src="/resources/testharnessreport.js"></script> >+<script src="resources/webperftestharness.js"></script> >+<script src="resources/webperftestharnessextension.js"></script> >+<script> >+setup({explicit_done: true}); >+let iframe; >+let d; >+let body; >+ >+// Explicitly test the namespace before we start testing. >+test_namespace('getEntriesByType'); >+ >+function setup_iframe() { >+ iframe = document.getElementById('frameContext'); >+ d = iframe.contentWindow.document; >+ iframe.addEventListener('load', onload_test, false); >+} >+ >+function onload_test() { >+ const entries = iframe.contentWindow.performance.getEntriesByType('resource'); >+ >+ // When a persistent connection is used, follow-on resources should be included as PerformanceResourceTiming objects. >+ test_equals(entries.length, 2, 'There should be 2 PerformanceEntries'); >+ >+ if (entries.length >= 2) { >+ // When a persistent connection is used, for the resource that reuses the socket, connectStart and connectEnd should have the same value as fetchStart. >+ const entry = entries[1]; >+ test_equals(entry.fetchStart, entry.connectStart, 'connectStart and fetchStart should be the same'); >+ test_equals(entry.fetchStart, entry.connectEnd, 'connectEnd and fetchStart should be the same'); >+ // secureConnectionStart is the same as fetchStart since the subresource is eventually redirected to https. >+ test_equals(entry.fetchStart, entry.secureConnectionStart, 'secureConnectionStart and fetchStart should be the same'); >+ test_equals(entry.fetchStart, entry.domainLookupStart, 'domainLookupStart and fetchStart should be the same') >+ test_equals(entry.fetchStart, entry.domainLookupEnd, 'domainLookupEnd and fetchStart should be the same') >+ } >+ >+ done(); >+} >+ >+window.setup_iframe = setup_iframe; >+</script> >+</head> >+<body> >+<h1>Description</h1> >+<p>This test validates that connectStart and connectEnd are the same when a connection is reused (e.g. when a persistent connection is used).</p> >+<div id="log"></div> >+<iframe id="frameContext" src="resources/fake_responses_https_redirect.sub.html"></iframe> >+</body> >+</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_redirects-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_redirects-expected.txt >deleted file mode 100644 >index 77f9308d526c74c8544424d19ad7a43920cc8fa0..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_redirects-expected.txt >+++ /dev/null >@@ -1,7 +0,0 @@ >-Description >- >-This test validates that redirects do not alter the URL. >- >- >-PASS Testing resource entries >- >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_redirects.html b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_redirects.html >deleted file mode 100644 >index 606662afda4401dd0dccbac2b71b66f3b1961e6f..0000000000000000000000000000000000000000 >--- a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_redirects.html >+++ /dev/null >@@ -1,53 +0,0 @@ >-<!DOCTYPE html> >-<html> >-<head> >-<meta charset="utf-8" /> >-<title>Resource Timing redirect names</title> >-<link rel="author" title="Google" href="http://www.google.com/" /> >-<link rel="help" href="http://www.w3.org/TR/resource-timing/#performanceresourcetiming"/> >-<script src="/resources/testharness.js"></script> >-<script src="/resources/testharnessreport.js"></script> >-<script src="resources/webperftestharness.js"></script> >-<script src="resources/webperftestharnessextension.js"></script> >-<script> >-let iframe; >-function setup_iframe() { >- const iframe_content = >- '<link rel="stylesheet" href="/common/redirect.py?location=/resource-timing/resources/resource_timing_test0.css"></link>' + >- '<img src="/common/redirect.py?location=/resource-timing/resources/blue.png"></img>' + >- '<iframe src="/common/redirect.py?location=/resource-timing/resources/blank_page_green.htm"></iframe>' + >- '<script src="/common/redirect.py?location=/resource-timing/resources/empty_script.js"></scr' + 'ipt>' + >- '<scr' + 'ipt>' + >- 'const xhr = new XMLHttpRequest;' + >- 'xhr.open("GET", "/common/redirect.py?location=/resource-timing/resources/blank_page_green.htm?id=xhr", false);' + >- 'xhr.send();' + >- '</scr' + 'ipt>'; >- iframe = document.getElementById('frameContext'); >- iframe.contentWindow.document.write(iframe_content); >-} >-function onload_test() { >- const context = new PerformanceContext(iframe.contentWindow.performance); >- const entries = context.getEntriesByType('resource'); >- >- const index = window.location.pathname.lastIndexOf('resource-timing'); >- const pathname = window.location.pathname.substring(0, index) + >- 'common/redirect.py?location=/resource-timing/resources/'; >- let expected_entries = {}; >- expected_entries[pathname + 'resource_timing_test0.css'] = 'link'; >- expected_entries[pathname + 'blue.png'] = 'img'; >- expected_entries[pathname + 'blank_page_green.htm'] = 'iframe'; >- expected_entries[pathname + 'empty_script.js'] = 'script'; >- expected_entries[pathname + 'blank_page_green.htm?id=xhr'] = 'xmlhttprequest'; >- >- test_resource_entries(entries, expected_entries); >-} >-window.setup_iframe = setup_iframe; >-</script> >-</head> >-<body> >-<h1>Description</h1> >-<p>This test validates that redirects do not alter the URL.</p> >-<div id="log"></div> >-<iframe id="frameContext" onload="onload_test();" src="resources/inject_resource_test.html"></iframe> >-</body> >-</html> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/blank_page_green.htm.headers b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/blank_page_green.htm.headers >new file mode 100644 >index 0000000000000000000000000000000000000000..cb762eff806849df46dc758ef7b98b63f27f54c9 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/blank_page_green.htm.headers >@@ -0,0 +1 @@ >+Access-Control-Allow-Origin: * >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses.py b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses.py >index f71693818cb726573e4d1f282b8d61fe8a87df6b..289c179317671ba4e87c06bb89e815c8c449fd19 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses.py >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses.py >@@ -2,13 +2,20 @@ > > def main(request, response): > tag = request.GET.first("tag", None) >+ redirect = request.GET.first("redirect", None) > match = request.headers.get("If-None-Match", None) > date = request.GET.first("date", "") > modified = request.headers.get("If-Modified-Since", None) >+ response.headers.set("Access-Control-Allow-Origin", "*"); >+ response.headers.set("Timing-Allow-Origin", "*"); > if tag: > response.headers.set("ETag", '"%s"' % tag) > elif date: > response.headers.set("Last-Modified", date) >+ if redirect: >+ response.headers.set("Location", redirect) >+ response.status = (302, "Moved") >+ return "" > > if ((match is not None and match == tag) or > (modified is not None and modified == date)): >@@ -16,4 +23,4 @@ def main(request, response): > return "" > else: > response.headers.set("Content-Type", "text/plain") >- return "MAYBE NOT" >\ No newline at end of file >+ return "MAYBE NOT" >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses_https.sub.html b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses_https.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..cf49fb914bebe0c18d8af19a1a1362ae64217eb5 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses_https.sub.html >@@ -0,0 +1,18 @@ >+<body> >+<script> >+function request() { >+ var client = new XMLHttpRequest, >+ baseurl = "https://{{hosts[][www]}}:{{ports[https][0]}}{{location[pathname]}}", >+ url = new URL("fake_responses.py", baseurl).href; >+ client.open("GET", url, false) >+ client.send(null) >+ client.open("GET", url, false) >+ client.send(null) >+} >+ >+if(window.parent.setup_iframe) { >+ window.parent.setup_iframe(); >+ request(); >+} >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses_https_redirect.sub.html b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses_https_redirect.sub.html >new file mode 100644 >index 0000000000000000000000000000000000000000..c55e037d1dc15c1247c1a0ad2396c1416b577800 >--- /dev/null >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses_https_redirect.sub.html >@@ -0,0 +1,20 @@ >+<body> >+<script> >+function request() { >+ var client = new XMLHttpRequest, >+ baseurl = "http://{{hosts[][www]}}:{{ports[http][0]}}{{location[pathname]}}", >+ subresource = "fake_responses.py", >+ redirecturl = new URL(subresource, "https://{{hosts[][www]}}:{{ports[https][0]}}{{location[pathname]}}").href, >+ url = new URL(subresource + "?redirect=" + redirecturl, baseurl).href; >+ client.open("GET", url, false) >+ client.send(null) >+ client.open("GET", url, false) >+ client.send(null) >+} >+ >+if(window.parent.setup_iframe) { >+ window.parent.setup_iframe(); >+ request(); >+} >+</script> >+</body> >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/w3c-import.log >index 4d67ebb9513f2e0b93947fac6561eca47d8ce800..da35822426787733e31d237504b3bcd6f582c7a6 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/w3c-import.log >@@ -17,6 +17,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/TAOResponse.py > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/all_resource_types.htm > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/blank_page_green.htm >+/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/blank_page_green.htm.headers > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/blue.png > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/buffer-full-utilities.js > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/document-domain-no-impact.sub.html >@@ -26,6 +27,8 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/eventsource.py > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses.py >+/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses_https.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/fake_responses_https_redirect.sub.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/green_frame.htm > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/gzip_xml.py > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resources/iframe-setdomain.sub.html >diff --git a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/w3c-import.log b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/w3c-import.log >index 26b68fb6998ab384f345faa5b75b588fb8b6f981..0985a0624a54b5e111a238aa8592916d0ae5031c 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/resource-timing/w3c-import.log >+++ b/LayoutTests/imported/w3c/web-platform-tests/resource-timing/w3c-import.log >@@ -31,6 +31,7 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/document-domain-no-impact-loader.sub.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/idlharness.any.js > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/no-entries-for-cross-origin-css-fetched.sub.html >+/LayoutTests/imported/w3c/web-platform-tests/resource-timing/redirects.sub.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource-timing-level1.js > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource-timing-level1.sub.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource-timing-tojson.html >@@ -48,13 +49,14 @@ List of files: > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_cached.htm > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse.https.html >+/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content.html >+/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_connection_reuse_mixed_content_redirect.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_dedicated_worker.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_dynamic_insertion.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_ignore_data_url.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_ignore_failures.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_initiator_types.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_memory_cached.sub.html >-/LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_redirects.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_reparenting.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_script_types.html > /LayoutTests/imported/w3c/web-platform-tests/resource-timing/resource_subframe_self_navigation.html
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 193213
:
358530
|
358532
|
358540
|
358544
|
358552
|
358554
|
358555
|
360247
|
360249
|
360250
|
360253
|
360254
|
360255
|
360264
|
360268
|
360344
|
360345
|
362013
|
362014
|
362020
|
362021
|
362024
|
362025
|
362028
|
362034
|
362039
|
362060
|
362095
|
362115