| Index: services/authenticating_url_loader/authenticating_url_loader_impl.cc
|
| diff --git a/services/authenticating_url_loader/authenticating_url_loader_impl.cc b/services/authenticating_url_loader/authenticating_url_loader_impl.cc
|
| deleted file mode 100644
|
| index 6de8ba605f73ac0c9bab252a33b4f41cc70e4537..0000000000000000000000000000000000000000
|
| --- a/services/authenticating_url_loader/authenticating_url_loader_impl.cc
|
| +++ /dev/null
|
| @@ -1,163 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "services/authenticating_url_loader/authenticating_url_loader_impl.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/logging.h"
|
| -#include "mojo/services/network/public/interfaces/network_service.mojom.h"
|
| -
|
| -namespace mojo {
|
| -
|
| -AuthenticatingURLLoaderImpl::AuthenticatingURLLoaderImpl(
|
| - InterfaceRequest<AuthenticatingURLLoader> request,
|
| - AuthenticatingURLLoaderFactoryImpl* factory)
|
| - : binding_(this, request.Pass()),
|
| - factory_(factory),
|
| - request_authorization_state_(REQUEST_INITIAL) {
|
| - binding_.set_error_handler(this);
|
| -}
|
| -
|
| -AuthenticatingURLLoaderImpl::~AuthenticatingURLLoaderImpl() {
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderImpl::Start(
|
| - URLRequestPtr request,
|
| - const Callback<void(URLResponsePtr)>& callback) {
|
| - // TODO(blundell): If we need to handle requests with bodies, we'll need to
|
| - // do something here.
|
| - if (request->body) {
|
| - LOG(ERROR)
|
| - << "Cannot pass a request to AuthenticatingURLLoader that has a body";
|
| - callback.Run(nullptr);
|
| - return;
|
| - }
|
| - url_ = GURL(request->url);
|
| - auto_follow_redirects_ = request->auto_follow_redirects;
|
| - bypass_cache_ = request->bypass_cache;
|
| - headers_ = request->headers.Clone();
|
| - pending_request_callback_ = callback;
|
| - std::string token = factory_->GetCachedToken(url_);
|
| - if (token != "") {
|
| - auto auth_header = HttpHeader::New();
|
| - auth_header->name = "Authorization";
|
| - auth_header->value = "Bearer " + token;
|
| - request->headers.push_back(auth_header.Pass());
|
| - }
|
| - StartNetworkRequest(request.Pass());
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderImpl::FollowRedirect(
|
| - const Callback<void(URLResponsePtr)>& callback) {
|
| - mojo::String error;
|
| -
|
| - if (!url_.is_valid() || !url_loader_) {
|
| - error = "No redirect to follow";
|
| - }
|
| -
|
| - if (auto_follow_redirects_) {
|
| - error =
|
| - "FollowRedirect() should not be "
|
| - "called when auto_follow_redirects has been set";
|
| - }
|
| -
|
| - if (request_authorization_state_ != REQUEST_INITIAL) {
|
| - error = "Not in the right state to follow a redirect";
|
| - }
|
| -
|
| - if (!error.is_null()) {
|
| - LOG(ERROR) << "AuthenticatingURLLoader: " << error;
|
| - callback.Run(nullptr);
|
| - return;
|
| - }
|
| -
|
| - pending_request_callback_ = callback;
|
| - FollowRedirectInternal();
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderImpl::StartNetworkRequest(URLRequestPtr request) {
|
| - factory_->network_service()->CreateURLLoader(mojo::GetProxy(&url_loader_));
|
| - url_loader_->Start(request.Pass(),
|
| - base::Bind(&AuthenticatingURLLoaderImpl::OnLoadComplete,
|
| - base::Unretained(this)));
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderImpl::OnConnectionError() {
|
| - factory_->OnURLLoaderError(this);
|
| - // The factory deleted this object.
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderImpl::OnLoadComplete(URLResponsePtr response) {
|
| - if (response->redirect_url) {
|
| - url_ = GURL(response->redirect_url);
|
| - request_authorization_state_ = REQUEST_INITIAL;
|
| -
|
| - if (auto_follow_redirects_) {
|
| - FollowRedirectInternal();
|
| - } else {
|
| - // NOTE: We do not reset |url_loader_| here as it will be needed if the
|
| - // client calls |FollowRedirect()|.
|
| - pending_request_callback_.Run(response.Pass());
|
| - }
|
| - return;
|
| - }
|
| -
|
| - url_loader_.reset();
|
| -
|
| - if (response->status_code != 401 ||
|
| - request_authorization_state_ == REQUEST_USED_FRESH_AUTH_SERVICE_TOKEN) {
|
| - pending_request_callback_.Run(response.Pass());
|
| - return;
|
| - }
|
| -
|
| - pending_response_ = response.Pass();
|
| -
|
| - DCHECK(request_authorization_state_ == REQUEST_INITIAL ||
|
| - request_authorization_state_ ==
|
| - REQUEST_USED_CURRENT_AUTH_SERVICE_TOKEN);
|
| - if (request_authorization_state_ == REQUEST_INITIAL) {
|
| - request_authorization_state_ = REQUEST_USED_CURRENT_AUTH_SERVICE_TOKEN;
|
| - } else {
|
| - request_authorization_state_ = REQUEST_USED_FRESH_AUTH_SERVICE_TOKEN;
|
| - }
|
| - factory_->RetrieveToken(
|
| - url_, base::Bind(&AuthenticatingURLLoaderImpl::OnOAuth2TokenReceived,
|
| - base::Unretained(this)));
|
| - return;
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderImpl::FollowRedirectInternal() {
|
| - DCHECK(url_.is_valid());
|
| - DCHECK(url_loader_);
|
| - DCHECK(request_authorization_state_ == REQUEST_INITIAL);
|
| -
|
| - url_loader_->FollowRedirect(base::Bind(
|
| - &AuthenticatingURLLoaderImpl::OnLoadComplete, base::Unretained(this)));
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderImpl::OnOAuth2TokenReceived(std::string token) {
|
| - if (token.empty()) {
|
| - LOG(ERROR) << "Error while getting token";
|
| - pending_request_callback_.Run(pending_response_.Pass());
|
| - return;
|
| - }
|
| -
|
| - auto auth_header = HttpHeader::New();
|
| - auth_header->name = "Authorization";
|
| - auth_header->value = "Bearer " + token;
|
| - Array<HttpHeaderPtr> headers;
|
| - if (headers_)
|
| - headers = headers_.Clone();
|
| - headers.push_back(auth_header.Pass());
|
| -
|
| - URLRequestPtr request(mojo::URLRequest::New());
|
| - request->url = url_.spec();
|
| - request->auto_follow_redirects = false;
|
| - request->bypass_cache = bypass_cache_;
|
| - request->headers = headers.Pass();
|
| -
|
| - StartNetworkRequest(request.Pass());
|
| -}
|
| -
|
| -} // namespace mojo
|
|
|