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

Side by Side Diff: net/websockets/websocket_stream.cc

Issue 407093011: Allow URLRequests from one context to have different NetworkDelegates. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: And fix more stuff... Created 6 years, 4 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/websockets/websocket_stream.h" 5 #include "net/websockets/websocket_stream.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/metrics/sparse_histogram.h" 10 #include "base/metrics/sparse_histogram.h"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 77
78 class StreamRequestImpl : public WebSocketStreamRequest { 78 class StreamRequestImpl : public WebSocketStreamRequest {
79 public: 79 public:
80 StreamRequestImpl( 80 StreamRequestImpl(
81 const GURL& url, 81 const GURL& url,
82 const URLRequestContext* context, 82 const URLRequestContext* context,
83 const url::Origin& origin, 83 const url::Origin& origin,
84 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate, 84 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate,
85 scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper) 85 scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper)
86 : delegate_(new Delegate(this)), 86 : delegate_(new Delegate(this)),
87 url_request_(url, DEFAULT_PRIORITY, delegate_.get(), context), 87 url_request_(context->CreateRequest(url, DEFAULT_PRIORITY,
88 delegate_.get(), NULL)),
88 connect_delegate_(connect_delegate.Pass()), 89 connect_delegate_(connect_delegate.Pass()),
89 create_helper_(create_helper.release()) { 90 create_helper_(create_helper.release()) {
90 create_helper_->set_failure_message(&failure_message_); 91 create_helper_->set_failure_message(&failure_message_);
91 HttpRequestHeaders headers; 92 HttpRequestHeaders headers;
92 headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase); 93 headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase);
93 headers.SetHeader(HttpRequestHeaders::kConnection, websockets::kUpgrade); 94 headers.SetHeader(HttpRequestHeaders::kConnection, websockets::kUpgrade);
94 headers.SetHeader(HttpRequestHeaders::kOrigin, origin.string()); 95 headers.SetHeader(HttpRequestHeaders::kOrigin, origin.string());
95 headers.SetHeader(websockets::kSecWebSocketVersion, 96 headers.SetHeader(websockets::kSecWebSocketVersion,
96 websockets::kSupportedVersion); 97 websockets::kSupportedVersion);
97 url_request_.SetExtraRequestHeaders(headers); 98 url_request_->SetExtraRequestHeaders(headers);
98 99
99 // This passes the ownership of |create_helper_| to |url_request_|. 100 // This passes the ownership of |create_helper_| to |url_request_|.
100 url_request_.SetUserData( 101 url_request_->SetUserData(
101 WebSocketHandshakeStreamBase::CreateHelper::DataKey(), 102 WebSocketHandshakeStreamBase::CreateHelper::DataKey(),
102 create_helper_); 103 create_helper_);
103 url_request_.SetLoadFlags(LOAD_DISABLE_CACHE | 104 url_request_->SetLoadFlags(LOAD_DISABLE_CACHE |
104 LOAD_BYPASS_CACHE | 105 LOAD_BYPASS_CACHE |
105 LOAD_DO_NOT_PROMPT_FOR_LOGIN); 106 LOAD_DO_NOT_PROMPT_FOR_LOGIN);
106 } 107 }
107 108
108 // Destroying this object destroys the URLRequest, which cancels the request 109 // Destroying this object destroys the URLRequest, which cancels the request
109 // and so terminates the handshake if it is incomplete. 110 // and so terminates the handshake if it is incomplete.
110 virtual ~StreamRequestImpl() {} 111 virtual ~StreamRequestImpl() {}
111 112
112 void Start() { 113 void Start() {
113 url_request_.Start(); 114 url_request_->Start();
114 } 115 }
115 116
116 void PerformUpgrade() { 117 void PerformUpgrade() {
117 connect_delegate_->OnSuccess(create_helper_->Upgrade()); 118 connect_delegate_->OnSuccess(create_helper_->Upgrade());
118 } 119 }
119 120
120 void ReportFailure() { 121 void ReportFailure() {
121 if (failure_message_.empty()) { 122 if (failure_message_.empty()) {
122 switch (url_request_.status().status()) { 123 switch (url_request_->status().status()) {
123 case URLRequestStatus::SUCCESS: 124 case URLRequestStatus::SUCCESS:
124 case URLRequestStatus::IO_PENDING: 125 case URLRequestStatus::IO_PENDING:
125 break; 126 break;
126 case URLRequestStatus::CANCELED: 127 case URLRequestStatus::CANCELED:
127 failure_message_ = "WebSocket opening handshake was canceled"; 128 failure_message_ = "WebSocket opening handshake was canceled";
128 break; 129 break;
129 case URLRequestStatus::FAILED: 130 case URLRequestStatus::FAILED:
130 failure_message_ = 131 failure_message_ =
131 std::string("Error in connection establishment: ") + 132 std::string("Error in connection establishment: ") +
132 ErrorToString(url_request_.status().error()); 133 ErrorToString(url_request_->status().error());
133 break; 134 break;
134 } 135 }
135 } 136 }
136 connect_delegate_->OnFailure(failure_message_); 137 connect_delegate_->OnFailure(failure_message_);
137 } 138 }
138 139
139 WebSocketStream::ConnectDelegate* connect_delegate() const { 140 WebSocketStream::ConnectDelegate* connect_delegate() const {
140 return connect_delegate_.get(); 141 return connect_delegate_.get();
141 } 142 }
142 143
143 private: 144 private:
144 // |delegate_| needs to be declared before |url_request_| so that it gets 145 // |delegate_| needs to be declared before |url_request_| so that it gets
145 // initialised first. 146 // initialised first.
146 scoped_ptr<Delegate> delegate_; 147 scoped_ptr<Delegate> delegate_;
147 148
148 // Deleting the StreamRequestImpl object deletes this URLRequest object, 149 // Deleting the StreamRequestImpl object deletes this URLRequest object,
149 // cancelling the whole connection. 150 // cancelling the whole connection.
150 URLRequest url_request_; 151 scoped_ptr<URLRequest> url_request_;
151 152
152 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate_; 153 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate_;
153 154
154 // Owned by the URLRequest. 155 // Owned by the URLRequest.
155 WebSocketHandshakeStreamCreateHelper* create_helper_; 156 WebSocketHandshakeStreamCreateHelper* create_helper_;
156 157
157 // The failure message supplied by WebSocketBasicHandshakeStream, if any. 158 // The failure message supplied by WebSocketBasicHandshakeStream, if any.
158 std::string failure_message_; 159 std::string failure_message_;
159 }; 160 };
160 161
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 new StreamRequestImpl(socket_url, 280 new StreamRequestImpl(socket_url,
280 url_request_context, 281 url_request_context,
281 origin, 282 origin,
282 connect_delegate.Pass(), 283 connect_delegate.Pass(),
283 create_helper.Pass())); 284 create_helper.Pass()));
284 request->Start(); 285 request->Start();
285 return request.PassAs<WebSocketStreamRequest>(); 286 return request.PassAs<WebSocketStreamRequest>();
286 } 287 }
287 288
288 } // namespace net 289 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698