| Index: chrome_frame/sync_msg_reply_dispatcher.h
|
| diff --git a/chrome_frame/sync_msg_reply_dispatcher.h b/chrome_frame/sync_msg_reply_dispatcher.h
|
| deleted file mode 100644
|
| index d5cb64e89dc3e9d430ce8ac4c92420608ccd057c..0000000000000000000000000000000000000000
|
| --- a/chrome_frame/sync_msg_reply_dispatcher.h
|
| +++ /dev/null
|
| @@ -1,118 +0,0 @@
|
| -// Copyright (c) 2011 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_FRAME_SYNC_MSG_REPLY_DISPATCHER_H_
|
| -#define CHROME_FRAME_SYNC_MSG_REPLY_DISPATCHER_H_
|
| -
|
| -#include <deque>
|
| -
|
| -#include "base/synchronization/lock.h"
|
| -#include "ipc/ipc_channel_proxy.h"
|
| -
|
| -// Base class used to allow synchronous IPC messages to be sent and
|
| -// received in an asynchronous manner. To use this class add it as a filter to
|
| -// your IPC channel using ChannelProxy::AddFilter(). From then on, before
|
| -// sending a synchronous message, call SyncMessageReplyDispatcher::Push() with
|
| -// a callback and a key. This class will then handle the message response and
|
| -// will call the callback when it is received.
|
| -//
|
| -// This class is intended to be extended by classes implementing
|
| -// HandleMessageType with delegation for the messages they expect to receive in
|
| -// cases where you care about the return values of synchronous messages.
|
| -//
|
| -// Sample usage pattern:
|
| -// Define a class which inherits from SyncMessageCallContext which specifies
|
| -// the output_type tuple and has a Completed member function.
|
| -// class SampleContext
|
| -// : public SyncMessageReplyDispatcher::SyncMessageCallContext {
|
| -// public:
|
| -// typedef Tuple1<int> output_type;
|
| -// void Completed(int arg) {}
|
| -// };
|
| -//
|
| -// // Add handling for desired message types.
|
| -// class SyncMessageReplyDispatcherImpl : public SyncMessageReplyDispatcher {
|
| -// virtual bool HandleMessageType(const IPC::Message& msg,
|
| -// SyncMessageReplyDispatcher* context) {
|
| -// switch (context->message_type()) {
|
| -// case AutomationMsg_CreateExternalTab::ID:
|
| -// InvokeCallback<CreateExternalTabContext>(msg, context);
|
| -// break;
|
| -// [HANDLING FOR OTHER EXPECTED MESSAGE TYPES]
|
| -// }
|
| -// }
|
| -//
|
| -// // Add the filter
|
| -// IPC::SyncChannel channel_;
|
| -// channel_.AddFilter(new SyncMessageReplyDispatcherImpl());
|
| -//
|
| -// sync_->Push(msg, new SampleContext, this);
|
| -// channel_->ChannelProxy::Send(msg);
|
| -//
|
| -class SyncMessageReplyDispatcher : public IPC::ChannelProxy::MessageFilter {
|
| - public:
|
| - class SyncMessageCallContext {
|
| - public:
|
| - SyncMessageCallContext()
|
| - : id_(0),
|
| - message_type_(0),
|
| - key_(NULL) {}
|
| -
|
| - virtual ~SyncMessageCallContext() {}
|
| -
|
| - uint32 message_type() const {
|
| - return message_type_;
|
| - }
|
| -
|
| - private:
|
| - int id_;
|
| - uint32 message_type_;
|
| - void* key_;
|
| -
|
| - friend class SyncMessageReplyDispatcher;
|
| - };
|
| -
|
| - SyncMessageReplyDispatcher() {}
|
| - void Push(IPC::SyncMessage* msg, SyncMessageCallContext* context,
|
| - void* key);
|
| - void Cancel(void* key);
|
| -
|
| - protected:
|
| - typedef std::deque<SyncMessageCallContext*> PendingSyncMessageQueue;
|
| -
|
| - SyncMessageCallContext* GetContext(const IPC::Message& msg);
|
| -
|
| - virtual bool OnMessageReceived(const IPC::Message& msg);
|
| -
|
| - // Child classes must implement a handler for the message types they are
|
| - // interested in handling responses for. If you don't care about the replies
|
| - // to any of the sync messages you are handling, then you don't have to
|
| - // implement this.
|
| - virtual bool HandleMessageType(const IPC::Message& msg,
|
| - SyncMessageCallContext* context);
|
| -
|
| - template <typename T>
|
| - void InvokeCallback(const IPC::Message& msg,
|
| - SyncMessageCallContext* call_context) {
|
| - if (!call_context || !call_context->key_) {
|
| - NOTREACHED() << "Invalid context parameter";
|
| - return;
|
| - }
|
| -
|
| - T* context = static_cast<T*>(call_context);
|
| - T::output_type tmp; // Acts as "initializer" for output parameters.
|
| - IPC::ParamDeserializer<T::output_type> deserializer(tmp);
|
| - if (deserializer.MessageReplyDeserializer::SerializeOutputParameters(msg)) {
|
| - DispatchToMethod(context, &T::Completed, deserializer.out_);
|
| - delete context;
|
| - } else {
|
| - // TODO(stoyan): How to handle errors?
|
| - }
|
| - }
|
| -
|
| - PendingSyncMessageQueue message_queue_;
|
| - base::Lock message_queue_lock_;
|
| -};
|
| -
|
| -#endif // CHROME_FRAME_SYNC_MSG_REPLY_DISPATCHER_H_
|
|
|