| Index: chrome/browser/copresence/chrome_whispernet_client.cc
|
| diff --git a/chrome/browser/copresence/chrome_whispernet_client.cc b/chrome/browser/copresence/chrome_whispernet_client.cc
|
| index 07483716aad815f4bf9dc074c11c16c8daefbd29..37ac7183ffcfaaa6f69c0ed56baf3a85190b8ae5 100644
|
| --- a/chrome/browser/copresence/chrome_whispernet_client.cc
|
| +++ b/chrome/browser/copresence/chrome_whispernet_client.cc
|
| @@ -44,7 +44,11 @@ const char ChromeWhispernetClient::kWhispernetProxyExtensionId[] =
|
|
|
| ChromeWhispernetClient::ChromeWhispernetClient(
|
| content::BrowserContext* browser_context)
|
| - : browser_context_(browser_context), extension_loaded_(false) {
|
| + : browser_context_(browser_context),
|
| + event_router_(extensions::EventRouter::Get(browser_context)),
|
| + extension_loaded_(false) {
|
| + DCHECK(browser_context_);
|
| + DCHECK(event_router_);
|
| }
|
|
|
| ChromeWhispernetClient::~ChromeWhispernetClient() {
|
| @@ -74,6 +78,8 @@ void ChromeWhispernetClient::Initialize(
|
| } else {
|
| init_callback_.Run(true);
|
| }
|
| +
|
| + AudioConfiguration(GetDefaultAudioConfig());
|
| }
|
|
|
| void ChromeWhispernetClient::Shutdown() {
|
| @@ -84,16 +90,8 @@ void ChromeWhispernetClient::Shutdown() {
|
| db_callback_.Reset();
|
| }
|
|
|
| -void AudioConfiguration(const copresence::config::AudioParamData& data,
|
| - const copresence::SuccessCallback& init_callback) {
|
| -}
|
| -
|
| void ChromeWhispernetClient::EncodeToken(const std::string& token_str,
|
| copresence::AudioType type) {
|
| - DCHECK(extension_loaded_);
|
| - DCHECK(browser_context_);
|
| - DCHECK(extensions::EventRouter::Get(browser_context_));
|
| -
|
| extensions::api::copresence_private::EncodeTokenParameters params;
|
| params.token.token = token_str;
|
| params.token.audible = type == copresence::AUDIBLE;
|
| @@ -102,17 +100,12 @@ void ChromeWhispernetClient::EncodeToken(const std::string& token_str,
|
| extensions::api::copresence_private::OnEncodeTokenRequest::Create(params),
|
| browser_context_));
|
|
|
| - extensions::EventRouter::Get(browser_context_)
|
| - ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
|
| + SendEventIfLoaded(event.Pass());
|
| }
|
|
|
| void ChromeWhispernetClient::DecodeSamples(copresence::AudioType type,
|
| const std::string& samples,
|
| const size_t token_length[2]) {
|
| - DCHECK(extension_loaded_);
|
| - DCHECK(browser_context_);
|
| - DCHECK(extensions::EventRouter::Get(browser_context_));
|
| -
|
| extensions::api::copresence_private::DecodeSamplesParameters params;
|
| params.samples.assign(samples.begin(), samples.end());
|
| params.decode_audible =
|
| @@ -128,22 +121,16 @@ void ChromeWhispernetClient::DecodeSamples(copresence::AudioType type,
|
| params),
|
| browser_context_));
|
|
|
| - extensions::EventRouter::Get(browser_context_)
|
| - ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
|
| + SendEventIfLoaded(event.Pass());
|
| }
|
|
|
| void ChromeWhispernetClient::DetectBroadcast() {
|
| - DCHECK(extension_loaded_);
|
| - DCHECK(browser_context_);
|
| - DCHECK(extensions::EventRouter::Get(browser_context_));
|
| -
|
| scoped_ptr<extensions::Event> event(new extensions::Event(
|
| extensions::api::copresence_private::OnDetectBroadcastRequest::kEventName,
|
| make_scoped_ptr(new base::ListValue()),
|
| browser_context_));
|
|
|
| - extensions::EventRouter::Get(browser_context_)
|
| - ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
|
| + SendEventIfLoaded(event.Pass());
|
| }
|
|
|
| void ChromeWhispernetClient::RegisterTokensCallback(
|
| @@ -182,9 +169,6 @@ copresence::SuccessCallback ChromeWhispernetClient::GetInitializedCallback() {
|
|
|
| void ChromeWhispernetClient::AudioConfiguration(
|
| const copresence::config::AudioParamData& params) {
|
| - DCHECK(browser_context_);
|
| - DCHECK(extensions::EventRouter::Get(browser_context_));
|
| -
|
| extensions::api::copresence_private::AudioParameters audio_params;
|
|
|
| // We serialize AudioConfigData to a string and send it to the whispernet
|
| @@ -198,23 +182,34 @@ void ChromeWhispernetClient::AudioConfiguration(
|
| extensions::api::copresence_private::OnConfigAudio::Create(audio_params),
|
| browser_context_));
|
|
|
| - extensions::EventRouter::Get(browser_context_)
|
| - ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
|
| + SendEventIfLoaded(event.Pass());
|
| }
|
|
|
| -void ChromeWhispernetClient::OnExtensionLoaded(bool success) {
|
| +void ChromeWhispernetClient::SendEventIfLoaded(
|
| + scoped_ptr<extensions::Event> event) {
|
| if (extension_loaded_) {
|
| - if (!init_callback_.is_null())
|
| - init_callback_.Run(success);
|
| - return;
|
| + event_router_->DispatchEventToExtension(kWhispernetProxyExtensionId,
|
| + event.Pass());
|
| + } else {
|
| + DVLOG(2) << "Queueing event: " << event->event_name;
|
| + queued_events_.push_back(event.release());
|
| }
|
| +}
|
|
|
| - // Our extension just got loaded, initialize whispernet.
|
| - extension_loaded_ = true;
|
| +void ChromeWhispernetClient::OnExtensionLoaded(bool success) {
|
| + if (!init_callback_.is_null())
|
| + init_callback_.Run(success);
|
|
|
| - // This will fire another OnExtensionLoaded call once the initialization is
|
| - // done, which means we've initialized for realz, hence call the init
|
| - // callback.
|
| + DVLOG(3) << "Sending " << queued_events_.size()
|
| + << " queued requests to whispernet";
|
|
|
| - AudioConfiguration(GetDefaultAudioConfig());
|
| + // In this loop, ownership of each Event is passed to a scoped_ptr instead.
|
| + // Thus we can just discard the pointers at the end.
|
| + for (extensions::Event* event : queued_events_) {
|
| + event_router_->DispatchEventToExtension(kWhispernetProxyExtensionId,
|
| + make_scoped_ptr(event));
|
| + }
|
| + queued_events_.weak_clear();
|
| +
|
| + extension_loaded_ = true;
|
| }
|
|
|