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

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

Issue 1841863002: Update monet. (Closed) Base URL: https://github.com/domokit/monet.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « net/base/directory_lister.cc ('k') | net/base/escape.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/base/elements_upload_data_stream.h" 5 #include "net/base/elements_upload_data_stream.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "base/files/file_util.h" 13 #include "base/files/file_util.h"
14 #include "base/files/scoped_temp_dir.h" 14 #include "base/files/scoped_temp_dir.h"
15 #include "base/memory/scoped_ptr.h" 15 #include "base/memory/scoped_ptr.h"
16 #include "base/message_loop/message_loop.h" 16 #include "base/message_loop/message_loop.h"
17 #include "base/run_loop.h" 17 #include "base/run_loop.h"
18 #include "base/thread_task_runner_handle.h"
18 #include "base/time/time.h" 19 #include "base/time/time.h"
19 #include "net/base/io_buffer.h" 20 #include "net/base/io_buffer.h"
20 #include "net/base/net_errors.h" 21 #include "net/base/net_errors.h"
21 #include "net/base/test_completion_callback.h" 22 #include "net/base/test_completion_callback.h"
22 #include "net/base/upload_bytes_element_reader.h" 23 #include "net/base/upload_bytes_element_reader.h"
23 #include "net/base/upload_data_stream.h" 24 #include "net/base/upload_data_stream.h"
24 #include "net/base/upload_file_element_reader.h" 25 #include "net/base/upload_file_element_reader.h"
25 #include "testing/gmock/include/gmock/gmock.h" 26 #include "testing/gmock/include/gmock/gmock.h"
26 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
27 #include "testing/platform_test.h" 28 #include "testing/platform_test.h"
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 174 }
174 175
175 TEST_F(ElementsUploadDataStreamTest, File) { 176 TEST_F(ElementsUploadDataStreamTest, File) {
176 base::FilePath temp_file_path; 177 base::FilePath temp_file_path;
177 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), 178 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
178 &temp_file_path)); 179 &temp_file_path));
179 ASSERT_EQ(static_cast<int>(kTestDataSize), 180 ASSERT_EQ(static_cast<int>(kTestDataSize),
180 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); 181 base::WriteFile(temp_file_path, kTestData, kTestDataSize));
181 182
182 element_readers_.push_back( 183 element_readers_.push_back(
183 new UploadFileElementReader(base::MessageLoopProxy::current().get(), 184 new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(),
184 temp_file_path, 185 temp_file_path, 0, kuint64max, base::Time()));
185 0,
186 kuint64max,
187 base::Time()));
188 186
189 TestCompletionCallback init_callback; 187 TestCompletionCallback init_callback;
190 scoped_ptr<UploadDataStream> stream( 188 scoped_ptr<UploadDataStream> stream(
191 new ElementsUploadDataStream(element_readers_.Pass(), 0)); 189 new ElementsUploadDataStream(element_readers_.Pass(), 0));
192 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); 190 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback()));
193 ASSERT_EQ(OK, init_callback.WaitForResult()); 191 ASSERT_EQ(OK, init_callback.WaitForResult());
194 EXPECT_FALSE(stream->IsInMemory()); 192 EXPECT_FALSE(stream->IsInMemory());
195 EXPECT_EQ(kTestDataSize, stream->size()); 193 EXPECT_EQ(kTestDataSize, stream->size());
196 EXPECT_EQ(0U, stream->position()); 194 EXPECT_EQ(0U, stream->position());
197 EXPECT_FALSE(stream->IsEOF()); 195 EXPECT_FALSE(stream->IsEOF());
(...skipping 14 matching lines...) Expand all
212 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), 210 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
213 &temp_file_path)); 211 &temp_file_path));
214 ASSERT_EQ(static_cast<int>(kTestDataSize), 212 ASSERT_EQ(static_cast<int>(kTestDataSize),
215 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); 213 base::WriteFile(temp_file_path, kTestData, kTestDataSize));
216 const uint64 kFakeSize = kTestDataSize*2; 214 const uint64 kFakeSize = kTestDataSize*2;
217 215
218 UploadFileElementReader::ScopedOverridingContentLengthForTests 216 UploadFileElementReader::ScopedOverridingContentLengthForTests
219 overriding_content_length(kFakeSize); 217 overriding_content_length(kFakeSize);
220 218
221 element_readers_.push_back( 219 element_readers_.push_back(
222 new UploadFileElementReader(base::MessageLoopProxy::current().get(), 220 new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(),
223 temp_file_path, 221 temp_file_path, 0, kuint64max, base::Time()));
224 0,
225 kuint64max,
226 base::Time()));
227 222
228 TestCompletionCallback init_callback; 223 TestCompletionCallback init_callback;
229 scoped_ptr<UploadDataStream> stream( 224 scoped_ptr<UploadDataStream> stream(
230 new ElementsUploadDataStream(element_readers_.Pass(), 0)); 225 new ElementsUploadDataStream(element_readers_.Pass(), 0));
231 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); 226 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback()));
232 ASSERT_EQ(OK, init_callback.WaitForResult()); 227 ASSERT_EQ(OK, init_callback.WaitForResult());
233 EXPECT_FALSE(stream->IsInMemory()); 228 EXPECT_FALSE(stream->IsInMemory());
234 EXPECT_EQ(kFakeSize, stream->size()); 229 EXPECT_EQ(kFakeSize, stream->size());
235 EXPECT_EQ(0U, stream->position()); 230 EXPECT_EQ(0U, stream->position());
236 EXPECT_FALSE(stream->IsEOF()); 231 EXPECT_FALSE(stream->IsEOF());
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 325
331 TEST_F(ElementsUploadDataStreamTest, FileAndBytes) { 326 TEST_F(ElementsUploadDataStreamTest, FileAndBytes) {
332 base::FilePath temp_file_path; 327 base::FilePath temp_file_path;
333 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), 328 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
334 &temp_file_path)); 329 &temp_file_path));
335 ASSERT_EQ(static_cast<int>(kTestDataSize), 330 ASSERT_EQ(static_cast<int>(kTestDataSize),
336 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); 331 base::WriteFile(temp_file_path, kTestData, kTestDataSize));
337 332
338 const uint64 kFileRangeOffset = 1; 333 const uint64 kFileRangeOffset = 1;
339 const uint64 kFileRangeLength = 4; 334 const uint64 kFileRangeLength = 4;
340 element_readers_.push_back( 335 element_readers_.push_back(new UploadFileElementReader(
341 new UploadFileElementReader(base::MessageLoopProxy::current().get(), 336 base::ThreadTaskRunnerHandle::Get().get(), temp_file_path,
342 temp_file_path, 337 kFileRangeOffset, kFileRangeLength, base::Time()));
343 kFileRangeOffset,
344 kFileRangeLength,
345 base::Time()));
346 338
347 element_readers_.push_back(new UploadBytesElementReader( 339 element_readers_.push_back(new UploadBytesElementReader(
348 kTestData, kTestDataSize)); 340 kTestData, kTestDataSize));
349 341
350 const uint64 kStreamSize = kTestDataSize + kFileRangeLength; 342 const uint64 kStreamSize = kTestDataSize + kFileRangeLength;
351 TestCompletionCallback init_callback; 343 TestCompletionCallback init_callback;
352 scoped_ptr<UploadDataStream> stream( 344 scoped_ptr<UploadDataStream> stream(
353 new ElementsUploadDataStream(element_readers_.Pass(), 0)); 345 new ElementsUploadDataStream(element_readers_.Pass(), 0));
354 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); 346 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback()));
355 ASSERT_EQ(OK, init_callback.WaitForResult()); 347 ASSERT_EQ(OK, init_callback.WaitForResult());
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 } 513 }
522 514
523 void ElementsUploadDataStreamTest::FileChangedHelper( 515 void ElementsUploadDataStreamTest::FileChangedHelper(
524 const base::FilePath& file_path, 516 const base::FilePath& file_path,
525 const base::Time& time, 517 const base::Time& time,
526 bool error_expected) { 518 bool error_expected) {
527 // Don't use element_readers_ here, as this function is called twice, and 519 // Don't use element_readers_ here, as this function is called twice, and
528 // reusing element_readers_ is wrong. 520 // reusing element_readers_ is wrong.
529 ScopedVector<UploadElementReader> element_readers; 521 ScopedVector<UploadElementReader> element_readers;
530 element_readers.push_back(new UploadFileElementReader( 522 element_readers.push_back(new UploadFileElementReader(
531 base::MessageLoopProxy::current().get(), file_path, 1, 2, time)); 523 base::ThreadTaskRunnerHandle::Get().get(), file_path, 1, 2, time));
532 524
533 TestCompletionCallback init_callback; 525 TestCompletionCallback init_callback;
534 scoped_ptr<UploadDataStream> stream( 526 scoped_ptr<UploadDataStream> stream(
535 new ElementsUploadDataStream(element_readers.Pass(), 0)); 527 new ElementsUploadDataStream(element_readers.Pass(), 0));
536 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback())); 528 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback.callback()));
537 int error_code = init_callback.WaitForResult(); 529 int error_code = init_callback.WaitForResult();
538 if (error_expected) 530 if (error_expected)
539 ASSERT_EQ(ERR_UPLOAD_FILE_CHANGED, error_code); 531 ASSERT_EQ(ERR_UPLOAD_FILE_CHANGED, error_code);
540 else 532 else
541 ASSERT_EQ(OK, error_code); 533 ASSERT_EQ(OK, error_code);
(...skipping 22 matching lines...) Expand all
564 base::FilePath temp_file_path; 556 base::FilePath temp_file_path;
565 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), 557 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
566 &temp_file_path)); 558 &temp_file_path));
567 ASSERT_EQ(static_cast<int>(kTestDataSize), 559 ASSERT_EQ(static_cast<int>(kTestDataSize),
568 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); 560 base::WriteFile(temp_file_path, kTestData, kTestDataSize));
569 561
570 // Prepare data. 562 // Prepare data.
571 element_readers_.push_back(new UploadBytesElementReader( 563 element_readers_.push_back(new UploadBytesElementReader(
572 kTestData, kTestDataSize)); 564 kTestData, kTestDataSize));
573 element_readers_.push_back( 565 element_readers_.push_back(
574 new UploadFileElementReader(base::MessageLoopProxy::current().get(), 566 new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(),
575 temp_file_path, 567 temp_file_path, 0, kuint64max, base::Time()));
576 0,
577 kuint64max,
578 base::Time()));
579 scoped_ptr<UploadDataStream> stream( 568 scoped_ptr<UploadDataStream> stream(
580 new ElementsUploadDataStream(element_readers_.Pass(), 0)); 569 new ElementsUploadDataStream(element_readers_.Pass(), 0));
581 570
582 std::string expected_data(kTestData, kTestData + kTestDataSize); 571 std::string expected_data(kTestData, kTestData + kTestDataSize);
583 expected_data += expected_data; 572 expected_data += expected_data;
584 573
585 // Call Init(). 574 // Call Init().
586 TestCompletionCallback init_callback1; 575 TestCompletionCallback init_callback1;
587 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); 576 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback()));
588 ASSERT_EQ(OK, init_callback1.WaitForResult()); 577 ASSERT_EQ(OK, init_callback1.WaitForResult());
(...skipping 21 matching lines...) Expand all
610 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), 599 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
611 &temp_file_path)); 600 &temp_file_path));
612 ASSERT_EQ(static_cast<int>(kTestDataSize), 601 ASSERT_EQ(static_cast<int>(kTestDataSize),
613 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); 602 base::WriteFile(temp_file_path, kTestData, kTestDataSize));
614 TestCompletionCallback test_callback; 603 TestCompletionCallback test_callback;
615 604
616 // Prepare data. 605 // Prepare data.
617 element_readers_.push_back(new UploadBytesElementReader( 606 element_readers_.push_back(new UploadBytesElementReader(
618 kTestData, kTestDataSize)); 607 kTestData, kTestDataSize));
619 element_readers_.push_back( 608 element_readers_.push_back(
620 new UploadFileElementReader(base::MessageLoopProxy::current().get(), 609 new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(),
621 temp_file_path, 610 temp_file_path, 0, kuint64max, base::Time()));
622 0,
623 kuint64max,
624 base::Time()));
625 scoped_ptr<UploadDataStream> stream( 611 scoped_ptr<UploadDataStream> stream(
626 new ElementsUploadDataStream(element_readers_.Pass(), 0)); 612 new ElementsUploadDataStream(element_readers_.Pass(), 0));
627 613
628 std::string expected_data(kTestData, kTestData + kTestDataSize); 614 std::string expected_data(kTestData, kTestData + kTestDataSize);
629 expected_data += expected_data; 615 expected_data += expected_data;
630 616
631 // Call Init(). 617 // Call Init().
632 ASSERT_EQ(ERR_IO_PENDING, stream->Init(test_callback.callback())); 618 ASSERT_EQ(ERR_IO_PENDING, stream->Init(test_callback.callback()));
633 EXPECT_EQ(OK, test_callback.WaitForResult()); 619 EXPECT_EQ(OK, test_callback.WaitForResult());
634 EXPECT_FALSE(stream->IsEOF()); 620 EXPECT_FALSE(stream->IsEOF());
(...skipping 18 matching lines...) Expand all
653 base::FilePath temp_file_path; 639 base::FilePath temp_file_path;
654 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), 640 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
655 &temp_file_path)); 641 &temp_file_path));
656 ASSERT_EQ(static_cast<int>(kTestDataSize), 642 ASSERT_EQ(static_cast<int>(kTestDataSize),
657 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); 643 base::WriteFile(temp_file_path, kTestData, kTestDataSize));
658 644
659 // Prepare data. 645 // Prepare data.
660 element_readers_.push_back(new UploadBytesElementReader( 646 element_readers_.push_back(new UploadBytesElementReader(
661 kTestData, kTestDataSize)); 647 kTestData, kTestDataSize));
662 element_readers_.push_back( 648 element_readers_.push_back(
663 new UploadFileElementReader(base::MessageLoopProxy::current().get(), 649 new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(),
664 temp_file_path, 650 temp_file_path, 0, kuint64max, base::Time()));
665 0,
666 kuint64max,
667 base::Time()));
668 scoped_ptr<UploadDataStream> stream( 651 scoped_ptr<UploadDataStream> stream(
669 new ElementsUploadDataStream(element_readers_.Pass(), 0)); 652 new ElementsUploadDataStream(element_readers_.Pass(), 0));
670 653
671 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); 654 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize);
672 expected_data.insert(expected_data.end(), kTestData, 655 expected_data.insert(expected_data.end(), kTestData,
673 kTestData + kTestDataSize); 656 kTestData + kTestDataSize);
674 657
675 // Call Init(). 658 // Call Init().
676 TestCompletionCallback init_callback1; 659 TestCompletionCallback init_callback1;
677 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); 660 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback()));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 base::FilePath temp_file_path; 695 base::FilePath temp_file_path;
713 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), 696 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
714 &temp_file_path)); 697 &temp_file_path));
715 ASSERT_EQ(static_cast<int>(kTestDataSize), 698 ASSERT_EQ(static_cast<int>(kTestDataSize),
716 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); 699 base::WriteFile(temp_file_path, kTestData, kTestDataSize));
717 700
718 // Prepare data. 701 // Prepare data.
719 element_readers_.push_back(new UploadBytesElementReader( 702 element_readers_.push_back(new UploadBytesElementReader(
720 kTestData, kTestDataSize)); 703 kTestData, kTestDataSize));
721 element_readers_.push_back( 704 element_readers_.push_back(
722 new UploadFileElementReader(base::MessageLoopProxy::current().get(), 705 new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(),
723 temp_file_path, 706 temp_file_path, 0, kuint64max, base::Time()));
724 0,
725 kuint64max,
726 base::Time()));
727 scoped_ptr<UploadDataStream> stream( 707 scoped_ptr<UploadDataStream> stream(
728 new ElementsUploadDataStream(element_readers_.Pass(), 0)); 708 new ElementsUploadDataStream(element_readers_.Pass(), 0));
729 709
730 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); 710 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize);
731 expected_data.insert(expected_data.end(), kTestData, 711 expected_data.insert(expected_data.end(), kTestData,
732 kTestData + kTestDataSize); 712 kTestData + kTestDataSize);
733 713
734 // Start Init. 714 // Start Init.
735 TestCompletionCallback init_callback1; 715 TestCompletionCallback init_callback1;
736 EXPECT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); 716 EXPECT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback()));
(...skipping 24 matching lines...) Expand all
761 base::FilePath temp_file_path; 741 base::FilePath temp_file_path;
762 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), 742 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
763 &temp_file_path)); 743 &temp_file_path));
764 ASSERT_EQ(static_cast<int>(kTestDataSize), 744 ASSERT_EQ(static_cast<int>(kTestDataSize),
765 base::WriteFile(temp_file_path, kTestData, kTestDataSize)); 745 base::WriteFile(temp_file_path, kTestData, kTestDataSize));
766 746
767 // Prepare data. 747 // Prepare data.
768 element_readers_.push_back(new UploadBytesElementReader( 748 element_readers_.push_back(new UploadBytesElementReader(
769 kTestData, kTestDataSize)); 749 kTestData, kTestDataSize));
770 element_readers_.push_back( 750 element_readers_.push_back(
771 new UploadFileElementReader(base::MessageLoopProxy::current().get(), 751 new UploadFileElementReader(base::ThreadTaskRunnerHandle::Get().get(),
772 temp_file_path, 752 temp_file_path, 0, kuint64max, base::Time()));
773 0,
774 kuint64max,
775 base::Time()));
776 scoped_ptr<UploadDataStream> stream( 753 scoped_ptr<UploadDataStream> stream(
777 new ElementsUploadDataStream(element_readers_.Pass(), 0)); 754 new ElementsUploadDataStream(element_readers_.Pass(), 0));
778 755
779 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize); 756 std::vector<char> expected_data(kTestData, kTestData + kTestDataSize);
780 expected_data.insert(expected_data.end(), kTestData, 757 expected_data.insert(expected_data.end(), kTestData,
781 kTestData + kTestDataSize); 758 kTestData + kTestDataSize);
782 759
783 // Call Init(). 760 // Call Init().
784 TestCompletionCallback init_callback1; 761 TestCompletionCallback init_callback1;
785 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback())); 762 ASSERT_EQ(ERR_IO_PENDING, stream->Init(init_callback1.callback()));
(...skipping 26 matching lines...) Expand all
812 wrapped_buffer2.get(), buf2.size(), read_callback2.callback())); 789 wrapped_buffer2.get(), buf2.size(), read_callback2.callback()));
813 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult()); 790 EXPECT_EQ(static_cast<int>(buf2.size()), read_callback2.WaitForResult());
814 EXPECT_EQ(expected_data, buf2); 791 EXPECT_EQ(expected_data, buf2);
815 EXPECT_TRUE(stream->IsEOF()); 792 EXPECT_TRUE(stream->IsEOF());
816 793
817 // Make sure callbacks are not called for cancelled operations. 794 // Make sure callbacks are not called for cancelled operations.
818 EXPECT_FALSE(read_callback1.have_result()); 795 EXPECT_FALSE(read_callback1.have_result());
819 } 796 }
820 797
821 } // namespace net 798 } // namespace net
OLDNEW
« no previous file with comments | « net/base/directory_lister.cc ('k') | net/base/escape.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698