diff options
-rw-r--r-- | src/core/browser_context_adapter.cpp | 45 | ||||
-rw-r--r-- | src/core/browser_context_adapter.h | 13 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 4 | ||||
-rw-r--r-- | src/core/web_engine_visited_links_manager.cpp | 7 | ||||
-rw-r--r-- | src/core/web_engine_visited_links_manager.h | 2 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineprofile.cpp | 32 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineprofile.h | 5 |
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 ¶ms) { - 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: |