summaryrefslogtreecommitdiffstats
path: root/src/core/net
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2018-01-11 11:24:48 +0100
committerMichal Klocek <michal.klocek@qt.io>2018-05-18 10:49:44 +0000
commitcfddf26f78e521809a17d4fab5bb7cfe18d3f08e (patch)
tree5da7f2d15afd944f6b0bcdfab4e798063f2e582f /src/core/net
parent7d6f72463ef372aabf4c4e6f212b9d331ef1338a (diff)
Change BrowserContextAdapter to be QPointer
BrowserContextAdapter is living and accessed only in UI thread, remove QSharedPointer usage and change QWebengineProfile to use QPointer. Prevent BrowserContextAdapter outliving WebEngineContext by setting globalObject as a parent to track WebEngineContext destruction. This commits tries to simplify the life cycle handling of browser context, it removes profile shutdown methods and QWebEngineBrowserContext, which was used to track profile destruction. Task-number: QTBUG-62147 Change-Id: I79f2c38a123cd053e3a59f4900afbdc759a396fe Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io> Reviewed-by: Michael Brüning <michael.bruning@qt.io>
Diffstat (limited to 'src/core/net')
-rw-r--r--src/core/net/custom_protocol_handler.cpp2
-rw-r--r--src/core/net/custom_protocol_handler.h6
-rw-r--r--src/core/net/url_request_context_getter_qt.cpp62
-rw-r--r--src/core/net/url_request_context_getter_qt.h13
-rw-r--r--src/core/net/url_request_custom_job.cpp2
-rw-r--r--src/core/net/url_request_custom_job.h4
-rw-r--r--src/core/net/url_request_custom_job_proxy.cpp11
-rw-r--r--src/core/net/url_request_custom_job_proxy.h6
8 files changed, 54 insertions, 52 deletions
diff --git a/src/core/net/custom_protocol_handler.cpp b/src/core/net/custom_protocol_handler.cpp
index 402df04ba..3620bc10c 100644
--- a/src/core/net/custom_protocol_handler.cpp
+++ b/src/core/net/custom_protocol_handler.cpp
@@ -46,7 +46,7 @@
namespace QtWebEngineCore {
-CustomProtocolHandler::CustomProtocolHandler(QWeakPointer<const BrowserContextAdapter> adapter)
+CustomProtocolHandler::CustomProtocolHandler(QPointer<BrowserContextAdapter> adapter)
: m_adapter(adapter)
{
}
diff --git a/src/core/net/custom_protocol_handler.h b/src/core/net/custom_protocol_handler.h
index 5d3838834..1568c269e 100644
--- a/src/core/net/custom_protocol_handler.h
+++ b/src/core/net/custom_protocol_handler.h
@@ -45,7 +45,7 @@
#include <QtCore/QByteArray>
#include <QtCore/QObject>
-#include <QtCore/QWeakPointer>
+#include <QtCore/QPointer>
QT_FORWARD_DECLARE_CLASS(QIODevice)
@@ -63,13 +63,13 @@ class BrowserContextAdapter;
class QWEBENGINE_EXPORT CustomProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
public:
- CustomProtocolHandler(QWeakPointer<const BrowserContextAdapter> adapter);
+ CustomProtocolHandler(QPointer<BrowserContextAdapter> adapter);
net::URLRequestJob *MaybeCreateJob(net::URLRequest *request, net::NetworkDelegate *networkDelegate) const override;
private:
DISALLOW_COPY_AND_ASSIGN(CustomProtocolHandler);
- QWeakPointer<const BrowserContextAdapter> m_adapter;
+ QPointer<BrowserContextAdapter> m_adapter;
};
} // namespace
diff --git a/src/core/net/url_request_context_getter_qt.cpp b/src/core/net/url_request_context_getter_qt.cpp
index 904130611..89c048d18 100644
--- a/src/core/net/url_request_context_getter_qt.cpp
+++ b/src/core/net/url_request_context_getter_qt.cpp
@@ -90,7 +90,9 @@ namespace QtWebEngineCore {
using content::BrowserThread;
-URLRequestContextGetterQt::URLRequestContextGetterQt(QSharedPointer<BrowserContextAdapter> browserContext, content::ProtocolHandlerMap *protocolHandlers, content::URLRequestInterceptorScopedVector request_interceptors)
+URLRequestContextGetterQt::URLRequestContextGetterQt(BrowserContextAdapter *browserContext,
+ content::ProtocolHandlerMap *protocolHandlers,
+ content::URLRequestInterceptorScopedVector request_interceptors)
: m_ignoreCertificateErrors(false)
, m_mutex(QMutex::Recursive)
, m_contextInitialized(false)
@@ -99,7 +101,7 @@ URLRequestContextGetterQt::URLRequestContextGetterQt(QSharedPointer<BrowserConte
, m_updateHttpCache(false)
, m_updateJobFactory(true)
, m_updateUserAgent(false)
- , m_browserContext(browserContext)
+ , m_browserContextAdapter(browserContext)
, m_baseJobFactory(0)
, m_cookieDelegate(new CookieMonsterDelegateQt())
, m_requestInterceptors(std::move(request_interceptors))
@@ -116,7 +118,6 @@ URLRequestContextGetterQt::URLRequestContextGetterQt(QSharedPointer<BrowserConte
QMutexLocker lock(&m_mutex);
m_cookieDelegate->setClient(browserContext->cookieStore());
- setFullConfiguration(browserContext);
updateStorageSettings();
}
@@ -127,21 +128,19 @@ URLRequestContextGetterQt::~URLRequestContextGetterQt()
}
-void URLRequestContextGetterQt::setFullConfiguration(QSharedPointer<BrowserContextAdapter> browserContext)
+void URLRequestContextGetterQt::setFullConfiguration()
{
- if (!browserContext)
- return;
-
- m_requestInterceptor = browserContext->requestInterceptor();
- m_persistentCookiesPolicy = browserContext->persistentCookiesPolicy();
- m_cookiesPath = browserContext->cookiesPath();
- m_channelIdPath = browserContext->channelIdPath();
- m_httpAcceptLanguage = browserContext->httpAcceptLanguage();
- m_httpUserAgent = browserContext->httpUserAgent();
- m_httpCacheType = browserContext->httpCacheType();
- m_httpCachePath = browserContext->httpCachePath();
- m_httpCacheMaxSize = browserContext->httpCacheMaxSize();
- m_customUrlSchemes = browserContext->customUrlSchemes();
+ Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ m_requestInterceptor = m_browserContextAdapter->requestInterceptor();
+ m_persistentCookiesPolicy = m_browserContextAdapter->persistentCookiesPolicy();
+ m_cookiesPath = m_browserContextAdapter->cookiesPath();
+ m_channelIdPath = m_browserContextAdapter->channelIdPath();
+ m_httpAcceptLanguage = m_browserContextAdapter->httpAcceptLanguage();
+ m_httpUserAgent = m_browserContextAdapter->httpUserAgent();
+ m_httpCacheType = m_browserContextAdapter->httpCacheType();
+ m_httpCachePath = m_browserContextAdapter->httpCachePath();
+ m_httpCacheMaxSize = m_browserContextAdapter->httpCacheMaxSize();
+ m_customUrlSchemes = m_browserContextAdapter->customUrlSchemes();
}
net::URLRequestContext *URLRequestContextGetterQt::GetURLRequestContext()
@@ -168,7 +167,7 @@ void URLRequestContextGetterQt::updateStorageSettings()
Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
QMutexLocker lock(&m_mutex);
- setFullConfiguration(m_browserContext.toStrongRef());
+ setFullConfiguration();
if (!m_updateAllStorage) {
m_updateAllStorage = true;
@@ -287,9 +286,9 @@ void URLRequestContextGetterQt::updateCookieStore()
{
Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
QMutexLocker lock(&m_mutex);
- m_persistentCookiesPolicy = m_browserContext.data()->persistentCookiesPolicy();
- m_cookiesPath = m_browserContext.data()->cookiesPath();
- m_channelIdPath = m_browserContext.data()->channelIdPath();
+ m_persistentCookiesPolicy = m_browserContextAdapter->persistentCookiesPolicy();
+ m_cookiesPath = m_browserContextAdapter->cookiesPath();
+ m_channelIdPath = m_browserContextAdapter->channelIdPath();
if (m_contextInitialized && !m_updateAllStorage && !m_updateCookieStore) {
m_updateCookieStore = true;
@@ -373,8 +372,8 @@ void URLRequestContextGetterQt::updateUserAgent()
{
Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
QMutexLocker lock(&m_mutex);
- m_httpAcceptLanguage = m_browserContext.data()->httpAcceptLanguage();
- m_httpUserAgent = m_browserContext.data()->httpUserAgent();
+ m_httpAcceptLanguage = m_browserContextAdapter->httpAcceptLanguage();
+ m_httpUserAgent = m_browserContextAdapter->httpUserAgent();
if (m_contextInitialized && !m_updateAllStorage && !m_updateUserAgent) {
m_updateUserAgent = true;
@@ -400,12 +399,12 @@ void URLRequestContextGetterQt::updateHttpCache()
{
Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
QMutexLocker lock(&m_mutex);
- m_httpCacheType = m_browserContext.data()->httpCacheType();
- m_httpCachePath = m_browserContext.data()->httpCachePath();
- m_httpCacheMaxSize = m_browserContext.data()->httpCacheMaxSize();
+ m_httpCacheType = m_browserContextAdapter->httpCacheType();
+ m_httpCachePath = m_browserContextAdapter->httpCachePath();
+ m_httpCacheMaxSize = m_browserContextAdapter->httpCacheMaxSize();
if (m_httpCacheType == BrowserContextAdapter::NoCache) {
- content::BrowsingDataRemover *remover = content::BrowserContext::GetBrowsingDataRemover(m_browserContext.data()->browserContext());
+ content::BrowsingDataRemover *remover = content::BrowserContext::GetBrowsingDataRemover(m_browserContextAdapter->browserContext());
remover->Remove(base::Time(), base::Time::Max(),
content::BrowsingDataRemover::DATA_TYPE_CACHE,
content::BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB | content::BrowsingDataRemover::ORIGIN_TYPE_PROTECTED_WEB);
@@ -422,7 +421,8 @@ void URLRequestContextGetterQt::updateJobFactory()
{
Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
QMutexLocker lock(&m_mutex);
- m_customUrlSchemes = m_browserContext.data()->customUrlSchemes();
+
+ m_customUrlSchemes = m_browserContextAdapter->customUrlSchemes();
if (m_contextInitialized && !m_updateJobFactory) {
m_updateJobFactory = true;
@@ -435,7 +435,7 @@ void URLRequestContextGetterQt::updateRequestInterceptor()
{
Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
QMutexLocker lock(&m_mutex);
- m_requestInterceptor = m_browserContext.data()->requestInterceptor();
+ m_requestInterceptor = m_browserContextAdapter->requestInterceptor();
// We in this case do not need to regenerate any Chromium classes.
}
@@ -584,7 +584,7 @@ void URLRequestContextGetterQt::generateJobFactory()
m_installedCustomSchemes = m_customUrlSchemes;
Q_FOREACH (const QByteArray &scheme, m_installedCustomSchemes) {
- jobFactory->SetProtocolHandler(scheme.toStdString(), std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler>(new CustomProtocolHandler(m_browserContext)));
+ jobFactory->SetProtocolHandler(scheme.toStdString(), std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler>(new CustomProtocolHandler(m_browserContextAdapter)));
}
m_baseJobFactory = jobFactory.get();
@@ -627,7 +627,7 @@ void URLRequestContextGetterQt::regenerateJobFactory()
m_installedCustomSchemes = m_customUrlSchemes;
Q_FOREACH (const QByteArray &scheme, m_installedCustomSchemes) {
- m_baseJobFactory->SetProtocolHandler(scheme.toStdString(), std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler>(new CustomProtocolHandler(m_browserContext)));
+ m_baseJobFactory->SetProtocolHandler(scheme.toStdString(), std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler>(new CustomProtocolHandler(m_browserContextAdapter)));
}
}
diff --git a/src/core/net/url_request_context_getter_qt.h b/src/core/net/url_request_context_getter_qt.h
index 0eb4a2fe4..fbc445e4f 100644
--- a/src/core/net/url_request_context_getter_qt.h
+++ b/src/core/net/url_request_context_getter_qt.h
@@ -70,7 +70,9 @@ namespace QtWebEngineCore {
// FIXME: This class should be split into a URLRequestContextGetter and a ProfileIOData, similar to what chrome does.
class URLRequestContextGetterQt : public net::URLRequestContextGetter {
public:
- URLRequestContextGetterQt(QSharedPointer<BrowserContextAdapter> browserContext, content::ProtocolHandlerMap *protocolHandlers, content::URLRequestInterceptorScopedVector request_interceptors);
+ URLRequestContextGetterQt(BrowserContextAdapter *browserContext,
+ content::ProtocolHandlerMap *protocolHandlers,
+ content::URLRequestInterceptorScopedVector request_interceptors);
net::URLRequestContext *GetURLRequestContext() override;
scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() const override;
@@ -82,6 +84,7 @@ public:
void updateHttpCache();
void updateJobFactory();
void updateRequestInterceptor();
+ void setFullConfiguration();
private:
virtual ~URLRequestContextGetterQt();
@@ -98,10 +101,7 @@ private:
net::HttpNetworkSession::Params generateNetworkSessionParams();
net::HttpNetworkSession::Context generateNetworkSessionContext();
- void setFullConfiguration(QSharedPointer<BrowserContextAdapter> browserContext);
-
bool m_ignoreCertificateErrors;
-
QMutex m_mutex;
bool m_contextInitialized;
bool m_updateAllStorage;
@@ -110,9 +110,10 @@ private:
bool m_updateJobFactory;
bool m_updateUserAgent;
- QWeakPointer<BrowserContextAdapter> m_browserContext;
+ // m_browserContext is never dereferenced in IO thread and it is passed by
+ // qpointer in generateJobFactory
+ QPointer<BrowserContextAdapter> m_browserContextAdapter;
content::ProtocolHandlerMap m_protocolHandlers;
-
QAtomicPointer<net::ProxyConfigService> m_proxyConfigService;
std::unique_ptr<net::URLRequestContext> m_urlRequestContext;
std::unique_ptr<NetworkDelegateQt> m_networkDelegate;
diff --git a/src/core/net/url_request_custom_job.cpp b/src/core/net/url_request_custom_job.cpp
index cf96cd6d9..d9337687b 100644
--- a/src/core/net/url_request_custom_job.cpp
+++ b/src/core/net/url_request_custom_job.cpp
@@ -51,7 +51,7 @@ namespace QtWebEngineCore {
URLRequestCustomJob::URLRequestCustomJob(URLRequest *request,
NetworkDelegate *networkDelegate,
const std::string &scheme,
- QWeakPointer<const BrowserContextAdapter> adapter)
+ QPointer<BrowserContextAdapter> adapter)
: URLRequestJob(request, networkDelegate)
, m_proxy(new URLRequestCustomJobProxy(this, scheme, adapter))
, m_device(nullptr)
diff --git a/src/core/net/url_request_custom_job.h b/src/core/net/url_request_custom_job.h
index 021cf3204..71c8d2613 100644
--- a/src/core/net/url_request_custom_job.h
+++ b/src/core/net/url_request_custom_job.h
@@ -42,7 +42,7 @@
#include "net/url_request/url_request_job.h"
#include "url/gurl.h"
-#include <QtCore/QWeakPointer>
+#include <QtCore/QPointer>
QT_FORWARD_DECLARE_CLASS(QIODevice)
@@ -58,7 +58,7 @@ public:
URLRequestCustomJob(net::URLRequest *request,
net::NetworkDelegate *networkDelegate,
const std::string &scheme,
- QWeakPointer<const BrowserContextAdapter> adapter);
+ QPointer<BrowserContextAdapter> adapter);
void Start() override;
void Kill() override;
int ReadRawData(net::IOBuffer *buf, int buf_size) override;
diff --git a/src/core/net/url_request_custom_job_proxy.cpp b/src/core/net/url_request_custom_job_proxy.cpp
index 6c9824bb9..411e1c868 100644
--- a/src/core/net/url_request_custom_job_proxy.cpp
+++ b/src/core/net/url_request_custom_job_proxy.cpp
@@ -51,7 +51,7 @@ namespace QtWebEngineCore {
URLRequestCustomJobProxy::URLRequestCustomJobProxy(URLRequestCustomJob *job,
const std::string &scheme,
- QWeakPointer<const BrowserContextAdapter> adapter)
+ QPointer<BrowserContextAdapter> adapter)
: m_job(job)
, m_started(false)
, m_scheme(scheme)
@@ -160,10 +160,11 @@ void URLRequestCustomJobProxy::initialize(GURL url, std::string method, base::Op
if (initiator.has_value())
initiatorOrigin = toQt(initiator.value().GetURL());
- QWebEngineUrlSchemeHandler *schemeHandler = 0;
- QSharedPointer<const BrowserContextAdapter> browserContext = m_adapter.toStrongRef();
- if (browserContext)
- schemeHandler = browserContext->customUrlSchemeHandlers()[toQByteArray(m_scheme)];
+ QWebEngineUrlSchemeHandler *schemeHandler = nullptr;
+
+ if (m_adapter)
+ schemeHandler = m_adapter->customUrlSchemeHandlers()[toQByteArray(m_scheme)];
+
if (schemeHandler) {
m_delegate = new URLRequestCustomJobDelegate(this, toQt(url),
QByteArray::fromStdString(method),
diff --git a/src/core/net/url_request_custom_job_proxy.h b/src/core/net/url_request_custom_job_proxy.h
index 603ad5840..34d526348 100644
--- a/src/core/net/url_request_custom_job_proxy.h
+++ b/src/core/net/url_request_custom_job_proxy.h
@@ -44,7 +44,7 @@
#include "base/optional.h"
#include "url/gurl.h"
#include "url/origin.h"
-#include <QtCore/QWeakPointer>
+#include <QtCore/QPointer>
QT_FORWARD_DECLARE_CLASS(QIODevice)
@@ -62,7 +62,7 @@ class URLRequestCustomJobProxy
public:
URLRequestCustomJobProxy(URLRequestCustomJob *job,
const std::string &scheme,
- QWeakPointer<const BrowserContextAdapter> adapter);
+ QPointer<BrowserContextAdapter> adapter);
~URLRequestCustomJobProxy();
// Called from URLRequestCustomJobDelegate via post:
@@ -82,7 +82,7 @@ public:
// UI thread owned:
std::string m_scheme;
URLRequestCustomJobDelegate *m_delegate;
- QWeakPointer<const BrowserContextAdapter> m_adapter;
+ QPointer<BrowserContextAdapter> m_adapter;
};
} // namespace QtWebEngineCore