| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // TODO(jar): Change file name to *_unittest.cc (with double "t'). | |
| 6 | |
| 7 #include <algorithm> | 5 #include <algorithm> |
| 8 #include <string> | 6 #include <string> |
| 9 #include <vector> | 7 #include <vector> |
| 10 | 8 |
| 11 #include "base/logging.h" | 9 #include "base/logging.h" |
| 12 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
| 13 #include "net/base/filter.h" | 11 #include "net/base/filter.h" |
| 14 #include "net/base/sdch_filter.h" | 12 #include "net/base/sdch_filter.h" |
| 15 #include "net/url_request/url_request_http_job.cc" | 13 #include "net/url_request/url_request_http_job.cc" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 dictionary.append("\n"); | 121 dictionary.append("\n"); |
| 124 } | 122 } |
| 125 dictionary.append("\n"); | 123 dictionary.append("\n"); |
| 126 dictionary.append(kTestVcdiffDictionary, sizeof(kTestVcdiffDictionary) - 1); | 124 dictionary.append(kTestVcdiffDictionary, sizeof(kTestVcdiffDictionary) - 1); |
| 127 return dictionary; | 125 return dictionary; |
| 128 } | 126 } |
| 129 | 127 |
| 130 //------------------------------------------------------------------------------ | 128 //------------------------------------------------------------------------------ |
| 131 | 129 |
| 132 TEST_F(SdchFilterTest, BasicBadDictionary) { | 130 TEST_F(SdchFilterTest, BasicBadDictionary) { |
| 133 std::vector<std::string> filters; | 131 std::vector<Filter::FilterType> filter_types; |
| 134 filters.push_back("sdch"); | 132 filter_types.push_back(Filter::FILTER_TYPE_SDCH); |
| 135 const int kInputBufferSize(30); | 133 const int kInputBufferSize(30); |
| 136 char output_buffer[20]; | 134 char output_buffer[20]; |
| 137 scoped_ptr<Filter> filter(Filter::Factory(filters, "missing-mime", | 135 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); |
| 138 kInputBufferSize)); | |
| 139 std::string url_string("http://ignore.com"); | 136 std::string url_string("http://ignore.com"); |
| 140 filter->SetURL(GURL(url_string)); | 137 filter->SetURL(GURL(url_string)); |
| 141 | 138 |
| 142 | 139 |
| 143 // With no input data, try to read output. | 140 // With no input data, try to read output. |
| 144 int output_bytes_or_buffer_size = sizeof(output_buffer); | 141 int output_bytes_or_buffer_size = sizeof(output_buffer); |
| 145 Filter::FilterStatus status = filter->ReadData(output_buffer, | 142 Filter::FilterStatus status = filter->ReadData(output_buffer, |
| 146 &output_bytes_or_buffer_size); | 143 &output_bytes_or_buffer_size); |
| 147 | 144 |
| 148 EXPECT_EQ(0, output_bytes_or_buffer_size); | 145 EXPECT_EQ(0, output_bytes_or_buffer_size); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 const std::string kSampleDomain = "sdchtest.com"; | 215 const std::string kSampleDomain = "sdchtest.com"; |
| 219 std::string dictionary(NewSdchDictionary(kSampleDomain)); | 216 std::string dictionary(NewSdchDictionary(kSampleDomain)); |
| 220 | 217 |
| 221 std::string url_string = "http://" + kSampleDomain; | 218 std::string url_string = "http://" + kSampleDomain; |
| 222 | 219 |
| 223 GURL url(url_string); | 220 GURL url(url_string); |
| 224 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); | 221 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); |
| 225 | 222 |
| 226 std::string compressed(NewSdchCompressedData(dictionary)); | 223 std::string compressed(NewSdchCompressedData(dictionary)); |
| 227 | 224 |
| 228 std::vector<std::string> filters; | 225 std::vector<Filter::FilterType> filter_types; |
| 229 filters.push_back("sdch"); | 226 filter_types.push_back(Filter::FILTER_TYPE_SDCH); |
| 230 | 227 |
| 231 // Decode with a large buffer (larger than test input, or compressed data). | 228 // Decode with a large buffer (larger than test input, or compressed data). |
| 232 const int kInputBufferSize(100); | 229 const int kInputBufferSize(100); |
| 233 scoped_ptr<Filter> filter(Filter::Factory(filters, "missing-mime", | 230 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); |
| 234 kInputBufferSize)); | |
| 235 filter->SetURL(url); | 231 filter->SetURL(url); |
| 236 | 232 |
| 237 size_t feed_block_size = 100; | 233 size_t feed_block_size = 100; |
| 238 size_t output_block_size = 100; | 234 size_t output_block_size = 100; |
| 239 std::string output; | 235 std::string output; |
| 240 EXPECT_TRUE(FilterTestData(compressed, feed_block_size, output_block_size, | 236 EXPECT_TRUE(FilterTestData(compressed, feed_block_size, output_block_size, |
| 241 filter.get(), &output)); | 237 filter.get(), &output)); |
| 242 EXPECT_EQ(output, expanded_); | 238 EXPECT_EQ(output, expanded_); |
| 243 | 239 |
| 244 // Decode with really small buffers (size 1) to check for edge effects. | 240 // Decode with really small buffers (size 1) to check for edge effects. |
| 245 filter.reset((Filter::Factory(filters, "missing-mime", kInputBufferSize))); | 241 filter.reset((Filter::Factory(filter_types, kInputBufferSize))); |
| 246 filter->SetURL(url); | 242 filter->SetURL(url); |
| 247 | 243 |
| 248 feed_block_size = 1; | 244 feed_block_size = 1; |
| 249 output_block_size = 1; | 245 output_block_size = 1; |
| 250 output.clear(); | 246 output.clear(); |
| 251 EXPECT_TRUE(FilterTestData(compressed, feed_block_size, output_block_size, | 247 EXPECT_TRUE(FilterTestData(compressed, feed_block_size, output_block_size, |
| 252 filter.get(), &output)); | 248 filter.get(), &output)); |
| 253 EXPECT_EQ(output, expanded_); | 249 EXPECT_EQ(output, expanded_); |
| 254 } | 250 } |
| 255 | 251 |
| 256 TEST_F(SdchFilterTest, CrossDomainDictionaryUse) { | 252 TEST_F(SdchFilterTest, CrossDomainDictionaryUse) { |
| 257 // Construct a valid SDCH dictionary from a VCDIFF dictionary. | 253 // Construct a valid SDCH dictionary from a VCDIFF dictionary. |
| 258 const std::string kSampleDomain = "sdchtest.com"; | 254 const std::string kSampleDomain = "sdchtest.com"; |
| 259 std::string dictionary(NewSdchDictionary(kSampleDomain)); | 255 std::string dictionary(NewSdchDictionary(kSampleDomain)); |
| 260 | 256 |
| 261 std::string url_string = "http://" + kSampleDomain; | 257 std::string url_string = "http://" + kSampleDomain; |
| 262 | 258 |
| 263 GURL url(url_string); | 259 GURL url(url_string); |
| 264 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); | 260 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); |
| 265 | 261 |
| 266 std::string compressed(NewSdchCompressedData(dictionary)); | 262 std::string compressed(NewSdchCompressedData(dictionary)); |
| 267 | 263 |
| 268 std::vector<std::string> filters; | 264 std::vector<Filter::FilterType> filter_types; |
| 269 filters.push_back("sdch"); | 265 filter_types.push_back(Filter::FILTER_TYPE_SDCH); |
| 270 const int kInputBufferSize(100); | 266 const int kInputBufferSize(100); |
| 271 | 267 |
| 272 // Decode with content arriving from the "wrong" domain. | 268 // Decode with content arriving from the "wrong" domain. |
| 273 // This tests CanSet() in the sdch_manager_-> | 269 // This tests CanSet() in the sdch_manager_-> |
| 274 scoped_ptr<Filter> filter((Filter::Factory(filters, "missing-mime", | 270 scoped_ptr<Filter> filter((Filter::Factory(filter_types, kInputBufferSize))); |
| 275 kInputBufferSize))); | |
| 276 GURL wrong_domain_url("http://www.wrongdomain.com"); | 271 GURL wrong_domain_url("http://www.wrongdomain.com"); |
| 277 filter->SetURL(wrong_domain_url); | 272 filter->SetURL(wrong_domain_url); |
| 278 | 273 |
| 279 size_t feed_block_size = 100; | 274 size_t feed_block_size = 100; |
| 280 size_t output_block_size = 100; | 275 size_t output_block_size = 100; |
| 281 std::string output; | 276 std::string output; |
| 282 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size, | 277 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size, |
| 283 filter.get(), &output)); | 278 filter.get(), &output)); |
| 284 EXPECT_EQ(output.size(), 0u); // No output written. | 279 EXPECT_EQ(output.size(), 0u); // No output written. |
| 285 | 280 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 300 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); | 295 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); |
| 301 | 296 |
| 302 // Create a dictionary with a path restriction, by prefixing dictionary. | 297 // Create a dictionary with a path restriction, by prefixing dictionary. |
| 303 const std::string path("/special_path/bin"); | 298 const std::string path("/special_path/bin"); |
| 304 std::string dictionary_with_path("Path: " + path + "\n"); | 299 std::string dictionary_with_path("Path: " + path + "\n"); |
| 305 dictionary_with_path.append(dictionary); | 300 dictionary_with_path.append(dictionary); |
| 306 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_with_path, url)); | 301 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_with_path, url)); |
| 307 | 302 |
| 308 std::string compressed_for_path(NewSdchCompressedData(dictionary_with_path)); | 303 std::string compressed_for_path(NewSdchCompressedData(dictionary_with_path)); |
| 309 | 304 |
| 310 std::vector<std::string> filters; | 305 std::vector<Filter::FilterType> filter_types; |
| 311 filters.push_back("sdch"); | 306 filter_types.push_back(Filter::FILTER_TYPE_SDCH); |
| 312 const int kInputBufferSize(100); | 307 const int kInputBufferSize(100); |
| 313 | 308 |
| 314 // Test decode the path data, arriving from a valid path. | 309 // Test decode the path data, arriving from a valid path. |
| 315 scoped_ptr<Filter> filter((Filter::Factory(filters, "missing-mime", | 310 scoped_ptr<Filter> filter((Filter::Factory(filter_types, kInputBufferSize))); |
| 316 kInputBufferSize))); | |
| 317 filter->SetURL(GURL(url_string + path)); | 311 filter->SetURL(GURL(url_string + path)); |
| 318 | 312 |
| 319 size_t feed_block_size = 100; | 313 size_t feed_block_size = 100; |
| 320 size_t output_block_size = 100; | 314 size_t output_block_size = 100; |
| 321 std::string output; | 315 std::string output; |
| 322 | 316 |
| 323 EXPECT_TRUE(FilterTestData(compressed_for_path, feed_block_size, | 317 EXPECT_TRUE(FilterTestData(compressed_for_path, feed_block_size, |
| 324 output_block_size, filter.get(), &output)); | 318 output_block_size, filter.get(), &output)); |
| 325 EXPECT_EQ(output, expanded_); | 319 EXPECT_EQ(output, expanded_); |
| 326 | 320 |
| 327 // Test decode the path data, arriving from a invalid path. | 321 // Test decode the path data, arriving from a invalid path. |
| 328 filter.reset((Filter::Factory(filters, "missing-mime", kInputBufferSize))); | 322 filter.reset((Filter::Factory(filter_types, kInputBufferSize))); |
| 329 filter->SetURL(GURL(url_string)); | 323 filter->SetURL(GURL(url_string)); |
| 330 | 324 |
| 331 feed_block_size = 100; | 325 feed_block_size = 100; |
| 332 output_block_size = 100; | 326 output_block_size = 100; |
| 333 output.clear(); | 327 output.clear(); |
| 334 EXPECT_FALSE(FilterTestData(compressed_for_path, feed_block_size, | 328 EXPECT_FALSE(FilterTestData(compressed_for_path, feed_block_size, |
| 335 output_block_size, filter.get(), &output)); | 329 output_block_size, filter.get(), &output)); |
| 336 EXPECT_EQ(output.size(), 0u); // No output written. | 330 EXPECT_EQ(output.size(), 0u); // No output written. |
| 337 | 331 |
| 338 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); | 332 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 354 // Create a dictionary with a port restriction, by prefixing old dictionary. | 348 // Create a dictionary with a port restriction, by prefixing old dictionary. |
| 355 const std::string port("502"); | 349 const std::string port("502"); |
| 356 std::string dictionary_with_port("Port: " + port + "\n"); | 350 std::string dictionary_with_port("Port: " + port + "\n"); |
| 357 dictionary_with_port.append("Port: 80\n"); // Add default port. | 351 dictionary_with_port.append("Port: 80\n"); // Add default port. |
| 358 dictionary_with_port.append(dictionary); | 352 dictionary_with_port.append(dictionary); |
| 359 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_with_port, | 353 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_with_port, |
| 360 GURL(url_string + ":" + port))); | 354 GURL(url_string + ":" + port))); |
| 361 | 355 |
| 362 std::string compressed_for_port(NewSdchCompressedData(dictionary_with_port)); | 356 std::string compressed_for_port(NewSdchCompressedData(dictionary_with_port)); |
| 363 | 357 |
| 364 std::vector<std::string> filters; | 358 std::vector<Filter::FilterType> filter_types; |
| 365 filters.push_back("sdch"); | 359 filter_types.push_back(Filter::FILTER_TYPE_SDCH); |
| 366 const int kInputBufferSize(100); | 360 const int kInputBufferSize(100); |
| 367 | 361 |
| 368 // Test decode the port data, arriving from a valid port. | 362 // Test decode the port data, arriving from a valid port. |
| 369 scoped_ptr<Filter> filter((Filter::Factory(filters, "missing-mime", | 363 scoped_ptr<Filter> filter((Filter::Factory(filter_types, kInputBufferSize))); |
| 370 kInputBufferSize))); | |
| 371 filter->SetURL(GURL(url_string + ":" + port)); | 364 filter->SetURL(GURL(url_string + ":" + port)); |
| 372 | 365 |
| 373 size_t feed_block_size = 100; | 366 size_t feed_block_size = 100; |
| 374 size_t output_block_size = 100; | 367 size_t output_block_size = 100; |
| 375 std::string output; | 368 std::string output; |
| 376 EXPECT_TRUE(FilterTestData(compressed_for_port, feed_block_size, | 369 EXPECT_TRUE(FilterTestData(compressed_for_port, feed_block_size, |
| 377 output_block_size, filter.get(), &output)); | 370 output_block_size, filter.get(), &output)); |
| 378 EXPECT_EQ(output, expanded_); | 371 EXPECT_EQ(output, expanded_); |
| 379 | 372 |
| 380 // Test decode the port data, arriving from a valid (default) port. | 373 // Test decode the port data, arriving from a valid (default) port. |
| 381 filter.reset((Filter::Factory(filters, "missing-mime", kInputBufferSize))); | 374 filter.reset((Filter::Factory(filter_types, kInputBufferSize))); |
| 382 filter->SetURL(GURL(url_string)); // Default port. | 375 filter->SetURL(GURL(url_string)); // Default port. |
| 383 | 376 |
| 384 feed_block_size = 100; | 377 feed_block_size = 100; |
| 385 output_block_size = 100; | 378 output_block_size = 100; |
| 386 output.clear(); | 379 output.clear(); |
| 387 EXPECT_TRUE(FilterTestData(compressed_for_port, feed_block_size, | 380 EXPECT_TRUE(FilterTestData(compressed_for_port, feed_block_size, |
| 388 output_block_size, filter.get(), &output)); | 381 output_block_size, filter.get(), &output)); |
| 389 EXPECT_EQ(output, expanded_); | 382 EXPECT_EQ(output, expanded_); |
| 390 | 383 |
| 391 // Test decode the port data, arriving from a invalid port. | 384 // Test decode the port data, arriving from a invalid port. |
| 392 filter.reset((Filter::Factory(filters, "missing-mime", kInputBufferSize))); | 385 filter.reset((Filter::Factory(filter_types, kInputBufferSize))); |
| 393 filter->SetURL(GURL(url_string + ":" + port + "1")); | 386 filter->SetURL(GURL(url_string + ":" + port + "1")); |
| 394 | 387 |
| 395 feed_block_size = 100; | 388 feed_block_size = 100; |
| 396 output_block_size = 100; | 389 output_block_size = 100; |
| 397 output.clear(); | 390 output.clear(); |
| 398 EXPECT_FALSE(FilterTestData(compressed_for_port, feed_block_size, | 391 EXPECT_FALSE(FilterTestData(compressed_for_port, feed_block_size, |
| 399 output_block_size, filter.get(), &output)); | 392 output_block_size, filter.get(), &output)); |
| 400 EXPECT_EQ(output.size(), 0u); // No output written. | 393 EXPECT_EQ(output.size(), 0u); // No output written. |
| 401 | 394 |
| 402 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); | 395 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 | 466 |
| 474 GURL url(url_string); | 467 GURL url(url_string); |
| 475 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); | 468 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); |
| 476 | 469 |
| 477 std::string sdch_compressed(NewSdchCompressedData(dictionary)); | 470 std::string sdch_compressed(NewSdchCompressedData(dictionary)); |
| 478 | 471 |
| 479 // Use Gzip to compress the sdch sdch_compressed data. | 472 // Use Gzip to compress the sdch sdch_compressed data. |
| 480 std::string gzip_compressed_sdch = gzip_compress(sdch_compressed); | 473 std::string gzip_compressed_sdch = gzip_compress(sdch_compressed); |
| 481 | 474 |
| 482 // Construct a chained filter. | 475 // Construct a chained filter. |
| 483 std::vector<std::string> filters; | 476 std::vector<Filter::FilterType> filter_types; |
| 484 filters.push_back("sdch"); | 477 filter_types.push_back(Filter::FILTER_TYPE_SDCH); |
| 485 filters.push_back("gzip"); | 478 filter_types.push_back(Filter::FILTER_TYPE_GZIP); |
| 486 | 479 |
| 487 // First try with a large buffer (larger than test input, or compressed data). | 480 // First try with a large buffer (larger than test input, or compressed data). |
| 488 const int kInputBufferSize(100); | 481 const int kInputBufferSize(100); |
| 489 scoped_ptr<Filter> filter(Filter::Factory(filters, "missing-mime", | 482 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); |
| 490 kInputBufferSize)); | |
| 491 filter->SetURL(url); | 483 filter->SetURL(url); |
| 492 | 484 |
| 493 // Verify that chained filter is waiting for data. | 485 // Verify that chained filter is waiting for data. |
| 494 char tiny_output_buffer[10]; | 486 char tiny_output_buffer[10]; |
| 495 int tiny_output_size = sizeof(tiny_output_buffer); | 487 int tiny_output_size = sizeof(tiny_output_buffer); |
| 496 EXPECT_EQ(Filter::FILTER_NEED_MORE_DATA, | 488 EXPECT_EQ(Filter::FILTER_NEED_MORE_DATA, |
| 497 filter->ReadData(tiny_output_buffer, &tiny_output_size)); | 489 filter->ReadData(tiny_output_buffer, &tiny_output_size)); |
| 498 | 490 |
| 499 size_t feed_block_size = 100; | 491 size_t feed_block_size = 100; |
| 500 size_t output_block_size = 100; | 492 size_t output_block_size = 100; |
| 501 std::string output; | 493 std::string output; |
| 502 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, | 494 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, |
| 503 output_block_size, filter.get(), &output)); | 495 output_block_size, filter.get(), &output)); |
| 504 EXPECT_EQ(output, expanded_); | 496 EXPECT_EQ(output, expanded_); |
| 505 | 497 |
| 506 // Next try with a tiny buffer to cover edge effects. | 498 // Next try with a tiny buffer to cover edge effects. |
| 507 filter.reset(Filter::Factory(filters, "missing-mime", kInputBufferSize)); | 499 filter.reset(Filter::Factory(filter_types, kInputBufferSize)); |
| 508 filter->SetURL(url); | 500 filter->SetURL(url); |
| 509 | 501 |
| 510 feed_block_size = 1; | 502 feed_block_size = 1; |
| 511 output_block_size = 1; | 503 output_block_size = 1; |
| 512 output.clear(); | 504 output.clear(); |
| 513 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, | 505 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, |
| 514 output_block_size, filter.get(), &output)); | 506 output_block_size, filter.get(), &output)); |
| 515 EXPECT_EQ(output, expanded_); | 507 EXPECT_EQ(output, expanded_); |
| 516 } | 508 } |
| 517 | 509 |
| 518 TEST_F(SdchFilterTest, DefaultGzipIfSdch) { | 510 TEST_F(SdchFilterTest, DefaultGzipIfSdch) { |
| 519 // Construct a valid SDCH dictionary from a VCDIFF dictionary. | 511 // Construct a valid SDCH dictionary from a VCDIFF dictionary. |
| 520 const std::string kSampleDomain = "sdchtest.com"; | 512 const std::string kSampleDomain = "sdchtest.com"; |
| 521 std::string dictionary(NewSdchDictionary(kSampleDomain)); | 513 std::string dictionary(NewSdchDictionary(kSampleDomain)); |
| 522 | 514 |
| 523 std::string url_string = "http://" + kSampleDomain; | 515 std::string url_string = "http://" + kSampleDomain; |
| 524 | 516 |
| 525 GURL url(url_string); | 517 GURL url(url_string); |
| 526 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); | 518 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); |
| 527 | 519 |
| 528 std::string sdch_compressed(NewSdchCompressedData(dictionary)); | 520 std::string sdch_compressed(NewSdchCompressedData(dictionary)); |
| 529 | 521 |
| 530 // Use Gzip to compress the sdch sdch_compressed data. | 522 // Use Gzip to compress the sdch sdch_compressed data. |
| 531 std::string gzip_compressed_sdch = gzip_compress(sdch_compressed); | 523 std::string gzip_compressed_sdch = gzip_compress(sdch_compressed); |
| 532 | 524 |
| 533 // Only claim to have sdch content, but really usethe gzipped sdch content. | 525 // Only claim to have sdch content, but really use the gzipped sdch content. |
| 534 // System should automatically add the missing (optional) gzip. | 526 // System should automatically add the missing (optional) gzip. |
| 535 std::vector<std::string> filters; | 527 std::vector<Filter::FilterType> filter_types; |
| 536 filters.push_back("sdch"); | 528 filter_types.push_back(Filter::FILTER_TYPE_SDCH); |
| 529 Filter::FixupEncodingTypes(true, "anything/mime", &filter_types); |
| 537 | 530 |
| 538 // First try with a large buffer (larger than test input, or compressed data). | 531 // First try with a large buffer (larger than test input, or compressed data). |
| 539 const int kInputBufferSize(100); | 532 const int kInputBufferSize(100); |
| 540 scoped_ptr<Filter> filter(Filter::Factory(filters, "missing-mime", | 533 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); |
| 541 kInputBufferSize)); | |
| 542 filter->SetURL(url); | 534 filter->SetURL(url); |
| 543 | 535 |
| 544 // Verify that chained filter is waiting for data. | 536 // Verify that chained filter is waiting for data. |
| 545 char tiny_output_buffer[10]; | 537 char tiny_output_buffer[10]; |
| 546 int tiny_output_size = sizeof(tiny_output_buffer); | 538 int tiny_output_size = sizeof(tiny_output_buffer); |
| 547 EXPECT_EQ(Filter::FILTER_NEED_MORE_DATA, | 539 EXPECT_EQ(Filter::FILTER_NEED_MORE_DATA, |
| 548 filter->ReadData(tiny_output_buffer, &tiny_output_size)); | 540 filter->ReadData(tiny_output_buffer, &tiny_output_size)); |
| 549 | 541 |
| 550 size_t feed_block_size = 100; | 542 size_t feed_block_size = 100; |
| 551 size_t output_block_size = 100; | 543 size_t output_block_size = 100; |
| 552 std::string output; | 544 std::string output; |
| 553 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, | 545 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, |
| 554 output_block_size, filter.get(), &output)); | 546 output_block_size, filter.get(), &output)); |
| 555 EXPECT_EQ(output, expanded_); | 547 EXPECT_EQ(output, expanded_); |
| 556 | 548 |
| 557 // Next try with a tiny buffer to cover edge effects. | 549 // Next try with a tiny buffer to cover edge effects. |
| 558 filter.reset(Filter::Factory(filters, "missing-mime", kInputBufferSize)); | 550 filter.reset(Filter::Factory(filter_types, kInputBufferSize)); |
| 559 filter->SetURL(url); | 551 filter->SetURL(url); |
| 560 | 552 |
| 561 feed_block_size = 1; | 553 feed_block_size = 1; |
| 562 output_block_size = 1; | 554 output_block_size = 1; |
| 563 output.clear(); | 555 output.clear(); |
| 564 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, | 556 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, |
| 565 output_block_size, filter.get(), &output)); | 557 output_block_size, filter.get(), &output)); |
| 566 EXPECT_EQ(output, expanded_); | 558 EXPECT_EQ(output, expanded_); |
| 567 } | 559 } |
| 568 | 560 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 582 GURL google_url("http://www.google.com"); | 574 GURL google_url("http://www.google.com"); |
| 583 | 575 |
| 584 SdchManager::BlacklistDomain(test_url); | 576 SdchManager::BlacklistDomain(test_url); |
| 585 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(test_url)); | 577 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(test_url)); |
| 586 EXPECT_TRUE(SdchManager::Global()->IsInSupportedDomain(google_url)); | 578 EXPECT_TRUE(SdchManager::Global()->IsInSupportedDomain(google_url)); |
| 587 | 579 |
| 588 SdchManager::BlacklistDomain(google_url); | 580 SdchManager::BlacklistDomain(google_url); |
| 589 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(test_url)); | 581 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(test_url)); |
| 590 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(google_url)); | 582 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(google_url)); |
| 591 } | 583 } |
| 592 | |
| 593 | |
| 594 // TODO(jar): move this sort of test into filter_unittest.cc, or | |
| 595 // url_request_http_job_unittest.cc if that is more applicable after refactoring | |
| 596 // to use array of enums rather than array of strings to express content | |
| 597 // encodings. | |
| 598 TEST_F(SdchFilterTest, ContentTypeId) { | |
| 599 // Check for basic translation of Content-Encoding, including case variations. | |
| 600 EXPECT_EQ(Filter::FILTER_TYPE_DEFLATE, | |
| 601 Filter::ConvertEncodingToType("deflate", "nothing")); | |
| 602 EXPECT_EQ(Filter::FILTER_TYPE_DEFLATE, | |
| 603 Filter::ConvertEncodingToType("deflAte", "nothing")); | |
| 604 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, | |
| 605 Filter::ConvertEncodingToType("gzip", "nothing")); | |
| 606 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, | |
| 607 Filter::ConvertEncodingToType("GzIp", "nothing")); | |
| 608 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, | |
| 609 Filter::ConvertEncodingToType("x-gzip", "nothing")); | |
| 610 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, | |
| 611 Filter::ConvertEncodingToType("X-GzIp", "nothing")); | |
| 612 EXPECT_EQ(Filter::FILTER_TYPE_BZIP2, | |
| 613 Filter::ConvertEncodingToType("bzip2", "nothing")); | |
| 614 EXPECT_EQ(Filter::FILTER_TYPE_BZIP2, | |
| 615 Filter::ConvertEncodingToType("BZiP2", "nothing")); | |
| 616 EXPECT_EQ(Filter::FILTER_TYPE_BZIP2, | |
| 617 Filter::ConvertEncodingToType("x-bzip2", "nothing")); | |
| 618 EXPECT_EQ(Filter::FILTER_TYPE_BZIP2, | |
| 619 Filter::ConvertEncodingToType("X-BZiP2", "nothing")); | |
| 620 EXPECT_EQ(Filter::FILTER_TYPE_SDCH, | |
| 621 Filter::ConvertEncodingToType("sdch", "nothing")); | |
| 622 EXPECT_EQ(Filter::FILTER_TYPE_SDCH, | |
| 623 Filter::ConvertEncodingToType("sDcH", "nothing")); | |
| 624 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, | |
| 625 Filter::ConvertEncodingToType("weird", "nothing")); | |
| 626 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, | |
| 627 Filter::ConvertEncodingToType("strange", "nothing")); | |
| 628 | |
| 629 // Check to see that apache bug (marking things as gzipped because of their | |
| 630 // on-disk file type) is ignored. | |
| 631 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, | |
| 632 Filter::ConvertEncodingToType("gzip", "application/x-gzip")); | |
| 633 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, | |
| 634 Filter::ConvertEncodingToType("gzip", "application/gzip")); | |
| 635 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, | |
| 636 Filter::ConvertEncodingToType("gzip", "application/x-gunzip")); | |
| 637 | |
| 638 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, | |
| 639 Filter::ConvertEncodingToType("x-gzip", "application/x-gzip")); | |
| 640 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, | |
| 641 Filter::ConvertEncodingToType("x-gzip", "application/gzip")); | |
| 642 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, | |
| 643 Filter::ConvertEncodingToType("x-gzip", "application/x-gunzip")); | |
| 644 } | |
| OLD | NEW |