OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 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/common/net/fake_network_change_notifier_thread.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/message_loop.h" | |
9 #include "chrome/common/net/thread_blocker.h" | |
10 #include "net/base/mock_network_change_notifier.h" | |
11 | |
12 // We manage the lifetime of | |
13 // chrome_common_net::FakeNetworkChangeNotifierThread ourselves. | |
14 DISABLE_RUNNABLE_METHOD_REFCOUNT( | |
15 chrome_common_net::FakeNetworkChangeNotifierThread); | |
16 | |
17 namespace chrome_common_net { | |
18 | |
19 FakeNetworkChangeNotifierThread::FakeNetworkChangeNotifierThread() | |
20 : thread_("FakeNetworkChangeNotifierThread") {} | |
21 | |
22 FakeNetworkChangeNotifierThread::~FakeNetworkChangeNotifierThread() { | |
23 CHECK(!network_change_notifier_.get()); | |
24 CHECK(!thread_blocker_.get()); | |
25 CHECK(!thread_.IsRunning()); | |
26 } | |
27 | |
28 void FakeNetworkChangeNotifierThread::Start() { | |
29 network_change_notifier_.reset(new net::MockNetworkChangeNotifier()); | |
30 CHECK(thread_.Start()); | |
31 thread_blocker_.reset(new ThreadBlocker(&thread_)); | |
32 thread_blocker_->Block(); | |
33 } | |
34 | |
35 void FakeNetworkChangeNotifierThread::Pump() { | |
36 thread_blocker_->Unblock(); | |
37 thread_blocker_->Block(); | |
38 } | |
39 | |
40 void FakeNetworkChangeNotifierThread::Stop() { | |
41 thread_blocker_->Unblock(); | |
42 thread_blocker_.reset(); | |
43 thread_.Stop(); | |
44 network_change_notifier_.reset(); | |
45 } | |
46 | |
47 void FakeNetworkChangeNotifierThread::NotifyIPAddressChange() { | |
48 CHECK(thread_.IsRunning()); | |
49 GetMessageLoop()->PostTask( | |
50 FROM_HERE, | |
51 NewRunnableMethod( | |
52 this, | |
53 &FakeNetworkChangeNotifierThread:: | |
54 NotifyIPAddressChangeOnSourceThread)); | |
55 } | |
56 | |
57 void FakeNetworkChangeNotifierThread::NotifyIPAddressChangeOnSourceThread() { | |
58 CHECK_EQ(MessageLoop::current(), GetMessageLoop()); | |
59 CHECK(network_change_notifier_.get()); | |
60 network_change_notifier_->NotifyIPAddressChange(); | |
61 } | |
62 | |
63 MessageLoop* FakeNetworkChangeNotifierThread::GetMessageLoop() const { | |
64 CHECK(thread_.IsRunning()); | |
65 MessageLoop* message_loop = thread_.message_loop(); | |
66 CHECK(message_loop); | |
67 return message_loop; | |
68 } | |
69 | |
70 net::NetworkChangeNotifier* | |
71 FakeNetworkChangeNotifierThread::GetNetworkChangeNotifier() const { | |
72 CHECK_EQ(MessageLoop::current(), GetMessageLoop()); | |
73 CHECK(network_change_notifier_.get()); | |
74 return network_change_notifier_.get(); | |
75 } | |
76 | |
77 } // namespace chrome_common_net | |
OLD | NEW |