From f343e9d69a9aa8d64fe61725cf17c824f8f2d703 Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jensen@digia.com>
Date: Fri, 7 Nov 2014 17:07:48 +0100
Subject: [PATCH] Cache to QStandardPaths::CacheLocation

We should save our cache in the configured CacheLocation, and ensure
we are prepared for multiple BrowserContext by caching to a Default
subdir. This matches how chromium caches on linux.

Change-Id: Ibe914fca35435ea1658565be87747cfabc71e97b
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
---
 src/core/browser_context_qt.cpp            | 14 +++++++++++++-
 src/core/browser_context_qt.h              |  1 +
 src/core/url_request_context_getter_qt.cpp |  9 +++++----
 src/core/url_request_context_getter_qt.h   |  5 +++--
 4 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/core/browser_context_qt.cpp b/src/core/browser_context_qt.cpp
index 3913b7548..44b6ca4ef 100644
--- a/src/core/browser_context_qt.cpp
+++ b/src/core/browser_context_qt.cpp
@@ -72,9 +72,21 @@ base::FilePath BrowserContextQt::GetPath() const
         dataLocation = QDir::homePath() % QDir::separator() % QChar::fromLatin1('.') % QCoreApplication::applicationName();
 
     dataLocation.append(QDir::separator() % QLatin1String("QtWebEngine"));
+    dataLocation.append(QDir::separator() % QLatin1String("Default"));
     return base::FilePath(toFilePathString(dataLocation));
 }
 
+base::FilePath BrowserContextQt::GetCachePath() const
+{
+    QString cacheLocation = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
+    if (cacheLocation.isEmpty())
+        cacheLocation = QDir::homePath() % QDir::separator() % QChar::fromLatin1('.') % QCoreApplication::applicationName();
+
+    cacheLocation.append(QDir::separator() % QLatin1String("QtWebEngine"));
+    cacheLocation.append(QDir::separator() % QLatin1String("Default"));
+    return base::FilePath(toFilePathString(cacheLocation));
+}
+
 bool BrowserContextQt::IsOffTheRecord() const
 {
     return false;
@@ -133,7 +145,7 @@ content::PushMessagingService *BrowserContextQt::GetPushMessagingService()
 
 net::URLRequestContextGetter *BrowserContextQt::CreateRequestContext(content::ProtocolHandlerMap *protocol_handlers)
 {
-    url_request_getter_ = new URLRequestContextGetterQt(GetPath(), protocol_handlers);
+    url_request_getter_ = new URLRequestContextGetterQt(GetPath(), GetCachePath(), protocol_handlers);
     static_cast<ResourceContextQt*>(resourceContext.get())->set_url_request_context_getter(url_request_getter_.get());
     return url_request_getter_.get();
 }
diff --git a/src/core/browser_context_qt.h b/src/core/browser_context_qt.h
index 8c7e707a8..125c0fc46 100644
--- a/src/core/browser_context_qt.h
+++ b/src/core/browser_context_qt.h
@@ -51,6 +51,7 @@ public:
     virtual ~BrowserContextQt();
 
     virtual base::FilePath GetPath() const Q_DECL_OVERRIDE;
+    base::FilePath GetCachePath() const;
     virtual bool IsOffTheRecord() const Q_DECL_OVERRIDE;
 
     virtual net::URLRequestContextGetter *GetRequestContext() Q_DECL_OVERRIDE;
diff --git a/src/core/url_request_context_getter_qt.cpp b/src/core/url_request_context_getter_qt.cpp
index 8d44d0ad1..8ec600a85 100644
--- a/src/core/url_request_context_getter_qt.cpp
+++ b/src/core/url_request_context_getter_qt.cpp
@@ -69,9 +69,10 @@ static const char kQrcSchemeQt[] = "qrc";
 
 using content::BrowserThread;
 
-URLRequestContextGetterQt::URLRequestContextGetterQt(const base::FilePath &basePath, content::ProtocolHandlerMap *protocolHandlers)
+URLRequestContextGetterQt::URLRequestContextGetterQt(const base::FilePath &dataPath, const base::FilePath &cachePath, content::ProtocolHandlerMap *protocolHandlers)
     : m_ignoreCertificateErrors(false)
-    , m_basePath(basePath)
+    , m_dataPath(dataPath)
+    , m_cachePath(cachePath)
 {
     std::swap(m_protocolHandlers, *protocolHandlers);
 
@@ -93,7 +94,7 @@ net::URLRequestContext *URLRequestContextGetterQt::GetURLRequestContext()
 
         m_urlRequestContext->set_network_delegate(m_networkDelegate.get());
 
-        base::FilePath cookiesPath = m_basePath.Append(FILE_PATH_LITERAL("Cookies"));
+        base::FilePath cookiesPath = m_dataPath.Append(FILE_PATH_LITERAL("Cookies"));
         content::CookieStoreConfig cookieStoreConfig(cookiesPath, content::CookieStoreConfig::PERSISTANT_SESSION_COOKIES, NULL, NULL);
         scoped_refptr<net::CookieStore> cookieStore = content::CreateCookieStore(cookieStoreConfig);
 
@@ -119,7 +120,7 @@ net::URLRequestContext *URLRequestContextGetterQt::GetURLRequestContext()
             net::HttpAuthHandlerFactory::CreateDefault(host_resolver.get()));
         m_storage->set_http_server_properties(scoped_ptr<net::HttpServerProperties>(new net::HttpServerPropertiesImpl));
 
-        base::FilePath cache_path = m_basePath.Append(FILE_PATH_LITERAL("Cache"));
+        base::FilePath cache_path = m_cachePath.Append(FILE_PATH_LITERAL("Cache"));
         net::HttpCache::DefaultBackend* main_backend =
             new net::HttpCache::DefaultBackend(
                 net::DISK_CACHE,
diff --git a/src/core/url_request_context_getter_qt.h b/src/core/url_request_context_getter_qt.h
index 50335291e..6c9ac6d59 100644
--- a/src/core/url_request_context_getter_qt.h
+++ b/src/core/url_request_context_getter_qt.h
@@ -58,7 +58,7 @@ class ProxyConfigService;
 
 class URLRequestContextGetterQt : public net::URLRequestContextGetter {
 public:
-    explicit URLRequestContextGetterQt(const base::FilePath &, content::ProtocolHandlerMap *protocolHandlers);
+    explicit URLRequestContextGetterQt(const base::FilePath &, const base::FilePath &, content::ProtocolHandlerMap *protocolHandlers);
 
     virtual net::URLRequestContext *GetURLRequestContext() Q_DECL_OVERRIDE;
     virtual scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() const Q_DECL_OVERRIDE;
@@ -67,7 +67,8 @@ private:
     virtual ~URLRequestContextGetterQt() {}
 
     bool m_ignoreCertificateErrors;
-    base::FilePath m_basePath;
+    base::FilePath m_dataPath;
+    base::FilePath m_cachePath;
     content::ProtocolHandlerMap m_protocolHandlers;
 
     scoped_ptr<net::ProxyConfigService> m_proxyConfigService;
-- 
GitLab