| Summary: | Navigation Timing data is corrupt in WebView (UIWebView/WKWebView) | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | WebKit | Reporter: | krinklemail | ||||||||
| Component: | WebCore Misc. | Assignee: | Alex Christensen <achristensen> | ||||||||
| Status: | RESOLVED FIXED | ||||||||||
| Severity: | Major | CC: | achristensen, ap, beidson, cdumez, rniwa, simon.fraser, webkit-bug-importer, youennf | ||||||||
| Priority: | P2 | Keywords: | InRadar | ||||||||
| Version: | WebKit Nightly Build | ||||||||||
| Hardware: | iPhone / iPad | ||||||||||
| OS: | iOS 11 | ||||||||||
| Attachments: |
|
||||||||||
|
Description
krinklemail
2018-06-22 07:09:55 PDT
Created attachment 343438 [details]
Test case
Simple HTML file (the pen url only works when using CodePen's Debug View, due to the framed wrapper somehow causing the issue not to happen).
Created attachment 343439 [details]
Test case (response/request order)
This is still seen from Mobile Safari 13 clients.
May 26
Discarding event because requestStart is out of order [{u'wmf_app_version': u'-', u'os_minor': u'4', u'os_major': u'13', u'is_bot': False, u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'1', u'is_mediawiki': False, u'browser_major': u'13', u'browser_family': u'Mobile Safari'}]
Discarding event because requestStart is out of order [{u'wmf_app_version': u'-', u'os_minor': u'4', u'os_major': u'13', u'is_bot': False, u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'1', u'is_mediawiki': False, u'browser_major': u'13', u'browser_family': u'Mobile Safari'}]
Discarding event because requestStart is out of order [{u'wmf_app_version': u'-', u'os_minor': u'4', u'os_major': u'13', u'is_bot': False, u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'1', u'is_mediawiki': False, u'browser_major': u'13', u'browser_family': u'Mobile Safari'}]
…
Current downstream report:
https://phabricator.wikimedia.org/T197954
Updated log now startingb to include iOS 14 as we start to see adoption.
Below is the aggregregate of a few hours of 1:1000 navtiming samples from Wikimedia, with first column indicating how many similar errors were seen (same out of order, same OS/browser version)
3848 Discarding event because requestStart is out of order [{u'os_minor': u'7', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'1', u'browser_major': u'13', u'browser_family': u'Mobile Safari'}]
1612 Discarding event because requestStart is out of order [{u'os_minor': u'15', u'os_major': u'10', u'device_family': u'Mac', u'os_family': u'Mac OS X', u'browser_minor': u'1', u'browser_major': u'13', u'browser_family': u'Safari'}]
1474 Discarding event because requestStart is out of order [{u'os_minor': u'6', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'1', u'browser_major': u'13', u'browser_family': u'Mobile Safari'}]
711 Discarding event because requestStart is out of order [{u'os_minor': u'7', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'2', u'browser_major': u'125', u'browser_family': u'Google'}]
672 Discarding event because requestStart is out of order [{u'os_minor': u'5', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'1', u'browser_major': u'13', u'browser_family': u'Mobile Safari'}]
665 Discarding event because requestStart is out of order [{u'os_minor': u'3', u'os_major': u'9', u'device_family': u'iPad', u'os_family': u'iOS', u'browser_minor': u'0', u'browser_major': u'9', u'browser_family': u'Mobile Safari'}]
592 Discarding event because requestStart is out of order [{u'os_minor': u'7', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'0', u'browser_major': u'85', u'browser_family': u'Chrome Mobile iOS'}]
528 Discarding event because responseEnd is out of order [{u'os_minor': u'0', u'os_major': u'14', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'0', u'browser_major': u'14', u'browser_family': u'Mobile Safari'}]
454 Discarding event because responseEnd is out of order [{u'os_minor': u'7', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'1', u'browser_major': u'13', u'browser_family': u'Mobile Safari'}]
344 Discarding event because responseEnd is out of order [{u'os_minor': u'15', u'os_major': u'10', u'device_family': u'Mac', u'os_family': u'Mac OS X', u'browser_minor': u'1', u'browser_major': u'13', u'browser_family': u'Safari'}]
295 Discarding event because requestStart is out of order [{u'os_minor': u'15', u'os_major': u'10', u'device_family': u'Mac', u'os_family': u'Mac OS X', u'browser_minor': u'0', u'browser_major': u'14', u'browser_family': u'Safari'}]
259 Discarding event because responseEnd is out of order [{u'os_minor': u'15', u'os_major': u'10', u'device_family': u'Mac', u'os_family': u'Mac OS X', u'browser_minor': u'0', u'browser_major': u'14', u'browser_family': u'Safari'}]
244 Discarding event because requestStart is out of order [{u'os_minor': u'0', u'os_major': u'14', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'0', u'browser_major': u'14', u'browser_family': u'Mobile Safari'}]
235 Discarding event because requestStart is out of order [{u'os_minor': u'3', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'0', u'browser_major': u'13', u'browser_family': u'Mobile Safari'}]
193 Discarding event because requestStart is out of order [{u'os_minor': u'4', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'1', u'browser_major': u'13', u'browser_family': u'Mobile Safari'}]
175 Discarding event because requestStart is out of order [{u'os_minor': u'6', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'2', u'browser_major': u'125', u'browser_family': u'Google'}]
174 Discarding event because requestStart is out of order [{u'os_minor': u'6', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'0', u'browser_major': u'85', u'browser_family': u'Chrome Mobile iOS'}]
166 Discarding event because responseEnd is out of order [{u'os_minor': u'6', u'os_major': u'13', u'device_family': u'iPhone', u'os_family': u'iOS', u'browser_minor': u'1', u'browser_major': u'13', u'browser_family': u'Mobile Safari'}]
Safari is (still) the only browser reporting errors with significant frequency.
'requestStart' being out of order is far far the most frequent, however we are still seeing out of order 'responseEnd' as well as you can see including on iOS 14.
Still seen from iOS 15.3 and Mac Safari 15.
Estimated affected Wikipedia pageviews per day (before 1:1000 sampling):
| pageviews | wikimedia_navtiming/is_compliant/error_invalid
|-----------|---------------------------------------
| 500,000 | Discarding event because requestStart is out of order [('Mobile_Safari', '15_3')]
| 400,000 | Discarding event because requestStart is out of order [('Mobile_Safari', '14_1')]
| 400,000 | Discarding event because requestStart is out of order [('Mobile_Safari', '15_2')]
| 300,000 | Discarding event because requestStart is out of order [('Mobile_Safari', '13_1')]
| 300,000 | Discarding event because requestStart is out of order [('Safari', '15')]
| 220,000 | Discarding event because requestStart is out of order [('Safari', '14')]
| 220,000 | Discarding event because requestStart is out of order [('Mobile_Safari', '15_1')]
| 200,000 | Discarding event because responseEnd is out of order [('Mobile_Safari', '14_1')]
| 150,000 | Discarding event because requestStart is out of order [('Safari', '13')]
| 100,000 | Discarding event because responseEnd is out of order [('Safari', '14')]
| 100,000 | Discarding event because requestStart is out of order [('Mobile_Safari', '15_0')]
| 100,000 | Discarding event because requestStart is out of order [('Mobile_Safari', '14_0')]
| 90,000 | Discarding event because requestStart is out of order [('Mobile_Safari', '13_0')]
| 70,000 | Discarding event because connectStart is out of order [('Safari', '15')]
| 50,000 | Discarding event because responseEnd is out of order [('Mobile_Safari', '14_0')]
| 50,000 | Discarding event because responseEnd is out of order [('Safari', '13')]
| 30,000 | Discarding event because responseEnd is out of order [('Mobile_Safari', '13_0')]
| 30,000 | Discarding event because responseEnd is out of order [('Mobile_Safari', '12_1')]
| 20,000 | Discarding event because requestStart is out of order [('Mobile_Safari', '12_0')]
Created attachment 455946 [details]
Patch
Comment on attachment 455946 [details]
Patch
Why would this affect WKWebView but not Safari?
I think in 2018 this was a bug about the WebView implementation having some issues, some of which I fixed last year. I think in 2022 it's about one more remaining issue which affects Safari, WKWebView, WebView, and UIWebView. Comment on attachment 455946 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=455946&action=review > Source/WebCore/platform/network/cocoa/NetworkLoadMetrics.mm:57 > + // Sometimes in production responseStart is before requestStart, possibly due to clock updates. If this happens, use the later of the two. I don't think "in production" adds anything here. Should we reference a radar? I'll reference rdar://90997689 instead. Reverted in r292066 r292067 on trunk |