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); |
}; |