<!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>[210729] trunk/Source</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/210729">210729</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2017-01-13 00:24:54 -0800 (Fri, 13 Jan 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>[SOUP] Simplify cookie storage handling
https://bugs.webkit.org/show_bug.cgi?id=166967

Reviewed by Sergio Villar Senin.

Source/WebCore:

We currently have a global cookie storage, and several create() methods in SoupNetworkSession to create sessions
with different cookie jars. This could be simplified by moving the cookie storage handling to
NetworkStorageSession and removing all create() methods from SoupNetworkSession. This patch also removes the
default SoupNetworkSession in favor of using the default NetworkStorageSession.

* platform/network/NetworkStorageSession.h: Add a default cookie storage to be used when the
NetworkStorageSession doesn't have a platform soup session.
* platform/network/soup/CookieJarSoup.cpp: Remove the global cookie storage handling.
(WebCore::setCookiesFromDOM): Use NetworkStorageSession::cookieStorage() instead.
(WebCore::cookiesForSession): Ditto.
(WebCore::cookiesEnabled): Check the policy instead like all other ports do, since now we will always have a
default shared cookie jar.
(WebCore::getRawCookies): Use NetworkStorageSession::cookieStorage() instead.
(WebCore::deleteCookie): Ditto.
(WebCore::addCookie): Ditto.
(WebCore::getHostnamesWithCookies): Ditto.
(WebCore::deleteCookiesForHostnames): Ditto.
(WebCore::deleteAllCookies): Ditto.
* platform/network/soup/CookieJarSoup.h: Removed.
* platform/network/soup/CookieStorageSoup.cpp:
(WebCore::soupCookiesChanged): Use the cookie storage from the NetworkStorageSession::defaultStorageSession().
(WebCore::startObservingCookieChanges): Ditto.
(WebCore::stopObservingCookieChanges): Ditto.
* platform/network/soup/DNSSoup.cpp:
(WebCore::DNSResolveQueue::updateIsUsingProxy): Get the SoupSession from the NetworkStorageSession::defaultStorageSession().
(WebCore::DNSResolveQueue::platformResolve): Ditto.
* platform/network/soup/NetworkStorageSessionSoup.cpp:
(WebCore::NetworkStorageSession::NetworkStorageSession):
(WebCore::NetworkStorageSession::ensurePrivateBrowsingSession): Create a new SoupNetworkSession without
providing a cookie storage to ensure it creates its own private one.
(WebCore::NetworkStorageSession::switchToNewTestingSession): Ditto.
(WebCore::NetworkStorageSession::soupNetworkSession): Create the SoupNetworkSession on demand passing the global
shared cookie storage.
(WebCore::NetworkStorageSession::cookieStorage): Return the cookie storage from the SoupNetworkSession if we
have one, otherwise create the global shared one and return it.
* platform/network/soup/ResourceHandleSoup.cpp:
(WebCore::sessionFromContext): Get the SoupSession from the NetworkStorageSession::defaultStorageSession().
* platform/network/soup/SoupNetworkSession.cpp:
(WebCore::SoupNetworkSession::SoupNetworkSession): Remove all create methods and the unused constructor that
receives a SoupSession. Allow to pass a nullptr SoupCookieJar and create one in such case.
* platform/network/soup/SoupNetworkSession.h:

Source/WebKit2:

Get the SoupSession from NetworkStorageSession::defaultStorageSession().

* NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
(WebKit::CustomProtocolManager::registerScheme): Get the SoupSession from NetworkStorageSession::defaultStorageSession().
* NetworkProcess/efl/NetworkProcessMainEfl.cpp: Ditto.
* NetworkProcess/soup/NetworkProcessSoup.cpp:
(WebKit::NetworkProcess::userPreferredLanguagesChanged): Ditto.
(WebKit::NetworkProcess::platformInitializeNetworkProcess): SoupNetworkSession::clearOldSoupCache is static.
* WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
(WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy): Use the cookie storage from NetworkStorageSession::defaultStorageSession().
(WebKit::WebCookieManager::setCookiePersistentStorage): Ditto.
* WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
(WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts): Ditto.
* WebProcess/efl/WebProcessMainEfl.cpp:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkNetworkStorageSessionh">trunk/Source/WebCore/platform/network/NetworkStorageSession.h</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworksoupCookieJarSoupcpp">trunk/Source/WebCore/platform/network/soup/CookieJarSoup.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworksoupCookieStorageSoupcpp">trunk/Source/WebCore/platform/network/soup/CookieStorageSoup.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworksoupDNSSoupcpp">trunk/Source/WebCore/platform/network/soup/DNSSoup.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworksoupNetworkStorageSessionSoupcpp">trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworksoupResourceHandleSoupcpp">trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworksoupSoupNetworkSessioncpp">trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworksoupSoupNetworkSessionh">trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessCustomProtocolssoupCustomProtocolManagerSoupcpp">trunk/Source/WebKit2/NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesseflNetworkProcessMainEflcpp">trunk/Source/WebKit2/NetworkProcess/efl/NetworkProcessMainEfl.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesssoupNetworkProcessSoupcpp">trunk/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessCookiessoupWebCookieManagerSoupcpp">trunk/Source/WebKit2/WebProcess/Cookies/soup/WebCookieManagerSoup.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportsoupWebFrameNetworkingContextcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcesseflWebProcessMainEflcpp">trunk/Source/WebKit2/WebProcess/efl/WebProcessMainEfl.cpp</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreplatformnetworksoupCookieJarSouph">trunk/Source/WebCore/platform/network/soup/CookieJarSoup.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebCore/ChangeLog        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -1,3 +1,52 @@
</span><ins>+2017-01-13  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [SOUP] Simplify cookie storage handling
+        https://bugs.webkit.org/show_bug.cgi?id=166967
+
+        Reviewed by Sergio Villar Senin.
+
+        We currently have a global cookie storage, and several create() methods in SoupNetworkSession to create sessions
+        with different cookie jars. This could be simplified by moving the cookie storage handling to
+        NetworkStorageSession and removing all create() methods from SoupNetworkSession. This patch also removes the
+        default SoupNetworkSession in favor of using the default NetworkStorageSession.
+
+        * platform/network/NetworkStorageSession.h: Add a default cookie storage to be used when the
+        NetworkStorageSession doesn't have a platform soup session.
+        * platform/network/soup/CookieJarSoup.cpp: Remove the global cookie storage handling.
+        (WebCore::setCookiesFromDOM): Use NetworkStorageSession::cookieStorage() instead.
+        (WebCore::cookiesForSession): Ditto.
+        (WebCore::cookiesEnabled): Check the policy instead like all other ports do, since now we will always have a
+        default shared cookie jar.
+        (WebCore::getRawCookies): Use NetworkStorageSession::cookieStorage() instead.
+        (WebCore::deleteCookie): Ditto.
+        (WebCore::addCookie): Ditto.
+        (WebCore::getHostnamesWithCookies): Ditto.
+        (WebCore::deleteCookiesForHostnames): Ditto.
+        (WebCore::deleteAllCookies): Ditto.
+        * platform/network/soup/CookieJarSoup.h: Removed.
+        * platform/network/soup/CookieStorageSoup.cpp:
+        (WebCore::soupCookiesChanged): Use the cookie storage from the NetworkStorageSession::defaultStorageSession().
+        (WebCore::startObservingCookieChanges): Ditto.
+        (WebCore::stopObservingCookieChanges): Ditto.
+        * platform/network/soup/DNSSoup.cpp:
+        (WebCore::DNSResolveQueue::updateIsUsingProxy): Get the SoupSession from the NetworkStorageSession::defaultStorageSession().
+        (WebCore::DNSResolveQueue::platformResolve): Ditto.
+        * platform/network/soup/NetworkStorageSessionSoup.cpp:
+        (WebCore::NetworkStorageSession::NetworkStorageSession):
+        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession): Create a new SoupNetworkSession without
+        providing a cookie storage to ensure it creates its own private one.
+        (WebCore::NetworkStorageSession::switchToNewTestingSession): Ditto.
+        (WebCore::NetworkStorageSession::soupNetworkSession): Create the SoupNetworkSession on demand passing the global
+        shared cookie storage.
+        (WebCore::NetworkStorageSession::cookieStorage): Return the cookie storage from the SoupNetworkSession if we
+        have one, otherwise create the global shared one and return it.
+        * platform/network/soup/ResourceHandleSoup.cpp:
+        (WebCore::sessionFromContext): Get the SoupSession from the NetworkStorageSession::defaultStorageSession().
+        * platform/network/soup/SoupNetworkSession.cpp:
+        (WebCore::SoupNetworkSession::SoupNetworkSession): Remove all create methods and the unused constructor that
+        receives a SoupSession. Allow to pass a nullptr SoupCookieJar and create one in such case.
+        * platform/network/soup/SoupNetworkSession.h:
+
</ins><span class="cx"> 2017-01-12  Tim Horton  &lt;timothy_horton@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Keyboard accessory bar can appear on top of full-screen video
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkNetworkStorageSessionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/NetworkStorageSession.h (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/NetworkStorageSession.h        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebCore/platform/network/NetworkStorageSession.h        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -37,6 +37,7 @@
</span><span class="cx"> #if USE(SOUP)
</span><span class="cx"> #include &lt;wtf/Function.h&gt;
</span><span class="cx"> #include &lt;wtf/glib/GRefPtr.h&gt;
</span><ins>+typedef struct _SoupCookieJar SoupCookieJar;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -67,10 +68,11 @@
</span><span class="cx">     WEBCORE_EXPORT RetainPtr&lt;CFHTTPCookieStorageRef&gt; cookieStorage() const;
</span><span class="cx">     WEBCORE_EXPORT static void setCookieStoragePartitioningEnabled(bool);
</span><span class="cx"> #elif USE(SOUP)
</span><del>-    NetworkStorageSession(SessionID, std::unique_ptr&lt;SoupNetworkSession&gt;);
</del><ins>+    NetworkStorageSession(SessionID, std::unique_ptr&lt;SoupNetworkSession&gt;&amp;&amp;);
</ins><span class="cx">     ~NetworkStorageSession();
</span><span class="cx"> 
</span><span class="cx">     SoupNetworkSession&amp; soupNetworkSession() const;
</span><ins>+    SoupCookieJar* cookieStorage() const;
</ins><span class="cx">     void getCredentialFromPersistentStorage(const ProtectionSpace&amp;, Function&lt;void (Credential&amp;&amp;)&gt; completionHandler);
</span><span class="cx">     void saveCredentialToPersistentStorage(const ProtectionSpace&amp;, const Credential&amp;);
</span><span class="cx"> #else
</span><span class="lines">@@ -87,7 +89,8 @@
</span><span class="cx"> #if PLATFORM(COCOA) || USE(CFURLCONNECTION)
</span><span class="cx">     RetainPtr&lt;CFURLStorageSessionRef&gt; m_platformSession;
</span><span class="cx"> #elif USE(SOUP)
</span><del>-    std::unique_ptr&lt;SoupNetworkSession&gt; m_session;
</del><ins>+    mutable std::unique_ptr&lt;SoupNetworkSession&gt; m_session;
+    mutable GRefPtr&lt;SoupCookieJar&gt; m_cookieStorage;
</ins><span class="cx"> #if USE(LIBSECRET)
</span><span class="cx">     Function&lt;void (Credential&amp;&amp;)&gt; m_persisentStorageCompletionHandler;
</span><span class="cx">     GRefPtr&lt;GCancellable&gt; m_persisentStorageCancellable;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworksoupCookieJarSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/soup/CookieJarSoup.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/soup/CookieJarSoup.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebCore/platform/network/soup/CookieJarSoup.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -22,8 +22,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(SOUP)
</span><span class="cx"> 
</span><del>-#include &quot;CookieJarSoup.h&quot;
-
</del><span class="cx"> #include &quot;Cookie.h&quot;
</span><span class="cx"> #include &quot;GUniquePtrSoup.h&quot;
</span><span class="cx"> #include &quot;NetworkStorageSession.h&quot;
</span><span class="lines">@@ -37,42 +35,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-static SoupCookieJar* cookieJarForSession(const NetworkStorageSession&amp; session)
-{
-    return session.soupNetworkSession().cookieJar();
-}
-
-static GRefPtr&lt;SoupCookieJar&gt;&amp; defaultCookieJar()
-{
-    DEPRECATED_DEFINE_STATIC_LOCAL(GRefPtr&lt;SoupCookieJar&gt;, cookieJar, ());
-    return cookieJar;
-}
-
-SoupCookieJar* soupCookieJar()
-{
-    if (GRefPtr&lt;SoupCookieJar&gt;&amp; jar = defaultCookieJar())
-        return jar.get();
-
-    SoupCookieJar* jar = soup_cookie_jar_new();
-    soup_cookie_jar_set_accept_policy(jar, SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY);
-    setSoupCookieJar(jar);
-    return jar;
-}
-
-SoupCookieJar* createPrivateBrowsingCookieJar()
-{
-    SoupCookieJar* jar = soup_cookie_jar_new();
-
-    soup_cookie_jar_set_accept_policy(jar, SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY);
-
-    return jar;
-}
-
-void setSoupCookieJar(SoupCookieJar* jar)
-{
-    defaultCookieJar() = jar;
-}
-
</del><span class="cx"> static inline bool httpOnlyCookieExists(const GSList* cookies, const gchar* name, const gchar* path)
</span><span class="cx"> {
</span><span class="cx">     for (const GSList* iter = cookies; iter; iter = g_slist_next(iter)) {
</span><span class="lines">@@ -89,9 +51,7 @@
</span><span class="cx"> 
</span><span class="cx"> void setCookiesFromDOM(const NetworkStorageSession&amp; session, const URL&amp; firstParty, const URL&amp; url, const String&amp; value)
</span><span class="cx"> {
</span><del>-    SoupCookieJar* jar = cookieJarForSession(session);
-    if (!jar)
-        return;
</del><ins>+    SoupCookieJar* jar = session.cookieStorage();
</ins><span class="cx"> 
</span><span class="cx">     GUniquePtr&lt;SoupURI&gt; origin = url.createSoupURI();
</span><span class="cx">     GUniquePtr&lt;SoupURI&gt; firstPartyURI = firstParty.createSoupURI();
</span><span class="lines">@@ -123,12 +83,8 @@
</span><span class="cx"> 
</span><span class="cx"> static String cookiesForSession(const NetworkStorageSession&amp; session, const URL&amp; url, bool forHTTPHeader)
</span><span class="cx"> {
</span><del>-    SoupCookieJar* jar = cookieJarForSession(session);
-    if (!jar)
-        return String();
-
</del><span class="cx">     GUniquePtr&lt;SoupURI&gt; uri = url.createSoupURI();
</span><del>-    GUniquePtr&lt;char&gt; cookies(soup_cookie_jar_get_cookies(jar, uri.get(), forHTTPHeader));
</del><ins>+    GUniquePtr&lt;char&gt; cookies(soup_cookie_jar_get_cookies(session.cookieStorage(), uri.get(), forHTTPHeader));
</ins><span class="cx">     return String::fromUTF8(cookies.get());
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -144,18 +100,15 @@
</span><span class="cx"> 
</span><span class="cx"> bool cookiesEnabled(const NetworkStorageSession&amp; session, const URL&amp; /*firstParty*/, const URL&amp; /*url*/)
</span><span class="cx"> {
</span><del>-    return !!cookieJarForSession(session);
</del><ins>+    auto policy = soup_cookie_jar_get_accept_policy(session.cookieStorage());
+    return policy == SOUP_COOKIE_JAR_ACCEPT_ALWAYS || policy == SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool getRawCookies(const NetworkStorageSession&amp; session, const URL&amp; /*firstParty*/, const URL&amp; url, Vector&lt;Cookie&gt;&amp; rawCookies)
</span><span class="cx"> {
</span><span class="cx">     rawCookies.clear();
</span><del>-    SoupCookieJar* jar = cookieJarForSession(session);
-    if (!jar)
-        return false;
-
</del><span class="cx">     GUniquePtr&lt;SoupURI&gt; uri = url.createSoupURI();
</span><del>-    GUniquePtr&lt;GSList&gt; cookies(soup_cookie_jar_get_cookie_list(jar, uri.get(), TRUE));
</del><ins>+    GUniquePtr&lt;GSList&gt; cookies(soup_cookie_jar_get_cookie_list(session.cookieStorage(), uri.get(), TRUE));
</ins><span class="cx">     if (!cookies)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="lines">@@ -172,9 +125,7 @@
</span><span class="cx"> 
</span><span class="cx"> void deleteCookie(const NetworkStorageSession&amp; session, const URL&amp; url, const String&amp; name)
</span><span class="cx"> {
</span><del>-    SoupCookieJar* jar = cookieJarForSession(session);
-    if (!jar)
-        return;
</del><ins>+    SoupCookieJar* jar = session.cookieStorage();
</ins><span class="cx"> 
</span><span class="cx">     GUniquePtr&lt;SoupURI&gt; uri = url.createSoupURI();
</span><span class="cx">     GUniquePtr&lt;GSList&gt; cookies(soup_cookie_jar_get_cookie_list(jar, uri.get(), TRUE));
</span><span class="lines">@@ -217,13 +168,12 @@
</span><span class="cx"> 
</span><span class="cx"> void addCookie(const NetworkStorageSession&amp; session, const URL&amp;, const Cookie&amp; cookie)
</span><span class="cx"> {
</span><del>-    soup_cookie_jar_add_cookie(cookieJarForSession(session), toSoupCookie(cookie));
</del><ins>+    soup_cookie_jar_add_cookie(session.cookieStorage(), toSoupCookie(cookie));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void getHostnamesWithCookies(const NetworkStorageSession&amp; session, HashSet&lt;String&gt;&amp; hostnames)
</span><span class="cx"> {
</span><del>-    SoupCookieJar* cookieJar = cookieJarForSession(session);
-    GUniquePtr&lt;GSList&gt; cookies(soup_cookie_jar_all_cookies(cookieJar));
</del><ins>+    GUniquePtr&lt;GSList&gt; cookies(soup_cookie_jar_all_cookies(session.cookieStorage()));
</ins><span class="cx">     for (GSList* item = cookies.get(); item; item = g_slist_next(item)) {
</span><span class="cx">         SoupCookie* cookie = static_cast&lt;SoupCookie*&gt;(item-&gt;data);
</span><span class="cx">         if (cookie-&gt;domain)
</span><span class="lines">@@ -234,9 +184,11 @@
</span><span class="cx"> 
</span><span class="cx"> void deleteCookiesForHostnames(const NetworkStorageSession&amp; session, const Vector&lt;String&gt;&amp; hostnames)
</span><span class="cx"> {
</span><ins>+    SoupCookieJar* cookieJar = session.cookieStorage();
+
</ins><span class="cx">     for (const auto&amp; hostname : hostnames) {
</span><span class="cx">         CString hostNameString = hostname.utf8();
</span><del>-        SoupCookieJar* cookieJar = cookieJarForSession(session);
</del><ins>+
</ins><span class="cx">         GUniquePtr&lt;GSList&gt; cookies(soup_cookie_jar_all_cookies(cookieJar));
</span><span class="cx">         for (GSList* item = cookies.get(); item; item = g_slist_next(item)) {
</span><span class="cx">             SoupCookie* cookie = static_cast&lt;SoupCookie*&gt;(item-&gt;data);
</span><span class="lines">@@ -249,7 +201,7 @@
</span><span class="cx"> 
</span><span class="cx"> void deleteAllCookies(const NetworkStorageSession&amp; session)
</span><span class="cx"> {
</span><del>-    SoupCookieJar* cookieJar = cookieJarForSession(session);
</del><ins>+    SoupCookieJar* cookieJar = session.cookieStorage();
</ins><span class="cx">     GUniquePtr&lt;GSList&gt; cookies(soup_cookie_jar_all_cookies(cookieJar));
</span><span class="cx">     for (GSList* item = cookies.get(); item; item = g_slist_next(item)) {
</span><span class="cx">         SoupCookie* cookie = static_cast&lt;SoupCookie*&gt;(item-&gt;data);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworksoupCookieJarSouph"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/platform/network/soup/CookieJarSoup.h (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/soup/CookieJarSoup.h        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebCore/platform/network/soup/CookieJarSoup.h        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -1,41 +0,0 @@
</span><del>-/*
- * Copyright (C) 2008 Xan Lopez &lt;xan@gnome.org&gt;
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef CookieJarSoup_h
-#define CookieJarSoup_h
-
-#include &lt;libsoup/soup.h&gt;
-
-namespace WebCore {
-
-SoupCookieJar* soupCookieJar();
-void setSoupCookieJar(SoupCookieJar*);
-
-SoupCookieJar* createPrivateBrowsingCookieJar();
-
-}
-
-#endif
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworksoupCookieStorageSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/soup/CookieStorageSoup.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/soup/CookieStorageSoup.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebCore/platform/network/soup/CookieStorageSoup.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -21,18 +21,16 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(SOUP)
</span><span class="cx"> 
</span><del>-#include &quot;CookieJarSoup.h&quot;
-#include &quot;NotImplemented.h&quot;
</del><ins>+#include &quot;NetworkStorageSession.h&quot;
+#include &lt;libsoup/soup.h&gt;
</ins><span class="cx"> 
</span><del>-#include &lt;stdio.h&gt;
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> static CookieChangeCallbackPtr cookieChangeCallback;
</span><span class="cx"> 
</span><del>-static void soupCookiesChanged(SoupCookieJar* jar, SoupCookie*, SoupCookie*, gpointer)
</del><ins>+static void soupCookiesChanged(SoupCookieJar* jar)
</ins><span class="cx"> {
</span><del>-    if (jar != soupCookieJar())
</del><ins>+    if (jar != NetworkStorageSession::defaultStorageSession().cookieStorage())
</ins><span class="cx">         return;
</span><span class="cx">     cookieChangeCallback();
</span><span class="cx"> }
</span><span class="lines">@@ -42,13 +40,13 @@
</span><span class="cx">     ASSERT(!cookieChangeCallback);
</span><span class="cx">     cookieChangeCallback = callback;
</span><span class="cx"> 
</span><del>-    g_signal_connect(soupCookieJar(), &quot;changed&quot;, G_CALLBACK(soupCookiesChanged), 0);
</del><ins>+    g_signal_connect(NetworkStorageSession::defaultStorageSession().cookieStorage(), &quot;changed&quot;, G_CALLBACK(soupCookiesChanged), 0);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void stopObservingCookieChanges()
</span><span class="cx"> {
</span><del>-    g_signal_handlers_disconnect_by_func(soupCookieJar(), reinterpret_cast&lt;void*&gt;(soupCookiesChanged), 0);
-    cookieChangeCallback = 0;
</del><ins>+    g_signal_handlers_disconnect_by_func(NetworkStorageSession::defaultStorageSession().cookieStorage(), reinterpret_cast&lt;void*&gt;(soupCookiesChanged), nullptr);
+    cookieChangeCallback = nullptr;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworksoupDNSSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/soup/DNSSoup.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/soup/DNSSoup.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebCore/platform/network/soup/DNSSoup.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(SOUP)
</span><span class="cx"> 
</span><ins>+#include &quot;NetworkStorageSession.h&quot;
</ins><span class="cx"> #include &quot;SoupNetworkSession.h&quot;
</span><span class="cx"> #include &lt;libsoup/soup.h&gt;
</span><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="lines">@@ -78,7 +79,7 @@
</span><span class="cx"> void DNSResolveQueue::updateIsUsingProxy()
</span><span class="cx"> {
</span><span class="cx">     GRefPtr&lt;GProxyResolver&gt; resolver;
</span><del>-    g_object_get(SoupNetworkSession::defaultSession().soupSession(), &quot;proxy-resolver&quot;, &amp;resolver.outPtr(), nullptr);
</del><ins>+    g_object_get(NetworkStorageSession::defaultStorageSession().soupNetworkSession().soupSession(), &quot;proxy-resolver&quot;, &amp;resolver.outPtr(), nullptr);
</ins><span class="cx">     ASSERT(resolver);
</span><span class="cx"> 
</span><span class="cx">     g_proxy_resolver_lookup_async(resolver.get(), &quot;http://example.com/&quot;, nullptr, proxyResolvedForHttpUriCallback, &amp;m_isUsingProxy);
</span><span class="lines">@@ -94,7 +95,7 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx"> 
</span><del>-    soup_session_prefetch_dns(SoupNetworkSession::defaultSession().soupSession(), hostname.utf8().data(), nullptr, resolvedCallback, nullptr);
</del><ins>+    soup_session_prefetch_dns(NetworkStorageSession::defaultStorageSession().soupNetworkSession().soupSession(), hostname.utf8().data(), nullptr, resolvedCallback, nullptr);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void prefetchDNS(const String&amp; hostname)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworksoupNetworkStorageSessionSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-NetworkStorageSession::NetworkStorageSession(SessionID sessionID, std::unique_ptr&lt;SoupNetworkSession&gt; session)
</del><ins>+NetworkStorageSession::NetworkStorageSession(SessionID sessionID, std::unique_ptr&lt;SoupNetworkSession&gt;&amp;&amp; session)
</ins><span class="cx">     : m_sessionID(sessionID)
</span><span class="cx">     , m_session(WTFMove(session))
</span><span class="cx"> {
</span><span class="lines">@@ -76,22 +76,40 @@
</span><span class="cx"> 
</span><span class="cx"> void NetworkStorageSession::ensurePrivateBrowsingSession(SessionID sessionID, const String&amp;)
</span><span class="cx"> {
</span><del>-    auto session = std::make_unique&lt;NetworkStorageSession&gt;(sessionID, SoupNetworkSession::createPrivateBrowsingSession());
</del><span class="cx">     ASSERT(sessionID != SessionID::defaultSessionID());
</span><span class="cx">     ASSERT(!globalSessionMap().contains(sessionID));
</span><del>-    globalSessionMap().add(sessionID, WTFMove(session));
</del><ins>+    globalSessionMap().add(sessionID, std::make_unique&lt;NetworkStorageSession&gt;(sessionID, std::make_unique&lt;SoupNetworkSession&gt;()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkStorageSession::switchToNewTestingSession()
</span><span class="cx"> {
</span><del>-    defaultSession() = std::make_unique&lt;NetworkStorageSession&gt;(SessionID::defaultSessionID(), SoupNetworkSession::createTestingSession());
</del><ins>+    defaultSession() = std::make_unique&lt;NetworkStorageSession&gt;(SessionID::defaultSessionID(), std::make_unique&lt;SoupNetworkSession&gt;());
+    // FIXME: Creating a testing session is losing soup session values set when initializing the network process.
+    g_object_set(defaultSession()-&gt;soupNetworkSession().soupSession(), &quot;accept-language&quot;, &quot;en-us&quot;, nullptr);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> SoupNetworkSession&amp; NetworkStorageSession::soupNetworkSession() const
</span><span class="cx"> {
</span><del>-    return m_session ? *m_session : SoupNetworkSession::defaultSession();
</del><ins>+    if (!m_session)
+        m_session = std::make_unique&lt;SoupNetworkSession&gt;(cookieStorage());
+    return *m_session;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+SoupCookieJar* NetworkStorageSession::cookieStorage() const
+{
+    if (m_session) {
+        m_cookieStorage = nullptr;
+        ASSERT(m_session-&gt;cookieJar());
+        return m_session-&gt;cookieJar();
+    }
+
+    if (!m_cookieStorage) {
+        m_cookieStorage = adoptGRef(soup_cookie_jar_new());
+        soup_cookie_jar_set_accept_policy(m_cookieStorage.get(), SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY);
+    }
+    return m_cookieStorage.get();
+}
+
</ins><span class="cx"> #if USE(LIBSECRET)
</span><span class="cx"> static const char* schemeFromProtectionSpaceServerType(ProtectionSpaceServerType serverType)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworksoupResourceHandleSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -31,7 +31,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(SOUP)
</span><span class="cx"> 
</span><del>-#include &quot;CookieJarSoup.h&quot;
</del><span class="cx"> #include &quot;CredentialStorage.h&quot;
</span><span class="cx"> #include &quot;FileSystem.h&quot;
</span><span class="cx"> #include &quot;GUniquePtrSoup.h&quot;
</span><span class="lines">@@ -81,7 +80,7 @@
</span><span class="cx"> static SoupSession* sessionFromContext(NetworkingContext* context)
</span><span class="cx"> {
</span><span class="cx">     if (!context || !context-&gt;isValid())
</span><del>-        return SoupNetworkSession::defaultSession().soupSession();
</del><ins>+        return NetworkStorageSession::defaultStorageSession().soupNetworkSession().soupSession();
</ins><span class="cx">     return context-&gt;storageSession().soupNetworkSession().soupSession();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworksoupSoupNetworkSessioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -30,7 +30,6 @@
</span><span class="cx"> #include &quot;SoupNetworkSession.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;AuthenticationChallenge.h&quot;
</span><del>-#include &quot;CookieJarSoup.h&quot;
</del><span class="cx"> #include &quot;CryptoDigest.h&quot;
</span><span class="cx"> #include &quot;FileSystem.h&quot;
</span><span class="cx"> #include &quot;GUniquePtrSoup.h&quot;
</span><span class="lines">@@ -93,31 +92,6 @@
</span><span class="cx">     return certificates;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SoupNetworkSession&amp; SoupNetworkSession::defaultSession()
-{
-    static NeverDestroyed&lt;SoupNetworkSession&gt; networkSession(soupCookieJar());
-    return networkSession;
-}
-
-std::unique_ptr&lt;SoupNetworkSession&gt; SoupNetworkSession::createPrivateBrowsingSession()
-{
-    return std::unique_ptr&lt;SoupNetworkSession&gt;(new SoupNetworkSession(soupCookieJar()));
-}
-
-std::unique_ptr&lt;SoupNetworkSession&gt; SoupNetworkSession::createTestingSession()
-{
-    auto cookieJar = adoptGRef(createPrivateBrowsingCookieJar());
-    auto newSoupSession = std::unique_ptr&lt;SoupNetworkSession&gt;(new SoupNetworkSession(cookieJar.get()));
-    // FIXME: Creating a testing session is losing soup session values set when initializing the network process.
-    g_object_set(newSoupSession-&gt;soupSession(), &quot;accept-language&quot;, &quot;en-us&quot;, nullptr);
-    return newSoupSession;
-}
-
-std::unique_ptr&lt;SoupNetworkSession&gt; SoupNetworkSession::createForSoupSession(SoupSession* soupSession)
-{
-    return std::unique_ptr&lt;SoupNetworkSession&gt;(new SoupNetworkSession(soupSession));
-}
-
</del><span class="cx"> static void authenticateCallback(SoupSession*, SoupMessage* soupMessage, SoupAuth* soupAuth, gboolean retrying)
</span><span class="cx"> {
</span><span class="cx">     RefPtr&lt;ResourceHandle&gt; handle = static_cast&lt;ResourceHandle*&gt;(g_object_get_data(G_OBJECT(soupMessage), &quot;handle&quot;));
</span><span class="lines">@@ -146,6 +120,12 @@
</span><span class="cx">     static const int maxConnections = 17;
</span><span class="cx">     static const int maxConnectionsPerHost = 6;
</span><span class="cx"> 
</span><ins>+    GRefPtr&lt;SoupCookieJar&gt; jar = cookieJar;
+    if (!jar) {
+        jar = adoptGRef(soup_cookie_jar_new());
+        soup_cookie_jar_set_accept_policy(jar.get(), SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY);
+    }
+
</ins><span class="cx">     g_object_set(m_soupSession.get(),
</span><span class="cx">         SOUP_SESSION_MAX_CONNS, maxConnections,
</span><span class="cx">         SOUP_SESSION_MAX_CONNS_PER_HOST, maxConnectionsPerHost,
</span><span class="lines">@@ -152,7 +132,7 @@
</span><span class="cx">         SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER,
</span><span class="cx">         SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_SNIFFER,
</span><span class="cx">         SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_PROXY_RESOLVER_DEFAULT,
</span><del>-        SOUP_SESSION_ADD_FEATURE, cookieJar,
</del><ins>+        SOUP_SESSION_ADD_FEATURE, jar.get(),
</ins><span class="cx">         SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
</span><span class="cx">         SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, TRUE,
</span><span class="cx">         SOUP_SESSION_SSL_STRICT, FALSE,
</span><span class="lines">@@ -174,12 +154,6 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SoupNetworkSession::SoupNetworkSession(SoupSession* soupSession)
-    : m_soupSession(soupSession)
-{
-    setupLogger();
-}
-
</del><span class="cx"> SoupNetworkSession::~SoupNetworkSession()
</span><span class="cx"> {
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworksoupSoupNetworkSessionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.h (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.h        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.h        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -46,13 +46,9 @@
</span><span class="cx"> class SoupNetworkSession {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(SoupNetworkSession); WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><ins>+    SoupNetworkSession(SoupCookieJar* = nullptr);
</ins><span class="cx">     ~SoupNetworkSession();
</span><span class="cx"> 
</span><del>-    static SoupNetworkSession&amp; defaultSession();
-    static std::unique_ptr&lt;SoupNetworkSession&gt; createPrivateBrowsingSession();
-    static std::unique_ptr&lt;SoupNetworkSession&gt; createTestingSession();
-    static std::unique_ptr&lt;SoupNetworkSession&gt; createForSoupSession(SoupSession*);
-
</del><span class="cx">     SoupSession* soupSession() const { return m_soupSession.get(); }
</span><span class="cx"> 
</span><span class="cx">     void setCookieJar(SoupCookieJar*);
</span><span class="lines">@@ -69,11 +65,6 @@
</span><span class="cx">     static void allowSpecificHTTPSCertificateForHost(const CertificateInfo&amp;, const String&amp; host);
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    friend class NeverDestroyed&lt;SoupNetworkSession&gt;;
-
-    SoupNetworkSession(SoupCookieJar*);
-    SoupNetworkSession(SoupSession*);
-
</del><span class="cx">     void setHTTPProxy(const char* httpProxy, const char* httpProxyExceptions);
</span><span class="cx"> 
</span><span class="cx">     void setupLogger();
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebKit2/ChangeLog        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2017-01-13  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [SOUP] Simplify cookie storage handling
+        https://bugs.webkit.org/show_bug.cgi?id=166967
+
+        Reviewed by Sergio Villar Senin.
+
+        Get the SoupSession from NetworkStorageSession::defaultStorageSession().
+
+        * NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
+        (WebKit::CustomProtocolManager::registerScheme): Get the SoupSession from NetworkStorageSession::defaultStorageSession().
+        * NetworkProcess/efl/NetworkProcessMainEfl.cpp: Ditto.
+        * NetworkProcess/soup/NetworkProcessSoup.cpp:
+        (WebKit::NetworkProcess::userPreferredLanguagesChanged): Ditto.
+        (WebKit::NetworkProcess::platformInitializeNetworkProcess): SoupNetworkSession::clearOldSoupCache is static.
+        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
+        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy): Use the cookie storage from NetworkStorageSession::defaultStorageSession().
+        (WebKit::WebCookieManager::setCookiePersistentStorage): Ditto.
+        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
+        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts): Ditto.
+        * WebProcess/efl/WebProcessMainEfl.cpp:
+
</ins><span class="cx"> 2017-01-12  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [SOUP] Do not use the legacy session ID in WebFrameNetworkingContext::storageSession()
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessCustomProtocolssoupCustomProtocolManagerSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebKit2/NetworkProcess/CustomProtocols/soup/CustomProtocolManagerSoup.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -24,6 +24,7 @@
</span><span class="cx"> #include &quot;DataReference.h&quot;
</span><span class="cx"> #include &quot;NetworkProcess.h&quot;
</span><span class="cx"> #include &quot;WebKitSoupRequestInputStream.h&quot;
</span><ins>+#include &lt;WebCore/NetworkStorageSession.h&gt;
</ins><span class="cx"> #include &lt;WebCore/NotImplemented.h&gt;
</span><span class="cx"> #include &lt;WebCore/ResourceError.h&gt;
</span><span class="cx"> #include &lt;WebCore/ResourceRequest.h&gt;
</span><span class="lines">@@ -90,7 +91,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto* genericRequestClass = static_cast&lt;SoupRequestClass*&gt;(g_type_class_ref(WEBKIT_TYPE_SOUP_REQUEST_GENERIC));
</span><span class="cx">     genericRequestClass-&gt;schemes = const_cast&lt;const char**&gt;(reinterpret_cast&lt;char**&gt;(m_registeredSchemes-&gt;pdata));
</span><del>-    soup_session_add_feature_by_type(SoupNetworkSession::defaultSession().soupSession(), WEBKIT_TYPE_SOUP_REQUEST_GENERIC);
</del><ins>+    soup_session_add_feature_by_type(NetworkStorageSession::defaultStorageSession().soupNetworkSession().soupSession(), WEBKIT_TYPE_SOUP_REQUEST_GENERIC);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void CustomProtocolManager::unregisterScheme(const String&amp;)
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesseflNetworkProcessMainEflcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/efl/NetworkProcessMainEfl.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/efl/NetworkProcessMainEfl.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebKit2/NetworkProcess/efl/NetworkProcessMainEfl.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> #include &quot;ChildProcessMain.h&quot;
</span><span class="cx"> #include &quot;NetworkProcess.h&quot;
</span><span class="cx"> #include &lt;Ecore.h&gt;
</span><ins>+#include &lt;WebCore/NetworkStorageSession.h&gt;
</ins><span class="cx"> #include &lt;WebCore/SoupNetworkSession.h&gt;
</span><span class="cx"> #include &lt;libsoup/soup.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -47,7 +48,7 @@
</span><span class="cx">         if (!ecore_main_loop_glib_integrate())
</span><span class="cx">             return false;
</span><span class="cx"> 
</span><del>-        SoupNetworkSession::defaultSession().setupHTTPProxyFromEnvironment();
</del><ins>+        NetworkStorageSession::defaultStorageSession().soupNetworkSession().setupHTTPProxyFromEnvironment();
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesssoupNetworkProcessSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include &quot;WebCookieManager.h&quot;
</span><span class="cx"> #include &lt;WebCore/CertificateInfo.h&gt;
</span><span class="cx"> #include &lt;WebCore/FileSystem.h&gt;
</span><ins>+#include &lt;WebCore/NetworkStorageSession.h&gt;
</ins><span class="cx"> #include &lt;WebCore/NotImplemented.h&gt;
</span><span class="cx"> #include &lt;WebCore/ResourceHandle.h&gt;
</span><span class="cx"> #include &lt;WebCore/SoupNetworkSession.h&gt;
</span><span class="lines">@@ -47,7 +48,7 @@
</span><span class="cx"> 
</span><span class="cx"> void NetworkProcess::userPreferredLanguagesChanged(const Vector&lt;String&gt;&amp; languages)
</span><span class="cx"> {
</span><del>-    SoupNetworkSession::defaultSession().setAcceptLanguages(languages);
</del><ins>+    NetworkStorageSession::defaultStorageSession().soupNetworkSession().setAcceptLanguages(languages);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void NetworkProcess::platformInitializeNetworkProcess(const NetworkProcessCreationParameters&amp; parameters)
</span><span class="lines">@@ -55,7 +56,7 @@
</span><span class="cx">     ASSERT(!parameters.diskCacheDirectory.isEmpty());
</span><span class="cx">     m_diskCacheDirectory = parameters.diskCacheDirectory;
</span><span class="cx"> 
</span><del>-    SoupNetworkSession::defaultSession().clearOldSoupCache(WebCore::directoryName(m_diskCacheDirectory));
</del><ins>+    SoupNetworkSession::clearOldSoupCache(WebCore::directoryName(m_diskCacheDirectory));
</ins><span class="cx"> 
</span><span class="cx">     NetworkCache::Cache::Parameters cacheParameters {
</span><span class="cx">         parameters.shouldEnableNetworkCacheEfficacyLogging
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessCookiessoupWebCookieManagerSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Cookies/soup/WebCookieManagerSoup.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Cookies/soup/WebCookieManagerSoup.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebKit2/WebProcess/Cookies/soup/WebCookieManagerSoup.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> #include &quot;ChildProcess.h&quot;
</span><span class="cx"> #include &quot;WebFrameNetworkingContext.h&quot;
</span><span class="cx"> #include &quot;WebKitSoupCookieJarSqlite.h&quot;
</span><del>-#include &lt;WebCore/CookieJarSoup.h&gt;
</del><ins>+#include &lt;WebCore/NetworkStorageSession.h&gt;
</ins><span class="cx"> #include &lt;WebCore/SoupNetworkSession.h&gt;
</span><span class="cx"> #include &lt;libsoup/soup.h&gt;
</span><span class="cx"> #include &lt;wtf/glib/GRefPtr.h&gt;
</span><span class="lines">@@ -46,26 +46,17 @@
</span><span class="cx"> 
</span><span class="cx"> HTTPCookieAcceptPolicy WebCookieManager::platformGetHTTPCookieAcceptPolicy()
</span><span class="cx"> {
</span><del>-    SoupCookieJar* cookieJar = WebCore::soupCookieJar();
-    SoupCookieJarAcceptPolicy soupPolicy;
-
-    HTTPCookieAcceptPolicy policy;
-
-    soupPolicy = soup_cookie_jar_get_accept_policy(cookieJar);
-    switch (soupPolicy) {
</del><ins>+    switch (soup_cookie_jar_get_accept_policy(NetworkStorageSession::defaultStorageSession().cookieStorage())) {
</ins><span class="cx">     case SOUP_COOKIE_JAR_ACCEPT_ALWAYS:
</span><del>-        policy = HTTPCookieAcceptPolicyAlways;
-        break;
</del><ins>+        return HTTPCookieAcceptPolicyAlways;
</ins><span class="cx">     case SOUP_COOKIE_JAR_ACCEPT_NEVER:
</span><del>-        policy = HTTPCookieAcceptPolicyNever;
-        break;
</del><ins>+        return HTTPCookieAcceptPolicyNever;
</ins><span class="cx">     case SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY:
</span><del>-        policy = HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain;
-        break;
-    default:
-        policy = HTTPCookieAcceptPolicyAlways;
</del><ins>+        return HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain;
</ins><span class="cx">     }
</span><del>-    return policy;
</del><ins>+
+    ASSERT_NOT_REACHED();
+    return HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebCookieManager::setCookiePersistentStorage(const String&amp; storagePath, uint32_t storageType)
</span><span class="lines">@@ -82,9 +73,9 @@
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    soup_cookie_jar_set_accept_policy(jar.get(), soup_cookie_jar_get_accept_policy(WebCore::soupCookieJar()));
-    SoupNetworkSession::defaultSession().setCookieJar(jar.get());
-    WebCore::setSoupCookieJar(jar.get());
</del><ins>+    auto&amp; storageSession = NetworkStorageSession::defaultStorageSession();
+    soup_cookie_jar_set_accept_policy(jar.get(), soup_cookie_jar_get_accept_policy(storageSession.cookieStorage()));
+    storageSession.soupNetworkSession().setCookieJar(jar.get());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportsoupWebFrameNetworkingContextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -31,7 +31,6 @@
</span><span class="cx"> #include &quot;SessionTracker.h&quot;
</span><span class="cx"> #include &quot;WebFrame.h&quot;
</span><span class="cx"> #include &quot;WebPage.h&quot;
</span><del>-#include &lt;WebCore/CookieJarSoup.h&gt;
</del><span class="cx"> #include &lt;WebCore/NetworkStorageSession.h&gt;
</span><span class="cx"> #include &lt;WebCore/SessionID.h&gt;
</span><span class="cx"> #include &lt;WebCore/Settings.h&gt;
</span><span class="lines">@@ -68,11 +67,10 @@
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SoupCookieJar* cookieJar = WebCore::soupCookieJar();
-    soup_cookie_jar_set_accept_policy(cookieJar, soupPolicy);
</del><ins>+    soup_cookie_jar_set_accept_policy(NetworkStorageSession::defaultStorageSession().cookieStorage(), soupPolicy);
</ins><span class="cx"> 
</span><span class="cx">     NetworkStorageSession::forEach([&amp;] (const NetworkStorageSession&amp; session) {
</span><del>-        soup_cookie_jar_set_accept_policy(session.soupNetworkSession().cookieJar(), soupPolicy);
</del><ins>+        soup_cookie_jar_set_accept_policy(session.cookieStorage(), soupPolicy);
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcesseflWebProcessMainEflcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/efl/WebProcessMainEfl.cpp (210728 => 210729)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/efl/WebProcessMainEfl.cpp        2017-01-13 08:17:13 UTC (rev 210728)
+++ trunk/Source/WebKit2/WebProcess/efl/WebProcessMainEfl.cpp        2017-01-13 08:24:54 UTC (rev 210729)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> #include &lt;Ecore_Evas.h&gt;
</span><span class="cx"> #include &lt;Edje.h&gt;
</span><span class="cx"> #include &lt;Efreet.h&gt;
</span><ins>+#include &lt;WebCore/NetworkStorageSession.h&gt;
</ins><span class="cx"> #include &lt;WebCore/SoupNetworkSession.h&gt;
</span><span class="cx"> #include &lt;libsoup/soup.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -98,7 +99,7 @@
</span><span class="cx">         if (!ecore_main_loop_glib_integrate())
</span><span class="cx">             return false;
</span><span class="cx"> 
</span><del>-        SoupNetworkSession::defaultSession().setupHTTPProxyFromEnvironment();
</del><ins>+        NetworkStorageSession::defaultStorageSession().soupNetworkSession().setupHTTPProxyFromEnvironment();
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>