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

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: rebase only 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 c258bda6f3114d985e70adcd52b02a32fed32075..094e0b7dc1df4fc0f83d1e3985a60f2726ace99d 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -182,6 +182,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
@@ -2032,7 +2033,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(
@@ -4986,23 +4987,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),
+ 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
@@ -5026,7 +5037,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