summaryrefslogtreecommitdiffstats
path: root/webkit/glue
diff options
context:
space:
mode:
authorhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-17 00:03:00 +0000
committerhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-17 00:03:00 +0000
commit5df5165d0e0d7e6493dbca6d4c98a173a616467d (patch)
treeeac9a804d96d9cd577f3ecca79be3766d099b369 /webkit/glue
parentf92a69826846102dfe32ac44bc36df79f803beb6 (diff)
downloadchromium_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.h6
-rw-r--r--webkit/glue/webmediaplayer_delegate.h11
-rw-r--r--webkit/glue/webmediaplayer_impl.cc76
-rw-r--r--webkit/glue/webmediaplayer_impl.h24
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);
};