summaryrefslogtreecommitdiffstats
path: root/ipc
diff options
context:
space:
mode:
authordmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-23 23:54:53 +0000
committerdmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-23 23:54:53 +0000
commit21bb77b0b200d156cfcdb5ee78fe98ec1fffc7d6 (patch)
tree4f7ecb3c7d28ae98f24d8a9ca905d44279b95ff4 /ipc
parent861023f31ddde4823d6ed95adef301b0e1aa2727 (diff)
downloadchromium_src-21bb77b0b200d156cfcdb5ee78fe98ec1fffc7d6.zip
chromium_src-21bb77b0b200d156cfcdb5ee78fe98ec1fffc7d6.tar.gz
chromium_src-21bb77b0b200d156cfcdb5ee78fe98ec1fffc7d6.tar.bz2
Make IPC::ChannelProxy test check filter events
BUG=364241 Review URL: https://codereview.chromium.org/248133002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@265775 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc')
-rw-r--r--ipc/ipc_channel_proxy_unittest.cc60
1 files changed, 52 insertions, 8 deletions
diff --git a/ipc/ipc_channel_proxy_unittest.cc b/ipc/ipc_channel_proxy_unittest.cc
index 431f410..282b346 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());
}