Upstream version 5.34.104.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   explicit SyncedNotification(const syncer::SyncData& sync_data);
37
38   virtual ~SyncedNotification();
39
40   enum ReadState {
41     kUnread = 1,
42     kRead = 2,
43     kDismissed = 3,
44   };
45
46   static const int kUndefinedPriority = 65535;
47
48   void Update(const syncer::SyncData& sync_data);
49
50   // Here are some helper functions to get individual data parts out of a
51   // SyncedNotification.
52   std::string GetTitle() const;
53   std::string GetHeading() const;
54   std::string GetDescription() const;
55   std::string GetAnnotation() const;
56   std::string GetAppId() const;
57   std::string GetKey() const;
58   GURL GetOriginUrl() const;
59   GURL GetAppIconUrl() const;
60   GURL GetImageUrl() const;
61   std::string GetText() const;
62   ReadState GetReadState() const;
63   uint64 GetCreationTime() const;
64   int GetPriority() const;
65   std::string GetDefaultDestinationTitle() const;
66   GURL GetDefaultDestinationIconUrl() const;
67   GURL GetDefaultDestinationUrl() const;
68   std::string GetButtonTitle(unsigned int which_button) const;
69   GURL GetButtonIconUrl(unsigned int which_button) const;
70   GURL GetButtonUrl(unsigned int which_button) const;
71   GURL GetProfilePictureUrl(unsigned int which_url) const;
72   size_t GetProfilePictureCount() const;
73   size_t GetNotificationCount() const;
74   size_t GetButtonCount() const;
75   std::string GetContainedNotificationTitle(int index) const;
76   std::string GetContainedNotificationMessage(int index) const;
77   std::string GetSendingServiceId() const;
78   const gfx::Image& GetAppIcon() const;
79
80   // Use this to prevent toasting a notification.
81   void SetToastState(bool toast_state);
82
83   bool EqualsIgnoringReadState(const SyncedNotification& other) const;
84
85   void NotificationHasBeenRead();
86   void NotificationHasBeenDismissed();
87
88   // Fill up the queue of bitmaps to fetch.
89   void QueueBitmapFetchJobs(NotificationUIManager* notification_manager,
90                             ChromeNotifierService* notifier_service,
91                             Profile* profile);
92
93   // Start the bitmap fetching.  When it is complete, the callback
94   // will call Show().
95   void StartBitmapFetch();
96
97   // Display the notification in the notification center
98   void Show(NotificationUIManager* notification_manager,
99             ChromeNotifierService* notifier_service,
100             Profile* profile);
101
102   // This gets a pointer to the SyncedNotificationSpecifics part
103   // of the sync data.
104   sync_pb::EntitySpecifics GetEntitySpecifics() const;
105
106   // Write a notification to the console log.
107   void LogNotification();
108
109  private:
110   // Helper function to mark a notification as read or dismissed.
111   void SetReadState(const ReadState& read_state);
112
113   // Method inherited from BitmapFetcher delegate.
114   virtual void OnFetchComplete(const GURL url, const SkBitmap* bitmap) OVERRIDE;
115
116   // If this bitmap has a valid GURL, create a fetcher for it.
117   void AddBitmapToFetchQueue(const GURL& gurl);
118
119   // Check to see if we have responses for all the bitmaps we need.
120   bool AreAllBitmapsFetched();
121
122   sync_pb::SyncedNotificationSpecifics specifics_;
123   NotificationUIManager* notification_manager_;
124   ChromeNotifierService* notifier_service_;
125   Profile* profile_;
126   bool toast_state_;
127   ScopedVector<chrome::BitmapFetcher> fetchers_;
128   gfx::Image app_icon_bitmap_;
129   gfx::Image sender_bitmap_;
130   gfx::Image image_bitmap_;
131   std::vector<gfx::Image> button_bitmaps_;
132   bool app_icon_bitmap_fetch_pending_;
133   bool sender_bitmap_fetch_pending_;
134   bool image_bitmap_fetch_pending_;
135   std::vector<bool> button_bitmaps_fetch_pending_;
136
137
138   friend class SyncedNotificationTest;
139
140   FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest, AddBitmapToFetchQueueTest);
141   FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest, OnFetchCompleteTest);
142   FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest, QueueBitmapFetchJobsTest);
143   FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest, EmptyBitmapTest);
144
145   DISALLOW_COPY_AND_ASSIGN(SyncedNotification);
146 };
147
148 }  // namespace notifier
149
150 #endif  // CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_H_