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

Side by Side Diff: chrome/browser/extensions/api/copresence_private/copresence_private_api.cc

Issue 2131993002: Delete the audio modem and copresence private APIs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@eol
Patch Set: Sync again Created 4 years, 5 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
(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/extensions/api/copresence_private/copresence_private_ap i.h"
6
7 #include <stddef.h>
8
9 #include <map>
10 #include <string>
11 #include <vector>
12
13 #include "base/guid.h"
14 #include "base/lazy_instance.h"
15 #include "chrome/browser/copresence/chrome_whispernet_client.h"
16 #include "chrome/common/extensions/api/copresence_private.h"
17 #include "content/public/browser/browser_thread.h"
18 #include "media/base/audio_bus.h"
19
20 using audio_modem::WhispernetClient;
21 using content::BrowserThread;
22
23 namespace extensions {
24
25 namespace SendFound = api::copresence_private::SendFound;
26 namespace SendSamples = api::copresence_private::SendSamples;
27 namespace SendInitialized = api::copresence_private::SendInitialized;
28
29 namespace {
30
31 base::LazyInstance<BrowserContextKeyedAPIFactory<CopresencePrivateService>>
32 g_factory = LAZY_INSTANCE_INITIALIZER;
33
34 void RunInitCallback(WhispernetClient* client, bool status) {
35 DCHECK(client);
36 audio_modem::SuccessCallback init_callback =
37 client->GetInitializedCallback();
38 if (!init_callback.is_null())
39 init_callback.Run(status);
40 }
41
42 } // namespace
43
44 CopresencePrivateService::CopresencePrivateService(
45 content::BrowserContext* context)
46 : initialized_(false) {}
47
48 CopresencePrivateService::~CopresencePrivateService() {}
49
50 const std::string CopresencePrivateService::RegisterWhispernetClient(
51 WhispernetClient* client) {
52 if (initialized_)
53 RunInitCallback(client, true);
54
55 std::string id = base::GenerateGUID();
56 whispernet_clients_[id] = client;
57
58 return id;
59 }
60
61 void CopresencePrivateService::OnWhispernetInitialized(bool success) {
62 if (success)
63 initialized_ = true;
64
65 DVLOG(2) << "Notifying " << whispernet_clients_.size()
66 << " clients that initialization is complete.";
67 for (auto client_entry : whispernet_clients_)
68 RunInitCallback(client_entry.second, success);
69 }
70
71 WhispernetClient* CopresencePrivateService::GetWhispernetClient(
72 const std::string& id) {
73 WhispernetClient* client = whispernet_clients_[id];
74 DCHECK(client);
75 return client;
76 }
77
78 // static
79 BrowserContextKeyedAPIFactory<CopresencePrivateService>*
80 CopresencePrivateService::GetFactoryInstance() {
81 return g_factory.Pointer();
82 }
83
84 template <>
85 void BrowserContextKeyedAPIFactory<CopresencePrivateService>
86 ::DeclareFactoryDependencies() {
87 DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
88 }
89
90
91 // Copresence Private functions.
92
93 // CopresenceSendFoundFunction implementation:
94 ExtensionFunction::ResponseAction CopresencePrivateSendFoundFunction::Run() {
95 std::unique_ptr<SendFound::Params> params(SendFound::Params::Create(*args_));
96 EXTENSION_FUNCTION_VALIDATE(params.get());
97
98 WhispernetClient* whispernet_client =
99 CopresencePrivateService::GetFactoryInstance()->Get(browser_context())
100 ->GetWhispernetClient(params->client_id);
101 if (whispernet_client->GetTokensCallback().is_null())
102 return RespondNow(NoArguments());
103
104 std::vector<audio_modem::AudioToken> tokens;
105 for (size_t i = 0; i < params->tokens.size(); ++i) {
106 tokens.push_back(audio_modem::AudioToken(params->tokens[i].token,
107 params->tokens[i].audible));
108 }
109 whispernet_client->GetTokensCallback().Run(tokens);
110 return RespondNow(NoArguments());
111 }
112
113 // CopresenceSendEncodedFunction implementation:
114 ExtensionFunction::ResponseAction CopresencePrivateSendSamplesFunction::Run() {
115 std::unique_ptr<SendSamples::Params> params(
116 SendSamples::Params::Create(*args_));
117 EXTENSION_FUNCTION_VALIDATE(params.get());
118
119 WhispernetClient* whispernet_client =
120 CopresencePrivateService::GetFactoryInstance()->Get(browser_context())
121 ->GetWhispernetClient(params->client_id);
122 if (whispernet_client->GetSamplesCallback().is_null())
123 return RespondNow(NoArguments());
124
125 scoped_refptr<media::AudioBusRefCounted> samples =
126 media::AudioBusRefCounted::Create(1, // Mono
127 params->samples.size() / sizeof(float));
128
129 memcpy(samples->channel(0), params->samples.data(), params->samples.size());
130
131 whispernet_client->GetSamplesCallback().Run(
132 params->token.audible ? audio_modem::AUDIBLE : audio_modem::INAUDIBLE,
133 params->token.token, samples);
134 return RespondNow(NoArguments());
135 }
136
137 // CopresenceSendInitializedFunction implementation:
138 ExtensionFunction::ResponseAction
139 CopresencePrivateSendInitializedFunction::Run() {
140 std::unique_ptr<SendInitialized::Params> params(
141 SendInitialized::Params::Create(*args_));
142 EXTENSION_FUNCTION_VALIDATE(params.get());
143
144 CopresencePrivateService::GetFactoryInstance()->Get(browser_context())
145 ->OnWhispernetInitialized(params->success);
146
147 return RespondNow(NoArguments());
148 }
149
150 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698