| Index: services/authenticating_url_loader/authenticating_url_loader_factory_impl.cc
|
| diff --git a/services/authenticating_url_loader/authenticating_url_loader_factory_impl.cc b/services/authenticating_url_loader/authenticating_url_loader_factory_impl.cc
|
| index 795ce0c49dcc31f0bb515d2d308b995930267295..72d12af1a6542d7a3eca15534fa9c78191371f4d 100644
|
| --- a/services/authenticating_url_loader/authenticating_url_loader_factory_impl.cc
|
| +++ b/services/authenticating_url_loader/authenticating_url_loader_factory_impl.cc
|
| @@ -4,12 +4,8 @@
|
|
|
| #include "services/authenticating_url_loader/authenticating_url_loader_factory_impl.h"
|
|
|
| -#include "base/bind.h"
|
| -#include "base/logging.h"
|
| -#include "base/stl_util.h"
|
| #include "mojo/public/cpp/application/application_impl.h"
|
| -#include "mojo/services/authenticating_url_loader/public/interfaces/authenticating_url_loader.mojom.h"
|
| -#include "services/authenticating_url_loader/authenticating_url_loader_impl.h"
|
| +#include "services/authenticating_url_loader/authenticating_url_loader_interceptor_factory.h"
|
|
|
| namespace mojo {
|
|
|
| @@ -18,121 +14,17 @@ AuthenticatingURLLoaderFactoryImpl::AuthenticatingURLLoaderFactoryImpl(
|
| mojo::ApplicationImpl* app,
|
| std::map<GURL, std::string>* cached_tokens)
|
| : binding_(this, request.Pass()), app_(app), cached_tokens_(cached_tokens) {
|
| - app_->ConnectToService("mojo:network_service", &network_service_);
|
| }
|
|
|
| AuthenticatingURLLoaderFactoryImpl::~AuthenticatingURLLoaderFactoryImpl() {
|
| }
|
|
|
| -std::string AuthenticatingURLLoaderFactoryImpl::GetCachedToken(
|
| - const GURL& url) {
|
| - GURL origin = url.GetOrigin();
|
| - if (cached_tokens_->find(origin) != cached_tokens_->end()) {
|
| - return (*cached_tokens_)[origin];
|
| - }
|
| - return "";
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderFactoryImpl::RetrieveToken(
|
| - const GURL& url,
|
| - const base::Callback<void(std::string)>& callback) {
|
| - if (!authentication_service_) {
|
| - callback.Run("");
|
| - return;
|
| - }
|
| - GURL origin = url.GetOrigin();
|
| - if (pendings_retrieve_token_.find(origin) == pendings_retrieve_token_.end()) {
|
| - if (cached_tokens_->find(origin) != cached_tokens_->end()) {
|
| - // Clear the cached token in case the request is due to that token being
|
| - // stale.
|
| - authentication_service_->ClearOAuth2Token((*cached_tokens_)[origin]);
|
| - cached_tokens_->erase(origin);
|
| - }
|
| - if (cached_accounts_.find(origin) != cached_accounts_.end()) {
|
| - OnAccountSelected(origin, cached_accounts_[origin], mojo::String());
|
| - return;
|
| - }
|
| - authentication_service_->SelectAccount(
|
| - true, base::Bind(&AuthenticatingURLLoaderFactoryImpl::OnAccountSelected,
|
| - base::Unretained(this), origin));
|
| - }
|
| - pendings_retrieve_token_[origin].push_back(callback);
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderFactoryImpl::OnURLLoaderError(
|
| - AuthenticatingURLLoaderImpl* url_loader) {
|
| - auto it = std::find_if(
|
| - url_loaders_.begin(), url_loaders_.end(),
|
| - [url_loader](const std::unique_ptr<AuthenticatingURLLoaderImpl>& p) {
|
| - return p.get() == url_loader;
|
| - });
|
| - DCHECK(it != url_loaders_.end());
|
| - url_loaders_.erase(it);
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderFactoryImpl::CreateAuthenticatingURLLoader(
|
| - mojo::InterfaceRequest<AuthenticatingURLLoader> loader_request) {
|
| - url_loaders_.push_back(std::unique_ptr<AuthenticatingURLLoaderImpl>(
|
| - new AuthenticatingURLLoaderImpl(loader_request.Pass(), this)));
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderFactoryImpl::SetAuthenticationService(
|
| +void AuthenticatingURLLoaderFactoryImpl::CreateURLLoaderInterceptorFactory(
|
| + mojo::InterfaceRequest<URLLoaderInterceptorFactory> factory_request,
|
| authentication::AuthenticationServicePtr authentication_service) {
|
| - // If the authentication service changes, all pending request needs to fail.
|
| - for (const auto& callbacks : pendings_retrieve_token_) {
|
| - for (const auto& callback : callbacks.second) {
|
| - callback.Run("");
|
| - }
|
| - }
|
| - pendings_retrieve_token_.clear();
|
| - authentication_service_ = authentication_service.Pass();
|
| - if (authentication_service_)
|
| - authentication_service_.set_error_handler(this);
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderFactoryImpl::OnConnectionError() {
|
| - SetAuthenticationService(nullptr);
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderFactoryImpl::OnAccountSelected(const GURL& origin,
|
| - mojo::String account,
|
| - mojo::String error) {
|
| - DCHECK(authentication_service_);
|
| - if (error) {
|
| - LOG(WARNING) << "Error (" << error << ") while selecting account";
|
| - ExecuteCallbacks(origin, "");
|
| - return;
|
| - }
|
| - cached_accounts_[origin] = account;
|
| - mojo::Array<mojo::String> scopes(1);
|
| - scopes[0] = "https://www.googleapis.com/auth/userinfo.email";
|
| - authentication_service_->GetOAuth2Token(
|
| - account, scopes.Pass(),
|
| - base::Bind(&AuthenticatingURLLoaderFactoryImpl::OnOAuth2TokenReceived,
|
| - base::Unretained(this), origin));
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderFactoryImpl::OnOAuth2TokenReceived(
|
| - const GURL& origin,
|
| - mojo::String token,
|
| - mojo::String error) {
|
| - if (error) {
|
| - LOG(WARNING) << "Error (" << error << ") while getting token";
|
| - ExecuteCallbacks(origin, "");
|
| - return;
|
| - }
|
| - std::string string_token(token);
|
| - (*cached_tokens_)[origin] = string_token;
|
| - ExecuteCallbacks(origin, string_token);
|
| -}
|
| -
|
| -void AuthenticatingURLLoaderFactoryImpl::ExecuteCallbacks(
|
| - const GURL& origin,
|
| - const std::string& result) {
|
| - for (auto& callback : pendings_retrieve_token_[origin]) {
|
| - callback.Run(result);
|
| - }
|
| - pendings_retrieve_token_.erase(origin);
|
| + new AuthenticatingURLLoaderInterceptorFactory(factory_request.Pass(),
|
| + authentication_service.Pass(),
|
| + app_, cached_tokens_);
|
| }
|
|
|
| } // namespace mojo
|
|
|