diff options
Diffstat (limited to 'src/core/net/url_request_custom_job.cpp')
-rw-r--r-- | src/core/net/url_request_custom_job.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/core/net/url_request_custom_job.cpp b/src/core/net/url_request_custom_job.cpp index cba9b4dc5..dd213d4f8 100644 --- a/src/core/net/url_request_custom_job.cpp +++ b/src/core/net/url_request_custom_job.cpp @@ -40,10 +40,13 @@ #include "url_request_custom_job.h" #include "url_request_custom_job_proxy.h" +#include "api/qwebengineurlscheme.h" +#include "base/strings/stringprintf.h" #include "base/task/post_task.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "net/base/io_buffer.h" +#include "net/http/http_util.h" #include <QIODevice> @@ -62,6 +65,9 @@ URLRequestCustomJob::URLRequestCustomJob(URLRequest *request, , m_pendingReadSize(0) , m_pendingReadPos(0) , m_pendingReadBuffer(nullptr) + , m_corsEnabled(QWebEngineUrlScheme::schemeByName(QByteArray::fromStdString(scheme)) + .flags().testFlag(QWebEngineUrlScheme::CorsEnabled)) + , m_httpStatusCode(500) { } @@ -136,6 +142,26 @@ bool URLRequestCustomJob::GetCharset(std::string* charset) return false; } +void URLRequestCustomJob::GetResponseInfo(HttpResponseInfo* info) +{ + // Based on net::URLRequestRedirectJob::StartAsync() + + if (!m_corsEnabled) + return; + + std::string headers; + headers += base::StringPrintf("HTTP/1.1 %i OK\n", m_httpStatusCode); + if (m_redirect.is_valid()) + headers += base::StringPrintf("Location: %s\n", m_redirect.spec().c_str()); + std::string origin; + if (request_->extra_request_headers().GetHeader("Origin", &origin)) { + headers += base::StringPrintf("Access-Control-Allow-Origin: %s\n", origin.c_str()); + headers += "Access-Control-Allow-Credentials: true\n"; + } + + info->headers = new HttpResponseHeaders(HttpUtil::AssembleRawHeaders(headers.c_str(), headers.size())); +} + bool URLRequestCustomJob::IsRedirectResponse(GURL* location, int* http_status_code, bool* /*insecure_scheme_was_upgraded*/) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |