summaryrefslogtreecommitdiffstats
path: root/src/core/web_engine_visited_links_manager.cpp
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2017-02-14 18:19:17 +0100
committerJoerg Bornemann <joerg.bornemann@qt.io>2017-03-02 10:38:15 +0000
commit741faecb20b2a951d4aa3c58e98eab1b33725267 (patch)
tree3f888030d4a82780dcf353abe8a1cee97e2a9c0b /src/core/web_engine_visited_links_manager.cpp
parenteb1e41fa6106925c8794effcebd52843a56c6d31 (diff)
Ensure the existence of the browser context's storage directory
For on-disk profiles, the browser context's storage directory must exist before calling VisitedLinkMaster::Init(). This fixes the error message [2844:2877:0213/183645:ERROR:visitedlink_master.cc(73)] Failed to open file /home/username/.local/share/appname/QtWebEngine/Default/Visited Links Before, the directory was implicitly created by chromium's disk cache backend initialization code which runs later than VisitedLinkMaster::Init(). Change-Id: I3860a6874b8002292020b9ebaec22f8343ebd258 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core/web_engine_visited_links_manager.cpp')
-rw-r--r--src/core/web_engine_visited_links_manager.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/core/web_engine_visited_links_manager.cpp b/src/core/web_engine_visited_links_manager.cpp
index 0cf76d456..689c130e6 100644
--- a/src/core/web_engine_visited_links_manager.cpp
+++ b/src/core/web_engine_visited_links_manager.cpp
@@ -44,6 +44,7 @@
#include "content_browser_client_qt.h"
#include "type_conversion.h"
+#include <base/files/file_util.h>
#include "components/visitedlink/browser/visitedlink_delegate.h"
#include "components/visitedlink/browser/visitedlink_master.h"
@@ -90,11 +91,28 @@ bool WebEngineVisitedLinksManager::containsUrl(const QUrl &url) const
return m_visitedLinkMaster->IsVisited(toGurl(url));
}
+static void ensureDirectoryExists(const base::FilePath &path)
+{
+ if (base::PathExists(path))
+ return;
+
+ base::File::Error error;
+ if (base::CreateDirectoryAndGetError(path, &error))
+ return;
+
+ std::string errorstr = base::File::ErrorToString(error);
+ qWarning("Cannot create directory %s. Error: %s.",
+ path.AsUTF8Unsafe().c_str(),
+ errorstr.c_str());
+}
+
WebEngineVisitedLinksManager::WebEngineVisitedLinksManager(BrowserContextAdapter *adapter)
: m_delegate(new VisitedLinkDelegateQt)
{
Q_ASSERT(adapter && adapter->browserContext());
BrowserContextQt *browserContext = adapter->browserContext();
+ if (adapter->persistVisitedLinks())
+ ensureDirectoryExists(browserContext->GetPath());
m_visitedLinkMaster.reset(new visitedlink::VisitedLinkMaster(browserContext, m_delegate.data(), adapter->persistVisitedLinks()));
m_visitedLinkMaster->Init();
}