From 741faecb20b2a951d4aa3c58e98eab1b33725267 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Tue, 14 Feb 2017 18:19:17 +0100 Subject: 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 --- src/core/web_engine_visited_links_manager.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/core') 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 #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(); } -- cgit v1.2.3