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

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: Fix new tests 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
« no previous file with comments | « net/url_request/url_request_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 79
80 class StreamRequestImpl : public WebSocketStreamRequest { 80 class StreamRequestImpl : public WebSocketStreamRequest {
81 public: 81 public:
82 StreamRequestImpl( 82 StreamRequestImpl(
83 const GURL& url, 83 const GURL& url,
84 const URLRequestContext* context, 84 const URLRequestContext* context,
85 const url::Origin& origin, 85 const url::Origin& origin,
86 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate, 86 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate,
87 scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper) 87 scoped_ptr<WebSocketHandshakeStreamCreateHelper> create_helper)
88 : delegate_(new Delegate(this)), 88 : delegate_(new Delegate(this)),
89 url_request_(url, DEFAULT_PRIORITY, delegate_.get(), context), 89 url_request_(context->CreateRequest(url, DEFAULT_PRIORITY,
90 delegate_.get(), NULL)),
90 connect_delegate_(connect_delegate.Pass()), 91 connect_delegate_(connect_delegate.Pass()),
91 create_helper_(create_helper.release()) { 92 create_helper_(create_helper.release()) {
92 create_helper_->set_failure_message(&failure_message_); 93 create_helper_->set_failure_message(&failure_message_);
93 HttpRequestHeaders headers; 94 HttpRequestHeaders headers;
94 headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase); 95 headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase);
95 headers.SetHeader(HttpRequestHeaders::kConnection, websockets::kUpgrade); 96 headers.SetHeader(HttpRequestHeaders::kConnection, websockets::kUpgrade);
96 headers.SetHeader(HttpRequestHeaders::kOrigin, origin.string()); 97 headers.SetHeader(HttpRequestHeaders::kOrigin, origin.string());
97 headers.SetHeader(websockets::kSecWebSocketVersion, 98 headers.SetHeader(websockets::kSecWebSocketVersion,
98 websockets::kSupportedVersion); 99 websockets::kSupportedVersion);
99 url_request_.SetExtraRequestHeaders(headers); 100 url_request_->SetExtraRequestHeaders(headers);
100 101
101 // This passes the ownership of |create_helper_| to |url_request_|. 102 // This passes the ownership of |create_helper_| to |url_request_|.
102 url_request_.SetUserData( 103 url_request_->SetUserData(
103 WebSocketHandshakeStreamBase::CreateHelper::DataKey(), 104 WebSocketHandshakeStreamBase::CreateHelper::DataKey(),
104 create_helper_); 105 create_helper_);
105 url_request_.SetLoadFlags(LOAD_DISABLE_CACHE | 106 url_request_->SetLoadFlags(LOAD_DISABLE_CACHE |
106 LOAD_BYPASS_CACHE | 107 LOAD_BYPASS_CACHE |
107 LOAD_DO_NOT_PROMPT_FOR_LOGIN); 108 LOAD_DO_NOT_PROMPT_FOR_LOGIN);
108 } 109 }
109 110
110 // Destroying this object destroys the URLRequest, which cancels the request 111 // Destroying this object destroys the URLRequest, which cancels the request
111 // and so terminates the handshake if it is incomplete. 112 // and so terminates the handshake if it is incomplete.
112 virtual ~StreamRequestImpl() {} 113 virtual ~StreamRequestImpl() {}
113 114
114 void Start() { 115 void Start() {
115 url_request_.Start(); 116 url_request_->Start();
116 } 117 }
117 118
118 void PerformUpgrade() { 119 void PerformUpgrade() {
119 connect_delegate_->OnSuccess(create_helper_->Upgrade()); 120 connect_delegate_->OnSuccess(create_helper_->Upgrade());
120 } 121 }
121 122
122 void ReportFailure() { 123 void ReportFailure() {
123 if (failure_message_.empty()) { 124 if (failure_message_.empty()) {
124 switch (url_request_.status().status()) { 125 switch (url_request_->status().status()) {
125 case URLRequestStatus::SUCCESS: 126 case URLRequestStatus::SUCCESS:
126 case URLRequestStatus::IO_PENDING: 127 case URLRequestStatus::IO_PENDING:
127 break; 128 break;
128 case URLRequestStatus::CANCELED: 129 case URLRequestStatus::CANCELED:
129 failure_message_ = "WebSocket opening handshake was canceled"; 130 failure_message_ = "WebSocket opening handshake was canceled";
130 break; 131 break;
131 case URLRequestStatus::FAILED: 132 case URLRequestStatus::FAILED:
132 failure_message_ = 133 failure_message_ =
133 std::string("Error in connection establishment: ") + 134 std::string("Error in connection establishment: ") +
134 ErrorToString(url_request_.status().error()); 135 ErrorToString(url_request_->status().error());
135 break; 136 break;
136 } 137 }
137 } 138 }
138 ReportFailureWithMessage(failure_message_); 139 ReportFailureWithMessage(failure_message_);
139 } 140 }
140 141
141 void ReportFailureWithMessage(const std::string& failure_message) { 142 void ReportFailureWithMessage(const std::string& failure_message) {
142 connect_delegate_->OnFailure(failure_message); 143 connect_delegate_->OnFailure(failure_message);
143 } 144 }
144 145
145 void OnFinishOpeningHandshake() { 146 void OnFinishOpeningHandshake() {
146 WebSocketDispatchOnFinishOpeningHandshake(connect_delegate(), 147 WebSocketDispatchOnFinishOpeningHandshake(connect_delegate(),
147 url_request_.url(), 148 url_request_->url(),
148 url_request_.response_headers(), 149 url_request_->response_headers(),
149 url_request_.response_time()); 150 url_request_->response_time());
150 } 151 }
151 152
152 WebSocketStream::ConnectDelegate* connect_delegate() const { 153 WebSocketStream::ConnectDelegate* connect_delegate() const {
153 return connect_delegate_.get(); 154 return connect_delegate_.get();
154 } 155 }
155 156
156 private: 157 private:
157 // |delegate_| needs to be declared before |url_request_| so that it gets 158 // |delegate_| needs to be declared before |url_request_| so that it gets
158 // initialised first. 159 // initialised first.
159 scoped_ptr<Delegate> delegate_; 160 scoped_ptr<Delegate> delegate_;
160 161
161 // Deleting the StreamRequestImpl object deletes this URLRequest object, 162 // Deleting the StreamRequestImpl object deletes this URLRequest object,
162 // cancelling the whole connection. 163 // cancelling the whole connection.
163 URLRequest url_request_; 164 scoped_ptr<URLRequest> url_request_;
164 165
165 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate_; 166 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate_;
166 167
167 // Owned by the URLRequest. 168 // Owned by the URLRequest.
168 WebSocketHandshakeStreamCreateHelper* create_helper_; 169 WebSocketHandshakeStreamCreateHelper* create_helper_;
169 170
170 // The failure message supplied by WebSocketBasicHandshakeStream, if any. 171 // The failure message supplied by WebSocketBasicHandshakeStream, if any.
171 std::string failure_message_; 172 std::string failure_message_;
172 }; 173 };
173 174
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 connect_delegate->OnFinishOpeningHandshake(make_scoped_ptr( 318 connect_delegate->OnFinishOpeningHandshake(make_scoped_ptr(
318 new WebSocketHandshakeResponseInfo(url, 319 new WebSocketHandshakeResponseInfo(url,
319 headers->response_code(), 320 headers->response_code(),
320 headers->GetStatusText(), 321 headers->GetStatusText(),
321 headers, 322 headers,
322 response_time))); 323 response_time)));
323 } 324 }
324 } 325 }
325 326
326 } // namespace net 327 } // namespace net
OLDNEW
« no previous file with comments | « net/url_request/url_request_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698