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

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 <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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698