diff options
-rw-r--r-- | chrome/browser/extensions/api/socket/udp_socket.cc | 2 | ||||
-rw-r--r-- | chrome/browser/extensions/api/socket/udp_socket_unittest.cc | 44 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 1 |
3 files changed, 46 insertions, 1 deletions
diff --git a/chrome/browser/extensions/api/socket/udp_socket.cc b/chrome/browser/extensions/api/socket/udp_socket.cc index 1e65b6b..0ecfe2a 100644 --- a/chrome/browser/extensions/api/socket/udp_socket.cc +++ b/chrome/browser/extensions/api/socket/udp_socket.cc @@ -109,7 +109,7 @@ void UDPSocket::RecvFrom(int count, DCHECK(!callback.is_null()); if (!recv_from_callback_.is_null()) { - callback.Run(net::ERR_IO_PENDING, NULL, NULL, 0); + callback.Run(net::ERR_IO_PENDING, NULL, "", 0); return; } else { recv_from_callback_ = callback; diff --git a/chrome/browser/extensions/api/socket/udp_socket_unittest.cc b/chrome/browser/extensions/api/socket/udp_socket_unittest.cc new file mode 100644 index 0000000..08a864f --- /dev/null +++ b/chrome/browser/extensions/api/socket/udp_socket_unittest.cc @@ -0,0 +1,44 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/extensions/api/socket/udp_socket.h" + +#include <string> + +#include "base/memory/scoped_ptr.h" +#include "base/message_loop.h" +#include "chrome/test/base/browser_with_test_window_test.h" +#include "net/base/io_buffer.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace extensions { + +// UDPSocketUnitTest exists solely to make it easier to pass a specific +// gtest_filter argument during development. +class UDPSocketUnitTest : public BrowserWithTestWindowTest { +}; + +static void OnConnected(int result) { + DCHECK(result == 0); +} + +static void OnCompleted(int bytes_read, + scoped_refptr<net::IOBuffer> io_buffer, + const std::string& address, + int port) { + // Do nothing; don't care. +} + +TEST(UDPSocketUnitTest, TestUDPSocketRecvFrom) { + MessageLoopForIO io_loop; // for RecvFrom to do its threaded work. + UDPSocket socket(NULL); + + // Confirm that we can call two RecvFroms in quick succession without + // triggering crbug.com/146606. + socket.Connect("127.0.0.1", 40000, base::Bind(&OnConnected)); + socket.RecvFrom(4096, base::Bind(&OnCompleted)); + socket.RecvFrom(4096, base::Bind(&OnCompleted)); +} + +} // namespace extensions diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 0c042e9..5688a3e 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1263,6 +1263,7 @@ 'browser/extensions/api/serial/serial_port_enumerator_unittest.cc', 'browser/extensions/api/socket/socket_api_unittest.cc', 'browser/extensions/api/socket/tcp_socket_unittest.cc', + 'browser/extensions/api/socket/udp_socket_unittest.cc', 'browser/extensions/api/web_navigation/frame_navigation_state_unittest.cc', 'browser/extensions/api/web_request/web_request_api_unittest.cc', 'browser/extensions/api/web_request/web_request_permissions_unittest.cc', |