blob: 65d3de2e587f1ec69ee0cea5eb5669e234991bc2 [file] [log] [blame]
[email protected]28c3eeb2012-10-15 05:47:531// Copyright (c) 2012 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.
4
[email protected]eb5c9682013-03-04 02:55:005#ifndef APPS_APP_RESTORE_SERVICE_H_
6#define APPS_APP_RESTORE_SERVICE_H_
[email protected]28c3eeb2012-10-15 05:47:537
[email protected]c2e2b6d2013-01-22 02:23:298#include <string>
[email protected]eb5c9682013-03-04 02:55:009#include <vector>
[email protected]c2e2b6d2013-01-22 02:23:2910
[email protected]771c8d272013-05-17 09:47:4011#include "chrome/browser/extensions/shell_window_registry.h"
[email protected]0dd6f2032013-05-20 23:33:4012#include "components/browser_context_keyed_service/browser_context_keyed_service.h"
[email protected]28c3eeb2012-10-15 05:47:5313#include "content/public/browser/notification_observer.h"
14#include "content/public/browser/notification_registrar.h"
15
[email protected]b8816a42013-02-27 07:59:0016namespace extensions {
17class Extension;
[email protected]b897ff872013-02-27 19:50:1318}
19
20class Profile;
21
[email protected]c2e2b6d2013-01-22 02:23:2922namespace apps {
[email protected]28c3eeb2012-10-15 05:47:5323
24// Tracks what apps need to be restarted when the browser restarts.
[email protected]f1484c52013-05-22 23:25:4425class AppRestoreService : public BrowserContextKeyedService,
[email protected]771c8d272013-05-17 09:47:4026 public content::NotificationObserver,
27 public extensions::ShellWindowRegistry::Observer {
[email protected]28c3eeb2012-10-15 05:47:5328 public:
[email protected]24ced7dc02013-04-04 08:32:3929 // Returns true if apps should be restored on the current platform, given
30 // whether this new browser process launched due to a restart.
31 static bool ShouldRestoreApps(bool is_browser_restart);
32
[email protected]28c3eeb2012-10-15 05:47:5333 explicit AppRestoreService(Profile* profile);
34
[email protected]119454622012-10-18 09:48:3235 // Restart apps that need to be restarted and clear the "running" preference
36 // from apps to prevent them being restarted in subsequent restarts.
[email protected]300ba0c42012-12-06 06:57:1737 void HandleStartup(bool should_restore_apps);
[email protected]28c3eeb2012-10-15 05:47:5338
39 private:
40 // content::NotificationObserver.
41 virtual void Observe(int type,
42 const content::NotificationSource& source,
43 const content::NotificationDetails& details) OVERRIDE;
44
[email protected]771c8d272013-05-17 09:47:4045 // extensions::ShellWindowRegistry::Observer.
46 virtual void OnShellWindowAdded(ShellWindow* shell_window) OVERRIDE;
47 virtual void OnShellWindowIconChanged(ShellWindow* shell_window) OVERRIDE;
48 virtual void OnShellWindowRemoved(ShellWindow* shell_window) OVERRIDE;
49
[email protected]f1484c52013-05-22 23:25:4450 // BrowserContextKeyedService.
[email protected]771c8d272013-05-17 09:47:4051 virtual void Shutdown() OVERRIDE;
52
[email protected]28c3eeb2012-10-15 05:47:5353 void RecordAppStart(const std::string& extension_id);
54 void RecordAppStop(const std::string& extension_id);
[email protected]771c8d272013-05-17 09:47:4055 void RecordIfAppHasWindows(const std::string& id);
56
[email protected]961745f2013-05-25 14:09:2457 void RestoreApp(const extensions::Extension* extension);
[email protected]28c3eeb2012-10-15 05:47:5358
[email protected]771c8d272013-05-17 09:47:4059 void StartObservingShellWindows();
60 void StopObservingShellWindows();
61
[email protected]28c3eeb2012-10-15 05:47:5362 content::NotificationRegistrar registrar_;
63 Profile* profile_;
[email protected]eb5c9682013-03-04 02:55:0064
65 DISALLOW_COPY_AND_ASSIGN(AppRestoreService);
[email protected]28c3eeb2012-10-15 05:47:5366};
67
[email protected]c2e2b6d2013-01-22 02:23:2968} // namespace apps
[email protected]28c3eeb2012-10-15 05:47:5369
[email protected]eb5c9682013-03-04 02:55:0070#endif // APPS_APP_RESTORE_SERVICE_H_