| Index: ipc/ipc_sync_channel_unittest.cc
|
| ===================================================================
|
| --- ipc/ipc_sync_channel_unittest.cc (revision 58249)
|
| +++ ipc/ipc_sync_channel_unittest.cc (working copy)
|
| @@ -160,10 +160,11 @@
|
| NOTREACHED();
|
| }
|
|
|
| - private:
|
| base::Thread* ListenerThread() {
|
| return overrided_thread_ ? overrided_thread_ : &listener_thread_;
|
| }
|
| +
|
| + private:
|
| // Called on the listener thread to create the sync channel.
|
| void OnStart() {
|
| // Link ipc_thread_, listener_thread_ and channel_ altogether.
|
| @@ -1111,6 +1112,40 @@
|
| scoped_refptr<TestSyncMessageFilter> filter_;
|
| };
|
|
|
| +// This class provides functionality to test the case that a Send on the sync
|
| +// channel does not crash after the channel has been closed.
|
| +class ServerSendAfterClose : public Worker {
|
| + public:
|
| + ServerSendAfterClose()
|
| + : Worker(Channel::MODE_SERVER, "simpler_server"),
|
| + send_result_(true) {
|
| + }
|
| +
|
| + bool SendDummy() {
|
| + ListenerThread()->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
|
| + this, &ServerSendAfterClose::Send, new SyncChannelTestMsg_NoArgs));
|
| + return true;
|
| + }
|
| +
|
| + bool send_result() const {
|
| + return send_result_;
|
| + }
|
| +
|
| + private:
|
| + virtual void Run() {
|
| + CloseChannel();
|
| + Done();
|
| + }
|
| +
|
| + bool Send(Message* msg) {
|
| + send_result_ = Worker::Send(msg);
|
| + Done();
|
| + return send_result_;
|
| + }
|
| +
|
| + bool send_result_;
|
| +};
|
| +
|
| } // namespace
|
|
|
| // Tests basic synchronous call
|
| @@ -1120,3 +1155,19 @@
|
| workers.push_back(new SimpleClient());
|
| RunTest(workers);
|
| }
|
| +
|
| +// Test the case when the channel is closed and a Send is attempted after that.
|
| +TEST_F(IPCSyncChannelTest, SendAfterClose) {
|
| + ServerSendAfterClose server;
|
| + server.Start();
|
| +
|
| + server.done_event()->Wait();
|
| + server.done_event()->Reset();
|
| +
|
| + server.SendDummy();
|
| + server.done_event()->Wait();
|
| +
|
| + EXPECT_FALSE(server.send_result());
|
| +}
|
| +
|
| +
|
|
|