| Index: jingle/glue/chrome_async_socket_unittest.cc | 
| diff --git a/jingle/glue/chrome_async_socket_unittest.cc b/jingle/glue/chrome_async_socket_unittest.cc | 
| index db3d2b09c9ffd6a60cf631264b35c08436c4e558..b3c81b1bbc6e11440d0a8ca743c0d127a4c56399 100644 | 
| --- a/jingle/glue/chrome_async_socket_unittest.cc | 
| +++ b/jingle/glue/chrome_async_socket_unittest.cc | 
| @@ -11,6 +11,7 @@ | 
| #include "base/logging.h" | 
| #include "base/memory/scoped_ptr.h" | 
| #include "base/message_loop/message_loop.h" | 
| +#include "base/message_loop/message_pump_default.h" | 
| #include "jingle/glue/resolving_client_socket_factory.h" | 
| #include "net/base/address_list.h" | 
| #include "net/base/net_errors.h" | 
| @@ -143,7 +144,15 @@ class ChromeAsyncSocketTest | 
| protected: | 
| ChromeAsyncSocketTest() | 
| : ssl_socket_data_provider_(net::ASYNC, net::OK), | 
| -        addr_("localhost", 35) {} | 
| +        addr_("localhost", 35) { | 
| +    // GTest death tests execute in a fork()ed but not exec()ed process. | 
| +    // On OS X a CoreFoundation-backed message loop will exit with a | 
| +    // __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__ | 
| +    // when called. | 
| +    // Explicitly create a MessagePumpDefault which can run in this enivronment. | 
| +    scoped_ptr<base::MessagePump> pump(new base::MessagePumpDefault()); | 
| +    message_loop_.reset(new base::MessageLoop(pump.Pass())); | 
| +  } | 
|  | 
| virtual ~ChromeAsyncSocketTest() {} | 
|  | 
| @@ -182,7 +191,7 @@ class ChromeAsyncSocketTest | 
|  | 
| virtual void TearDown() { | 
| // Run any tasks that we forgot to pump. | 
| -    message_loop_.RunUntilIdle(); | 
| +    message_loop_->RunUntilIdle(); | 
| ExpectClosed(); | 
| ExpectNoSignal(); | 
| chrome_async_socket_.reset(); | 
| @@ -342,7 +351,7 @@ class ChromeAsyncSocketTest | 
| EXPECT_TRUE(chrome_async_socket_->Connect(addr_)); | 
| ExpectNonErrorState(ChromeAsyncSocket::STATE_CONNECTING); | 
|  | 
| -    message_loop_.RunUntilIdle(); | 
| +    message_loop_->RunUntilIdle(); | 
| // We may not necessarily be open; may have been other events | 
| // queued up. | 
| ExpectSignalSocketState( | 
| @@ -372,7 +381,7 @@ class ChromeAsyncSocketTest | 
| EXPECT_EQ(kDummyData, DrainRead(1)); | 
|  | 
| EXPECT_TRUE(chrome_async_socket_->StartTls("fakedomain.com")); | 
| -    message_loop_.RunUntilIdle(); | 
| +    message_loop_->RunUntilIdle(); | 
| ExpectSSLConnectSignal(); | 
| ExpectNoSignal(); | 
| ExpectNonErrorState(ChromeAsyncSocket::STATE_TLS_OPEN); | 
| @@ -415,7 +424,7 @@ class ChromeAsyncSocketTest | 
| } | 
|  | 
| // ChromeAsyncSocket expects a message loop. | 
| -  base::MessageLoop message_loop_; | 
| +  scoped_ptr<base::MessageLoop> message_loop_; | 
|  | 
| AsyncSocketDataProvider async_socket_data_provider_; | 
| net::SSLSocketDataProvider ssl_socket_data_provider_; | 
| @@ -510,7 +519,7 @@ TEST_F(ChromeAsyncSocketTest, ImmediateConnectCloseBeforeRead) { | 
| SignalSocketState::NoError( | 
| SIGNAL_CLOSE, ChromeAsyncSocket::STATE_CLOSED)); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| } | 
|  | 
| TEST_F(ChromeAsyncSocketTest, HangingConnect) { | 
| @@ -532,14 +541,14 @@ TEST_F(ChromeAsyncSocketTest, PendingConnect) { | 
| ExpectNonErrorState(ChromeAsyncSocket::STATE_CONNECTING); | 
| ExpectNoSignal(); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| ExpectNonErrorState(ChromeAsyncSocket::STATE_OPEN); | 
| ExpectSignalSocketState( | 
| SignalSocketState::NoError( | 
| SIGNAL_CONNECT, ChromeAsyncSocket::STATE_OPEN)); | 
| ExpectNoSignal(); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| DoCloseOpenedNoError(); | 
| } | 
| @@ -552,14 +561,14 @@ TEST_F(ChromeAsyncSocketTest, PendingConnectCloseBeforeRead) { | 
| net::MockConnect(net::ASYNC, net::OK)); | 
| EXPECT_TRUE(chrome_async_socket_->Connect(addr_)); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| ExpectSignalSocketState( | 
| SignalSocketState::NoError( | 
| SIGNAL_CONNECT, ChromeAsyncSocket::STATE_OPEN)); | 
|  | 
| DoCloseOpenedNoError(); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| } | 
|  | 
| TEST_F(ChromeAsyncSocketTest, PendingConnectError) { | 
| @@ -567,7 +576,7 @@ TEST_F(ChromeAsyncSocketTest, PendingConnectError) { | 
| net::MockConnect(net::ASYNC, net::ERR_TIMED_OUT)); | 
| EXPECT_TRUE(chrome_async_socket_->Connect(addr_)); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| ExpectSignalSocketState( | 
| SignalSocketState( | 
| @@ -629,7 +638,7 @@ TEST_F(ChromeAsyncSocketTest, Read) { | 
|  | 
| EXPECT_EQ(kReadData, DrainRead(1)); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| DoCloseOpenedNoError(); | 
| } | 
| @@ -643,7 +652,7 @@ TEST_F(ChromeAsyncSocketTest, ReadTwice) { | 
|  | 
| EXPECT_EQ(kReadData, DrainRead(1)); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| const char kReadData2[] = "mydatatoread2"; | 
| async_socket_data_provider_.AddRead(net::MockRead(kReadData2)); | 
| @@ -665,7 +674,7 @@ TEST_F(ChromeAsyncSocketTest, ReadError) { | 
|  | 
| EXPECT_EQ(kReadData, DrainRead(1)); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| async_socket_data_provider_.AddRead( | 
| net::MockRead(net::SYNCHRONOUS, net::ERR_TIMED_OUT)); | 
| @@ -699,7 +708,7 @@ TEST_F(ChromeAsyncSocketTest, PendingRead) { | 
|  | 
| EXPECT_EQ(kReadData, DrainRead(1)); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| DoCloseOpenedNoError(); | 
| } | 
| @@ -755,12 +764,12 @@ TEST_F(ChromeAsyncSocketTest, SyncWrite) { | 
| DoOpenClosed(); | 
|  | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData, 3)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 3, 5)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 8, | 
| arraysize(kWriteData) - 8)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| ExpectNoSignal(); | 
|  | 
| @@ -778,12 +787,12 @@ TEST_F(ChromeAsyncSocketTest, AsyncWrite) { | 
| net::MockWrite(net::ASYNC, kWriteData + 8, arraysize(kWriteData) - 8)); | 
|  | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData, 3)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 3, 5)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 8, | 
| arraysize(kWriteData) - 8)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| ExpectNoSignal(); | 
|  | 
| @@ -801,12 +810,12 @@ TEST_F(ChromeAsyncSocketTest, AsyncWriteError) { | 
| net::MockWrite(net::ASYNC, net::ERR_TIMED_OUT)); | 
|  | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData, 3)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 3, 5)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 8, | 
| arraysize(kWriteData) - 8)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| ExpectSignalSocketState( | 
| SignalSocketState( | 
| @@ -874,7 +883,7 @@ TEST_F(ChromeAsyncSocketTest, ImmediateSSLConnect) { | 
| ExpectReadSignal(); | 
|  | 
| EXPECT_TRUE(chrome_async_socket_->StartTls("fakedomain.com")); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| ExpectSSLConnectSignal(); | 
| ExpectNoSignal(); | 
| ExpectNonErrorState(ChromeAsyncSocket::STATE_TLS_OPEN); | 
| @@ -889,7 +898,7 @@ TEST_F(ChromeAsyncSocketTest, DoubleSSLConnect) { | 
| ExpectReadSignal(); | 
|  | 
| EXPECT_TRUE(chrome_async_socket_->StartTls("fakedomain.com")); | 
| -    message_loop_.RunUntilIdle(); | 
| +    message_loop_->RunUntilIdle(); | 
| ExpectSSLConnectSignal(); | 
| ExpectNoSignal(); | 
| ExpectNonErrorState(ChromeAsyncSocket::STATE_TLS_OPEN); | 
| @@ -913,7 +922,7 @@ TEST_F(ChromeAsyncSocketTest, FailedSSLConnect) { | 
| ExpectReadSignal(); | 
|  | 
| EXPECT_TRUE(chrome_async_socket_->StartTls("fakedomain.com")); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| ExpectSignalSocketState( | 
| SignalSocketState( | 
| SIGNAL_CLOSE, ChromeAsyncSocket::STATE_CLOSED, | 
| @@ -941,7 +950,7 @@ TEST_F(ChromeAsyncSocketTest, ReadDuringSSLConnecting) { | 
| EXPECT_TRUE(chrome_async_socket_->Read(buf, sizeof(buf), &len_read)); | 
| EXPECT_EQ(0U, len_read); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| ExpectSSLConnectSignal(); | 
| ExpectSSLReadSignal(); | 
| ExpectNoSignal(); | 
| @@ -972,11 +981,11 @@ TEST_F(ChromeAsyncSocketTest, WriteDuringSSLConnecting) { | 
| // TODO(akalin): Figure out how to test that the write happens | 
| // *after* the SSL connect. | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| ExpectSSLConnectSignal(); | 
| ExpectNoSignal(); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| DoSSLCloseOpenedNoError(); | 
| } | 
| @@ -1005,7 +1014,7 @@ TEST_F(ChromeAsyncSocketTest, SSLConnectDuringPostedWrite) { | 
|  | 
| EXPECT_FALSE(chrome_async_socket_->StartTls("fakedomain.com")); | 
|  | 
| -    message_loop_.RunUntilIdle(); | 
| +    message_loop_->RunUntilIdle(); | 
|  | 
| DoCloseOpened( | 
| SignalSocketState(SIGNAL_CLOSE, | 
| @@ -1020,14 +1029,14 @@ TEST_F(ChromeAsyncSocketTest, SSLConnectDuringPostedWrite) { | 
| TEST_F(ChromeAsyncSocketTest, SSLRead) { | 
| DoSSLOpenClosed(); | 
| async_socket_data_provider_.AddRead(net::MockRead(kReadData)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| ExpectSSLReadSignal(); | 
| ExpectNoSignal(); | 
|  | 
| EXPECT_EQ(kReadData, DrainRead(1)); | 
|  | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| DoSSLCloseOpenedNoError(); | 
| } | 
| @@ -1043,12 +1052,12 @@ TEST_F(ChromeAsyncSocketTest, SSLSyncWrite) { | 
| DoSSLOpenClosed(); | 
|  | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData, 3)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 3, 5)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 8, | 
| arraysize(kWriteData) - 8)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| ExpectNoSignal(); | 
|  | 
| @@ -1066,12 +1075,12 @@ TEST_F(ChromeAsyncSocketTest, SSLAsyncWrite) { | 
| net::MockWrite(net::ASYNC, kWriteData + 8, arraysize(kWriteData) - 8)); | 
|  | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData, 3)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 3, 5)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
| EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 8, | 
| arraysize(kWriteData) - 8)); | 
| -  message_loop_.RunUntilIdle(); | 
| +  message_loop_->RunUntilIdle(); | 
|  | 
| ExpectNoSignal(); | 
|  | 
|  |