<!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>[280528] trunk/Tools</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/280528">280528</a></dd>
<dt>Author</dt> <dd>lmoura@igalia.com</dd>
<dt>Date</dt> <dd>2021-08-02 07:30:24 -0700 (Mon, 02 Aug 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>[GLIB] Make CORS allowlist test wait for promise resolution
https://bugs.webkit.org/show_bug.cgi?id=228695

Reviewed by Michael Catanzaro.

<a href="http://trac.webkit.org/projects/webkit/changeset/278456">r278456</a> introduced a CORS allow list test that tries to fetch a
resource using the fetch() function, which returns a promise. This is
working on GTK but in WPE the test fails as the promise is not yet
resolved by the time the test variable is checked.

This commit changes the test to actually report the promise failure
through catch() and wait for its resolution before checking the values.

* TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
(testWebViewCORSAllowlist):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKitGLibTestWebKitWebViewcpp">trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (280527 => 280528)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog    2021-08-02 08:54:16 UTC (rev 280527)
+++ trunk/Tools/ChangeLog       2021-08-02 14:30:24 UTC (rev 280528)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2021-08-02  Lauro Moura  <lmoura@igalia.com>
+
+        [GLIB] Make CORS allowlist test wait for promise resolution
+        https://bugs.webkit.org/show_bug.cgi?id=228695
+
+        Reviewed by Michael Catanzaro.
+
+        r278456 introduced a CORS allow list test that tries to fetch a
+        resource using the fetch() function, which returns a promise. This is
+        working on GTK but in WPE the test fails as the promise is not yet
+        resolved by the time the test variable is checked.
+
+        This commit changes the test to actually report the promise failure
+        through catch() and wait for its resolution before checking the values.
+
+        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
+        (testWebViewCORSAllowlist):
+
</ins><span class="cx"> 2021-08-01  Fujii Hironori  <Hironori.Fujii@sony.com>
</span><span class="cx"> 
</span><span class="cx">         [Win][DumpRenderTree] Clean up IndexedDB files between tests
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKitGLibTestWebKitWebViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp (280527 => 280528)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp 2021-08-02 08:54:16 UTC (rev 280527)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp    2021-08-02 14:30:24 UTC (rev 280528)
</span><span class="lines">@@ -1618,18 +1618,28 @@
</span><span class="cx">             webkit_uri_scheme_request_finish(request, inputStream.get(), strlen(data), "text/html");
</span><span class="cx">         }, nullptr, nullptr);
</span><span class="cx"> 
</span><del>-    char html[] = "<html><script>let foo = 0; fetch('foo://bar/baz').then(response => { if (response.status === 200) foo = 42});</script></html>";
</del><ins>+    char html[] = "<html><script>let foo = 0; fetch('foo://bar/baz').then(response => { foo = response.status; }).catch(err => { foo = -1; });</script></html>";
+
+    auto waitForFooChanged = [&test]() {
+        GUniqueOutPtr<GError> error;
+        WebKitJavascriptResult* result;
+        JSCValue* jscvalue;
+        int value;
+        do {
+            result = test->runJavaScriptAndWaitUntilFinished("foo;", &error.outPtr());
+            g_assert_no_error(error.get());
+            jscvalue = webkit_javascript_result_get_js_value(result);
+            value = jsc_value_to_int32(jscvalue);
+            webkit_javascript_result_unref(result);
+        } while (!value);
+        return value;
+    };
+
+    // Request is not allowed, foo should be 0.
</ins><span class="cx">     webkit_web_view_load_html(test->m_webView, html, "http://example.com");
</span><span class="cx">     test->waitUntilLoadFinished();
</span><ins>+    g_assert_cmpint(waitForFooChanged(), ==, -1);
</ins><span class="cx"> 
</span><del>-    // Request is not allowed, foo should be 0.
-    GUniqueOutPtr<GError> error;
-    WebKitJavascriptResult* result = test->runJavaScriptAndWaitUntilFinished("foo;", &error.outPtr());
-    g_assert_no_error(error.get());
-    JSCValue* value = webkit_javascript_result_get_js_value(result);
-    g_assert_cmpint(jsc_value_to_int32(value), ==, 0);
-    webkit_javascript_result_unref(result);
-
</del><span class="cx">     // Allowlisting host alone does not work. Path is also required. foo should remain 0.
</span><span class="cx">     GUniquePtr<char*> allowlist(g_new(char*, 2));
</span><span class="cx">     allowlist.get()[0] = g_strdup("foo://*");
</span><span class="lines">@@ -1638,11 +1648,7 @@
</span><span class="cx"> 
</span><span class="cx">     webkit_web_view_load_html(test->m_webView, html, "http://example.com");
</span><span class="cx">     test->waitUntilLoadFinished();
</span><del>-    result = test->runJavaScriptAndWaitUntilFinished("foo;", &error.outPtr());
-    g_assert_no_error(error.get());
-    value = webkit_javascript_result_get_js_value(result);
-    g_assert_cmpint(jsc_value_to_int32(value), ==, 0);
-    webkit_javascript_result_unref(result);
</del><ins>+    g_assert_cmpint(waitForFooChanged(), ==, -1);
</ins><span class="cx"> 
</span><span class="cx">     // Finally let's properly allow our scheme. foo should now change to 42 when the request succeeds.
</span><span class="cx">     allowlist.reset(g_new(char*, 2));
</span><span class="lines">@@ -1652,11 +1658,7 @@
</span><span class="cx"> 
</span><span class="cx">     webkit_web_view_load_html(test->m_webView, html, "http://example.com");
</span><span class="cx">     test->waitUntilLoadFinished();
</span><del>-    result = test->runJavaScriptAndWaitUntilFinished("foo;", &error.outPtr());
-    g_assert_no_error(error.get());
-    value = webkit_javascript_result_get_js_value(result);
-    g_assert_cmpint(jsc_value_to_int32(value), ==, 42);
-    webkit_javascript_result_unref(result);
</del><ins>+    g_assert_cmpint(waitForFooChanged(), ==, 200);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if USE(SOUP2)
</span></span></pre>
</div>
</div>

</body>
</html>