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

Unified Diff: services/authenticating_url_loader/authenticating_url_loader_factory_impl.cc

Issue 1155283003: Change AuthenticatingURLLoader to be a URLLoaderInterceptor (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Address review Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698