Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / notifications / sync_notifier / chrome_notifier_delegate.h
1 // Copyright (c) 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.
4
5 #ifndef CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_CHROME_NOTIFIER_DELEGATE_H_
6 #define CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_CHROME_NOTIFIER_DELEGATE_H_
7
8 #include <map>
9 #include <string>
10
11 #include "chrome/browser/notifications/notification_delegate.h"
12 #include "url/gurl.h"
13
14 namespace notifier {
15
16 enum SyncedNotificationActionType {
17   SYNCED_NOTIFICATION_ACTION_UNKNOWN,
18   SYNCED_NOTIFICATION_ACTION_CLICK,
19   SYNCED_NOTIFICATION_ACTION_BUTTON_CLICK,
20   SYNCED_NOTIFICATION_ACTION_CLOSE_BY_USER,
21   SYNCED_NOTIFICATION_ACTION_CLOSE_BY_SYSTEM,
22   SYNCED_NOTIFICATION_ACTION_TOAST_TIMEOUT,
23   // NOTE: Add new action types only immediately above this line. Also,
24   // make sure the enum list in tools/histogram/histograms.xml is
25   // updated with any change in here.
26   SYNCED_NOTIFICATION_ACTION_COUNT
27 };
28
29 class ChromeNotifierService;
30
31 // ChromeNotifierDelegate is a NotificationDelegate which catches
32 // responses from the NotificationUIManager when a notification
33 // has been closed.
34
35 class ChromeNotifierDelegate : public NotificationDelegate {
36  public:
37   // We use an id instead of a notification so we can check to see if the
38   // notification still exists before acting on it instead of using a ref count.
39   explicit ChromeNotifierDelegate(const std::string& notification_id,
40                                   ChromeNotifierService* notifier);
41
42   // NotificationDelegate interface.
43   virtual void Display() OVERRIDE {}
44   virtual void Error() OVERRIDE {}
45   virtual void Close(bool by_user) OVERRIDE;
46   virtual bool HasClickedListener() OVERRIDE;
47   virtual void Click() OVERRIDE;
48   virtual void ButtonClick(int button_index) OVERRIDE;
49   virtual std::string id() const OVERRIDE;
50
51   virtual content::WebContents* GetWebContents() const OVERRIDE;
52
53   void CollectAction(SyncedNotificationActionType type);
54
55  private:
56   virtual ~ChromeNotifierDelegate();
57   void NavigateToUrl(const GURL& destination) const;
58   const GURL GetClickDestination() const;
59
60   const std::string notification_id_;
61   ChromeNotifierService* const chrome_notifier_;
62
63   DISALLOW_COPY_AND_ASSIGN(ChromeNotifierDelegate);
64 };
65
66 }  // namespace notifier
67
68 #endif  // CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_CHROME_NOTIFIER_DELEGATE_H_