RESOLVED FIXED 44086
Back button after Google search result click broken
https://bugs.webkit.org/show_bug.cgi?id=44086
Summary Back button after Google search result click broken
Mihai Parparita
Reported 2010-08-16 19:02:00 PDT
To reproduce: 1. Go to http://www.google.com/ 2. Search for [test] 3. URL changes to http://www.google.com/#hl=en&source=hp&q=test&aq=f&aqi=g10&aql=&oq=&gs_rfai=CjppO1OtpTIzsAYmgjQOpw8H5CAAAAKoEBU_QuYKi&fp=57531420c0ae60ee (this is Google search results page that doesn't load a new page) 4. Click on the first result (test.com) 5. Press back Expected result: 1. Back at the search results for [test] Actual result: 1. Nothing happens, the back button is disabled I'm fairly certain this is caused by r65340 (which was to fix bug 42861). I can reproduce in today's nightly WebKit build (r65398), but not with Thursday's (r65222).
Attachments
Patch (10.42 KB, patch)
2010-08-17 08:11 PDT, Mihai Parparita
no flags
Patch (11.44 KB, patch)
2010-08-17 10:39 PDT, Mihai Parparita
no flags
Patch (15.36 KB, text/plain)
2010-08-24 10:23 PDT, Mihai Parparita
no flags
Mihai Parparita
Comment 1 2010-08-17 07:23:43 PDT
Test case: http://persistent.info/webkit/test-cases/google-result-click/results.html (click on the "result" link, the page will print PASS or FAIL) Background: For the search results pages that don't trigger a page reload, Google still wants to send a referrer with the query that was done. Therefore on result click, they create an iframe with a src of the form "http://www.google.com/url?sa=t&source=web&cd=1&ved=0CCMQFjAA&url=http%3A%2F%2Fwww.test.com%2F&rct=j&q=test&ei=YyJqTMbNNIOB8gaiqsmyBA&usg=AFQjCNH21KLjC0CBkjon2DwD_CZ0HApLMw&sig2=n3-oadI9v06M390S4tA7jw" (that's for a click on the first result of [test], which goes to www.test.com) That serves a a small Javascript snippet: <script>var a=parent,b=parent.google,c=location; if(a!=window&&b){if(b.r){b.r=0;a.location.href="http://www.test.com/";c.replace("about:blank");}}else{c.replace("http://www.test.com/");};</script><noscript><META http-equiv="refresh" content="0;URL='http://www.test.com/'"></noscript> parent.google.r is set to 1, so this boils down to parent.location.href = "http://www.test.com/" The reason why r65340 causes by this bug is because the parent.location.href happens inline (before onload), and is not (directly) in response to a user gesture, therefore the back/forward list is locked. Though I'm actually surprised that this is considered to be before onload, since we check targetFrame->loader()->documentLoader()->isLoadingInAPISense(), and the target frame should be the parent, which should have finished loading long ago.
Mihai Parparita
Comment 2 2010-08-17 07:26:08 PDT
(In reply to comment #1) > Though I'm actually surprised that this is considered to be before onload, since we check targetFrame->loader()->documentLoader()->isLoadingInAPISense(), and the target frame should be the parent, which should have finished loading long ago. Ah, I should have looked at isLoadingInAPISense more carefully: bool DocumentLoader::isLoadingInAPISense() const { // Once a frame has loaded, we no longer need to consider subresources, // but we still need to consider subframes. if (frameLoader()->state() != FrameStateComplete) { ... } return frameLoader()->subframeIsLoading(); }
Mihai Parparita
Comment 3 2010-08-17 08:11:25 PDT
Darin Fisher (:fishd, Google)
Comment 4 2010-08-17 09:21:01 PDT
Comment on attachment 64595 [details] Patch As discussed in person, I don't think this quite does what we want. I think we want to know if the 'load' event fired, but isMainFrameLoading could return true before that since it only inspects the state of the current frame.
Mihai Parparita
Comment 5 2010-08-17 09:22:17 PDT
Comment on attachment 64595 [details] Patch Nevermind about reviewing this, we discussed this in person and the isMainFrameLoading method isn't quite the right way to go.
Mihai Parparita
Comment 6 2010-08-17 10:39:05 PDT
WebKit Commit Bot
Comment 7 2010-08-17 12:25:20 PDT
Comment on attachment 64607 [details] Patch Rejecting patch 64607 from commit-queue. Failed to run "['WebKitTools/Scripts/run-webkit-tests', '--no-launch-safari', '--exit-after-n-failures=1', '--wait-for-httpd', '--ignore-tests', 'compositing', '--quiet']" exit_code: 1 Running build-dumprendertree Compiling Java tests make: Nothing to be done for `default'. Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests Testing 20854 test cases. transitions/change-values-during-transition.html -> failed Exiting early after 1 failures. 19757 tests run. 599.78s total testing time 19756 test cases (99%) succeeded 1 test case (<1%) had incorrect layout 281 test cases (1%) had stderr output Full output: http://queues.webkit.org/results/3755295
Mihai Parparita
Comment 8 2010-08-17 12:40:15 PDT
(In reply to comment #7) > transitions/change-values-during-transition.html -> failed I can't reproduce this locally (ran all the transitions tests 10 times), and per bug 28461, bug 27638 and bug 32946, that test is flaky. Darin, do you mind giving this a cq+ again?
WebKit Commit Bot
Comment 9 2010-08-17 16:40:29 PDT
Comment on attachment 64607 [details] Patch Clearing flags on attachment: 64607 Committed r65573: <http://trac.webkit.org/changeset/65573>
WebKit Commit Bot
Comment 10 2010-08-17 16:40:34 PDT
All reviewed patches have been landed. Closing bug.
WebKit Review Bot
Comment 11 2010-08-17 16:59:47 PDT
http://trac.webkit.org/changeset/65573 might have broken Qt Windows 32-bit Release
Eric Seidel (no email)
Comment 12 2010-08-17 17:13:21 PDT
Yes, it's a Leopard + CoreVideo problem. I should just skip all media and composition tests for the commit-queue. :(
Mihai Parparita
Comment 13 2010-08-17 17:36:58 PDT
(In reply to comment #11) > http://trac.webkit.org/changeset/65573 might have broken Qt Windows 32-bit Release Filed bug 44145 about that.
Mihai Parparita
Comment 14 2010-08-24 10:23:50 PDT
Mihai Parparita
Comment 15 2010-08-24 10:24:47 PDT
Comment on attachment 65291 [details] Patch Oops, attached to the wrong bug.
Note You need to log in before you can comment on or make changes to this bug.