blob: b26d966b8fdef2d43e67dc992e904d4e45f52f60 [file] [log] [blame]
// Copyright 2016 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 BLIMP_CLIENT_CORE_CONTEXT_ASSIGNMENT_FETCHER_H_
#define BLIMP_CLIENT_CORE_CONTEXT_ASSIGNMENT_FETCHER_H_
#include <memory>
#include <string>
#include "base/memory/ref_counted.h"
#include "base/single_thread_task_runner.h"
#include "blimp/client/core/session/assignment_source.h"
#include "blimp/client/core/session/identity_source.h"
namespace blimp {
namespace client {
class AssignmentFetcher {
public:
using AuthErrorCallback = base::Callback<void(const GoogleServiceAuthError&)>;
using AssignmentResultCallback =
base::Callback<void(AssignmentRequestResult, const Assignment&)>;
AssignmentFetcher(
scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> file_thread_task_runner,
std::unique_ptr<IdentityProvider> identity_provider,
GURL assigner_url,
const AssignmentResultCallback& assignment_received_callback,
const AuthErrorCallback& error_callback);
~AssignmentFetcher();
void Fetch();
IdentitySource* GetIdentitySource();
private:
// Called when an OAuth2 token is received. Will then ask the
// AssignmentSource for an Assignment with this token.
void OnAuthTokenReceived(const std::string& client_auth_token);
// Provide OAuth2 token and propagate account sign in states change.
std::unique_ptr<IdentitySource> identity_source_;
AssignmentResultCallback assignment_received_callback_;
// Returns the URL to use for connections to the assigner. Used to construct
// the AssignmentSource.
GURL assigner_url_;
// The AssignmentSource is used when the user of AssignmentFetcher calls
// Fetch() to get a valid assignment and later connect to the engine.
std::unique_ptr<AssignmentSource> assignment_source_;
// The task runner to use for IO operations.
scoped_refptr<base::SingleThreadTaskRunner> io_thread_task_runner_;
// The task runner to use for file operations.
scoped_refptr<base::SingleThreadTaskRunner> file_thread_task_runner_;
DISALLOW_COPY_AND_ASSIGN(AssignmentFetcher);
};
} // namespace client
} // namespace blimp
#endif // BLIMP_CLIENT_CORE_CONTEXT_ASSIGNMENT_FETCHER_H_