| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 "services/authenticating_url_loader_interceptor/authenticating_url_load
er_interceptor.h" | 5 #include "services/authenticating_url_loader_interceptor/authenticating_url_load
er_interceptor.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "mojo/services/network/public/interfaces/network_service.mojom.h" | 9 #include "mojo/services/network/public/interfaces/network_service.mojom.h" |
| 10 | 10 |
| 11 namespace mojo { | 11 namespace mojo { |
| 12 | 12 |
| 13 AuthenticatingURLLoaderInterceptor::AuthenticatingURLLoaderInterceptor( | 13 AuthenticatingURLLoaderInterceptor::AuthenticatingURLLoaderInterceptor( |
| 14 mojo::InterfaceRequest<URLLoaderInterceptor> request, | 14 mojo::InterfaceRequest<URLLoaderInterceptor> request, |
| 15 AuthenticatingURLLoaderInterceptorFactory* factory) | 15 AuthenticatingURLLoaderInterceptorFactory* factory) |
| 16 : binding_(this, request.Pass()), | 16 : binding_(this, request.Pass()), |
| 17 factory_(factory), | 17 factory_(factory), |
| 18 add_authentication_(true), | 18 add_authentication_(true), |
| 19 request_authorization_state_(REQUEST_INITIAL) { | 19 request_authorization_state_(REQUEST_INITIAL) { |
| 20 binding_.set_error_handler(this); | |
| 21 } | 20 } |
| 22 | 21 |
| 23 AuthenticatingURLLoaderInterceptor::~AuthenticatingURLLoaderInterceptor() { | 22 AuthenticatingURLLoaderInterceptor::~AuthenticatingURLLoaderInterceptor() { |
| 24 } | 23 } |
| 25 | 24 |
| 25 void AuthenticatingURLLoaderInterceptor::set_connection_error_handler( |
| 26 const Closure& error_handler) { |
| 27 binding_.set_connection_error_handler(error_handler); |
| 28 } |
| 29 |
| 26 void AuthenticatingURLLoaderInterceptor::InterceptRequest( | 30 void AuthenticatingURLLoaderInterceptor::InterceptRequest( |
| 27 mojo::URLRequestPtr request, | 31 mojo::URLRequestPtr request, |
| 28 const InterceptRequestCallback& callback) { | 32 const InterceptRequestCallback& callback) { |
| 29 // TODO(blundell): If we need to handle requests with bodies, we'll need to | 33 // TODO(blundell): If we need to handle requests with bodies, we'll need to |
| 30 // do something here. | 34 // do something here. |
| 31 if (request->body) { | 35 if (request->body) { |
| 32 LOG(ERROR) << "Cannot pass a request to AuthenticatingURLLoaderInterceptor" | 36 LOG(ERROR) << "Cannot pass a request to AuthenticatingURLLoaderInterceptor" |
| 33 "that has a body"; | 37 "that has a body"; |
| 34 callback.Run(nullptr); | 38 callback.Run(nullptr); |
| 35 return; | 39 return; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 request_authorization_state_ = REQUEST_USED_CURRENT_AUTH_SERVICE_TOKEN; | 153 request_authorization_state_ = REQUEST_USED_CURRENT_AUTH_SERVICE_TOKEN; |
| 150 } else { | 154 } else { |
| 151 request_authorization_state_ = REQUEST_USED_FRESH_AUTH_SERVICE_TOKEN; | 155 request_authorization_state_ = REQUEST_USED_FRESH_AUTH_SERVICE_TOKEN; |
| 152 } | 156 } |
| 153 factory_->RetrieveToken( | 157 factory_->RetrieveToken( |
| 154 url_, | 158 url_, |
| 155 base::Bind(&AuthenticatingURLLoaderInterceptor::OnOAuth2TokenReceived, | 159 base::Bind(&AuthenticatingURLLoaderInterceptor::OnOAuth2TokenReceived, |
| 156 base::Unretained(this))); | 160 base::Unretained(this))); |
| 157 } | 161 } |
| 158 | 162 |
| 159 void AuthenticatingURLLoaderInterceptor::OnConnectionError() { | |
| 160 factory_->OnInterceptorError(this); | |
| 161 // The factory deleted this object. | |
| 162 } | |
| 163 | |
| 164 URLRequestPtr AuthenticatingURLLoaderInterceptor::BuildRequest( | 163 URLRequestPtr AuthenticatingURLLoaderInterceptor::BuildRequest( |
| 165 std::string token) { | 164 std::string token) { |
| 166 // We should only be sending out a request with a token if the initial | 165 // We should only be sending out a request with a token if the initial |
| 167 // request did not come in with an authorization header. | 166 // request did not come in with an authorization header. |
| 168 DCHECK(add_authentication_); | 167 DCHECK(add_authentication_); |
| 169 Array<HttpHeaderPtr> headers; | 168 Array<HttpHeaderPtr> headers; |
| 170 if (headers_) | 169 if (headers_) |
| 171 headers = headers_.Clone(); | 170 headers = headers_.Clone(); |
| 172 | 171 |
| 173 if (token == "") | 172 if (token == "") |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 interceptor_response->response = pending_response_.Pass(); | 207 interceptor_response->response = pending_response_.Pass(); |
| 209 } else { | 208 } else { |
| 210 interceptor_response->request = BuildRequest(token); | 209 interceptor_response->request = BuildRequest(token); |
| 211 } | 210 } |
| 212 | 211 |
| 213 pending_interception_callback_.Run(interceptor_response.Pass()); | 212 pending_interception_callback_.Run(interceptor_response.Pass()); |
| 214 pending_interception_callback_.reset(); | 213 pending_interception_callback_.reset(); |
| 215 } | 214 } |
| 216 | 215 |
| 217 } // namespace mojo | 216 } // namespace mojo |
| OLD | NEW |