diff options
author | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-17 00:03:00 +0000 |
---|---|---|
committer | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-17 00:03:00 +0000 |
commit | 5df5165d0e0d7e6493dbca6d4c98a173a616467d (patch) | |
tree | eac9a804d96d9cd577f3ecca79be3766d099b369 /webkit/glue | |
parent | f92a69826846102dfe32ac44bc36df79f803beb6 (diff) | |
download | chromium_src-5df5165d0e0d7e6493dbca6d4c98a173a616467d.zip chromium_src-5df5165d0e0d7e6493dbca6d4c98a173a616467d.tar.gz chromium_src-5df5165d0e0d7e6493dbca6d4c98a173a616467d.tar.bz2 |
Add resource loading glue code for WebMediaPlayerDelegate
Added glue code to ResourceHandle for WebMediaPlayerDelegate.
Review URL: http://codereview.chromium.org/18282
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8246 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/webmediaplayer.h | 6 | ||||
-rw-r--r-- | webkit/glue/webmediaplayer_delegate.h | 11 | ||||
-rw-r--r-- | webkit/glue/webmediaplayer_impl.cc | 76 | ||||
-rw-r--r-- | webkit/glue/webmediaplayer_impl.h | 24 |
4 files changed, 116 insertions, 1 deletions
diff --git a/webkit/glue/webmediaplayer.h b/webkit/glue/webmediaplayer.h index 3dfbd31..f8e5a94 100644 --- a/webkit/glue/webmediaplayer.h +++ b/webkit/glue/webmediaplayer.h @@ -54,6 +54,12 @@ public: // Tell the media player to repaint itself. virtual void Repaint() = 0; + // Load a media resource. + virtual void LoadMediaResource(const GURL& url) = 0; + + // Cancel loading the media resource. + virtual void CancelLoad() = 0; + private: DISALLOW_COPY_AND_ASSIGN(WebMediaPlayer); }; diff --git a/webkit/glue/webmediaplayer_delegate.h b/webkit/glue/webmediaplayer_delegate.h index ee2d553..3414114 100644 --- a/webkit/glue/webmediaplayer_delegate.h +++ b/webkit/glue/webmediaplayer_delegate.h @@ -6,7 +6,10 @@ #define WEBKIT_GLUE_WEBMEDIAPLAYER_DELEGATE_H_ #include "base/gfx/platform_canvas.h" +#include "webkit/glue/weberror.h" #include "webkit/glue/webmediaplayer.h" +#include "webkit/glue/webresponse.h" +#include "webkit/glue/weburlrequest.h" class GURL; @@ -71,6 +74,14 @@ class WebMediaPlayerDelegate { virtual int64 GetBytesLoaded() const = 0; virtual int64 GetTotalBytes() const = 0; + // Data handlers called from WebMediaPlayer + virtual void WillSendRequest(WebRequest& request, + const WebResponse& response) = 0; + virtual void DidReceiveData(const char* buf, size_t size) = 0; + virtual void DidReceiveResponse(const WebResponse& response) = 0; + virtual void DidFinishLoading() = 0; + virtual void DidFail(const WebError& error) = 0; + private: DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerDelegate); }; diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc index d743886..2c9fea3 100644 --- a/webkit/glue/webmediaplayer_impl.cc +++ b/webkit/glue/webmediaplayer_impl.cc @@ -6,10 +6,19 @@ #include "FrameView.h" #include "MediaPlayerPrivateChromium.h" +#include "PlatformString.h" +#include "ResourceRequest.h" +#include "ResourceHandle.h" #undef LOG +#include "googleurl/src/gurl.h" +#include "webkit/glue/glue_util.h" +#include "webkit/glue/weberror_impl.h" #include "webkit/glue/webframe_impl.h" +#include "webkit/glue/webmediaplayer_delegate.h" #include "webkit/glue/webmediaplayer_impl.h" +#include "webkit/glue/webresponse_impl.h" +#include "webkit/glue/weburlrequest_impl.h" #if ENABLE(VIDEO) @@ -56,6 +65,73 @@ void WebMediaPlayerImpl::Repaint() { media_player_private_->repaint(); } +void WebMediaPlayerImpl::LoadMediaResource(const GURL& url) { + // Make sure we cancel the previous load request before starting a new one. + CancelLoad(); + + WebCore::Frame* frame = static_cast<WebFrameImpl*>(GetWebFrame())->frame(); + WebCore::ResourceRequest request(webkit_glue::GURLToKURL(url), + WebCore::String(""), + WebCore::UseProtocolCachePolicy); + request.setTargetType(WebCore::ResourceRequest::TargetIsMedia); + request.setFrame(frame); + + resource_handle_ = WebCore::ResourceHandle::create(request, + this, + frame, + false, + true); +} + +void WebMediaPlayerImpl::CancelLoad() { + // Delegate the cancel call to ResourceHandle, this should be enough to + // stop any further callbacks from ResouceHandle. + if (resource_handle_) { + resource_handle_->cancel(); + resource_handle_ = NULL; + } +} + +void WebMediaPlayerImpl::willSendRequest( + WebCore::ResourceHandle* handle, + WebCore::ResourceRequest& request, + const WebCore::ResourceResponse& response) { + if (delegate_) { + delegate_->WillSendRequest(WebRequestImpl(request), + WebResponseImpl(response)); + } +} + +void WebMediaPlayerImpl::didReceiveResponse( + WebCore::ResourceHandle* handle, + const WebCore::ResourceResponse& response) { + if (delegate_) { + delegate_->DidReceiveResponse(WebResponseImpl(response)); + } +} + +void WebMediaPlayerImpl::didReceiveData(WebCore::ResourceHandle* handle, + const char *buffer, + int length, + int bytes_received) { + if (delegate_) { + delegate_->DidReceiveData(buffer, length); + } +} + +void WebMediaPlayerImpl::didFinishLoading(WebCore::ResourceHandle* handle) { + if (delegate_) { + delegate_->DidFinishLoading(); + } +} + +void WebMediaPlayerImpl::didFail(WebCore::ResourceHandle* handle, + const WebCore::ResourceError& error) { + if (delegate_) { + delegate_->DidFail(WebErrorImpl(error)); + } +} + } // namespace webkit_glue #endif diff --git a/webkit/glue/webmediaplayer_impl.h b/webkit/glue/webmediaplayer_impl.h index e8ed8f2..ddbdc16 100644 --- a/webkit/glue/webmediaplayer_impl.h +++ b/webkit/glue/webmediaplayer_impl.h @@ -8,19 +8,23 @@ #ifndef WEBKIT_GLUE_WEBMEDIAPLAYER_IMPL_H_ #define WEBKIT_GLUE_WEBMEDIAPLAYER_IMPL_H_ +#include "ResourceHandleClient.h" + #include "webkit/glue/webmediaplayer.h" #if ENABLE(VIDEO) namespace WebCore { class MediaPlayerPrivate; +class ResourceHandle; } namespace webkit_glue { class WebMediaPlayerDelegate; -class WebMediaPlayerImpl : public WebMediaPlayer { +class WebMediaPlayerImpl : public WebMediaPlayer, + WebCore::ResourceHandleClient { public: WebMediaPlayerImpl(WebCore::MediaPlayerPrivate* media_player_private); @@ -46,9 +50,27 @@ public: // Tell the media player to repaint itself. virtual void Repaint(); + // Load a media resource. + virtual void LoadMediaResource(const GURL& url); + + // Cancel loading the media resource. + virtual void CancelLoad(); + + // ResourceHandleClient methods + void willSendRequest(WebCore::ResourceHandle* handle, + WebCore::ResourceRequest& request, + const WebCore::ResourceResponse&); + void didReceiveResponse(WebCore::ResourceHandle* handle, + const WebCore::ResourceResponse& response); + void didReceiveData(WebCore::ResourceHandle* handle, const char *buffer, + int length, int); + void didFinishLoading(WebCore::ResourceHandle* handle); + void didFail(WebCore::ResourceHandle* handle, const WebCore::ResourceError&); + private: WebCore::MediaPlayerPrivate* media_player_private_; WebMediaPlayerDelegate* delegate_; + RefPtr<WebCore::ResourceHandle> resource_handle_; DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl); }; |