OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "headless/public/util/generic_url_request_job.h" | 5 #include "headless/public/util/generic_url_request_job.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 #include <algorithm> | 8 #include <algorithm> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "content/public/browser/devtools_agent_host.h" | 11 #include "content/public/browser/devtools_agent_host.h" |
12 #include "content/public/browser/render_frame_host.h" | 12 #include "content/public/browser/render_frame_host.h" |
13 #include "content/public/browser/resource_request_info.h" | 13 #include "content/public/browser/resource_request_info.h" |
14 #include "content/public/browser/web_contents.h" | 14 #include "content/public/browser/web_contents.h" |
15 #include "headless/lib/browser/headless_browser_context_impl.h" | |
16 #include "headless/public/headless_browser_context.h" | |
15 #include "headless/public/util/url_request_dispatcher.h" | 17 #include "headless/public/util/url_request_dispatcher.h" |
16 #include "net/base/io_buffer.h" | 18 #include "net/base/io_buffer.h" |
17 #include "net/base/net_errors.h" | 19 #include "net/base/net_errors.h" |
18 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 20 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
19 #include "net/base/upload_bytes_element_reader.h" | 21 #include "net/base/upload_bytes_element_reader.h" |
20 #include "net/cookies/cookie_store.h" | 22 #include "net/cookies/cookie_store.h" |
21 #include "net/http/http_response_headers.h" | 23 #include "net/http/http_response_headers.h" |
22 #include "net/url_request/url_request_context.h" | 24 #include "net/url_request/url_request_context.h" |
23 | 25 |
24 namespace headless { | 26 namespace headless { |
(...skipping 10 matching lines...) Expand all Loading... | |
35 | 37 |
36 } // namespace | 38 } // namespace |
37 | 39 |
38 uint64_t GenericURLRequestJob::next_request_id_ = 0; | 40 uint64_t GenericURLRequestJob::next_request_id_ = 0; |
39 | 41 |
40 GenericURLRequestJob::GenericURLRequestJob( | 42 GenericURLRequestJob::GenericURLRequestJob( |
41 net::URLRequest* request, | 43 net::URLRequest* request, |
42 net::NetworkDelegate* network_delegate, | 44 net::NetworkDelegate* network_delegate, |
43 URLRequestDispatcher* url_request_dispatcher, | 45 URLRequestDispatcher* url_request_dispatcher, |
44 std::unique_ptr<URLFetcher> url_fetcher, | 46 std::unique_ptr<URLFetcher> url_fetcher, |
45 Delegate* delegate) | 47 Delegate* delegate, |
48 HeadlessBrowserContext* headless_browser_context) | |
46 : ManagedDispatchURLRequestJob(request, | 49 : ManagedDispatchURLRequestJob(request, |
47 network_delegate, | 50 network_delegate, |
48 url_request_dispatcher), | 51 url_request_dispatcher), |
49 url_fetcher_(std::move(url_fetcher)), | 52 url_fetcher_(std::move(url_fetcher)), |
50 origin_task_runner_(base::ThreadTaskRunnerHandle::Get()), | 53 origin_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
51 delegate_(delegate), | 54 delegate_(delegate), |
55 headless_browser_context_(headless_browser_context), | |
52 request_resource_info_( | 56 request_resource_info_( |
53 content::ResourceRequestInfo::ForRequest(request_)), | 57 content::ResourceRequestInfo::ForRequest(request_)), |
54 request_id_(next_request_id_++), | 58 request_id_(next_request_id_++), |
55 weak_factory_(this) {} | 59 weak_factory_(this) {} |
56 | 60 |
57 GenericURLRequestJob::~GenericURLRequestJob() { | 61 GenericURLRequestJob::~GenericURLRequestJob() { |
58 DCHECK(origin_task_runner_->RunsTasksOnCurrentThread()); | 62 DCHECK(origin_task_runner_->RunsTasksOnCurrentThread()); |
59 } | 63 } |
60 | 64 |
61 void GenericURLRequestJob::SetExtraRequestHeaders( | 65 void GenericURLRequestJob::SetExtraRequestHeaders( |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
190 } | 194 } |
191 | 195 |
192 const net::URLRequest* GenericURLRequestJob::GetURLRequest() const { | 196 const net::URLRequest* GenericURLRequestJob::GetURLRequest() const { |
193 return request_; | 197 return request_; |
194 } | 198 } |
195 | 199 |
196 int GenericURLRequestJob::GetFrameTreeNodeId() const { | 200 int GenericURLRequestJob::GetFrameTreeNodeId() const { |
197 // URLRequestUserData will be set for all renderer initiated resource | 201 // URLRequestUserData will be set for all renderer initiated resource |
198 // requests, but not for browser side navigations. | 202 // requests, but not for browser side navigations. |
199 int render_process_id; | 203 int render_process_id; |
200 int render_frame_id; | 204 int render_frame_routing_id; |
201 if (content::ResourceRequestInfo::GetRenderFrameForRequest( | 205 if (content::ResourceRequestInfo::GetRenderFrameForRequest( |
202 request_, &render_process_id, &render_frame_id)) { | 206 request_, &render_process_id, &render_frame_routing_id) && |
207 render_process_id != -1) { | |
208 if (headless_browser_context_) { | |
209 return static_cast<HeadlessBrowserContextImpl*>(headless_browser_context_) | |
210 ->GetFrameTreeNodeId(render_process_id, render_frame_routing_id); | |
211 } | |
212 // TODO(alexclarke): Remove this. | |
203 content::RenderFrameHost* render_frame_host = | 213 content::RenderFrameHost* render_frame_host = |
204 content::RenderFrameHost::FromID(render_process_id, render_frame_id); | 214 content::RenderFrameHost::FromID(render_process_id, |
215 render_frame_routing_id); | |
205 DCHECK(render_frame_host); | 216 DCHECK(render_frame_host); |
206 return render_frame_host->GetFrameTreeNodeId(); | 217 return render_frame_host->GetFrameTreeNodeId(); |
207 } | 218 } |
208 // ResourceRequestInfo::GetFrameTreeNodeId is only set for browser side | 219 // ResourceRequestInfo::GetFrameTreeNodeId is only set for browser side |
209 // navigations. | 220 // navigations. |
210 if (request_resource_info_) | 221 if (request_resource_info_) |
211 return request_resource_info_->GetFrameTreeNodeId(); | 222 return request_resource_info_->GetFrameTreeNodeId(); |
Charlie Reis
2017/04/27 18:58:02
Will the need for the map go away in PlzNavigate,
alex clarke (OOO till 29th)
2017/04/28 09:14:45
Only for browser side navigations. We still need
Charlie Reis
2017/04/28 20:29:03
Acknowledged. Hopefully your URLRequestUserData i
| |
212 | 223 |
213 // This should only happen in tests. | 224 // This should only happen in tests. |
214 return -1; | 225 return -1; |
215 } | 226 } |
216 | 227 |
217 std::string GenericURLRequestJob::GetDevToolsAgentHostId() const { | 228 std::string GenericURLRequestJob::GetDevToolsAgentHostId() const { |
218 return content::DevToolsAgentHost::GetOrCreateFor( | 229 return content::DevToolsAgentHost::GetOrCreateFor( |
219 request_resource_info_->GetWebContentsGetterForRequest().Run()) | 230 request_resource_info_->GetWebContentsGetterForRequest().Run()) |
220 ->GetId(); | 231 ->GetId(); |
221 } | 232 } |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
341 } | 352 } |
342 | 353 |
343 mock_response_ = std::move(mock_response); | 354 mock_response_ = std::move(mock_response); |
344 | 355 |
345 OnFetchCompleteExtractHeaders(request_->url(), | 356 OnFetchCompleteExtractHeaders(request_->url(), |
346 mock_response_->response_data.data(), | 357 mock_response_->response_data.data(), |
347 mock_response_->response_data.size()); | 358 mock_response_->response_data.size()); |
348 } | 359 } |
349 | 360 |
350 } // namespace headless | 361 } // namespace headless |
OLD | NEW |