<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[178699] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/178699">178699</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-01-20 00:25:55 -0800 (Tue, 20 Jan 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[GTK] Add API to change the WebKitWebView background color
https://bugs.webkit.org/show_bug.cgi?id=140610

Reviewed by Gustavo Noronha Silva.

Source/WebKit2:

When a color different than the default one (opaque white) is
used, the SetDrawsBackground message is sent to the WebProcess with
a False value to indicate WebCore to not render backgrounds. The
background color passed is saved in the WebPageProxy and used by
the backing store to fill the background before the actual
contents are rendered in the WebView.

* UIProcess/API/gtk/WebKitWebView.cpp:
(webkit_web_view_set_background_color):
(webkit_web_view_get_background_color):
* UIProcess/API/gtk/WebKitWebView.h:
* UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::WebPageProxy): Initialize m_backgroundColor member.
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::backgroundColor): Return m_backgroundColor.
(WebKit::WebPageProxy::setBackgroundColor): Set m_backgroundColor.
* UIProcess/cairo/BackingStoreCairo.cpp:
(WebKit::BackingStore::incorporateUpdate): Fill the damage region
with the WebPageProxy background color when the WebProcess is not
rendering backgrounds. If the background color is not fully opaque
we need to clear the region before filling it with the color.

Tools:

Add --bg-color command line option to MiniBrowser to be able to
manually test the API passing any RGBA color to MiniBrowser.
Also add a simple unit test to check that getting and setting
colors from the API point of view.

* MiniBrowser/gtk/BrowserWindow.c:
(browser_window_set_background_color):
* MiniBrowser/gtk/BrowserWindow.h:
* MiniBrowser/gtk/main.c:
(createBrowserWindow):
(parseBackgroundColor):
* TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
(testWebViewBackgroundColor):
(beforeAll):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewcpp">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewh">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkdocswebkit2gtksectionstxt">trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcesscairoBackingStoreCairocpp">trunk/Source/WebKit2/UIProcess/cairo/BackingStoreCairo.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsMiniBrowsergtkBrowserWindowc">trunk/Tools/MiniBrowser/gtk/BrowserWindow.c</a></li>
<li><a href="#trunkToolsMiniBrowsergtkBrowserWindowh">trunk/Tools/MiniBrowser/gtk/BrowserWindow.h</a></li>
<li><a href="#trunkToolsMiniBrowsergtkmainc">trunk/Tools/MiniBrowser/gtk/main.c</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2GtkTestWebKitWebViewcpp">trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Source/WebKit2/ChangeLog        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2015-01-19  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [GTK] Add API to change the WebKitWebView background color
+        https://bugs.webkit.org/show_bug.cgi?id=140610
+
+        Reviewed by Gustavo Noronha Silva.
+
+        When a color different than the default one (opaque white) is
+        used, the SetDrawsBackground message is sent to the WebProcess with
+        a False value to indicate WebCore to not render backgrounds. The
+        background color passed is saved in the WebPageProxy and used by
+        the backing store to fill the background before the actual
+        contents are rendered in the WebView.
+
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (webkit_web_view_set_background_color):
+        (webkit_web_view_get_background_color):
+        * UIProcess/API/gtk/WebKitWebView.h:
+        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::WebPageProxy): Initialize m_backgroundColor member.
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::backgroundColor): Return m_backgroundColor.
+        (WebKit::WebPageProxy::setBackgroundColor): Set m_backgroundColor.
+        * UIProcess/cairo/BackingStoreCairo.cpp:
+        (WebKit::BackingStore::incorporateUpdate): Fill the damage region
+        with the WebPageProxy background color when the WebProcess is not
+        rendering backgrounds. If the background color is not fully opaque
+        we need to clear the region before filling it with the color.
+
</ins><span class="cx"> 2015-01-19  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [SVG -&gt; OTF Converter] Flip the switch on
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -3504,3 +3504,71 @@
</span><span class="cx">     g_signal_emit(webView, signals[WEB_PROCESS_CRASHED], 0, &amp;returnValue);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+/**
+ * webkit_web_view_set_background_color:
+ * @web_view: a #WebKitWebView
+ * @rgba: a #GdkRGBA
+ *
+ * Sets the color that will be used to draw the @web_view background before
+ * the actual contents are rendered. Note that if the web page loaded in @web_view
+ * specifies a background color, it will take precedence over the @rgba color.
+ * By default the @web_view background color is opaque white.
+ * If the @rgba color is not fully opaque, the parent window must have a RGBA visual and
+ * #GtkWidget:app-paintable property set to %TRUE, for the transparencies to work.
+ *
+ * &lt;informalexample&gt;&lt;programlisting&gt;
+ * static void browser_window_set_background_color (BrowserWindow *window,
+ *                                                  const GdkRGBA *rgba)
+ * {
+ *     WebKitWebView *web_view;
+ *
+ *     if (rgba-&gt;alpha &lt; 1) {
+ *         GdkScreen *screen = gtk_window_get_screen (GTK_WINDOW (window));
+ *         GdkVisual *rgba_visual = gdk_screen_get_rgba_visual (screen);
+ *
+ *         if (!rgba_visual)
+ *              return;
+ *
+ *         gtk_widget_set_visual (GTK_WIDGET (window), rgba_visual);
+ *         gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE);
+ *     }
+ *
+ *     web_view = browser_window_get_web_view (window);
+ *     webkit_web_view_set_background_color (web_view, rgba);
+ * }
+ * &lt;/programlisting&gt;&lt;/informalexample&gt;
+ *
+ * Since: 2.8
+ */
+void webkit_web_view_set_background_color(WebKitWebView* webView, const GdkRGBA* rgba)
+{
+    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+    g_return_if_fail(rgba);
+
+    Color color(*rgba);
+    WebPageProxy* page = getPage(webView);
+    if (page-&gt;backgroundColor() == color)
+        return;
+
+    page-&gt;setBackgroundColor(color);
+    page-&gt;setDrawsBackground(color == Color::white);
+}
+
+/**
+ * webkit_web_view_get_background_color:
+ * @web_view: a #WebKitWebView
+ * @rgba: (out): a #GdkRGBA to fill in with the background color
+ *
+ * Gets the color that is used to draw the @web_view background before
+ * the actual contents are rendered.
+ * For more information see also webkit_web_view_set_background_color()
+ *
+ * Since: 2.8
+ */
+void webkit_web_view_get_background_color(WebKitWebView* webView, GdkRGBA* rgba)
+{
+    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+    g_return_if_fail(rgba);
+
+    *rgba = getPage(webView)-&gt;backgroundColor();
+}
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -474,6 +474,14 @@
</span><span class="cx"> WEBKIT_API WebKitUserContentManager *
</span><span class="cx"> webkit_web_view_get_user_content_manager             (WebKitWebView             *web_view);
</span><span class="cx"> 
</span><ins>+WEBKIT_API void
+webkit_web_view_set_background_color                 (WebKitWebView             *web_view,
+                                                      const GdkRGBA             *rgba);
+
+WEBKIT_API void
+webkit_web_view_get_background_color                 (WebKitWebView             *web_view,
+                                                      GdkRGBA                   *rgba);
+
</ins><span class="cx"> G_END_DECLS
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkdocswebkit2gtksectionstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -199,6 +199,8 @@
</span><span class="cx"> webkit_web_view_get_tls_info
</span><span class="cx"> webkit_web_view_get_snapshot
</span><span class="cx"> webkit_web_view_get_snapshot_finish
</span><ins>+webkit_web_view_set_background_color
+webkit_web_view_get_background_color
</ins><span class="cx"> 
</span><span class="cx"> &lt;SUBSECTION WebKitJavascriptResult&gt;
</span><span class="cx"> WebKitJavascriptResult
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -336,6 +336,9 @@
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     , m_isSmartInsertDeleteEnabled(TextChecker::isSmartInsertDeleteEnabled())
</span><span class="cx"> #endif
</span><ins>+#if PLATFORM(GTK)
+    , m_backgroundColor(Color::white)
+#endif
</ins><span class="cx">     , m_spellDocumentTag(0)
</span><span class="cx">     , m_hasSpellDocumentTag(false)
</span><span class="cx">     , m_pendingLearnOrIgnoreWordMessageCount(0)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -558,6 +558,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> #if PLATFORM(GTK)
</span><span class="cx">     PlatformWidget viewWidget();
</span><ins>+    const WebCore::Color&amp; backgroundColor() const { return m_backgroundColor; }
+    void setBackgroundColor(const WebCore::Color&amp; color) { m_backgroundColor = color; }
</ins><span class="cx"> #endif
</span><span class="cx"> #if USE(COORDINATED_GRAPHICS_MULTIPROCESS)
</span><span class="cx">     void commitPageTransitionViewport();
</span><span class="lines">@@ -1545,6 +1547,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(GTK)
</span><span class="cx">     String m_accessibilityPlugID;
</span><ins>+    WebCore::Color m_backgroundColor;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     int64_t m_spellDocumentTag;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcesscairoBackingStoreCairocpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/cairo/BackingStoreCairo.cpp (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/cairo/BackingStoreCairo.cpp        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Source/WebKit2/UIProcess/cairo/BackingStoreCairo.cpp        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -95,6 +95,15 @@
</span><span class="cx">     for (const auto&amp; updateRect : updateInfo.updateRects) {
</span><span class="cx">         IntRect srcRect = updateRect;
</span><span class="cx">         srcRect.move(-updateRectLocation.x(), -updateRectLocation.y());
</span><ins>+#if PLATFORM(GTK)
+        if (!m_webPageProxy.drawsBackground()) {
+            const WebCore::Color color = m_webPageProxy.backgroundColor();
+            if (color.hasAlpha())
+                graphicsContext.clearRect(srcRect);
+            if (color.alpha() &gt; 0)
+                graphicsContext.fillRect(srcRect, color, ColorSpaceDeviceRGB);
+        }
+#endif
</ins><span class="cx">         bitmap-&gt;paint(graphicsContext, deviceScaleFactor(), updateRect.location(), srcRect);
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Tools/ChangeLog        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2015-01-19  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [GTK] Add API to change the WebKitWebView background color
+        https://bugs.webkit.org/show_bug.cgi?id=140610
+
+        Reviewed by Gustavo Noronha Silva.
+
+        Add --bg-color command line option to MiniBrowser to be able to
+        manually test the API passing any RGBA color to MiniBrowser.
+        Also add a simple unit test to check that getting and setting
+        colors from the API point of view.
+
+        * MiniBrowser/gtk/BrowserWindow.c:
+        (browser_window_set_background_color):
+        * MiniBrowser/gtk/BrowserWindow.h:
+        * MiniBrowser/gtk/main.c:
+        (createBrowserWindow):
+        (parseBackgroundColor):
+        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
+        (testWebViewBackgroundColor):
+        (beforeAll):
+
</ins><span class="cx"> 2015-01-19  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Win] Layout Test fast/xmlhttprequest/xmlhttprequest-no-file-access.html is failing
</span></span></pre></div>
<a id="trunkToolsMiniBrowsergtkBrowserWindowc"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/gtk/BrowserWindow.c (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/gtk/BrowserWindow.c        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Tools/MiniBrowser/gtk/BrowserWindow.c        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -924,3 +924,25 @@
</span><span class="cx"> 
</span><span class="cx">     webkit_web_view_run_javascript(window-&gt;webView, strstr(uri, &quot;javascript:&quot;), NULL, NULL, NULL);
</span><span class="cx"> }
</span><ins>+
+void browser_window_set_background_color(BrowserWindow *window, GdkRGBA *rgba)
+{
+    g_return_if_fail(BROWSER_IS_WINDOW(window));
+    g_return_if_fail(rgba);
+
+    GdkRGBA viewRGBA;
+    webkit_web_view_get_background_color(window-&gt;webView, &amp;viewRGBA);
+    if (gdk_rgba_equal(rgba, &amp;viewRGBA))
+        return;
+
+    if (rgba-&gt;alpha &lt; 1) {
+        GdkVisual *rgbaVisual = gdk_screen_get_rgba_visual(gtk_window_get_screen(GTK_WINDOW(window)));
+        if (!rgbaVisual)
+            return;
+
+        gtk_widget_set_visual(GTK_WIDGET(window), rgbaVisual);
+        gtk_widget_set_app_paintable(GTK_WIDGET(window), TRUE);
+    }
+
+    webkit_web_view_set_background_color(window-&gt;webView, rgba);
+}
</ins></span></pre></div>
<a id="trunkToolsMiniBrowsergtkBrowserWindowh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/gtk/BrowserWindow.h (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/gtk/BrowserWindow.h        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Tools/MiniBrowser/gtk/BrowserWindow.h        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -47,6 +47,7 @@
</span><span class="cx"> GtkWidget* browser_window_new(WebKitWebView*, GtkWindow*);
</span><span class="cx"> WebKitWebView* browser_window_get_view(BrowserWindow*);
</span><span class="cx"> void browser_window_load_uri(BrowserWindow *, const char *uri);
</span><ins>+void browser_window_set_background_color(BrowserWindow*, GdkRGBA*);
</ins><span class="cx"> 
</span><span class="cx"> G_END_DECLS
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsMiniBrowsergtkmainc"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/gtk/main.c (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/gtk/main.c        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Tools/MiniBrowser/gtk/main.c        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -37,6 +37,7 @@
</span><span class="cx"> 
</span><span class="cx"> static const gchar **uriArguments = NULL;
</span><span class="cx"> static const char *miniBrowserAboutScheme = &quot;minibrowser-about&quot;;
</span><ins>+static GdkRGBA *backgroundColor;
</ins><span class="cx"> 
</span><span class="cx"> typedef enum {
</span><span class="cx">     MINI_BROWSER_ERROR_INVALID_ABOUT_PATH
</span><span class="lines">@@ -60,6 +61,8 @@
</span><span class="cx"> {
</span><span class="cx">     GtkWidget *webView = webkit_web_view_new();
</span><span class="cx">     GtkWidget *mainWindow = browser_window_new(WEBKIT_WEB_VIEW(webView), NULL);
</span><ins>+    if (backgroundColor)
+        browser_window_set_background_color(BROWSER_WINDOW(mainWindow), backgroundColor);
</ins><span class="cx">     gchar *url = argumentToURL(uri);
</span><span class="cx"> 
</span><span class="cx">     if (webkitSettings)
</span><span class="lines">@@ -72,8 +75,21 @@
</span><span class="cx">     gtk_widget_show(mainWindow);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static gboolean parseBackgroundColor(const char *optionName, const char *value, gpointer data, GError **error)
+{
+    GdkRGBA rgba;
+    if (gdk_rgba_parse(&amp;rgba, value)) {
+        backgroundColor = gdk_rgba_copy(&amp;rgba);
+        return TRUE;
+    }
+
+    g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, &quot;Failed to parse '%s' as RGBA color&quot;, value);
+    return FALSE;
+}
+
</ins><span class="cx"> static const GOptionEntry commandLineOptions[] =
</span><span class="cx"> {
</span><ins>+    { &quot;bg-color&quot;, 0, 0, G_OPTION_ARG_CALLBACK, parseBackgroundColor, &quot;Background color&quot;, NULL },
</ins><span class="cx">     { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &amp;uriArguments, 0, &quot;[URL…]&quot; },
</span><span class="cx">     { 0, 0, 0, 0, 0, 0, 0 }
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2GtkTestWebKitWebViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp (178698 => 178699)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp        2015-01-20 05:58:26 UTC (rev 178698)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp        2015-01-20 08:25:55 UTC (rev 178699)
</span><span class="lines">@@ -729,6 +729,31 @@
</span><span class="cx">     g_assert(!webkit_web_view_is_playing_audio(test-&gt;m_webView));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static void testWebViewBackgroundColor(WebViewTest* test, gconstpointer)
+{
+    // White is the default background.
+    GdkRGBA rgba;
+    webkit_web_view_get_background_color(test-&gt;m_webView, &amp;rgba);
+    g_assert_cmpfloat(rgba.red, ==, 1);
+    g_assert_cmpfloat(rgba.green, ==, 1);
+    g_assert_cmpfloat(rgba.blue, ==, 1);
+    g_assert_cmpfloat(rgba.alpha, ==, 1);
+
+    // Set a different (semi-transparent red).
+    rgba.red = 1;
+    rgba.green = 0;
+    rgba.blue = 0;
+    rgba.alpha = 0.5;
+    webkit_web_view_set_background_color(test-&gt;m_webView, &amp;rgba);
+    g_assert_cmpfloat(rgba.red, ==, 1);
+    g_assert_cmpfloat(rgba.green, ==, 0);
+    g_assert_cmpfloat(rgba.blue, ==, 0);
+    g_assert_cmpfloat(rgba.alpha, ==, 0.5);
+
+    // The actual rendering can't be tested using unit tests, use
+    // MiniBrowser --bg-color=&quot;&lt;color-value&gt;&quot; for manually testing this API.
+}
+
</ins><span class="cx"> static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
</span><span class="cx"> {
</span><span class="cx">     if (message-&gt;method != SOUP_METHOD_GET) {
</span><span class="lines">@@ -761,6 +786,7 @@
</span><span class="cx">     WebViewTest::add(&quot;WebKitWebView&quot;, &quot;page-visibility&quot;, testWebViewPageVisibility);
</span><span class="cx">     NotificationWebViewTest::add(&quot;WebKitWebView&quot;, &quot;notification&quot;, testWebViewNotification);
</span><span class="cx">     IsPlayingAudioWebViewTest::add(&quot;WebKitWebView&quot;, &quot;is-playing-audio&quot;, testWebViewIsPlayingAudio);
</span><ins>+    WebViewTest::add(&quot;WebKitWebView&quot;, &quot;background-color&quot;, testWebViewBackgroundColor);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void afterAll()
</span></span></pre>
</div>
</div>

</body>
</html>