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

Side by Side Diff: media/mojo/services/mojo_media_application.cc

Issue 1209283003: FrameMojoShell provides services to mojo apps. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/mojo/services/mojo_media_application.h" 5 #include "media/mojo/services/mojo_media_application.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/thread_task_runner_handle.h" 9 #include "base/thread_task_runner_handle.h"
10 #include "media/mojo/services/mojo_cdm_service.h" 10 #include "media/mojo/services/mojo_cdm_service.h"
(...skipping 12 matching lines...) Expand all
23 // static 23 // static
24 GURL MojoMediaApplication::AppUrl() { 24 GURL MojoMediaApplication::AppUrl() {
25 return GURL(kMojoMediaAppUrl); 25 return GURL(kMojoMediaAppUrl);
26 } 26 }
27 27
28 // static 28 // static
29 scoped_ptr<mojo::ApplicationDelegate> MojoMediaApplication::CreateApp() { 29 scoped_ptr<mojo::ApplicationDelegate> MojoMediaApplication::CreateApp() {
30 return scoped_ptr<mojo::ApplicationDelegate>(new MojoMediaApplication()); 30 return scoped_ptr<mojo::ApplicationDelegate>(new MojoMediaApplication());
31 } 31 }
32 32
33 MojoMediaApplication::MojoMediaApplication() {} 33 MojoMediaApplication::MojoMediaApplication() {
34 }
34 35
35 MojoMediaApplication::~MojoMediaApplication() {} 36 MojoMediaApplication::~MojoMediaApplication() {
37 }
36 38
37 void MojoMediaApplication::Initialize(mojo::ApplicationImpl* app) { 39 void MojoMediaApplication::Initialize(mojo::ApplicationImpl* app) {
38 app_impl_ = app; 40 app_impl_ = app;
39 41
40 // Enable logging. 42 // Enable logging.
41 logging::LoggingSettings settings; 43 logging::LoggingSettings settings;
42 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; 44 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
43 logging::InitLogging(settings); 45 logging::InitLogging(settings);
44 // Display process ID, thread ID and timestamp in logs. 46 // Display process ID, thread ID and timestamp in logs.
45 logging::SetLogItems(true, true, true, false); 47 logging::SetLogItems(true, true, true, false);
46 48
47 StartIdleTimer(); 49 StartIdleTimer();
48 } 50 }
49 51
50 bool MojoMediaApplication::ConfigureIncomingConnection( 52 bool MojoMediaApplication::ConfigureIncomingConnection(
51 mojo::ApplicationConnection* connection) { 53 mojo::ApplicationConnection* connection) {
52 connection->AddService<mojo::ContentDecryptionModule>(this); 54 connection->AddService<mojo::ContentDecryptionModule>(this);
53 connection->AddService<mojo::MediaRenderer>(this); 55 connection->AddService<mojo::MediaRenderer>(this);
54 return true; 56 return true;
55 } 57 }
56 58
59 void MojoMediaApplication::Quit() {
60 app_impl_ = nullptr;
61 }
62
57 void MojoMediaApplication::Create( 63 void MojoMediaApplication::Create(
58 mojo::ApplicationConnection* connection, 64 mojo::ApplicationConnection* connection,
59 mojo::InterfaceRequest<mojo::ContentDecryptionModule> request) { 65 mojo::InterfaceRequest<mojo::ContentDecryptionModule> request) {
60 // The created object is owned by the pipe. 66 // The created object is owned by the pipe.
61 MojoCdmService* mojo_cdm_service = 67 MojoCdmService* mojo_cdm_service = new MojoCdmService(
62 new MojoCdmService(&cdm_service_context_, request.Pass()); 68 &cdm_service_context_, connection->GetServiceProvider(), request.Pass());
63 69
64 // Passing unretained |this| is safe here because the app is guaranteed to 70 // Passing unretained |this| is safe here because the app is guaranteed to
65 // outlive all services. 71 // outlive all services.
66 mojo_cdm_service->set_connection_error_handler(base::Bind( 72 mojo_cdm_service->set_connection_error_handler(base::Bind(
67 &MojoMediaApplication::OnConnectionError, base::Unretained(this))); 73 &MojoMediaApplication::OnConnectionError, base::Unretained(this)));
68 74
69 active_service_count_++; 75 active_service_count_++;
70 idle_timeout_callback_.Cancel(); 76 idle_timeout_callback_.Cancel();
71 } 77 }
72 78
73 void MojoMediaApplication::Create( 79 void MojoMediaApplication::Create(
74 mojo::ApplicationConnection* connection, 80 mojo::ApplicationConnection* connection,
75 mojo::InterfaceRequest<mojo::MediaRenderer> request) { 81 mojo::InterfaceRequest<mojo::MediaRenderer> request) {
76 // The created object is owned by the pipe. 82 // The created object is owned by the pipe.
77 MojoRendererService* mojo_renderer_service = 83 MojoRendererService* mojo_renderer_service =
78 new MojoRendererService(&cdm_service_context_, request.Pass()); 84 new MojoRendererService(&cdm_service_context_, request.Pass());
79 85
80 // Passing unretained |this| is safe here because the app is guaranteed to 86 // Passing unretained |this| is safe here because the app is guaranteed to
81 // outlive all services. 87 // outlive all services.
82 mojo_renderer_service->set_connection_error_handler(base::Bind( 88 mojo_renderer_service->set_connection_error_handler(base::Bind(
83 &MojoMediaApplication::OnConnectionError, base::Unretained(this))); 89 &MojoMediaApplication::OnConnectionError, base::Unretained(this)));
84 90
85 active_service_count_++; 91 active_service_count_++;
86 idle_timeout_callback_.Cancel(); 92 idle_timeout_callback_.Cancel();
87 } 93 }
88 94
89 void MojoMediaApplication::Quit() {
90 app_impl_ = nullptr;
91 }
92
93 void MojoMediaApplication::StartIdleTimer() { 95 void MojoMediaApplication::StartIdleTimer() {
94 // Passing unretained |app_impl_| is safe here because |app_impl_| is 96 // Passing unretained |app_impl_| is safe here because |app_impl_| is
95 // guaranteed to outlive |this|, and the callback is canceled if |this| is 97 // guaranteed to outlive |this|, and the callback is canceled if |this| is
96 // destroyed. 98 // destroyed.
97 idle_timeout_callback_.Reset(base::Bind(&mojo::ApplicationImpl::Terminate, 99 idle_timeout_callback_.Reset(base::Bind(&mojo::ApplicationImpl::Terminate,
98 base::Unretained(app_impl_))); 100 base::Unretained(app_impl_)));
99 const int destruction_delay_ms = 101 const int destruction_delay_ms =
100 base::CommandLine::ForCurrentProcess()->HasSwitch(kFastAppDestruction) 102 base::CommandLine::ForCurrentProcess()->HasSwitch(kFastAppDestruction)
101 ? 10 103 ? 10
102 : kIdleTimeoutInSeconds * 1000; 104 : kIdleTimeoutInSeconds * 1000;
103 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 105 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
104 FROM_HERE, idle_timeout_callback_.callback(), 106 FROM_HERE, idle_timeout_callback_.callback(),
105 base::TimeDelta::FromMilliseconds(destruction_delay_ms)); 107 base::TimeDelta::FromMilliseconds(destruction_delay_ms));
106 } 108 }
107 109
108 void MojoMediaApplication::OnConnectionError() { 110 void MojoMediaApplication::OnConnectionError() {
109 DCHECK_GT(active_service_count_, 0u); 111 DCHECK_GT(active_service_count_, 0u);
110 active_service_count_--; 112 active_service_count_--;
111 if (active_service_count_ == 0) { 113 if (active_service_count_ == 0) {
112 // If the last service connection has been dropped, kick off an idle timeout 114 // If the last service connection has been dropped, kick off an idle timeout
113 // to shut ourselves down. 115 // to shut ourselves down.
114 StartIdleTimer(); 116 StartIdleTimer();
115 } 117 }
116 } 118 }
117 119
118 } // namespace media 120 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698