Index: webkit/glue/media/buffered_resource_loader_unittest.cc |
diff --git a/webkit/glue/media/buffered_resource_loader_unittest.cc b/webkit/glue/media/buffered_resource_loader_unittest.cc |
index bb6e7d91eb8bb07ba303be9f1b6c1f23cc26134f..b30ce8288fce454e53cefe6d419e6d88a3b50352 100644 |
--- a/webkit/glue/media/buffered_resource_loader_unittest.cc |
+++ b/webkit/glue/media/buffered_resource_loader_unittest.cc |
@@ -176,18 +176,8 @@ class BufferedResourceLoaderTest : public testing::Test { |
EXPECT_EQ(0, memcmp(buffer, data_ + pos, size)); |
} |
- // Helper method to disallow deferring in |loader_|. |
- void DisallowLoaderDefer() { |
- if (loader_->deferred_) { |
- EXPECT_CALL(*url_loader_, setDefersLoading(false)); |
- EXPECT_CALL(*this, NetworkCallback()); |
- } |
- loader_->SetAllowDefer(false); |
- } |
- |
- // Helper method to allow deferring in |loader_|. |
- void AllowLoaderDefer() { |
- loader_->SetAllowDefer(true); |
+ void ConfirmLoaderDeferredState(bool expectedVal) { |
+ EXPECT_EQ(loader_->deferred_, expectedVal); |
} |
MOCK_METHOD1(StartCallback, void(int error)); |
@@ -275,6 +265,7 @@ TEST_F(BufferedResourceLoaderTest, InvalidPartialResponse) { |
// Tests the logic of sliding window for data buffering and reading. |
TEST_F(BufferedResourceLoaderTest, BufferAndRead) { |
Initialize(kHttpUrl, 10, 29); |
+ loader_->UpdateDeferStrategy(BufferedResourceLoader::kThresholdDefer); |
Start(); |
PartialResponse(10, 29, 30); |
@@ -325,6 +316,7 @@ TEST_F(BufferedResourceLoaderTest, BufferAndRead) { |
TEST_F(BufferedResourceLoaderTest, ReadOutsideBuffer) { |
Initialize(kHttpUrl, 10, 0x00FFFFFF); |
+ loader_->UpdateDeferStrategy(BufferedResourceLoader::kThresholdDefer); |
Start(); |
PartialResponse(10, 0x00FFFFFF, 0x01000000); |
@@ -368,128 +360,86 @@ TEST_F(BufferedResourceLoaderTest, RequestFailedWhenRead) { |
loader_->didFail(url_loader_, error); |
} |
-// Tests the logic of caching data to disk when media is paused. |
-TEST_F(BufferedResourceLoaderTest, AllowDefer_NoDataReceived) { |
- Initialize(kHttpUrl, 10, 99); |
- SetLoaderBuffer(10, 20); |
- Start(); |
- PartialResponse(10, 99, 100); |
- |
- // Start in undeferred state, then disallow defer, then allow defer |
- // without receiving data in between. |
- DisallowLoaderDefer(); |
- AllowLoaderDefer(); |
- StopWhenLoad(); |
-} |
- |
-TEST_F(BufferedResourceLoaderTest, AllowDefer_ReadSameWindow) { |
- Initialize(kHttpUrl, 10, 99); |
- SetLoaderBuffer(10, 20); |
- Start(); |
- PartialResponse(10, 99, 100); |
- |
- uint8 buffer[10]; |
- |
- // Start in undeferred state, disallow defer, receive data but don't shift |
- // buffer window, then allow defer and read. |
- DisallowLoaderDefer(); |
- WriteLoader(10, 10); |
- AllowLoaderDefer(); |
- |
- EXPECT_CALL(*this, ReadCallback(10)); |
- ReadLoader(10, 10, buffer); |
- VerifyBuffer(buffer, 10, 10); |
- StopWhenLoad(); |
-} |
- |
-TEST_F(BufferedResourceLoaderTest, AllowDefer_ReadPastWindow) { |
+// Tests the data buffering logic of NeverDefer strategy. |
+TEST_F(BufferedResourceLoaderTest, NeverDeferStrategy) { |
Initialize(kHttpUrl, 10, 99); |
SetLoaderBuffer(10, 20); |
+ loader_->UpdateDeferStrategy(BufferedResourceLoader::kNeverDefer); |
Start(); |
PartialResponse(10, 99, 100); |
uint8 buffer[10]; |
- // Not deferred, disallow defer, received data and shift buffer window, |
- // allow defer, then read in area outside of buffer window. |
- DisallowLoaderDefer(); |
+ // Read past the buffer size; should not defer regardless. |
WriteLoader(10, 10); |
WriteLoader(20, 50); |
- AllowLoaderDefer(); |
+ ConfirmLoaderDeferredState(false); |
+ // Should move past window. |
EXPECT_CALL(*this, ReadCallback(net::ERR_CACHE_MISS)); |
ReadLoader(10, 10, buffer); |
+ |
StopWhenLoad(); |
} |
-TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredNoDataReceived) { |
+// Tests the data buffering logic of ReadThenDefer strategy. |
+TEST_F(BufferedResourceLoaderTest, ReadThenDeferStrategy) { |
Initialize(kHttpUrl, 10, 99); |
SetLoaderBuffer(10, 20); |
+ loader_->UpdateDeferStrategy(BufferedResourceLoader::kReadThenDefer); |
Start(); |
PartialResponse(10, 99, 100); |
uint8 buffer[10]; |
- // Start in deferred state, then disallow defer, receive no data, and |
- // allow defer and read. |
- EXPECT_CALL(*url_loader_, setDefersLoading(true)); |
+ // Make an outstanding read request. |
+ // We should disable deferring after the read request, so expect |
+ // a network event. |
EXPECT_CALL(*this, NetworkCallback()); |
- WriteLoader(10, 40); |
- |
- DisallowLoaderDefer(); |
- AllowLoaderDefer(); |
- |
- EXPECT_CALL(*this, ReadCallback(10)); |
- ReadLoader(20, 10, buffer); |
- VerifyBuffer(buffer, 20, 10); |
- StopWhenLoad(); |
-} |
- |
-TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredReadSameWindow) { |
- Initialize(kHttpUrl, 10, 99); |
- SetLoaderBuffer(10, 20); |
- Start(); |
- PartialResponse(10, 99, 100); |
+ ReadLoader(10, 10, buffer); |
- uint8 buffer[10]; |
+ // Receive almost enough data to cover, shouldn't defer. |
+ WriteLoader(10, 9); |
+ ConfirmLoaderDeferredState(false); |
- // Start in deferred state, disallow defer, receive data and shift buffer |
- // window, allow defer, and read in a place that's still in the window. |
- EXPECT_CALL(*url_loader_, setDefersLoading(true)); |
+ // As soon as we have received enough data to fulfill the read, defer. |
EXPECT_CALL(*this, NetworkCallback()); |
- WriteLoader(10, 30); |
+ EXPECT_CALL(*this, ReadCallback(10)); |
+ WriteLoader(19, 1); |
- DisallowLoaderDefer(); |
- WriteLoader(40, 5); |
- AllowLoaderDefer(); |
+ ConfirmLoaderDeferredState(true); |
+ VerifyBuffer(buffer, 10, 10); |
- EXPECT_CALL(*this, ReadCallback(10)); |
- ReadLoader(20, 10, buffer); |
- VerifyBuffer(buffer, 20, 10); |
StopWhenLoad(); |
} |
-TEST_F(BufferedResourceLoaderTest, AllowDefer_DeferredReadPastWindow) { |
+// Tests the data buffering logic of ThresholdDefer strategy. |
+TEST_F(BufferedResourceLoaderTest, ThresholdDeferStrategy) { |
Initialize(kHttpUrl, 10, 99); |
SetLoaderBuffer(10, 20); |
+ loader_->UpdateDeferStrategy(BufferedResourceLoader::kThresholdDefer); |
Start(); |
PartialResponse(10, 99, 100); |
uint8 buffer[10]; |
- // Start in deferred state, disallow defer, receive data and shift buffer |
- // window, allow defer, and read outside of the buffer window. |
- EXPECT_CALL(*url_loader_, setDefersLoading(true)); |
+ WriteLoader(10, 5); |
+ // Haven't reached threshold, don't defer. |
+ ConfirmLoaderDeferredState(false); |
+ |
+ // We're at the threshold now, let's defer. |
EXPECT_CALL(*this, NetworkCallback()); |
- WriteLoader(10, 40); |
+ WriteLoader(15, 5); |
+ ConfirmLoaderDeferredState(true); |
- DisallowLoaderDefer(); |
- WriteLoader(50, 20); |
- WriteLoader(70, 40); |
- AllowLoaderDefer(); |
+ // Now we've read over half of the buffer, disable deferring. |
+ EXPECT_CALL(*this, ReadCallback(6)); |
+ EXPECT_CALL(*this, NetworkCallback()); |
+ ReadLoader(10, 6, buffer); |
+ |
+ ConfirmLoaderDeferredState(false); |
+ VerifyBuffer(buffer, 10, 6); |
- EXPECT_CALL(*this, ReadCallback(net::ERR_CACHE_MISS)); |
- ReadLoader(20, 5, buffer); |
StopWhenLoad(); |
} |