summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/renderer/chrome_content_renderer_client.cc21
-rw-r--r--chrome/renderer/chrome_content_renderer_client.h8
-rw-r--r--chrome/renderer/prerender/prerender_webmediaplayer.cc50
-rw-r--r--chrome/renderer/prerender/prerender_webmediaplayer.h35
-rw-r--r--content/content_shell.gypi2
-rw-r--r--content/public/renderer/content_renderer_client.cc16
-rw-r--r--content/public/renderer/content_renderer_client.h23
-rw-r--r--content/renderer/media/media_stream_impl.cc5
-rw-r--r--content/renderer/media/media_stream_impl.h6
-rw-r--r--content/renderer/render_view_impl.cc28
-rw-r--r--content/shell/renderer/shell_content_renderer_client.cc8
-rw-r--r--content/shell/renderer/shell_content_renderer_client.h4
-rw-r--r--content/shell/renderer/shell_media_stream_client.cc4
-rw-r--r--content/shell/renderer/shell_video_frame_provider.cc (renamed from webkit/renderer/media/simple_video_frame_provider.cc)34
-rw-r--r--content/shell/renderer/shell_video_frame_provider.h (renamed from webkit/renderer/media/simple_video_frame_provider.h)20
-rw-r--r--content/shell/renderer/webkit_test_runner.cc15
-rw-r--r--content/shell/renderer/webkit_test_runner.h5
-rw-r--r--webkit/renderer/media/webkit_media.gypi2
-rw-r--r--webkit/renderer/media/webmediaplayer_delegate.h6
-rw-r--r--webkit/renderer/media/webmediaplayer_impl.cc59
-rw-r--r--webkit/renderer/media/webmediaplayer_impl.h10
-rw-r--r--webkit/renderer/media/webmediaplayer_params.cc2
-rw-r--r--webkit/renderer/media/webmediaplayer_params.h6
23 files changed, 174 insertions, 195 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);
};
diff --git a/content/content_shell.gypi b/content/content_shell.gypi
index 0438cc6..271f74c 100644
--- a/content/content_shell.gypi
+++ b/content/content_shell.gypi
@@ -95,6 +95,8 @@
'shell/renderer/shell_render_process_observer.h',
'shell/renderer/shell_render_view_observer.cc',
'shell/renderer/shell_render_view_observer.h',
+ 'shell/renderer/shell_video_frame_provider.cc',
+ 'shell/renderer/shell_video_frame_provider.h',
'shell/renderer/webkit_test_runner.cc',
'shell/renderer/webkit_test_runner.h',
'shell/shell.cc',
diff --git a/content/public/renderer/content_renderer_client.cc b/content/public/renderer/content_renderer_client.cc
index e80ba37..13998ac 100644
--- a/content/public/renderer/content_renderer_client.cc
+++ b/content/public/renderer/content_renderer_client.cc
@@ -37,14 +37,9 @@ bool ContentRendererClient::HasErrorPage(int http_status_code,
return false;
}
-webkit_media::WebMediaPlayerImpl*
-ContentRendererClient::OverrideCreateWebMediaPlayer(
- RenderView* render_view,
- WebKit::WebFrame* frame,
- WebKit::WebMediaPlayerClient* client,
- base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
- const webkit_media::WebMediaPlayerParams& params) {
- return NULL;
+void ContentRendererClient::DeferMediaLoad(RenderView* render_view,
+ const base::Closure& closure) {
+ closure.Run();
}
WebKit::WebMediaStreamCenter*
@@ -59,6 +54,11 @@ ContentRendererClient::OverrideCreateWebRTCPeerConnectionHandler(
return NULL;
}
+webkit_media::MediaStreamClient*
+ContentRendererClient::OverrideCreateMediaStreamClient() {
+ return NULL;
+}
+
WebKit::WebMIDIAccessor*
ContentRendererClient::OverrideCreateMIDIAccessor(
WebKit::WebMIDIAccessorClient* client) {
diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h
index 073d0af..9ed12ad 100644
--- a/content/public/renderer/content_renderer_client.h
+++ b/content/public/renderer/content_renderer_client.h
@@ -31,7 +31,6 @@ class WebFrame;
class WebHyphenator;
class WebMIDIAccessor;
class WebMIDIAccessorClient;
-class WebMediaPlayerClient;
class WebMediaStreamCenter;
class WebMediaStreamCenterClient;
class WebPlugin;
@@ -55,9 +54,8 @@ struct WebPluginInfo;
}
namespace webkit_media {
-class WebMediaPlayerDelegate;
-class WebMediaPlayerImpl;
-class WebMediaPlayerParams;
+class MediaLoadDelegate;
+class MediaStreamClient;
}
namespace content {
@@ -126,14 +124,11 @@ class CONTENT_EXPORT ContentRendererClient {
std::string* error_html,
string16* error_description) {}
- // Allows embedder to override creating a WebMediaPlayerImpl. If it returns
- // NULL the content layer will create the media player.
- virtual webkit_media::WebMediaPlayerImpl* OverrideCreateWebMediaPlayer(
- RenderView* render_view,
- WebKit::WebFrame* frame,
- WebKit::WebMediaPlayerClient* client,
- base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
- const webkit_media::WebMediaPlayerParams& params);
+ // Allows the embedder to control when media resources are loaded. Embedders
+ // can run |closure| immediately if they don't wish to defer media resource
+ // loading.
+ virtual void DeferMediaLoad(RenderView* render_view,
+ const base::Closure& closure);
// Allows the embedder to override creating a WebMediaStreamCenter. If it
// returns NULL the content layer will create the stream center.
@@ -146,6 +141,10 @@ class CONTENT_EXPORT ContentRendererClient {
OverrideCreateWebRTCPeerConnectionHandler(
WebKit::WebRTCPeerConnectionHandlerClient* client);
+ // Allows the embedder to override creating a MediaStreamClient. If it returns
+ // NULL the content layer will create the media stream client.
+ virtual webkit_media::MediaStreamClient* OverrideCreateMediaStreamClient();
+
// Allows the embedder to override creating a WebMIDIAccessor. If it
// returns NULL the content layer will create the MIDI accessor.
virtual WebKit::WebMIDIAccessor* OverrideCreateMIDIAccessor(
diff --git a/content/renderer/media/media_stream_impl.cc b/content/renderer/media/media_stream_impl.cc
index cb3a5cb..2911a21 100644
--- a/content/renderer/media/media_stream_impl.cc
+++ b/content/renderer/media/media_stream_impl.cc
@@ -202,11 +202,6 @@ WebKit::WebMediaStream MediaStreamImpl::GetMediaStream(
}
bool MediaStreamImpl::IsMediaStream(const GURL& url) {
- return CheckMediaStream(url);
-}
-
-// static
-bool MediaStreamImpl::CheckMediaStream(const GURL& url) {
WebKit::WebMediaStream descriptor(
WebKit::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url));
diff --git a/content/renderer/media/media_stream_impl.h b/content/renderer/media/media_stream_impl.h
index 96fb73d..a2dee2b 100644
--- a/content/renderer/media/media_stream_impl.h
+++ b/content/renderer/media/media_stream_impl.h
@@ -54,12 +54,6 @@ class CONTENT_EXPORT MediaStreamImpl
MediaStreamDependencyFactory* dependency_factory);
virtual ~MediaStreamImpl();
- // Return true when the |url| is media stream.
- // This static function has the same functionalilty as IsMediaStream
- // except that it doesn't require an instance of this class.
- // This can save some overhead time when the |url| is not media stream.
- static bool CheckMediaStream(const GURL& url);
-
// WebKit::WebUserMediaClient implementation
virtual void requestUserMedia(
const WebKit::WebUserMediaRequest& user_media_request) OVERRIDE;
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 7bcff21..54e4e4c 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -2852,7 +2852,14 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer(
const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
#if defined(ENABLE_WEBRTC) && !defined(GOOGLE_TV)
- if (MediaStreamImpl::CheckMediaStream(url)) {
+ webkit_media::MediaStreamClient* media_stream_client =
+ GetContentClient()->renderer()->OverrideCreateMediaStreamClient();
+ if (!media_stream_client) {
+ EnsureMediaStreamImpl();
+ media_stream_client = media_stream_impl_;
+ }
+
+ if (media_stream_client->IsMediaStream(url)) {
#if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
bool found_neon =
(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0;
@@ -2860,7 +2867,7 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer(
#endif // defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
EnsureMediaStreamImpl();
return new webkit_media::WebMediaPlayerMS(
- frame, client, AsWeakPtr(), media_stream_impl_, new RenderMediaLog());
+ frame, client, AsWeakPtr(), media_stream_client, new RenderMediaLog());
}
#endif
@@ -2940,15 +2947,14 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer(
webkit_media::WebMediaPlayerParams params(
RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(),
- sink, gpu_factories, new RenderMediaLog());
- WebMediaPlayer* media_player =
- GetContentClient()->renderer()->OverrideCreateWebMediaPlayer(
- this, frame, client, AsWeakPtr(), params);
- if (!media_player) {
- media_player = new webkit_media::WebMediaPlayerImpl(
- frame, client, AsWeakPtr(), params);
- }
- return media_player;
+ base::Bind(&ContentRendererClient::DeferMediaLoad,
+ base::Unretained(GetContentClient()->renderer()),
+ static_cast<RenderView*>(this)),
+ sink,
+ gpu_factories,
+ new RenderMediaLog());
+ return new webkit_media::WebMediaPlayerImpl(
+ frame, client, AsWeakPtr(), params);
}
WebApplicationCacheHost* RenderViewImpl::createApplicationCacheHost(
diff --git a/content/shell/renderer/shell_content_renderer_client.cc b/content/shell/renderer/shell_content_renderer_client.cc
index 68dccc9..650e7c5 100644
--- a/content/shell/renderer/shell_content_renderer_client.cc
+++ b/content/shell/renderer/shell_content_renderer_client.cc
@@ -12,6 +12,7 @@
#include "content/public/renderer/render_view.h"
#include "content/public/test/layouttest_support.h"
#include "content/shell/common/shell_switches.h"
+#include "content/shell/renderer/shell_media_stream_client.h"
#include "content/shell/renderer/shell_render_process_observer.h"
#include "content/shell/renderer/shell_render_view_observer.h"
#include "content/shell/renderer/webkit_test_runner.h"
@@ -145,6 +146,13 @@ ShellContentRendererClient::OverrideCreateWebRTCPeerConnectionHandler(
#endif
}
+webkit_media::MediaStreamClient*
+ShellContentRendererClient::OverrideCreateMediaStreamClient() {
+ if (!shell_media_stream_client_)
+ shell_media_stream_client_.reset(new ShellMediaStreamClient());
+ return shell_media_stream_client_.get();
+}
+
WebMIDIAccessor*
ShellContentRendererClient::OverrideCreateMIDIAccessor(
WebMIDIAccessorClient* client) {
diff --git a/content/shell/renderer/shell_content_renderer_client.h b/content/shell/renderer/shell_content_renderer_client.h
index 7b8384f..373f320 100644
--- a/content/shell/renderer/shell_content_renderer_client.h
+++ b/content/shell/renderer/shell_content_renderer_client.h
@@ -28,6 +28,7 @@ class MockWebClipboardImpl;
namespace content {
+class ShellMediaStreamClient;
class ShellRenderProcessObserver;
class ShellContentRendererClient : public ContentRendererClient {
@@ -52,6 +53,8 @@ class ShellContentRendererClient : public ContentRendererClient {
virtual WebKit::WebRTCPeerConnectionHandler*
OverrideCreateWebRTCPeerConnectionHandler(
WebKit::WebRTCPeerConnectionHandlerClient* client) OVERRIDE;
+ virtual webkit_media::MediaStreamClient* OverrideCreateMediaStreamClient()
+ OVERRIDE;
virtual WebKit::WebMIDIAccessor* OverrideCreateMIDIAccessor(
WebKit::WebMIDIAccessorClient* client) OVERRIDE;
virtual WebKit::WebClipboard* OverrideWebClipboard() OVERRIDE;
@@ -64,6 +67,7 @@ class ShellContentRendererClient : public ContentRendererClient {
void WebTestProxyCreated(RenderView* render_view,
WebTestRunner::WebTestProxyBase* proxy);
+ scoped_ptr<ShellMediaStreamClient> shell_media_stream_client_;
scoped_ptr<ShellRenderProcessObserver> shell_observer_;
scoped_ptr<MockWebClipboardImpl> clipboard_;
scoped_ptr<webkit_glue::MockWebHyphenator> hyphenator_;
diff --git a/content/shell/renderer/shell_media_stream_client.cc b/content/shell/renderer/shell_media_stream_client.cc
index 1107b3d..48580a6 100644
--- a/content/shell/renderer/shell_media_stream_client.cc
+++ b/content/shell/renderer/shell_media_stream_client.cc
@@ -4,13 +4,13 @@
#include "content/shell/renderer/shell_media_stream_client.h"
+#include "content/shell/renderer/shell_video_frame_provider.h"
#include "googleurl/src/gurl.h"
#include "third_party/WebKit/public/platform/WebMediaStream.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
#include "third_party/WebKit/public/platform/WebVector.h"
#include "third_party/WebKit/public/web/WebMediaStreamRegistry.h"
#include "webkit/renderer/media/media_stream_audio_renderer.h"
-#include "webkit/renderer/media/simple_video_frame_provider.h"
using namespace WebKit;
@@ -54,7 +54,7 @@ ShellMediaStreamClient::GetVideoFrameProvider(
if (!IsMockMediaStreamWithVideo(url))
return NULL;
- return new webkit_media::SimpleVideoFrameProvider(
+ return new ShellVideoFrameProvider(
gfx::Size(kVideoCaptureWidth, kVideoCaptureHeight),
base::TimeDelta::FromMilliseconds(kVideoCaptureFrameDurationMs),
error_cb,
diff --git a/webkit/renderer/media/simple_video_frame_provider.cc b/content/shell/renderer/shell_video_frame_provider.cc
index 1bc2323..8c4d440 100644
--- a/webkit/renderer/media/simple_video_frame_provider.cc
+++ b/content/shell/renderer/shell_video_frame_provider.cc
@@ -2,16 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "webkit/renderer/media/simple_video_frame_provider.h"
+#include "content/shell/renderer/shell_video_frame_provider.h"
#include "base/bind.h"
#include "base/location.h"
#include "base/message_loop/message_loop_proxy.h"
#include "media/base/video_frame.h"
-namespace webkit_media {
+namespace content {
-SimpleVideoFrameProvider::SimpleVideoFrameProvider(
+ShellVideoFrameProvider::ShellVideoFrameProvider(
const gfx::Size& size,
const base::TimeDelta& frame_duration,
const base::Closure& error_cb,
@@ -24,39 +24,39 @@ SimpleVideoFrameProvider::SimpleVideoFrameProvider(
repaint_cb_(repaint_cb) {
}
-SimpleVideoFrameProvider::~SimpleVideoFrameProvider() {}
+ShellVideoFrameProvider::~ShellVideoFrameProvider() {}
-void SimpleVideoFrameProvider::Start() {
- DVLOG(1) << "SimpleVideoFrameProvider::Start";
+void ShellVideoFrameProvider::Start() {
+ DVLOG(1) << "ShellVideoFrameProvider::Start";
DCHECK(message_loop_proxy_->BelongsToCurrentThread());
state_ = kStarted;
message_loop_proxy_->PostTask(
FROM_HERE,
- base::Bind(&SimpleVideoFrameProvider::GenerateFrame, this));
+ base::Bind(&ShellVideoFrameProvider::GenerateFrame, this));
}
-void SimpleVideoFrameProvider::Stop() {
- DVLOG(1) << "SimpleVideoFrameProvider::Stop";
+void ShellVideoFrameProvider::Stop() {
+ DVLOG(1) << "ShellVideoFrameProvider::Stop";
DCHECK(message_loop_proxy_->BelongsToCurrentThread());
state_ = kStopped;
}
-void SimpleVideoFrameProvider::Play() {
- DVLOG(1) << "SimpleVideoFrameProvider::Play";
+void ShellVideoFrameProvider::Play() {
+ DVLOG(1) << "ShellVideoFrameProvider::Play";
DCHECK(message_loop_proxy_->BelongsToCurrentThread());
if (state_ == kPaused)
state_ = kStarted;
}
-void SimpleVideoFrameProvider::Pause() {
- DVLOG(1) << "SimpleVideoFrameProvider::Pause";
+void ShellVideoFrameProvider::Pause() {
+ DVLOG(1) << "ShellVideoFrameProvider::Pause";
DCHECK(message_loop_proxy_->BelongsToCurrentThread());
if (state_ == kStarted)
state_ = kPaused;
}
-void SimpleVideoFrameProvider::GenerateFrame() {
- DVLOG(1) << "SimpleVideoFrameProvider::GenerateFrame";
+void ShellVideoFrameProvider::GenerateFrame() {
+ DVLOG(1) << "ShellVideoFrameProvider::GenerateFrame";
DCHECK(message_loop_proxy_->BelongsToCurrentThread());
if (state_ == kStopped)
return;
@@ -76,8 +76,8 @@ void SimpleVideoFrameProvider::GenerateFrame() {
current_time_ += frame_duration_;
message_loop_proxy_->PostDelayedTask(
FROM_HERE,
- base::Bind(&SimpleVideoFrameProvider::GenerateFrame, this),
+ base::Bind(&ShellVideoFrameProvider::GenerateFrame, this),
frame_duration_);
}
-} // namespace webkit_media
+} // namespace content
diff --git a/webkit/renderer/media/simple_video_frame_provider.h b/content/shell/renderer/shell_video_frame_provider.h
index bcc0679..fdcc866 100644
--- a/webkit/renderer/media/simple_video_frame_provider.h
+++ b/content/shell/renderer/shell_video_frame_provider.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef WEBKIT_RENDERER_MEDIA_SIMPLE_VIDEO_FRAME_PROVIDER_H_
-#define WEBKIT_RENDERER_MEDIA_SIMPLE_VIDEO_FRAME_PROVIDER_H_
+#ifndef CONTENT_RENDERER_MEDIA_SHELL_VIDEO_FRAME_PROVIDER_H_
+#define CONTENT_RENDERER_MEDIA_SHELL_VIDEO_FRAME_PROVIDER_H_
#include "base/time/time.h"
#include "ui/gfx/size.h"
@@ -13,29 +13,29 @@ namespace base {
class MessageLoopProxy;
}
-namespace webkit_media {
+namespace content {
// A simple implementation of VideoFrameProvider generates raw frames and
// passes them to webmediaplayer.
// Since non-black pixel values are required in the layout test, e.g.,
// media/video-capture-canvas.html, this class should generate frame with
// only non-black pixels.
-class SimpleVideoFrameProvider : public VideoFrameProvider {
+class ShellVideoFrameProvider : public webkit_media::VideoFrameProvider {
public:
- SimpleVideoFrameProvider(
+ ShellVideoFrameProvider(
const gfx::Size& size,
const base::TimeDelta& frame_duration,
const base::Closure& error_cb,
const RepaintCB& repaint_cb);
- // VideoFrameProvider implementation.
+ // webkit_media::VideoFrameProvider implementation.
virtual void Start() OVERRIDE;
virtual void Stop() OVERRIDE;
virtual void Play() OVERRIDE;
virtual void Pause() OVERRIDE;
protected:
- virtual ~SimpleVideoFrameProvider();
+ virtual ~ShellVideoFrameProvider();
private:
enum State {
@@ -55,9 +55,9 @@ class SimpleVideoFrameProvider : public VideoFrameProvider {
base::Closure error_cb_;
RepaintCB repaint_cb_;
- DISALLOW_COPY_AND_ASSIGN(SimpleVideoFrameProvider);
+ DISALLOW_COPY_AND_ASSIGN(ShellVideoFrameProvider);
};
-} // namespace webkit_media
+} // namespace content
-#endif // WEBKIT_RENDERER_MEDIA_SIMPLE_VIDEO_FRAME_PROVIDER_H_
+#endif // CONTENT_RENDERER_MEDIA_SHELL_VIDEO_FRAME_PROVIDER_H_
diff --git a/content/shell/renderer/webkit_test_runner.cc b/content/shell/renderer/webkit_test_runner.cc
index 94b5619..49f3f18 100644
--- a/content/shell/renderer/webkit_test_runner.cc
+++ b/content/shell/renderer/webkit_test_runner.cc
@@ -515,9 +515,12 @@ void WebKitTestRunner::captureHistoryForWindow(
history->swap(result);
}
+// TODO(scherkus): Remove once https://codereview.chromium.org/18130006
+// rolls into Chromium.
WebMediaPlayer* WebKitTestRunner::createWebMediaPlayer(
- WebFrame* frame, const WebURL& url, WebMediaPlayerClient* client)
-{
+ WebFrame* frame,
+ const WebURL& url,
+ WebMediaPlayerClient* client) {
if (!shell_media_stream_client_) {
shell_media_stream_client_.reset(new ShellMediaStreamClient());
}
@@ -534,10 +537,12 @@ WebMediaPlayer* WebKitTestRunner::createWebMediaPlayer(
#if defined(OS_ANDROID)
return NULL;
#else
- // TODO(scherkus): Use RenderViewImpl::createMediaPlayer() instead of
- // duplicating code here, see http://crbug.com/239826
webkit_media::WebMediaPlayerParams params(
- GetMediaThreadMessageLoopProxy(), NULL, NULL, new media::MediaLog());
+ GetMediaThreadMessageLoopProxy(),
+ base::Callback<void(const base::Closure&)>(),
+ NULL,
+ NULL,
+ new media::MediaLog());
return new webkit_media::WebMediaPlayerImpl(
frame,
client,
diff --git a/content/shell/renderer/webkit_test_runner.h b/content/shell/renderer/webkit_test_runner.h
index d5be5c8..67c288a 100644
--- a/content/shell/renderer/webkit_test_runner.h
+++ b/content/shell/renderer/webkit_test_runner.h
@@ -94,6 +94,9 @@ class WebKitTestRunner : public RenderViewObserver,
WebTestRunner::WebTestProxyBase* proxy,
WebKit::WebVector<WebKit::WebHistoryItem>* history,
size_t* currentEntryIndex);
+
+ // TODO(scherkus): Remove once https://codereview.chromium.org/18130006
+ // rolls into Chromium.
virtual WebKit::WebMediaPlayer* createWebMediaPlayer(
WebKit::WebFrame* frame,
const WebKit::WebURL& url,
@@ -134,6 +137,8 @@ class WebKitTestRunner : public RenderViewObserver,
bool focus_on_next_commit_;
+ // TODO(scherkus): Remove this after switching to using
+ // RenderViewImpl::createMediaPlayer() http://crbug.com/239826
scoped_ptr<ShellMediaStreamClient> shell_media_stream_client_;
DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner);
diff --git a/webkit/renderer/media/webkit_media.gypi b/webkit/renderer/media/webkit_media.gypi
index 2873d69..f7f446f 100644
--- a/webkit/renderer/media/webkit_media.gypi
+++ b/webkit/renderer/media/webkit_media.gypi
@@ -62,8 +62,6 @@
'media_stream_audio_renderer.h',
'media_stream_client.h',
'preload.h',
- 'simple_video_frame_provider.cc',
- 'simple_video_frame_provider.h',
'texttrack_impl.cc',
'texttrack_impl.h',
'video_frame_provider.cc',
diff --git a/webkit/renderer/media/webmediaplayer_delegate.h b/webkit/renderer/media/webmediaplayer_delegate.h
index 32bd9e4..9718f7c 100644
--- a/webkit/renderer/media/webmediaplayer_delegate.h
+++ b/webkit/renderer/media/webmediaplayer_delegate.h
@@ -17,13 +17,13 @@ class WebMediaPlayerDelegate {
WebMediaPlayerDelegate() {}
// The specified player started playing media.
- virtual void DidPlay(WebKit::WebMediaPlayer* player) {}
+ virtual void DidPlay(WebKit::WebMediaPlayer* player) = 0;
// The specified player stopped playing media.
- virtual void DidPause(WebKit::WebMediaPlayer* player) {}
+ virtual void DidPause(WebKit::WebMediaPlayer* player) = 0;
// The specified player was destroyed. Do not call any methods on it.
- virtual void PlayerGone(WebKit::WebMediaPlayer* player) {}
+ virtual void PlayerGone(WebKit::WebMediaPlayer* player) = 0;
protected:
virtual ~WebMediaPlayerDelegate() {}
diff --git a/webkit/renderer/media/webmediaplayer_impl.cc b/webkit/renderer/media/webmediaplayer_impl.cc
index 08fa5da..30ba639 100644
--- a/webkit/renderer/media/webmediaplayer_impl.cc
+++ b/webkit/renderer/media/webmediaplayer_impl.cc
@@ -139,6 +139,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
pending_seek_seconds_(0.0f),
client_(client),
delegate_(delegate),
+ defer_load_cb_(params.defer_load_cb()),
media_log_(params.media_log()),
accelerated_compositing_reported_(false),
incremented_externally_allocated_memory_(false),
@@ -242,37 +243,26 @@ URLSchemeForHistogram URLScheme(const GURL& url) {
} // anonymous namespace
void WebMediaPlayerImpl::load(const WebKit::WebURL& url, CORSMode cors_mode) {
- DCHECK(main_loop_->BelongsToCurrentThread());
-
- LoadSetup(url);
-
- // Otherwise it's a regular request which requires resolving the URL first.
- GURL gurl(url);
- data_source_.reset(new BufferedDataSource(
- main_loop_,
- frame_,
- media_log_.get(),
- base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr())));
- data_source_->Initialize(
- url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode),
- base::Bind(
- &WebMediaPlayerImpl::DataSourceInitialized,
- AsWeakPtr(), gurl));
-
- is_local_source_ = !gurl.SchemeIs("http") && !gurl.SchemeIs("https");
+ load(url, NULL, cors_mode);
}
void WebMediaPlayerImpl::load(const WebKit::WebURL& url,
WebKit::WebMediaSource* media_source,
CORSMode cors_mode) {
- LoadSetup(url);
-
- // Media source pipelines can start immediately.
- supports_save_ = false;
- StartPipeline(media_source);
+ if (!defer_load_cb_.is_null()) {
+ defer_load_cb_.Run(base::Bind(
+ &WebMediaPlayerImpl::DoLoad, AsWeakPtr(), url, media_source,
+ cors_mode));
+ return;
+ }
+ DoLoad(url, media_source, cors_mode);
}
-void WebMediaPlayerImpl::LoadSetup(const WebKit::WebURL& url) {
+void WebMediaPlayerImpl::DoLoad(const WebKit::WebURL& url,
+ WebKit::WebMediaSource* media_source,
+ CORSMode cors_mode) {
+ DCHECK(main_loop_->BelongsToCurrentThread());
+
GURL gurl(url);
UMA_HISTOGRAM_ENUMERATION("Media.URLScheme", URLScheme(gurl), kMaxURLScheme);
@@ -286,6 +276,27 @@ void WebMediaPlayerImpl::LoadSetup(const WebKit::WebURL& url) {
SetNetworkState(WebMediaPlayer::NetworkStateLoading);
SetReadyState(WebMediaPlayer::ReadyStateHaveNothing);
media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec()));
+
+ // Media source pipelines can start immediately.
+ if (media_source) {
+ supports_save_ = false;
+ StartPipeline(media_source);
+ return;
+ }
+
+ // Otherwise it's a regular request which requires resolving the URL first.
+ data_source_.reset(new BufferedDataSource(
+ main_loop_,
+ frame_,
+ media_log_.get(),
+ base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr())));
+ data_source_->Initialize(
+ url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode),
+ base::Bind(
+ &WebMediaPlayerImpl::DataSourceInitialized,
+ AsWeakPtr(), gurl));
+
+ is_local_source_ = !gurl.SchemeIs("http") && !gurl.SchemeIs("https");
}
void WebMediaPlayerImpl::play() {
diff --git a/webkit/renderer/media/webmediaplayer_impl.h b/webkit/renderer/media/webmediaplayer_impl.h
index 804866f..a691c4d 100644
--- a/webkit/renderer/media/webmediaplayer_impl.h
+++ b/webkit/renderer/media/webmediaplayer_impl.h
@@ -67,7 +67,6 @@ class WebLayerImpl;
namespace webkit_media {
class BufferedDataSource;
-class MediaStreamClient;
class WebAudioSourceProviderImpl;
class WebMediaPlayerDelegate;
class WebMediaPlayerParams;
@@ -207,8 +206,11 @@ class WebMediaPlayerImpl
void SetOpaque(bool);
private:
- // Contains common logic used across the different types loading.
- void LoadSetup(const WebKit::WebURL& url);
+ // Called after |defer_load_cb_| has decided to allow the load. If
+ // |defer_load_cb_| is null this is called immediately.
+ void DoLoad(const WebKit::WebURL& url,
+ WebKit::WebMediaSource* media_source,
+ CORSMode cors_mode);
// Called after asynchronous initialization of a data source completed.
void DataSourceInitialized(const GURL& gurl, bool success);
@@ -307,7 +309,7 @@ class WebMediaPlayerImpl
base::WeakPtr<WebMediaPlayerDelegate> delegate_;
- MediaStreamClient* media_stream_client_;
+ base::Callback<void(const base::Closure&)> defer_load_cb_;
scoped_refptr<media::MediaLog> media_log_;
diff --git a/webkit/renderer/media/webmediaplayer_params.cc b/webkit/renderer/media/webmediaplayer_params.cc
index 6bcac8d..36f190f 100644
--- a/webkit/renderer/media/webmediaplayer_params.cc
+++ b/webkit/renderer/media/webmediaplayer_params.cc
@@ -12,10 +12,12 @@ namespace webkit_media {
WebMediaPlayerParams::WebMediaPlayerParams(
const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy,
+ const base::Callback<void(const base::Closure&)>& defer_load_cb,
const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink,
const scoped_refptr<media::GpuVideoDecoder::Factories>& gpu_factories,
const scoped_refptr<media::MediaLog>& media_log)
: message_loop_proxy_(message_loop_proxy),
+ defer_load_cb_(defer_load_cb),
audio_renderer_sink_(audio_renderer_sink),
gpu_factories_(gpu_factories),
media_log_(media_log) {
diff --git a/webkit/renderer/media/webmediaplayer_params.h b/webkit/renderer/media/webmediaplayer_params.h
index 62a5ce1..02d23e8 100644
--- a/webkit/renderer/media/webmediaplayer_params.h
+++ b/webkit/renderer/media/webmediaplayer_params.h
@@ -27,6 +27,7 @@ class WebMediaPlayerParams {
// all others may be null.
WebMediaPlayerParams(
const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy,
+ const base::Callback<void(const base::Closure&)>& defer_load_cb,
const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink,
const scoped_refptr<media::GpuVideoDecoder::Factories>& gpu_factories,
const scoped_refptr<media::MediaLog>& media_log);
@@ -36,6 +37,10 @@ class WebMediaPlayerParams {
return message_loop_proxy_;
}
+ base::Callback<void(const base::Closure&)> defer_load_cb() const {
+ return defer_load_cb_;
+ }
+
const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink() const {
return audio_renderer_sink_;
}
@@ -51,6 +56,7 @@ class WebMediaPlayerParams {
private:
scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
+ base::Callback<void(const base::Closure&)> defer_load_cb_;
scoped_refptr<media::AudioRendererSink> audio_renderer_sink_;
scoped_refptr<media::GpuVideoDecoder::Factories> gpu_factories_;
scoped_refptr<media::MediaLog> media_log_;