diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2019-09-24 17:46:19 +0200 |
---|---|---|
committer | Jüri Valdmann <juri.valdmann@qt.io> | 2019-09-25 15:56:35 +0200 |
commit | e31acc86e991d6f83bd56eebb7371914fc9ca5ac (patch) | |
tree | 349d3cde4ec0083b5fbd21245b6506478848bd03 /src | |
parent | 3db2cf8b8e3cf98ed03ab7220e4006946b741973 (diff) |
Fix XMLHttpRequest status with custom schemes
Emulate a HTTP 200 OK response when QWebEngineUrlRequestJob::reply is called so
that an XMLHttpRequest to a custom scheme gets a proper 'status' property.
Note that calling QWebEngineUrlRequestJob::fail on the other hand emulates a
network error, meaning it triggers the 'error' event in XMLHttpRequest.
Fixes: QTBUG-78316
Change-Id: Ia7249a5b72533aa7e2ed4ef8f62d8b6b89820cc1
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/net/url_request_custom_job.cpp | 18 | ||||
-rw-r--r-- | src/core/net/url_request_custom_job.h | 1 |
2 files changed, 19 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..d8442707e 100644 --- a/src/core/net/url_request_custom_job.cpp +++ b/src/core/net/url_request_custom_job.cpp @@ -40,10 +40,12 @@ #include "url_request_custom_job.h" #include "url_request_custom_job_proxy.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> @@ -136,6 +138,22 @@ bool URLRequestCustomJob::GetCharset(std::string* charset) return false; } +void URLRequestCustomJob::GetResponseInfo(HttpResponseInfo* info) +{ + if (m_error) + return; + + std::string headers; + if (m_redirect.is_valid()) { + headers += "HTTP/1.1 303 See Other\n"; + headers += base::StringPrintf("Location: %s\n", m_redirect.spec().c_str()); + } else { + headers += "HTTP/1.1 200 OK\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); diff --git a/src/core/net/url_request_custom_job.h b/src/core/net/url_request_custom_job.h index 16be76f29..c800d1595 100644 --- a/src/core/net/url_request_custom_job.h +++ b/src/core/net/url_request_custom_job.h @@ -64,6 +64,7 @@ public: int ReadRawData(net::IOBuffer *buf, int buf_size) override; bool GetMimeType(std::string *mimeType) const override; bool GetCharset(std::string *charset) override; + void GetResponseInfo(net::HttpResponseInfo* info) override; bool IsRedirectResponse(GURL* location, int* http_status_code, bool* insecure_scheme_was_upgraded) override; protected: |