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

Side by Side Diff: content/browser/geolocation/network_location_provider_unittest.cc

Issue 11179003: Reapply geolocation network protocol changes. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1271/src/
Patch Set: Created 8 years, 2 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/json/json_reader.h" 5 #include "base/json/json_reader.h"
6 #include "base/json/json_writer.h"
6 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
7 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
8 #include "base/string_util.h" 9 #include "base/string_util.h"
9 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
10 #include "base/utf_string_conversions.h" 11 #include "base/utf_string_conversions.h"
11 #include "base/values.h" 12 #include "base/values.h"
12 #include "content/browser/geolocation/fake_access_token_store.h" 13 #include "content/browser/geolocation/fake_access_token_store.h"
14 #include "content/browser/geolocation/location_arbitrator.h"
13 #include "content/browser/geolocation/network_location_provider.h" 15 #include "content/browser/geolocation/network_location_provider.h"
14 #include "net/url_request/test_url_fetcher_factory.h" 16 #include "net/url_request/test_url_fetcher_factory.h"
15 #include "net/url_request/url_request_status.h" 17 #include "net/url_request/url_request_status.h"
16 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
17 19
18 using content::FakeAccessTokenStore; 20 using content::FakeAccessTokenStore;
19 using content::Geoposition; 21 using content::Geoposition;
20 22
21 namespace { 23 namespace {
22 24
23 // Constants used in multiple tests. 25 // Constants used in multiple tests.
24 const char kTestServerUrl[] = "https://www.geolocation.test/service"; 26 const char kTestServerUrl[] = "https://www.geolocation.test/service";
27 const char kAccessTokenString[] = "accessToken";
25 28
26 #if defined(GOOGLE_CHROME_BUILD)
27 const char kTestJson[] = "?browser=googlechrome&sensor=true";
28 const char kTestBrowser[] = "browser=googlechrome";
29 #else
30 const char kTestJson[] = "?browser=chromium&sensor=true";
31 const char kTestBrowser[] = "browser=chromium";
32 #endif
33
34 const char kTestSensor[] = "sensor=true";
35 // Using #define so we can easily paste this into various other strings. 29 // Using #define so we can easily paste this into various other strings.
36 #define REFERENCE_ACCESS_TOKEN "2:k7j3G6LaL6u_lafw:4iXOeOpTh1glSXe" 30 #define REFERENCE_ACCESS_TOKEN "2:k7j3G6LaL6u_lafw:4iXOeOpTh1glSXe"
37 31
38 // Stops the specified (nested) message loop when the listener is called back. 32 // Stops the specified (nested) message loop when the listener is called back.
39 class MessageLoopQuitListener 33 class MessageLoopQuitListener
40 : public LocationProviderBase::ListenerInterface { 34 : public LocationProviderBase::ListenerInterface {
41 public: 35 public:
42 MessageLoopQuitListener() 36 MessageLoopQuitListener()
43 : client_message_loop_(MessageLoop::current()), 37 : client_message_loop_(MessageLoop::current()),
44 updated_provider_(NULL), 38 updated_provider_(NULL),
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 }; 115 };
122 116
123 template<typename DataType> 117 template<typename DataType>
124 MockDeviceDataProviderImpl<DataType>* 118 MockDeviceDataProviderImpl<DataType>*
125 MockDeviceDataProviderImpl<DataType>::instance_ = NULL; 119 MockDeviceDataProviderImpl<DataType>::instance_ = NULL;
126 120
127 // Main test fixture 121 // Main test fixture
128 class GeolocationNetworkProviderTest : public testing::Test { 122 class GeolocationNetworkProviderTest : public testing::Test {
129 public: 123 public:
130 virtual void SetUp() { 124 virtual void SetUp() {
125 test_server_url_ = GURL(kTestServerUrl);
131 access_token_store_ = new FakeAccessTokenStore; 126 access_token_store_ = new FakeAccessTokenStore;
132 wifi_data_provider_ = 127 wifi_data_provider_ =
133 MockDeviceDataProviderImpl<WifiData>::CreateInstance(); 128 MockDeviceDataProviderImpl<WifiData>::CreateInstance();
134 } 129 }
135 130
136 virtual void TearDown() { 131 virtual void TearDown() {
137 WifiDataProvider::ResetFactory(); 132 WifiDataProvider::ResetFactory();
138 } 133 }
139 134
140 LocationProviderBase* CreateProvider(bool set_permission_granted) { 135 LocationProviderBase* CreateProvider(bool set_permission_granted) {
141 LocationProviderBase* provider = NewNetworkLocationProvider( 136 LocationProviderBase* provider = NewNetworkLocationProvider(
142 access_token_store_.get(), 137 access_token_store_.get(),
143 NULL, // No URLContextGetter needed, as using test urlfecther factory. 138 NULL, // No URLContextGetter needed, as using test urlfecther factory.
144 test_server_url_, 139 test_server_url_,
145 access_token_store_->access_token_set_[test_server_url_]); 140 access_token_store_->access_token_set_[test_server_url_]);
146 if (set_permission_granted) 141 if (set_permission_granted)
147 provider->OnPermissionGranted(); 142 provider->OnPermissionGranted();
148 return provider; 143 return provider;
149 } 144 }
150 145
151 protected: 146 protected:
152 GeolocationNetworkProviderTest() : test_server_url_(kTestServerUrl) { 147 GeolocationNetworkProviderTest() {
153 // TODO(joth): Really these should be in SetUp, not here, but they take no 148 // TODO(joth): Really these should be in SetUp, not here, but they take no
154 // effect on Mac OS Release builds if done there. I kid not. Figure out why. 149 // effect on Mac OS Release builds if done there. I kid not. Figure out why.
155 WifiDataProvider::SetFactory( 150 WifiDataProvider::SetFactory(
156 MockDeviceDataProviderImpl<WifiData>::GetInstance); 151 MockDeviceDataProviderImpl<WifiData>::GetInstance);
157 } 152 }
158 153
159 // Returns the current url fetcher (if any) and advances the id ready for the 154 // Returns the current url fetcher (if any) and advances the id ready for the
160 // next test step. 155 // next test step.
161 net::TestURLFetcher* get_url_fetcher_and_advance_id() { 156 net::TestURLFetcher* get_url_fetcher_and_advance_id() {
162 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID( 157 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(
(...skipping 15 matching lines...) Expand all
178 ASCIIToUTF16(base::StringPrintf("%02d-34-56-78-54-32", i)); 173 ASCIIToUTF16(base::StringPrintf("%02d-34-56-78-54-32", i));
179 ap.radio_signal_strength = ap_count - i; 174 ap.radio_signal_strength = ap_count - i;
180 ap.channel = IndexToChannel(i); 175 ap.channel = IndexToChannel(i);
181 ap.signal_to_noise = i + 42; 176 ap.signal_to_noise = i + 42;
182 ap.ssid = ASCIIToUTF16("Some nice+network|name\\"); 177 ap.ssid = ASCIIToUTF16("Some nice+network|name\\");
183 data.access_point_data.insert(ap); 178 data.access_point_data.insert(ap);
184 } 179 }
185 return data; 180 return data;
186 } 181 }
187 182
188 static std::vector<std::string> CreateReferenceWifiScanDataJson( 183 static void CreateReferenceWifiScanDataJson(
189 int ap_count, int start_index) { 184 int ap_count, int start_index, base::ListValue* wifi_access_point_list) {
190 std::vector<std::string> wifi_data; 185 std::vector<std::string> wifi_data;
191 for (int i = 0; i < ap_count; ++i) { 186 for (int i = 0; i < ap_count; ++i) {
192 std::string wifi_part; 187 base::DictionaryValue* ap = new base::DictionaryValue();
193 wifi_part += "wifi="; 188 ap->SetString("macAddress", base::StringPrintf("%02d-34-56-78-54-32", i));
194 wifi_part += "mac%3A" + base::StringPrintf("%02d-34-56-78-54-32", i); 189 ap->SetInteger("signalStrength", start_index + ap_count - i);
195 wifi_part += "%7Css%3A" + base::IntToString(start_index + ap_count - i); 190 ap->SetInteger("age", 0);
196 wifi_part += "%7Cage%3A0"; 191 ap->SetInteger("channel", IndexToChannel(i));
197 wifi_part += "%7Cchan%3A" + base::IntToString(IndexToChannel(i)); 192 ap->SetInteger("signalToNoiseRatio", i + 42);
198 wifi_part += "%7Csnr%3A" + base::IntToString(i + 42); 193 wifi_access_point_list->Append(ap);
199 wifi_part += "%7Cssid%3ASome%20nice%2Bnetwork%5C%7Cname%5C%5C";
200 wifi_data.push_back(wifi_part);
201 } 194 }
202 return wifi_data;
203 } 195 }
204 196
205 static Geoposition CreateReferencePosition(int id) { 197 static Geoposition CreateReferencePosition(int id) {
206 Geoposition pos; 198 Geoposition pos;
207 pos.latitude = id; 199 pos.latitude = id;
208 pos.longitude = -(id + 1); 200 pos.longitude = -(id + 1);
209 pos.altitude = 2 * id; 201 pos.altitude = 2 * id;
210 pos.timestamp = base::Time::Now(); 202 pos.timestamp = base::Time::Now();
211 return pos; 203 return pos;
212 } 204 }
213 205
214 static void CheckRequestIsValid(const std::string& request_url, 206 static std::string PrettyJson(const base::Value& value) {
215 int expected_routers, 207 std::string pretty;
216 int expected_wifi_aps, 208 base::JSONWriter::WriteWithOptions(
217 int wifi_start_index, 209 &value, base::JSONWriter::OPTIONS_PRETTY_PRINT, &pretty);
218 const std::string& expected_access_token) { 210 return pretty;
219 std::vector<std::string> url_tokens;
220 EXPECT_EQ(size_t(2), Tokenize(request_url, "?", &url_tokens));
221 EXPECT_EQ(kTestServerUrl, url_tokens[0]);
222
223 std::vector<std::string> json_tokens;
224 size_t expected_info_tokens = expected_access_token.empty() ? 2 : 3;
225 EXPECT_EQ(expected_info_tokens + expected_wifi_aps,
226 Tokenize(url_tokens[1], "&", &json_tokens));
227 EXPECT_EQ(kTestBrowser, json_tokens[0]);
228 EXPECT_EQ(kTestSensor, json_tokens[1]);
229 if (!expected_access_token.empty())
230 EXPECT_EQ("token=" + expected_access_token, json_tokens[2]);
231
232 std::vector<std::string> expected_json_tokens =
233 CreateReferenceWifiScanDataJson(expected_wifi_aps, wifi_start_index);
234 EXPECT_EQ(size_t(expected_wifi_aps), expected_json_tokens.size());
235 for (size_t i = 0; i < expected_json_tokens.size(); ++i ) {
236 std::vector<std::string> actual_wifi_tokens;
237 std::vector<std::string> expected_wifi_tokens;
238 ReplaceSubstringsAfterOffset(&json_tokens[i + expected_info_tokens],
239 0, "%7C", "|");
240 ReplaceSubstringsAfterOffset(&expected_json_tokens[i],
241 0, "%7C", "|");
242 Tokenize(json_tokens[i + expected_info_tokens],
243 "|", &actual_wifi_tokens);
244 Tokenize(expected_json_tokens[i], "|", &expected_wifi_tokens);
245
246 // MAC address.
247 EXPECT_EQ(expected_wifi_tokens[0], actual_wifi_tokens[0]);
248 // Signal Strength.
249 EXPECT_EQ(expected_wifi_tokens[1], actual_wifi_tokens[1]);
250 int age;
251 base::StringToInt(actual_wifi_tokens[2].substr(
252 4, actual_wifi_tokens[2].size() - 4),
253 &age);
254 // Age.
255 EXPECT_LT(age, 20 * 1000); // Should not take longer than 20 seconds.
256 // Channel.
257 EXPECT_EQ(expected_wifi_tokens[3], actual_wifi_tokens[3]);
258 // Signal to noise ratio.
259 EXPECT_EQ(expected_wifi_tokens[4], actual_wifi_tokens[4]);
260 // SSID.
261 EXPECT_EQ(expected_wifi_tokens[5], actual_wifi_tokens[5]);
262 EXPECT_EQ(expected_wifi_tokens[6], actual_wifi_tokens[6]);
263 }
264 EXPECT_TRUE(GURL(request_url).is_valid());
265 } 211 }
266 212
267 const GURL test_server_url_; 213 static testing::AssertionResult JsonGetList(
214 const std::string& field,
215 const base::DictionaryValue& dict,
216 const base::ListValue** output_list) {
217 if (!dict.GetList(field, output_list))
218 return testing::AssertionFailure() << "Dictionary " << PrettyJson(dict)
219 << " is missing list field " << field;
220 return testing::AssertionSuccess();
221 }
222
223 static testing::AssertionResult JsonFieldEquals(
224 const std::string& field,
225 const base::DictionaryValue& expected,
226 const base::DictionaryValue& actual) {
227 const base::Value* expected_value;
228 const base::Value* actual_value;
229 if (!expected.Get(field, &expected_value))
230 return testing::AssertionFailure()
231 << "Expected dictionary " << PrettyJson(expected)
232 << " is missing field " << field;
233 if (!expected.Get(field, &actual_value))
234 return testing::AssertionFailure()
235 << "Actual dictionary " << PrettyJson(actual)
236 << " is missing field " << field;
237 if (!expected_value->Equals(actual_value))
238 return testing::AssertionFailure()
239 << "Field " << field << " mismatch: " << PrettyJson(*expected_value)
240 << " != " << PrettyJson(*actual_value);
241 return testing::AssertionSuccess();
242 }
243
244 static GURL UrlWithoutQuery(const GURL& url) {
245 url_canon::Replacements<char> replacements;
246 replacements.ClearQuery();
247 return url.ReplaceComponents(replacements);
248 }
249
250 testing::AssertionResult IsTestServerUrl(const GURL& request_url) {
251 const GURL a(UrlWithoutQuery(test_server_url_));
252 const GURL b(UrlWithoutQuery(request_url));
253 if (a == b)
254 return testing::AssertionSuccess();
255 return testing::AssertionFailure() << a << " != " << b;
256 }
257
258 void CheckRequestIsValid(const net::TestURLFetcher& request,
259 int expected_routers,
260 int expected_wifi_aps,
261 int wifi_start_index,
262 const std::string& expected_access_token) {
263 const GURL& request_url = request.GetOriginalURL();
264
265 EXPECT_TRUE(IsTestServerUrl(request_url));
266
267 // Check to see that the api key is being appended for the default
268 // network provider url.
269 bool is_default_url = UrlWithoutQuery(request_url) ==
270 UrlWithoutQuery(GeolocationArbitrator::DefaultNetworkProviderURL());
271 EXPECT_EQ(is_default_url, !request_url.query().empty());
272
273 const std::string& upload_data = request.upload_data();
274 ASSERT_FALSE(upload_data.empty());
275 std::string json_parse_error_msg;
276 scoped_ptr<base::Value> parsed_json(
277 base::JSONReader::ReadAndReturnError(
278 upload_data,
279 base::JSON_PARSE_RFC,
280 NULL,
281 &json_parse_error_msg));
282 EXPECT_TRUE(json_parse_error_msg.empty());
283 ASSERT_TRUE(parsed_json.get() != NULL);
284
285 const base::DictionaryValue* request_json;
286 ASSERT_TRUE(parsed_json->GetAsDictionary(&request_json));
287
288 if (!is_default_url) {
289 if (expected_access_token.empty())
290 ASSERT_FALSE(request_json->HasKey(kAccessTokenString));
291 else {
292 std::string access_token;
293 EXPECT_TRUE(request_json->GetString(kAccessTokenString, &access_token));
294 EXPECT_EQ(expected_access_token, access_token);
295 }
296 }
297
298 if (expected_wifi_aps) {
299 base::ListValue expected_wifi_aps_json;
300 CreateReferenceWifiScanDataJson(
301 expected_wifi_aps,
302 wifi_start_index,
303 &expected_wifi_aps_json);
304 EXPECT_EQ(size_t(expected_wifi_aps), expected_wifi_aps_json.GetSize());
305
306 const base::ListValue* wifi_aps_json;
307 ASSERT_TRUE(JsonGetList("wifiAccessPoints", *request_json,
308 &wifi_aps_json));
309 for (size_t i = 0; i < expected_wifi_aps_json.GetSize(); ++i ) {
310 const base::DictionaryValue* expected_json;
311 ASSERT_TRUE(expected_wifi_aps_json.GetDictionary(i, &expected_json));
312 const base::DictionaryValue* actual_json;
313 ASSERT_TRUE(wifi_aps_json->GetDictionary(i, &actual_json));
314 ASSERT_TRUE(JsonFieldEquals("macAddress", *expected_json,
315 *actual_json));
316 ASSERT_TRUE(JsonFieldEquals("signalStrength", *expected_json,
317 *actual_json));
318 ASSERT_TRUE(JsonFieldEquals("channel", *expected_json, *actual_json));
319 ASSERT_TRUE(JsonFieldEquals("signalToNoiseRatio", *expected_json,
320 *actual_json));
321 }
322 } else {
323 ASSERT_FALSE(request_json->HasKey("wifiAccessPoints"));
324 }
325 EXPECT_TRUE(request_url.is_valid());
326 }
327
328 GURL test_server_url_;
268 MessageLoop main_message_loop_; 329 MessageLoop main_message_loop_;
269 scoped_refptr<FakeAccessTokenStore> access_token_store_; 330 scoped_refptr<FakeAccessTokenStore> access_token_store_;
270 net::TestURLFetcherFactory url_fetcher_factory_; 331 net::TestURLFetcherFactory url_fetcher_factory_;
271 scoped_refptr<MockDeviceDataProviderImpl<WifiData> > wifi_data_provider_; 332 scoped_refptr<MockDeviceDataProviderImpl<WifiData> > wifi_data_provider_;
272 }; 333 };
273 334
274
275 TEST_F(GeolocationNetworkProviderTest, CreateDestroy) { 335 TEST_F(GeolocationNetworkProviderTest, CreateDestroy) {
276 // Test fixture members were SetUp correctly. 336 // Test fixture members were SetUp correctly.
277 EXPECT_EQ(&main_message_loop_, MessageLoop::current()); 337 EXPECT_EQ(&main_message_loop_, MessageLoop::current());
278 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); 338 scoped_ptr<LocationProviderBase> provider(CreateProvider(true));
279 EXPECT_TRUE(NULL != provider.get()); 339 EXPECT_TRUE(NULL != provider.get());
280 provider.reset(); 340 provider.reset();
281 SUCCEED(); 341 SUCCEED();
282 } 342 }
283 343
284 TEST_F(GeolocationNetworkProviderTest, StartProvider) { 344 TEST_F(GeolocationNetworkProviderTest, StartProvider) {
285 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); 345 scoped_ptr<LocationProviderBase> provider(CreateProvider(true));
286 EXPECT_TRUE(provider->StartProvider(false)); 346 EXPECT_TRUE(provider->StartProvider(false));
287 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 347 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
288 ASSERT_TRUE(fetcher != NULL); 348 ASSERT_TRUE(fetcher != NULL);
349 CheckRequestIsValid(*fetcher, 0, 0, 0, "");
350 }
289 351
290 EXPECT_EQ(test_server_url_.spec() + kTestJson, 352 TEST_F(GeolocationNetworkProviderTest, StartProviderDefaultUrl) {
291 fetcher->GetOriginalURL().spec()); 353 test_server_url_ = GeolocationArbitrator::DefaultNetworkProviderURL();
354 scoped_ptr<LocationProviderBase> provider(CreateProvider(true));
355 EXPECT_TRUE(provider->StartProvider(false));
356 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
357 ASSERT_TRUE(fetcher != NULL);
358 CheckRequestIsValid(*fetcher, 0, 0, 0, "");
359 }
292 360
293 CheckRequestIsValid(fetcher->GetOriginalURL().spec(), 0, 0, 0, "");
294 }
295 361
296 TEST_F(GeolocationNetworkProviderTest, StartProviderLongRequest) { 362 TEST_F(GeolocationNetworkProviderTest, StartProviderLongRequest) {
297 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); 363 scoped_ptr<LocationProviderBase> provider(CreateProvider(true));
298 EXPECT_TRUE(provider->StartProvider(false)); 364 EXPECT_TRUE(provider->StartProvider(false));
299 const int kFirstScanAps = 20; 365 const int kFirstScanAps = 20;
300 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps)); 366 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps));
301 main_message_loop_.RunAllPending(); 367 main_message_loop_.RunAllPending();
302 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 368 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
303 ASSERT_TRUE(fetcher != NULL); 369 ASSERT_TRUE(fetcher != NULL);
304 // The request url should have been shortened to less than 2048 characters 370 // The request url should have been shortened to less than 2048 characters
305 // in length by not including access points with the lowest signal strength 371 // in length by not including access points with the lowest signal strength
306 // in the request. 372 // in the request.
307 EXPECT_LT(fetcher->GetOriginalURL().spec().size(), size_t(2048)); 373 EXPECT_LT(fetcher->GetOriginalURL().spec().size(), size_t(2048));
308 CheckRequestIsValid(fetcher->GetOriginalURL().spec(), 0, 16, 4, ""); 374 CheckRequestIsValid(*fetcher, 0, 16, 4, "");
309 } 375 }
310 376
311 TEST_F(GeolocationNetworkProviderTest, MultiRegistrations) { 377 TEST_F(GeolocationNetworkProviderTest, MultiRegistrations) {
312 // TODO(joth): Strictly belongs in a base-class unit test file. 378 // TODO(joth): Strictly belongs in a base-class unit test file.
313 MessageLoopQuitListener listener; 379 MessageLoopQuitListener listener;
314 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); 380 scoped_ptr<LocationProviderBase> provider(CreateProvider(true));
315 EXPECT_FALSE(provider->has_listeners()); 381 EXPECT_FALSE(provider->has_listeners());
316 provider->RegisterListener(&listener); 382 provider->RegisterListener(&listener);
317 EXPECT_TRUE(provider->has_listeners()); 383 EXPECT_TRUE(provider->has_listeners());
318 provider->RegisterListener(&listener); 384 provider->RegisterListener(&listener);
319 EXPECT_TRUE(provider->has_listeners()); 385 EXPECT_TRUE(provider->has_listeners());
320 386
321 provider->UnregisterListener(&listener); 387 provider->UnregisterListener(&listener);
322 EXPECT_TRUE(provider->has_listeners()); 388 EXPECT_TRUE(provider->has_listeners());
323 provider->UnregisterListener(&listener); 389 provider->UnregisterListener(&listener);
324 EXPECT_FALSE(provider->has_listeners()); 390 EXPECT_FALSE(provider->has_listeners());
325 } 391 }
326 392
327 TEST_F(GeolocationNetworkProviderTest, MultipleWifiScansComplete) { 393 TEST_F(GeolocationNetworkProviderTest, MultipleWifiScansComplete) {
328 scoped_ptr<LocationProviderBase> provider(CreateProvider(true)); 394 scoped_ptr<LocationProviderBase> provider(CreateProvider(true));
329 EXPECT_TRUE(provider->StartProvider(false)); 395 EXPECT_TRUE(provider->StartProvider(false));
330 396
331 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 397 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
332 ASSERT_TRUE(fetcher != NULL); 398 ASSERT_TRUE(fetcher != NULL);
333 EXPECT_EQ(test_server_url_.spec() + kTestJson, 399 EXPECT_TRUE(IsTestServerUrl(fetcher->GetOriginalURL()));
334 fetcher->GetOriginalURL().spec());
335 400
336 // Complete the network request with bad position fix. 401 // Complete the network request with bad position fix.
337 const char* kNoFixNetworkResponse = 402 const char* kNoFixNetworkResponse =
338 "{" 403 "{"
339 " \"status\": \"ZERO_RESULTS\"" 404 " \"status\": \"ZERO_RESULTS\""
340 "}"; 405 "}";
341 fetcher->set_url(test_server_url_); 406 fetcher->set_url(test_server_url_);
342 fetcher->set_status(net::URLRequestStatus()); 407 fetcher->set_status(net::URLRequestStatus());
343 fetcher->set_response_code(200); // OK 408 fetcher->set_response_code(200); // OK
344 fetcher->SetResponseString(kNoFixNetworkResponse); 409 fetcher->SetResponseString(kNoFixNetworkResponse);
345 fetcher->delegate()->OnURLFetchComplete(fetcher); 410 fetcher->delegate()->OnURLFetchComplete(fetcher);
346 411
347 Geoposition position; 412 Geoposition position;
348 provider->GetPosition(&position); 413 provider->GetPosition(&position);
349 EXPECT_FALSE(position.Validate()); 414 EXPECT_FALSE(position.Validate());
350 415
351 // Now wifi data arrives -- SetData will notify listeners. 416 // Now wifi data arrives -- SetData will notify listeners.
352 const int kFirstScanAps = 6; 417 const int kFirstScanAps = 6;
353 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps)); 418 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kFirstScanAps));
354 main_message_loop_.RunAllPending(); 419 main_message_loop_.RunAllPending();
355 fetcher = get_url_fetcher_and_advance_id(); 420 fetcher = get_url_fetcher_and_advance_id();
356 ASSERT_TRUE(fetcher != NULL); 421 ASSERT_TRUE(fetcher != NULL);
357 // The request should have the wifi data. 422 // The request should have the wifi data.
358 CheckRequestIsValid( 423 CheckRequestIsValid(*fetcher, 0, kFirstScanAps, 0, "");
359 fetcher->GetOriginalURL().spec(), 0, kFirstScanAps, 0, "");
360 424
361 // Send a reply with good position fix. 425 // Send a reply with good position fix.
362 const char* kReferenceNetworkResponse = 426 const char* kReferenceNetworkResponse =
363 "{" 427 "{"
364 " \"status\": \"OK\"," 428 " \"accessToken\": \"" REFERENCE_ACCESS_TOKEN "\","
365 " \"access_token\": \"" REFERENCE_ACCESS_TOKEN "\","
366 " \"accuracy\": 1200.4," 429 " \"accuracy\": 1200.4,"
367 " \"location\": {" 430 " \"location\": {"
368 " \"lat\": 51.0," 431 " \"lat\": 51.0,"
369 " \"lng\": -0.1" 432 " \"lng\": -0.1"
370 " }" 433 " }"
371 "}"; 434 "}";
372 fetcher->set_url(test_server_url_); 435 fetcher->set_url(test_server_url_);
373 fetcher->set_status(net::URLRequestStatus()); 436 fetcher->set_status(net::URLRequestStatus());
374 fetcher->set_response_code(200); // OK 437 fetcher->set_response_code(200); // OK
375 fetcher->SetResponseString(kReferenceNetworkResponse); 438 fetcher->SetResponseString(kReferenceNetworkResponse);
(...skipping 22 matching lines...) Expand all
398 EXPECT_EQ(51.0, position.latitude); 461 EXPECT_EQ(51.0, position.latitude);
399 EXPECT_EQ(-0.1, position.longitude); 462 EXPECT_EQ(-0.1, position.longitude);
400 EXPECT_TRUE(position.Validate()); 463 EXPECT_TRUE(position.Validate());
401 464
402 // Now a third scan with more than twice the original amount -> new request. 465 // Now a third scan with more than twice the original amount -> new request.
403 const int kThirdScanAps = kFirstScanAps * 2 + 1; 466 const int kThirdScanAps = kFirstScanAps * 2 + 1;
404 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kThirdScanAps)); 467 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kThirdScanAps));
405 main_message_loop_.RunAllPending(); 468 main_message_loop_.RunAllPending();
406 fetcher = get_url_fetcher_and_advance_id(); 469 fetcher = get_url_fetcher_and_advance_id();
407 EXPECT_TRUE(fetcher); 470 EXPECT_TRUE(fetcher);
408 CheckRequestIsValid(fetcher->GetOriginalURL().spec(), 0, 471 CheckRequestIsValid(*fetcher, 0, kThirdScanAps, 0, REFERENCE_ACCESS_TOKEN);
409 kThirdScanAps, 0,
410 REFERENCE_ACCESS_TOKEN);
411 // ...reply with a network error. 472 // ...reply with a network error.
412 473
413 fetcher->set_url(test_server_url_); 474 fetcher->set_url(test_server_url_);
414 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, -1)); 475 fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, -1));
415 fetcher->set_response_code(200); // should be ignored 476 fetcher->set_response_code(200); // should be ignored
416 fetcher->SetResponseString(""); 477 fetcher->SetResponseString("");
417 fetcher->delegate()->OnURLFetchComplete(fetcher); 478 fetcher->delegate()->OnURLFetchComplete(fetcher);
418 479
419 // Error means we now no longer have a fix. 480 // Error means we now no longer have a fix.
420 provider->GetPosition(&position); 481 provider->GetPosition(&position);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 TEST_F(GeolocationNetworkProviderTest, NetworkRequestDeferredForPermission) { 526 TEST_F(GeolocationNetworkProviderTest, NetworkRequestDeferredForPermission) {
466 scoped_ptr<LocationProviderBase> provider(CreateProvider(false)); 527 scoped_ptr<LocationProviderBase> provider(CreateProvider(false));
467 EXPECT_TRUE(provider->StartProvider(false)); 528 EXPECT_TRUE(provider->StartProvider(false));
468 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 529 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
469 EXPECT_FALSE(fetcher); 530 EXPECT_FALSE(fetcher);
470 provider->OnPermissionGranted(); 531 provider->OnPermissionGranted();
471 532
472 fetcher = get_url_fetcher_and_advance_id(); 533 fetcher = get_url_fetcher_and_advance_id();
473 ASSERT_TRUE(fetcher != NULL); 534 ASSERT_TRUE(fetcher != NULL);
474 535
475 EXPECT_EQ(test_server_url_.spec() + kTestJson, 536 EXPECT_TRUE(IsTestServerUrl(fetcher->GetOriginalURL()));
476 fetcher->GetOriginalURL().spec());
477 } 537 }
478 538
479 TEST_F(GeolocationNetworkProviderTest, 539 TEST_F(GeolocationNetworkProviderTest,
480 NetworkRequestWithWifiDataDeferredForPermission) { 540 NetworkRequestWithWifiDataDeferredForPermission) {
481 access_token_store_->access_token_set_[test_server_url_] = 541 access_token_store_->access_token_set_[test_server_url_] =
482 UTF8ToUTF16(REFERENCE_ACCESS_TOKEN); 542 UTF8ToUTF16(REFERENCE_ACCESS_TOKEN);
483 scoped_ptr<LocationProviderBase> provider(CreateProvider(false)); 543 scoped_ptr<LocationProviderBase> provider(CreateProvider(false));
484 EXPECT_TRUE(provider->StartProvider(false)); 544 EXPECT_TRUE(provider->StartProvider(false));
485 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id(); 545 net::TestURLFetcher* fetcher = get_url_fetcher_and_advance_id();
486 EXPECT_FALSE(fetcher); 546 EXPECT_FALSE(fetcher);
487 547
488 static const int kScanCount = 4; 548 static const int kScanCount = 4;
489 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kScanCount)); 549 wifi_data_provider_->SetData(CreateReferenceWifiScanData(kScanCount));
490 main_message_loop_.RunAllPending(); 550 main_message_loop_.RunAllPending();
491 551
492 fetcher = get_url_fetcher_and_advance_id(); 552 fetcher = get_url_fetcher_and_advance_id();
493 EXPECT_FALSE(fetcher); 553 EXPECT_FALSE(fetcher);
494 554
495 provider->OnPermissionGranted(); 555 provider->OnPermissionGranted();
496 556
497 fetcher = get_url_fetcher_and_advance_id(); 557 fetcher = get_url_fetcher_and_advance_id();
498 ASSERT_TRUE(fetcher != NULL); 558 ASSERT_TRUE(fetcher != NULL);
499 559
500 CheckRequestIsValid(fetcher->GetOriginalURL().spec(), 0, 560 CheckRequestIsValid(*fetcher, 0, kScanCount, 0, REFERENCE_ACCESS_TOKEN);
501 kScanCount, 0, REFERENCE_ACCESS_TOKEN);
502 } 561 }
503 562
504 TEST_F(GeolocationNetworkProviderTest, NetworkPositionCache) { 563 TEST_F(GeolocationNetworkProviderTest, NetworkPositionCache) {
505 NetworkLocationProvider::PositionCache cache; 564 NetworkLocationProvider::PositionCache cache;
506 565
507 const int kCacheSize = NetworkLocationProvider::PositionCache::kMaximumSize; 566 const int kCacheSize = NetworkLocationProvider::PositionCache::kMaximumSize;
508 for (int i = 1; i < kCacheSize * 2 + 1; ++i) { 567 for (int i = 1; i < kCacheSize * 2 + 1; ++i) {
509 Geoposition pos = CreateReferencePosition(i); 568 Geoposition pos = CreateReferencePosition(i);
510 bool ret = cache.CachePosition(CreateReferenceWifiScanData(i), pos); 569 bool ret = cache.CachePosition(CreateReferenceWifiScanData(i), pos);
511 EXPECT_TRUE(ret) << i; 570 EXPECT_TRUE(ret) << i;
512 const Geoposition* item = 571 const Geoposition* item =
513 cache.FindPosition(CreateReferenceWifiScanData(i)); 572 cache.FindPosition(CreateReferenceWifiScanData(i));
514 ASSERT_TRUE(item) << i; 573 ASSERT_TRUE(item) << i;
515 EXPECT_EQ(pos.latitude, item->latitude) << i; 574 EXPECT_EQ(pos.latitude, item->latitude) << i;
516 EXPECT_EQ(pos.longitude, item->longitude) << i; 575 EXPECT_EQ(pos.longitude, item->longitude) << i;
517 if (i <= kCacheSize) { 576 if (i <= kCacheSize) {
518 // Nothing should have spilled yet; check oldest item is still there. 577 // Nothing should have spilled yet; check oldest item is still there.
519 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(1))); 578 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(1)));
520 } else { 579 } else {
521 const int evicted = i - kCacheSize; 580 const int evicted = i - kCacheSize;
522 EXPECT_FALSE(cache.FindPosition(CreateReferenceWifiScanData(evicted))); 581 EXPECT_FALSE(cache.FindPosition(CreateReferenceWifiScanData(evicted)));
523 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(evicted + 1))); 582 EXPECT_TRUE(cache.FindPosition(CreateReferenceWifiScanData(evicted + 1)));
524 } 583 }
525 } 584 }
526 } 585 }
527 586
528 } // namespace 587 } // namespace
OLDNEW
« no previous file with comments | « content/browser/geolocation/location_arbitrator.cc ('k') | content/browser/geolocation/network_location_request.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698