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

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