// 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 REMOTING_HOST_SETUP_WIN_AUTH_CODE_GETTER_H #define REMOTING_HOST_SETUP_WIN_AUTH_CODE_GETTER_H #include <ole2.h> #include <exdisp.h> #include <string> #include "base/callback.h" #include "base/threading/non_thread_safe.h" #include "base/timer/timer.h" #include "base/win/scoped_comptr.h" namespace remoting { // A class for getting an OAuth authorization code. class AuthCodeGetter : public base::NonThreadSafe { public: AuthCodeGetter(); ~AuthCodeGetter(); // Starts a browser and navigates it to a URL that starts an Installed // Application OAuth flow. |on_auth_code| will be called with an // authorization code, or an empty string on error. void GetAuthCode(base::Callback<void(const std::string&)> on_auth_code); private: // Starts a timer used to poll the browser's URL. void StartTimer(); // Called when that timer fires. void OnTimer(); // Returns whether to stop polling the browser's URL. If true, then // |auth_code| is an authorization code, or the empty string on an error. bool TestBrowserUrl(std::string* auth_code); // Kills the browser. void KillBrowser(); // The authorization code callback. base::Callback<void(const std::string&)> on_auth_code_; // The browser through which the user requests an authorization code. base::win::ScopedComPtr<IWebBrowser2, &IID_IWebBrowser2> browser_; // A timer used to poll the browser's URL. base::OneShotTimer<AuthCodeGetter> timer_; // The interval at which the timer fires. base::TimeDelta timer_interval_; DISALLOW_COPY_AND_ASSIGN(AuthCodeGetter); }; } // namespace remoting #endif // REMOTING_HOST_SETUP_WIN_AUTH_CODE_GETTER_H