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..d0796a4e637f592b87167642be71a7b055a32efd 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(); |
} |
+const uint8 encrypted_frame[] = { |
ddorwin
2013/03/12 04:40:06
kEncryptedFrame.
This should be with other constan
fgalligan1
2013/03/12 17:20:13
Done.
|
+ 0x01, // Block is encrypted |
xhwang
2013/03/12 17:28:57
nit: 2 spaces before //
fgalligan1
2013/03/13 17:58:09
Done.
|
+ 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) { |
+ ClusterBuilder cb; |
+ cb.SetClusterTimecode(0); |
+ int frame_size = (bytes_to_write < 1) ? 1 : bytes_to_write; |
+ if (frame_size > sizeof(encrypted_frame)) |
+ frame_size = sizeof(encrypted_frame); |
ddorwin
2013/03/12 04:40:06
This seems unexpected. DCHECK or something if you
fgalligan1
2013/03/12 17:20:13
Done.
|
+ cb.AddSimpleBlock(kVideoTrackNum, 0, 0, encrypted_frame, frame_size); |
+ return cb.Finish(); |
+} |
+ |
static bool VerifyBuffers(const WebMClusterParser::BufferQueue& audio_buffers, |
const WebMClusterParser::BufferQueue& video_buffers, |
const WebMClusterParser::BufferQueue& text_buffers, |
@@ -440,4 +457,29 @@ TEST_F(WebMClusterParserTest, ParseMultipleTextTracks) { |
} |
} |
+TEST_F(WebMClusterParserTest, ParseEncryptedBlock) { |
+ scoped_ptr<Cluster> cluster(CreateEncryptedCluster(sizeof(encrypted_frame))); |
+ |
+ 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); |
ddorwin
2013/03/12 04:40:06
Can we check is_encrypted or anything?
fgalligan1
2013/03/12 17:20:13
Done.
|
+} |
+ |
+TEST_F(WebMClusterParserTest, ParseBadEncryptedBlock) { |
+ scoped_ptr<Cluster> cluster( |
+ CreateEncryptedCluster(sizeof(encrypted_frame) - 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 |