Title: [186433] releases/WebKitGTK/webkit-2.8
Revision
186433
Author
[email protected]
Date
2015-07-07 03:22:13 -0700 (Tue, 07 Jul 2015)

Log Message

Merge r185955 - Do not send touch events to the slider's thumb when it does not have a renderer.
https://bugs.webkit.org/show_bug.cgi?id=146307
rdar://problem/21539399

Reviewed by Simon Fraser.

Bail out early if either the touch target or the renderer() is null.

Source/WebCore:

Test: fast/events/touch/input-range-with-thumb-display-none-crash.html

* html/shadow/SliderThumbElement.cpp:
(WebCore::findTouchWithIdentifier):
(WebCore::SliderThumbElement::handleTouchStart):
(WebCore::SliderThumbElement::handleTouchMove):
(WebCore::SliderThumbElement::handleTouchEndAndCancel):

LayoutTests:

* fast/events/touch/input-range-with-thumb-display-none-crash-expected.txt: Added.
* fast/events/touch/input-range-with-thumb-display-none-crash.html: Added.

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog (186432 => 186433)


--- releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog	2015-07-07 10:20:30 UTC (rev 186432)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog	2015-07-07 10:22:13 UTC (rev 186433)
@@ -1,3 +1,16 @@
+2015-06-25  Zalan Bujtas  <[email protected]>
+
+        Do not send touch events to the slider's thumb when it does not have a renderer.
+        https://bugs.webkit.org/show_bug.cgi?id=146307
+        rdar://problem/21539399
+
+        Reviewed by Simon Fraser.
+
+        Bail out early if either the touch target or the renderer() is null.
+
+        * fast/events/touch/input-range-with-thumb-display-none-crash-expected.txt: Added.
+        * fast/events/touch/input-range-with-thumb-display-none-crash.html: Added.
+
 2015-06-22  Zalan Bujtas  <[email protected]>
 
         REGRESSION(r169105) Dangling renderer pointer in SelectionSubtreeRoot::SelectionSubtreeData.

Added: releases/WebKitGTK/webkit-2.8/LayoutTests/platform/ios-simulator/ios/touch/input-range-with-thumb-display-none-crash-expected.txt (0 => 186433)


--- releases/WebKitGTK/webkit-2.8/LayoutTests/platform/ios-simulator/ios/touch/input-range-with-thumb-display-none-crash-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/platform/ios-simulator/ios/touch/input-range-with-thumb-display-none-crash-expected.txt	2015-07-07 10:22:13 UTC (rev 186433)
@@ -0,0 +1 @@
+Pass if no crash.  

Added: releases/WebKitGTK/webkit-2.8/LayoutTests/platform/ios-simulator/ios/touch/input-range-with-thumb-display-none-crash.html (0 => 186433)


--- releases/WebKitGTK/webkit-2.8/LayoutTests/platform/ios-simulator/ios/touch/input-range-with-thumb-display-none-crash.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/platform/ios-simulator/ios/touch/input-range-with-thumb-display-none-crash.html	2015-07-07 10:22:13 UTC (rev 186433)
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that touch events are handled correctly when the range's thumb is display:none</title>
+<script>
+    if (window.testRunner)
+    	testRunner.dumpAsText();
+</script>
+<style>
+	input[type=range] {
+		-webkit-appearance: none;
+	}
+
+	input[type=range]::-webkit-slider-runnable-track {
+		height: 5px;
+  		background: red;
+	}
+
+	input[type="range"]::-webkit-slider-thumb {
+    	-webkit-appearance: none;
+    	display: none;
+	}
+</style>
+</head>
+<body>
+    Pass if no crash.
+	<input type="range" id="range" min="0" max="300" step="5" value="0">
+</body>
+<script>
+	var event = document.createEvent('TouchEvent');
+	event.initUIEvent('touchstart', true, true);
+	event.view = window;
+	document.getElementById("range").dispatchEvent(event);
+</script>
+</html>

Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog (186432 => 186433)


--- releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog	2015-07-07 10:20:30 UTC (rev 186432)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog	2015-07-07 10:22:13 UTC (rev 186433)
@@ -1,3 +1,21 @@
+2015-06-25  Zalan Bujtas  <[email protected]>
+
+        Do not send touch events to the slider's thumb when it does not have a renderer.
+        https://bugs.webkit.org/show_bug.cgi?id=146307
+        rdar://problem/21539399
+
+        Reviewed by Simon Fraser.
+
+        Bail out early if either the touch target or the renderer() is null.
+
+        Test: fast/events/touch/input-range-with-thumb-display-none-crash.html
+
+        * html/shadow/SliderThumbElement.cpp:
+        (WebCore::findTouchWithIdentifier):
+        (WebCore::SliderThumbElement::handleTouchStart):
+        (WebCore::SliderThumbElement::handleTouchMove):
+        (WebCore::SliderThumbElement::handleTouchEndAndCancel):
+
 2015-06-25  Carlos Garcia Campos  <[email protected]>
 
         [GTK] Empty gtk-font-name setting causes WebProcess crash rendering pages

Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/html/shadow/SliderThumbElement.cpp (186432 => 186433)


--- releases/WebKitGTK/webkit-2.8/Source/WebCore/html/shadow/SliderThumbElement.cpp	2015-07-07 10:20:30 UTC (rev 186432)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/html/shadow/SliderThumbElement.cpp	2015-07-07 10:22:13 UTC (rev 186433)
@@ -418,11 +418,11 @@
     m_exclusiveTouchIdentifier = NoIdentifier;
 }
 
-static Touch* findTouchWithIdentifier(TouchList* list, unsigned identifier)
+static Touch* findTouchWithIdentifier(TouchList& list, unsigned identifier)
 {
-    unsigned length = list->length();
+    unsigned length = list.length();
     for (unsigned i = 0; i < length; ++i) {
-        Touch* touch = list->item(i);
+        Touch* touch = list.item(i);
         if (touch->identifier() == identifier)
             return touch;
     }
@@ -432,12 +432,17 @@
 void SliderThumbElement::handleTouchStart(TouchEvent* touchEvent)
 {
     TouchList* targetTouches = touchEvent->targetTouches();
+    if (!targetTouches)
+        return;
+
     if (targetTouches->length() != 1)
         return;
 
-    // Ignore the touch if it is not really inside the thumb.
     Touch* touch = targetTouches->item(0);
+    if (!renderer())
+        return;
     IntRect boundingBox = renderer()->absoluteBoundingBoxRect();
+    // Ignore the touch if it is not really inside the thumb.
     if (!boundingBox.contains(touch->pageX(), touch->pageY()))
         return;
 
@@ -453,7 +458,11 @@
     if (identifier == NoIdentifier)
         return;
 
-    Touch* touch = findTouchWithIdentifier(touchEvent->targetTouches(), identifier);
+    TouchList* targetTouches = touchEvent->targetTouches();
+    if (!targetTouches)
+        return;
+
+    Touch* touch = findTouchWithIdentifier(*targetTouches, identifier);
     if (!touch)
         return;
 
@@ -468,9 +477,12 @@
     if (identifier == NoIdentifier)
         return;
 
+    TouchList* targetTouches = touchEvent->targetTouches();
+    if (!targetTouches)
+        return;
     // If our exclusive touch still exists, it was not the touch
     // that ended, so we should not stop dragging.
-    Touch* exclusiveTouch = findTouchWithIdentifier(touchEvent->targetTouches(), identifier);
+    Touch* exclusiveTouch = findTouchWithIdentifier(*targetTouches, identifier);
     if (exclusiveTouch)
         return;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to