oauth_token_getter_proxy.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef REMOTING_BASE_OAUTH_TOKEN_GETTER_PROXY_H_
  5. #define REMOTING_BASE_OAUTH_TOKEN_GETTER_PROXY_H_
  6. #include "base/callback.h"
  7. #include "base/memory/ref_counted.h"
  8. #include "base/memory/weak_ptr.h"
  9. #include "remoting/base/oauth_token_getter.h"
  10. namespace base {
  11. class SequencedTaskRunner;
  12. } // namespace base
  13. namespace remoting {
  14. // Takes an instance of |OAuthTokenGetter| and runs (and deletes) it on the
  15. // |task_runner| sequence. The proxy will silently drop requests once
  16. // |token_getter| is deleted. This class is useful when a class needs to take a
  17. // unique_ptr to OAuthTokenGetter but you still want to share the underlying
  18. // token getter instance. Methods can be called from any sequence.
  19. class OAuthTokenGetterProxy : public OAuthTokenGetter {
  20. public:
  21. OAuthTokenGetterProxy(base::WeakPtr<OAuthTokenGetter> token_getter,
  22. scoped_refptr<base::SequencedTaskRunner> task_runner);
  23. // Creates an OAuthTokenGetterProxy that always runs |token_getter| on the
  24. // sequence where this constructor is called.
  25. explicit OAuthTokenGetterProxy(base::WeakPtr<OAuthTokenGetter> token_getter);
  26. OAuthTokenGetterProxy(const OAuthTokenGetterProxy&) = delete;
  27. OAuthTokenGetterProxy& operator=(const OAuthTokenGetterProxy&) = delete;
  28. ~OAuthTokenGetterProxy() override;
  29. // OAuthTokenGetter overrides.
  30. void CallWithToken(TokenCallback on_access_token) override;
  31. void InvalidateCache() override;
  32. private:
  33. base::WeakPtr<OAuthTokenGetter> token_getter_;
  34. scoped_refptr<base::SequencedTaskRunner> task_runner_;
  35. };
  36. } // namespace remoting
  37. #endif // REMOTING_BASE_OAUTH_TOKEN_GETTER_PROXY_H_