| Index: components/copresence/rpc/rpc_handler.h
|
| diff --git a/components/copresence/rpc/rpc_handler.h b/components/copresence/rpc/rpc_handler.h
|
| deleted file mode 100644
|
| index 16fd1184051615d96c4b097f649436eb717f6580..0000000000000000000000000000000000000000
|
| --- a/components/copresence/rpc/rpc_handler.h
|
| +++ /dev/null
|
| @@ -1,213 +0,0 @@
|
| -// Copyright 2015 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 COMPONENTS_COPRESENCE_RPC_RPC_HANDLER_H_
|
| -#define COMPONENTS_COPRESENCE_RPC_RPC_HANDLER_H_
|
| -
|
| -#include <map>
|
| -#include <memory>
|
| -#include <set>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/callback_forward.h"
|
| -#include "base/memory/scoped_vector.h"
|
| -#include "components/audio_modem/public/audio_modem_types.h"
|
| -#include "components/copresence/proto/enums.pb.h"
|
| -#include "components/copresence/public/copresence_constants.h"
|
| -#include "components/copresence/public/copresence_delegate.h"
|
| -#include "components/copresence/timed_map.h"
|
| -
|
| -namespace copresence {
|
| -
|
| -class CopresenceDelegate;
|
| -class CopresenceStateImpl;
|
| -class DirectiveHandler;
|
| -class GCMHandler;
|
| -class HttpPost;
|
| -class ReportRequest;
|
| -class RequestHeader;
|
| -class SubscribedMessage;
|
| -
|
| -// This class handles all communication with the copresence server.
|
| -// Clients provide a ReportRequest proto containing publishes, subscribes,
|
| -// and token observations they want to send to the server. The RpcHandler
|
| -// will fill in details like the RequestHeader and DeviceCapabilities,
|
| -// and dispatch the results of the server call to the appropriate parts
|
| -// of the system.
|
| -//
|
| -// To create an RpcHandler, clients will need to provide a few other classes
|
| -// that support its functionality. Notable among them is the CopresenceDelegate,
|
| -// an interface clients must implement to provide settings and functionality
|
| -// that may depend on the environment. See the definition in
|
| -// //components/copresence/public/copresence_delegate.h.
|
| -//
|
| -// Here is an example of creating and using an RpcHandler.
|
| -// The GCMHandler and CopresenceStateImpl are optional.
|
| -//
|
| -// MyDelegate delegate(...);
|
| -// copresence::DirectiveHandlerImpl directive_handler;
|
| -//
|
| -// RpcHandler handler(&delegate,
|
| -// &directive_handler,
|
| -// nullptr,
|
| -// nullptr,
|
| -// base::Bind(&HandleMessages));
|
| -//
|
| -// std::unique_ptr<ReportRequest> request(new ReportRequest);
|
| -// (Fill in ReportRequest.)
|
| -//
|
| -// handler.SendReportRequest(std::move(request),
|
| -// "my_app_id",
|
| -// "",
|
| -// base::Bind(&HandleStatus));
|
| -//
|
| -// The server will respond with directives, which get passed to the
|
| -// DirectiveHandlerImpl.
|
| -//
|
| -// Tokens from the audio modem should also be forwarded
|
| -// via ReportTokens() so that messages get delivered properly.
|
| -class RpcHandler final {
|
| - public:
|
| - // 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.
|
| - using PostCleanupCallback = base::Callback<void(HttpPost*,
|
| - int,
|
| - const std::string&)>;
|
| -
|
| - // Callback to allow tests to stub out HTTP POST behavior.
|
| - // 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.
|
| - // PostCleanupCallback: Receives the response to the request.
|
| - using PostCallback =
|
| - base::Callback<void(net::URLRequestContextGetter*,
|
| - const std::string&,
|
| - const std::string&,
|
| - const std::string&,
|
| - std::unique_ptr<google::protobuf::MessageLite>,
|
| - const PostCleanupCallback&)>;
|
| -
|
| - // Report rpc name to send to Apiary.
|
| - static const char kReportRequestRpcName[];
|
| -
|
| - // Constructor. The CopresenceStateImpl and GCMHandler may be null.
|
| - // The first four parameters are owned by the caller and (if not null)
|
| - // must outlive the RpcHandler.
|
| - RpcHandler(CopresenceDelegate* delegate,
|
| - DirectiveHandler* directive_handler,
|
| - CopresenceStateImpl* state,
|
| - GCMHandler* gcm_handler,
|
| - const MessagesCallback& new_messages_callback,
|
| - const PostCallback& server_post_callback = PostCallback());
|
| -
|
| - // Not copyable.
|
| - RpcHandler(const RpcHandler&) = delete;
|
| - void operator=(const RpcHandler&) = delete;
|
| -
|
| - ~RpcHandler();
|
| -
|
| - // Sends a ReportRequest from a specific app, and get notified of completion.
|
| - void SendReportRequest(std::unique_ptr<ReportRequest> request,
|
| - const std::string& app_id,
|
| - const std::string& auth_token,
|
| - const StatusCallback& callback);
|
| -
|
| - // Reports a set of tokens to the server for a given medium.
|
| - // Uses all active auth tokens (if any).
|
| - void ReportTokens(const std::vector<audio_modem::AudioToken>& tokens);
|
| -
|
| - private:
|
| - // A queued ReportRequest along with its metadata.
|
| - struct PendingRequest {
|
| - PendingRequest(std::unique_ptr<ReportRequest> report,
|
| - const std::string& app_id,
|
| - bool authenticated,
|
| - const StatusCallback& callback);
|
| - ~PendingRequest();
|
| -
|
| - std::unique_ptr<ReportRequest> report;
|
| - const std::string app_id;
|
| - const bool authenticated;
|
| - const StatusCallback callback;
|
| - };
|
| -
|
| - friend class RpcHandlerTest;
|
| -
|
| - // Before accepting any other calls, the server requires registration,
|
| - // which is tied to the auth token (or lack thereof) used to call Report.
|
| - void RegisterDevice(bool authenticated);
|
| -
|
| - // Device registration has completed. Send the requests that it was blocking.
|
| - void ProcessQueuedRequests(bool authenticated);
|
| -
|
| - // Sends a ReportRequest from Chrome itself, i.e. no app id.
|
| - void ReportOnAllDevices(std::unique_ptr<ReportRequest> request);
|
| -
|
| - // Stores a GCM ID and send it to the server if needed.
|
| - void RegisterGcmId(const std::string& gcm_id);
|
| -
|
| - // Server call response handlers.
|
| - void RegisterResponseHandler(bool authenticated,
|
| - bool gcm_pending,
|
| - HttpPost* completed_post,
|
| - int http_status_code,
|
| - const std::string& response_data);
|
| - void ReportResponseHandler(const StatusCallback& status_callback,
|
| - HttpPost* completed_post,
|
| - int http_status_code,
|
| - const std::string& response_data);
|
| -
|
| - // Removes unpublished or unsubscribed operations from the directive handlers.
|
| - void ProcessRemovedOperations(const ReportRequest& request);
|
| -
|
| - // Adds all currently playing tokens to the update signals in this report
|
| - // request. This ensures that the server doesn't keep issueing new tokens to
|
| - // us when we're already playing valid tokens.
|
| - void AddPlayingTokens(ReportRequest* request);
|
| -
|
| - void DispatchMessages(
|
| - const google::protobuf::RepeatedPtrField<SubscribedMessage>&
|
| - subscribed_messages);
|
| -
|
| - RequestHeader* CreateRequestHeader(const std::string& app_id,
|
| - const std::string& device_id) const;
|
| -
|
| - // Wrapper for the http post constructor. This is the default way
|
| - // 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,
|
| - std::unique_ptr<google::protobuf::MessageLite> request_proto,
|
| - const PostCleanupCallback& callback);
|
| -
|
| - // These belong to the caller.
|
| - CopresenceDelegate* const delegate_;
|
| - DirectiveHandler* const directive_handler_;
|
| - CopresenceStateImpl* state_;
|
| - GCMHandler* const gcm_handler_;
|
| -
|
| - MessagesCallback new_messages_callback_;
|
| - PostCallback server_post_callback_;
|
| -
|
| - ScopedVector<PendingRequest> pending_requests_queue_;
|
| - TimedMap<std::string, bool> invalid_audio_token_cache_;
|
| - std::set<HttpPost*> pending_posts_;
|
| - std::set<bool> pending_registrations_;
|
| - std::string auth_token_;
|
| - std::string gcm_id_;
|
| -};
|
| -
|
| -} // namespace copresence
|
| -
|
| -#endif // COMPONENTS_COPRESENCE_RPC_RPC_HANDLER_H_
|
|
|