Index: chrome/common/net/fake_network_change_notifier_thread_unittest.cc |
=================================================================== |
--- chrome/common/net/fake_network_change_notifier_thread_unittest.cc (revision 50775) |
+++ chrome/common/net/fake_network_change_notifier_thread_unittest.cc (working copy) |
@@ -1,164 +0,0 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/common/net/fake_network_change_notifier_thread.h" |
- |
-#include "base/basictypes.h" |
-#include "base/logging.h" |
-#include "base/message_loop.h" |
-#include "base/task.h" |
-#include "net/base/network_change_notifier.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace chrome_common_net { |
-class FlagToggler; |
-} // namespace chrome_common_net |
- |
-// We manage the lifetime of chrome_common_net::FlagToggler ourselves. |
-DISABLE_RUNNABLE_METHOD_REFCOUNT(chrome_common_net::FlagToggler); |
- |
-namespace chrome_common_net { |
- |
-// Utility class that toggles a flag every time it receives an IP |
-// address change notification. |
-class FlagToggler : public net::NetworkChangeNotifier::Observer { |
- public: |
- FlagToggler() : flag_(false) {} |
- |
- virtual ~FlagToggler() {} |
- |
- bool flag() const { return flag_; } |
- |
- void ToggleFlag() { |
- flag_ = !flag_; |
- } |
- |
- void Observe(NetworkChangeNotifierThread* thread) { |
- thread->GetNetworkChangeNotifier()->AddObserver(this); |
- } |
- |
- void Unobserve(NetworkChangeNotifierThread* thread) { |
- thread->GetNetworkChangeNotifier()->RemoveObserver(this); |
- } |
- |
- // net::NetworkChangeNotifier::Observer implementation. |
- virtual void OnIPAddressChanged() { |
- ToggleFlag(); |
- } |
- |
- private: |
- bool flag_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FlagToggler); |
-}; |
- |
-// Utility class that sanity-checks a |
-// FakeNetworkChangeNotifierThread's member variables right before its |
-// message loop gets destroyed (used in DestructionRace test). |
-class FakeNetworkChangeNotifierThreadDestructionObserver |
- : public MessageLoop::DestructionObserver { |
- public: |
- explicit FakeNetworkChangeNotifierThreadDestructionObserver( |
- const FakeNetworkChangeNotifierThread& thread) |
- : thread_(thread) {} |
- |
- virtual ~FakeNetworkChangeNotifierThreadDestructionObserver() {} |
- |
- virtual void WillDestroyCurrentMessageLoop() { |
- EXPECT_FALSE(thread_.thread_blocker_.get()); |
- // We can't use |
- // FakeNetworkChangeNotifierThread::GetNetworkChangeNotifier() as |
- // it would CHECK-fail on the current thread's message loop being |
- // NULL. |
- EXPECT_TRUE(thread_.network_change_notifier_.get()); |
- delete this; |
- } |
- |
- private: |
- const FakeNetworkChangeNotifierThread& thread_; |
- |
- DISALLOW_COPY_AND_ASSIGN( |
- FakeNetworkChangeNotifierThreadDestructionObserver); |
-}; |
- |
-// Utility function to add the |
-// FakeNetworkChangeNotifierThreadDestructionObserver from the |
-// FakeNetworkChangeNotifierThread's thread. |
-void AddFakeNetworkChangeNotifierThreadDestructionObserver( |
- const FakeNetworkChangeNotifierThread* thread) { |
- CHECK_EQ(MessageLoop::current(), thread->GetMessageLoop()); |
- thread->GetMessageLoop()->AddDestructionObserver( |
- new FakeNetworkChangeNotifierThreadDestructionObserver(*thread)); |
-} |
- |
-namespace { |
- |
-class FakeNetworkChangeNotifierThreadTest : public testing::Test { |
- protected: |
- FakeNetworkChangeNotifierThreadTest() {} |
- |
- virtual ~FakeNetworkChangeNotifierThreadTest() {} |
- |
- virtual void SetUp() { |
- thread_.Start(); |
- } |
- |
- virtual void TearDown() { |
- thread_.Stop(); |
- } |
- |
- FakeNetworkChangeNotifierThread thread_; |
- FlagToggler flag_toggler_; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(FakeNetworkChangeNotifierThreadTest); |
-}; |
- |
-TEST_F(FakeNetworkChangeNotifierThreadTest, Pump) { |
- thread_.GetMessageLoop()->PostTask( |
- FROM_HERE, NewRunnableMethod(&flag_toggler_, &FlagToggler::ToggleFlag)); |
- EXPECT_FALSE(flag_toggler_.flag()); |
- thread_.Pump(); |
- EXPECT_TRUE(flag_toggler_.flag()); |
-} |
- |
-TEST_F(FakeNetworkChangeNotifierThreadTest, Basic) { |
- thread_.GetMessageLoop()->PostTask( |
- FROM_HERE, |
- NewRunnableMethod(&flag_toggler_, &FlagToggler::Observe, &thread_)); |
- thread_.NotifyIPAddressChange(); |
- thread_.GetMessageLoop()->PostTask( |
- FROM_HERE, |
- NewRunnableMethod(&flag_toggler_, &FlagToggler::Unobserve, &thread_)); |
- EXPECT_FALSE(flag_toggler_.flag()); |
- thread_.Pump(); |
- EXPECT_TRUE(flag_toggler_.flag()); |
-} |
- |
-TEST_F(FakeNetworkChangeNotifierThreadTest, Multiple) { |
- FlagToggler observer; |
- thread_.GetMessageLoop()->PostTask( |
- FROM_HERE, |
- NewRunnableMethod(&flag_toggler_, &FlagToggler::Observe, &thread_)); |
- thread_.NotifyIPAddressChange(); |
- thread_.NotifyIPAddressChange(); |
- thread_.GetMessageLoop()->PostTask( |
- FROM_HERE, |
- NewRunnableMethod(&flag_toggler_, &FlagToggler::Unobserve, &thread_)); |
- EXPECT_FALSE(flag_toggler_.flag()); |
- thread_.Pump(); |
- EXPECT_FALSE(flag_toggler_.flag()); |
-} |
- |
-TEST_F(FakeNetworkChangeNotifierThreadTest, DestructionRace) { |
- thread_.GetMessageLoop()->PostTask( |
- FROM_HERE, |
- NewRunnableFunction( |
- &AddFakeNetworkChangeNotifierThreadDestructionObserver, |
- &thread_)); |
-} |
- |
-} // namespace |
- |
-} // namespace chrome_common_net |