OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/devtools/devtools_network_transaction.h" | |
6 | |
7 #include "chrome/browser/devtools/devtools_network_controller.h" | |
8 #include "net/base/net_errors.h" | |
9 #include "net/http/http_network_transaction.h" | |
10 #include "net/http/http_request_info.h" | |
11 | |
12 DevToolsNetworkTransaction::DevToolsNetworkTransaction( | |
13 DevToolsNetworkController* controller, | |
14 scoped_ptr<net::HttpTransaction> network_transaction) | |
15 : controller_(controller), | |
16 network_transaction_(network_transaction.Pass()), | |
17 started_(false), | |
18 has_devtools_request_header_(false), | |
19 failed_(false), | |
20 proxy_callback_(base::Bind(&DevToolsNetworkTransaction::OnCallback, | |
21 base::Unretained(this))) { | |
22 DCHECK(controller); | |
23 controller->AddTransaction(this); | |
24 } | |
25 | |
26 DevToolsNetworkTransaction::~DevToolsNetworkTransaction() { | |
27 controller_->RemoveTransaction(this); | |
28 } | |
29 | |
30 void DevToolsNetworkTransaction::OnCallback(int rv) { | |
31 if (failed_) | |
32 return; | |
33 DCHECK(!callback_.is_null()); | |
34 net::CompletionCallback callback = callback_; | |
35 callback_.Reset(); | |
36 callback.Run(rv); | |
37 } | |
38 | |
39 void DevToolsNetworkTransaction::Fail() { | |
40 DCHECK(started_); | |
41 DCHECK(!failed_); | |
42 failed_ = true; | |
43 if (callback_.is_null()) | |
44 return; | |
45 net::CompletionCallback callback = callback_; | |
46 callback_.Reset(); | |
47 callback.Run(net::ERR_INTERNET_DISCONNECTED); | |
48 } | |
49 | |
50 int DevToolsNetworkTransaction::Start( | |
51 const net::HttpRequestInfo* request_info, | |
52 const net::CompletionCallback& callback, | |
53 const net::BoundNetLog& net_log) { | |
54 started_ = true; | |
55 url_ = request_info->url; | |
mmenke
2014/04/21 17:16:51
Can't we just keep a pointer to request_info, like
eustas
2014/04/22 14:23:09
Good idea. Done.
| |
56 has_devtools_request_header_ = | |
57 request_info->extra_headers.HasHeader("X-DevTools-Request-Initiator"); | |
mmenke
2014/04/21 17:16:51
This header should probably be in a shared header.
eustas
2014/04/22 14:23:09
Remote debugging is no longer a case.
The main cas
| |
58 | |
59 if (controller_->ShouldFail(this)) { | |
60 failed_ = true; | |
61 return net::ERR_INTERNET_DISCONNECTED; | |
62 } | |
63 int rv = network_transaction_->Start(request_info, proxy_callback_, net_log); | |
64 if (rv == net::ERR_IO_PENDING) | |
65 callback_ = callback; | |
66 return rv; | |
67 } | |
68 | |
69 int DevToolsNetworkTransaction::RestartIgnoringLastError( | |
70 const net::CompletionCallback& callback) { | |
71 if (failed_) | |
72 return net::ERR_INTERNET_DISCONNECTED; | |
73 int rv = network_transaction_->RestartIgnoringLastError(proxy_callback_); | |
74 if (rv == net::ERR_IO_PENDING) | |
75 callback_ = callback; | |
76 return rv; | |
77 } | |
78 | |
79 int DevToolsNetworkTransaction::RestartWithCertificate( | |
80 net::X509Certificate* client_cert, | |
81 const net::CompletionCallback& callback) { | |
82 if (failed_) | |
83 return net::ERR_INTERNET_DISCONNECTED; | |
84 int rv = network_transaction_->RestartWithCertificate( | |
85 client_cert, proxy_callback_); | |
86 if (rv == net::ERR_IO_PENDING) | |
87 callback_ = callback; | |
88 return rv; | |
89 } | |
90 | |
91 int DevToolsNetworkTransaction::RestartWithAuth( | |
92 const net::AuthCredentials& credentials, | |
93 const net::CompletionCallback& callback) { | |
94 if (failed_) | |
95 return net::ERR_INTERNET_DISCONNECTED; | |
96 int rv = network_transaction_->RestartWithAuth(credentials, proxy_callback_); | |
97 if (rv == net::ERR_IO_PENDING) | |
98 callback_ = callback; | |
99 return rv; | |
100 } | |
101 | |
102 bool DevToolsNetworkTransaction::IsReadyToRestartForAuth() { | |
103 return network_transaction_->IsReadyToRestartForAuth(); | |
104 } | |
105 | |
106 int DevToolsNetworkTransaction::Read( | |
107 net::IOBuffer* buf, | |
108 int buf_len, | |
109 const net::CompletionCallback& callback) { | |
110 if (failed_) | |
111 return net::ERR_INTERNET_DISCONNECTED; | |
112 int rv = network_transaction_->Read(buf, buf_len, proxy_callback_); | |
113 if (rv == net::ERR_IO_PENDING) | |
114 callback_ = callback; | |
115 return rv; | |
116 } | |
117 | |
118 void DevToolsNetworkTransaction::StopCaching() { | |
119 network_transaction_->StopCaching(); | |
120 } | |
121 | |
122 bool DevToolsNetworkTransaction::GetFullRequestHeaders( | |
123 net::HttpRequestHeaders* headers) const { | |
124 return network_transaction_->GetFullRequestHeaders(headers); | |
125 } | |
126 | |
127 int64 DevToolsNetworkTransaction::GetTotalReceivedBytes() const { | |
128 return network_transaction_->GetTotalReceivedBytes(); | |
129 } | |
130 | |
131 void DevToolsNetworkTransaction::DoneReading() { | |
132 network_transaction_->DoneReading(); | |
133 } | |
134 | |
135 const net::HttpResponseInfo* DevToolsNetworkTransaction::GetResponseInfo() const | |
136 { | |
mmenke
2014/04/21 17:16:51
Believe that the way this is generally handled is
eustas
2014/04/22 14:23:09
Done.
| |
137 return network_transaction_->GetResponseInfo(); | |
138 } | |
139 | |
140 net::LoadState DevToolsNetworkTransaction::GetLoadState() const { | |
141 return network_transaction_->GetLoadState(); | |
142 } | |
143 | |
144 net::UploadProgress DevToolsNetworkTransaction::GetUploadProgress() const { | |
145 return network_transaction_->GetUploadProgress(); | |
146 } | |
147 | |
148 void DevToolsNetworkTransaction::SetQuicServerInfo( | |
149 net::QuicServerInfo* quic_server_info) { | |
150 network_transaction_->SetQuicServerInfo(quic_server_info); | |
151 } | |
152 | |
153 bool DevToolsNetworkTransaction::GetLoadTimingInfo( | |
154 net::LoadTimingInfo* load_timing_info) const { | |
155 return network_transaction_->GetLoadTimingInfo(load_timing_info); | |
156 } | |
157 | |
158 void DevToolsNetworkTransaction::SetPriority(net::RequestPriority priority) { | |
159 network_transaction_->SetPriority(priority); | |
160 } | |
161 | |
162 void DevToolsNetworkTransaction::SetWebSocketHandshakeStreamCreateHelper( | |
163 net::WebSocketHandshakeStreamBase::CreateHelper* create_helper) { | |
164 network_transaction_->SetWebSocketHandshakeStreamCreateHelper(create_helper); | |
165 } | |
166 | |
167 void DevToolsNetworkTransaction::SetBeforeNetworkStartCallback( | |
168 const BeforeNetworkStartCallback& callback) { | |
169 // TODO: investigate. | |
mmenke
2014/04/21 17:16:51
Are you planning on investigating before landing t
eustas
2014/04/22 14:23:09
Resolved.
| |
170 network_transaction_->SetBeforeNetworkStartCallback(callback); | |
171 } | |
172 | |
173 int DevToolsNetworkTransaction::ResumeNetworkStart() { | |
174 return network_transaction_->ResumeNetworkStart(); | |
175 } | |
OLD | NEW |