From 3b585086049089224422e6f839485be5a4235524 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 30 Apr 2015 15:15:02 +0200 Subject: Add redirect and error API for custom URL Adds API for failing or redirecting custom URL requests. Change-Id: Ia633bff2c0b8484fd6fdb8d42982fda2e427db4c Reviewed-by: Andras Becsi --- src/core/url_request_custom_job.cpp | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src/core/url_request_custom_job.cpp') diff --git a/src/core/url_request_custom_job.cpp b/src/core/url_request_custom_job.cpp index 0b8aaf9ba..cd71b6900 100644 --- a/src/core/url_request_custom_job.cpp +++ b/src/core/url_request_custom_job.cpp @@ -117,6 +117,18 @@ bool URLRequestCustomJob::GetCharset(std::string* charset) return false; } +bool URLRequestCustomJob::IsRedirectResponse(GURL* location, int* http_status_code) +{ + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + QMutexLocker lock(&m_mutex); + if (m_redirect.is_valid()) { + *location = m_redirect; + *http_status_code = 303; + return true; + } + return false; +} + void URLRequestCustomJob::setReplyMimeType(const std::string &mimeType) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); @@ -158,6 +170,36 @@ bool URLRequestCustomJob::ReadRawData(IOBuffer *buf, int bufSize, int *bytesRead return false; } +void URLRequestCustomJob::redirect(const GURL &url) +{ + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (m_device || m_error) + return; + + QMutexLocker lock(&m_mutex); + m_redirect = url; + content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, base::Bind(&URLRequestCustomJob::notifyStarted, m_weakFactory.GetWeakPtr())); +} + +void URLRequestCustomJob::abort() +{ + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + QMutexLocker lock(&m_mutex); + if (m_device && m_device->isOpen()) + m_device->close(); + m_device = 0; + content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, base::Bind(&URLRequestCustomJob::notifyCanceled, m_weakFactory.GetWeakPtr())); +} + +void URLRequestCustomJob::notifyCanceled() +{ + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + if (m_started) + NotifyDone(URLRequestStatus(URLRequestStatus::CANCELED, ERR_ABORTED)); + else + NotifyStartError(URLRequestStatus(URLRequestStatus::CANCELED, ERR_ABORTED)); +} + void URLRequestCustomJob::notifyStarted() { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); -- cgit v1.2.3