Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: headless/public/util/generic_url_request_job.cc

Issue 2822473002: Add GetPostData and ID to headless::Request plus fix GetFrameTreeNodeId (Closed)
Patch Set: Add a test for GetPostData Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {
« no previous file with comments | « headless/public/util/generic_url_request_job.h ('k') | headless/public/util/generic_url_request_job_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698