device_data_provider_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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 3// found in the LICENSE file. 4 5#include "base/threading/platform_thread.h" 6#include "content/browser/geolocation/device_data_provider.h" 7#include "content/browser/geolocation/wifi_data_provider_common.h" 8#include "testing/gtest/include/gtest/gtest.h" 9 10namespace content { 11 12class NullWifiDataListenerInterface 13 : public WifiDataProviderCommon::ListenerInterface { 14 public: 15 // ListenerInterface 16 virtual void DeviceDataUpdateAvailable( 17 DeviceDataProvider<WifiData>* provider) OVERRIDE {} 18}; 19 20TEST(GeolocationDeviceDataProviderWifiData, CreateDestroy) { 21 // See http://crbug.com/59913 . The main_message_loop is not required to be 22 // run for correct behaviour, but we run it in this test to help smoke out 23 // any race conditions between processing in the main loop and the setup / 24 // tear down of the DeviceDataProvider thread. 25 base::MessageLoopForUI main_message_loop; 26 NullWifiDataListenerInterface listener; 27 for (int i = 0; i < 10; i++) { 28 DeviceDataProvider<WifiData>::Register(&listener); 29 for (int j = 0; j < 10; j++) { 30 base::PlatformThread::Sleep(base::TimeDelta()); 31 main_message_loop.RunUntilIdle(); // See comment above 32 } 33 DeviceDataProvider<WifiData>::Unregister(&listener); 34 for (int j = 0; j < 10; j++) { 35 base::PlatformThread::Sleep(base::TimeDelta()); 36 main_message_loop.RunUntilIdle(); // See comment above 37 } 38 } 39} 40 41} // namespace content 42