Index: chrome/common/ipc_sync_channel.h |
diff --git a/chrome/common/ipc_sync_channel.h b/chrome/common/ipc_sync_channel.h |
deleted file mode 100644 |
index 3b2c671843b10545895fb8cdd021391c682900f6..0000000000000000000000000000000000000000 |
--- a/chrome/common/ipc_sync_channel.h |
+++ /dev/null |
@@ -1,162 +0,0 @@ |
-// Copyright (c) 2006-2008 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_COMMON_IPC_SYNC_SENDER_H__ |
-#define CHROME_COMMON_IPC_SYNC_SENDER_H__ |
- |
-#include <string> |
-#include <deque> |
- |
-#include "base/basictypes.h" |
-#include "base/lock.h" |
-#include "base/ref_counted.h" |
-#include "base/waitable_event_watcher.h" |
-#include "chrome/common/ipc_channel_proxy.h" |
- |
-namespace base { |
-class WaitableEvent; |
-}; |
- |
-namespace IPC { |
- |
-class SyncMessage; |
-class MessageReplyDeserializer; |
- |
-// This is similar to IPC::ChannelProxy, with the added feature of supporting |
-// sending synchronous messages. |
-// Note that care must be taken that the lifetime of the ipc_thread argument |
-// is more than this object. If the message loop goes away while this object |
-// is running and it's used to send a message, then it will use the invalid |
-// message loop pointer to proxy it to the ipc thread. |
-class SyncChannel : public ChannelProxy, |
- public base::WaitableEventWatcher::Delegate { |
- public: |
- SyncChannel(const std::string& channel_id, Channel::Mode mode, |
- Channel::Listener* listener, MessageFilter* filter, |
- MessageLoop* ipc_message_loop, bool create_pipe_now, |
- base::WaitableEvent* shutdown_event); |
- ~SyncChannel(); |
- |
- virtual bool Send(Message* message); |
- virtual bool SendWithTimeout(Message* message, int timeout_ms); |
- |
- // Whether we allow sending messages with no time-out. |
- void set_sync_messages_with_no_timeout_allowed(bool value) { |
- sync_messages_with_no_timeout_allowed_ = value; |
- } |
- |
- protected: |
- class ReceivedSyncMsgQueue; |
- friend class ReceivedSyncMsgQueue; |
- |
- // SyncContext holds the per object data for SyncChannel, so that SyncChannel |
- // can be deleted while it's being used in a different thread. See |
- // ChannelProxy::Context for more information. |
- class SyncContext : public Context, |
- public base::WaitableEventWatcher::Delegate { |
- public: |
- SyncContext(Channel::Listener* listener, |
- MessageFilter* filter, |
- MessageLoop* ipc_thread, |
- base::WaitableEvent* shutdown_event); |
- |
- ~SyncContext(); |
- |
- // Adds information about an outgoing sync message to the context so that |
- // we know how to deserialize the reply. |
- void Push(IPC::SyncMessage* sync_msg); |
- |
- // Cleanly remove the top deserializer (and throw it away). Returns the |
- // result of the Send call for that message. |
- bool Pop(); |
- |
- // Returns an event that's set when the send is complete, timed out or the |
- // process shut down. |
- base::WaitableEvent* GetSendDoneEvent(); |
- |
- // Returns an event that's set when an incoming message that's not the reply |
- // needs to get dispatched (by calling SyncContext::DispatchMessages). |
- base::WaitableEvent* GetDispatchEvent(); |
- |
- void DispatchMessages(); |
- |
- // Checks if the given message is blocking the listener thread because of a |
- // synchronous send. If it is, the thread is unblocked and true is |
- // returned. Otherwise the function returns false. |
- bool TryToUnblockListener(const Message* msg); |
- |
- // Called on the IPC thread when a sync send that runs a nested message loop |
- // times out. |
- void OnSendTimeout(int message_id); |
- |
- base::WaitableEvent* shutdown_event() { return shutdown_event_; } |
- |
- private: |
- // IPC::ChannelProxy methods that we override. |
- |
- // Called on the listener thread. |
- virtual void Clear(); |
- |
- // Called on the IPC thread. |
- virtual void OnMessageReceived(const Message& msg); |
- virtual void OnChannelError(); |
- virtual void OnChannelOpened(); |
- virtual void OnChannelClosed(); |
- |
- // Cancels all pending Send calls. |
- void CancelPendingSends(); |
- |
- // WaitableEventWatcher::Delegate implementation. |
- virtual void OnWaitableEventSignaled(base::WaitableEvent* arg); |
- |
- // When sending a synchronous message, this structure contains an object |
- // that knows how to deserialize the response. |
- struct PendingSyncMsg { |
- PendingSyncMsg(int id, IPC::MessageReplyDeserializer* d, |
- base::WaitableEvent* e) : |
- id(id), deserializer(d), done_event(e), send_result(false) { } |
- int id; |
- IPC::MessageReplyDeserializer* deserializer; |
- base::WaitableEvent* done_event; |
- bool send_result; |
- }; |
- |
- typedef std::deque<PendingSyncMsg> PendingSyncMessageQueue; |
- PendingSyncMessageQueue deserializers_; |
- Lock deserializers_lock_; |
- |
- scoped_refptr<ReceivedSyncMsgQueue> received_sync_msgs_; |
- |
- base::WaitableEvent* shutdown_event_; |
- base::WaitableEventWatcher shutdown_watcher_; |
- }; |
- |
- private: |
- // WaitableEventWatcher::Delegate implementation. |
- virtual void OnWaitableEventSignaled(base::WaitableEvent* arg); |
- |
- SyncContext* sync_context() { |
- return reinterpret_cast<SyncContext*>(context()); |
- } |
- |
- // Both these functions wait for a reply, timeout or process shutdown. The |
- // latter one also runs a nested message loop in the meantime. |
- void WaitForReply(base::WaitableEvent* pump_messages_event); |
- |
- // Runs a nested message loop until a reply arrives, times out, or the process |
- // shuts down. |
- void WaitForReplyWithNestedMessageLoop(); |
- |
- bool sync_messages_with_no_timeout_allowed_; |
- |
- // Used to signal events between the IPC and listener threads. |
- base::WaitableEventWatcher send_done_watcher_; |
- base::WaitableEventWatcher dispatch_watcher_; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(SyncChannel); |
-}; |
- |
-} // namespace IPC |
- |
-#endif // CHROME_COMMON_IPC_SYNC_SENDER_H__ |