diff options
author | Michal Klocek <michal.klocek@qt.io> | 2017-09-04 16:00:47 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2017-09-11 09:59:06 +0000 |
commit | 73286f99b4ecc3f11485e36b1a090849e5efd4ef (patch) | |
tree | b8777d08de2df84bd82701cd4cc710f925d7a41c /src/core/url_request_custom_job_delegate.h | |
parent | 7a7f5276cc7bbb5138054886b1eadd5d334988a0 (diff) |
Simplify URLRequestCustomJob handling
Improve implementation of URLRequestCustomJob:
* remove qmutex, pass values using PostTask
* do not use base::WeakPtr which is not thread safe and must
always be dereferenced on the same thread
* add proxy object to handle interactions between threads
* do not use QPointer to track IODevice since it does not solve
anything for us
* QIODevice in reply method is used only by IO thread
* do not make shared object to commit suicide,
instead use refcounted object
* improve documentation about thread safety issue of QIODevice
object in reply method
Change-Id: Ic29bf262de8082dfd46cb9217a68f3c982d16b9e
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core/url_request_custom_job_delegate.h')
-rw-r--r-- | src/core/url_request_custom_job_delegate.h | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/core/url_request_custom_job_delegate.h b/src/core/url_request_custom_job_delegate.h index 732ff8d7a..eb99f3576 100644 --- a/src/core/url_request_custom_job_delegate.h +++ b/src/core/url_request_custom_job_delegate.h @@ -40,6 +40,7 @@ #ifndef URL_REQUEST_CUSTOM_JOB_DELEGATE_H_ #define URL_REQUEST_CUSTOM_JOB_DELEGATE_H_ +#include "base/memory/ref_counted.h" #include "qtwebenginecoreglobal.h" #include <QObject> @@ -68,17 +69,20 @@ public: QUrl url() const; QByteArray method() const; - void setReply(const QByteArray &contentType, QIODevice *device); + void reply(const QByteArray &contentType, QIODevice *device); void redirect(const QUrl& url); void abort(); - void fail(Error); private: - URLRequestCustomJobDelegate(URLRequestCustomJobProxy *proxy); + URLRequestCustomJobDelegate(URLRequestCustomJobProxy *proxy, + const QUrl &url, + const QByteArray &method); friend class URLRequestCustomJobProxy; - URLRequestCustomJobProxy *m_proxy; + scoped_refptr<URLRequestCustomJobProxy> m_proxy; + QUrl m_request; + QByteArray m_method; }; } // namespace |