Index: media/mojo/services/mojo_media_application.cc |
diff --git a/media/mojo/services/mojo_media_application.cc b/media/mojo/services/mojo_media_application.cc |
index 72871e83de7cfe04bf2e2a3866aef6b86fb80546..fe5bdde13f9ee483449da807f9a26755855985f9 100644 |
--- a/media/mojo/services/mojo_media_application.cc |
+++ b/media/mojo/services/mojo_media_application.cc |
@@ -4,6 +4,7 @@ |
#include "media/mojo/services/mojo_media_application.h" |
+#include "base/command_line.h" |
#include "base/logging.h" |
#include "media/mojo/services/mojo_cdm_service.h" |
#include "media/mojo/services/mojo_renderer_service.h" |
@@ -13,6 +14,10 @@ |
namespace media { |
const char kMojoMediaAppUrl[] = "mojo:media"; |
+const int kIdleTimeoutInSeconds = 30; |
+ |
+// Switch to enable fast application destruction (for testing). |
+const char kFastAppDestruction[] = "fast-media-app-destruction"; |
// static |
GURL MojoMediaApplication::AppUrl() { |
@@ -24,18 +29,28 @@ scoped_ptr<mojo::ApplicationDelegate> MojoMediaApplication::CreateApp() { |
return scoped_ptr<mojo::ApplicationDelegate>(new MojoMediaApplication()); |
} |
-MojoMediaApplication::MojoMediaApplication() { |
+MojoMediaApplication::MojoMediaApplication() |
+ : app_impl_(nullptr), |
+ release_delay_(base::TimeDelta::FromSeconds(kIdleTimeoutInSeconds)) { |
} |
MojoMediaApplication::~MojoMediaApplication() { |
} |
void MojoMediaApplication::Initialize(mojo::ApplicationImpl* app) { |
+ app_impl_ = app; |
+ |
logging::LoggingSettings settings; |
settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; |
logging::InitLogging(settings); |
// Display process ID, thread ID and timestamp in logs. |
logging::SetLogItems(true, true, true, false); |
+ |
+ // Put this check here instead of in the constructor because |this| can be |
+ // constructed before the command line is initialized. |
+ // See ApplicationRunner::InitBaseCommandLine(). |
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(kFastAppDestruction)) |
+ release_delay_ = base::TimeDelta(); |
} |
bool MojoMediaApplication::ConfigureIncomingConnection( |
@@ -49,14 +64,18 @@ void MojoMediaApplication::Create( |
mojo::ApplicationConnection* connection, |
mojo::InterfaceRequest<mojo::ContentDecryptionModule> request) { |
// The created object is owned by the pipe. |
- new MojoCdmService(&cdm_service_context_, request.Pass()); |
+ new MojoCdmService( |
+ request.Pass(), &cdm_service_context_, |
+ app_impl_->app_lifetime_helper()->CreateAppRefCount(release_delay_)); |
} |
void MojoMediaApplication::Create( |
mojo::ApplicationConnection* connection, |
mojo::InterfaceRequest<mojo::MediaRenderer> request) { |
// The created object is owned by the pipe. |
- new MojoRendererService(&cdm_service_context_, request.Pass()); |
+ new MojoRendererService( |
+ request.Pass(), &cdm_service_context_, |
+ app_impl_->app_lifetime_helper()->CreateAppRefCount(release_delay_)); |
} |
} // namespace media |