Index: webkit/glue/media/buffered_resource_loader.cc |
diff --git a/webkit/glue/media/buffered_resource_loader.cc b/webkit/glue/media/buffered_resource_loader.cc |
index c6295bfd12f87e331f2c5fdb74494e50cde6053e..33319f2c990c8ea3e863d144b27d5f0aaad05422 100644 |
--- a/webkit/glue/media/buffered_resource_loader.cc |
+++ b/webkit/glue/media/buffered_resource_loader.cc |
@@ -11,6 +11,8 @@ |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebKitClient.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebURLError.h" |
+#include "webkit/glue/media/buffered_data_source.h" |
+#include "webkit/glue/media/defer_strategy.h" |
#include "webkit/glue/multipart_response_delegate.h" |
#include "webkit/glue/webkit_glue.h" |
@@ -50,7 +52,7 @@ BufferedResourceLoader::BufferedResourceLoader( |
int64 last_byte_position) |
: buffer_(new media::SeekableBuffer(kBackwardCapcity, kForwardCapacity)), |
deferred_(false), |
- defer_allowed_(true), |
+ defer_strategy_(ReadThenDeferStrategy::GetInstance()), |
completed_(false), |
range_requested_(false), |
partial_response_(false), |
@@ -184,6 +186,8 @@ void BufferedResourceLoader::Read(int64 position, |
return; |
} |
+ DisableDeferIfNeeded(); |
acolwell GONE FROM CHROMIUM
2011/03/25 04:35:28
Why is this call needed now?
vrk (LEFT CHROMIUM)
2011/03/25 21:33:32
Ah, a little hard to explain :)
This call is nee
|
+ |
// If we expected the read request to be fulfilled later, returns |
// immediately and let more data to flow in. |
if (WillFulfillRead()) |
@@ -199,9 +203,14 @@ int64 BufferedResourceLoader::GetBufferedPosition() { |
return kPositionNotSpecified; |
} |
-void BufferedResourceLoader::SetAllowDefer(bool is_allowed) { |
- defer_allowed_ = is_allowed; |
- DisableDeferIfNeeded(); |
+void BufferedResourceLoader::UpdateDeferStrategy( |
+ BufferedDataSource* data_source) { |
+ DeferStrategy* strategy = data_source->ChooseDeferStrategy(); |
acolwell GONE FROM CHROMIUM
2011/03/25 04:35:28
Why don't you do the ChooseDeferStrategy() in the
vrk (LEFT CHROMIUM)
2011/03/25 21:33:32
Done.
|
+ if (strategy != defer_strategy_) { |
+ defer_strategy_ = strategy; |
+ EnableDeferIfNeeded(); |
+ DisableDeferIfNeeded(); |
acolwell GONE FROM CHROMIUM
2011/03/25 04:35:28
The EnableDeferIfNeeded() followed by DisableDefer
vrk (LEFT CHROMIUM)
2011/03/25 21:33:32
Redid this to something more intuitive.
|
+ } |
} |
int64 BufferedResourceLoader::content_length() { |
@@ -336,7 +345,7 @@ void BufferedResourceLoader::didReceiveData( |
// If there is an active read request, try to fulfill the request. |
if (HasPendingRead() && CanFulfillRead()) { |
ReadInternal(); |
- } else if (!defer_allowed_) { |
+ } else if (!defer_strategy_->AllowsDeferring()) { |
// If we're not allowed to defer, slide the buffer window forward instead |
// of deferring. |
if (buffer_->forward_bytes() > buffer_->forward_capacity()) { |
@@ -432,31 +441,15 @@ bool BufferedResourceLoader::HasSingleOrigin() const { |
///////////////////////////////////////////////////////////////////////////// |
// Helper methods. |
void BufferedResourceLoader::EnableDeferIfNeeded() { |
- if (!defer_allowed_) |
- return; |
- |
- if (!deferred_ && |
- buffer_->forward_bytes() >= buffer_->forward_capacity()) { |
- deferred_ = true; |
- |
- if (url_loader_.get()) |
- url_loader_->setDefersLoading(true); |
- |
+ bool event_occurred = defer_strategy_->EnableDeferIfNeeded(this); |
+ if (event_occurred) |
NotifyNetworkEvent(); |
- } |
} |
void BufferedResourceLoader::DisableDeferIfNeeded() { |
- if (deferred_ && |
- (!defer_allowed_ || |
- buffer_->forward_bytes() < buffer_->forward_capacity() / 2)) { |
- deferred_ = false; |
- |
- if (url_loader_.get()) |
- url_loader_->setDefersLoading(false); |
- |
+ bool event_occurred = defer_strategy_->DisableDeferIfNeeded(this); |
+ if (event_occurred) |
NotifyNetworkEvent(); |
- } |
} |
bool BufferedResourceLoader::CanFulfillRead() { |