From 543c4d55972b7958807e20fa1b1d7f13b8ba168d Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 17 Jun 2015 11:20:09 +0800 Subject: [PATCH] Allow setting referrer --- atom/browser/api/atom_api_protocol.cc | 5 +++-- atom/browser/api/lib/protocol.coffee | 2 +- atom/browser/net/adapter_request_job.cc | 5 +++-- atom/browser/net/adapter_request_job.h | 4 +++- atom/browser/net/url_request_fetch_job.cc | 9 ++++++++- atom/browser/net/url_request_fetch_job.h | 3 ++- 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/atom/browser/api/atom_api_protocol.cc b/atom/browser/api/atom_api_protocol.cc index 186e36a52210..9bc2de4b42a9 100644 --- a/atom/browser/api/atom_api_protocol.cc +++ b/atom/browser/api/atom_api_protocol.cc @@ -125,13 +125,14 @@ class CustomProtocolRequestJob : public AdapterRequestJob { return; } else if (name == "RequestHttpJob") { GURL url; - std::string method; + std::string method, referrer; dict.Get("url", &url); dict.Get("method", &method); + dict.Get("referrer", &referrer); BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(&AdapterRequestJob::CreateHttpJobAndStart, - GetWeakPtr(), url, method)); + GetWeakPtr(), url, method, referrer)); return; } } diff --git a/atom/browser/api/lib/protocol.coffee b/atom/browser/api/lib/protocol.coffee index 2f6617a173c7..ff4bc5ba9a66 100644 --- a/atom/browser/api/lib/protocol.coffee +++ b/atom/browser/api/lib/protocol.coffee @@ -36,6 +36,6 @@ class RequestErrorJob protocol.RequestHttpJob = class RequestHttpJob - constructor: ({@url, @method}) -> + constructor: ({@url, @method, @referrer}) -> module.exports = protocol diff --git a/atom/browser/net/adapter_request_job.cc b/atom/browser/net/adapter_request_job.cc index ff5d4deaa595..08331829b550 100644 --- a/atom/browser/net/adapter_request_job.cc +++ b/atom/browser/net/adapter_request_job.cc @@ -115,14 +115,15 @@ void AdapterRequestJob::CreateFileJobAndStart(const base::FilePath& path) { } void AdapterRequestJob::CreateHttpJobAndStart(const GURL& url, - const std::string& method) { + const std::string& method, + const std::string& referrer) { if (!url.is_valid()) { CreateErrorJobAndStart(net::ERR_INVALID_URL); return; } real_job_ = new URLRequestFetchJob(request(), network_delegate(), url, - method); + method, referrer); real_job_->Start(); } diff --git a/atom/browser/net/adapter_request_job.h b/atom/browser/net/adapter_request_job.h index 4c173f0de825..d5e814d214d4 100644 --- a/atom/browser/net/adapter_request_job.h +++ b/atom/browser/net/adapter_request_job.h @@ -59,7 +59,9 @@ class AdapterRequestJob : public net::URLRequestJob { const std::string& charset, scoped_refptr data); void CreateFileJobAndStart(const base::FilePath& path); - void CreateHttpJobAndStart(const GURL& url, const std::string& method); + void CreateHttpJobAndStart(const GURL& url, + const std::string& method, + const std::string& referrer); void CreateJobFromProtocolHandlerAndStart(); private: diff --git a/atom/browser/net/url_request_fetch_job.cc b/atom/browser/net/url_request_fetch_job.cc index c064ee6d913a..35e46a8f4f8d 100644 --- a/atom/browser/net/url_request_fetch_job.cc +++ b/atom/browser/net/url_request_fetch_job.cc @@ -76,7 +76,8 @@ URLRequestFetchJob::URLRequestFetchJob( net::URLRequest* request, net::NetworkDelegate* network_delegate, const GURL& url, - const std::string& method) + const std::string& method, + const std::string& referrer) : net::URLRequestJob(request, network_delegate), pending_buffer_size_(0) { // Use |request|'s method if |method| is not specified. @@ -90,6 +91,12 @@ URLRequestFetchJob::URLRequestFetchJob( auto context = AtomBrowserContext::Get()->url_request_context_getter(); fetcher_->SetRequestContext(context); fetcher_->SaveResponseWithWriter(make_scoped_ptr(new ResponsePiper(this))); + + // Use |request|'s referrer if |referrer| is not specified. + if (referrer.empty()) + fetcher_->SetReferrer(request->referrer()); + else + fetcher_->SetReferrer(referrer); } void URLRequestFetchJob::HeadersCompleted() { diff --git a/atom/browser/net/url_request_fetch_job.h b/atom/browser/net/url_request_fetch_job.h index 23a4a9f8dd72..affa7b331f3e 100644 --- a/atom/browser/net/url_request_fetch_job.h +++ b/atom/browser/net/url_request_fetch_job.h @@ -16,7 +16,8 @@ class URLRequestFetchJob : public net::URLRequestJob, URLRequestFetchJob(net::URLRequest* request, net::NetworkDelegate* network_delegate, const GURL& url, - const std::string& method); + const std::string& method, + const std::string& referrer); void HeadersCompleted(); int DataAvailable(net::IOBuffer* buffer, int num_bytes);