| Index: components/copresence/rpc/rpc_handler.cc
|
| diff --git a/components/copresence/rpc/rpc_handler.cc b/components/copresence/rpc/rpc_handler.cc
|
| index 7d89e9d310d0edbd608cffab68356d3093bafda1..c2e45bac0cd2fa618619b55ce8653f4d5600a2c2 100644
|
| --- a/components/copresence/rpc/rpc_handler.cc
|
| +++ b/components/copresence/rpc/rpc_handler.cc
|
| @@ -84,6 +84,7 @@ bool ReportErrorLogged(const ReportResponse& response) {
|
| }
|
|
|
| // Request construction
|
| +// TODO(ckehoe): Move these into a separate file?
|
|
|
| template <typename T>
|
| BroadcastScanConfiguration GetBroadcastScanConfig(const T& msg) {
|
| @@ -119,11 +120,11 @@ BroadcastScanConfiguration ExtractTokenExchangeStrategy(
|
|
|
| // Strategies for subscriptions.
|
| if (request.has_manage_subscriptions_request()) {
|
| - const RepeatedPtrField<Subscription>& messages =
|
| + const RepeatedPtrField<Subscription> subscriptions =
|
| request.manage_subscriptions_request().subscription();
|
| - for (int i = 0; i < messages.size(); ++i) {
|
| + for (int i = 0; i < subscriptions.size(); ++i) {
|
| BroadcastScanConfiguration config =
|
| - GetBroadcastScanConfig(messages.Get(i));
|
| + GetBroadcastScanConfig(subscriptions.Get(i));
|
| broadcast_only = broadcast_only || config == BROADCAST_ONLY;
|
| scan_only = scan_only || config == SCAN_ONLY;
|
| if (config == BROADCAST_AND_SCAN || (broadcast_only && scan_only))
|
| @@ -205,6 +206,36 @@ void AddTokenToRequest(ReportRequest* request, const AudioToken& token) {
|
| signals->set_observed_time_millis(base::Time::Now().ToJsTime());
|
| }
|
|
|
| +OptInStateFilter* CreateOptedInOrOutFilter() {
|
| + OptInStateFilter* filter = new OptInStateFilter;
|
| + filter->add_allowed_opt_in_state(copresence::OPTED_IN);
|
| + filter->add_allowed_opt_in_state(copresence::OPTED_OUT);
|
| + return filter;
|
| +}
|
| +
|
| +void AllowOptedOutMessages(ReportRequest* request) {
|
| + // TODO(ckehoe): Collapse this pattern into ProcessPublish()
|
| + // and ProcessSubscribe() methods.
|
| +
|
| + RepeatedPtrField<PublishedMessage>* messages =
|
| + request->mutable_manage_messages_request()->mutable_message_to_publish();
|
| + for (int i = 0; i < messages->size(); ++i) {
|
| + PublishedMessage* message = messages->Mutable(i);
|
| + if (!message->has_opt_in_state_filter())
|
| + message->set_allocated_opt_in_state_filter(CreateOptedInOrOutFilter());
|
| + }
|
| +
|
| + RepeatedPtrField<Subscription>* subscriptions =
|
| + request->mutable_manage_subscriptions_request()->mutable_subscription();
|
| + for (int i = 0; i < subscriptions->size(); ++i) {
|
| + Subscription* subscription = subscriptions->Mutable(i);
|
| + if (!subscription->has_opt_in_state_filter()) {
|
| + subscription->set_allocated_opt_in_state_filter(
|
| + CreateOptedInOrOutFilter());
|
| + }
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| // Public methods
|
| @@ -271,6 +302,7 @@ void RpcHandler::SendReportRequest(scoped_ptr<ReportRequest> request,
|
|
|
| AddPlayingTokens(request.get());
|
|
|
| + AllowOptedOutMessages(request.get());
|
| SendServerRequest(kReportRequestRpcName,
|
| app_id,
|
| request.Pass(),
|
|
|