| 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
|
| deleted file mode 100644
|
| index dbd741576c5805c0b9253adba635b7a6e951fcee..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/copresence/chrome_whispernet_client.cc
|
| +++ /dev/null
|
| @@ -1,236 +0,0 @@
|
| -// Copyright 2014 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.
|
| -
|
| -#include "chrome/browser/copresence/chrome_whispernet_client.h"
|
| -
|
| -#include <stddef.h>
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/memory/ptr_util.h"
|
| -#include "chrome/browser/copresence/chrome_whispernet_config.h"
|
| -#include "chrome/browser/extensions/api/copresence_private/copresence_private_api.h"
|
| -#include "chrome/browser/extensions/component_loader.h"
|
| -#include "chrome/browser/extensions/extension_service.h"
|
| -#include "chrome/common/extensions/api/copresence_private.h"
|
| -#include "content/public/browser/browser_context.h"
|
| -#include "extensions/browser/event_router.h"
|
| -#include "extensions/browser/extension_system.h"
|
| -#include "grit/browser_resources.h"
|
| -#include "media/audio/audio_device_description.h"
|
| -#include "media/audio/audio_manager.h"
|
| -#include "media/base/audio_parameters.h"
|
| -
|
| -using audio_modem::AUDIBLE;
|
| -using audio_modem::AudioType;
|
| -using audio_modem::BOTH;
|
| -using audio_modem::INAUDIBLE;
|
| -using audio_modem::SamplesCallback;
|
| -using audio_modem::SuccessCallback;
|
| -using audio_modem::TokensCallback;
|
| -using audio_modem::TokenParameters;
|
| -
|
| -using extensions::api::copresence_private::AudioParameters;
|
| -using extensions::api::copresence_private::DecodeSamplesParameters;
|
| -using extensions::api::copresence_private::EncodeTokenParameters;
|
| -using ApiTokenParams = extensions::api::copresence_private::TokenParameters;
|
| -
|
| -namespace OnConfigAudio =
|
| - extensions::api::copresence_private::OnConfigAudio;
|
| -namespace OnDecodeSamplesRequest =
|
| - extensions::api::copresence_private::OnDecodeSamplesRequest;
|
| -namespace OnEncodeTokenRequest =
|
| - extensions::api::copresence_private::OnEncodeTokenRequest;
|
| -
|
| -using extensions::Event;
|
| -
|
| -namespace {
|
| -
|
| -AudioParamData GetDefaultAudioConfig() {
|
| - media::AudioParameters params =
|
| - media::AudioManager::Get()->GetInputStreamParameters(
|
| - media::AudioDeviceDescription::kDefaultDeviceId);
|
| -
|
| - AudioParamData config_data = {};
|
| -
|
| - config_data.audio_dtmf.coder_sample_rate =
|
| - config_data.audio_dsss.coder_sample_rate =
|
| - audio_modem::kDefaultSampleRate;
|
| -
|
| - config_data.audio_dtmf.recording_sample_rate =
|
| - config_data.audio_dsss.recording_sample_rate = params.sample_rate();
|
| -
|
| - config_data.audio_dtmf.num_repetitions_to_play =
|
| - config_data.audio_dsss.num_repetitions_to_play =
|
| - audio_modem::kDefaultRepetitions;
|
| -
|
| - config_data.audio_dsss.upsampling_factor = audio_modem::kDefaultBitsPerSample;
|
| - config_data.audio_dsss.desired_carrier_frequency =
|
| - audio_modem::kDefaultCarrierFrequency;
|
| -
|
| - config_data.recording_channels = params.channels();
|
| -
|
| - return config_data;
|
| -}
|
| -
|
| -// ApiTokenParams is not copyable, so we must take it as an output argument.
|
| -// TODO(ckehoe): Pass protos to Whispernet to avoid all these conversions.
|
| -void ConvertTokenParams(const TokenParameters& in, ApiTokenParams* out) {
|
| - out->length = in.length;
|
| - out->crc = in.crc;
|
| - out->parity = in.parity;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// static
|
| -const char ChromeWhispernetClient::kWhispernetProxyExtensionId[] =
|
| - "bpfmnplchembfbdgieamdodgaencleal";
|
| -
|
| -
|
| -// Public functions.
|
| -
|
| -ChromeWhispernetClient::ChromeWhispernetClient(
|
| - content::BrowserContext* browser_context)
|
| - : browser_context_(browser_context),
|
| - event_router_(extensions::EventRouter::Get(browser_context)),
|
| - extension_loaded_(false) {
|
| - DCHECK(browser_context_);
|
| -}
|
| -
|
| -ChromeWhispernetClient::~ChromeWhispernetClient() {}
|
| -
|
| -void ChromeWhispernetClient::Initialize(
|
| - const SuccessCallback& init_callback) {
|
| - DVLOG(3) << "Initializing whispernet proxy client.";
|
| -
|
| - DCHECK(!init_callback.is_null());
|
| - init_callback_ = init_callback;
|
| -
|
| - ExtensionService* extension_service =
|
| - extensions::ExtensionSystem::Get(browser_context_)->extension_service();
|
| - CHECK(extension_service);
|
| -
|
| - extensions::ComponentLoader* loader = extension_service->component_loader();
|
| - CHECK(loader);
|
| - if (!loader->Exists(kWhispernetProxyExtensionId)) {
|
| - DVLOG(3) << "Loading Whispernet proxy.";
|
| - loader->Add(IDR_WHISPERNET_PROXY_MANIFEST,
|
| - base::FilePath(FILE_PATH_LITERAL("whispernet_proxy")));
|
| - }
|
| -
|
| - client_id_ = extensions::CopresencePrivateService::GetFactoryInstance()
|
| - ->Get(browser_context_)->RegisterWhispernetClient(this);
|
| - AudioConfiguration(GetDefaultAudioConfig());
|
| -}
|
| -
|
| -void ChromeWhispernetClient::EncodeToken(
|
| - const std::string& token_str,
|
| - AudioType type,
|
| - const TokenParameters token_params[2]) {
|
| - DCHECK(type == AUDIBLE || type == INAUDIBLE);
|
| -
|
| - EncodeTokenParameters params;
|
| - params.token.token = token_str;
|
| - params.token.audible = (type == AUDIBLE);
|
| - ConvertTokenParams(token_params[type], ¶ms.token_params);
|
| -
|
| - SendEventIfLoaded(base::WrapUnique(new Event(
|
| - extensions::events::COPRESENCE_PRIVATE_ON_ENCODE_TOKEN_REQUEST,
|
| - OnEncodeTokenRequest::kEventName,
|
| - OnEncodeTokenRequest::Create(client_id_, params), browser_context_)));
|
| -}
|
| -
|
| -void ChromeWhispernetClient::DecodeSamples(
|
| - AudioType type,
|
| - const std::string& samples,
|
| - const TokenParameters token_params[2]) {
|
| - DecodeSamplesParameters params;
|
| - params.samples.assign(samples.begin(), samples.end());
|
| - params.decode_audible = (type == AUDIBLE || type == BOTH);
|
| - params.decode_inaudible = (type == INAUDIBLE || type == BOTH);
|
| - ConvertTokenParams(token_params[AUDIBLE], ¶ms.audible_token_params);
|
| - ConvertTokenParams(token_params[INAUDIBLE], ¶ms.inaudible_token_params);
|
| -
|
| - SendEventIfLoaded(base::WrapUnique(new Event(
|
| - extensions::events::COPRESENCE_PRIVATE_ON_DECODE_SAMPLES_REQUEST,
|
| - OnDecodeSamplesRequest::kEventName,
|
| - OnDecodeSamplesRequest::Create(client_id_, params), browser_context_)));
|
| -}
|
| -
|
| -void ChromeWhispernetClient::RegisterTokensCallback(
|
| - const TokensCallback& tokens_callback) {
|
| - tokens_callback_ = tokens_callback;
|
| -}
|
| -
|
| -void ChromeWhispernetClient::RegisterSamplesCallback(
|
| - const SamplesCallback& samples_callback) {
|
| - samples_callback_ = samples_callback;
|
| -}
|
| -
|
| -TokensCallback ChromeWhispernetClient::GetTokensCallback() {
|
| - return tokens_callback_;
|
| -}
|
| -
|
| -SamplesCallback ChromeWhispernetClient::GetSamplesCallback() {
|
| - return samples_callback_;
|
| -}
|
| -
|
| -SuccessCallback ChromeWhispernetClient::GetInitializedCallback() {
|
| - return base::Bind(&ChromeWhispernetClient::OnExtensionLoaded,
|
| - base::Unretained(this));
|
| -}
|
| -
|
| -
|
| -// Private functions.
|
| -
|
| -void ChromeWhispernetClient::AudioConfiguration(const AudioParamData& params) {
|
| - AudioParameters audio_params;
|
| -
|
| - // We serialize AudioConfigData to a string and send it to the whispernet
|
| - // nacl wrapper.
|
| - const size_t params_size = sizeof(params);
|
| - audio_params.param_data.resize(params_size);
|
| - memcpy(audio_params.param_data.data(), ¶ms, params_size);
|
| -
|
| - DVLOG(3) << "Configuring audio for client " << client_id_;
|
| - SendEventIfLoaded(base::WrapUnique(new Event(
|
| - extensions::events::COPRESENCE_PRIVATE_ON_CONFIG_AUDIO,
|
| - OnConfigAudio::kEventName,
|
| - OnConfigAudio::Create(client_id_, audio_params), browser_context_)));
|
| -}
|
| -
|
| -void ChromeWhispernetClient::SendEventIfLoaded(
|
| - std::unique_ptr<extensions::Event> event) {
|
| - DCHECK(event_router_);
|
| -
|
| - if (extension_loaded_) {
|
| - event_router_->DispatchEventToExtension(kWhispernetProxyExtensionId,
|
| - std::move(event));
|
| - } else {
|
| - DVLOG(2) << "Queueing event " << event->event_name
|
| - << " for client " << client_id_;
|
| - queued_events_.push_back(event.release());
|
| - }
|
| -}
|
| -
|
| -void ChromeWhispernetClient::OnExtensionLoaded(bool success) {
|
| - DCHECK(!init_callback_.is_null());
|
| - init_callback_.Run(success);
|
| -
|
| - DVLOG(3) << "Sending " << queued_events_.size()
|
| - << " queued requests to whispernet from client "
|
| - << client_id_;
|
| -
|
| - // In this loop, ownership of each Event is passed to a scoped_ptr instead.
|
| - // Thus we can just discard the pointers at the end.
|
| - DCHECK(event_router_);
|
| - for (Event* event : queued_events_) {
|
| - event_router_->DispatchEventToExtension(kWhispernetProxyExtensionId,
|
| - base::WrapUnique(event));
|
| - }
|
| - queued_events_.weak_clear();
|
| -
|
| - extension_loaded_ = true;
|
| -}
|
|
|