| Index: ipc/ipc_channel_proxy_unittest.cc
|
| diff --git a/ipc/ipc_channel_proxy_unittest.cc b/ipc/ipc_channel_proxy_unittest.cc
|
| index 431f410d7fa08f7cd791ca57091382511d3db69e..282b3462cf9ab442550a8e172647fbc88cd7847b 100644
|
| --- a/ipc/ipc_channel_proxy_unittest.cc
|
| +++ b/ipc/ipc_channel_proxy_unittest.cc
|
| @@ -83,26 +83,67 @@ class ChannelReflectorListener : public IPC::Listener {
|
|
|
| class MessageCountFilter : public IPC::ChannelProxy::MessageFilter {
|
| public:
|
| + enum FilterEvent {
|
| + NONE,
|
| + FILTER_ADDED,
|
| + CHANNEL_CONNECTED,
|
| + CHANNEL_ERROR,
|
| + CHANNEL_CLOSING,
|
| + FILTER_REMOVED
|
| + };
|
| MessageCountFilter()
|
| : messages_received_(0),
|
| supported_message_class_(0),
|
| is_global_filter_(true),
|
| - filter_removed_(false),
|
| + last_filter_event_(NONE),
|
| message_filtering_enabled_(false) {}
|
|
|
| MessageCountFilter(uint32 supported_message_class)
|
| : messages_received_(0),
|
| supported_message_class_(supported_message_class),
|
| is_global_filter_(false),
|
| - filter_removed_(false),
|
| + last_filter_event_(NONE),
|
| message_filtering_enabled_(false) {}
|
|
|
| + virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE {
|
| + EXPECT_TRUE(channel);
|
| + EXPECT_EQ(NONE, last_filter_event_);
|
| + last_filter_event_ = FILTER_ADDED;
|
| + }
|
| +
|
| + virtual void OnChannelConnected(int32_t peer_pid) OVERRIDE {
|
| + EXPECT_EQ(FILTER_ADDED, last_filter_event_);
|
| + EXPECT_NE(static_cast<int32_t>(base::kNullProcessId), peer_pid);
|
| + last_filter_event_ = CHANNEL_CONNECTED;
|
| + }
|
| +
|
| + virtual void OnChannelError() OVERRIDE {
|
| + EXPECT_EQ(CHANNEL_CONNECTED, last_filter_event_);
|
| + last_filter_event_ = CHANNEL_ERROR;
|
| + }
|
| +
|
| + virtual void OnChannelClosing() OVERRIDE {
|
| + // We may or may not have gotten OnChannelError; if not, the last event has
|
| + // to be OnChannelConnected.
|
| + if (last_filter_event_ != CHANNEL_ERROR)
|
| + EXPECT_EQ(CHANNEL_CONNECTED, last_filter_event_);
|
| + last_filter_event_ = CHANNEL_CLOSING;
|
| + }
|
| +
|
| virtual void OnFilterRemoved() OVERRIDE {
|
| - EXPECT_FALSE(filter_removed_);
|
| - filter_removed_ = true;
|
| + // If the channel didn't get a chance to connect, we might see the
|
| + // OnFilterRemoved event with no other events preceding it. We still want
|
| + // OnFilterRemoved to be called to allow for deleting the Filter.
|
| + if (last_filter_event_ != NONE)
|
| + EXPECT_EQ(CHANNEL_CLOSING, last_filter_event_);
|
| + last_filter_event_ = FILTER_REMOVED;
|
| }
|
|
|
| virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
|
| + // We should always get the OnFilterAdded and OnChannelConnected events
|
| + // prior to any messages.
|
| + EXPECT_EQ(CHANNEL_CONNECTED, last_filter_event_);
|
| +
|
| if (!is_global_filter_) {
|
| EXPECT_EQ(supported_message_class_, IPC_MESSAGE_CLASS(message));
|
| }
|
| @@ -123,7 +164,7 @@ class MessageCountFilter : public IPC::ChannelProxy::MessageFilter {
|
| }
|
|
|
| size_t messages_received() const { return messages_received_; }
|
| - bool filter_removed() const { return filter_removed_; }
|
| + FilterEvent last_filter_event() const { return last_filter_event_; }
|
|
|
| private:
|
| virtual ~MessageCountFilter() {}
|
| @@ -131,7 +172,8 @@ class MessageCountFilter : public IPC::ChannelProxy::MessageFilter {
|
| size_t messages_received_;
|
| uint32 supported_message_class_;
|
| bool is_global_filter_;
|
| - bool filter_removed_;
|
| +
|
| + FilterEvent last_filter_event_;
|
| bool message_filtering_enabled_;
|
| };
|
|
|
| @@ -248,8 +290,10 @@ TEST_F(IPCChannelProxyTest, FilterRemoval) {
|
|
|
| // Ensure that the filters were removed and did not receive any messages.
|
| SendQuitMessageAndWaitForIdle();
|
| - EXPECT_TRUE(global_filter->filter_removed());
|
| - EXPECT_TRUE(class_filter->filter_removed());
|
| + EXPECT_EQ(MessageCountFilter::FILTER_REMOVED,
|
| + global_filter->last_filter_event());
|
| + EXPECT_EQ(MessageCountFilter::FILTER_REMOVED,
|
| + class_filter->last_filter_event());
|
| EXPECT_EQ(0U, class_filter->messages_received());
|
| EXPECT_EQ(0U, global_filter->messages_received());
|
| }
|
|
|