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