// Copyright (c) 2012 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.

#ifndef GOOGLE_APIS_GAIA_OAUTH2_ACCESS_TOKEN_CONSUMER_H_
#define GOOGLE_APIS_GAIA_OAUTH2_ACCESS_TOKEN_CONSUMER_H_

#include <string>

#include "base/time/time.h"

class GoogleServiceAuthError;

// An interface that defines the callbacks for consumers to which
// OAuth2AccessTokenFetcher can return results.
class OAuth2AccessTokenConsumer {
 public:
  // Structure representing information contained in OAuth2 access token.
  struct TokenResponse {
    TokenResponse() = default;
    TokenResponse(const std::string& access_token,
                  const base::Time& expiration_time,
                  const std::string& id_token);

    // OAuth2 access token.
    std::string access_token;

    // The date until which the |access_token| can be used.
    // This value has a built-in safety margin, so it can be used as-is.
    base::Time expiration_time;

    // Contains extra information regarding the user's currently registered
    // services.
    std::string id_token;
  };

  OAuth2AccessTokenConsumer() = default;
  virtual ~OAuth2AccessTokenConsumer();

  // Success callback.
  virtual void OnGetTokenSuccess(const TokenResponse& token_response);

  // Failure callback.
  virtual void OnGetTokenFailure(const GoogleServiceAuthError& error);

  DISALLOW_COPY_AND_ASSIGN(OAuth2AccessTokenConsumer);
};

#endif  // GOOGLE_APIS_GAIA_OAUTH2_ACCESS_TOKEN_CONSUMER_H_
