Issue metadata
Sign in to add a comment
|
Load events are not fired when images in iFrames fail to load
Reported by
garystim...@gmail.com,
Mar 9 2016
|
||||||||||||||||||||||||
Issue descriptionUserAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 Example URL: Steps to reproduce the problem: 1. See the attached zip file 2. Unzip the html files to a web server (I used JBoss 6) 3. Access index.html 4. Note that in the console you get no debug messages when using Chrome 5. Using other browsers you will see debug messages when onload events are fired. IMPORTANT: This is only reproducible when using a web server to host the files and not when using local html files. What is the expected behavior? OnLoad events should still be fired even if images can not be loaded. What went wrong? On investigation it would seem that the missing image causes a network error in the browser (hence why it is only reproducible on a hosted page) which then stops the rest of the page from loading. The readystate of the document continues as loading and the onload events are never fired. Does it occur on multiple sites: Yes Is it a problem with a plugin? No Did this work before? Yes Build 48.0.2564.116 of Chrome Does this work in other browsers? Yes Chrome version: 49.0.2623.75 Channel: stable OS Version: 10 Flash Version: Shockwave Flash 20.0 r0 Our clients use Chrome to access the web based Laboratory testing software we provide. Yesterday when a client updated to Chrome build 49.x (from build 48.x) they found they could no longer use the application. On investigation the page would not complete loading because it's client side onload event was not being fired. On further investigation and looking at the Chrome system logs it would seem that because the page had a missing image it fires a network resource error which stops the onload events ever being fired. You can also see the page always appears in the loading readystate and the stop button does not become refresh. I have attached a test application which reproduces the issue. This example outputs console messages when the load events on the frame and in the frame are fired. You will find that opening index.html that no messages are shown in the console. IMPORTANT: this is only reproducible when using a web server to host the test application. It is not reproducible using local html files. This is because the network resource error is only thrown when using a web server. This is critical for our product and I would like to escalate as quickly as possible.
,
Mar 9 2016
,
Mar 9 2016
Just to add another data point, I cannot reproduce the issue on Chrome OS, beta channel. Here's my stack: > Version 49.0.2623.75 beta (64-bit) > Platform 7834.53.0 (Official Build) beta-channel samus > Firmware Google_Samus.6300.174.0 I've extracted the .zip and hosted it online to make testing easier: http://159.203.140.176:3281/ My console output looks like this: > GET http://159.203.140.176:3281/IDontExist.jpg 404 (File not found) [frame.html:16] > Ive loaded inside the frame [frame.html:7] > Ive loaded outside the frames [(index):7]
,
Mar 9 2016
Hi, Where can I get this beta release to see if i can reproduce with it? Also have you been able to reproduce on the stable release version of Chrome 49 that I logged? Thanks, Gary
,
Mar 9 2016
Hey Gary, Chrome OS allows you to change channels via the preferences, but unfortunately I'm unable to switch channels on that machine (work stuff). Sorry about that. I was able to use my Macbook Pro (OS X 10.10.5) to test the stable channel (Chrome 49.0.2623.87 (64-bit)), but I'm still unable to reproduce your bug. Are you showing the same error on my host (http://159.203.140.176:3281/)? I might try incognito mode too, on the off chance you haven't tested that. If that doesn't work, I might try the beta channel, available here: https://www.google.com/chrome/browser/beta.html Cheers, Christian
,
Mar 9 2016
Hi Christian, I'm on that 49.0.2623.87 (64 bit) build on both my Mac and my Windows 10 box and can see the issue on my locally hosted reproducible. I've just tested your hosted reproducible and it works fine from there. No network error. But when I try from my Jboss 6.2 (RedHat) system I see the problem again. I've just asked my IT department to set up a hosted JBoss environment and expose it to the outside so we can access the same reproducible. I'll also in the mean time try the beta channel. Could this be a platform specific issue? Or perhaps a difference with an Intranet hosted site and a WAN based site? Thanks, Gary
,
Mar 9 2016
Update: Just tested the Beta Channel against my internal hosted Jboss and get the same problem. I test build 48.x Chrome, IE 11 or Safari and don't see the problem. I'll update once my IT department has the exposed site. Thanks, Gary
,
Mar 10 2016
Hi Christian, I now have an external reproducible accessible to you. Please try: http://abdms.lims.com:8070/dms/TestChrome/ I have tried from Windows 7 Chrome 49.0.2623.87 (64bit), Mac OS X Chrome 49.0.2623.87 (64bit) and Windows 10 Chrome 49.0.2623.87 (64bit) and it is reproducible. When I try Chrome 48 it is not reproducible. Thanks, Gary
,
Mar 10 2016
Looks like your server returns a non GZIP encoded response, but states that it is GZIP encoded. Why that causes an infinite-loading image, is another question, but your server is probably doing some faulty stuff there. From chrome:net-internals - 47079: URL_REQUEST http://abdms.lims.com:8070/dms/TestChrome/IDontExist.jpg Start Time: 2016-03-10 11:56:00.431 t=169817 [st= 0] +REQUEST_ALIVE [dt=20012] t=169818 [st= 1] URL_REQUEST_DELEGATE [dt=0] t=169818 [st= 1] +URL_REQUEST_START_JOB [dt=20011] --> load_flags = 98560 (DO_NOT_USE_EMBEDDED_IDENTITY | MAYBE_USER_GESTURE | VERIFY_EV_CERT) --> method = "GET" --> priority = "IDLE" --> url = "http://abdms.lims.com:8070/dms/TestChrome/IDontExist.jpg" t=169818 [st= 1] URL_REQUEST_DELEGATE [dt=0] t=169818 [st= 1] HTTP_CACHE_GET_BACKEND [dt=0] t=169818 [st= 1] HTTP_CACHE_OPEN_ENTRY [dt=0] t=169818 [st= 1] +HTTP_CACHE_ADD_TO_ENTRY [dt=20000] t=169821 [st= 4] URL_REQUEST_SET_PRIORITY --> priority = 1 t=189818 [st=20001] -HTTP_CACHE_ADD_TO_ENTRY --> net_error = -409 (ERR_CACHE_LOCK_TIMEOUT) t=189819 [st=20002] URL_REQUEST_DELEGATE [dt=0] t=189819 [st=20002] +HTTP_STREAM_REQUEST [dt=3] t=189819 [st=20002] HTTP_STREAM_REQUEST_STARTED_JOB --> source_dependency = 47093 (HTTP_STREAM_JOB) t=189822 [st=20005] HTTP_STREAM_REQUEST_BOUND_TO_JOB --> source_dependency = 47093 (HTTP_STREAM_JOB) t=189822 [st=20005] -HTTP_STREAM_REQUEST t=189822 [st=20005] +HTTP_TRANSACTION_SEND_REQUEST [dt=1] t=189822 [st=20005] HTTP_TRANSACTION_SEND_REQUEST_HEADERS --> GET http://abdms.lims.com:8070/dms/TestChrome/IDontExist.jpg HTTP/1.1 Host: abdms.lims.com:8070 Proxy-Connection: keep-alive Accept: image/webp,image/*,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8,en-GB;q=0.6,he;q=0.4 t=189823 [st=20006] -HTTP_TRANSACTION_SEND_REQUEST t=189823 [st=20006] +HTTP_TRANSACTION_READ_HEADERS [dt=6] t=189823 [st=20006] HTTP_STREAM_PARSER_READ_HEADERS [dt=6] t=189829 [st=20012] HTTP_TRANSACTION_READ_RESPONSE_HEADERS --> HTTP/1.1 404 Not Found Server: Apache-Coyote/1.1 Expires: Fri, 11 Mar 2016 21:27:14 GMT Cache-Control: max-age=3600 Content-Encoding: gzip Content-Type: text/html;charset=utf-8 Date: Thu, 10 Mar 2016 09:56:06 GMT Content-Length: 1120 Age: 27 Via: 1.1 corp.proxycorp.com t=189829 [st=20012] -HTTP_TRANSACTION_READ_HEADERS t=189829 [st=20012] URL_REQUEST_DELEGATE [dt=0] t=189829 [st=20012] URL_REQUEST_FILTERS_SET --> filters = "FILTER_TYPE_GZIP" t=189829 [st=20012] -URL_REQUEST_START_JOB t=189829 [st=20012] URL_REQUEST_DELEGATE [dt=0] t=189829 [st=20012] HTTP_TRANSACTION_READ_BODY [dt=0] t=189829 [st=20012] FAILED --> net_error = -330 (ERR_CONTENT_DECODING_FAILED) t=189829 [st=20012] -REQUEST_ALIVE --> net_error = -330 (ERR_CONTENT_DECODING_FAILED)
,
Mar 10 2016
Just found another interesting fact. When I first open chrome and navigate to the reproducible the infinite loop occurs (see screenshots attached). However when I open a second tab and navigate to the same URL it still takes longer than it should but does eventually return with the ERR_CONTENT_DECODING_FAILED error (see screenshot). I'll investigate the GZIP compression now and report back. Thanks, Gary
,
Mar 10 2016
I used Fiddler 2 and looked at the request and response for all the browsers. They are identical but we can see for the missing image the JBoss internals returns back a 404 HTML error message. However we see that the Jboss compression filter is still forcing the encoding header to GZIP even though it is raw HTML. I will need to work with RedHat to work out why this is happening. However the important fact, is that this worked in build 48 of chrome and it works on every other browser. It would seem that in build 49 it blindly tries to decode the GZIP even if it is not GZip and causes an infinite loop. Cheers, Gary
,
Mar 10 2016
Applying filters label due to the gzip mention.
,
Mar 10 2016
Helen, do you remember any changes that might have caused this? I scanned the git logs for net/filter and didn't spot anything, but this totally sounds like something that might have happened cleaning up the filter code. I'm not even sure I consider it a bug :-}. But I'd like to find the change before we do that evaluation.
,
Mar 10 2016
(Specifically, what might have caused the regression discussed in c#11.)
,
Mar 10 2016
Nothing registered. I will try doing a bisect.
,
Mar 10 2016
Did a bisect. The regression is called by URLRequestJob::ReadRawData refactoring (see below). However, this regression is fixed (at least in canary). Randy, how should we proceed? ========================= You are probably looking for a change made after 360326 (known good), but no later than 360333 (first known bad). CHANGELOG URL: https://chromium.googlesource.com/chromium/src/+log/03eaf889ebe699c3a5af069d4a2ef2206c6431ad..1c6c5dc9911b507ac286b25d8bcfe454357ea0bd
,
Mar 10 2016
Ah, that makes sense. I think if the regression is fixed in canary, we don't need to do anything. But I'm curious: What aspects of the refactor caused the problem? This behavior strikes me as potentially wrong, but it being in Chrome and all the other browsers suggests there's something I'm missing. How does canary/M48 handle things such that a content encoding of gzip on uncompressed data works?
,
Mar 10 2016
And thanks for digging into this and figuring it out!
,
Mar 10 2016
Randy: Remember, you reviewed my small state machine cleanup CL that happened to fix this (And had a unit test for this exactly issue as well). See https://codereview.chromium.org/1563633002
,
Mar 10 2016
So this is basically a duplicate of issue 575213 , right? Perhaps we should mark it as such?
,
Mar 10 2016
Hi, Thanks for looking into this. Great progress. So it would seem that you have already identified the refactor problem and have fixed it under the other issue. Is this the case? If so when can we expect to see it appear in the stable release? In the meantime I have told our support team to advise customers who see the problem to first make sure the images on their pages do exist and secondly to disable the gzip filter if they are not able to alter the image paths. Thanks, Gary
,
Mar 10 2016
Yes. But M49 stable release won't have this fix, according to https://omahaproxy.appspot.com/. Matt, is a merge needed?
,
Mar 10 2016
Without a merge, it'll be in M50, which is going to hit stable around mid-April (see https://www.chromium.org/developers/calendar for *estimated* Chrome milestone releases to stable).
,
Mar 10 2016
So mid April without the Merge. What would it take to persuade you to do the merge to get it sooner ;) I can make good cakes, but may not package well from UK to US ;) Thanks, Gary
,
Mar 10 2016
Ahh, just assumed it would be in M49, given how far back I landed the patch, but looks like you're right. Since this is a fairly rare case in how we deal with one particular type of buggy server response, I don't think it's worth merging the fix.
,
Mar 10 2016
We tend to be very conservative with merges, particularly once a branch has gone stable (According to the calendar above, M49 is estimated to go to stable very soon). The main things that matter for merge decisions are impact and security. This doesn't seem to have much impact. Before the regression, about 0.0015% of main frame loads resulted in this error, and 0.011% subframe requests did. After the regression, failures maybe dropped by 1/3rd? And doesn't seem like a security issue.
,
Mar 10 2016
Chrome 49 has shipped already, a week or two ago. |
|||||||||||||||||||||||||
►
Sign in to add a comment |
|||||||||||||||||||||||||
Comment 1 by phistuck@chromium.org
, Mar 9 2016Labels: -Type-Bug -Pri-2 Pri-1 Type-Bug-Regression
Summary: Load events are not fired when images in iFrames fail to load (was: onLoad Events Not Fired If Page Contains Image Which Does Not Exist)