diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-02 22:25:55 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-02 22:25:55 +0000 |
commit | d726eddc0fb9a344f5a584786307c8d9ffa16cd0 (patch) | |
tree | 9a2e9d2cfecae6f03f0f574a277e5ae1eb557334 /chrome | |
parent | cd36c6e67313d9a1b21f6c5806dfab527778f1e8 (diff) | |
download | chromium_src-d726eddc0fb9a344f5a584786307c8d9ffa16cd0.zip chromium_src-d726eddc0fb9a344f5a584786307c8d9ffa16cd0.tar.gz chromium_src-d726eddc0fb9a344f5a584786307c8d9ffa16cd0.tar.bz2 |
Update content API in preparation for migrating webkit/renderer/media/ to content/renderer/media/.
The biggest change is to replace the coarse-grained WebMediaPlayer-based content API with finer-grained APIs for controlling media resource loads (e.g., prerendering) and media stream audio/video rendering (e.g., WebRTC layout tests).
BUG=239826,251306
Review URL: https://chromiumcodereview.appspot.com/18123002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@209797 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
4 files changed, 28 insertions, 86 deletions
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index f1e19dc..7959ea0 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc @@ -463,22 +463,21 @@ WebPlugin* ChromeContentRendererClient::CreatePluginReplacement( return placeholder->plugin(); } -webkit_media::WebMediaPlayerImpl* -ChromeContentRendererClient::OverrideCreateWebMediaPlayer( +void ChromeContentRendererClient::DeferMediaLoad( content::RenderView* render_view, - WebKit::WebFrame* frame, - WebKit::WebMediaPlayerClient* client, - base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, - const webkit_media::WebMediaPlayerParams& params) { + const base::Closure& closure) { #if defined(OS_ANDROID) // Chromium for Android doesn't support prerender yet. - return NULL; + closure.Run(); + return; #else - if (!prerender::PrerenderHelper::IsPrerendering(render_view)) - return NULL; + if (!prerender::PrerenderHelper::IsPrerendering(render_view)) { + closure.Run(); + return; + } - return new prerender::PrerenderWebMediaPlayer( - render_view, frame, client, delegate, params); + // Lifetime is tied to |render_view| via content::RenderViewObserver. + new prerender::PrerenderWebMediaPlayer(render_view, closure); #endif } diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h index be628b21..7d8b225 100644 --- a/chrome/renderer/chrome_content_renderer_client.h +++ b/chrome/renderer/chrome_content_renderer_client.h @@ -85,12 +85,8 @@ class ChromeContentRendererClient : public content::ContentRendererClient { const WebKit::WebURLError& error, std::string* error_html, string16* error_description) OVERRIDE; - virtual webkit_media::WebMediaPlayerImpl* OverrideCreateWebMediaPlayer( - content::RenderView* render_view, - WebKit::WebFrame* frame, - WebKit::WebMediaPlayerClient* client, - base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, - const webkit_media::WebMediaPlayerParams& params) OVERRIDE; + virtual void DeferMediaLoad(content::RenderView* render_view, + const base::Closure& closure) OVERRIDE; virtual bool RunIdleHandlerWhenWidgetsHidden() OVERRIDE; virtual bool AllowPopup() OVERRIDE; virtual bool ShouldFork(WebKit::WebFrame* frame, diff --git a/chrome/renderer/prerender/prerender_webmediaplayer.cc b/chrome/renderer/prerender/prerender_webmediaplayer.cc index dd7be9a..c81402c 100644 --- a/chrome/renderer/prerender/prerender_webmediaplayer.cc +++ b/chrome/renderer/prerender/prerender_webmediaplayer.cc @@ -4,57 +4,23 @@ #include "chrome/renderer/prerender/prerender_webmediaplayer.h" +#include "base/callback_helpers.h" #include "chrome/common/prerender_messages.h" #include "content/public/renderer/render_view.h" -#include "third_party/WebKit/public/platform/WebURL.h" -#include "third_party/WebKit/public/web/WebMediaSource.h" -#include "webkit/renderer/media/webmediaplayer_delegate.h" namespace prerender { PrerenderWebMediaPlayer::PrerenderWebMediaPlayer( content::RenderView* render_view, - WebKit::WebFrame* frame, - WebKit::WebMediaPlayerClient* client, - base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, - const webkit_media::WebMediaPlayerParams& params) + const base::Closure& closure) : RenderViewObserver(render_view), - WebMediaPlayerImpl(frame, client, delegate, params), is_prerendering_(true), - url_loaded_(false), - cors_mode_(CORSModeUnspecified) { + continue_loading_cb_(closure) { + DCHECK(!continue_loading_cb_.is_null()); } PrerenderWebMediaPlayer::~PrerenderWebMediaPlayer() {} -void PrerenderWebMediaPlayer::load(const WebKit::WebURL& url, - CORSMode cors_mode) { - DCHECK(!url_loaded_); - if (is_prerendering_) { - url_to_load_.reset(new WebKit::WebURL(url)); - media_source_to_load_.reset(); - cors_mode_ = cors_mode; - return; - } - url_loaded_ = true; - WebMediaPlayerImpl::load(url, cors_mode); -} - -void PrerenderWebMediaPlayer::load(const WebKit::WebURL& url, - WebKit::WebMediaSource* media_source, - CORSMode cors_mode) { - DCHECK(!url_loaded_); - if (is_prerendering_) { - url_to_load_.reset(new WebKit::WebURL(url)); - media_source_to_load_.reset(media_source); - cors_mode_ = cors_mode; - return; - } - - url_loaded_ = true; - WebMediaPlayerImpl::load(url, media_source, cors_mode); -} - bool PrerenderWebMediaPlayer::OnMessageReceived(const IPC::Message& message) { IPC_BEGIN_MESSAGE_MAP(PrerenderWebMediaPlayer, message) IPC_MESSAGE_HANDLER(PrerenderMsg_SetIsPrerendering, OnSetIsPrerendering) @@ -72,13 +38,7 @@ void PrerenderWebMediaPlayer::OnSetIsPrerendering(bool is_prerendering) { return; is_prerendering_ = false; - if (!url_to_load_) - return; - - if (media_source_to_load_) - load(*url_to_load_, media_source_to_load_.release(), cors_mode_); - else - load(*url_to_load_, cors_mode_); + base::ResetAndReturn(&continue_loading_cb_).Run(); } } // namespace prerender diff --git a/chrome/renderer/prerender/prerender_webmediaplayer.h b/chrome/renderer/prerender/prerender_webmediaplayer.h index da0b4d3..60f9403 100644 --- a/chrome/renderer/prerender/prerender_webmediaplayer.h +++ b/chrome/renderer/prerender/prerender_webmediaplayer.h @@ -5,33 +5,23 @@ #ifndef CHROME_RENDERER_PRERENDER_PRERENDER_WEBMEDIAPLAYER_H_ #define CHROME_RENDERER_PRERENDER_PRERENDER_WEBMEDIAPLAYER_H_ -#include "base/memory/scoped_ptr.h" -#include "base/memory/weak_ptr.h" +#include "base/callback.h" #include "content/public/renderer/render_view_observer.h" -#include "webkit/renderer/media/webmediaplayer_impl.h" namespace prerender { -// Substitute for WebMediaPlayerImpl to be used in prerendered pages. Defers -// the loading of the media till the prerendered page is swapped in. -class PrerenderWebMediaPlayer - : public content::RenderViewObserver, - public webkit_media::WebMediaPlayerImpl { +// Defers media player loading in prerendered pages until the prerendered page +// is swapped in. +// +// TODO(scherkus): Rename as this class no longer inherits WebMediaPlayer. +class PrerenderWebMediaPlayer : public content::RenderViewObserver { public: - PrerenderWebMediaPlayer( - content::RenderView* render_view, - WebKit::WebFrame* frame, - WebKit::WebMediaPlayerClient* client, - base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, - const webkit_media::WebMediaPlayerParams& params); + // Will run |closure| to continue loading the media resource once the page is + // swapped in. + PrerenderWebMediaPlayer(content::RenderView* render_view, + const base::Closure& closure); virtual ~PrerenderWebMediaPlayer(); - // WebMediaPlayerImpl methods: - virtual void load(const WebKit::WebURL& url, CORSMode cors_mode) OVERRIDE; - virtual void load(const WebKit::WebURL& url, - WebKit::WebMediaSource* media_source, - CORSMode cors_mode) OVERRIDE; - private: // RenderViewObserver method: virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; @@ -39,10 +29,7 @@ class PrerenderWebMediaPlayer void OnSetIsPrerendering(bool is_prerendering); bool is_prerendering_; - bool url_loaded_; - scoped_ptr<WebKit::WebURL> url_to_load_; - scoped_ptr<WebKit::WebMediaSource> media_source_to_load_; - CORSMode cors_mode_; + base::Closure continue_loading_cb_; DISALLOW_COPY_AND_ASSIGN(PrerenderWebMediaPlayer); }; |