RESOLVED FIXED 69865
Crash in ScrollAnimator.cpp
https://bugs.webkit.org/show_bug.cgi?id=69865
Summary Crash in ScrollAnimator.cpp
Stephen Chenney
Reported 2011-10-11 13:41:16 PDT
Line 110 of ScrollAnimator.cpp is crashing - 11 reports so far for Chrome. Evidence suggests that this assertion: if (e.granularity() == ScrollByPageWheelEvent) { ASSERT(!e.deltaX()); would fail in the crash situations, because it implicitly verifies that verticalScrollbar is non-null. The root cause of the problem seems to be the specification of ScrollbyPageWheelEvent granularity for a horizontal scrollbar.
Attachments
Patch (54.87 KB, patch)
2011-10-26 13:23 PDT, Stephen Chenney
no flags
Patch (55.01 KB, patch)
2011-11-04 16:33 PDT, Stephen Chenney
no flags
Stephen Chenney
Comment 1 2011-10-12 07:38:40 PDT
I have tracked the issue down to this comment and related code in the chromium webkit port: // Synthesize mousewheel event from a scroll event. This is needed to // simulate middle mouse scrolling in some laptops. Use GetAsyncKeyState // for key state since we are synthesizing the input event. The code related to this synthetic event is capable of generating a horizontal page mouse wheel event that violates the existing assumptions in ScrollAnimator. The devices in question are laptops with TrackPoint interfaces, where there is a mode that enables the pointer to produce whole page horizontal mouse wheel events at the OS level (Windows and Linux). I believe that the best way to fix this is to add support for horizontal page mouse wheel scrolling in ScrollAnimator.
Stephen Chenney
Comment 2 2011-10-20 13:57:01 PDT
For those mac port folks on the CC list ... Is there even a way for a mac to generate a paged wheel event? As far as I can tell, CG events can only be per-pixel or per-line wheel scrolling. On chromium, or windows, this looks to be specific to a small set of devices.
Stephen Chenney
Comment 3 2011-10-26 13:23:16 PDT
Stephen Chenney
Comment 4 2011-10-26 13:26:24 PDT
Comment on attachment 112584 [details] Patch The new tests are disabled on mac and win (not chromium) because I cannot figure out how to generate a paging wheel event for those platforms. It seems that CoreGraphics does not support such events. Correct me if I'm wrong. Chromium mac results are different because it uses a different scrollbar theme that sets a min overlap on paging.
Martin Robinson
Comment 5 2011-10-26 13:46:22 PDT
Comment on attachment 112584 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=112584&action=review > LayoutTests/fast/events/platform-wheelevent-paging-xy-in-scrolling-div.html:58 > + <!-- This div is 200 pixels high. The content results in scrool bars on > + both edges, resulting in an effective content area of 185 x 185 on > + linux. The paging context overlap is 24 pixels. So one page of scroll > + moves the content by 185 - 24 -= 161 pixels. --> Does this mean the tests rely on scrollbar width? Scrollbar sizes can vary from platform to platform.
Stephen Chenney
Comment 6 2011-10-26 18:14:06 PDT
Yes, this test depends on scrollbar width. AFAIK you can't suppress the scrollbars while still enabling scrolling, but please let me know if that is not correct. As far as I know, we also try very hard to have scrollbar width match across platforms during layout tests so that both text and pixel expectations match across platforms. The test also depends on the scrollbar theme and other non-constants such as the percentage of a page scrolled per paging event and the minimum percentage to scroll per page. For example, the chromium mac port produces different scroll behavior. The solution I have for this is to have the expectations set to expect a FAIL for one of the shouldBe tests. This seems sufficient because the expectations still include the value that the test actually produced and hence will catch cases where the behavior changes.
WebKit Review Bot
Comment 7 2011-11-04 15:43:38 PDT
Comment on attachment 112584 [details] Patch Rejecting attachment 112584 [details] from commit-queue. Failed to run "['/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch', '--status-host=queues.webkit.org', '-..." exit_code: 2 Last 500 characters of output: form-wheelevent-paging-y-in-scrolling-page-expected.txt patching file LayoutTests/platform/mac/Skipped Hunk #1 FAILED at 450. 1 out of 1 hunk FAILED -- saving rejects to file LayoutTests/platform/mac/Skipped.rej patching file LayoutTests/platform/win/Skipped Hunk #1 FAILED at 1428. 1 out of 1 hunk FAILED -- saving rejects to file LayoutTests/platform/win/Skipped.rej Failed to run "[u'/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply', u'--reviewer', u'Anders Carlsson', u'--..." exit_code: 1 Full output: http://queues.webkit.org/results/10333116
Stephen Chenney
Comment 8 2011-11-04 16:33:08 PDT
WebKit Review Bot
Comment 9 2011-11-04 17:51:39 PDT
Comment on attachment 113731 [details] Patch Clearing flags on attachment: 113731 Committed r99339: <http://trac.webkit.org/changeset/99339>
WebKit Review Bot
Comment 10 2011-11-04 17:51:45 PDT
All reviewed patches have been landed. Closing bug.
Stephen Chenney
Comment 12 2011-11-05 06:39:20 PDT
The chromium-mac expectations need to be copied into the chromium-cg-mac expectations. Filed https://bugs.webkit.org/show_bug.cgi?id=71606 to track.
Note You need to log in before you can comment on or make changes to this bug.