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

Side by Side Diff: net/http/http_pipelined_connection_impl.cc

Issue 10534129: NetLogEventParameter to Callback refactoring 5. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Add back original URLs Created 8 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/http/http_network_transaction.cc ('k') | net/http/http_proxy_client_socket.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/http/http_pipelined_connection_impl.h" 5 #include "net/http/http_pipelined_connection_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "net/base/io_buffer.h" 12 #include "net/base/io_buffer.h"
13 #include "net/http/http_pipelined_stream.h" 13 #include "net/http/http_pipelined_stream.h"
14 #include "net/http/http_request_info.h" 14 #include "net/http/http_request_info.h"
15 #include "net/http/http_response_body_drainer.h" 15 #include "net/http/http_response_body_drainer.h"
16 #include "net/http/http_response_headers.h" 16 #include "net/http/http_response_headers.h"
17 #include "net/http/http_stream_parser.h" 17 #include "net/http/http_stream_parser.h"
18 #include "net/http/http_version.h" 18 #include "net/http/http_version.h"
19 #include "net/socket/client_socket_handle.h" 19 #include "net/socket/client_socket_handle.h"
20 20
21 using base::DictionaryValue; 21 using base::DictionaryValue;
22 using base::Value; 22 using base::Value;
23 23
24 namespace net { 24 namespace net {
25 25
26 namespace { 26 namespace {
27 27
28 class ReceivedHeadersParameters : public NetLog::EventParameters { 28 Value* NetLogReceivedHeadersCallback(const NetLog::Source& source,
29 public: 29 const std::string* feedback,
30 ReceivedHeadersParameters(const NetLog::Source& source, 30 NetLog::LogLevel /* log_level */) {
31 const std::string& feedback) 31 DictionaryValue* dict = new DictionaryValue;
32 : source_(source), feedback_(feedback) {} 32 source.AddToEventParameters(dict);
33 dict->SetString("feedback", *feedback);
34 return dict;
35 }
33 36
34 virtual Value* ToValue() const OVERRIDE { 37 Value* NetLogStreamClosedCallback(const NetLog::Source& source,
35 DictionaryValue* dict = new DictionaryValue; 38 bool not_reusable,
36 dict->Set("source_dependency", source_.ToValue()); 39 NetLog::LogLevel /* log_level */) {
37 dict->SetString("feedback", feedback_); 40 DictionaryValue* dict = new DictionaryValue;
38 return dict; 41 source.AddToEventParameters(dict);
39 } 42 dict->SetBoolean("not_reusable", not_reusable);
43 return dict;
44 }
40 45
41 protected: 46 Value* NetLogHostPortPairCallback(const HostPortPair* host_port_pair,
42 virtual ~ReceivedHeadersParameters() {} 47 NetLog::LogLevel /* log_level */) {
43 48 DictionaryValue* dict = new DictionaryValue;
44 private: 49 dict->SetString("host_and_port", host_port_pair->ToString());
45 const NetLog::Source source_; 50 return dict;
46 const std::string feedback_; 51 }
47 };
48
49 class StreamClosedParameters : public NetLog::EventParameters {
50 public:
51 StreamClosedParameters(const NetLog::Source& source, bool not_reusable)
52 : source_(source), not_reusable_(not_reusable) {}
53
54 virtual Value* ToValue() const OVERRIDE {
55 DictionaryValue* dict = new DictionaryValue;
56 dict->Set("source_dependency", source_.ToValue());
57 dict->SetBoolean("not_reusable", not_reusable_);
58 return dict;
59 }
60
61 protected:
62 virtual ~StreamClosedParameters() {}
63
64 private:
65 const NetLog::Source source_;
66 const bool not_reusable_;
67 };
68 52
69 } // anonymous namespace 53 } // anonymous namespace
70 54
71 HttpPipelinedConnectionImpl::HttpPipelinedConnectionImpl( 55 HttpPipelinedConnectionImpl::HttpPipelinedConnectionImpl(
72 ClientSocketHandle* connection, 56 ClientSocketHandle* connection,
73 HttpPipelinedConnection::Delegate* delegate, 57 HttpPipelinedConnection::Delegate* delegate,
74 const HostPortPair& origin, 58 const HostPortPair& origin,
75 const SSLConfig& used_ssl_config, 59 const SSLConfig& used_ssl_config,
76 const ProxyInfo& used_proxy_info, 60 const ProxyInfo& used_proxy_info,
77 const BoundNetLog& net_log, 61 const BoundNetLog& net_log,
(...skipping 14 matching lines...) Expand all
92 completed_one_request_(false), 76 completed_one_request_(false),
93 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), 77 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
94 send_next_state_(SEND_STATE_NONE), 78 send_next_state_(SEND_STATE_NONE),
95 send_still_on_call_stack_(false), 79 send_still_on_call_stack_(false),
96 read_next_state_(READ_STATE_NONE), 80 read_next_state_(READ_STATE_NONE),
97 active_read_id_(0), 81 active_read_id_(0),
98 read_still_on_call_stack_(false) { 82 read_still_on_call_stack_(false) {
99 CHECK(connection_.get()); 83 CHECK(connection_.get());
100 net_log_.BeginEvent( 84 net_log_.BeginEvent(
101 NetLog::TYPE_HTTP_PIPELINED_CONNECTION, 85 NetLog::TYPE_HTTP_PIPELINED_CONNECTION,
102 make_scoped_refptr(new NetLogStringParameter( 86 base::Bind(&NetLogHostPortPairCallback, &origin));
103 "host_and_port", origin.ToString())));
104 } 87 }
105 88
106 HttpPipelinedConnectionImpl::~HttpPipelinedConnectionImpl() { 89 HttpPipelinedConnectionImpl::~HttpPipelinedConnectionImpl() {
107 CHECK_EQ(depth(), 0); 90 CHECK_EQ(depth(), 0);
108 CHECK(stream_info_map_.empty()); 91 CHECK(stream_info_map_.empty());
109 CHECK(pending_send_request_queue_.empty()); 92 CHECK(pending_send_request_queue_.empty());
110 CHECK(request_order_.empty()); 93 CHECK(request_order_.empty());
111 CHECK_EQ(send_next_state_, SEND_STATE_NONE); 94 CHECK_EQ(send_next_state_, SEND_STATE_NONE);
112 CHECK_EQ(read_next_state_, READ_STATE_NONE); 95 CHECK_EQ(read_next_state_, READ_STATE_NONE);
113 CHECK(!active_send_request_.get()); 96 CHECK(!active_send_request_.get());
114 CHECK(!active_read_id_); 97 CHECK(!active_read_id_);
115 if (!usable_) { 98 if (!usable_) {
116 connection_->socket()->Disconnect(); 99 connection_->socket()->Disconnect();
117 } 100 }
118 connection_->Reset(); 101 connection_->Reset();
119 net_log_.EndEvent(NetLog::TYPE_HTTP_PIPELINED_CONNECTION, NULL); 102 net_log_.EndEvent(NetLog::TYPE_HTTP_PIPELINED_CONNECTION);
120 } 103 }
121 104
122 HttpPipelinedStream* HttpPipelinedConnectionImpl::CreateNewStream() { 105 HttpPipelinedStream* HttpPipelinedConnectionImpl::CreateNewStream() {
123 int pipeline_id = next_pipeline_id_++; 106 int pipeline_id = next_pipeline_id_++;
124 CHECK(pipeline_id); 107 CHECK(pipeline_id);
125 HttpPipelinedStream* stream = new HttpPipelinedStream(this, pipeline_id); 108 HttpPipelinedStream* stream = new HttpPipelinedStream(this, pipeline_id);
126 stream_info_map_.insert(std::make_pair(pipeline_id, StreamInfo())); 109 stream_info_map_.insert(std::make_pair(pipeline_id, StreamInfo()));
127 return stream; 110 return stream;
128 } 111 }
129 112
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 269
287 int HttpPipelinedConnectionImpl::DoSendComplete(int result) { 270 int HttpPipelinedConnectionImpl::DoSendComplete(int result) {
288 CHECK(active_send_request_.get()); 271 CHECK(active_send_request_.get());
289 CHECK_EQ(STREAM_SENDING, 272 CHECK_EQ(STREAM_SENDING,
290 stream_info_map_[active_send_request_->pipeline_id].state); 273 stream_info_map_[active_send_request_->pipeline_id].state);
291 274
292 request_order_.push(active_send_request_->pipeline_id); 275 request_order_.push(active_send_request_->pipeline_id);
293 stream_info_map_[active_send_request_->pipeline_id].state = STREAM_SENT; 276 stream_info_map_[active_send_request_->pipeline_id].state = STREAM_SENT;
294 net_log_.AddEvent( 277 net_log_.AddEvent(
295 NetLog::TYPE_HTTP_PIPELINED_CONNECTION_SENT_REQUEST, 278 NetLog::TYPE_HTTP_PIPELINED_CONNECTION_SENT_REQUEST,
296 make_scoped_refptr(new NetLogSourceParameter( 279 stream_info_map_[active_send_request_->pipeline_id].source.
297 "source_dependency", 280 ToEventParametersCallback());
298 stream_info_map_[active_send_request_->pipeline_id].source)));
299 281
300 if (result == ERR_SOCKET_NOT_CONNECTED && completed_one_request_) { 282 if (result == ERR_SOCKET_NOT_CONNECTED && completed_one_request_) {
301 result = ERR_PIPELINE_EVICTION; 283 result = ERR_PIPELINE_EVICTION;
302 } 284 }
303 if (result < OK) { 285 if (result < OK) {
304 usable_ = false; 286 usable_ = false;
305 } 287 }
306 288
307 if (!send_still_on_call_stack_) { 289 if (!send_still_on_call_stack_) {
308 QueueUserCallback(active_send_request_->pipeline_id, 290 QueueUserCallback(active_send_request_->pipeline_id,
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 } 524 }
543 read_next_state_ = READ_STATE_NONE; 525 read_next_state_ = READ_STATE_NONE;
544 return result; 526 return result;
545 } 527 }
546 528
547 void HttpPipelinedConnectionImpl::Close(int pipeline_id, 529 void HttpPipelinedConnectionImpl::Close(int pipeline_id,
548 bool not_reusable) { 530 bool not_reusable) {
549 CHECK(ContainsKey(stream_info_map_, pipeline_id)); 531 CHECK(ContainsKey(stream_info_map_, pipeline_id));
550 net_log_.AddEvent( 532 net_log_.AddEvent(
551 NetLog::TYPE_HTTP_PIPELINED_CONNECTION_STREAM_CLOSED, 533 NetLog::TYPE_HTTP_PIPELINED_CONNECTION_STREAM_CLOSED,
552 make_scoped_refptr(new StreamClosedParameters( 534 base::Bind(&NetLogStreamClosedCallback,
553 stream_info_map_[pipeline_id].source, not_reusable))); 535 stream_info_map_[pipeline_id].source, not_reusable));
554 switch (stream_info_map_[pipeline_id].state) { 536 switch (stream_info_map_[pipeline_id].state) {
555 case STREAM_CREATED: 537 case STREAM_CREATED:
556 stream_info_map_[pipeline_id].state = STREAM_UNUSED; 538 stream_info_map_[pipeline_id].state = STREAM_UNUSED;
557 break; 539 break;
558 540
559 case STREAM_BOUND: 541 case STREAM_BOUND:
560 stream_info_map_[pipeline_id].state = STREAM_CLOSED; 542 stream_info_map_[pipeline_id].state = STREAM_CLOSED;
561 break; 543 break;
562 544
563 case STREAM_SENDING: 545 case STREAM_SENDING:
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 feedback_str = "AUTHENTICATION_REQUIRED"; 737 feedback_str = "AUTHENTICATION_REQUIRED";
756 break; 738 break;
757 739
758 default: 740 default:
759 NOTREACHED(); 741 NOTREACHED();
760 feedback_str = "UNKNOWN"; 742 feedback_str = "UNKNOWN";
761 break; 743 break;
762 } 744 }
763 net_log_.AddEvent( 745 net_log_.AddEvent(
764 NetLog::TYPE_HTTP_PIPELINED_CONNECTION_RECEIVED_HEADERS, 746 NetLog::TYPE_HTTP_PIPELINED_CONNECTION_RECEIVED_HEADERS,
765 make_scoped_refptr(new ReceivedHeadersParameters( 747 base::Bind(&NetLogReceivedHeadersCallback,
766 stream_info_map_[pipeline_id].source, feedback_str))); 748 stream_info_map_[pipeline_id].source, &feedback_str));
767 delegate_->OnPipelineFeedback(this, feedback); 749 delegate_->OnPipelineFeedback(this, feedback);
768 } 750 }
769 751
770 void HttpPipelinedConnectionImpl::QueueUserCallback( 752 void HttpPipelinedConnectionImpl::QueueUserCallback(
771 int pipeline_id, const CompletionCallback& callback, int rv, 753 int pipeline_id, const CompletionCallback& callback, int rv,
772 const tracked_objects::Location& from_here) { 754 const tracked_objects::Location& from_here) {
773 CHECK(stream_info_map_[pipeline_id].pending_user_callback.is_null()); 755 CHECK(stream_info_map_[pipeline_id].pending_user_callback.is_null());
774 stream_info_map_[pipeline_id].pending_user_callback = callback; 756 stream_info_map_[pipeline_id].pending_user_callback = callback;
775 MessageLoop::current()->PostTask( 757 MessageLoop::current()->PostTask(
776 from_here, 758 from_here,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 } 814 }
833 815
834 HttpPipelinedConnectionImpl::StreamInfo::StreamInfo() 816 HttpPipelinedConnectionImpl::StreamInfo::StreamInfo()
835 : state(STREAM_CREATED) { 817 : state(STREAM_CREATED) {
836 } 818 }
837 819
838 HttpPipelinedConnectionImpl::StreamInfo::~StreamInfo() { 820 HttpPipelinedConnectionImpl::StreamInfo::~StreamInfo() {
839 } 821 }
840 822
841 } // namespace net 823 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_network_transaction.cc ('k') | net/http/http_proxy_client_socket.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698