| Index: remoting/signaling/xmpp_login_handler_unittest.cc
|
| diff --git a/remoting/signaling/xmpp_login_handler_unittest.cc b/remoting/signaling/xmpp_login_handler_unittest.cc
|
| index 59afdb8d0fa862279edd41422b0be4c440e9d7af..ab9abe048634b43255f49a3b1de3837ed7397e88 100644
|
| --- a/remoting/signaling/xmpp_login_handler_unittest.cc
|
| +++ b/remoting/signaling/xmpp_login_handler_unittest.cc
|
| @@ -38,21 +38,29 @@ class XmppLoginHandlerTest : public testing::Test,
|
|
|
| void SendMessage(const std::string& message) override {
|
| sent_data_ += message;
|
| + if (delete_login_handler_from_delegate_)
|
| + login_handler_.reset();
|
| }
|
|
|
| void StartTls() override {
|
| start_tls_called_ = true;
|
| + if (delete_login_handler_from_delegate_)
|
| + login_handler_.reset();
|
| }
|
|
|
| void OnHandshakeDone(const std::string& jid,
|
| scoped_ptr<XmppStreamParser> parser) override {
|
| jid_ = jid;
|
| parser_ = parser.Pass();
|
| + if (delete_login_handler_from_delegate_)
|
| + login_handler_.reset();
|
| }
|
|
|
| void OnLoginHandlerError(SignalStrategy::Error error) override {
|
| EXPECT_NE(error, SignalStrategy::OK);
|
| error_ = error;
|
| + if (delete_login_handler_from_delegate_)
|
| + login_handler_.reset();
|
| }
|
|
|
| protected:
|
| @@ -66,6 +74,7 @@ class XmppLoginHandlerTest : public testing::Test,
|
| std::string jid_;
|
| scoped_ptr<XmppStreamParser> parser_;
|
| SignalStrategy::Error error_;
|
| + bool delete_login_handler_from_delegate_ = false;
|
| };
|
|
|
| void XmppLoginHandlerTest::HandshakeBase() {
|
| @@ -127,6 +136,10 @@ TEST_F(XmppLoginHandlerTest, SuccessfulAuth) {
|
| "</iq>");
|
| sent_data_.clear();
|
|
|
| + // |login_handler_| will call OnHandshakeDone() which will delete
|
| + // |login_handler_|.
|
| + delete_login_handler_from_delegate_ = true;
|
| +
|
| login_handler_->OnDataReceived(
|
| "<stream:stream from=\"google.com\" id=\"104FA10576E2AA80\" "
|
| "version=\"1.0\" "
|
| @@ -145,6 +158,7 @@ TEST_F(XmppLoginHandlerTest, SuccessfulAuth) {
|
|
|
| EXPECT_EQ(jid_, std::string(kTestUsername) + "/chromoting52B4920E");
|
| EXPECT_TRUE(parser_);
|
| + EXPECT_FALSE(login_handler_);
|
| }
|
|
|
| TEST_F(XmppLoginHandlerTest, StartTlsHandshake) {
|
| @@ -216,8 +230,35 @@ TEST_F(XmppLoginHandlerTest, NoTls) {
|
|
|
| TEST_F(XmppLoginHandlerTest, StreamParseError) {
|
| HandshakeBase();
|
| + delete_login_handler_from_delegate_ = true;
|
| login_handler_->OnDataReceived("BAD DATA");
|
| EXPECT_EQ(error_, SignalStrategy::PROTOCOL_ERROR);
|
| }
|
|
|
| +// Verify that LoginHandler doesn't crash when destroyed from
|
| +// Delegate::SendMessage().
|
| +TEST_F(XmppLoginHandlerTest, DeleteInSendMessage) {
|
| + login_handler_.reset(
|
| + new XmppLoginHandler("google.com", kTestUsername, kTestToken,
|
| + XmppLoginHandler::TlsMode::WITHOUT_HANDSHAKE, this));
|
| + login_handler_->Start();
|
| + EXPECT_TRUE(start_tls_called_);
|
| +
|
| + delete_login_handler_from_delegate_ = true;
|
| + login_handler_->OnTlsStarted();
|
| + EXPECT_FALSE(login_handler_);
|
| +}
|
| +
|
| +// Verify that LoginHandler doesn't crash when destroyed from
|
| +// Delegate::StartTls().
|
| +TEST_F(XmppLoginHandlerTest, DeleteInStartTls) {
|
| + login_handler_.reset(
|
| + new XmppLoginHandler("google.com", kTestUsername, kTestToken,
|
| + XmppLoginHandler::TlsMode::WITHOUT_HANDSHAKE, this));
|
| + delete_login_handler_from_delegate_ = true;
|
| + login_handler_->Start();
|
| + EXPECT_TRUE(start_tls_called_);
|
| + EXPECT_FALSE(login_handler_);
|
| +}
|
| +
|
| } // namespace remoting
|
|
|