Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(408)

Unified Diff: content/renderer/render_frame_impl.cc

Issue 1230313010: media: Add ServiceFactory mojo interface and implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix html_viewer and tests Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | media/mojo/interfaces/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index f38a15463e7d28856efee73a9d3071403fea1a37..5c709cdbde461bbe406813d5b293c3d691561f17 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -181,6 +181,7 @@
#if defined(ENABLE_MOJO_MEDIA)
#include "media/mojo/services/mojo_cdm_factory.h"
#include "media/mojo/services/mojo_renderer_factory.h"
+#include "mojo/application/public/cpp/connect.h"
#include "mojo/application/public/interfaces/shell.mojom.h"
#include "third_party/mojo/src/mojo/public/cpp/bindings/interface_request.h"
#else
@@ -2031,7 +2032,7 @@ blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
#if defined(ENABLE_MOJO_MEDIA)
scoped_ptr<media::RendererFactory> media_renderer_factory(
- new media::MojoRendererFactory(GetMediaServiceProvider()));
+ new media::MojoRendererFactory(GetMediaServiceFactory()));
#else
scoped_ptr<media::RendererFactory> media_renderer_factory =
GetContentClient()->renderer()->CreateMediaRendererFactory(
@@ -4973,23 +4974,33 @@ media::MediaPermission* RenderFrameImpl::GetMediaPermission() {
}
#if defined(ENABLE_MOJO_MEDIA)
-mojo::ServiceProvider* RenderFrameImpl::GetMediaServiceProvider() {
- if (!media_service_provider_) {
+media::interfaces::ServiceFactory* RenderFrameImpl::GetMediaServiceFactory() {
+ if (!media_service_factory_) {
mojo::InterfacePtr<mojo::Shell> shell_ptr;
GetServiceRegistry()->ConnectToRemoteService(mojo::GetProxy(&shell_ptr));
+
+ mojo::ServiceProviderPtr service_provider;
mojo::URLRequestPtr request(mojo::URLRequest::New());
request->url = mojo::String::From("mojo:media");
- shell_ptr->ConnectToApplication(
- request.Pass(), GetProxy(&media_service_provider_), nullptr);
- media_service_provider_.set_connection_error_handler(
- base::Bind(&RenderFrameImpl::OnMediaServiceProviderConnectionError,
+ shell_ptr->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
Ken Rockot(use gerrit already) 2015/07/21 17:29:06 Hmm this is going to be a recurring pattern. I thi
xhwang 2015/07/21 22:30:54 Acknowledged.
+ nullptr);
+
+ mojo::ConnectToService(service_provider.get(), &media_service_factory_);
+
+ media_service_factory_.set_connection_error_handler(
+ base::Bind(&RenderFrameImpl::OnMediaServiceFactoryConnectionError,
base::Unretained(this)));
}
- return media_service_provider_.get();
+
+ return media_service_factory_.get();
}
-void RenderFrameImpl::OnMediaServiceProviderConnectionError() {
- media_service_provider_.reset();
+void RenderFrameImpl::OnMediaServiceFactoryConnectionError() {
+ // TODO(xhwang): Resetting |media_service_factory_| could cause access
+ // violation on the old |media_service_factory_| by outstanding
+ // media::CdmFactory or media::RendererFactory. Find a better way to handle
+ // this.
+ // media_service_factory_.reset();
}
#endif
@@ -5013,7 +5024,7 @@ media::CdmFactory* RenderFrameImpl::GetCdmFactory() {
DCHECK(frame_);
#if defined(ENABLE_MOJO_MEDIA)
- cdm_factory_.reset(new media::MojoCdmFactory(GetMediaServiceProvider()));
+ cdm_factory_.reset(new media::MojoCdmFactory(GetMediaServiceFactory()));
#else
cdm_factory_.reset(new RenderCdmFactory(
#if defined(ENABLE_PEPPER_CDMS)
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | media/mojo/interfaces/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698