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
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_COCOA_APPS_QUIT_WITH_APPS_CONTROLLER_MAC_H_
6#define CHROME_BROWSER_UI_COCOA_APPS_QUIT_WITH_APPS_CONTROLLER_MAC_H_
7
8#include "base/macros.h"
9#include "base/memory/scoped_ptr.h"
10#include "chrome/browser/notifications/notification.h"
11
12class PrefRegistrySimple;
13
14// QuitWithAppsController checks whether any apps are running and shows a
15// notification to quit all of them.
16class QuitWithAppsController : public NotificationDelegate {
17 public:
18  static const char kQuitWithAppsNotificationID[];
19
20  QuitWithAppsController();
21
22  // NotificationDelegate interface.
23  virtual void Display() OVERRIDE;
24  virtual void Error() OVERRIDE;
25  virtual void Close(bool by_user) OVERRIDE;
26  virtual void Click() OVERRIDE;
27  virtual void ButtonClick(int button_index) OVERRIDE;
28  virtual content::WebContents* GetWebContents() const OVERRIDE;
29  virtual std::string id() const OVERRIDE;
30
31  // Attempt to quit Chrome. This will display a notification and return false
32  // if there are apps running.
33  bool ShouldQuit();
34
35  // Register prefs used by QuitWithAppsController.
36  static void RegisterPrefs(PrefRegistrySimple* registry);
37
38 private:
39  virtual ~QuitWithAppsController();
40
41  scoped_ptr<Notification> notification_;
42
43  // Whether to suppress showing the notification for the rest of the session.
44  bool suppress_for_session_;
45
46  DISALLOW_COPY_AND_ASSIGN(QuitWithAppsController);
47};
48
49#endif  // CHROME_BROWSER_UI_COCOA_APPS_QUIT_WITH_APPS_CONTROLLER_MAC_H_
50