summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2014-12-08 15:56:32 +0100
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-01-08 16:50:51 +0100
commit4557ccd9785f53abc11460211c84db3e564b364f (patch)
treed087bcf820ede65c098469671c8157184e9bc99a /src
parent89027eb534aae302ab6f87a3bcfa94e53db02e5d (diff)
API for controlling tracking of visited links
Also fixes updating the visited links manager when off-the-record changes or a storage path is set or changed. Change-Id: Iffa90edde35f2d84146f3ab3b3861ef113e321f3 Reviewed-by: Robin Burchell <robin.burchell@viroteck.net> Reviewed-by: Michael BrĂ¼ning <michael.bruning@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/browser_context_adapter.cpp45
-rw-r--r--src/core/browser_context_adapter.h13
-rw-r--r--src/core/web_contents_delegate_qt.cpp4
-rw-r--r--src/core/web_engine_visited_links_manager.cpp7
-rw-r--r--src/core/web_engine_visited_links_manager.h2
-rw-r--r--src/webenginewidgets/api/qwebengineprofile.cpp32
-rw-r--r--src/webenginewidgets/api/qwebengineprofile.h5
7 files changed, 105 insertions, 3 deletions
diff --git a/src/core/browser_context_adapter.cpp b/src/core/browser_context_adapter.cpp
index edf1d2dbc..637003f96 100644
--- a/src/core/browser_context_adapter.cpp
+++ b/src/core/browser_context_adapter.cpp
@@ -66,6 +66,7 @@ BrowserContextAdapter::BrowserContextAdapter(bool offTheRecord)
, m_browserContext(new BrowserContextQt(this))
, m_httpCacheType(DiskHttpCache)
, m_persistentCookiesPolicy(AllowPersistentCookies)
+ , m_visitedLinksPolicy(TrackVisitedLinksOnDisk)
, m_httpCacheMaxSize(0)
{
}
@@ -76,6 +77,7 @@ BrowserContextAdapter::BrowserContextAdapter(const QString &storageName)
, m_browserContext(new BrowserContextQt(this))
, m_httpCacheType(DiskHttpCache)
, m_persistentCookiesPolicy(AllowPersistentCookies)
+ , m_visitedLinksPolicy(TrackVisitedLinksOnDisk)
, m_httpCacheMaxSize(0)
{
}
@@ -91,6 +93,7 @@ void BrowserContextAdapter::setStorageName(const QString &storageName)
m_name = storageName;
if (m_browserContext->url_request_getter_)
m_browserContext->url_request_getter_->updateStorageSettings();
+ m_visitedLinksManager.reset();
}
void BrowserContextAdapter::setOffTheRecord(bool offTheRecord)
@@ -100,6 +103,7 @@ void BrowserContextAdapter::setOffTheRecord(bool offTheRecord)
m_offTheRecord = offTheRecord;
if (m_browserContext->url_request_getter_)
m_browserContext->url_request_getter_->updateStorageSettings();
+ m_visitedLinksManager.reset();
}
BrowserContextQt *BrowserContextAdapter::browserContext()
@@ -142,6 +146,7 @@ void BrowserContextAdapter::setDataPath(const QString &path)
m_dataPath = path;
if (m_browserContext->url_request_getter_)
m_browserContext->url_request_getter_->updateStorageSettings();
+ m_visitedLinksManager.reset();
}
QString BrowserContextAdapter::cachePath() const
@@ -234,6 +239,46 @@ void BrowserContextAdapter::setPersistentCookiesPolicy(BrowserContextAdapter::Pe
m_browserContext->url_request_getter_->updateCookieStore();
}
+BrowserContextAdapter::VisitedLinksPolicy BrowserContextAdapter::visitedLinksPolicy() const
+{
+ if (isOffTheRecord() || m_visitedLinksPolicy == DoNotTrackVisitedLinks)
+ return DoNotTrackVisitedLinks;
+ if (dataPath().isEmpty())
+ return TrackVisitedLinksInMemory;
+ return m_visitedLinksPolicy;
+}
+
+bool BrowserContextAdapter::trackVisitedLinks() const
+{
+ switch (visitedLinksPolicy()) {
+ case DoNotTrackVisitedLinks:
+ return false;
+ default:
+ break;
+ }
+ return true;
+}
+
+bool BrowserContextAdapter::persistVisitedLinks() const
+{
+ switch (visitedLinksPolicy()) {
+ case DoNotTrackVisitedLinks:
+ case TrackVisitedLinksInMemory:
+ return false;
+ default:
+ break;
+ }
+ return true;
+}
+
+void BrowserContextAdapter::setVisitedLinksPolicy(BrowserContextAdapter::VisitedLinksPolicy visitedLinksPolicy)
+{
+ if (m_visitedLinksPolicy == visitedLinksPolicy)
+ return;
+ m_visitedLinksPolicy = visitedLinksPolicy;
+ m_visitedLinksManager.reset();
+}
+
int BrowserContextAdapter::httpCacheMaxSize() const
{
return m_httpCacheMaxSize;
diff --git a/src/core/browser_context_adapter.h b/src/core/browser_context_adapter.h
index dabd8a11e..8f03f2094 100644
--- a/src/core/browser_context_adapter.h
+++ b/src/core/browser_context_adapter.h
@@ -90,15 +90,27 @@ public:
ForcePersistentCookies
};
+ enum VisitedLinksPolicy {
+ DoNotTrackVisitedLinks = 0,
+ TrackVisitedLinksInMemory,
+ TrackVisitedLinksOnDisk,
+ };
+
HttpCacheType httpCacheType() const;
void setHttpCacheType(BrowserContextAdapter::HttpCacheType);
PersistentCookiesPolicy persistentCookiesPolicy() const;
void setPersistentCookiesPolicy(BrowserContextAdapter::PersistentCookiesPolicy);
+ VisitedLinksPolicy visitedLinksPolicy() const;
+ void setVisitedLinksPolicy(BrowserContextAdapter::VisitedLinksPolicy);
+
int httpCacheMaxSize() const;
void setHttpCacheMaxSize(int maxSize);
+ bool trackVisitedLinks() const;
+ bool persistVisitedLinks() const;
+
private:
QString m_name;
bool m_offTheRecord;
@@ -109,6 +121,7 @@ private:
QString m_httpUserAgent;
HttpCacheType m_httpCacheType;
PersistentCookiesPolicy m_persistentCookiesPolicy;
+ VisitedLinksPolicy m_visitedLinksPolicy;
int m_httpCacheMaxSize;
Q_DISABLE_COPY(BrowserContextAdapter)
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index a2d548fc7..9d53dc48d 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -269,12 +269,12 @@ void WebContentsDelegateQt::UpdateTargetURL(content::WebContents *source, int32
void WebContentsDelegateQt::DidNavigateAnyFrame(const content::LoadCommittedDetails &, const content::FrameNavigateParams &params)
{
- if (!params.should_update_history || m_viewClient->browserContextAdapter()->isOffTheRecord())
+ // VisistedLinksMaster asserts !IsOffTheRecord().
+ if (!params.should_update_history || !m_viewClient->browserContextAdapter()->trackVisitedLinks())
return;
m_viewClient->browserContextAdapter()->visitedLinksManager()->addUrl(params.url);
}
-
void WebContentsDelegateQt::overrideWebPreferences(content::WebContents *, WebPreferences *webPreferences)
{
m_viewClient->webEngineSettings()->overrideWebPreferences(webPreferences);
diff --git a/src/core/web_engine_visited_links_manager.cpp b/src/core/web_engine_visited_links_manager.cpp
index a2f6dbf9f..c5ed54f3e 100644
--- a/src/core/web_engine_visited_links_manager.cpp
+++ b/src/core/web_engine_visited_links_manager.cpp
@@ -81,12 +81,17 @@ void WebEngineVisitedLinksManager::deleteVisitedLinkDataForUrls(const QList<QUrl
m_visitedLinkMaster->DeleteURLs(&iterator);
}
+bool WebEngineVisitedLinksManager::containsUrl(const QUrl &url) const
+{
+ return m_visitedLinkMaster->IsVisited(toGurl(url));
+}
+
WebEngineVisitedLinksManager::WebEngineVisitedLinksManager(BrowserContextAdapter *adapter)
: m_delegate(new VisitedLinkDelegateQt)
{
Q_ASSERT(adapter && adapter->browserContext());
BrowserContextQt *browserContext = adapter->browserContext();
- m_visitedLinkMaster.reset(new visitedlink::VisitedLinkMaster(browserContext, m_delegate.data(), /* persist to disk = */true));
+ m_visitedLinkMaster.reset(new visitedlink::VisitedLinkMaster(browserContext, m_delegate.data(), adapter->persistVisitedLinks()));
m_visitedLinkMaster->Init();
}
diff --git a/src/core/web_engine_visited_links_manager.h b/src/core/web_engine_visited_links_manager.h
index 5b0286c51..dc2a4bff2 100644
--- a/src/core/web_engine_visited_links_manager.h
+++ b/src/core/web_engine_visited_links_manager.h
@@ -63,6 +63,8 @@ public:
void deleteAllVisitedLinkData();
void deleteVisitedLinkDataForUrls(const QList<QUrl> &);
+ bool containsUrl(const QUrl &) const;
+
private:
void addUrl(const GURL &);
friend class WebContentsDelegateQt;
diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp
index 1487f06ce..9929ee657 100644
--- a/src/webenginewidgets/api/qwebengineprofile.cpp
+++ b/src/webenginewidgets/api/qwebengineprofile.cpp
@@ -40,6 +40,7 @@
#include "qwebengineprofile_p.h"
#include "browser_context_adapter.h"
+#include "web_engine_visited_links_manager.h"
QT_BEGIN_NAMESPACE
@@ -305,6 +306,37 @@ void QWebEngineProfile::setHttpCacheMaximumSize(int maxSize)
}
/*!
+ Clears all links from the visited links database.
+
+ \sa clearVisitedLinks()
+*/
+void QWebEngineProfile::clearAllVisitedLinks()
+{
+ Q_D(QWebEngineProfile);
+ d->browserContext()->visitedLinksManager()->deleteAllVisitedLinkData();
+}
+
+/*!
+ Clears the links in \a urls from the visited links database.
+
+ \sa clearAllVisitedLinks()
+*/
+void QWebEngineProfile::clearVisitedLinks(const QList<QUrl> &urls)
+{
+ Q_D(QWebEngineProfile);
+ d->browserContext()->visitedLinksManager()->deleteVisitedLinkDataForUrls(urls);
+}
+
+/*!
+ Returns true if \a url is considered a visited link by this profile.
+*/
+bool QWebEngineProfile::visitedLinksContainsUrl(const QUrl &url) const
+{
+ Q_D(const QWebEngineProfile);
+ return d->browserContext()->visitedLinksManager()->containsUrl(url);
+}
+
+/*!
Returns the default profile.
The default profile uses the storage name "Default".
diff --git a/src/webenginewidgets/api/qwebengineprofile.h b/src/webenginewidgets/api/qwebengineprofile.h
index d21eed372..0536d711f 100644
--- a/src/webenginewidgets/api/qwebengineprofile.h
+++ b/src/webenginewidgets/api/qwebengineprofile.h
@@ -46,6 +46,7 @@
QT_BEGIN_NAMESPACE
class QObject;
+class QUrl;
class QWebEnginePage;
class QWebEnginePagePrivate;
class QWebEngineProfilePrivate;
@@ -89,6 +90,10 @@ public:
int httpCacheMaximumSize() const;
void setHttpCacheMaximumSize(int maxSize);
+ void clearAllVisitedLinks();
+ void clearVisitedLinks(const QList<QUrl> &urls);
+ bool visitedLinksContainsUrl(const QUrl &url) const;
+
static QWebEngineProfile *defaultProfile();
private: