1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "apps/app_keep_alive_service.h"
7 #include "apps/app_lifetime_monitor.h"
8 #include "apps/app_lifetime_monitor_factory.h"
9 #include "base/message_loop/message_loop.h"
10 #include "chrome/browser/lifetime/application_lifetime.h"
11 #include "chrome/browser/profiles/profile.h"
15 AppKeepAliveService::AppKeepAliveService(content::BrowserContext
* context
)
16 : context_(context
), shut_down_(false) {
17 AppLifetimeMonitor
* app_lifetime_monitor
=
18 AppLifetimeMonitorFactory::GetForProfile(static_cast<Profile
*>(context
));
19 app_lifetime_monitor
->AddObserver(this);
22 AppKeepAliveService::~AppKeepAliveService() {}
24 void AppKeepAliveService::Shutdown() {
25 AppLifetimeMonitor
* app_lifetime_monitor
=
26 AppLifetimeMonitorFactory::GetForProfile(static_cast<Profile
*>(context_
));
27 app_lifetime_monitor
->RemoveObserver(this);
28 OnChromeTerminating();
31 void AppKeepAliveService::OnAppStart(Profile
* profile
,
32 const std::string
& app_id
) {
33 if (profile
!= context_
|| shut_down_
)
36 if (running_apps_
.insert(app_id
).second
)
37 chrome::StartKeepAlive();
40 void AppKeepAliveService::OnAppStop(Profile
* profile
,
41 const std::string
& app_id
) {
42 if (profile
!= context_
)
45 if (running_apps_
.erase(app_id
))
46 chrome::EndKeepAlive();
49 void AppKeepAliveService::OnAppActivated(Profile
* profile
,
50 const std::string
& app_id
) {}
52 void AppKeepAliveService::OnAppDeactivated(Profile
* profile
,
53 const std::string
& app_id
) {}
55 void AppKeepAliveService::OnChromeTerminating() {
57 size_t keep_alives
= running_apps_
.size();
58 running_apps_
.clear();
60 // In some tests, the message loop isn't running during shutdown and ending
61 // the last keep alive in that case CHECKs.
62 if (!base::MessageLoop::current() ||
63 base::MessageLoop::current()->is_running()) {
65 chrome::EndKeepAlive();