Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / notifications / sync_notifier / synced_notification.h
1 // 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
5 // This class represents the data for a single Synced Notification.
6 // It should map 1-1 to all the data in synced_notification_sepcifics.proto,
7 // and the data and render protobufs that the specifics protobuf contains.
8
9 #ifndef CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_H_
10 #define CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_H_
11
12 #include <string>
13
14 #include "base/gtest_prod_util.h"
15 #include "base/memory/scoped_ptr.h"
16 #include "base/memory/scoped_vector.h"
17 #include "chrome/browser/bitmap_fetcher.h"
18 #include "sync/api/sync_data.h"
19 #include "sync/protocol/sync.pb.h"
20 #include "ui/gfx/image/image.h"
21 #include "url/gurl.h"
22
23 namespace sync_pb {
24 class SyncedNotificationSpecifics;
25 }
26
27 class NotificationUIManager;
28 class Profile;
29
30 namespace notifier {
31
32 class ChromeNotifierService;
33
34 class SyncedNotification : public chrome::BitmapFetcherDelegate {
35  public:
36   SyncedNotification(const syncer::SyncData& sync_data,
37                      ChromeNotifierService* notifier,
38                      NotificationUIManager* notification_manager);
39
40   virtual ~SyncedNotification();
41
42   enum ReadState {
43     kUnread = 1,
44     kRead = 2,
45     kDismissed = 3,
46   };
47
48   static const int kUndefinedPriority = 65535;
49
50   void Update(const syncer::SyncData& sync_data);
51
52   // Display the notification in the notification center
53   void Show(Profile* profile);
54
55   // This gets a pointer to the SyncedNotificationSpecifics part
56   // of the sync data.
57   sync_pb::EntitySpecifics GetEntitySpecifics() const;
58
59   // Display the notification if it has the specified app_id_name.
60   void ShowAllForAppId(Profile* profile,
61                        std::string app_id_name);
62
63   // Remove the notification if it has the specified app_id_name.
64   void HideAllForAppId(std::string app_id_name);
65
66   // Fill up the queue of bitmaps to fetch.
67   void QueueBitmapFetchJobs(ChromeNotifierService* notifier_service,
68                             Profile* profile);
69
70   // Start the bitmap fetching.  When it is complete, the callback
71   // will call Show().
72   void StartBitmapFetch();
73
74   // Check against an incoming notification, see if only the read state is
75   // different.
76   bool EqualsIgnoringReadState(const SyncedNotification& other) const;
77
78   // Mark the notification as Read.
79   void NotificationHasBeenRead();
80
81   // Mark a notification as Dismissed (deleted).
82   void NotificationHasBeenDismissed();
83
84   // Here are some helper functions to get individual data parts out of a
85   // SyncedNotification.
86   std::string GetTitle() const;
87   std::string GetHeading() const;
88   std::string GetDescription() const;
89   std::string GetAnnotation() const;
90   std::string GetAppId() const;
91   std::string GetKey() const;
92   GURL GetOriginUrl() const;
93   GURL GetAppIconUrl() const;
94   GURL GetImageUrl() const;
95   std::string GetText() const;
96   ReadState GetReadState() const;
97   uint64 GetCreationTime() const;
98   int GetPriority() const;
99   std::string GetDefaultDestinationTitle() const;
100   GURL GetDefaultDestinationIconUrl() const;
101   GURL GetDefaultDestinationUrl() const;
102   std::string GetButtonTitle(unsigned int which_button) const;
103   GURL GetButtonIconUrl(unsigned int which_button) const;
104   GURL GetButtonUrl(unsigned int which_button) const;
105   GURL GetProfilePictureUrl(unsigned int which_url) const;
106   size_t GetProfilePictureCount() const;
107   size_t GetNotificationCount() const;
108   size_t GetButtonCount() const;
109   std::string GetContainedNotificationTitle(int index) const;
110   std::string GetContainedNotificationMessage(int index) const;
111   const gfx::Image& GetAppIcon() const;
112
113   // Use this to prevent toasting a notification.
114   void set_toast_state(bool toast_state);
115
116   // Write a notification to the console log.
117   void LogNotification();
118
119  private:
120   // Method inherited from BitmapFetcher delegate.
121   virtual void OnFetchComplete(const GURL url, const SkBitmap* bitmap) OVERRIDE;
122
123   // If this bitmap has a valid GURL, create a fetcher for it.
124   void CreateBitmapFetcher(const GURL& gurl);
125
126   // Check to see if we have responses for all the bitmaps we need.
127   bool AreAllBitmapsFetched();
128
129   // Helper function to mark a notification as read or dismissed.
130   void SetReadState(const ReadState& read_state);
131
132   void SetNotifierServiceForTest(ChromeNotifierService* notifier) {
133     notifier_service_ = notifier;
134   }
135
136   sync_pb::SyncedNotificationSpecifics specifics_;
137   NotificationUIManager* notification_manager_;
138   ChromeNotifierService* notifier_service_;
139   Profile* profile_;
140   bool toast_state_;
141   ScopedVector<chrome::BitmapFetcher> fetchers_;
142   gfx::Image app_icon_bitmap_;
143   gfx::Image sender_bitmap_;
144   gfx::Image image_bitmap_;
145   std::vector<gfx::Image> button_bitmaps_;
146   bool app_icon_bitmap_fetch_pending_;
147   bool sender_bitmap_fetch_pending_;
148   bool image_bitmap_fetch_pending_;
149   std::vector<bool> button_bitmaps_fetch_pending_;
150
151   friend class SyncedNotificationTest;
152
153   FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest, CreateBitmapFetcherTest);
154   FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest, OnFetchCompleteTest);
155   FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest, QueueBitmapFetchJobsTest);
156   FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest, EmptyBitmapTest);
157   FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest, ShowIfNewlyEnabledTest);
158   FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest, HideIfNewlyRemovedTest);
159   FRIEND_TEST_ALL_PREFIXES(ChromeNotifierServiceTest, SetAddedAppIdsTest);
160
161   DISALLOW_COPY_AND_ASSIGN(SyncedNotification);
162 };
163
164 }  // namespace notifier
165
166 #endif  // CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_H_