Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(381)

Side by Side Diff: net/base/sdch_filter_unittest.cc

Issue 40138: Use FilterContext to allow filters to access URLRequestJob data... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include <limits.h> 5 #include <limits.h>
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/scoped_ptr.h" 12 #include "base/scoped_ptr.h"
13 #include "net/base/filter.h" 13 #include "net/base/filter.h"
14 #include "net/base/filter_unittest.h"
14 #include "net/base/sdch_filter.h" 15 #include "net/base/sdch_filter.h"
15 #include "net/url_request/url_request_http_job.cc" 16 #include "net/url_request/url_request_http_job.cc"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 #include "third_party/zlib/zlib.h" 18 #include "third_party/zlib/zlib.h"
18 19
19 //------------------------------------------------------------------------------ 20 //------------------------------------------------------------------------------
20 // Provide sample data and compression results with a sample VCDIFF dictionary. 21 // Provide sample data and compression results with a sample VCDIFF dictionary.
21 // Note an SDCH dictionary has extra meta-data before the VCDIFF dictionary. 22 // Note an SDCH dictionary has extra meta-data before the VCDIFF dictionary.
22 static const char kTestVcdiffDictionary[] = "DictionaryFor" 23 static const char kTestVcdiffDictionary[] = "DictionaryFor"
23 "SdchCompression1SdchCompression2SdchCompression3SdchCompression\n"; 24 "SdchCompression1SdchCompression2SdchCompression3SdchCompression\n";
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 return dictionary; 145 return dictionary;
145 } 146 }
146 147
147 //------------------------------------------------------------------------------ 148 //------------------------------------------------------------------------------
148 149
149 TEST_F(SdchFilterTest, BasicBadDictionary) { 150 TEST_F(SdchFilterTest, BasicBadDictionary) {
150 std::vector<Filter::FilterType> filter_types; 151 std::vector<Filter::FilterType> filter_types;
151 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 152 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
152 const int kInputBufferSize(30); 153 const int kInputBufferSize(30);
153 char output_buffer[20]; 154 char output_buffer[20];
154 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); 155 MockFilterContext filter_context(kInputBufferSize);
155 std::string url_string("http://ignore.com"); 156 std::string url_string("http://ignore.com");
156 filter->SetURL(GURL(url_string)); 157 filter_context.SetURL(GURL(url_string));
158 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
157 159
158 160
159 // With no input data, try to read output. 161 // With no input data, try to read output.
160 int output_bytes_or_buffer_size = sizeof(output_buffer); 162 int output_bytes_or_buffer_size = sizeof(output_buffer);
161 Filter::FilterStatus status = filter->ReadData(output_buffer, 163 Filter::FilterStatus status = filter->ReadData(output_buffer,
162 &output_bytes_or_buffer_size); 164 &output_bytes_or_buffer_size);
163 165
164 EXPECT_EQ(0, output_bytes_or_buffer_size); 166 EXPECT_EQ(0, output_bytes_or_buffer_size);
165 EXPECT_EQ(Filter::FILTER_NEED_MORE_DATA, status); 167 EXPECT_EQ(Filter::FILTER_NEED_MORE_DATA, status);
166 168
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 GURL url(url_string); 241 GURL url(url_string);
240 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); 242 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url));
241 243
242 std::string compressed(NewSdchCompressedData(dictionary)); 244 std::string compressed(NewSdchCompressedData(dictionary));
243 245
244 std::vector<Filter::FilterType> filter_types; 246 std::vector<Filter::FilterType> filter_types;
245 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 247 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
246 248
247 // Decode with a large buffer (larger than test input, or compressed data). 249 // Decode with a large buffer (larger than test input, or compressed data).
248 const int kInputBufferSize(100); 250 const int kInputBufferSize(100);
249 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); 251 MockFilterContext filter_context(kInputBufferSize);
250 filter->SetURL(url); 252 filter_context.SetURL(url);
253
254 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
251 255
252 size_t feed_block_size = 100; 256 size_t feed_block_size = 100;
253 size_t output_block_size = 100; 257 size_t output_block_size = 100;
254 std::string output; 258 std::string output;
255 EXPECT_TRUE(FilterTestData(compressed, feed_block_size, output_block_size, 259 EXPECT_TRUE(FilterTestData(compressed, feed_block_size, output_block_size,
256 filter.get(), &output)); 260 filter.get(), &output));
257 EXPECT_EQ(output, expanded_); 261 EXPECT_EQ(output, expanded_);
258 262
259 // Decode with really small buffers (size 1) to check for edge effects. 263 // Decode with really small buffers (size 1) to check for edge effects.
260 filter.reset((Filter::Factory(filter_types, kInputBufferSize))); 264 filter.reset((Filter::Factory(filter_types, filter_context)));
261 filter->SetURL(url);
262 265
263 feed_block_size = 1; 266 feed_block_size = 1;
264 output_block_size = 1; 267 output_block_size = 1;
265 output.clear(); 268 output.clear();
266 EXPECT_TRUE(FilterTestData(compressed, feed_block_size, output_block_size, 269 EXPECT_TRUE(FilterTestData(compressed, feed_block_size, output_block_size,
267 filter.get(), &output)); 270 filter.get(), &output));
268 EXPECT_EQ(output, expanded_); 271 EXPECT_EQ(output, expanded_);
269 } 272 }
270 273
271 TEST_F(SdchFilterTest, NoDecodeHttps) { 274 TEST_F(SdchFilterTest, NoDecodeHttps) {
272 // Construct a valid SDCH dictionary from a VCDIFF dictionary. 275 // Construct a valid SDCH dictionary from a VCDIFF dictionary.
273 const std::string kSampleDomain = "sdchtest.com"; 276 const std::string kSampleDomain = "sdchtest.com";
274 std::string dictionary(NewSdchDictionary(kSampleDomain)); 277 std::string dictionary(NewSdchDictionary(kSampleDomain));
275 278
276 std::string url_string = "http://" + kSampleDomain; 279 std::string url_string = "http://" + kSampleDomain;
277 280
278 GURL url(url_string); 281 GURL url(url_string);
279 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); 282 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url));
280 283
281 std::string compressed(NewSdchCompressedData(dictionary)); 284 std::string compressed(NewSdchCompressedData(dictionary));
282 285
283 std::vector<Filter::FilterType> filter_types; 286 std::vector<Filter::FilterType> filter_types;
284 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 287 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
285 288
286 const int kInputBufferSize(100); 289 const int kInputBufferSize(100);
287 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); 290 MockFilterContext filter_context(kInputBufferSize);
291 filter_context.SetURL(GURL("https://" + kSampleDomain));
292 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
293
288 const size_t feed_block_size(100); 294 const size_t feed_block_size(100);
289 const size_t output_block_size(100); 295 const size_t output_block_size(100);
290 std::string output; 296 std::string output;
291 297
292 filter->SetURL(GURL("https://" + kSampleDomain));
293 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size, 298 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size,
294 filter.get(), &output)); 299 filter.get(), &output));
295 } 300 }
296 301
297 // Current failsafe TODO/hack refuses to decode any content that doesn't use 302 // Current failsafe TODO/hack refuses to decode any content that doesn't use
298 // http as the scheme (see use of DICTIONARY_SELECTED_FOR_NON_HTTP). 303 // http as the scheme (see use of DICTIONARY_SELECTED_FOR_NON_HTTP).
299 // The following tests this blockage. Note that blacklisting results, so we 304 // The following tests this blockage. Note that blacklisting results, so we
300 // we need separate tests for each of these. 305 // we need separate tests for each of these.
301 TEST_F(SdchFilterTest, NoDecodeFtp) { 306 TEST_F(SdchFilterTest, NoDecodeFtp) {
302 // Construct a valid SDCH dictionary from a VCDIFF dictionary. 307 // Construct a valid SDCH dictionary from a VCDIFF dictionary.
303 const std::string kSampleDomain = "sdchtest.com"; 308 const std::string kSampleDomain = "sdchtest.com";
304 std::string dictionary(NewSdchDictionary(kSampleDomain)); 309 std::string dictionary(NewSdchDictionary(kSampleDomain));
305 310
306 std::string url_string = "http://" + kSampleDomain; 311 std::string url_string = "http://" + kSampleDomain;
307 312
308 GURL url(url_string); 313 GURL url(url_string);
309 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); 314 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url));
310 315
311 std::string compressed(NewSdchCompressedData(dictionary)); 316 std::string compressed(NewSdchCompressedData(dictionary));
312 317
313 std::vector<Filter::FilterType> filter_types; 318 std::vector<Filter::FilterType> filter_types;
314 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 319 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
315 320
316 const int kInputBufferSize(100); 321 const int kInputBufferSize(100);
317 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); 322 MockFilterContext filter_context(kInputBufferSize);
323 filter_context.SetURL(GURL("ftp://" + kSampleDomain));
324 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
325
318 const size_t feed_block_size(100); 326 const size_t feed_block_size(100);
319 const size_t output_block_size(100); 327 const size_t output_block_size(100);
320 std::string output; 328 std::string output;
321 329
322 filter->SetURL(GURL("ftp://" + kSampleDomain));
323 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size, 330 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size,
324 filter.get(), &output)); 331 filter.get(), &output));
325 } 332 }
326 333
327 TEST_F(SdchFilterTest, NoDecodeFileColon) { 334 TEST_F(SdchFilterTest, NoDecodeFileColon) {
328 // Construct a valid SDCH dictionary from a VCDIFF dictionary. 335 // Construct a valid SDCH dictionary from a VCDIFF dictionary.
329 const std::string kSampleDomain = "sdchtest.com"; 336 const std::string kSampleDomain = "sdchtest.com";
330 std::string dictionary(NewSdchDictionary(kSampleDomain)); 337 std::string dictionary(NewSdchDictionary(kSampleDomain));
331 338
332 std::string url_string = "http://" + kSampleDomain; 339 std::string url_string = "http://" + kSampleDomain;
333 340
334 GURL url(url_string); 341 GURL url(url_string);
335 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); 342 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url));
336 343
337 std::string compressed(NewSdchCompressedData(dictionary)); 344 std::string compressed(NewSdchCompressedData(dictionary));
338 345
339 std::vector<Filter::FilterType> filter_types; 346 std::vector<Filter::FilterType> filter_types;
340 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 347 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
341 348
342 const int kInputBufferSize(100); 349 const int kInputBufferSize(100);
343 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); 350 MockFilterContext filter_context(kInputBufferSize);
351 filter_context.SetURL(GURL("file://" + kSampleDomain));
352 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
353
344 const size_t feed_block_size(100); 354 const size_t feed_block_size(100);
345 const size_t output_block_size(100); 355 const size_t output_block_size(100);
346 std::string output; 356 std::string output;
347 357
348 filter->SetURL(GURL("file://" + kSampleDomain));
349 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size, 358 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size,
350 filter.get(), &output)); 359 filter.get(), &output));
351 } 360 }
352 361
353 TEST_F(SdchFilterTest, NoDecodeAboutColon) { 362 TEST_F(SdchFilterTest, NoDecodeAboutColon) {
354 // Construct a valid SDCH dictionary from a VCDIFF dictionary. 363 // Construct a valid SDCH dictionary from a VCDIFF dictionary.
355 const std::string kSampleDomain = "sdchtest.com"; 364 const std::string kSampleDomain = "sdchtest.com";
356 std::string dictionary(NewSdchDictionary(kSampleDomain)); 365 std::string dictionary(NewSdchDictionary(kSampleDomain));
357 366
358 std::string url_string = "http://" + kSampleDomain; 367 std::string url_string = "http://" + kSampleDomain;
359 368
360 GURL url(url_string); 369 GURL url(url_string);
361 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); 370 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url));
362 371
363 std::string compressed(NewSdchCompressedData(dictionary)); 372 std::string compressed(NewSdchCompressedData(dictionary));
364 373
365 std::vector<Filter::FilterType> filter_types; 374 std::vector<Filter::FilterType> filter_types;
366 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 375 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
367 376
368 const int kInputBufferSize(100); 377 const int kInputBufferSize(100);
369 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); 378 MockFilterContext filter_context(kInputBufferSize);
379 filter_context.SetURL(GURL("about://" + kSampleDomain));
380 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
381
370 const size_t feed_block_size(100); 382 const size_t feed_block_size(100);
371 const size_t output_block_size(100); 383 const size_t output_block_size(100);
372 std::string output; 384 std::string output;
373 385
374 filter->SetURL(GURL("about://" + kSampleDomain));
375 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size, 386 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size,
376 filter.get(), &output)); 387 filter.get(), &output));
377 } 388 }
378 389
379 TEST_F(SdchFilterTest, NoDecodeJavaScript) { 390 TEST_F(SdchFilterTest, NoDecodeJavaScript) {
380 // Construct a valid SDCH dictionary from a VCDIFF dictionary. 391 // Construct a valid SDCH dictionary from a VCDIFF dictionary.
381 const std::string kSampleDomain = "sdchtest.com"; 392 const std::string kSampleDomain = "sdchtest.com";
382 std::string dictionary(NewSdchDictionary(kSampleDomain)); 393 std::string dictionary(NewSdchDictionary(kSampleDomain));
383 394
384 std::string url_string = "http://" + kSampleDomain; 395 std::string url_string = "http://" + kSampleDomain;
385 396
386 GURL url(url_string); 397 GURL url(url_string);
387 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); 398 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url));
388 399
389 std::string compressed(NewSdchCompressedData(dictionary)); 400 std::string compressed(NewSdchCompressedData(dictionary));
390 401
391 std::vector<Filter::FilterType> filter_types; 402 std::vector<Filter::FilterType> filter_types;
392 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 403 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
393 404
394 const int kInputBufferSize(100); 405 const int kInputBufferSize(100);
395 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); 406 MockFilterContext filter_context(kInputBufferSize);
407 filter_context.SetURL(GURL("javascript://" + kSampleDomain));
408 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
409
396 const size_t feed_block_size(100); 410 const size_t feed_block_size(100);
397 const size_t output_block_size(100); 411 const size_t output_block_size(100);
398 std::string output; 412 std::string output;
399 413
400 filter->SetURL(GURL("javascript://" + kSampleDomain));
401 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size, 414 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size,
402 filter.get(), &output)); 415 filter.get(), &output));
403 } 416 }
404 417
405 TEST_F(SdchFilterTest, CanStillDecodeHttp) { 418 TEST_F(SdchFilterTest, CanStillDecodeHttp) {
406 // Construct a valid SDCH dictionary from a VCDIFF dictionary. 419 // Construct a valid SDCH dictionary from a VCDIFF dictionary.
407 const std::string kSampleDomain = "sdchtest.com"; 420 const std::string kSampleDomain = "sdchtest.com";
408 std::string dictionary(NewSdchDictionary(kSampleDomain)); 421 std::string dictionary(NewSdchDictionary(kSampleDomain));
409 422
410 std::string url_string = "http://" + kSampleDomain; 423 std::string url_string = "http://" + kSampleDomain;
411 424
412 GURL url(url_string); 425 GURL url(url_string);
413 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); 426 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url));
414 427
415 std::string compressed(NewSdchCompressedData(dictionary)); 428 std::string compressed(NewSdchCompressedData(dictionary));
416 429
417 std::vector<Filter::FilterType> filter_types; 430 std::vector<Filter::FilterType> filter_types;
418 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 431 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
419 432
420 const int kInputBufferSize(100); 433 const int kInputBufferSize(100);
421 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); 434 MockFilterContext filter_context(kInputBufferSize);
435 filter_context.SetURL(GURL("http://" + kSampleDomain));
436 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
437
422 const size_t feed_block_size(100); 438 const size_t feed_block_size(100);
423 const size_t output_block_size(100); 439 const size_t output_block_size(100);
424 std::string output; 440 std::string output;
425 441
426 filter->SetURL(GURL("http://" + kSampleDomain));
427 EXPECT_TRUE(FilterTestData(compressed, feed_block_size, output_block_size, 442 EXPECT_TRUE(FilterTestData(compressed, feed_block_size, output_block_size,
428 filter.get(), &output)); 443 filter.get(), &output));
429 } 444 }
430 445
431 TEST_F(SdchFilterTest, CrossDomainDictionaryUse) { 446 TEST_F(SdchFilterTest, CrossDomainDictionaryUse) {
432 // Construct a valid SDCH dictionary from a VCDIFF dictionary. 447 // Construct a valid SDCH dictionary from a VCDIFF dictionary.
433 const std::string kSampleDomain = "sdchtest.com"; 448 const std::string kSampleDomain = "sdchtest.com";
434 std::string dictionary(NewSdchDictionary(kSampleDomain)); 449 std::string dictionary(NewSdchDictionary(kSampleDomain));
435 450
436 std::string url_string = "http://" + kSampleDomain; 451 std::string url_string = "http://" + kSampleDomain;
437 452
438 GURL url(url_string); 453 GURL url(url_string);
439 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url)); 454 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary, url));
440 455
441 std::string compressed(NewSdchCompressedData(dictionary)); 456 std::string compressed(NewSdchCompressedData(dictionary));
442 457
443 std::vector<Filter::FilterType> filter_types; 458 std::vector<Filter::FilterType> filter_types;
444 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 459 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
445 const int kInputBufferSize(100); 460 const int kInputBufferSize(100);
446 461
447 // Decode with content arriving from the "wrong" domain. 462 // Decode with content arriving from the "wrong" domain.
448 // This tests CanSet() in the sdch_manager_-> 463 // This tests SdchManager::CanSet().
449 scoped_ptr<Filter> filter((Filter::Factory(filter_types, kInputBufferSize))); 464 MockFilterContext filter_context(kInputBufferSize);
450 GURL wrong_domain_url("http://www.wrongdomain.com"); 465 GURL wrong_domain_url("http://www.wrongdomain.com");
451 filter->SetURL(wrong_domain_url); 466 filter_context.SetURL(wrong_domain_url);
467 scoped_ptr<Filter> filter((Filter::Factory(filter_types, filter_context)));
452 468
453 size_t feed_block_size = 100; 469 size_t feed_block_size = 100;
454 size_t output_block_size = 100; 470 size_t output_block_size = 100;
455 std::string output; 471 std::string output;
456 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size, 472 EXPECT_FALSE(FilterTestData(compressed, feed_block_size, output_block_size,
457 filter.get(), &output)); 473 filter.get(), &output));
458 EXPECT_EQ(output.size(), 0u); // No output written. 474 EXPECT_EQ(output.size(), 0u); // No output written.
459 475
460 EXPECT_TRUE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); 476 EXPECT_TRUE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string)));
461 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(wrong_domain_url)); 477 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(wrong_domain_url));
(...skipping 17 matching lines...) Expand all
479 dictionary_with_path.append(dictionary); 495 dictionary_with_path.append(dictionary);
480 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_with_path, url)); 496 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_with_path, url));
481 497
482 std::string compressed_for_path(NewSdchCompressedData(dictionary_with_path)); 498 std::string compressed_for_path(NewSdchCompressedData(dictionary_with_path));
483 499
484 std::vector<Filter::FilterType> filter_types; 500 std::vector<Filter::FilterType> filter_types;
485 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 501 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
486 const int kInputBufferSize(100); 502 const int kInputBufferSize(100);
487 503
488 // Test decode the path data, arriving from a valid path. 504 // Test decode the path data, arriving from a valid path.
489 scoped_ptr<Filter> filter((Filter::Factory(filter_types, kInputBufferSize))); 505 MockFilterContext filter_context(kInputBufferSize);
490 filter->SetURL(GURL(url_string + path)); 506 filter_context.SetURL(GURL(url_string + path));
507 scoped_ptr<Filter> filter((Filter::Factory(filter_types, filter_context)));
491 508
492 size_t feed_block_size = 100; 509 size_t feed_block_size = 100;
493 size_t output_block_size = 100; 510 size_t output_block_size = 100;
494 std::string output; 511 std::string output;
495 512
496 EXPECT_TRUE(FilterTestData(compressed_for_path, feed_block_size, 513 EXPECT_TRUE(FilterTestData(compressed_for_path, feed_block_size,
497 output_block_size, filter.get(), &output)); 514 output_block_size, filter.get(), &output));
498 EXPECT_EQ(output, expanded_); 515 EXPECT_EQ(output, expanded_);
499 516
500 // Test decode the path data, arriving from a invalid path. 517 // Test decode the path data, arriving from a invalid path.
501 filter.reset((Filter::Factory(filter_types, kInputBufferSize))); 518 filter_context.SetURL(GURL(url_string));
502 filter->SetURL(GURL(url_string)); 519 filter.reset((Filter::Factory(filter_types, filter_context)));
503 520
504 feed_block_size = 100; 521 feed_block_size = 100;
505 output_block_size = 100; 522 output_block_size = 100;
506 output.clear(); 523 output.clear();
507 EXPECT_FALSE(FilterTestData(compressed_for_path, feed_block_size, 524 EXPECT_FALSE(FilterTestData(compressed_for_path, feed_block_size,
508 output_block_size, filter.get(), &output)); 525 output_block_size, filter.get(), &output));
509 EXPECT_EQ(output.size(), 0u); // No output written. 526 EXPECT_EQ(output.size(), 0u); // No output written.
510 527
511 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); 528 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string)));
512 SdchManager::ClearBlacklistings(); 529 SdchManager::ClearBlacklistings();
(...skipping 19 matching lines...) Expand all
532 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_with_port, 549 EXPECT_TRUE(sdch_manager_->AddSdchDictionary(dictionary_with_port,
533 GURL(url_string + ":" + port))); 550 GURL(url_string + ":" + port)));
534 551
535 std::string compressed_for_port(NewSdchCompressedData(dictionary_with_port)); 552 std::string compressed_for_port(NewSdchCompressedData(dictionary_with_port));
536 553
537 std::vector<Filter::FilterType> filter_types; 554 std::vector<Filter::FilterType> filter_types;
538 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 555 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
539 const int kInputBufferSize(100); 556 const int kInputBufferSize(100);
540 557
541 // Test decode the port data, arriving from a valid port. 558 // Test decode the port data, arriving from a valid port.
542 scoped_ptr<Filter> filter((Filter::Factory(filter_types, kInputBufferSize))); 559 MockFilterContext filter_context(kInputBufferSize);
543 filter->SetURL(GURL(url_string + ":" + port)); 560 filter_context.SetURL(GURL(url_string + ":" + port));
561 scoped_ptr<Filter> filter((Filter::Factory(filter_types, filter_context)));
544 562
545 size_t feed_block_size = 100; 563 size_t feed_block_size = 100;
546 size_t output_block_size = 100; 564 size_t output_block_size = 100;
547 std::string output; 565 std::string output;
548 EXPECT_TRUE(FilterTestData(compressed_for_port, feed_block_size, 566 EXPECT_TRUE(FilterTestData(compressed_for_port, feed_block_size,
549 output_block_size, filter.get(), &output)); 567 output_block_size, filter.get(), &output));
550 EXPECT_EQ(output, expanded_); 568 EXPECT_EQ(output, expanded_);
551 569
552 // Test decode the port data, arriving from a valid (default) port. 570 // Test decode the port data, arriving from a valid (default) port.
553 filter.reset((Filter::Factory(filter_types, kInputBufferSize))); 571 filter_context.SetURL(GURL(url_string)); // Default port.
554 filter->SetURL(GURL(url_string)); // Default port. 572 filter.reset((Filter::Factory(filter_types, filter_context)));
555 573
556 feed_block_size = 100; 574 feed_block_size = 100;
557 output_block_size = 100; 575 output_block_size = 100;
558 output.clear(); 576 output.clear();
559 EXPECT_TRUE(FilterTestData(compressed_for_port, feed_block_size, 577 EXPECT_TRUE(FilterTestData(compressed_for_port, feed_block_size,
560 output_block_size, filter.get(), &output)); 578 output_block_size, filter.get(), &output));
561 EXPECT_EQ(output, expanded_); 579 EXPECT_EQ(output, expanded_);
562 580
563 // Test decode the port data, arriving from a invalid port. 581 // Test decode the port data, arriving from a invalid port.
564 filter.reset((Filter::Factory(filter_types, kInputBufferSize))); 582 filter_context.SetURL(GURL(url_string + ":" + port + "1"));
565 filter->SetURL(GURL(url_string + ":" + port + "1")); 583 filter.reset((Filter::Factory(filter_types, filter_context)));
566 584
567 feed_block_size = 100; 585 feed_block_size = 100;
568 output_block_size = 100; 586 output_block_size = 100;
569 output.clear(); 587 output.clear();
570 EXPECT_FALSE(FilterTestData(compressed_for_port, feed_block_size, 588 EXPECT_FALSE(FilterTestData(compressed_for_port, feed_block_size,
571 output_block_size, filter.get(), &output)); 589 output_block_size, filter.get(), &output));
572 EXPECT_EQ(output.size(), 0u); // No output written. 590 EXPECT_EQ(output.size(), 0u); // No output written.
573 591
574 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); 592 EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string)));
575 SdchManager::ClearBlacklistings(); 593 SdchManager::ClearBlacklistings();
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 // Construct a chained filter. 672 // Construct a chained filter.
655 std::vector<Filter::FilterType> filter_types; 673 std::vector<Filter::FilterType> filter_types;
656 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 674 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
657 filter_types.push_back(Filter::FILTER_TYPE_GZIP); 675 filter_types.push_back(Filter::FILTER_TYPE_GZIP);
658 676
659 // First try with a large buffer (larger than test input, or compressed data). 677 // First try with a large buffer (larger than test input, or compressed data).
660 const size_t kLargeInputBufferSize(1000); // Used internally in filters. 678 const size_t kLargeInputBufferSize(1000); // Used internally in filters.
661 CHECK(kLargeInputBufferSize > gzip_compressed_sdch.size()); 679 CHECK(kLargeInputBufferSize > gzip_compressed_sdch.size());
662 CHECK(kLargeInputBufferSize > sdch_compressed.size()); 680 CHECK(kLargeInputBufferSize > sdch_compressed.size());
663 CHECK(kLargeInputBufferSize > expanded_.size()); 681 CHECK(kLargeInputBufferSize > expanded_.size());
664 scoped_ptr<Filter> filter(Filter::Factory(filter_types, 682 MockFilterContext filter_context(kLargeInputBufferSize);
665 kLargeInputBufferSize)); 683 filter_context.SetURL(url);
666 filter->SetURL(url); 684 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
667 685
668 // Verify that chained filter is waiting for data. 686 // Verify that chained filter is waiting for data.
669 char tiny_output_buffer[10]; 687 char tiny_output_buffer[10];
670 int tiny_output_size = sizeof(tiny_output_buffer); 688 int tiny_output_size = sizeof(tiny_output_buffer);
671 EXPECT_EQ(Filter::FILTER_NEED_MORE_DATA, 689 EXPECT_EQ(Filter::FILTER_NEED_MORE_DATA,
672 filter->ReadData(tiny_output_buffer, &tiny_output_size)); 690 filter->ReadData(tiny_output_buffer, &tiny_output_size));
673 691
674 // Make chain process all data. 692 // Make chain process all data.
675 size_t feed_block_size = kLargeInputBufferSize; 693 size_t feed_block_size = kLargeInputBufferSize;
676 size_t output_block_size = kLargeInputBufferSize; 694 size_t output_block_size = kLargeInputBufferSize;
677 std::string output; 695 std::string output;
678 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, 696 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size,
679 output_block_size, filter.get(), &output)); 697 output_block_size, filter.get(), &output));
680 EXPECT_EQ(output, expanded_); 698 EXPECT_EQ(output, expanded_);
681 699
682 // Next try with a mid-sized internal buffer size. 700 // Next try with a mid-sized internal buffer size.
683 const size_t kMidSizedInputBufferSize(100); 701 const size_t kMidSizedInputBufferSize(100);
684 // Buffer should be big enough to swallow whole gzip content. 702 // Buffer should be big enough to swallow whole gzip content.
685 CHECK(kMidSizedInputBufferSize > gzip_compressed_sdch.size()); 703 CHECK(kMidSizedInputBufferSize > gzip_compressed_sdch.size());
686 // Buffer should be small enough that entire SDCH content can't fit. 704 // Buffer should be small enough that entire SDCH content can't fit.
687 // We'll go even further, and force the chain to flush the buffer between the 705 // We'll go even further, and force the chain to flush the buffer between the
688 // two filters more than once (that is why we multiply by 2). 706 // two filters more than once (that is why we multiply by 2).
689 CHECK(kMidSizedInputBufferSize * 2 < sdch_compressed.size()); 707 CHECK(kMidSizedInputBufferSize * 2 < sdch_compressed.size());
690 filter.reset(Filter::Factory(filter_types, kMidSizedInputBufferSize)); 708 filter_context.SetBufferSize(kMidSizedInputBufferSize);
691 filter->SetURL(url); 709 filter_context.SetURL(url);
710 filter.reset(Filter::Factory(filter_types, filter_context));
692 711
693 feed_block_size = kMidSizedInputBufferSize; 712 feed_block_size = kMidSizedInputBufferSize;
694 output_block_size = kMidSizedInputBufferSize; 713 output_block_size = kMidSizedInputBufferSize;
695 output.clear(); 714 output.clear();
696 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, 715 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size,
697 output_block_size, filter.get(), &output)); 716 output_block_size, filter.get(), &output));
698 EXPECT_EQ(output, expanded_); 717 EXPECT_EQ(output, expanded_);
699 718
700 // Next try with a tiny input and output buffer to cover edge effects. 719 // Next try with a tiny input and output buffer to cover edge effects.
701 filter.reset(Filter::Factory(filter_types, kLargeInputBufferSize)); 720 filter_context.SetBufferSize(kLargeInputBufferSize);
702 filter->SetURL(url); 721 filter.reset(Filter::Factory(filter_types, filter_context));
703 722
704 feed_block_size = 1; 723 feed_block_size = 1;
705 output_block_size = 1; 724 output_block_size = 1;
706 output.clear(); 725 output.clear();
707 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, 726 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size,
708 output_block_size, filter.get(), &output)); 727 output_block_size, filter.get(), &output));
709 EXPECT_EQ(output, expanded_); 728 EXPECT_EQ(output, expanded_);
710 } 729 }
711 730
712 TEST_F(SdchFilterTest, DefaultGzipIfSdch) { 731 TEST_F(SdchFilterTest, DefaultGzipIfSdch) {
(...skipping 12 matching lines...) Expand all
725 std::string gzip_compressed_sdch = gzip_compress(sdch_compressed); 744 std::string gzip_compressed_sdch = gzip_compress(sdch_compressed);
726 745
727 // Only claim to have sdch content, but really use the gzipped sdch content. 746 // Only claim to have sdch content, but really use the gzipped sdch content.
728 // System should automatically add the missing (optional) gzip. 747 // System should automatically add the missing (optional) gzip.
729 std::vector<Filter::FilterType> filter_types; 748 std::vector<Filter::FilterType> filter_types;
730 filter_types.push_back(Filter::FILTER_TYPE_SDCH); 749 filter_types.push_back(Filter::FILTER_TYPE_SDCH);
731 Filter::FixupEncodingTypes(true, "anything/mime", &filter_types); 750 Filter::FixupEncodingTypes(true, "anything/mime", &filter_types);
732 751
733 // First try with a large buffer (larger than test input, or compressed data). 752 // First try with a large buffer (larger than test input, or compressed data).
734 const int kInputBufferSize(100); 753 const int kInputBufferSize(100);
735 scoped_ptr<Filter> filter(Filter::Factory(filter_types, kInputBufferSize)); 754 MockFilterContext filter_context(kInputBufferSize);
736 filter->SetURL(url); 755 filter_context.SetURL(url);
756 scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context));
757
737 758
738 // Verify that chained filter is waiting for data. 759 // Verify that chained filter is waiting for data.
739 char tiny_output_buffer[10]; 760 char tiny_output_buffer[10];
740 int tiny_output_size = sizeof(tiny_output_buffer); 761 int tiny_output_size = sizeof(tiny_output_buffer);
741 EXPECT_EQ(Filter::FILTER_NEED_MORE_DATA, 762 EXPECT_EQ(Filter::FILTER_NEED_MORE_DATA,
742 filter->ReadData(tiny_output_buffer, &tiny_output_size)); 763 filter->ReadData(tiny_output_buffer, &tiny_output_size));
743 764
744 size_t feed_block_size = 100; 765 size_t feed_block_size = 100;
745 size_t output_block_size = 100; 766 size_t output_block_size = 100;
746 std::string output; 767 std::string output;
747 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, 768 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size,
748 output_block_size, filter.get(), &output)); 769 output_block_size, filter.get(), &output));
749 EXPECT_EQ(output, expanded_); 770 EXPECT_EQ(output, expanded_);
750 771
751 // Next try with a tiny buffer to cover edge effects. 772 // Next try with a tiny buffer to cover edge effects.
752 filter.reset(Filter::Factory(filter_types, kInputBufferSize)); 773 filter.reset(Filter::Factory(filter_types, filter_context));
753 filter->SetURL(url);
754 774
755 feed_block_size = 1; 775 feed_block_size = 1;
756 output_block_size = 1; 776 output_block_size = 1;
757 output.clear(); 777 output.clear();
758 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size, 778 EXPECT_TRUE(FilterTestData(gzip_compressed_sdch, feed_block_size,
759 output_block_size, filter.get(), &output)); 779 output_block_size, filter.get(), &output));
760 EXPECT_EQ(output, expanded_); 780 EXPECT_EQ(output, expanded_);
761 } 781 }
762 782
763 TEST_F(SdchFilterTest, DomainSupported) { 783 TEST_F(SdchFilterTest, DomainSupported) {
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 TEST_F(SdchFilterTest, DictionaryTooLarge) { 956 TEST_F(SdchFilterTest, DictionaryTooLarge) {
937 std::string dictionary_domain(".google.com"); 957 std::string dictionary_domain(".google.com");
938 std::string dictionary_text(NewSdchDictionary(dictionary_domain)); 958 std::string dictionary_text(NewSdchDictionary(dictionary_domain));
939 959
940 dictionary_text.append( 960 dictionary_text.append(
941 SdchManager::kMaxDictionarySize + 1 - dictionary_text.size(), ' '); 961 SdchManager::kMaxDictionarySize + 1 - dictionary_text.size(), ' ');
942 EXPECT_FALSE(sdch_manager_->AddSdchDictionary(dictionary_text, 962 EXPECT_FALSE(sdch_manager_->AddSdchDictionary(dictionary_text,
943 GURL("http://" + dictionary_domain))); 963 GURL("http://" + dictionary_domain)));
944 } 964 }
945 965
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698