Index: media/webm/webm_cluster_parser_unittest.cc |
diff --git a/media/webm/webm_cluster_parser_unittest.cc b/media/webm/webm_cluster_parser_unittest.cc |
index 07deb05515ac7c3256b92a250178ec3c1722d579..2b906d0a0d2ebbd2d671b8ff7129d8c6e0efdf60 100644 |
--- a/media/webm/webm_cluster_parser_unittest.cc |
+++ b/media/webm/webm_cluster_parser_unittest.cc |
@@ -67,6 +67,23 @@ static scoped_ptr<Cluster> CreateCluster(int timecode, |
return cb.Finish(); |
} |
+static const uint8 kEncryptedFrame[] = { |
ddorwin
2013/03/12 19:31:02
Please move up with other constants.
fgalligan1
2013/03/13 17:58:09
Done.
|
+ 0x01, // Block is encrypted |
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 // IV |
+}; |
+ |
+// Creates a Cluster with one encrypted Block. |bytes_to_write| is number of |
+// bytes of the encrypted frame to write. |
+static scoped_ptr<Cluster> CreateEncryptedCluster(int bytes_to_write) { |
+ CHECK_GT(bytes_to_write, 0); |
+ CHECK_LE(bytes_to_write, static_cast<int>(sizeof(kEncryptedFrame))); |
+ |
+ ClusterBuilder cb; |
+ cb.SetClusterTimecode(0); |
+ cb.AddSimpleBlock(kVideoTrackNum, 0, 0, kEncryptedFrame, bytes_to_write); |
+ return cb.Finish(); |
+} |
+ |
static bool VerifyBuffers(const WebMClusterParser::BufferQueue& audio_buffers, |
const WebMClusterParser::BufferQueue& video_buffers, |
const WebMClusterParser::BufferQueue& text_buffers, |
@@ -165,6 +182,13 @@ static bool VerifyTextBuffers( |
return true; |
} |
+static bool VerifyEncryptedFrame( |
ddorwin
2013/03/12 19:31:02
IsEncryptedFrame(). The verification is at the cal
fgalligan1
2013/03/13 17:58:09
Done.
|
+ const WebMClusterParser::BufferQueue& video_buffers) { |
ddorwin
2013/03/12 19:31:02
Since this just verifies one frame, it should only
fgalligan1
2013/03/13 17:58:09
Done.
|
+ scoped_refptr<StreamParserBuffer> buffer = video_buffers[0]; |
+ const uint8* data = buffer->GetData(); |
+ return data[0] & kWebMFlagEncryptedFrame; |
+} |
+ |
static void AppendToEnd(const WebMClusterParser::BufferQueue& src, |
WebMClusterParser::BufferQueue* dest) { |
for (WebMClusterParser::BufferQueue::const_iterator itr = src.begin(); |
@@ -440,4 +464,30 @@ TEST_F(WebMClusterParserTest, ParseMultipleTextTracks) { |
} |
} |
+TEST_F(WebMClusterParserTest, ParseEncryptedBlock) { |
+ scoped_ptr<Cluster> cluster(CreateEncryptedCluster(sizeof(kEncryptedFrame))); |
+ |
+ parser_.reset(new WebMClusterParser( |
+ kTimecodeScale, kAudioTrackNum, kVideoTrackNum, |
+ std::set<int>(), |
+ std::set<int64>(), "", "video_key_id", |
+ LogCB())); |
+ int result = parser_->Parse(cluster->data(), cluster->size()); |
+ EXPECT_EQ(cluster->size(), result); |
+ EXPECT_TRUE(VerifyEncryptedFrame(parser_->video_buffers())); |
ddorwin
2013/03/12 19:31:02
The implementation of this really just checks the
fgalligan1
2013/03/13 17:58:09
Done. PTAL
|
+} |
+ |
+TEST_F(WebMClusterParserTest, ParseBadEncryptedBlock) { |
+ scoped_ptr<Cluster> cluster( |
+ CreateEncryptedCluster(sizeof(kEncryptedFrame) - 1)); |
+ |
+ parser_.reset(new WebMClusterParser( |
+ kTimecodeScale, kAudioTrackNum, kVideoTrackNum, |
+ std::set<int>(), |
+ std::set<int64>(), "", "video_key_id", |
+ LogCB())); |
+ int result = parser_->Parse(cluster->data(), cluster->size()); |
+ EXPECT_EQ(-1, result); |
+} |
+ |
} // namespace media |