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

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

Issue 438513002: Add the whispernet proxy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/copresence/chrome_whispernet_client.h"
6
7 #include "chrome/browser/extensions/api/copresence_private/copresence_private_ap i.h"
8 #include "chrome/browser/extensions/component_loader.h"
9 #include "chrome/browser/extensions/extension_service.h"
10 #include "chrome/common/extensions/api/copresence_private.h"
11 #include "content/public/browser/browser_context.h"
12 #include "extensions/browser/event_router.h"
13 #include "extensions/browser/extension_system.h"
14 #include "grit/browser_resources.h"
15
16 namespace copresence {
17
18 // Once the CL for the copresence component lands, these constants will be
19 // need to be picked up from components/copresence/copresence_constants.h
20 const int kDefaultRepetitions = 5;
21 const float kDefaultSampleRate = 48000.0;
22 const int kDefaultBitsPerSample = 16;
23 const float kDefaultCarrierFrequency = 18500.0;
24 const int kDefaultChannels = 2;
25
26 } // namespace copresence
27
28 // static
29 const char ChromeWhispernetClient::kWhispernetProxyExtensionId[] =
30 "bpfmnplchembfbdgieamdodgaencleal";
31
32 // Public:
33
34 ChromeWhispernetClient::ChromeWhispernetClient(
35 content::BrowserContext* browser_context)
36 : browser_context_(browser_context), extension_loaded_(false) {
37 }
38
39 ChromeWhispernetClient::~ChromeWhispernetClient() {
40 }
41
42 void ChromeWhispernetClient::Initialize(const SuccessCallback& init_callback) {
43 DVLOG(3) << "Initializing whispernet proxy client.";
44 init_callback_ = init_callback;
45
46 extensions::ExtensionSystem* es =
47 extensions::ExtensionSystem::Get(browser_context_);
48 DCHECK(es);
49 ExtensionService* service = es->extension_service();
50 DCHECK(service);
51 extensions::ComponentLoader* loader = service->component_loader();
52 DCHECK(loader);
53
54 // This callback is cancelled in Shutdown().
55 extension_loaded_callback_ = base::Bind(
56 &ChromeWhispernetClient::OnExtensionLoaded, base::Unretained(this));
57
58 if (!loader->Exists(kWhispernetProxyExtensionId)) {
59 DVLOG(3) << "Loading Whispernet proxy.";
60 loader->Add(IDR_WHISPERNET_PROXY_MANIFEST,
61 base::FilePath(FILE_PATH_LITERAL("whispernet_proxy")));
62 } else {
63 init_callback_.Run(true);
64 }
65 }
66
67 void ChromeWhispernetClient::Shutdown() {
68 extension_loaded_callback_.Reset();
69 init_callback_.Reset();
70 tokens_callback_.Reset();
71 samples_callback_.Reset();
72 db_callback_.Reset();
73 }
74
75 // Fire an event to request a token encode.
76 void ChromeWhispernetClient::EncodeToken(const std::string& token) {
77 DCHECK(extension_loaded_);
78 DCHECK(browser_context_);
79 DCHECK(extensions::EventRouter::Get(browser_context_));
80
81 scoped_ptr<extensions::Event> event(new extensions::Event(
82 extensions::api::copresence_private::OnEncodeTokenRequest::kEventName,
83 extensions::api::copresence_private::OnEncodeTokenRequest::Create(token),
84 browser_context_));
85
86 extensions::EventRouter::Get(browser_context_)
87 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
88 }
89
90 // Fire an event to request a decode for the given samples.
91 void ChromeWhispernetClient::DecodeSamples(const std::string& samples) {
92 DCHECK(extension_loaded_);
93 DCHECK(browser_context_);
94 DCHECK(extensions::EventRouter::Get(browser_context_));
95
96 scoped_ptr<extensions::Event> event(new extensions::Event(
97 extensions::api::copresence_private::OnDecodeSamplesRequest::kEventName,
98 extensions::api::copresence_private::OnDecodeSamplesRequest::Create(
99 samples),
100 browser_context_));
101
102 extensions::EventRouter::Get(browser_context_)
103 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
104 }
105
106 void ChromeWhispernetClient::DetectBroadcast() {
107 DCHECK(extension_loaded_);
108 DCHECK(browser_context_);
109 DCHECK(extensions::EventRouter::Get(browser_context_));
110
111 scoped_ptr<extensions::Event> event(new extensions::Event(
112 extensions::api::copresence_private::OnDetectBroadcastRequest::kEventName,
113 make_scoped_ptr(new base::ListValue()),
114 browser_context_));
115
116 extensions::EventRouter::Get(browser_context_)
117 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
118 }
119
120 void ChromeWhispernetClient::RegisterTokensCallback(
121 const TokensCallback& tokens_callback) {
122 tokens_callback_ = tokens_callback;
123 }
124
125 void ChromeWhispernetClient::RegisterSamplesCallback(
126 const SamplesCallback& samples_callback) {
127 samples_callback_ = samples_callback;
128 }
129
130 void ChromeWhispernetClient::RegisterDetectBroadcastCallback(
131 const SuccessCallback& db_callback) {
132 db_callback_ = db_callback;
133 }
134
135 ChromeWhispernetClient::TokensCallback
136 ChromeWhispernetClient::GetTokensCallback() {
137 return tokens_callback_;
138 }
139
140 ChromeWhispernetClient::SamplesCallback
141 ChromeWhispernetClient::GetSamplesCallback() {
142 return samples_callback_;
143 }
144
145 ChromeWhispernetClient::SuccessCallback
146 ChromeWhispernetClient::GetDetectBroadcastCallback() {
147 return db_callback_;
148 }
149
150 ChromeWhispernetClient::SuccessCallback
151 ChromeWhispernetClient::GetInitializedCallback() {
152 return extension_loaded_callback_;
153 }
154
155 // Private:
156
157 // Fire an event to initialize whispernet with the given parameters.
158 void ChromeWhispernetClient::InitializeWhispernet(
159 const extensions::api::copresence_private::AudioParameters& params) {
160 DCHECK(browser_context_);
161 DCHECK(extensions::EventRouter::Get(browser_context_));
162
163 scoped_ptr<extensions::Event> event(new extensions::Event(
164 extensions::api::copresence_private::OnInitialize::kEventName,
165 extensions::api::copresence_private::OnInitialize::Create(params),
166 browser_context_));
167
168 extensions::EventRouter::Get(browser_context_)
169 ->DispatchEventToExtension(kWhispernetProxyExtensionId, event.Pass());
170 }
171
172 void ChromeWhispernetClient::OnExtensionLoaded(bool success) {
173 if (extension_loaded_) {
174 if (!init_callback_.is_null())
175 init_callback_.Run(success);
176 return;
177 }
178
179 // Our extension just got loaded, initialize whispernet.
180 extension_loaded_ = true;
181
182 // This will fire another OnExtensionLoaded call once the initialization is
183 // done, which means we've initialized for realz, hence call the init
184 // callback.
185
186 // At this point, we have the same parameters for record and play. This
187 // may change later though (ongoing discussion with research).
188 extensions::api::copresence_private::AudioParameters params;
189 params.play.sample_rate = copresence::kDefaultSampleRate;
190 params.play.bits_per_sample = copresence::kDefaultBitsPerSample;
191 params.play.carrier_frequency = copresence::kDefaultCarrierFrequency;
192 params.play.repetitions = copresence::kDefaultRepetitions;
193
194 params.record.sample_rate = copresence::kDefaultSampleRate;
195 params.record.bits_per_sample = copresence::kDefaultBitsPerSample;
196 params.record.carrier_frequency = copresence::kDefaultCarrierFrequency;
197 params.record.channels = copresence::kDefaultChannels;
198
199 InitializeWhispernet(params);
200 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698