Index: components/copresence/rpc/rpc_handler.h |
diff --git a/components/copresence/rpc/rpc_handler.h b/components/copresence/rpc/rpc_handler.h |
index c431bd89ad7e9753b4552237fb527245abc21c94..30215225ba83f70d59061892001ee526e85fa68f 100644 |
--- a/components/copresence/rpc/rpc_handler.h |
+++ b/components/copresence/rpc/rpc_handler.h |
@@ -39,17 +39,29 @@ class RpcHandler { |
virtual ~RpcHandler(); |
- // Clients must call this and wait for |init_done_callback| |
- // to be called before invoking any other methods. |
- void Initialize(const SuccessCallback& init_done_callback); |
+ // Before accepting any other calls, the server requires registration, |
+ // which is tied to the auth token (or lack thereof) used to call Report. |
+ // Clients must call RegisterForToken() for each new token, |
+ // *including the empty token*, they need to pass to SendReportRequest(), |
+ // and then wait for |init_done_callback| to be invoked. |
+ void RegisterForToken(const std::string& auth_token, |
+ const SuccessCallback& init_done_callback); |
+ |
+ // Check if a given auth token is already active (registered). |
+ bool IsRegisteredForToken(const std::string& auth_token) const; |
+ |
+ // Send a ReportRequest from Chrome itself, i.e. no app id. |
+ void SendReportRequest(scoped_ptr<ReportRequest> request, |
+ const std::string& auth_token); |
- // Send a report request. |
- void SendReportRequest(scoped_ptr<ReportRequest> request); |
+ // Send a ReportRequest from a specific app, and get notified of completion. |
void SendReportRequest(scoped_ptr<ReportRequest> request, |
const std::string& app_id, |
+ const std::string& auth_token, |
const StatusCallback& callback); |
// Report a set of tokens to the server for a given medium. |
+ // Uses all active auth tokens (if any). |
void ReportTokens(const std::vector<AudioToken>& tokens); |
// Create the directive handler and connect it to |
@@ -57,8 +69,11 @@ class RpcHandler { |
void ConnectToWhispernet(); |
private: |
- // An HttpPost::ResponseCallback prepended with an HttpPost object |
- // that needs to be deleted. |
+ // An HttpPost::ResponseCallback along with an HttpPost object to be deleted. |
+ // Arguments: |
+ // HttpPost*: The handler should take ownership of (i.e. delete) this object. |
+ // int: The HTTP status code of the response. |
+ // string: The contents of the response. |
typedef base::Callback<void(HttpPost*, int, const std::string&)> |
PostCleanupCallback; |
@@ -66,17 +81,23 @@ class RpcHandler { |
// Arguments: |
// URLRequestContextGetter: Context for the HTTP POST request. |
// string: Name of the rpc to invoke. URL format: server.google.com/rpc_name |
+ // string: The API key to pass in the request. |
+ // string: The auth token to pass with the request. |
// MessageLite: Contents of POST request to be sent. This needs to be |
// a (scoped) pointer to ease handling of the abstract MessageLite class. |
// ResponseCallback: Receives the response to the request. |
typedef base::Callback<void(net::URLRequestContextGetter*, |
const std::string&, |
+ const std::string&, |
+ const std::string&, |
scoped_ptr<google::protobuf::MessageLite>, |
const PostCleanupCallback&)> PostCallback; |
friend class RpcHandlerTest; |
+ // Server call response handlers. |
void RegisterResponseHandler(const SuccessCallback& init_done_callback, |
+ const std::string& auth_token, |
HttpPost* completed_post, |
int http_status_code, |
const std::string& response_data); |
@@ -98,11 +119,15 @@ class RpcHandler { |
const google::protobuf::RepeatedPtrField<SubscribedMessage>& |
subscribed_messages); |
- RequestHeader* CreateRequestHeader(const std::string& client_name) const; |
+ RequestHeader* CreateRequestHeader(const std::string& client_name, |
+ const std::string& device_id) const; |
+ // Post a request to the server. The request should be in proto format. |
template <class T> |
void SendServerRequest(const std::string& rpc_name, |
+ const std::string& device_id, |
const std::string& app_id, |
+ const std::string& auth_token, |
scoped_ptr<T> request, |
const PostCleanupCallback& response_handler); |
@@ -110,6 +135,8 @@ class RpcHandler { |
// to contact the server, but it can be overridden for testing. |
void SendHttpPost(net::URLRequestContextGetter* url_context_getter, |
const std::string& rpc_name, |
+ const std::string& api_key, |
+ const std::string& auth_token, |
scoped_ptr<google::protobuf::MessageLite> request_proto, |
const PostCleanupCallback& callback); |
@@ -124,7 +151,7 @@ class RpcHandler { |
TimedMap<std::string, bool> invalid_audio_token_cache_; |
PostCallback server_post_callback_; |
- std::string device_id_; |
+ std::map<std::string, std::string> device_id_by_auth_token_; |
scoped_ptr<DirectiveHandler> directive_handler_; |
std::set<HttpPost*> pending_posts_; |