diff options
-rw-r--r-- | chrome/renderer/chrome_content_renderer_client.cc | 12 | ||||
-rw-r--r-- | chrome/renderer/chrome_content_renderer_client.h | 6 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_webmediaplayer.cc | 6 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_webmediaplayer.h | 3 | ||||
-rw-r--r-- | content/public/renderer/content_renderer_client.h | 13 | ||||
-rw-r--r-- | content/renderer/mock_content_renderer_client.cc | 11 | ||||
-rw-r--r-- | content/renderer/mock_content_renderer_client.h | 8 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 14 | ||||
-rw-r--r-- | content/shell/shell_content_renderer_client.cc | 11 | ||||
-rw-r--r-- | content/shell/shell_content_renderer_client.h | 8 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.cc | 47 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.h | 10 | ||||
-rw-r--r-- | webkit/support/webkit_support.cc | 20 | ||||
-rw-r--r-- | webkit/tools/test_shell/test_webview_delegate.cc | 20 |
14 files changed, 84 insertions, 105 deletions
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index fea0e85..90516e6 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc @@ -299,23 +299,23 @@ bool ChromeContentRendererClient::OverrideCreatePlugin( return true; } -bool ChromeContentRendererClient::OverrideCreateWebMediaPlayer( +webkit_media::WebMediaPlayerImpl* +ChromeContentRendererClient::OverrideCreateWebMediaPlayer( content::RenderView* render_view, + WebKit::WebFrame* frame, WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, - media::MediaLog* media_log, - webkit_media::WebMediaPlayerImpl** player) { + media::MediaLog* media_log) { if (!prerender::PrerenderHelper::IsPrerendering(render_view)) - return false; + return NULL; - *player = new prerender::PrerenderWebMediaPlayer(render_view, client, + return new prerender::PrerenderWebMediaPlayer(render_view, frame, client, delegate, collection, audio_source_provider, message_loop_factory, media_stream_client, media_log); - return true; } WebPlugin* ChromeContentRendererClient::CreatePlugin( diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h index 9caa32d..05cd4bb 100644 --- a/chrome/renderer/chrome_content_renderer_client.h +++ b/chrome/renderer/chrome_content_renderer_client.h @@ -61,16 +61,16 @@ class ChromeContentRendererClient : public content::ContentRendererClient { const WebKit::WebURLError& error, std::string* error_html, string16* error_description) OVERRIDE; - virtual bool OverrideCreateWebMediaPlayer( + virtual webkit_media::WebMediaPlayerImpl* OverrideCreateWebMediaPlayer( content::RenderView* render_view, + WebKit::WebFrame* frame, WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, - media::MediaLog* media_log, - webkit_media::WebMediaPlayerImpl** player) OVERRIDE; + media::MediaLog* media_log) OVERRIDE; virtual bool RunIdleHandlerWhenWidgetsHidden() OVERRIDE; virtual bool AllowPopup(const GURL& creator) OVERRIDE; virtual bool ShouldFork(WebKit::WebFrame* frame, diff --git a/chrome/renderer/prerender/prerender_webmediaplayer.cc b/chrome/renderer/prerender/prerender_webmediaplayer.cc index c63af25..5a35e12 100644 --- a/chrome/renderer/prerender/prerender_webmediaplayer.cc +++ b/chrome/renderer/prerender/prerender_webmediaplayer.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -16,6 +16,7 @@ namespace prerender { PrerenderWebMediaPlayer::PrerenderWebMediaPlayer( content::RenderView* render_view, + WebKit::WebFrame* frame, WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, @@ -24,7 +25,8 @@ PrerenderWebMediaPlayer::PrerenderWebMediaPlayer( webkit_media::MediaStreamClient* media_stream_client, media::MediaLog* media_log) : RenderViewObserver(render_view), - WebMediaPlayerImpl(client, + WebMediaPlayerImpl(frame, + client, delegate, collection, audio_source_provider, diff --git a/chrome/renderer/prerender/prerender_webmediaplayer.h b/chrome/renderer/prerender/prerender_webmediaplayer.h index 8370367..9b822fd 100644 --- a/chrome/renderer/prerender/prerender_webmediaplayer.h +++ b/chrome/renderer/prerender/prerender_webmediaplayer.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -26,6 +26,7 @@ class PrerenderWebMediaPlayer public: PrerenderWebMediaPlayer( content::RenderView* render_view, + WebKit::WebFrame* frame, WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h index 279d65b..7a9d7cd 100644 --- a/content/public/renderer/content_renderer_client.h +++ b/content/public/renderer/content_renderer_client.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -104,19 +104,18 @@ class ContentRendererClient { std::string* error_html, string16* error_description) = 0; - // Allows embedder to override creating a WebMediaPlayer. If it returns - // true, then |player| will contain the created player. Else the content - // layer should create the media player. - virtual bool OverrideCreateWebMediaPlayer( + // 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, media::FilterCollection* collection, WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, - media::MediaLog* media_log, - webkit_media::WebMediaPlayerImpl** player) = 0; + media::MediaLog* media_log) = 0; // Returns true if the renderer process should schedule the idle handler when // all widgets are hidden. diff --git a/content/renderer/mock_content_renderer_client.cc b/content/renderer/mock_content_renderer_client.cc index 5a50a0e..fe811cc 100644 --- a/content/renderer/mock_content_renderer_client.cc +++ b/content/renderer/mock_content_renderer_client.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -42,17 +42,18 @@ bool MockContentRendererClient::HasErrorPage(int http_status_code, return false; } -bool MockContentRendererClient::OverrideCreateWebMediaPlayer( +webkit_media::WebMediaPlayerImpl* +MockContentRendererClient::OverrideCreateWebMediaPlayer( RenderView* render_view, + WebKit::WebFrame* frame, WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, - media::MediaLog* media_log, - webkit_media::WebMediaPlayerImpl** player) { - return false; + media::MediaLog* media_log) { + return NULL; } void MockContentRendererClient::GetNavigationErrorStrings( diff --git a/content/renderer/mock_content_renderer_client.h b/content/renderer/mock_content_renderer_client.h index 7bd1c33..af62886 100644 --- a/content/renderer/mock_content_renderer_client.h +++ b/content/renderer/mock_content_renderer_client.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -34,16 +34,16 @@ class MockContentRendererClient : public ContentRendererClient { const WebKit::WebURLError& error, std::string* error_html, string16* error_description) OVERRIDE; - virtual bool OverrideCreateWebMediaPlayer( + virtual webkit_media::WebMediaPlayerImpl* OverrideCreateWebMediaPlayer( RenderView* render_view, + WebKit::WebFrame* frame, WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, - media::MediaLog* media_log, - webkit_media::WebMediaPlayerImpl** player) OVERRIDE; + media::MediaLog* media_log) OVERRIDE; virtual bool RunIdleHandlerWhenWidgetsHidden() OVERRIDE; virtual bool AllowPopup(const GURL& creator) OVERRIDE; virtual bool ShouldFork(WebKit::WebFrame* frame, diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index c5f1fc6..12a5ac7 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -1985,17 +1985,15 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer( } #endif - webkit_media::WebMediaPlayerImpl* media_player = NULL; - if (!content::GetContentClient()->renderer()->OverrideCreateWebMediaPlayer( - this, client, AsWeakPtr(), collection, audio_source_provider, - message_loop_factory, media_stream_impl_.get(), render_media_log, - &media_player)) { + webkit_media::WebMediaPlayerImpl* media_player = + content::GetContentClient()->renderer()->OverrideCreateWebMediaPlayer( + this, frame, client, AsWeakPtr(), collection, audio_source_provider, + message_loop_factory, media_stream_impl_.get(), render_media_log); + if (!media_player) { media_player = new webkit_media::WebMediaPlayerImpl( - client, AsWeakPtr(), collection, audio_source_provider, + frame, client, AsWeakPtr(), collection, audio_source_provider, message_loop_factory, media_stream_impl_.get(), render_media_log); } - - media_player->Initialize(frame); return media_player; } diff --git a/content/shell/shell_content_renderer_client.cc b/content/shell/shell_content_renderer_client.cc index ddf3c44..b1f0d41 100644 --- a/content/shell/shell_content_renderer_client.cc +++ b/content/shell/shell_content_renderer_client.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -48,17 +48,18 @@ void ShellContentRendererClient::GetNavigationErrorStrings( string16* error_description) { } -bool ShellContentRendererClient::OverrideCreateWebMediaPlayer( +webkit_media::WebMediaPlayerImpl* +ShellContentRendererClient::OverrideCreateWebMediaPlayer( RenderView* render_view, + WebKit::WebFrame* frame, WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, - media::MediaLog* media_log, - webkit_media::WebMediaPlayerImpl** player) { - return false; + media::MediaLog* media_log) { + return NULL; } bool ShellContentRendererClient::RunIdleHandlerWhenWidgetsHidden() { diff --git a/content/shell/shell_content_renderer_client.h b/content/shell/shell_content_renderer_client.h index e0cdc87..eed6d0b 100644 --- a/content/shell/shell_content_renderer_client.h +++ b/content/shell/shell_content_renderer_client.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -31,16 +31,16 @@ class ShellContentRendererClient : public ContentRendererClient { const WebKit::WebURLError& error, std::string* error_html, string16* error_description) OVERRIDE; - virtual bool OverrideCreateWebMediaPlayer( + virtual webkit_media::WebMediaPlayerImpl* OverrideCreateWebMediaPlayer( RenderView* render_view, + WebKit::WebFrame* frame, WebKit::WebMediaPlayerClient* client, base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, WebKit::WebAudioSourceProvider* audio_source_provider, media::MessageLoopFactory* message_loop_factory, webkit_media::MediaStreamClient* media_stream_client, - media::MediaLog* media_log, - webkit_media::WebMediaPlayerImpl** player) OVERRIDE; + media::MediaLog* media_log) OVERRIDE; virtual bool RunIdleHandlerWhenWidgetsHidden() OVERRIDE; virtual bool AllowPopup(const GURL& creator) OVERRIDE; virtual bool ShouldFork(WebKit::WebFrame* frame, diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc index 4a24a61..d441e61 100644 --- a/webkit/media/webmediaplayer_impl.cc +++ b/webkit/media/webmediaplayer_impl.cc @@ -99,6 +99,7 @@ base::TimeDelta ConvertSecondsToTimestamp(float seconds) { namespace webkit_media { WebMediaPlayerImpl::WebMediaPlayerImpl( + WebKit::WebFrame* frame, WebKit::WebMediaPlayerClient* client, base::WeakPtr<WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, @@ -108,9 +109,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( media::MediaLog* media_log) : network_state_(WebKit::WebMediaPlayer::Empty), ready_state_(WebKit::WebMediaPlayer::HaveNothing), - main_loop_(NULL), + main_loop_(MessageLoop::current()), filter_collection_(collection), - pipeline_(NULL), message_loop_factory_(message_loop_factory), paused_(true), seeking_(false), @@ -118,48 +118,46 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( pending_seek_(false), pending_seek_seconds_(0.0f), client_(client), - proxy_(NULL), + proxy_(new WebMediaPlayerProxy(main_loop_, this)), delegate_(delegate), media_stream_client_(media_stream_client), media_log_(media_log), is_accelerated_compositing_active_(false), incremented_externally_allocated_memory_(false), audio_source_provider_(audio_source_provider) { - // Saves the current message loop. - DCHECK(!main_loop_); - main_loop_ = MessageLoop::current(); media_log_->AddEvent( media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); -} -void WebMediaPlayerImpl::Initialize(WebKit::WebFrame* frame) { - DCHECK_EQ(main_loop_, MessageLoop::current()); MessageLoop* pipeline_message_loop = message_loop_factory_->GetMessageLoop("PipelineThread"); CHECK(pipeline_message_loop) << "Failed to create a new thread"; + pipeline_ = new media::PipelineImpl(pipeline_message_loop, media_log_); + pipeline_->Init( + base::Bind(&WebMediaPlayerProxy::PipelineEndedCallback, + proxy_.get()), + base::Bind(&WebMediaPlayerProxy::PipelineErrorCallback, + proxy_.get()), + base::Bind(&WebMediaPlayerProxy::NetworkEventCallback, + proxy_.get())); // Let V8 know we started new thread if we did not did it yet. // Made separate task to avoid deletion of player currently being created. // Also, delaying GC until after player starts gets rid of starting lag -- // collection happens in parallel with playing. + // // TODO(enal): remove when we get rid of per-audio-stream thread. - if (!incremented_externally_allocated_memory_) { - MessageLoop::current()->PostTask( - FROM_HERE, - base::Bind(&WebMediaPlayerImpl::IncrementExternallyAllocatedMemory, - AsWeakPtr())); - } + MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&WebMediaPlayerImpl::IncrementExternallyAllocatedMemory, + AsWeakPtr())); is_accelerated_compositing_active_ = frame->view()->isAcceleratedCompositingActive(); - pipeline_ = new media::PipelineImpl(pipeline_message_loop, media_log_); - // Also we want to be notified of |main_loop_| destruction. main_loop_->AddDestructionObserver(this); - // Create proxy and default video renderer. - proxy_ = new WebMediaPlayerProxy(main_loop_, this); + // Create default video renderer. scoped_refptr<VideoRendererImpl> video_renderer = new VideoRendererImpl( base::Bind(&WebMediaPlayerProxy::Repaint, proxy_.get()), @@ -167,15 +165,6 @@ void WebMediaPlayerImpl::Initialize(WebKit::WebFrame* frame) { filter_collection_->AddVideoRenderer(video_renderer); proxy_->SetVideoRenderer(video_renderer); - // Set our pipeline callbacks. - pipeline_->Init( - base::Bind(&WebMediaPlayerProxy::PipelineEndedCallback, - proxy_.get()), - base::Bind(&WebMediaPlayerProxy::PipelineErrorCallback, - proxy_.get()), - base::Bind(&WebMediaPlayerProxy::NetworkEventCallback, - proxy_.get())); - // A simple data source that keeps all data in memory. scoped_ptr<media::DataSourceFactory> simple_data_source_factory( SimpleDataSource::CreateFactory(MessageLoop::current(), frame, @@ -198,7 +187,6 @@ void WebMediaPlayerImpl::Initialize(WebKit::WebFrame* frame) { data_source_factory.release()), pipeline_message_loop)); std::string source_url = GetClient()->sourceURL().spec(); - if (!source_url.empty()) { demuxer_factory.reset( new media::ChunkDemuxerFactory(source_url, @@ -265,7 +253,6 @@ URLSchemeForHistogram URLScheme(const GURL& url) { void WebMediaPlayerImpl::load(const WebKit::WebURL& url) { DCHECK_EQ(main_loop_, MessageLoop::current()); - DCHECK(proxy_); UMA_HISTOGRAM_ENUMERATION("Media.URLScheme", URLScheme(url), kMaxURLScheme); diff --git a/webkit/media/webmediaplayer_impl.h b/webkit/media/webmediaplayer_impl.h index 1e14a5c..661d7d5 100644 --- a/webkit/media/webmediaplayer_impl.h +++ b/webkit/media/webmediaplayer_impl.h @@ -99,9 +99,8 @@ class WebMediaPlayerImpl // audio data is discarded and media plays back based on wall clock time. // // This object takes ownership of the |audio_source_provider|. - // - // Callers must call |Initialize()| before they can use the object. - WebMediaPlayerImpl(WebKit::WebMediaPlayerClient* client, + WebMediaPlayerImpl(WebKit::WebFrame* frame, + WebKit::WebMediaPlayerClient* client, base::WeakPtr<WebMediaPlayerDelegate> delegate, media::FilterCollection* collection, WebKit::WebAudioSourceProvider* audio_source_provider, @@ -110,11 +109,6 @@ class WebMediaPlayerImpl media::MediaLog* media_log); virtual ~WebMediaPlayerImpl(); - // Finalizes initialization of the object using the given WebFrame. - // - // TODO(scherkus): fold this into the constructor http://crbug.com/109958 - void Initialize(WebKit::WebFrame* frame); - virtual void load(const WebKit::WebURL& url); virtual void cancelLoad(); diff --git a/webkit/support/webkit_support.cc b/webkit/support/webkit_support.cc index fd46091..267e24c 100644 --- a/webkit/support/webkit_support.cc +++ b/webkit/support/webkit_support.cc @@ -316,17 +316,15 @@ WebKit::WebMediaPlayer* CreateMediaPlayer( scoped_ptr<media::FilterCollection> collection( new media::FilterCollection()); - webkit_media::WebMediaPlayerImpl* media_player = - new webkit_media::WebMediaPlayerImpl( - client, - base::WeakPtr<webkit_media::WebMediaPlayerDelegate>(), - collection.release(), - NULL, - message_loop_factory.release(), - media_stream_client, - new media::MediaLog()); - media_player->Initialize(frame); - return media_player; + return new webkit_media::WebMediaPlayerImpl( + frame, + client, + base::WeakPtr<webkit_media::WebMediaPlayerDelegate>(), + collection.release(), + NULL, + message_loop_factory.release(), + media_stream_client, + new media::MediaLog()); #endif } diff --git a/webkit/tools/test_shell/test_webview_delegate.cc b/webkit/tools/test_shell/test_webview_delegate.cc index 13b84849..f7a5865 100644 --- a/webkit/tools/test_shell/test_webview_delegate.cc +++ b/webkit/tools/test_shell/test_webview_delegate.cc @@ -647,17 +647,15 @@ WebMediaPlayer* TestWebViewDelegate::createMediaPlayer( scoped_ptr<media::FilterCollection> collection( new media::FilterCollection()); - webkit_media::WebMediaPlayerImpl* media_player = - new webkit_media::WebMediaPlayerImpl( - client, - base::WeakPtr<webkit_media::WebMediaPlayerDelegate>(), - collection.release(), - NULL, - message_loop_factory.release(), - NULL, - new media::MediaLog()); - media_player->Initialize(frame); - return media_player; + return new webkit_media::WebMediaPlayerImpl( + frame, + client, + base::WeakPtr<webkit_media::WebMediaPlayerDelegate>(), + collection.release(), + NULL, + message_loop_factory.release(), + NULL, + new media::MediaLog()); } WebApplicationCacheHost* TestWebViewDelegate::createApplicationCacheHost( |