summaryrefslogtreecommitdiffstats
path: root/src/core/url_request_custom_job.cpp
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2017-09-04 16:35:08 +0200
committerMichal Klocek <michal.klocek@qt.io>2017-09-11 09:58:55 +0000
commit7a7f5276cc7bbb5138054886b1eadd5d334988a0 (patch)
treedd62ea073f302e8368710386cf1de3d77d9c9da5 /src/core/url_request_custom_job.cpp
parentcccde2776eb261af6af62bf04140a09b533252ff (diff)
Refactor URLRequestCustomJob
Move URLRequestCustomJobShared to separate file and rename class to URLRequestCustomJobProxy. This commit is a groundwork for following one. Change-Id: I122b2101789e91186a3bffa9a07eed43b7340418 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core/url_request_custom_job.cpp')
-rw-r--r--src/core/url_request_custom_job.cpp283
1 files changed, 35 insertions, 248 deletions
diff --git a/src/core/url_request_custom_job.cpp b/src/core/url_request_custom_job.cpp
index d093efd0a..724a879e0 100644
--- a/src/core/url_request_custom_job.cpp
+++ b/src/core/url_request_custom_job.cpp
@@ -38,57 +38,50 @@
****************************************************************************/
#include "url_request_custom_job.h"
-#include "url_request_custom_job_delegate.h"
-
-#include "api/qwebengineurlrequestjob.h"
-#include "api/qwebengineurlschemehandler.h"
-#include "browser_context_adapter.h"
-#include "type_conversion.h"
-
+#include "url_request_custom_job_proxy.h"
#include "content/public/browser/browser_thread.h"
-#include "net/base/net_errors.h"
#include "net/base/io_buffer.h"
-#include <QFileInfo>
-#include <QMimeDatabase>
-#include <QMimeType>
-#include <QUrl>
+#include <QIODevice>
using namespace net;
namespace QtWebEngineCore {
-URLRequestCustomJob::URLRequestCustomJob(URLRequest *request, NetworkDelegate *networkDelegate,
- const std::string &scheme, QWeakPointer<const BrowserContextAdapter> adapter)
+URLRequestCustomJob::URLRequestCustomJob(URLRequest *request,
+ NetworkDelegate *networkDelegate,
+ const std::string &scheme,
+ QWeakPointer<const BrowserContextAdapter> adapter)
: URLRequestJob(request, networkDelegate)
, m_scheme(scheme)
, m_adapter(adapter)
- , m_shared(new URLRequestCustomJobShared(this))
+ , m_proxy(new URLRequestCustomJobProxy(this))
{
}
URLRequestCustomJob::~URLRequestCustomJob()
{
- if (m_shared)
- m_shared->killJob();
+ if (m_proxy)
+ m_proxy->killJob();
}
-static void startAsync(URLRequestCustomJobShared *shared)
+static void startAsync(URLRequestCustomJobProxy *proxy)
{
- shared->startAsync();
+ proxy->startAsync();
}
void URLRequestCustomJob::Start()
{
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, base::Bind(&startAsync, m_shared));
+ content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&startAsync, m_proxy));
}
void URLRequestCustomJob::Kill()
{
- if (m_shared)
- m_shared->killJob();
- m_shared = 0;
+ if (m_proxy)
+ m_proxy->killJob();
+ m_proxy = 0;
URLRequestJob::Kill();
}
@@ -96,11 +89,11 @@ void URLRequestCustomJob::Kill()
bool URLRequestCustomJob::GetMimeType(std::string *mimeType) const
{
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- if (!m_shared)
+ if (!m_proxy)
return false;
- QMutexLocker lock(&m_shared->m_mutex);
- if (m_shared->m_mimeType.size() > 0) {
- *mimeType = m_shared->m_mimeType;
+ QMutexLocker lock(&m_proxy->m_mutex);
+ if (m_proxy->m_mimeType.size() > 0) {
+ *mimeType = m_proxy->m_mimeType;
return true;
}
return false;
@@ -109,11 +102,11 @@ bool URLRequestCustomJob::GetMimeType(std::string *mimeType) const
bool URLRequestCustomJob::GetCharset(std::string* charset)
{
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- if (!m_shared)
+ if (!m_proxy)
return false;
- QMutexLocker lock(&m_shared->m_mutex);
- if (m_shared->m_charset.size() > 0) {
- *charset = m_shared->m_charset;
+ QMutexLocker lock(&m_proxy->m_mutex);
+ if (m_proxy->m_charset.size() > 0) {
+ *charset = m_proxy->m_charset;
return true;
}
return false;
@@ -122,11 +115,11 @@ bool URLRequestCustomJob::GetCharset(std::string* charset)
bool URLRequestCustomJob::IsRedirectResponse(GURL* location, int* http_status_code)
{
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- if (!m_shared)
+ if (!m_proxy)
return false;
- QMutexLocker lock(&m_shared->m_mutex);
- if (m_shared->m_redirect.is_valid()) {
- *location = m_shared->m_redirect;
+ QMutexLocker lock(&m_proxy->m_mutex);
+ if (m_proxy->m_redirect.is_valid()) {
+ *location = m_proxy->m_redirect;
*http_status_code = 303;
return true;
}
@@ -136,224 +129,18 @@ bool URLRequestCustomJob::IsRedirectResponse(GURL* location, int* http_status_co
int URLRequestCustomJob::ReadRawData(IOBuffer *buf, int bufSize)
{
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- Q_ASSERT(m_shared);
- QMutexLocker lock(&m_shared->m_mutex);
- if (m_shared->m_error)
- return m_shared->m_error;
- qint64 rv = m_shared->m_device ? m_shared->m_device->read(buf->data(), bufSize) : -1;
+ Q_ASSERT(m_proxy);
+ QMutexLocker lock(&m_proxy->m_mutex);
+ if (m_proxy->m_error)
+ return m_proxy->m_error;
+ qint64 rv = m_proxy->m_device ? m_proxy->m_device->read(buf->data(), bufSize) : -1;
if (rv >= 0)
return static_cast<int>(rv);
else {
// QIODevice::read might have called fail on us.
- if (m_shared->m_error)
- return m_shared->m_error;
+ if (m_proxy->m_error)
+ return m_proxy->m_error;
return ERR_FAILED;
}
}
-
-
-URLRequestCustomJobShared::URLRequestCustomJobShared(URLRequestCustomJob *job)
- : m_mutex(QMutex::Recursive)
- , m_job(job)
- , m_delegate(0)
- , m_error(0)
- , m_started(false)
- , m_asyncInitialized(false)
- , m_weakFactory(this)
-{
-}
-
-URLRequestCustomJobShared::~URLRequestCustomJobShared()
-{
- Q_ASSERT(!m_job);
- Q_ASSERT(!m_delegate);
-}
-
-void URLRequestCustomJobShared::killJob()
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- QMutexLocker lock(&m_mutex);
- m_job = 0;
- bool doDelete = false;
- if (m_delegate) {
- m_delegate->deleteLater();
- } else {
- // Do not delete yet if startAsync has not yet run.
- doDelete = m_asyncInitialized;
- }
- if (m_device && m_device->isOpen())
- m_device->close();
- m_device = 0;
- m_weakFactory.InvalidateWeakPtrs();
- lock.unlock();
- if (doDelete)
- delete this;
-}
-
-void URLRequestCustomJobShared::unsetJobDelegate()
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- QMutexLocker lock(&m_mutex);
- m_delegate = 0;
- bool doDelete = false;
- if (m_job)
- abort();
- else
- doDelete = true;
- lock.unlock();
- if (doDelete)
- delete this;
-}
-
-void URLRequestCustomJobShared::setReplyMimeType(const std::string &mimeType)
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- QMutexLocker lock(&m_mutex);
- m_mimeType = mimeType;
-}
-
-void URLRequestCustomJobShared::setReplyCharset(const std::string &charset)
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- QMutexLocker lock(&m_mutex);
- m_charset = charset;
-}
-
-void URLRequestCustomJobShared::setReplyDevice(QIODevice *device)
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- QMutexLocker lock(&m_mutex);
- if (!m_job)
- return;
- m_device = device;
- if (m_device && !m_device->isReadable())
- m_device->open(QIODevice::ReadOnly);
-
- qint64 size = m_device ? m_device->size() : -1;
- if (size > 0)
- m_job->set_expected_content_size(size);
- if (m_device && m_device->isReadable())
- content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, base::Bind(&URLRequestCustomJobShared::notifyStarted, m_weakFactory.GetWeakPtr()));
- else
- fail(ERR_INVALID_URL);
-}
-
-void URLRequestCustomJobShared::redirect(const GURL &url)
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-
- QMutexLocker lock(&m_mutex);
- if (m_device || m_error)
- return;
- if (!m_job)
- return;
- m_redirect = url;
- content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, base::Bind(&URLRequestCustomJobShared::notifyStarted, m_weakFactory.GetWeakPtr()));
-}
-
-void URLRequestCustomJobShared::abort()
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- QMutexLocker lock(&m_mutex);
- if (m_device && m_device->isOpen())
- m_device->close();
- m_device = 0;
- if (!m_job)
- return;
- content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, base::Bind(&URLRequestCustomJobShared::notifyCanceled, m_weakFactory.GetWeakPtr()));
-}
-
-void URLRequestCustomJobShared::notifyCanceled()
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- QMutexLocker lock(&m_mutex);
- if (!m_job)
- return;
- if (m_started)
- m_job->NotifyCanceled();
- else
- m_job->NotifyStartError(URLRequestStatus(URLRequestStatus::CANCELED, ERR_ABORTED));
-}
-
-void URLRequestCustomJobShared::notifyStarted()
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- QMutexLocker lock(&m_mutex);
- if (!m_job)
- return;
- Q_ASSERT(!m_started);
- m_started = true;
- m_job->NotifyHeadersComplete();
-}
-
-void URLRequestCustomJobShared::fail(int error)
-{
- QMutexLocker lock(&m_mutex);
- m_error = error;
- if (content::BrowserThread::CurrentlyOn(content::BrowserThread::IO))
- return;
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- if (!m_job)
- return;
- content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, base::Bind(&URLRequestCustomJobShared::notifyFailure, m_weakFactory.GetWeakPtr()));
-}
-
-void URLRequestCustomJobShared::notifyFailure()
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- QMutexLocker lock(&m_mutex);
- if (!m_job)
- return;
- if (m_device)
- m_device->close();
- if (!m_started)
- m_job->NotifyStartError(URLRequestStatus::FromError(m_error));
- // else we fail on the next read, or the read that might already be in progress
-}
-
-GURL URLRequestCustomJobShared::requestUrl()
-{
- QMutexLocker lock(&m_mutex);
- if (!m_job)
- return GURL();
- return m_job->request()->url();
-}
-
-std::string URLRequestCustomJobShared::requestMethod()
-{
- QMutexLocker lock(&m_mutex);
- if (!m_job)
- return std::string();
- return m_job->request()->method();
-}
-
-void URLRequestCustomJobShared::startAsync()
-{
- DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- Q_ASSERT(!m_started);
- Q_ASSERT(!m_delegate);
- QMutexLocker lock(&m_mutex);
- if (!m_job) {
- lock.unlock();
- delete this;
- return;
- }
-
- QWebEngineUrlSchemeHandler *schemeHandler = 0;
- QSharedPointer<const BrowserContextAdapter> browserContext = m_job->m_adapter.toStrongRef();
- if (browserContext)
- schemeHandler = browserContext->customUrlSchemeHandlers()[toQByteArray(m_job->m_scheme)];
- if (schemeHandler) {
- m_delegate = new URLRequestCustomJobDelegate(this);
- m_asyncInitialized = true;
- QWebEngineUrlRequestJob *requestJob = new QWebEngineUrlRequestJob(m_delegate);
- schemeHandler->requestStarted(requestJob);
- } else {
- lock.unlock();
- abort();
- delete this;
- return;
- }
-}
-
} // namespace