Title: [147251] trunk/Source/WebKit2
Revision
147251
Author
beid...@apple.com
Date
2013-03-29 14:32:27 -0700 (Fri, 29 Mar 2013)

Log Message

"Empty cache..." clears the disk cache from each WebProcess.
<rdar://problem/12456652> and https://bugs.webkit.org/show_bug.cgi?id=113603

Reviewed by Sam Weinig.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::NetworkProcess):
(WebKit::NetworkProcess::terminate): Override ChildProcess::terminate to allow us to finish clearing the cache.
* NetworkProcess/NetworkProcess.h:

* NetworkProcess/NetworkProcess.messages.in: Add the ClearCacheForAllOrigins message.

* NetworkProcess/mac/NetworkProcessMac.mm:
(WebKit::NetworkProcess::clearCacheForAllOrigins): Clear the disk cache.
(WebKit::NetworkProcess::platformTerminate): Wait for the clear to complete.

* UIProcess/WebResourceCacheManagerProxy.cpp:
(WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins): Message the network process, also.

* WebProcess/mac/WebProcessMac.mm:
(WebKit::WebProcess::platformClearResourceCaches): Don't clear the disk cache if we use the network process.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (147250 => 147251)


--- trunk/Source/WebKit2/ChangeLog	2013-03-29 21:13:02 UTC (rev 147250)
+++ trunk/Source/WebKit2/ChangeLog	2013-03-29 21:32:27 UTC (rev 147251)
@@ -1,3 +1,27 @@
+2013-03-29  Brady Eidson  <beid...@apple.com>
+
+        "Empty cache..." clears the disk cache from each WebProcess.
+        <rdar://problem/12456652> and https://bugs.webkit.org/show_bug.cgi?id=113603
+
+        Reviewed by Sam Weinig.
+
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::NetworkProcess):
+        (WebKit::NetworkProcess::terminate): Override ChildProcess::terminate to allow us to finish clearing the cache.
+        * NetworkProcess/NetworkProcess.h:
+
+        * NetworkProcess/NetworkProcess.messages.in: Add the ClearCacheForAllOrigins message.
+
+        * NetworkProcess/mac/NetworkProcessMac.mm:
+        (WebKit::NetworkProcess::clearCacheForAllOrigins): Clear the disk cache.
+        (WebKit::NetworkProcess::platformTerminate): Wait for the clear to complete.
+
+        * UIProcess/WebResourceCacheManagerProxy.cpp:
+        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins): Message the network process, also.
+
+        * WebProcess/mac/WebProcessMac.mm:
+        (WebKit::WebProcess::platformClearResourceCaches): Don't clear the disk cache if we use the network process.
+
 2013-03-28  Brady Eidson  <beid...@apple.com>
 
         We leak NetworkConnectionToWebProcess objects.

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (147250 => 147251)


--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp	2013-03-29 21:13:02 UTC (rev 147250)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp	2013-03-29 21:32:27 UTC (rev 147251)
@@ -64,6 +64,9 @@
 NetworkProcess::NetworkProcess()
     : m_hasSetCacheModel(false)
     , m_cacheModel(CacheModelDocumentViewer)
+#if PLATFORM(MAC)
+    , m_clearCacheDispatchGroup(0)
+#endif
 {
     NetworkProcessPlatformStrategies::initialize();
 
@@ -238,6 +241,12 @@
     parentProcessConnection()->send(Messages::WebContext::DidGetStatistics(data, callbackID), 0);
 }
 
+void NetworkProcess::terminate()
+{
+    platformTerminate();
+    ChildProcess::terminate();
+}
+
 #if !PLATFORM(MAC)
 void NetworkProcess::initializeProcessName(const ChildProcessInitializationParameters&)
 {

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h (147250 => 147251)


--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h	2013-03-29 21:13:02 UTC (rev 147250)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h	2013-03-29 21:32:27 UTC (rev 147251)
@@ -77,6 +77,9 @@
 
     void platformInitializeNetworkProcess(const NetworkProcessCreationParameters&);
 
+    virtual void terminate() OVERRIDE;
+    void platformTerminate();
+
     // ChildProcess
     virtual void initializeProcessName(const ChildProcessInitializationParameters&) OVERRIDE;
     virtual void initializeSandbox(const ChildProcessInitializationParameters&, SandboxInitializationParameters&) OVERRIDE;
@@ -104,10 +107,9 @@
     void downloadRequest(uint64_t downloadID, const WebCore::ResourceRequest&);
     void cancelDownload(uint64_t downloadID);
     void setCacheModel(uint32_t);
-
     void allowSpecificHTTPSCertificateForHost(const PlatformCertificateInfo&, const String& host);
-
     void getNetworkProcessStatistics(uint64_t callbackID);
+    void clearCacheForAllOrigins(uint32_t cachesToClear);
 
     // Platform Helpers
     void platformSetCacheModel(CacheModel);
@@ -123,6 +125,13 @@
 
     typedef HashMap<const char*, OwnPtr<NetworkProcessSupplement>, PtrHash<const char*> > NetworkProcessSupplementMap;
     NetworkProcessSupplementMap m_supplements;
+
+#if PLATFORM(MAC)
+    // FIXME: We'd like to be able to do this without the #ifdef, but WorkQueue + BinarySemaphore isn't good enough since
+    // multiple requests to clear the cache can come in before previous requests complete, and we need to wait for all of them.
+    // In the future using WorkQueue and a counting semaphore would work, as would WorkQueue supporting the libdispatch concept of "work groups".
+    dispatch_group_t m_clearCacheDispatchGroup;
+#endif
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in (147250 => 147251)


--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in	2013-03-29 21:13:02 UTC (rev 147250)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in	2013-03-29 21:32:27 UTC (rev 147251)
@@ -42,6 +42,8 @@
     AllowSpecificHTTPSCertificateForHost(WebKit::PlatformCertificateInfo certificate, WTF::String host)
     
     GetNetworkProcessStatistics(uint64_t callbackID)
+    
+    ClearCacheForAllOrigins(uint32_t cachesToClear)
 }
 
 #endif // ENABLE(NETWORK_PROCESS)

Modified: trunk/Source/WebKit2/NetworkProcess/mac/NetworkProcessMac.mm (147250 => 147251)


--- trunk/Source/WebKit2/NetworkProcess/mac/NetworkProcessMac.mm	2013-03-29 21:13:02 UTC (rev 147250)
+++ trunk/Source/WebKit2/NetworkProcess/mac/NetworkProcessMac.mm	2013-03-29 21:32:27 UTC (rev 147251)
@@ -31,6 +31,7 @@
 #import "NetworkProcessCreationParameters.h"
 #import "NetworkResourceLoader.h"
 #import "PlatformCertificateInfo.h"
+#import "ResourceCachesToClear.h"
 #import "SandboxExtension.h"
 #import "SandboxInitializationParameters.h"
 #import "StringUtilities.h"
@@ -201,6 +202,29 @@
     ChildProcess::initializeSandbox(parameters, sandboxParameters);
 }
 
+void NetworkProcess::clearCacheForAllOrigins(uint32_t cachesToClear)
+{
+    ResourceCachesToClear resourceCachesToClear = static_cast<ResourceCachesToClear>(cachesToClear);
+    if (resourceCachesToClear == InMemoryResourceCachesOnly)
+        return;
+
+    if (!m_clearCacheDispatchGroup)
+        m_clearCacheDispatchGroup = dispatch_group_create();
+
+    dispatch_group_async(m_clearCacheDispatchGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+        [[NSURLCache sharedURLCache] removeAllCachedResponses];
+    });
+}
+
+void NetworkProcess::platformTerminate()
+{
+    if (m_clearCacheDispatchGroup) {
+        dispatch_group_wait(m_clearCacheDispatchGroup, DISPATCH_TIME_FOREVER);
+        dispatch_release(m_clearCacheDispatchGroup);
+        m_clearCacheDispatchGroup = 0;
+    }
+}
+
 } // namespace WebKit
 
 #endif // ENABLE(NETWORK_PROCESS)

Modified: trunk/Source/WebKit2/UIProcess/WebResourceCacheManagerProxy.cpp (147250 => 147251)


--- trunk/Source/WebKit2/UIProcess/WebResourceCacheManagerProxy.cpp	2013-03-29 21:13:02 UTC (rev 147250)
+++ trunk/Source/WebKit2/UIProcess/WebResourceCacheManagerProxy.cpp	2013-03-29 21:32:27 UTC (rev 147251)
@@ -28,6 +28,7 @@
 
 #include "ImmutableArray.h"
 #include "ImmutableDictionary.h"
+#include "NetworkProcessMessages.h"
 #include "SecurityOriginData.h"
 #include "WebContext.h"
 #include "WebResourceCacheManagerMessages.h"
@@ -114,6 +115,8 @@
 
 void WebResourceCacheManagerProxy::clearCacheForAllOrigins(ResourceCachesToClear cachesToClear)
 {
+    context()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::NetworkProcess::ClearCacheForAllOrigins(cachesToClear));
+
     // FIXME (Multi-WebProcess): <rdar://problem/12239765> There is no need to relaunch all processes. One process to take care of persistent cache is enough.
     context()->sendToAllProcessesRelaunchingThemIfNecessary(Messages::WebResourceCacheManager::ClearCacheForAllOrigins(cachesToClear));
 }

Modified: trunk/Source/WebKit2/WebProcess/mac/WebProcessMac.mm (147250 => 147251)


--- trunk/Source/WebKit2/WebProcess/mac/WebProcessMac.mm	2013-03-29 21:13:02 UTC (rev 147250)
+++ trunk/Source/WebKit2/WebProcess/mac/WebProcessMac.mm	2013-03-29 21:32:27 UTC (rev 147251)
@@ -130,6 +130,10 @@
     if (cachesToClear == InMemoryResourceCachesOnly)
         return;
 
+    // If we're using the network process then it is the only one that needs to clear the disk cache.
+    if (usesNetworkProcess())
+        return;
+
     if (!m_clearResourceCachesDispatchGroup)
         m_clearResourceCachesDispatchGroup = dispatch_group_create();
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to