| Index: blimp/client/session/assignment_source.h
|
| diff --git a/blimp/client/session/assignment_source.h b/blimp/client/session/assignment_source.h
|
| index 9891d4a2d49c0d91cf1ffecfc4f2966bb9fd75ac..dabe72cbaf7b4f1583db648a293294d043b232d9 100644
|
| --- a/blimp/client/session/assignment_source.h
|
| +++ b/blimp/client/session/assignment_source.h
|
| @@ -10,41 +10,105 @@
|
| #include "base/callback.h"
|
| #include "blimp/client/blimp_client_export.h"
|
| #include "net/base/ip_endpoint.h"
|
| +#include "net/url_request/url_fetcher_delegate.h"
|
|
|
| namespace base {
|
| class SingleThreadTaskRunner;
|
| }
|
|
|
| +namespace net {
|
| +class URLFetcher;
|
| +class URLRequestContextGetter;
|
| +}
|
| +
|
| namespace blimp {
|
| namespace client {
|
|
|
| +// TODO(kmarshall): Take values from configuration data.
|
| +const char kDummyClientToken[] = "MyVoiceIsMyPassport";
|
| +
|
| +// Potential assigner URLs.
|
| +const char kDefaultAssignerURL[] =
|
| + "https://blimp-pa.googleapis.com/v1/assignment";
|
| +
|
| // An Assignment contains the configuration data needed for a client
|
| // to connect to the engine.
|
| struct BLIMP_CLIENT_EXPORT Assignment {
|
| + enum TransportProtocol {
|
| + UNKNOWN = 0,
|
| + SSL = 1,
|
| + TCP = 2,
|
| + QUIC = 3,
|
| + };
|
| +
|
| + Assignment();
|
| + ~Assignment();
|
| +
|
| + TransportProtocol transport_protocol;
|
| net::IPEndPoint ip_endpoint;
|
| std::string client_token;
|
| + std::string certificate;
|
| + std::string certificate_fingerprint;
|
| +
|
| + // Returns true if the net::IPEndPoint has an unspecified IP, port, or
|
| + // transport protocol.
|
| + bool is_null() const;
|
| };
|
|
|
| // AssignmentSource provides functionality to find out how a client should
|
| // connect to an engine.
|
| -class BLIMP_CLIENT_EXPORT AssignmentSource {
|
| +class BLIMP_CLIENT_EXPORT AssignmentSource : public net::URLFetcherDelegate {
|
| public:
|
| - typedef const base::Callback<void(const Assignment&)> AssignmentCallback;
|
| + // A Java counterpart will be generated for this enum.
|
| + // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.blimp.assignment
|
| + enum Result {
|
| + RESULT_UNKNOWN = 0,
|
| + RESULT_OK = 1,
|
| + RESULT_BAD_REQUEST = 2,
|
| + RESULT_BAD_RESPONSE = 3,
|
| + RESULT_INVALID_PROTOCOL_VERSION = 4,
|
| + RESULT_EXPIRED_ACCESS_TOKEN = 5,
|
| + RESULT_USER_INVALID = 6,
|
| + RESULT_OUT_OF_VMS = 7,
|
| + RESULT_SERVER_ERROR = 8,
|
| + RESULT_SERVER_INTERRUPTED = 9,
|
| + RESULT_NETWORK_FAILURE = 10
|
| + };
|
| +
|
| + typedef base::Callback<void(AssignmentSource::Result, const Assignment&)>
|
| + AssignmentCallback;
|
|
|
| // The |main_task_runner| should be the task runner for the UI thread because
|
| // this will in some cases be used to trigger user interaction on the UI
|
| // thread.
|
| AssignmentSource(
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner);
|
| - virtual ~AssignmentSource();
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner,
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner);
|
| + ~AssignmentSource() override;
|
|
|
| // Retrieves a valid assignment for the client and posts the result to the
|
| - // given callback.
|
| - void GetAssignment(const AssignmentCallback& callback);
|
| + // given callback. |client_auth_token| is the OAuth2 access token to send to
|
| + // the assigner when requesting an assignment. If this is called before a
|
| + // previous call has completed, the old callback will be called with
|
| + // RESULT_SERVER_INTERRUPTED and no Assignment.
|
| + void GetAssignment(const std::string& client_auth_token,
|
| + const AssignmentCallback& callback);
|
| +
|
| + // net::URLFetcherDelegate implementation:
|
| + void OnURLFetchComplete(const net::URLFetcher* source) override;
|
|
|
| private:
|
| + void ParseAssignerResponse();
|
| +
|
| scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
|
|
|
| + scoped_refptr<net::URLRequestContextGetter> url_request_context_;
|
| + scoped_ptr<net::URLFetcher> url_fetcher_;
|
| +
|
| + // This callback is set during a call to GetAssignment() and is cleared after
|
| + // the request has completed (whether it be a success or failure).
|
| + AssignmentCallback callback_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(AssignmentSource);
|
| };
|
|
|
|
|