| 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 |