16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#ifndef CHROME_BROWSER_SIGNIN_EASY_UNLOCK_TOGGLE_FLOW_H_
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define CHROME_BROWSER_SIGNIN_EASY_UNLOCK_TOGGLE_FLOW_H_
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <string>
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <vector>
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/callback.h"
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/macros.h"
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "google_apis/gaia/google_service_auth_error.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "google_apis/gaia/oauth2_mint_token_flow.h"
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "google_apis/gaia/oauth2_token_service.h"
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class Profile;
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class EasyUnlockToggleFlow : public OAuth2TokenService::Consumer,
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                             public OAuth2MintTokenFlow::Delegate {
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Callback to indicate whether the call succeeds or not.
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  typedef base::Callback<void(bool)> ToggleFlowCallback;
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EasyUnlockToggleFlow(Profile* profile,
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                       const std::string& phone_public_key,
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                       bool toggle_enable,
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                       const ToggleFlowCallback& callback);
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~EasyUnlockToggleFlow();
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void Start();
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // OAuth2TokenService::Consumer
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                 const std::string& access_token,
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                 const base::Time& expiration_time) OVERRIDE;
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                 const GoogleServiceAuthError& error) OVERRIDE;
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // OAuth2MintTokenFlow::Delegate
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void OnMintTokenSuccess(const std::string& access_token,
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                  int time_to_live) OVERRIDE;
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void OnMintTokenFailure(
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const GoogleServiceAuthError& error) OVERRIDE;
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void OnIssueAdviceSuccess(
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const IssueAdviceInfo& issue_advice) OVERRIDE;
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private:
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Derived OAuth2ApiCallFlow class to make toggle api call after access token
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // is available.
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  class ToggleApiCall;
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Callbacks from ToggleApiCall
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void ReportToggleApiCallResult(bool success);
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile_;
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const std::string phone_public_key_;
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const bool toggle_enable_;
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ToggleFlowCallback callback_;
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<OAuth2TokenService::Request> token_request_;
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<OAuth2MintTokenFlow> mint_token_flow_;
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  scoped_ptr<ToggleApiCall> toggle_api_call_;
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EasyUnlockToggleFlow);
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif  // CHROME_BROWSER_SIGNIN_EASY_UNLOCK_TOGGLE_FLOW_H_
70