Title: [94313] trunk/Source/WebKit2
- Revision
- 94313
- Author
- [email protected]
- Date
- 2011-09-01 10:56:19 -0700 (Thu, 01 Sep 2011)
Log Message
[Qt] TouchWebView crashes with segmentation fault
https://bugs.webkit.org/show_bug.cgi?id=67308
Patch by Gopal Raghavan <[email protected]> on 2011-09-01
Reviewed by Benjamin Poulain.
If you instantiate TouchWebView element with height and width in a qml file and
load a url it crashes.
The functions setWidth() and setHeight() are called sequentially therefore it can happen
that computeViewportAttributes was called with a size like (width, 0) breaking the
assumption of the function that the size is valid. The patch makes sure we compute the
viewport when both height and width are valid.
* UIProcess/API/qt/qtouchwebview.cpp:
(QTouchWebViewPrivate::updateViewportConstraints):
* UIProcess/API/qt/tests/qmltests/TouchWebView/tst_load.qml: Added.
* UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadNegativeSizeView.qml: Added.
* UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadZeroSizeView.qml: Added.
* UIProcess/API/qt/tests/qmltests/qmltests.pro:
Modified Paths
Added Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (94312 => 94313)
--- trunk/Source/WebKit2/ChangeLog 2011-09-01 17:54:58 UTC (rev 94312)
+++ trunk/Source/WebKit2/ChangeLog 2011-09-01 17:56:19 UTC (rev 94313)
@@ -1,3 +1,24 @@
+2011-09-01 Gopal Raghavan <[email protected]>
+
+ [Qt] TouchWebView crashes with segmentation fault
+ https://bugs.webkit.org/show_bug.cgi?id=67308
+
+ Reviewed by Benjamin Poulain.
+
+ If you instantiate TouchWebView element with height and width in a qml file and
+ load a url it crashes.
+ The functions setWidth() and setHeight() are called sequentially therefore it can happen
+ that computeViewportAttributes was called with a size like (width, 0) breaking the
+ assumption of the function that the size is valid. The patch makes sure we compute the
+ viewport when both height and width are valid.
+
+ * UIProcess/API/qt/qtouchwebview.cpp:
+ (QTouchWebViewPrivate::updateViewportConstraints):
+ * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_load.qml: Added.
+ * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadNegativeSizeView.qml: Added.
+ * UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadZeroSizeView.qml: Added.
+ * UIProcess/API/qt/tests/qmltests/qmltests.pro:
+
2011-09-01 Ada Chan <[email protected]>
Gather _javascript_, FastMalloc, icon, font, and glyph page statistics in WebProcess::getWebCoreStatistics().
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qtouchwebview.cpp (94312 => 94313)
--- trunk/Source/WebKit2/UIProcess/API/qt/qtouchwebview.cpp 2011-09-01 17:54:58 UTC (rev 94312)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qtouchwebview.cpp 2011-09-01 17:56:19 UTC (rev 94313)
@@ -59,6 +59,9 @@
{
QSize availableSize = q->boundingRect().size().toSize();
+ if (availableSize.isEmpty())
+ return;
+
WebPageProxy* wkPage = toImpl(page.pageRef());
WebPreferences* wkPrefs = wkPage->pageGroup()->preferences();
Added: trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_load.qml (0 => 94313)
--- trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_load.qml (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_load.qml 2011-09-01 17:56:19 UTC (rev 94313)
@@ -0,0 +1,28 @@
+import QtQuick 2.0
+import QtTest 1.0
+import QtWebKit.experimental 5.0
+
+TouchWebView {
+ id: webView
+ height: 600
+ width: 400
+
+ SignalSpy {
+ id: spy
+ target: webView.page
+ signalName: "loadSucceeded"
+ }
+
+ TestCase {
+ name: "TouchWebViewLoad"
+
+ function test_load() {
+ compare(spy.count, 0)
+ webView.page.load(Qt.resolvedUrl("../common/test1.html"))
+ spy.wait()
+ compare(webView.page.title, "Test page 1")
+ compare(webView.width, 400)
+ compare(webView.height, 600)
+ }
+ }
+}
Added: trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadNegativeSizeView.qml (0 => 94313)
--- trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadNegativeSizeView.qml (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadNegativeSizeView.qml 2011-09-01 17:56:19 UTC (rev 94313)
@@ -0,0 +1,28 @@
+import QtQuick 2.0
+import QtTest 1.0
+import QtWebKit.experimental 5.0
+
+TouchWebView {
+ id: webView
+ height: -600
+ width: -400
+
+ SignalSpy {
+ id: spy
+ target: webView.page
+ signalName: "loadSucceeded"
+ }
+
+ TestCase {
+ name: "TouchWebViewLoad"
+
+ function test_loadNegativeSizeView() {
+ compare(spy.count, 0)
+ webView.page.load(Qt.resolvedUrl("../common/test1.html"))
+ spy.wait()
+ compare(webView.page.title, "Test page 1")
+ compare(webView.width, -400)
+ compare(webView.height, -600)
+ }
+ }
+}
Added: trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadZeroSizeView.qml (0 => 94313)
--- trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadZeroSizeView.qml (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/TouchWebView/tst_loadZeroSizeView.qml 2011-09-01 17:56:19 UTC (rev 94313)
@@ -0,0 +1,28 @@
+import QtQuick 2.0
+import QtTest 1.0
+import QtWebKit.experimental 5.0
+
+TouchWebView {
+ id: webView
+ height: 0
+ width: 0
+
+ SignalSpy {
+ id: spy
+ target: webView.page
+ signalName: "loadSucceeded"
+ }
+
+ TestCase {
+ name: "TouchWebViewLoad"
+
+ function test_loadZeroSizeView() {
+ compare(spy.count, 0)
+ webView.page.load(Qt.resolvedUrl("../common/test1.html"))
+ spy.wait()
+ compare(webView.page.title, "Test page 1")
+ compare(webView.width, 0)
+ compare(webView.height, 0)
+ }
+ }
+}
Modified: trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/qmltests.pro (94312 => 94313)
--- trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/qmltests.pro 2011-09-01 17:54:58 UTC (rev 94312)
+++ trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/qmltests.pro 2011-09-01 17:56:19 UTC (rev 94313)
@@ -13,5 +13,7 @@
OTHER_FILES += \
DesktopWebView/tst_properties.qml \
DesktopWebView/tst_navigationPolicyForUrl.qml \
- TouchWebView/tst_properties.qml
+ TouchWebView/tst_properties.qml \
+ TouchWebView/tst_loadZeroSizeView.qml \
+ TouchWebView/tst_loadNegativeSizeView.qml
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes