summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIlia Kirianovskii <ilia.kirianovskii@lgepartner.com>2016-02-16 11:35:48 +0300
committerJoerg Bornemann <joerg.bornemann@qt.io>2016-05-13 09:10:44 +0000
commitf2370c0d09998f382364a9a58932cf717c28a764 (patch)
tree380a64678506ee6392e85d31d9487a834af664a9 /src
parentb052dcaf308d761fa8df39a09f0296b808c928b5 (diff)
Fix CXX :visited selector
This patch fixes highlighting of visited links and now Acid3 test completely works (100 of 100). The reason is that VisitedLinkMaster must be initialized before a new RenderView will be created. Otherwise, it will not handle content::NOTIFICATION_RENDERER_PROCESS_CREATED event and therefore VisitedLinkSlave will be left uninitialized (salt_ is zero). Because of this reason CSS :visited selector was broken and didn't work. Change-Id: I769cd5dbae2ffb95fd128df634a54e562b9cc91d Reviewed-by: Ilia Kirianovskii <ilia.kirianovskii@lgepartner.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/core/browser_context_adapter.cpp19
-rw-r--r--src/core/browser_context_adapter.h1
-rw-r--r--src/core/web_contents_adapter.cpp6
3 files changed, 21 insertions, 5 deletions
diff --git a/src/core/browser_context_adapter.cpp b/src/core/browser_context_adapter.cpp
index 481197eed..702851ba5 100644
--- a/src/core/browser_context_adapter.cpp
+++ b/src/core/browser_context_adapter.cpp
@@ -101,7 +101,8 @@ void BrowserContextAdapter::setStorageName(const QString &storageName)
m_name = storageName;
if (m_browserContext->url_request_getter_.get())
m_browserContext->url_request_getter_->updateStorageSettings();
- m_visitedLinksManager.reset();
+ if (m_visitedLinksManager)
+ resetVisitedLinksManager();
}
void BrowserContextAdapter::setOffTheRecord(bool offTheRecord)
@@ -111,7 +112,8 @@ void BrowserContextAdapter::setOffTheRecord(bool offTheRecord)
m_offTheRecord = offTheRecord;
if (m_browserContext->url_request_getter_.get())
m_browserContext->url_request_getter_->updateStorageSettings();
- m_visitedLinksManager.reset();
+ if (m_visitedLinksManager)
+ resetVisitedLinksManager();
}
BrowserContextQt *BrowserContextAdapter::browserContext()
@@ -122,7 +124,7 @@ BrowserContextQt *BrowserContextAdapter::browserContext()
WebEngineVisitedLinksManager *BrowserContextAdapter::visitedLinksManager()
{
if (!m_visitedLinksManager)
- m_visitedLinksManager.reset(new WebEngineVisitedLinksManager(this));
+ resetVisitedLinksManager();
return m_visitedLinksManager.data();
}
@@ -195,7 +197,8 @@ void BrowserContextAdapter::setDataPath(const QString &path)
m_dataPath = path;
if (m_browserContext->url_request_getter_.get())
m_browserContext->url_request_getter_->updateStorageSettings();
- m_visitedLinksManager.reset();
+ if (m_visitedLinksManager)
+ resetVisitedLinksManager();
}
QString BrowserContextAdapter::cachePath() const
@@ -336,7 +339,8 @@ void BrowserContextAdapter::setVisitedLinksPolicy(BrowserContextAdapter::Visited
if (m_visitedLinksPolicy == visitedLinksPolicy)
return;
m_visitedLinksPolicy = visitedLinksPolicy;
- m_visitedLinksManager.reset();
+ if (m_visitedLinksManager)
+ resetVisitedLinksManager();
}
int BrowserContextAdapter::httpCacheMaxSize() const
@@ -459,4 +463,9 @@ void BrowserContextAdapter::setHttpAcceptLanguage(const QString &httpAcceptLangu
m_browserContext->url_request_getter_->updateUserAgent();
}
+void BrowserContextAdapter::resetVisitedLinksManager()
+{
+ m_visitedLinksManager.reset(new WebEngineVisitedLinksManager(this));
+}
+
} // namespace QtWebEngineCore
diff --git a/src/core/browser_context_adapter.h b/src/core/browser_context_adapter.h
index b133eab65..1eeb88770 100644
--- a/src/core/browser_context_adapter.h
+++ b/src/core/browser_context_adapter.h
@@ -163,6 +163,7 @@ public:
private:
void updateCustomUrlSchemeHandlers();
+ void resetVisitedLinksManager();
QString m_name;
bool m_offTheRecord;
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 30c589c56..66d133f60 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -394,6 +394,12 @@ void WebContentsAdapter::initialize(WebContentsAdapterClient *adapterClient)
// This should only be necessary after having restored the history to a new WebContentsAdapter.
d->webContents->GetController().LoadIfNecessary();
+ // Create an instance of WebEngineVisitedLinksManager to catch the first
+ // content::NOTIFICATION_RENDERER_PROCESS_CREATED event. This event will
+ // force to initialize visited links in VisitedLinkSlave.
+ // It must be done before creating a RenderView.
+ d->browserContextAdapter->visitedLinksManager();
+
// Create a RenderView with the initial empty document
content::RenderViewHost *rvh = d->webContents->GetRenderViewHost();
Q_ASSERT(rvh);