public:
// Note the thread where an instance of Core is constructed is referred to as
// the "owner thread" here.
- Core(OAuth2TokenServiceRequest* owner, TokenServiceProvider* provider);
+ Core(OAuth2TokenServiceRequest* owner,
+ const scoped_refptr<TokenServiceProvider>& provider);
// Starts the core. Must be called on the owner thread.
void Start();
scoped_refptr<base::SingleThreadTaskRunner> token_service_task_runner_;
OAuth2TokenServiceRequest* owner_;
- TokenServiceProvider* provider_;
+
+ // Clear on owner thread. OAuth2TokenServiceRequest promises to clear its
+ // last reference to TokenServiceProvider on the owner thread so the caller
+ // can ensure it is destroyed on the owner thread if desired.
+ scoped_refptr<TokenServiceProvider> provider_;
+
DISALLOW_COPY_AND_ASSIGN(Core);
};
-OAuth2TokenServiceRequest::Core::Core(OAuth2TokenServiceRequest* owner,
- TokenServiceProvider* provider)
+OAuth2TokenServiceRequest::Core::Core(
+ OAuth2TokenServiceRequest* owner,
+ const scoped_refptr<TokenServiceProvider>& provider)
: owner_(owner), provider_(provider) {
DCHECK(owner_);
DCHECK(provider_);
public OAuth2TokenService::Consumer {
public:
RequestCore(OAuth2TokenServiceRequest* owner,
- OAuth2TokenServiceRequest::TokenServiceProvider* provider,
+ const scoped_refptr<
+ OAuth2TokenServiceRequest::TokenServiceProvider>& provider,
OAuth2TokenService::Consumer* consumer,
const std::string& account_id,
const OAuth2TokenService::ScopeSet& scopes);
RequestCore::RequestCore(
OAuth2TokenServiceRequest* owner,
- OAuth2TokenServiceRequest::TokenServiceProvider* provider,
+ const scoped_refptr<OAuth2TokenServiceRequest::TokenServiceProvider>&
+ provider,
OAuth2TokenService::Consumer* consumer,
const std::string& account_id,
const OAuth2TokenService::ScopeSet& scopes)
class InvalidateCore : public OAuth2TokenServiceRequest::Core {
public:
InvalidateCore(OAuth2TokenServiceRequest* owner,
- OAuth2TokenServiceRequest::TokenServiceProvider* provider,
+ const scoped_refptr<
+ OAuth2TokenServiceRequest::TokenServiceProvider>& provider,
const std::string& access_token,
const std::string& account_id,
const OAuth2TokenService::ScopeSet& scopes);
InvalidateCore::InvalidateCore(
OAuth2TokenServiceRequest* owner,
- OAuth2TokenServiceRequest::TokenServiceProvider* provider,
+ const scoped_refptr<OAuth2TokenServiceRequest::TokenServiceProvider>&
+ provider,
const std::string& access_token,
const std::string& account_id,
const OAuth2TokenService::ScopeSet& scopes)
// static
scoped_ptr<OAuth2TokenServiceRequest> OAuth2TokenServiceRequest::CreateAndStart(
- TokenServiceProvider* provider,
+ const scoped_refptr<TokenServiceProvider>& provider,
const std::string& account_id,
const OAuth2TokenService::ScopeSet& scopes,
OAuth2TokenService::Consumer* consumer) {
// static
void OAuth2TokenServiceRequest::InvalidateToken(
- OAuth2TokenServiceRequest::TokenServiceProvider* provider,
+ const scoped_refptr<TokenServiceProvider>& provider,
const std::string& account_id,
const OAuth2TokenService::ScopeSet& scopes,
const std::string& access_token) {