| Index: net/filter/sdch_source_stream_unittest.cc
|
| diff --git a/net/filter/sdch_source_stream_unittest.cc b/net/filter/sdch_source_stream_unittest.cc
|
| index c441d73201facd30020b6d4614e7887d8483e0b8..79ea606ccb74c2eef02f6043e009e65e0bf009b0 100644
|
| --- a/net/filter/sdch_source_stream_unittest.cc
|
| +++ b/net/filter/sdch_source_stream_unittest.cc
|
| @@ -543,4 +543,56 @@ TEST_P(SdchSourceStreamTest, FilterChaining) {
|
| }
|
| }
|
|
|
| +// Test that if TYPE_SDCH_POSSIBLE and TYPE_GZIP_FALLBACK are added to a
|
| +// gzipped content, the content can be decoded without problem.
|
| +TEST_P(SdchSourceStreamTest, PossibleSdchActuallyGzip) {
|
| + int out_buffer_sizes[] = {kBufferSize, kSmallBufferSize};
|
| + for (auto out_buffer_size : out_buffer_sizes) {
|
| + char plain_data[] = "Hello, World!";
|
| + unsigned char gzip_data[] = {
|
| + // From:
|
| + // echo -n 'Hello, World!' | gzip | xxd -i | sed -e 's/^/ /'
|
| + // with the 8 footer bytes removed.
|
| + 0x1f, 0x8b, 0x08, 0x00, 0x2b, 0x02, 0x84, 0x55, 0x00,
|
| + 0x03, 0xf3, 0x48, 0xcd, 0xc9, 0xc9, 0xd7, 0x51, 0x08,
|
| + 0xcf, 0x2f, 0xca, 0x49, 0x51, 0x04, 0x00};
|
| + SetErrorRecovery(SdchSourceStream::Delegate::PASS_THROUGH, std::string());
|
| + Init();
|
| + std::unique_ptr<MockDelegate> delegate = GetNewDelegate();
|
| + MockDelegate* raw_delegate_pointer = delegate.get();
|
| + MockSourceStream* source = new MockSourceStream();
|
| + source->AddReadResult(reinterpret_cast<char*>(gzip_data), sizeof(gzip_data),
|
| + OK, GetParam());
|
| + source->AddReadResult(
|
| + reinterpret_cast<char*>(gzip_data) + sizeof(gzip_data), 0, OK,
|
| + MockSourceStream::SYNC);
|
| + std::unique_ptr<GzipSourceStream> gzip_source = GzipSourceStream::Create(
|
| + base::WrapUnique(source), SourceStream::TYPE_GZIP);
|
| + std::unique_ptr<GzipSourceStream> gzip_fallback_source =
|
| + GzipSourceStream::Create(std::move(gzip_source),
|
| + SourceStream::TYPE_GZIP_FALLBACK);
|
| + std::unique_ptr<SdchSourceStream> sdch_possible(new SdchSourceStream(
|
| + std::move(gzip_fallback_source), std::move(delegate),
|
| + SourceStream::TYPE_SDCH_POSSIBLE));
|
| + std::string actual_output;
|
| + while (true) {
|
| + TestCompletionCallback callback;
|
| + int rv = sdch_possible->Read(out_buffer(), out_buffer_size,
|
| + callback.callback());
|
| + if (rv == ERR_IO_PENDING)
|
| + rv = CompleteReadIfAsync(rv, &callback, source);
|
| + if (rv == OK)
|
| + break;
|
| + ASSERT_GT(rv, OK);
|
| + if (out_buffer_size == kSmallBufferSize)
|
| + EXPECT_GE(kSmallBufferSize, static_cast<size_t>(rv));
|
| +
|
| + actual_output.append(out_data(), rv);
|
| + }
|
| + EXPECT_TRUE(raw_delegate_pointer->dictionary_id_error_handled());
|
| + EXPECT_EQ(plain_data, actual_output);
|
| + EXPECT_EQ("GZIP,GZIP_FALLBACK,SDCH_POSSIBLE", sdch_possible->Description());
|
| + }
|
| +}
|
| +
|
| } // namespace net
|
|
|