Chromium Code Reviews| Index: webkit/glue/media/simple_data_source.cc |
| diff --git a/webkit/glue/media/simple_data_source.cc b/webkit/glue/media/simple_data_source.cc |
| index 291928e3994c72ef3363be772c98e18b4f4dd2f7..472ae4f85495f20a0ff58fd8168196e0b9a714d2 100644 |
| --- a/webkit/glue/media/simple_data_source.cc |
| +++ b/webkit/glue/media/simple_data_source.cc |
| @@ -7,10 +7,10 @@ |
| #include "media/base/filter_host.h" |
| #include "net/base/load_flags.h" |
| #include "net/base/data_url.h" |
| -#include "net/http/http_response_headers.h" |
| #include "net/url_request/url_request_status.h" |
| +#include "third_party/WebKit/WebKit/chromium/public/WebKit.h" |
| +#include "third_party/WebKit/WebKit/chromium/public/WebKitClient.h" |
| #include "webkit/glue/media/simple_data_source.h" |
| -#include "webkit/glue/resource_loader_bridge.h" |
| #include "webkit/glue/webkit_glue.h" |
| namespace { |
| @@ -30,12 +30,13 @@ namespace webkit_glue { |
| SimpleDataSource::SimpleDataSource( |
| MessageLoop* render_loop, |
| - webkit_glue::MediaResourceLoaderBridgeFactory* bridge_factory) |
| + WebKit::WebFrame* frame) |
| : render_loop_(render_loop), |
| - bridge_factory_(bridge_factory), |
| + frame_(frame), |
| size_(-1), |
| single_origin_(true), |
| - state_(UNINITIALIZED) { |
| + state_(UNINITIALIZED), |
| + keep_test_loader(false) { |
| DCHECK(render_loop); |
| } |
| @@ -108,34 +109,50 @@ bool SimpleDataSource::IsStreaming() { |
| return false; |
| } |
| -bool SimpleDataSource::OnReceivedRedirect( |
| - const GURL& new_url, |
| - const webkit_glue::ResourceResponseInfo& info, |
| - bool* has_new_first_party_for_cookies, |
| - GURL* new_first_party_for_cookies) { |
| +void SimpleDataSource::SetURLLoaderForTest(WebKit::WebURLLoader* mock_loader) { |
| + url_loader_.reset(mock_loader); |
| + keep_test_loader = true; |
| +} |
| + |
| +void SimpleDataSource::willSendRequest( |
| + WebKit::WebURLLoader* loader, |
| + WebKit::WebURLRequest& newRequest, |
| + const WebKit::WebURLResponse& redirectResponse) { |
| DCHECK(MessageLoop::current() == render_loop_); |
| - single_origin_ = url_.GetOrigin() == new_url.GetOrigin(); |
| + single_origin_ = url_.GetOrigin() == GURL(newRequest.url()).GetOrigin(); |
| - // TODO(wtc): should we return a new first party for cookies URL? |
| - *has_new_first_party_for_cookies = false; |
| - return true; |
| + url_loader_.reset(loader); |
| + url_ = newRequest.url(); |
| +} |
| + |
| +void SimpleDataSource::didSendData( |
| + WebKit::WebURLLoader* loader, |
| + unsigned long long bytesSent, |
| + unsigned long long totalBytesToBeSent) { |
| } |
| -void SimpleDataSource::OnReceivedResponse( |
| - const webkit_glue::ResourceResponseInfo& info, |
| - bool content_filtered) { |
| +void SimpleDataSource::didReceiveResponse( |
| + WebKit::WebURLLoader* loader, const WebKit::WebURLResponse& response) { |
|
scherkus (not reviewing)
2010/11/22 21:27:29
drop 2nd arg onto next line
annacc
2010/11/24 21:34:44
Done.
|
| DCHECK(MessageLoop::current() == render_loop_); |
| - size_ = info.content_length; |
| + size_ = response.expectedContentLength(); |
| +} |
| + |
| +void SimpleDataSource::didDownloadData( |
| + WebKit::WebURLLoader* loader, int dataLength) { |
|
scherkus (not reviewing)
2010/11/22 21:27:29
drop 2nd arg onto next line
annacc
2010/11/24 21:34:44
Done.
|
| } |
| -void SimpleDataSource::OnReceivedData(const char* data, int len) { |
| +void SimpleDataSource::didReceiveData( |
| + WebKit::WebURLLoader* loader, const char* data, int data_length) { |
|
scherkus (not reviewing)
2010/11/22 21:27:29
drop 2nd/3rd arg onto next line
annacc
2010/11/24 21:34:44
Done.
|
| DCHECK(MessageLoop::current() == render_loop_); |
| - data_.append(data, len); |
| + data_.append(data, data_length); |
| +} |
| + |
| +void SimpleDataSource::didReceiveCachedMetadata( |
| + WebKit::WebURLLoader* loader, const char* data, int dataLength) { |
|
scherkus (not reviewing)
2010/11/22 21:27:29
drop 2nd/3rd arg onto next line
annacc
2010/11/24 21:34:44
Done.
|
| } |
| -void SimpleDataSource::OnCompletedRequest(const URLRequestStatus& status, |
| - const std::string& security_info, |
| - const base::Time& completion_time) { |
| +void SimpleDataSource::didFinishLoading( |
| + WebKit::WebURLLoader* loader, double finishTime) { |
|
scherkus (not reviewing)
2010/11/22 21:27:29
drop 2nd arg onto next line
annacc
2010/11/24 21:34:44
Done.
|
| DCHECK(MessageLoop::current() == render_loop_); |
| AutoLock auto_lock(lock_); |
| // It's possible this gets called after Stop(), in which case |host_| is no |
| @@ -143,10 +160,8 @@ void SimpleDataSource::OnCompletedRequest(const URLRequestStatus& status, |
| if (state_ == STOPPED) |
| return; |
| - // Otherwise we should be initializing and have created a bridge. |
| + // Otherwise we should be initializing and have created a WebURLLoader. |
| DCHECK_EQ(state_, INITIALIZING); |
| - DCHECK(bridge_.get()); |
| - bridge_.reset(); |
| // If we don't get a content length or the request has failed, report it |
| // as a network error. |
| @@ -154,7 +169,29 @@ void SimpleDataSource::OnCompletedRequest(const URLRequestStatus& status, |
| size_ = data_.length(); |
| DCHECK(static_cast<size_t>(size_) == data_.length()); |
| - DoneInitialization_Locked(status.is_success()); |
| + DoneInitialization_Locked(true); |
| +} |
| + |
| +void SimpleDataSource::didFail( |
| + WebKit::WebURLLoader* loader, |
| + const WebKit::WebURLError& error) { |
| + DCHECK(MessageLoop::current() == render_loop_); |
| + AutoLock auto_lock(lock_); |
| + // It's possible this gets called after Stop(), in which case |host_| is no |
| + // longer valid. |
| + if (state_ == STOPPED) |
| + return; |
| + |
| + // Otherwise we should be initializing and have created a WebURLLoader. |
| + DCHECK_EQ(state_, INITIALIZING); |
| + |
| + // If we don't get a content length or the request has failed, report it |
| + // as a network error. |
| + if (size_ == -1) |
| + size_ = data_.length(); |
| + DCHECK(static_cast<size_t>(size_) == data_.length()); |
| + |
| + DoneInitialization_Locked(false); |
| } |
| bool SimpleDataSource::HasSingleOrigin() { |
| @@ -164,7 +201,7 @@ bool SimpleDataSource::HasSingleOrigin() { |
| void SimpleDataSource::Abort() { |
| DCHECK(MessageLoop::current() == render_loop_); |
| - NOTIMPLEMENTED(); |
| + frame_ = NULL; |
| } |
| void SimpleDataSource::SetURL(const GURL& url) { |
| @@ -183,6 +220,9 @@ void SimpleDataSource::StartTask() { |
| if (state_ == STOPPED) |
| return; |
| + if (frame_ == NULL) |
| + return; |
| + |
| DCHECK_EQ(state_, INITIALIZING); |
| if (IsDataProtocol(url_)) { |
| @@ -194,10 +234,18 @@ void SimpleDataSource::StartTask() { |
| size_ = data_.length(); |
| DoneInitialization_Locked(success); |
| } else { |
| - // Create our bridge and start loading the resource. |
| - bridge_.reset(bridge_factory_->CreateBridge( |
| - url_, net::LOAD_BYPASS_CACHE, -1, -1)); |
| - bridge_->Start(this); |
| + // Prepare the request. |
| + WebKit::WebURLRequest request(url_); |
| + |
| + frame_->setReferrerForRequest(request, WebKit::WebURL()); |
| + frame_->dispatchWillSendRequest(request); |
| + |
| + // This flag is for unittests as we don't want to reset |url_loader| |
| + if (!keep_test_loader) |
| + url_loader_.reset(WebKit::webKitClient()->createURLLoader()); |
| + |
| + // Start the resource loading. |
| + url_loader_->loadAsynchronously(request, this); |
| } |
| } |
| @@ -207,9 +255,9 @@ void SimpleDataSource::CancelTask() { |
| DCHECK_EQ(state_, STOPPED); |
| // Cancel any pending requests. |
| - if (bridge_.get()) { |
| - bridge_->Cancel(); |
| - bridge_.reset(); |
| + if (url_loader_.get()) { |
| + url_loader_->cancel(); |
| + url_loader_.reset(); |
| } |
| } |