Index: chrome/browser/sync/notifier/base/mac/network_status_detector_task_mac.h |
=================================================================== |
--- chrome/browser/sync/notifier/base/mac/network_status_detector_task_mac.h (revision 46353) |
+++ chrome/browser/sync/notifier/base/mac/network_status_detector_task_mac.h (working copy) |
@@ -1,154 +0,0 @@ |
-// Copyright (c) 2009 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. |
- |
-#ifndef CHROME_BROWSER_SYNC_NOTIFIER_BASE_MAC_NETWORK_STATUS_DETECTOR_TASK_MAC_H_ |
-#define CHROME_BROWSER_SYNC_NOTIFIER_BASE_MAC_NETWORK_STATUS_DETECTOR_TASK_MAC_H_ |
- |
-#include <CoreFoundation/CoreFoundation.h> |
- |
-#include "base/basictypes.h" |
-#include "base/condition_variable.h" |
-#include "base/lock.h" |
-#include "base/platform_thread.h" |
-#include "chrome/browser/sync/notifier/base/network_status_detector_task.h" |
-#include "talk/base/messagequeue.h" |
-#include "testing/gtest/include/gtest/gtest_prod.h" |
- |
-namespace talk_base { |
-class Message; |
-class Task; |
-class Thread; |
-} // namespace talk_base |
- |
-namespace notifier { |
- |
-// The Mac OS X network status detector works as follows: a worker |
-// (Chrome platform) thread is spawned which simply sets up a Cocoa |
-// run loop and attaches the network reachability monitor to it. |
-// Whenever the network reachability changes, (e.g., changed wireless |
-// networks, unplugged ethernet cable) a callback on the worker |
-// thread is triggered which then tries to connect to a Google talk |
-// host (if the network is indicated to be up) and sends a message |
-// with the result to the parent thread. |
- |
-class NetworkStatusDetectorTaskMac : public NetworkStatusDetectorTask, |
- public PlatformThread::Delegate, |
- public talk_base::MessageHandler { |
- public: |
- explicit NetworkStatusDetectorTaskMac(talk_base::Task* parent); |
- |
- virtual ~NetworkStatusDetectorTaskMac(); |
- |
- // talk_base::Task functions (via NetworkStatusDetectorTask). |
- virtual int ProcessStart(); |
- virtual void Stop(); |
- |
- // talk_base::MessageHandler functions. |
- // Currently OnMessage() simply calls SetNetworkAlive() with alive |
- // set to true iff message->message_id is non-zero. |
- virtual void OnMessage(talk_base::Message* message); |
- |
- // Only the following public functions are called from the worker |
- // thread. |
- |
- // PlatformThread::Delegate functions. |
- virtual void ThreadMain(); |
- |
- // Called when network reachability changes. network_active should |
- // be set only when the network is currently active and connecting |
- // to a host won't require any user intervention or create a network |
- // connection (e.g., prompting for a password, causing a modem to |
- // dial). |
- void NetworkReachabilityChanged(bool network_active); |
- |
- private: |
- enum WorkerThreadState { |
- WORKER_THREAD_STOPPED = 1, |
- WORKER_THREAD_RUNNING, |
- WORKER_THREAD_ERROR, |
- }; |
- |
- // If thread_state => WORKER_THREAD_STOPPED: |
- // |
- // thread_id => parent_thread_id_ |
- // thread_run_loop => NULL |
- // possible successor states => |
- // { WORKER_THREAD_RUNNING, WORKER_THREAD_ERROR } |
- // |
- // If thread_state => WORKER_THREAD_RUNNING, the worker thread is |
- // successfully running and will continue to run until Stop() is |
- // called. |
- // |
- // thread_id => id of worker thread (!= parent_thread_id_) |
- // thread_run_loop => reference to the worker thread's run loop |
- // possible successor states => { WORKER_THREAD_STOPPED } |
- // |
- // If thread_state => WORKER_THREAD_ERROR, the worker thread has |
- // failed to start running and has stopped. Join() must be still |
- // called on the worker thread. |
- // |
- // thread_id => id of worker thread (!= parent_thread_id_) |
- // thread_run_loop => NULL |
- // possible successor states => { WORKER_THREAD_STOPPED } |
- // |
- // Only the worker thread can change the state from |
- // WORKER_THREAD_STOPPED to any other state and only the main thread |
- // can change the state to WORKER_THREAD_STOPPED. |
- struct WorkerInfo { |
- WorkerThreadState thread_state; |
- PlatformThreadId thread_id; |
- CFRunLoopRef thread_run_loop; |
- |
- // This constructor sets thread_state to WORKER_THREAD_STOPPED |
- // and thread_run_loop to NULL. |
- explicit WorkerInfo(PlatformThreadId thread_id); |
- |
- WorkerInfo(WorkerThreadState thread_state, |
- PlatformThreadId thread_id, |
- CFRunLoopRef thread_run_loop); |
- }; |
- |
- // After this function is called, worker_shared_info_.thread_state |
- // is guaranteed to be WORKER_THREAD_STOPPED and |
- // network_reachability_ is guaranteed to be NULL. Must be called |
- // only from the parent thread without worker_lock_ being held. |
- void ClearWorker(); |
- |
- bool IsOnParentThread() const; |
- // Acquires and releases worker_lock_. |
- bool IsOnWorkerThread(); |
- |
- // The thread ID of the thread that constructed this object. |
- PlatformThreadId parent_thread_id_; |
- // The libjingle thread object of the thread that constructed this |
- // object. |
- talk_base::Thread* parent_thread_; |
- |
- // The handle to the worker thread, or kNullThreadHandle if a worker |
- // thread doesn't exist. |
- PlatformThreadHandle worker_thread_; |
- |
- // This lock protects worker_shared_info_ when the worker |
- // thread is running. |
- Lock worker_lock_; |
- |
- // Signalled by the worker thread when |
- // worker_shared_info_.thread_state moves from WORKER_THREAD_STOPPED |
- // to another state. |
- ConditionVariable worker_thread_not_stopped_; |
- |
- // Struct for everything that is shared between the parent and the |
- // worker thread. |
- WorkerInfo worker_shared_info_; |
- |
- FRIEND_TEST(NetworkStatusDetectorTaskMacTest, StartNoStopTest); |
- FRIEND_TEST(NetworkStatusDetectorTaskMacTest, StartStopTest); |
- |
- DISALLOW_COPY_AND_ASSIGN(NetworkStatusDetectorTaskMac); |
-}; |
- |
-} // namespace notifier |
- |
-#endif // CHROME_BROWSER_SYNC_NOTIFIER_BASE_MAC_NETWORK_STATUS_DETECTOR_TASK_MAC_H_ |
- |