OLD | NEW |
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 <cstdlib> | 7 #include <cstdlib> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
13 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
14 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
15 #include "chrome/browser/extensions/api/copresence/copresence_api.h" | 15 #include "chrome/browser/extensions/api/copresence/copresence_api.h" |
16 #include "chrome/browser/extensions/extension_browsertest.h" | 16 #include "chrome/browser/extensions/extension_browsertest.h" |
17 #include "chrome/browser/profiles/profile.h" | 17 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/browser/ui/browser.h" | 18 #include "chrome/browser/ui/browser.h" |
19 #include "chrome/test/base/in_process_browser_test.h" | 19 #include "chrome/test/base/in_process_browser_test.h" |
20 #include "media/base/audio_bus.h" | 20 #include "media/base/audio_bus.h" |
21 | 21 |
22 namespace { | 22 namespace { |
23 | 23 |
| 24 const char kSixZeros[] = "MDAwMDAw"; |
| 25 |
24 copresence::WhispernetClient* GetWhispernetClient( | 26 copresence::WhispernetClient* GetWhispernetClient( |
25 content::BrowserContext* context) { | 27 content::BrowserContext* context) { |
26 extensions::CopresenceService* service = | 28 extensions::CopresenceService* service = |
27 extensions::CopresenceService::GetFactoryInstance()->Get(context); | 29 extensions::CopresenceService::GetFactoryInstance()->Get(context); |
28 return service ? service->whispernet_client() : NULL; | 30 return service ? service->whispernet_client() : NULL; |
29 } | 31 } |
30 | 32 |
31 // Copied from src/components/copresence/mediums/audio/audio_recorder.cc | 33 // Copied from src/components/copresence/mediums/audio/audio_recorder.cc |
32 std::string AudioBusToString(scoped_refptr<media::AudioBusRefCounted> source) { | 34 std::string AudioBusToString(scoped_refptr<media::AudioBusRefCounted> source) { |
33 std::string buffer; | 35 std::string buffer; |
(...skipping 20 matching lines...) Expand all Loading... |
54 void InitializeWhispernet() { | 56 void InitializeWhispernet() { |
55 context_ = browser()->profile(); | 57 context_ = browser()->profile(); |
56 run_loop_.reset(new base::RunLoop()); | 58 run_loop_.reset(new base::RunLoop()); |
57 GetWhispernetClient(context_)->Initialize(base::Bind( | 59 GetWhispernetClient(context_)->Initialize(base::Bind( |
58 &ChromeWhispernetClientTest::InitCallback, base::Unretained(this))); | 60 &ChromeWhispernetClientTest::InitCallback, base::Unretained(this))); |
59 run_loop_->Run(); | 61 run_loop_->Run(); |
60 | 62 |
61 EXPECT_TRUE(initialized_); | 63 EXPECT_TRUE(initialized_); |
62 } | 64 } |
63 | 65 |
64 void EncodeTokenAndSaveSamples() { | 66 void EncodeTokenAndSaveSamples(bool audible) { |
65 copresence::WhispernetClient* client = GetWhispernetClient(context_); | 67 copresence::WhispernetClient* client = GetWhispernetClient(context_); |
66 ASSERT_TRUE(client); | 68 ASSERT_TRUE(client); |
67 | 69 |
68 // This is the base64 encoding for "000000". | |
69 const std::string kZeroToken = "MDAwMDAw"; | |
70 | |
71 run_loop_.reset(new base::RunLoop()); | 70 run_loop_.reset(new base::RunLoop()); |
72 client->RegisterSamplesCallback(base::Bind( | 71 client->RegisterSamplesCallback(base::Bind( |
73 &ChromeWhispernetClientTest::SamplesCallback, base::Unretained(this))); | 72 &ChromeWhispernetClientTest::SamplesCallback, base::Unretained(this))); |
74 expected_token_ = kZeroToken; | 73 expected_token_ = kSixZeros; |
75 | 74 |
76 client->EncodeToken(kZeroToken); | 75 client->EncodeToken(kSixZeros, audible); |
77 run_loop_->Run(); | 76 run_loop_->Run(); |
78 | 77 |
79 EXPECT_GT(saved_samples_->frames(), 0); | 78 EXPECT_GT(saved_samples_->frames(), 0); |
80 } | 79 } |
81 | 80 |
82 void DecodeSamplesAndVerifyToken() { | 81 void DecodeSamplesAndVerifyToken() { |
83 copresence::WhispernetClient* client = GetWhispernetClient(context_); | 82 copresence::WhispernetClient* client = GetWhispernetClient(context_); |
84 ASSERT_TRUE(client); | 83 ASSERT_TRUE(client); |
85 | 84 |
86 const std::string kZeroToken = "MDAwMDAw"; | |
87 | |
88 run_loop_.reset(new base::RunLoop()); | 85 run_loop_.reset(new base::RunLoop()); |
89 client->RegisterTokensCallback(base::Bind( | 86 client->RegisterTokensCallback(base::Bind( |
90 &ChromeWhispernetClientTest::TokensCallback, base::Unretained(this))); | 87 &ChromeWhispernetClientTest::TokensCallback, base::Unretained(this))); |
91 expected_token_ = kZeroToken; | 88 expected_token_ = kSixZeros; |
92 | 89 |
93 ASSERT_GT(saved_samples_->frames(), 0); | 90 ASSERT_GT(saved_samples_->frames(), 0); |
94 | 91 |
95 // Convert our single channel samples to two channel. Decode samples | 92 // Convert our single channel samples to two channel. Decode samples |
96 // expects 2 channel data. | 93 // expects 2 channel data. |
97 scoped_refptr<media::AudioBusRefCounted> samples_bus = | 94 scoped_refptr<media::AudioBusRefCounted> samples_bus = |
98 media::AudioBusRefCounted::Create(2, saved_samples_->frames()); | 95 media::AudioBusRefCounted::Create(2, saved_samples_->frames()); |
99 memcpy(samples_bus->channel(0), | 96 memcpy(samples_bus->channel(0), |
100 saved_samples_->channel(0), | 97 saved_samples_->channel(0), |
101 sizeof(float) * saved_samples_->frames()); | 98 sizeof(float) * saved_samples_->frames()); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 | 157 |
161 DISALLOW_COPY_AND_ASSIGN(ChromeWhispernetClientTest); | 158 DISALLOW_COPY_AND_ASSIGN(ChromeWhispernetClientTest); |
162 }; | 159 }; |
163 | 160 |
164 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, Initialize) { | 161 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, Initialize) { |
165 InitializeWhispernet(); | 162 InitializeWhispernet(); |
166 } | 163 } |
167 | 164 |
168 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, EncodeToken) { | 165 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, EncodeToken) { |
169 InitializeWhispernet(); | 166 InitializeWhispernet(); |
170 EncodeTokenAndSaveSamples(); | 167 EncodeTokenAndSaveSamples(false); |
171 } | 168 } |
172 | 169 |
173 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, DecodeSamples) { | 170 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, DecodeSamples) { |
174 InitializeWhispernet(); | 171 InitializeWhispernet(); |
175 EncodeTokenAndSaveSamples(); | 172 EncodeTokenAndSaveSamples(false); |
176 DecodeSamplesAndVerifyToken(); | 173 DecodeSamplesAndVerifyToken(); |
177 } | 174 } |
178 | 175 |
179 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, DetectBroadcast) { | 176 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, DetectBroadcast) { |
180 InitializeWhispernet(); | 177 InitializeWhispernet(); |
181 EncodeTokenAndSaveSamples(); | 178 EncodeTokenAndSaveSamples(false); |
182 DecodeSamplesAndVerifyToken(); | 179 DecodeSamplesAndVerifyToken(); |
183 DetectBroadcast(); | 180 DetectBroadcast(); |
184 } | 181 } |
| 182 |
| 183 IN_PROC_BROWSER_TEST_F(ChromeWhispernetClientTest, Audible) { |
| 184 InitializeWhispernet(); |
| 185 EncodeTokenAndSaveSamples(true); |
| 186 DecodeSamplesAndVerifyToken(); |
| 187 } |
OLD | NEW |