summaryrefslogtreecommitdiff
path: root/media
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2013-08-06 11:01:04 +0100
committerBen Murdoch <benm@google.com>2013-08-06 11:01:04 +0100
commit2385ea399aae016c0806a4f9ef3c9cfe3d2a39df (patch)
treee910e76d19265ff3230c473da95410d3f3a007af /media
parent8ee924b76946696c0f52e56d28cc5ab741919041 (diff)
downloadchromium_org-2385ea399aae016c0806a4f9ef3c9cfe3d2a39df.tar.gz
Merge from Chromium at DEPS revision r215849
This commit was generated by merge_to_master.py. Change-Id: I225a31651af894e33bdd71e7121702bcbe5310f4
Diffstat (limited to 'media')
-rw-r--r--media/audio/async_socket_io_handler_posix.cc2
-rw-r--r--media/audio/async_socket_io_handler_unittest.cc36
-rw-r--r--media/mp4/mp4_stream_parser.cc4
3 files changed, 35 insertions, 7 deletions
diff --git a/media/audio/async_socket_io_handler_posix.cc b/media/audio/async_socket_io_handler_posix.cc
index 815c628ef2..be8f3708cb 100644
--- a/media/audio/async_socket_io_handler_posix.cc
+++ b/media/audio/async_socket_io_handler_posix.cc
@@ -29,7 +29,7 @@ void AsyncSocketIoHandler::OnFileCanReadWithoutBlocking(int socket) {
if (pending_buffer_) {
int bytes_read = HANDLE_EINTR(read(socket_, pending_buffer_,
pending_buffer_len_));
- DCHECK_GT(bytes_read, 0);
+ DCHECK_GE(bytes_read, 0);
pending_buffer_ = NULL;
pending_buffer_len_ = 0;
read_complete_.Run(bytes_read > 0 ? bytes_read : 0);
diff --git a/media/audio/async_socket_io_handler_unittest.cc b/media/audio/async_socket_io_handler_unittest.cc
index a2505d2249..ae971464db 100644
--- a/media/audio/async_socket_io_handler_unittest.cc
+++ b/media/audio/async_socket_io_handler_unittest.cc
@@ -20,11 +20,13 @@ class TestSocketReader {
// callbacks should not be counted.
TestSocketReader(base::CancelableSyncSocket* socket,
int number_of_reads_before_quit,
- bool issue_reads_from_callback)
+ bool issue_reads_from_callback,
+ bool expect_eof)
: socket_(socket), buffer_(),
number_of_reads_before_quit_(number_of_reads_before_quit),
callbacks_received_(0),
- issue_reads_from_callback_(issue_reads_from_callback) {
+ issue_reads_from_callback_(issue_reads_from_callback),
+ expect_eof_(expect_eof) {
io_handler.Initialize(socket_->handle(),
base::Bind(&TestSocketReader::OnRead,
base::Unretained(this)));
@@ -41,7 +43,11 @@ class TestSocketReader {
private:
void OnRead(int bytes_read) {
- EXPECT_GT(bytes_read, 0);
+ if (!expect_eof_) {
+ EXPECT_GT(bytes_read, 0);
+ } else {
+ EXPECT_GE(bytes_read, 0);
+ }
++callbacks_received_;
if (number_of_reads_before_quit_ == callbacks_received_) {
base::MessageLoop::current()->Quit();
@@ -56,6 +62,7 @@ class TestSocketReader {
int number_of_reads_before_quit_;
int callbacks_received_;
bool issue_reads_from_callback_;
+ bool expect_eof_;
};
// Workaround to be able to use a base::Closure for sending data.
@@ -76,7 +83,7 @@ TEST(AsyncSocketIoHandlerTest, AsynchronousReadWithMessageLoop) {
base::CancelableSyncSocket pair[2];
ASSERT_TRUE(base::CancelableSyncSocket::CreatePair(&pair[0], &pair[1]));
- TestSocketReader reader(&pair[0], 1, false);
+ TestSocketReader reader(&pair[0], 1, false, false);
EXPECT_TRUE(reader.IssueRead());
pair[1].Send(kAsyncSocketIoTestString, kAsyncSocketIoTestStringLength);
@@ -94,7 +101,7 @@ TEST(AsyncSocketIoHandlerTest, SynchronousReadWithMessageLoop) {
base::CancelableSyncSocket pair[2];
ASSERT_TRUE(base::CancelableSyncSocket::CreatePair(&pair[0], &pair[1]));
- TestSocketReader reader(&pair[0], -1, false);
+ TestSocketReader reader(&pair[0], -1, false, false);
pair[1].Send(kAsyncSocketIoTestString, kAsyncSocketIoTestStringLength);
base::MessageLoop::current()->PostDelayedTask(FROM_HERE,
@@ -122,7 +129,7 @@ TEST(AsyncSocketIoHandlerTest, ReadFromCallback) {
ASSERT_TRUE(base::CancelableSyncSocket::CreatePair(&pair[0], &pair[1]));
const int kReadOperationCount = 10;
- TestSocketReader reader(&pair[0], kReadOperationCount, true);
+ TestSocketReader reader(&pair[0], kReadOperationCount, true, false);
EXPECT_TRUE(reader.IssueRead());
// Issue sends on an interval to satisfy the Read() requirements.
@@ -142,3 +149,20 @@ TEST(AsyncSocketIoHandlerTest, ReadFromCallback) {
base::MessageLoop::current()->Run();
EXPECT_EQ(kReadOperationCount, reader.callbacks_received());
}
+
+// Calls Read() then close other end, check that a correct callback is received.
+TEST(AsyncSocketIoHandlerTest, ReadThenClose) {
+ base::MessageLoopForIO loop;
+
+ base::CancelableSyncSocket pair[2];
+ ASSERT_TRUE(base::CancelableSyncSocket::CreatePair(&pair[0], &pair[1]));
+
+ const int kReadOperationCount = 1;
+ TestSocketReader reader(&pair[0], kReadOperationCount, false, true);
+ EXPECT_TRUE(reader.IssueRead());
+
+ pair[1].Close();
+
+ base::MessageLoop::current()->Run();
+ EXPECT_EQ(kReadOperationCount, reader.callbacks_received());
+}
diff --git a/media/mp4/mp4_stream_parser.cc b/media/mp4/mp4_stream_parser.cc
index 1d311f40a6..fc4ee8abd1 100644
--- a/media/mp4/mp4_stream_parser.cc
+++ b/media/mp4/mp4_stream_parser.cc
@@ -461,6 +461,10 @@ bool MP4StreamParser::EnqueueSample(BufferQueue* audio_buffers,
std::vector<SubsampleEntry> subsamples;
if (runs_->is_encrypted()) {
decrypt_config = runs_->GetDecryptConfig();
+ if (!decrypt_config) {
+ *err = true;
+ return false;
+ }
subsamples = decrypt_config->subsamples();
}