OLD | NEW |
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 <algorithm> | 5 #include <algorithm> |
6 #include <string> | 6 #include <string> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
660 EXPECT_CALL(*this, NetworkCallback()); | 660 EXPECT_CALL(*this, NetworkCallback()); |
661 EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 10)); | 661 EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 10)); |
662 WriteLoader(60, 40); | 662 WriteLoader(60, 40); |
663 | 663 |
664 ConfirmLoaderDeferredState(true); | 664 ConfirmLoaderDeferredState(true); |
665 VerifyBuffer(buffer, 80, 10); | 665 VerifyBuffer(buffer, 80, 10); |
666 | 666 |
667 StopWhenLoad(); | 667 StopWhenLoad(); |
668 } | 668 } |
669 | 669 |
670 // Tests the data buffering logic of ThresholdDefer strategy. | 670 // Tests the data buffering logic of kThresholdDefer strategy. |
671 TEST_F(BufferedResourceLoaderTest, ThresholdDeferStrategy) { | 671 TEST_F(BufferedResourceLoaderTest, ThresholdDeferStrategy) { |
672 Initialize(kHttpUrl, 10, 99); | 672 Initialize(kHttpUrl, 10, 99); |
673 SetLoaderBuffer(10, 20); | 673 SetLoaderBuffer(10, 20); |
674 Start(); | 674 Start(); |
675 PartialResponse(10, 99, 100); | 675 PartialResponse(10, 99, 100); |
676 | 676 |
677 uint8 buffer[10]; | 677 uint8 buffer[10]; |
678 InSequence s; | 678 InSequence s; |
679 | 679 |
680 // Initial expectation: we're not deferring. | 680 // Initial expectation: we're not deferring. |
681 ConfirmLoaderDeferredState(false); | 681 ConfirmLoaderDeferredState(false); |
682 | 682 |
683 // Write half of threshold: keep not deferring. | 683 // Write half of capacity: keep not deferring. |
684 WriteData(5); | 684 WriteData(5); |
685 ConfirmLoaderDeferredState(false); | 685 ConfirmLoaderDeferredState(false); |
686 | 686 |
687 // Write rest of space until threshold: start deferring. | 687 // Write rest of space until capacity: start deferring. |
688 EXPECT_CALL(*this, NetworkCallback()); | 688 EXPECT_CALL(*this, NetworkCallback()); |
689 WriteData(5); | 689 WriteData(5); |
690 ConfirmLoaderDeferredState(true); | 690 ConfirmLoaderDeferredState(true); |
691 | 691 |
692 // Read a little from the buffer: keep deferring. | 692 // Read a byte from the buffer: stop deferring. |
693 EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 1)); | 693 EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 1)); |
| 694 EXPECT_CALL(*this, NetworkCallback()); |
694 ReadLoader(10, 1, buffer); | 695 ReadLoader(10, 1, buffer); |
695 ConfirmLoaderDeferredState(true); | |
696 | |
697 // Read a little more and go under threshold: stop deferring. | |
698 EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 4)); | |
699 EXPECT_CALL(*this, NetworkCallback()); | |
700 ReadLoader(12, 4, buffer); | |
701 ConfirmLoaderDeferredState(false); | 696 ConfirmLoaderDeferredState(false); |
702 | 697 |
703 // Write rest of space until threshold: start deferring. | 698 // Write a byte to hit capacity: start deferring. |
704 EXPECT_CALL(*this, NetworkCallback()); | 699 EXPECT_CALL(*this, NetworkCallback()); |
705 WriteData(6); | 700 WriteData(6); |
706 ConfirmLoaderDeferredState(true); | 701 ConfirmLoaderDeferredState(true); |
707 | 702 |
708 // Read a little from the buffer: keep deferring. | |
709 EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 1)); | |
710 ReadLoader(16, 1, buffer); | |
711 ConfirmLoaderDeferredState(true); | |
712 | |
713 StopWhenLoad(); | 703 StopWhenLoad(); |
714 } | 704 } |
715 | 705 |
716 TEST_F(BufferedResourceLoaderTest, Tricky_ReadForwardsPastBuffered) { | 706 TEST_F(BufferedResourceLoaderTest, Tricky_ReadForwardsPastBuffered) { |
717 Initialize(kHttpUrl, 10, 99); | 707 Initialize(kHttpUrl, 10, 99); |
718 SetLoaderBuffer(10, 10); | 708 SetLoaderBuffer(10, 10); |
719 Start(); | 709 Start(); |
720 PartialResponse(10, 99, 100); | 710 PartialResponse(10, 99, 100); |
721 | 711 |
722 uint8 buffer[256]; | 712 uint8 buffer[256]; |
723 InSequence s; | 713 InSequence s; |
724 | 714 |
725 // PRECONDITION | 715 // PRECONDITION |
726 WriteUntilThreshold(); | 716 WriteUntilThreshold(); |
727 EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 1)); | 717 EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 1)); |
| 718 EXPECT_CALL(*this, NetworkCallback()); |
728 ReadLoader(10, 1, buffer); | 719 ReadLoader(10, 1, buffer); |
729 ConfirmBufferState(1, 10, 9, 10); | 720 ConfirmBufferState(1, 10, 9, 10); |
730 ConfirmLoaderOffsets(11, 0, 0); | 721 ConfirmLoaderOffsets(11, 0, 0); |
731 ConfirmLoaderDeferredState(true); | 722 ConfirmLoaderDeferredState(false); |
732 | 723 |
733 // *** TRICKY BUSINESS, PT. I *** | 724 // *** TRICKY BUSINESS, PT. I *** |
734 // Read past buffered: stop deferring. | 725 // Read past buffered: stop deferring. |
735 // | 726 // |
736 // In order for the read to complete we must: | 727 // In order for the read to complete we must: |
737 // 1) Stop deferring to receive more data. | 728 // 1) Stop deferring to receive more data. |
738 // | 729 // |
739 // BEFORE | 730 // BEFORE |
740 // offset=11 [xxxxxxxxx_] | 731 // offset=11 [xxxxxxxxx_] |
741 // ^ ^^^ requested 4 bytes @ offset 20 | 732 // ^ ^^^ requested 4 bytes @ offset 20 |
742 // AFTER | 733 // AFTER |
743 // offset=24 [__________] | 734 // offset=24 [__________] |
744 // | 735 // |
745 EXPECT_CALL(*this, NetworkCallback()); | |
746 ReadLoader(20, 4, buffer); | 736 ReadLoader(20, 4, buffer); |
747 ConfirmLoaderDeferredState(false); | 737 ConfirmLoaderDeferredState(false); |
748 | 738 |
749 // Write a little, make sure we didn't start deferring. | 739 // Write a little, make sure we didn't start deferring. |
750 WriteData(2); | 740 WriteData(2); |
751 ConfirmLoaderDeferredState(false); | 741 ConfirmLoaderDeferredState(false); |
752 | 742 |
753 // Write the rest, read should complete. | 743 // Write the rest, read should complete. |
754 EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 4)); | 744 EXPECT_CALL(*this, ReadCallback(BufferedResourceLoader::kOk, 4)); |
755 WriteData(2); | 745 WriteData(2); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
807 uint8 buffer[256]; | 797 uint8 buffer[256]; |
808 InSequence s; | 798 InSequence s; |
809 | 799 |
810 // PRECONDITION | 800 // PRECONDITION |
811 WriteUntilThreshold(); | 801 WriteUntilThreshold(); |
812 ConfirmBufferState(0, 10, 10, 10); | 802 ConfirmBufferState(0, 10, 10, 10); |
813 ConfirmLoaderOffsets(10, 0, 0); | 803 ConfirmLoaderOffsets(10, 0, 0); |
814 ConfirmLoaderDeferredState(true); | 804 ConfirmLoaderDeferredState(true); |
815 | 805 |
816 // *** TRICKY BUSINESS, PT. III *** | 806 // *** TRICKY BUSINESS, PT. III *** |
817 // Read past forward capacity but within threshold: stop deferring. | 807 // Read past forward capacity but within capacity: stop deferring. |
818 // | 808 // |
819 // In order for the read to complete we must: | 809 // In order for the read to complete we must: |
820 // 1) Adjust offset forward to create capacity. | 810 // 1) Adjust offset forward to create capacity. |
821 // 2) Stop deferring to receive more data. | 811 // 2) Stop deferring to receive more data. |
822 // | 812 // |
823 // BEFORE | 813 // BEFORE |
824 // offset=10 [xxxxxxxxxx] | 814 // offset=10 [xxxxxxxxxx] |
825 // ^^^^ requested 4 bytes @ offset 24 | 815 // ^^^^ requested 4 bytes @ offset 24 |
826 // ADJUSTED OFFSET | 816 // ADJUSTED OFFSET |
827 // offset=20 [__________] | 817 // offset=20 [__________] |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
861 InSequence s; | 851 InSequence s; |
862 | 852 |
863 // PRECONDITION | 853 // PRECONDITION |
864 WriteUntilThreshold(); | 854 WriteUntilThreshold(); |
865 ConfirmBufferState(0, 10, 10, 10); | 855 ConfirmBufferState(0, 10, 10, 10); |
866 ConfirmLoaderOffsets(10, 0, 0); | 856 ConfirmLoaderOffsets(10, 0, 0); |
867 ConfirmLoaderDeferredState(true); | 857 ConfirmLoaderDeferredState(true); |
868 | 858 |
869 // *** TRICKY BUSINESS, PT. IV *** | 859 // *** TRICKY BUSINESS, PT. IV *** |
870 // Read a large amount past forward capacity but within | 860 // Read a large amount past forward capacity but within |
871 // threshold: stop deferring. | 861 // capacity: stop deferring. |
872 // | 862 // |
873 // In order for the read to complete we must: | 863 // In order for the read to complete we must: |
874 // 1) Adjust offset forward to create capacity. | 864 // 1) Adjust offset forward to create capacity. |
875 // 2) Expand capacity to make sure we don't defer as data arrives. | 865 // 2) Expand capacity to make sure we don't defer as data arrives. |
876 // 3) Stop deferring to receive more data. | 866 // 3) Stop deferring to receive more data. |
877 // | 867 // |
878 // BEFORE | 868 // BEFORE |
879 // offset=10 [xxxxxxxxxx] | 869 // offset=10 [xxxxxxxxxx] |
880 // ^^^^^^^^^^^^ requested 12 bytes @ offset 24 | 870 // ^^^^^^^^^^^^ requested 12 bytes @ offset 24 |
881 // ADJUSTED OFFSET | 871 // ADJUSTED OFFSET |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1178 ExpectContentRangeFailure("bytes 20-10/400"); | 1168 ExpectContentRangeFailure("bytes 20-10/400"); |
1179 | 1169 |
1180 ExpectContentRangeSuccess("bytes 0-499/500", 0, 499, 500); | 1170 ExpectContentRangeSuccess("bytes 0-499/500", 0, 499, 500); |
1181 ExpectContentRangeSuccess("bytes 0-0/500", 0, 0, 500); | 1171 ExpectContentRangeSuccess("bytes 0-0/500", 0, 0, 500); |
1182 ExpectContentRangeSuccess("bytes 10-11/50", 10, 11, 50); | 1172 ExpectContentRangeSuccess("bytes 10-11/50", 10, 11, 50); |
1183 ExpectContentRangeSuccess("bytes 10-11/*", 10, 11, | 1173 ExpectContentRangeSuccess("bytes 10-11/*", 10, 11, |
1184 kPositionNotSpecified); | 1174 kPositionNotSpecified); |
1185 } | 1175 } |
1186 | 1176 |
1187 } // namespace webkit_media | 1177 } // namespace webkit_media |
OLD | NEW |