Index: headless/public/util/generic_url_request_job.cc |
diff --git a/headless/public/util/generic_url_request_job.cc b/headless/public/util/generic_url_request_job.cc |
index b618913e47f9bbbbf055efffd45cd8424a1c0c62..664177de32c250c163fe0f9a4a8886e3851d5e0a 100644 |
--- a/headless/public/util/generic_url_request_job.cc |
+++ b/headless/public/util/generic_url_request_job.cc |
@@ -9,6 +9,7 @@ |
#include "base/logging.h" |
#include "content/public/browser/devtools_agent_host.h" |
+#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/resource_request_info.h" |
#include "content/public/browser/web_contents.h" |
#include "headless/public/util/url_request_dispatcher.h" |
@@ -34,6 +35,8 @@ const char kDevtoolsRequestId[] = "X-DevTools-Request-Id"; |
} // namespace |
+uint64_t GenericURLRequestJob::next_request_id_ = 0; |
+ |
GenericURLRequestJob::GenericURLRequestJob( |
net::URLRequest* request, |
net::NetworkDelegate* network_delegate, |
@@ -48,6 +51,7 @@ GenericURLRequestJob::GenericURLRequestJob( |
delegate_(delegate), |
request_resource_info_( |
content::ResourceRequestInfo::ForRequest(request_)), |
+ request_id_(next_request_id_++), |
weak_factory_(this) {} |
GenericURLRequestJob::~GenericURLRequestJob() { |
@@ -110,12 +114,14 @@ void GenericURLRequestJob::OnCookiesAvailable( |
DCHECK(origin_task_runner_->RunsTasksOnCurrentThread()); |
// TODO(alexclarke): Set user agent. |
// Pass cookies, the referrer and any extra headers into the fetch request. |
- extra_request_headers_.SetHeader( |
- net::HttpRequestHeaders::kCookie, |
- net::CookieStore::BuildCookieLine(cookie_list)); |
+ std::string cookie = net::CookieStore::BuildCookieLine(cookie_list); |
+ if (!cookie.empty()) |
+ extra_request_headers_.SetHeader(net::HttpRequestHeaders::kCookie, cookie); |
- extra_request_headers_.SetHeader(net::HttpRequestHeaders::kReferer, |
- request_->referrer()); |
+ if (!request_->referrer().empty()) { |
+ extra_request_headers_.SetHeader(net::HttpRequestHeaders::kReferer, |
+ request_->referrer()); |
+ } |
done_callback.Run(); |
} |
@@ -185,12 +191,33 @@ void GenericURLRequestJob::GetLoadTimingInfo( |
load_timing_info->receive_headers_end = response_time_; |
} |
+uint64_t GenericURLRequestJob::GenericURLRequestJob::GetRequestId() const { |
+ return request_id_; |
+} |
+ |
const net::URLRequest* GenericURLRequestJob::GetURLRequest() const { |
return request_; |
} |
int GenericURLRequestJob::GetFrameTreeNodeId() const { |
- return request_resource_info_->GetFrameTreeNodeId(); |
+ // URLRequestUserData will be set for all renderer initiated resource |
+ // requests, but not for browser side navigations. |
+ int render_process_id; |
+ int render_frame_id; |
+ if (content::ResourceRequestInfo::GetRenderFrameForRequest( |
+ request_, &render_process_id, &render_frame_id)) { |
+ content::RenderFrameHost* render_frame_host = |
+ content::RenderFrameHost::FromID(render_process_id, render_frame_id); |
+ DCHECK(render_frame_host); |
+ return render_frame_host->GetFrameTreeNodeId(); |
+ } |
+ // ResourceRequestInfo::GetFrameTreeNodeId is only set for browser side |
+ // navigations. |
+ if (request_resource_info_) |
+ return request_resource_info_->GetFrameTreeNodeId(); |
+ |
+ // This should only happen in tests. |
+ return -1; |
} |
std::string GenericURLRequestJob::GetDevToolsAgentHostId() const { |
@@ -200,6 +227,10 @@ std::string GenericURLRequestJob::GetDevToolsAgentHostId() const { |
} |
Request::ResourceType GenericURLRequestJob::GetResourceType() const { |
+ // This should only happen in some tests. |
+ if (!request_resource_info_) |
+ return Request::ResourceType::MAIN_FRAME; |
+ |
switch (request_resource_info_->GetResourceType()) { |
case content::RESOURCE_TYPE_MAIN_FRAME: |
return Request::ResourceType::MAIN_FRAME; |
@@ -243,12 +274,11 @@ Request::ResourceType GenericURLRequestJob::GetResourceType() const { |
} |
} |
-namespace { |
-std::string GetUploadData(net::URLRequest* request) { |
- if (!request->has_upload()) |
+std::string GenericURLRequestJob::GetPostData() const { |
+ if (!request_->has_upload()) |
return ""; |
- const net::UploadDataStream* stream = request->get_upload(); |
+ const net::UploadDataStream* stream = request_->get_upload(); |
if (!stream->GetElementReaders()) |
return ""; |
@@ -257,7 +287,6 @@ std::string GetUploadData(net::URLRequest* request) { |
(*stream->GetElementReaders())[0]->AsBytesReader(); |
return std::string(reader->bytes(), reader->length()); |
} |
-} // namespace |
const Request* GenericURLRequestJob::GetRequest() const { |
return this; |
@@ -271,9 +300,8 @@ void GenericURLRequestJob::AllowRequest() { |
return; |
} |
- url_fetcher_->StartFetch(request_->url(), request_->method(), |
- GetUploadData(request_), extra_request_headers_, |
- this); |
+ url_fetcher_->StartFetch(request_->url(), request_->method(), GetPostData(), |
+ extra_request_headers_, this); |
} |
void GenericURLRequestJob::BlockRequest(net::Error error) { |