12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef GOOGLE_APIS_DRIVE_AUTH_SERVICE_INTERFACE_H_
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define GOOGLE_APIS_DRIVE_AUTH_SERVICE_INTERFACE_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback_forward.h"
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/gdata_errorcode.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace google_apis {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AuthServiceObserver;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Called when fetching of access token is complete.
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef base::Callback<void(GDataErrorCode error,
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            const std::string& access_token)>
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    AuthStatusCallback;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This defines an interface for the authentication service which is required
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// by authenticated requests (AuthenticatedRequestInterface).
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// All functions must be called on UI thread.
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AuthServiceInterface {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  virtual ~AuthServiceInterface() {}
289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Adds and removes the observer.
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void AddObserver(AuthServiceObserver* observer) = 0;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void RemoveObserver(AuthServiceObserver* observer) = 0;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Starts fetching OAuth2 access token from the refresh token.
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |callback| must not be null.
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void StartAuthentication(const AuthStatusCallback& callback) = 0;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // True if an OAuth2 access token is retrieved and believed to be fresh.
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The access token is used to access the Drive server.
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool HasAccessToken() const = 0;
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // True if an OAuth2 refresh token is present. Its absence means that user
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // is not properly authenticated.
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The refresh token is used to get the access token.
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool HasRefreshToken() const = 0;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns OAuth2 access token.
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual const std::string& access_token() const = 0;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Clears OAuth2 access token.
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ClearAccessToken() = 0;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Clears OAuth2 refresh token.
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ClearRefreshToken() = 0;
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace google_apis
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // GOOGLE_APIS_DRIVE_AUTH_SERVICE_INTERFACE_H_
59