Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: components/copresence/copresence_manager_impl.cc

Issue 704923002: Add polling and audio check to copresence. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/copresence/copresence_manager_impl.cc
diff --git a/components/copresence/copresence_manager_impl.cc b/components/copresence/copresence_manager_impl.cc
index d867c7fe19af58bb17de0a012625b42f080b166a..5ad67739029c084d5928915d2179d08b54b3752c 100644
--- a/components/copresence/copresence_manager_impl.cc
+++ b/components/copresence/copresence_manager_impl.cc
@@ -6,6 +6,7 @@
#include "base/bind.h"
#include "base/strings/stringprintf.h"
+#include "base/timer/timer.h"
#include "components/copresence/handlers/directive_handler.h"
#include "components/copresence/proto/rpcs.pb.h"
#include "components/copresence/public/whispernet_client.h"
@@ -15,6 +16,8 @@ namespace {
// Number of characters of suffix to log for auth tokens
const int kTokenSuffix = 5;
+const int kPollTimerIntervalMs = 3000; // milliseconds.
+const int kAudioCheckIntervalMs = 1000; // milliseconds.
} // namespace
@@ -100,10 +103,12 @@ CopresenceManagerImpl::CopresenceManagerImpl(CopresenceDelegate* delegate)
"Whispernet proxy initialization")),
init_failed_(false),
directive_handler_(new DirectiveHandler),
- rpc_handler_(new RpcHandler(delegate, directive_handler_.get())) {
+ poll_timer_(new base::RepeatingTimer<CopresenceManagerImpl>),
+ audio_check_timer_(new base::RepeatingTimer<CopresenceManagerImpl>) {
DCHECK(delegate);
DCHECK(delegate->GetWhispernetClient());
+ rpc_handler_.reset(new RpcHandler(delegate, directive_handler_.get()));
delegate->GetWhispernetClient()->Initialize(
whispernet_init_callback_.callback());
pending_init_operations_++;
@@ -114,12 +119,20 @@ void CopresenceManagerImpl::CompleteInitialization() {
return;
if (!init_failed_) {
- // When RpcHandler is destroyed, it disconnects this callback.
- // TODO(ckehoe): Use a CancelableCallback instead.
- delegate_->GetWhispernetClient()->RegisterTokensCallback(
- base::Bind(&RpcHandler::ReportTokens,
- base::Unretained(rpc_handler_.get())));
- directive_handler_->Start(delegate_->GetWhispernetClient());
+ // We destroy |directive_handler_| before |rpc_handler_|, hence passing
+ // in |rpc_handler_|'s pointer is safe here.
+ directive_handler_->Start(delegate_->GetWhispernetClient(),
+ base::Bind(&RpcHandler::ReportTokens,
+ base::Unretained(rpc_handler_.get())));
+
+ // Start up timers.
+ poll_timer_->Start(FROM_HERE,
+ base::TimeDelta::FromMilliseconds(kPollTimerIntervalMs),
+ base::Bind(&CopresenceManagerImpl::PollForMessages,
+ base::Unretained(this)));
+ audio_check_timer_->Start(
+ FROM_HERE, base::TimeDelta::FromMilliseconds(kAudioCheckIntervalMs),
+ base::Bind(&CopresenceManagerImpl::AudioCheck, base::Unretained(this)));
}
// Not const because SendReportRequest takes ownership of the ReportRequests.
@@ -152,4 +165,31 @@ void CopresenceManagerImpl::InitStepComplete(
CompleteInitialization();
}
+void CopresenceManagerImpl::PollForMessages() {
+ // Report our currently playing tokens.
+ const std::string& audible_token =
+ directive_handler_->GetCurrentAudioToken(AUDIBLE);
+ const std::string& inaudible_token =
+ directive_handler_->GetCurrentAudioToken(INAUDIBLE);
+
+ std::vector<AudioToken> tokens;
+ if (!audible_token.empty())
+ tokens.push_back(AudioToken(audible_token, true));
+ if (!inaudible_token.empty())
+ tokens.push_back(AudioToken(inaudible_token, false));
+
+ if (!tokens.empty())
+ rpc_handler_->ReportTokens(tokens);
+}
+
+void CopresenceManagerImpl::AudioCheck() {
+ if (!directive_handler_->GetCurrentAudioToken(AUDIBLE).empty() &&
+ !directive_handler_->IsAudioTokenHeard(AUDIBLE)) {
+ delegate_->HandleStatusUpdate(AUDIO_FAIL);
+ } else if (!directive_handler_->GetCurrentAudioToken(INAUDIBLE).empty() &&
+ !directive_handler_->IsAudioTokenHeard(INAUDIBLE)) {
+ delegate_->HandleStatusUpdate(AUDIO_FAIL);
+ }
+}
+
} // namespace copresence

Powered by Google App Engine
This is Rietveld 408576698