Title: [199811] trunk
Revision
199811
Author
carlo...@webkit.org
Date
2016-04-21 03:53:51 -0700 (Thu, 21 Apr 2016)

Log Message

[GTK] WebKitWebView should claim the contents size as its natural size
https://bugs.webkit.org/show_bug.cgi?id=156835

Reviewed by Žan Doberšek.

Source/WebKit2:

And keep claiming 0 as its minimum size since it's scrollable.

* UIProcess/API/gtk/PageClientImpl.cpp:
(WebKit::PageClientImpl::didChangeContentSize): Call webkitWebViewBaseSetContentsSize().
* UIProcess/API/gtk/PageClientImpl.h:
* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseGetPreferredWidth): Return the contents width as natural width.
(webkitWebViewBaseGetPreferredHeight): Return the contents height as natural height.
(webkit_web_view_base_class_init): Add implementations of get_preferred_width/height.
(webkitWebViewBaseSetContentsSize): Save the contents size.
* UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

Tools:

Add test case to check the WebKitWebView preferred size.

* TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
(testWebViewPreferredSize):
(beforeAll):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (199810 => 199811)


--- trunk/Source/WebKit2/ChangeLog	2016-04-21 10:50:59 UTC (rev 199810)
+++ trunk/Source/WebKit2/ChangeLog	2016-04-21 10:53:51 UTC (rev 199811)
@@ -1,5 +1,24 @@
 2016-04-21  Carlos Garcia Campos  <cgar...@igalia.com>
 
+        [GTK] WebKitWebView should claim the contents size as its natural size
+        https://bugs.webkit.org/show_bug.cgi?id=156835
+
+        Reviewed by Žan Doberšek.
+
+        And keep claiming 0 as its minimum size since it's scrollable.
+
+        * UIProcess/API/gtk/PageClientImpl.cpp:
+        (WebKit::PageClientImpl::didChangeContentSize): Call webkitWebViewBaseSetContentsSize().
+        * UIProcess/API/gtk/PageClientImpl.h:
+        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+        (webkitWebViewBaseGetPreferredWidth): Return the contents width as natural width.
+        (webkitWebViewBaseGetPreferredHeight): Return the contents height as natural height.
+        (webkit_web_view_base_class_init): Add implementations of get_preferred_width/height.
+        (webkitWebViewBaseSetContentsSize): Save the contents size.
+        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
+
+2016-04-21  Carlos Garcia Campos  <cgar...@igalia.com>
+
         [GTK] WebKitWebView should propagate wheel events not handled by the web process
         https://bugs.webkit.org/show_bug.cgi?id=156834
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp (199810 => 199811)


--- trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp	2016-04-21 10:50:59 UTC (rev 199810)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp	2016-04-21 10:53:51 UTC (rev 199811)
@@ -253,6 +253,11 @@
         webkitWebViewSelectionDidChange(WEBKIT_WEB_VIEW(m_viewWidget));
 }
 
+void PageClientImpl::didChangeContentSize(const IntSize& size)
+{
+    webkitWebViewBaseSetContentsSize(WEBKIT_WEB_VIEW_BASE(m_viewWidget), size);
+}
+
 #if ENABLE(DRAG_SUPPORT)
 void PageClientImpl::startDrag(const WebCore::DragData& dragData, PassRefPtr<ShareableBitmap> dragImage)
 {

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h (199810 => 199811)


--- trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h	2016-04-21 10:50:59 UTC (rev 199810)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h	2016-04-21 10:53:51 UTC (rev 199811)
@@ -95,7 +95,7 @@
     void willEnterAcceleratedCompositingMode() override;
 
     void handleDownloadRequest(DownloadProxy*) override;
-    void didChangeContentSize(const WebCore::IntSize&) override { }
+    void didChangeContentSize(const WebCore::IntSize&) override;
     void didCommitLoadForMainFrame(const String& mimeType, bool useCustomContentProvider) override;
     void didFailLoadForMainFrame() override { }
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp (199810 => 199811)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp	2016-04-21 10:50:59 UTC (rev 199810)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp	2016-04-21 10:53:51 UTC (rev 199811)
@@ -191,6 +191,7 @@
     InputMethodFilter inputMethodFilter;
     KeyBindingTranslator keyBindingTranslator;
     TouchEventsMap touchEvents;
+    IntSize contentsSize;
 
     GtkWindow* toplevelOnScreenWindow;
     unsigned long toplevelFocusInEventID;
@@ -696,6 +697,20 @@
     drawingArea->setSize(viewRect.size(), IntSize(), IntSize());
 }
 
+static void webkitWebViewBaseGetPreferredWidth(GtkWidget* widget, gint* minimumSize, gint* naturalSize)
+{
+    WebKitWebViewBasePrivate* priv = WEBKIT_WEB_VIEW_BASE(widget)->priv;
+    *minimumSize = 0;
+    *naturalSize = priv->contentsSize.width();
+}
+
+static void webkitWebViewBaseGetPreferredHeight(GtkWidget* widget, gint* minimumSize, gint* naturalSize)
+{
+    WebKitWebViewBasePrivate* priv = WEBKIT_WEB_VIEW_BASE(widget)->priv;
+    *minimumSize = 0;
+    *naturalSize = priv->contentsSize.height();
+}
+
 static void webkitWebViewBaseMap(GtkWidget* widget)
 {
     GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->map(widget);
@@ -1165,6 +1180,8 @@
     widgetClass->unrealize = webkitWebViewBaseUnrealize;
     widgetClass->draw = webkitWebViewBaseDraw;
     widgetClass->size_allocate = webkitWebViewBaseSizeAllocate;
+    widgetClass->get_preferred_width = webkitWebViewBaseGetPreferredWidth;
+    widgetClass->get_preferred_height = webkitWebViewBaseGetPreferredHeight;
     widgetClass->map = webkitWebViewBaseMap;
     widgetClass->unmap = webkitWebViewBaseUnmap;
     widgetClass->focus = webkitWebViewBaseFocus;
@@ -1509,6 +1526,14 @@
         webkitWebViewBase->priv->inputMethodFilter.setCursorRect(editorState.postLayoutData().caretRectAtStart);
 }
 
+void webkitWebViewBaseSetContentsSize(WebKitWebViewBase* webkitWebViewBase, const IntSize& contentsSize)
+{
+    WebKitWebViewBasePrivate* priv = webkitWebViewBase->priv;
+    if (priv->contentsSize == contentsSize)
+        return;
+    priv->contentsSize = contentsSize;
+}
+
 void webkitWebViewBaseResetClickCounter(WebKitWebViewBase* webkitWebViewBase)
 {
     webkitWebViewBase->priv->clickCounter.reset();

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h (199810 => 199811)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h	2016-04-21 10:50:59 UTC (rev 199810)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h	2016-04-21 10:53:51 UTC (rev 199811)
@@ -55,6 +55,7 @@
 GdkEvent* webkitWebViewBaseTakeContextMenuEvent(WebKitWebViewBase*);
 void webkitWebViewBaseSetInputMethodState(WebKitWebViewBase*, bool enabled);
 void webkitWebViewBaseUpdateTextInputState(WebKitWebViewBase*);
+void webkitWebViewBaseSetContentsSize(WebKitWebViewBase*, const WebCore::IntSize&);
 
 void webkitWebViewBaseSetFocus(WebKitWebViewBase*, bool focused);
 bool webkitWebViewBaseIsInWindowActive(WebKitWebViewBase*);

Modified: trunk/Tools/ChangeLog (199810 => 199811)


--- trunk/Tools/ChangeLog	2016-04-21 10:50:59 UTC (rev 199810)
+++ trunk/Tools/ChangeLog	2016-04-21 10:53:51 UTC (rev 199811)
@@ -1,3 +1,16 @@
+2016-04-21  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] WebKitWebView should claim the contents size as its natural size
+        https://bugs.webkit.org/show_bug.cgi?id=156835
+
+        Reviewed by Žan Doberšek.
+
+        Add test case to check the WebKitWebView preferred size.
+
+        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
+        (testWebViewPreferredSize):
+        (beforeAll):
+
 2016-04-20  Simon Fraser  <simon.fra...@apple.com>
 
         Add content animation tests to benchmark_runner, and allow the runner to collect device data as part of the results

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp (199810 => 199811)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp	2016-04-21 10:50:59 UTC (rev 199810)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp	2016-04-21 10:53:51 UTC (rev 199811)
@@ -853,6 +853,19 @@
     // MiniBrowser --bg-color="<color-value>" for manually testing this API.
 }
 
+static void testWebViewPreferredSize(WebViewTest* test, gconstpointer)
+{
+    test->loadHtml("<html style='width: 325px; height: 615px'></html>", nullptr);
+    test->waitUntilLoadFinished();
+    test->showInWindowAndWaitUntilMapped();
+    GtkRequisition minimunSize, naturalSize;
+    gtk_widget_get_preferred_size(GTK_WIDGET(test->m_webView), &minimunSize, &naturalSize);
+    g_assert_cmpint(minimunSize.width, ==, 0);
+    g_assert_cmpint(minimunSize.height, ==, 0);
+    g_assert_cmpint(naturalSize.width, ==, 325);
+    g_assert_cmpint(naturalSize.height, ==, 615);
+}
+
 static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
 {
     if (message->method != SOUP_METHOD_GET) {
@@ -887,6 +900,7 @@
     NotificationWebViewTest::add("WebKitWebView", "notification", testWebViewNotification);
     IsPlayingAudioWebViewTest::add("WebKitWebView", "is-playing-audio", testWebViewIsPlayingAudio);
     WebViewTest::add("WebKitWebView", "background-color", testWebViewBackgroundColor);
+    WebViewTest::add("WebKitWebView", "preferred-size", testWebViewPreferredSize);
 }
 
 void afterAll()
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to