Title: [212626] trunk/Source
Revision
212626
Author
carlo...@webkit.org
Date
2017-02-20 00:30:50 -0800 (Mon, 20 Feb 2017)

Log Message

REGRESSION(r212345): [GTK] ASSERT(cookieChangeCallbackMap().contains(jar)) failed in WebCore::stopObservingCookieChanges:54
https://bugs.webkit.org/show_bug.cgi?id=168375

Reviewed by Alex Christensen.

Source/WebCore:

Simplify the way cookie storage is handled in NetworkStorageSessionSoup. Now we always keep a reference to the
cookie jar, no matter if we have a session or not, that is always kept in sync with the one actually used by the
session. We always connect to the changed signal of the current cookie jar and notify the observer if it has been
set.

* platform/network/NetworkStorageSession.h:
* platform/network/soup/CookieStorageSoup.cpp:
(WebCore::startObservingCookieChanges): Remove this implementation and add an ASSERT to ensure we don't use this anymore.
(WebCore::stopObservingCookieChanges): Ditto.
(WebCore::cookieChangeCallbackMap): Deleted.
(WebCore::soupCookiesChanged): Deleted.
* platform/network/soup/NetworkStorageSessionSoup.cpp:
(WebCore::NetworkStorageSession::NetworkStorageSession): Initialize the cookie storage.
(WebCore::NetworkStorageSession::~NetworkStorageSession): Disconnect the changed signal.
(WebCore::NetworkStorageSession::getOrCreateSoupNetworkSession): Always pass the current cookie storage.
(WebCore::NetworkStorageSession::cookiesDidChange): Notify the observer.
(WebCore::NetworkStorageSession::cookieStorage): Return the current cookie storage.
(WebCore::NetworkStorageSession::setCookieStorage): Update the current cookie storage and update the session if
needed too. We always have a valid cookie storage so if nullptr is given we create a new one.
(WebCore::NetworkStorageSession::setCookieObserverHandler): Set a cookie observer handler.

Source/WebKit2:

Simplify the cookies change notification. The current approach of the UI process telling the network process
when to start and stop observing cookie changes is quite fragile and error prone. In the GTK+ port we always
observe cookies, so our cookie manager always calls start in the constructor and stop in the destructor.
Everything would be a lot simpler if the network process always monitored cookies.

* NetworkProcess/soup/NetworkSessionSoup.cpp:
(WebKit::NetworkSessionSoup::NetworkSessionSoup): Set cookies observer handler for the session.
(WebKit::NetworkSessionSoup::~NetworkSessionSoup): Remove the cookies observer handler.
* UIProcess/API/gtk/WebKitCookieManager.cpp:
(_WebKitCookieManagerPrivate::~_WebKitCookieManagerPrivate): Remove the cookies observer callback.
(webkit_cookie_manager_class_init): Remove dispose implementation that is no longer needed.
(webkitCookieManagerCreate): Set the cookies observer callback.
(webkit_cookie_manager_set_persistent_storage): Remove code to start/stop observing cookies when the jar
changes, the network process deals with that now.
(webkitCookieManagerDispose): Deleted.
* UIProcess/WebCookieManagerProxy.cpp:
(WebKit::WebCookieManagerProxy::startObservingCookieChanges): Remove the optional callback method in favor of an
explicit method to the set the callback that doesn't send the StartObservingCookieChanges message to the network
process.
(WebKit::WebCookieManagerProxy::stopObservingCookieChanges): Do not change the callback map here.
(WebKit::WebCookieManagerProxy::setCookieObserverCallback): Add the callback to the map or remove the session if
nullptr is given.
* UIProcess/WebCookieManagerProxy.h:
* WebProcess/Cookies/WebCookieManager.cpp:
(WebKit::WebCookieManager::notifyCookiesDidChange): Send CookiesDidChange message to the UI process.
(WebKit::WebCookieManager::startObservingCookieChanges): Use notifyCookiesDidChange().
* WebProcess/Cookies/WebCookieManager.h:
* WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
(WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy): Set the policy on all sessions. Code moved from
WebFrameNetworkingContext since it doesn't belong there.
(WebKit::WebCookieManager::setCookiePersistentStorage): Use new method to set the cookie storage in the
NetworkStorageSession.
* WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
(WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts): Deleted.
* WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (212625 => 212626)


--- trunk/Source/WebCore/ChangeLog	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebCore/ChangeLog	2017-02-20 08:30:50 UTC (rev 212626)
@@ -1,3 +1,31 @@
+2017-02-20  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        REGRESSION(r212345): [GTK] ASSERT(cookieChangeCallbackMap().contains(jar)) failed in WebCore::stopObservingCookieChanges:54
+        https://bugs.webkit.org/show_bug.cgi?id=168375
+
+        Reviewed by Alex Christensen.
+
+        Simplify the way cookie storage is handled in NetworkStorageSessionSoup. Now we always keep a reference to the
+        cookie jar, no matter if we have a session or not, that is always kept in sync with the one actually used by the
+        session. We always connect to the changed signal of the current cookie jar and notify the observer if it has been
+        set.
+
+        * platform/network/NetworkStorageSession.h:
+        * platform/network/soup/CookieStorageSoup.cpp:
+        (WebCore::startObservingCookieChanges): Remove this implementation and add an ASSERT to ensure we don't use this anymore.
+        (WebCore::stopObservingCookieChanges): Ditto.
+        (WebCore::cookieChangeCallbackMap): Deleted.
+        (WebCore::soupCookiesChanged): Deleted.
+        * platform/network/soup/NetworkStorageSessionSoup.cpp:
+        (WebCore::NetworkStorageSession::NetworkStorageSession): Initialize the cookie storage.
+        (WebCore::NetworkStorageSession::~NetworkStorageSession): Disconnect the changed signal.
+        (WebCore::NetworkStorageSession::getOrCreateSoupNetworkSession): Always pass the current cookie storage.
+        (WebCore::NetworkStorageSession::cookiesDidChange): Notify the observer.
+        (WebCore::NetworkStorageSession::cookieStorage): Return the current cookie storage.
+        (WebCore::NetworkStorageSession::setCookieStorage): Update the current cookie storage and update the session if
+        needed too. We always have a valid cookie storage so if nullptr is given we create a new one.
+        (WebCore::NetworkStorageSession::setCookieObserverHandler): Set a cookie observer handler.
+
 2017-02-19  Chris Dumez  <cdu...@apple.com>
 
         onbeforeunload event return value coercion is not per-spec

Modified: trunk/Source/WebCore/platform/network/NetworkStorageSession.h (212625 => 212626)


--- trunk/Source/WebCore/platform/network/NetworkStorageSession.h	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebCore/platform/network/NetworkStorageSession.h	2017-02-20 08:30:50 UTC (rev 212626)
@@ -74,6 +74,8 @@
     SoupNetworkSession* soupNetworkSession() const { return m_session.get(); };
     SoupNetworkSession& getOrCreateSoupNetworkSession() const;
     SoupCookieJar* cookieStorage() const;
+    void setCookieStorage(SoupCookieJar*);
+    void setCookieObserverHandler(Function<void ()>&&);
     void getCredentialFromPersistentStorage(const ProtectionSpace&, Function<void (Credential&&)> completionHandler);
     void saveCredentialToPersistentStorage(const ProtectionSpace&, const Credential&);
 #else
@@ -90,8 +92,11 @@
 #if PLATFORM(COCOA) || USE(CFURLCONNECTION)
     RetainPtr<CFURLStorageSessionRef> m_platformSession;
 #elif USE(SOUP)
+    static void cookiesDidChange(NetworkStorageSession*);
+
     mutable std::unique_ptr<SoupNetworkSession> m_session;
-    mutable GRefPtr<SoupCookieJar> m_cookieStorage;
+    GRefPtr<SoupCookieJar> m_cookieStorage;
+    Function<void ()> m_cookieObserverHandler;
 #if USE(LIBSECRET)
     Function<void (Credential&&)> m_persisentStorageCompletionHandler;
     GRefPtr<GCancellable> m_persisentStorageCancellable;

Modified: trunk/Source/WebCore/platform/network/soup/CookieStorageSoup.cpp (212625 => 212626)


--- trunk/Source/WebCore/platform/network/soup/CookieStorageSoup.cpp	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebCore/platform/network/soup/CookieStorageSoup.cpp	2017-02-20 08:30:50 UTC (rev 212626)
@@ -21,41 +21,18 @@
 
 #if USE(SOUP)
 
-#include "NetworkStorageSession.h"
-#include <libsoup/soup.h>
-#include <wtf/HashMap.h>
-#include <wtf/NeverDestroyed.h>
-
 namespace WebCore {
 
-static HashMap<SoupCookieJar*, std::function<void ()>>& cookieChangeCallbackMap()
+void startObservingCookieChanges(const NetworkStorageSession&, std::function<void ()>&&)
 {
-    static NeverDestroyed<HashMap<SoupCookieJar*, std::function<void ()>>> map;
-    return map;
+    ASSERT_NOT_REACHED();
 }
 
-static void soupCookiesChanged(SoupCookieJar* jar)
+void stopObservingCookieChanges(const NetworkStorageSession&)
 {
-    if (auto callback = cookieChangeCallbackMap().get(jar))
-        callback();
+    ASSERT_NOT_REACHED();
 }
 
-void startObservingCookieChanges(const NetworkStorageSession& storageSession, std::function<void ()>&& callback)
-{
-    auto* jar = storageSession.cookieStorage();
-    ASSERT(!cookieChangeCallbackMap().contains(jar));
-    cookieChangeCallbackMap().add(jar, WTFMove(callback));
-    g_signal_connect(jar, "changed", G_CALLBACK(soupCookiesChanged), nullptr);
 }
 
-void stopObservingCookieChanges(const NetworkStorageSession& storageSession)
-{
-    auto* jar = storageSession.cookieStorage();
-    ASSERT(cookieChangeCallbackMap().contains(jar));
-    cookieChangeCallbackMap().remove(jar);
-    g_signal_handlers_disconnect_by_func(jar, reinterpret_cast<void*>(soupCookiesChanged), nullptr);
-}
-
-}
-
 #endif

Modified: trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp (212625 => 212626)


--- trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp	2017-02-20 08:30:50 UTC (rev 212626)
@@ -51,10 +51,13 @@
     : m_sessionID(sessionID)
     , m_session(WTFMove(session))
 {
+    setCookieStorage(m_session ? m_session->cookieJar() : nullptr);
 }
 
 NetworkStorageSession::~NetworkStorageSession()
 {
+    g_signal_handlers_disconnect_matched(m_cookieStorage.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
+
 #if USE(LIBSECRET)
     g_cancellable_cancel(m_persisentStorageCancellable.get());
 #endif
@@ -89,25 +92,44 @@
 SoupNetworkSession& NetworkStorageSession::getOrCreateSoupNetworkSession() const
 {
     if (!m_session)
-        m_session = std::make_unique<SoupNetworkSession>(cookieStorage());
+        m_session = std::make_unique<SoupNetworkSession>(m_cookieStorage.get());
     return *m_session;
 }
 
+void NetworkStorageSession::cookiesDidChange(NetworkStorageSession* session)
+{
+    if (session->m_cookieObserverHandler)
+        session->m_cookieObserverHandler();
+}
+
 SoupCookieJar* NetworkStorageSession::cookieStorage() const
 {
-    if (m_session) {
-        m_cookieStorage = nullptr;
-        ASSERT(m_session->cookieJar());
-        return m_session->cookieJar();
-    }
+    RELEASE_ASSERT(!m_session || m_session->cookieJar() == m_cookieStorage.get());
+    return m_cookieStorage.get();
+}
 
-    if (!m_cookieStorage) {
+void NetworkStorageSession::setCookieStorage(SoupCookieJar* jar)
+{
+    if (m_cookieStorage)
+        g_signal_handlers_disconnect_matched(m_cookieStorage.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
+
+    // We always have a valid cookieStorage.
+    if (jar)
+        m_cookieStorage = jar;
+    else {
         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();
+    g_signal_connect_swapped(m_cookieStorage.get(), "changed", G_CALLBACK(cookiesDidChange), this);
+    if (m_session && m_session->cookieJar() != m_cookieStorage.get())
+        m_session->setCookieJar(m_cookieStorage.get());
 }
 
+void NetworkStorageSession::setCookieObserverHandler(Function<void ()>&& handler)
+{
+    m_cookieObserverHandler = WTFMove(handler);
+}
+
 #if USE(LIBSECRET)
 static const char* schemeFromProtectionSpaceServerType(ProtectionSpaceServerType serverType)
 {

Modified: trunk/Source/WebKit2/ChangeLog (212625 => 212626)


--- trunk/Source/WebKit2/ChangeLog	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebKit2/ChangeLog	2017-02-20 08:30:50 UTC (rev 212626)
@@ -1,3 +1,46 @@
+2017-02-20  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        REGRESSION(r212345): [GTK] ASSERT(cookieChangeCallbackMap().contains(jar)) failed in WebCore::stopObservingCookieChanges:54
+        https://bugs.webkit.org/show_bug.cgi?id=168375
+
+        Reviewed by Alex Christensen.
+
+        Simplify the cookies change notification. The current approach of the UI process telling the network process
+        when to start and stop observing cookie changes is quite fragile and error prone. In the GTK+ port we always
+        observe cookies, so our cookie manager always calls start in the constructor and stop in the destructor.
+        Everything would be a lot simpler if the network process always monitored cookies.
+
+        * NetworkProcess/soup/NetworkSessionSoup.cpp:
+        (WebKit::NetworkSessionSoup::NetworkSessionSoup): Set cookies observer handler for the session.
+        (WebKit::NetworkSessionSoup::~NetworkSessionSoup): Remove the cookies observer handler.
+        * UIProcess/API/gtk/WebKitCookieManager.cpp:
+        (_WebKitCookieManagerPrivate::~_WebKitCookieManagerPrivate): Remove the cookies observer callback.
+        (webkit_cookie_manager_class_init): Remove dispose implementation that is no longer needed.
+        (webkitCookieManagerCreate): Set the cookies observer callback.
+        (webkit_cookie_manager_set_persistent_storage): Remove code to start/stop observing cookies when the jar
+        changes, the network process deals with that now.
+        (webkitCookieManagerDispose): Deleted.
+        * UIProcess/WebCookieManagerProxy.cpp:
+        (WebKit::WebCookieManagerProxy::startObservingCookieChanges): Remove the optional callback method in favor of an
+        explicit method to the set the callback that doesn't send the StartObservingCookieChanges message to the network
+        process.
+        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges): Do not change the callback map here.
+        (WebKit::WebCookieManagerProxy::setCookieObserverCallback): Add the callback to the map or remove the session if
+        nullptr is given.
+        * UIProcess/WebCookieManagerProxy.h:
+        * WebProcess/Cookies/WebCookieManager.cpp:
+        (WebKit::WebCookieManager::notifyCookiesDidChange): Send CookiesDidChange message to the UI process.
+        (WebKit::WebCookieManager::startObservingCookieChanges): Use notifyCookiesDidChange().
+        * WebProcess/Cookies/WebCookieManager.h:
+        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
+        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy): Set the policy on all sessions. Code moved from
+        WebFrameNetworkingContext since it doesn't belong there.
+        (WebKit::WebCookieManager::setCookiePersistentStorage): Use new method to set the cookie storage in the
+        NetworkStorageSession.
+        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
+        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts): Deleted.
+        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
+
 2017-02-19  Chris Dumez  <cdu...@apple.com>
 
         [WK2] Support termination of unresponsive WebContent processes that are in the background

Modified: trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp (212625 => 212626)


--- trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp	2017-02-20 08:30:50 UTC (rev 212626)
@@ -26,6 +26,8 @@
 #include "config.h"
 #include "NetworkSessionSoup.h"
 
+#include "NetworkProcess.h"
+#include "WebCookieManager.h"
 #include <WebCore/NetworkStorageSession.h>
 #include <WebCore/SoupNetworkSession.h>
 #include <libsoup/soup.h>
@@ -37,10 +39,15 @@
 NetworkSessionSoup::NetworkSessionSoup(SessionID sessionID)
     : NetworkSession(sessionID)
 {
+    networkStorageSession().setCookieObserverHandler([this] {
+        NetworkProcess::singleton().supplement<WebCookieManager>()->notifyCookiesDidChange(m_sessionID);
+    });
 }
 
 NetworkSessionSoup::~NetworkSessionSoup()
 {
+    if (auto* storageSession = NetworkStorageSession::storageSession(m_sessionID))
+        storageSession->setCookieObserverHandler(nullptr);
 }
 
 SoupSession* NetworkSessionSoup::soupSession() const

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp (212625 => 212626)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp	2017-02-20 08:30:50 UTC (rev 212626)
@@ -51,6 +51,13 @@
 };
 
 struct _WebKitCookieManagerPrivate {
+    ~_WebKitCookieManagerPrivate()
+    {
+        auto sessionID = webkitWebsiteDataManagerGetDataStore(dataManager).websiteDataStore().sessionID();
+        for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(dataManager))
+            processPool->supplement<WebCookieManagerProxy>()->setCookieObserverCallback(sessionID, nullptr);
+    }
+
     WebKitWebsiteDataManager* dataManager;
 };
 
@@ -101,24 +108,9 @@
     }
 }
 
-static void webkitCookieManagerDispose(GObject* object)
-{
-    WebKitCookieManager* manager = WEBKIT_COOKIE_MANAGER(object);
-    if (manager->priv->dataManager) {
-        auto sessionID = webkitWebsiteDataManagerGetDataStore(manager->priv->dataManager).websiteDataStore().sessionID();
-        for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager))
-            processPool->supplement<WebCookieManagerProxy>()->stopObservingCookieChanges(sessionID);
-
-        manager->priv->dataManager = nullptr;
-    }
-
-    G_OBJECT_CLASS(webkit_cookie_manager_parent_class)->dispose(object);
-}
-
 static void webkit_cookie_manager_class_init(WebKitCookieManagerClass* findClass)
 {
     GObjectClass* gObjectClass = G_OBJECT_CLASS(findClass);
-    gObjectClass->dispose = webkitCookieManagerDispose;
 
     /**
      * WebKitCookieManager::changed:
@@ -141,7 +133,7 @@
     manager->priv->dataManager = dataManager;
     auto sessionID = webkitWebsiteDataManagerGetDataStore(manager->priv->dataManager).websiteDataStore().sessionID();
     for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager)) {
-        processPool->supplement<WebCookieManagerProxy>()->startObservingCookieChanges(sessionID, [manager] {
+        processPool->supplement<WebCookieManagerProxy>()->setCookieObserverCallback(sessionID, [manager] {
             g_signal_emit(manager, signals[CHANGED], 0);
         });
     }
@@ -170,15 +162,8 @@
     g_return_if_fail(filename);
     g_return_if_fail(!webkit_website_data_manager_is_ephemeral(manager->priv->dataManager));
 
-    for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager)) {
-        auto* cookieManager = processPool->supplement<WebCookieManagerProxy>();
-
-        cookieManager->stopObservingCookieChanges(WebCore::SessionID::defaultSessionID());
-        cookieManager->setCookiePersistentStorage(String::fromUTF8(filename), toSoupCookiePersistentStorageType(storage));
-        cookieManager->startObservingCookieChanges(WebCore::SessionID::defaultSessionID(), [manager] {
-            g_signal_emit(manager, signals[CHANGED], 0);
-        });
-    }
+    for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager->priv->dataManager))
+        processPool->supplement<WebCookieManagerProxy>()->setCookiePersistentStorage(String::fromUTF8(filename), toSoupCookiePersistentStorageType(storage));
 }
 
 /**

Modified: trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp (212625 => 212626)


--- trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp	2017-02-20 08:30:50 UTC (rev 212626)
@@ -133,19 +133,24 @@
     processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::AddCookie(sessionID, cookie, hostname));
 }
 
-void WebCookieManagerProxy::startObservingCookieChanges(WebCore::SessionID sessionID, std::function<void ()>&& callback)
+void WebCookieManagerProxy::startObservingCookieChanges(WebCore::SessionID sessionID)
 {
-    if (callback)
-        m_cookieObservers.set(sessionID, WTFMove(callback));
     processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StartObservingCookieChanges(sessionID));
 }
 
 void WebCookieManagerProxy::stopObservingCookieChanges(WebCore::SessionID sessionID)
 {
-    m_cookieObservers.remove(sessionID);
     processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StopObservingCookieChanges(sessionID));
 }
 
+void WebCookieManagerProxy::setCookieObserverCallback(WebCore::SessionID sessionID, std::function<void ()>&& callback)
+{
+    if (callback)
+        m_cookieObservers.set(sessionID, WTFMove(callback));
+    else
+        m_cookieObservers.remove(sessionID);
+}
+
 void WebCookieManagerProxy::cookiesDidChange(WebCore::SessionID sessionID)
 {
     m_client.cookiesDidChange(this);

Modified: trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.h (212625 => 212626)


--- trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.h	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebKit2/UIProcess/WebCookieManagerProxy.h	2017-02-20 08:30:50 UTC (rev 212626)
@@ -74,9 +74,11 @@
     void setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy);
     void getHTTPCookieAcceptPolicy(std::function<void (HTTPCookieAcceptPolicy, CallbackBase::Error)>);
 
-    void startObservingCookieChanges(WebCore::SessionID, std::function<void ()>&& = nullptr);
+    void startObservingCookieChanges(WebCore::SessionID);
     void stopObservingCookieChanges(WebCore::SessionID);
 
+    void setCookieObserverCallback(WebCore::SessionID, std::function<void ()>&&);
+
 #if USE(SOUP)
     void setCookiePersistentStorage(const String& storagePath, uint32_t storageType);
     void getCookiePersistentStorage(String& storagePath, uint32_t& storageType) const;

Modified: trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.cpp (212625 => 212626)


--- trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.cpp	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.cpp	2017-02-20 08:30:50 UTC (rev 212626)
@@ -89,12 +89,17 @@
         WebCore::addCookie(*storageSession, URL(URL(), hostname), cookie);
 }
 
+void WebCookieManager::notifyCookiesDidChange(SessionID sessionID)
+{
+    ASSERT(RunLoop::isMain());
+    m_process->send(Messages::WebCookieManagerProxy::CookiesDidChange(sessionID), 0);
+}
+
 void WebCookieManager::startObservingCookieChanges(SessionID sessionID)
 {
     if (auto* storageSession = NetworkStorageSession::storageSession(sessionID)) {
         WebCore::startObservingCookieChanges(*storageSession, [this, sessionID] {
-            ASSERT(RunLoop::isMain());
-            m_process->send(Messages::WebCookieManagerProxy::CookiesDidChange(sessionID), 0);
+            notifyCookiesDidChange(sessionID);
         });
     }
 }

Modified: trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.h (212625 => 212626)


--- trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.h	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebKit2/WebProcess/Cookies/WebCookieManager.h	2017-02-20 08:30:50 UTC (rev 212626)
@@ -59,6 +59,8 @@
     void setCookiePersistentStorage(const String& storagePath, uint32_t storageType);
 #endif
 
+    void notifyCookiesDidChange(WebCore::SessionID);
+
 private:
     // IPC::MessageReceiver
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;

Modified: trunk/Source/WebKit2/WebProcess/Cookies/soup/WebCookieManagerSoup.cpp (212625 => 212626)


--- trunk/Source/WebKit2/WebProcess/Cookies/soup/WebCookieManagerSoup.cpp	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebKit2/WebProcess/Cookies/soup/WebCookieManagerSoup.cpp	2017-02-20 08:30:50 UTC (rev 212626)
@@ -27,7 +27,6 @@
 #include "WebCookieManager.h"
 
 #include "ChildProcess.h"
-#include "WebFrameNetworkingContext.h"
 #include "WebKitSoupCookieJarSqlite.h"
 #include <WebCore/NetworkStorageSession.h>
 #include <WebCore/SoupNetworkSession.h>
@@ -41,7 +40,22 @@
 
 void WebCookieManager::platformSetHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy)
 {
-    WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts(policy);
+    SoupCookieJarAcceptPolicy soupPolicy = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
+    switch (policy) {
+    case HTTPCookieAcceptPolicyAlways:
+        soupPolicy = SOUP_COOKIE_JAR_ACCEPT_ALWAYS;
+        break;
+    case HTTPCookieAcceptPolicyNever:
+        soupPolicy = SOUP_COOKIE_JAR_ACCEPT_NEVER;
+        break;
+    case HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:
+        soupPolicy = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
+        break;
+    }
+
+    NetworkStorageSession::forEach([soupPolicy] (const NetworkStorageSession& session) {
+        soup_cookie_jar_set_accept_policy(session.cookieStorage(), soupPolicy);
+    });
 }
 
 HTTPCookieAcceptPolicy WebCookieManager::platformGetHTTPCookieAcceptPolicy()
@@ -75,7 +89,7 @@
 
     auto& storageSession = NetworkStorageSession::defaultStorageSession();
     soup_cookie_jar_set_accept_policy(jar.get(), soup_cookie_jar_get_accept_policy(storageSession.cookieStorage()));
-    storageSession.getOrCreateSoupNetworkSession().setCookieJar(jar.get());
+    storageSession.setCookieStorage(jar.get());
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp (212625 => 212626)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp	2017-02-20 08:30:50 UTC (rev 212626)
@@ -52,28 +52,6 @@
     SessionTracker::setSession(sessionID, NetworkSession::create(sessionID));
 }
 
-void WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts(HTTPCookieAcceptPolicy policy)
-{
-    SoupCookieJarAcceptPolicy soupPolicy = SOUP_COOKIE_JAR_ACCEPT_ALWAYS;
-    switch (policy) {
-    case HTTPCookieAcceptPolicyAlways:
-        soupPolicy = SOUP_COOKIE_JAR_ACCEPT_ALWAYS;
-        break;
-    case HTTPCookieAcceptPolicyNever:
-        soupPolicy = SOUP_COOKIE_JAR_ACCEPT_NEVER;
-        break;
-    case HTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:
-        soupPolicy = SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY;
-        break;
-    }
-
-    soup_cookie_jar_set_accept_policy(NetworkStorageSession::defaultStorageSession().cookieStorage(), soupPolicy);
-
-    NetworkStorageSession::forEach([&] (const NetworkStorageSession& session) {
-        soup_cookie_jar_set_accept_policy(session.cookieStorage(), soupPolicy);
-    });
-}
-
 WebFrameNetworkingContext::WebFrameNetworkingContext(WebFrame* frame)
     : FrameNetworkingContext(frame->coreFrame())
 {

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h (212625 => 212626)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h	2017-02-20 06:36:04 UTC (rev 212625)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h	2017-02-20 08:30:50 UTC (rev 212626)
@@ -25,10 +25,8 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef WebFrameNetworkingContext_h
-#define WebFrameNetworkingContext_h
+#pragma once
 
-#include "HTTPCookieAcceptPolicy.h"
 #include <WebCore/FrameNetworkingContext.h>
 #include <WebCore/SessionID.h>
 
@@ -45,7 +43,6 @@
     }
 
     static void ensurePrivateBrowsingSession(WebCore::SessionID);
-    static void setCookieAcceptPolicyForAllContexts(HTTPCookieAcceptPolicy);
 
     WebFrameLoaderClient* webFrameLoaderClient() const;
 
@@ -56,5 +53,3 @@
 };
 
 }
-
-#endif // WebFrameNetworkingContext_h
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to