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

Side by Side Diff: chrome/browser/copresence/chrome_whispernet_client.cc

Issue 865483005: Creating the audio_modem component (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Small fixes Created 5 years, 10 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/copresence/chrome_whispernet_client.h" 5 #include "chrome/browser/copresence/chrome_whispernet_client.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "chrome/browser/copresence/chrome_whispernet_config.h"
8 #include "chrome/browser/extensions/api/copresence_private/copresence_private_ap i.h" 9 #include "chrome/browser/extensions/api/copresence_private/copresence_private_ap i.h"
9 #include "chrome/browser/extensions/component_loader.h" 10 #include "chrome/browser/extensions/component_loader.h"
10 #include "chrome/browser/extensions/extension_service.h" 11 #include "chrome/browser/extensions/extension_service.h"
11 #include "chrome/common/extensions/api/copresence_private.h" 12 #include "chrome/common/extensions/api/copresence_private.h"
12 #include "components/copresence/public/copresence_constants.h"
13 #include "content/public/browser/browser_context.h" 13 #include "content/public/browser/browser_context.h"
14 #include "extensions/browser/event_router.h" 14 #include "extensions/browser/event_router.h"
15 #include "extensions/browser/extension_system.h" 15 #include "extensions/browser/extension_system.h"
16 #include "grit/browser_resources.h" 16 #include "grit/browser_resources.h"
17 17
18 using audio_modem::AUDIBLE;
19 using audio_modem::AudioType;
20 using audio_modem::BOTH;
21 using audio_modem::INAUDIBLE;
22 using audio_modem::SamplesCallback;
23 using audio_modem::SuccessCallback;
24 using audio_modem::TokensCallback;
25
26 namespace copresence_private = extensions::api::copresence_private;
27
18 namespace { 28 namespace {
19 29
20 copresence::config::AudioParamData GetDefaultAudioConfig() { 30 AudioParamData GetDefaultAudioConfig() {
21 copresence::config::AudioParamData config_data = {}; 31 AudioParamData config_data = {};
22 config_data.audio_dtmf.coder_sample_rate = 32 config_data.audio_dtmf.coder_sample_rate =
23 config_data.audio_dsss.coder_sample_rate = copresence::kDefaultSampleRate; 33 config_data.audio_dsss.coder_sample_rate =
34 audio_modem::kDefaultSampleRate;
24 config_data.audio_dtmf.num_repetitions_to_play = 35 config_data.audio_dtmf.num_repetitions_to_play =
25 config_data.audio_dsss.num_repetitions_to_play = 36 config_data.audio_dsss.num_repetitions_to_play =
26 copresence::kDefaultRepetitions; 37 audio_modem::kDefaultRepetitions;
27 38
28 config_data.audio_dsss.upsampling_factor = copresence::kDefaultBitsPerSample; 39 config_data.audio_dsss.upsampling_factor = audio_modem::kDefaultBitsPerSample;
29 config_data.audio_dsss.desired_carrier_frequency = 40 config_data.audio_dsss.desired_carrier_frequency =
30 copresence::kDefaultCarrierFrequency; 41 audio_modem::kDefaultCarrierFrequency;
31 42
32 config_data.recording_channels = copresence::kDefaultChannels; 43 config_data.recording_channels = audio_modem::kDefaultChannels;
33 44
34 return config_data; 45 return config_data;
35 } 46 }
36 47
37 } // namespace 48 } // namespace
38 49
39 // static 50 // static
40 const char ChromeWhispernetClient::kWhispernetProxyExtensionId[] = 51 const char ChromeWhispernetClient::kWhispernetProxyExtensionId[] =
41 "bpfmnplchembfbdgieamdodgaencleal"; 52 "bpfmnplchembfbdgieamdodgaencleal";
42 53
43 // Public: 54 // Public:
44 55
45 ChromeWhispernetClient::ChromeWhispernetClient( 56 ChromeWhispernetClient::ChromeWhispernetClient(
46 content::BrowserContext* browser_context) 57 content::BrowserContext* browser_context)
47 : browser_context_(browser_context), extension_loaded_(false) { 58 : browser_context_(browser_context), extension_loaded_(false) {
48 } 59 }
49 60
50 ChromeWhispernetClient::~ChromeWhispernetClient() { 61 ChromeWhispernetClient::~ChromeWhispernetClient() {
51 } 62 }
52 63
53 void ChromeWhispernetClient::Initialize( 64 void ChromeWhispernetClient::Initialize(
54 const copresence::SuccessCallback& init_callback) { 65 const SuccessCallback& init_callback) {
55 DVLOG(3) << "Initializing whispernet proxy client."; 66 DVLOG(3) << "Initializing whispernet proxy client.";
56 init_callback_ = init_callback; 67 init_callback_ = init_callback;
57 68
58 extensions::ExtensionSystem* es = 69 extensions::ExtensionSystem* es =
59 extensions::ExtensionSystem::Get(browser_context_); 70 extensions::ExtensionSystem::Get(browser_context_);
60 DCHECK(es); 71 DCHECK(es);
61 ExtensionService* service = es->extension_service(); 72 ExtensionService* service = es->extension_service();
62 DCHECK(service); 73 DCHECK(service);
63 extensions::ComponentLoader* loader = service->component_loader(); 74 extensions::ComponentLoader* loader = service->component_loader();
64 DCHECK(loader); 75 DCHECK(loader);
65 76
66 // This callback is cancelled in Shutdown(). 77 // This callback is cancelled in Shutdown().
67 extension_loaded_callback_ = base::Bind( 78 extension_loaded_callback_ = base::Bind(
68 &ChromeWhispernetClient::OnExtensionLoaded, base::Unretained(this)); 79 &ChromeWhispernetClient::OnExtensionLoaded, base::Unretained(this));
69 80
70 if (!loader->Exists(kWhispernetProxyExtensionId)) { 81 if (!loader->Exists(kWhispernetProxyExtensionId)) {
71 DVLOG(3) << "Loading Whispernet proxy."; 82 DVLOG(3) << "Loading Whispernet proxy.";
72 loader->Add(IDR_WHISPERNET_PROXY_MANIFEST, 83 loader->Add(IDR_WHISPERNET_PROXY_MANIFEST,
73 base::FilePath(FILE_PATH_LITERAL("whispernet_proxy"))); 84 base::FilePath(FILE_PATH_LITERAL("whispernet_proxy")));
74 } else { 85 } else {
75 init_callback_.Run(true); 86 init_callback_.Run(true);
76 } 87 }
77 } 88 }
78 89
79 void ChromeWhispernetClient::Shutdown() {
80 extension_loaded_callback_.Reset();
81 init_callback_.Reset();
82 tokens_callback_.Reset();
83 samples_callback_.Reset();
84 db_callback_.Reset();
85 }
86
87 void AudioConfiguration(const copresence::config::AudioParamData& data,
88 const copresence::SuccessCallback& init_callback) {
89 }
90
91 void ChromeWhispernetClient::EncodeToken(const std::string& token_str, 90 void ChromeWhispernetClient::EncodeToken(const std::string& token_str,
92 copresence::AudioType type) { 91 AudioType type) {
93 DCHECK(extension_loaded_); 92 DCHECK(extension_loaded_);
94 DCHECK(browser_context_); 93 DCHECK(browser_context_);
95 DCHECK(extensions::EventRouter::Get(browser_context_)); 94 DCHECK(extensions::EventRouter::Get(browser_context_));
96 95
97 extensions::api::copresence_private::EncodeTokenParameters params; 96 copresence_private::EncodeTokenParameters params;
98 params.token.token = token_str; 97 params.token.token = token_str;
99 params.token.audible = type == copresence::AUDIBLE; 98 params.token.audible = type == AUDIBLE;
100 scoped_ptr<extensions::Event> event(new extensions::Event( 99 scoped_ptr<extensions::Event> event(new extensions::Event(
101 extensions::api::copresence_private::OnEncodeTokenRequest::kEventName, 100 copresence_private::OnEncodeTokenRequest::kEventName,
102 extensions::api::copresence_private::OnEncodeTokenRequest::Create(params), 101 copresence_private::OnEncodeTokenRequest::Create(params),
103 browser_context_)); 102 browser_context_));
104 103
105 extensions::EventRouter::Get(browser_context_) 104 extensions::EventRouter::Get(browser_context_)
106 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass()); 105 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
107 } 106 }
108 107
109 void ChromeWhispernetClient::DecodeSamples(copresence::AudioType type, 108 void ChromeWhispernetClient::DecodeSamples(AudioType type,
110 const std::string& samples, 109 const std::string& samples,
111 const size_t token_length[2]) { 110 const size_t token_length[2]) {
112 DCHECK(extension_loaded_); 111 DCHECK(extension_loaded_);
113 DCHECK(browser_context_); 112 DCHECK(browser_context_);
114 DCHECK(extensions::EventRouter::Get(browser_context_)); 113 DCHECK(extensions::EventRouter::Get(browser_context_));
115 114
116 extensions::api::copresence_private::DecodeSamplesParameters params; 115 copresence_private::DecodeSamplesParameters params;
117 params.samples.assign(samples.begin(), samples.end()); 116 params.samples.assign(samples.begin(), samples.end());
118 params.decode_audible = 117 params.decode_audible =
119 type == copresence::AUDIBLE || type == copresence::BOTH; 118 type == AUDIBLE || type == BOTH;
120 params.decode_inaudible = 119 params.decode_inaudible =
121 type == copresence::INAUDIBLE || type == copresence::BOTH; 120 type == INAUDIBLE || type == BOTH;
122 params.audible_token_length = token_length[copresence::AUDIBLE]; 121 params.audible_token_length = token_length[AUDIBLE];
123 params.inaudible_token_length = token_length[copresence::INAUDIBLE]; 122 params.inaudible_token_length = token_length[INAUDIBLE];
124 123
125 scoped_ptr<extensions::Event> event(new extensions::Event( 124 scoped_ptr<extensions::Event> event(new extensions::Event(
126 extensions::api::copresence_private::OnDecodeSamplesRequest::kEventName, 125 copresence_private::OnDecodeSamplesRequest::kEventName,
127 extensions::api::copresence_private::OnDecodeSamplesRequest::Create( 126 copresence_private::OnDecodeSamplesRequest::Create(
128 params), 127 params),
129 browser_context_)); 128 browser_context_));
130 129
131 extensions::EventRouter::Get(browser_context_) 130 extensions::EventRouter::Get(browser_context_)
132 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass()); 131 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
133 } 132 }
134 133
135 void ChromeWhispernetClient::DetectBroadcast() { 134 void ChromeWhispernetClient::DetectBroadcast() {
136 DCHECK(extension_loaded_); 135 DCHECK(extension_loaded_);
137 DCHECK(browser_context_); 136 DCHECK(browser_context_);
138 DCHECK(extensions::EventRouter::Get(browser_context_)); 137 DCHECK(extensions::EventRouter::Get(browser_context_));
139 138
140 scoped_ptr<extensions::Event> event(new extensions::Event( 139 scoped_ptr<extensions::Event> event(new extensions::Event(
141 extensions::api::copresence_private::OnDetectBroadcastRequest::kEventName, 140 copresence_private::OnDetectBroadcastRequest::kEventName,
142 make_scoped_ptr(new base::ListValue()), 141 make_scoped_ptr(new base::ListValue()),
143 browser_context_)); 142 browser_context_));
144 143
145 extensions::EventRouter::Get(browser_context_) 144 extensions::EventRouter::Get(browser_context_)
146 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass()); 145 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
147 } 146 }
148 147
149 void ChromeWhispernetClient::RegisterTokensCallback( 148 void ChromeWhispernetClient::RegisterTokensCallback(
150 const copresence::TokensCallback& tokens_callback) { 149 const TokensCallback& tokens_callback) {
151 tokens_callback_ = tokens_callback; 150 tokens_callback_ = tokens_callback;
152 } 151 }
153 152
154 void ChromeWhispernetClient::RegisterSamplesCallback( 153 void ChromeWhispernetClient::RegisterSamplesCallback(
155 const copresence::SamplesCallback& samples_callback) { 154 const SamplesCallback& samples_callback) {
156 samples_callback_ = samples_callback; 155 samples_callback_ = samples_callback;
157 } 156 }
158 157
159 void ChromeWhispernetClient::RegisterDetectBroadcastCallback( 158 void ChromeWhispernetClient::RegisterDetectBroadcastCallback(
160 const copresence::SuccessCallback& db_callback) { 159 const SuccessCallback& db_callback) {
161 db_callback_ = db_callback; 160 db_callback_ = db_callback;
162 } 161 }
163 162
164 copresence::TokensCallback ChromeWhispernetClient::GetTokensCallback() { 163 TokensCallback ChromeWhispernetClient::GetTokensCallback() {
165 return tokens_callback_; 164 return tokens_callback_;
166 } 165 }
167 166
168 copresence::SamplesCallback ChromeWhispernetClient::GetSamplesCallback() { 167 SamplesCallback ChromeWhispernetClient::GetSamplesCallback() {
169 return samples_callback_; 168 return samples_callback_;
170 } 169 }
171 170
172 copresence::SuccessCallback 171 SuccessCallback ChromeWhispernetClient::GetDetectBroadcastCallback() {
173 ChromeWhispernetClient::GetDetectBroadcastCallback() {
174 return db_callback_; 172 return db_callback_;
175 } 173 }
176 174
177 copresence::SuccessCallback ChromeWhispernetClient::GetInitializedCallback() { 175 SuccessCallback ChromeWhispernetClient::GetInitializedCallback() {
178 return extension_loaded_callback_; 176 return extension_loaded_callback_;
179 } 177 }
180 178
181 // Private: 179 // Private:
182 180
183 void ChromeWhispernetClient::AudioConfiguration( 181 void ChromeWhispernetClient::AudioConfiguration(
184 const copresence::config::AudioParamData& params) { 182 const AudioParamData& params) {
185 DCHECK(browser_context_); 183 DCHECK(browser_context_);
186 DCHECK(extensions::EventRouter::Get(browser_context_)); 184 DCHECK(extensions::EventRouter::Get(browser_context_));
187 185
188 extensions::api::copresence_private::AudioParameters audio_params; 186 copresence_private::AudioParameters audio_params;
189 187
190 // We serialize AudioConfigData to a string and send it to the whispernet 188 // We serialize AudioConfigData to a string and send it to the whispernet
191 // nacl wrapper. 189 // nacl wrapper.
192 const size_t params_size = sizeof(params); 190 const size_t params_size = sizeof(params);
193 audio_params.param_data.resize(params_size); 191 audio_params.param_data.resize(params_size);
194 memcpy(vector_as_array(&audio_params.param_data), &params, params_size); 192 memcpy(vector_as_array(&audio_params.param_data), &params, params_size);
195 193
196 scoped_ptr<extensions::Event> event(new extensions::Event( 194 scoped_ptr<extensions::Event> event(new extensions::Event(
197 extensions::api::copresence_private::OnConfigAudio::kEventName, 195 copresence_private::OnConfigAudio::kEventName,
198 extensions::api::copresence_private::OnConfigAudio::Create(audio_params), 196 copresence_private::OnConfigAudio::Create(audio_params),
199 browser_context_)); 197 browser_context_));
200 198
201 extensions::EventRouter::Get(browser_context_) 199 extensions::EventRouter::Get(browser_context_)
202 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass()); 200 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
203 } 201 }
204 202
205 void ChromeWhispernetClient::OnExtensionLoaded(bool success) { 203 void ChromeWhispernetClient::OnExtensionLoaded(bool success) {
206 if (extension_loaded_) { 204 if (extension_loaded_) {
207 if (!init_callback_.is_null()) 205 if (!init_callback_.is_null())
208 init_callback_.Run(success); 206 init_callback_.Run(success);
209 return; 207 return;
210 } 208 }
211 209
212 // Our extension just got loaded, initialize whispernet. 210 // Our extension just got loaded, initialize whispernet.
213 extension_loaded_ = true; 211 extension_loaded_ = true;
214 212
215 // This will fire another OnExtensionLoaded call once the initialization is 213 // This will fire another OnExtensionLoaded call once the initialization is
216 // done, which means we've initialized for realz, hence call the init 214 // done, which means we've initialized for realz, hence call the init
217 // callback. 215 // callback.
218 216
219 AudioConfiguration(GetDefaultAudioConfig()); 217 AudioConfiguration(GetDefaultAudioConfig());
220 } 218 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698