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.
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.
9 #ifndef CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_H_
10 #define CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_H_
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/notifications/sync_notifier/notification_bitmap_fetcher.h"
18 #include "sync/api/sync_data.h"
19 #include "sync/protocol/sync.pb.h"
20 #include "ui/gfx/image/image.h"
24 class SyncedNotificationSpecifics
;
27 class NotificationUIManager
;
32 class ChromeNotifierService
;
34 class SyncedNotification
: public NotificationBitmapFetcherDelegate
{
36 explicit SyncedNotification(const syncer::SyncData
& sync_data
);
38 virtual ~SyncedNotification();
46 static const int kUndefinedPriority
= 65535;
48 void Update(const syncer::SyncData
& sync_data
);
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;
79 // Use this to prevent toasting a notification.
80 void SetToastState(bool toast_state
);
82 bool EqualsIgnoringReadState(const SyncedNotification
& other
) const;
84 void NotificationHasBeenRead();
85 void NotificationHasBeenDismissed();
87 // Fill up the queue of bitmaps to fetch.
88 void QueueBitmapFetchJobs(NotificationUIManager
* notification_manager
,
89 ChromeNotifierService
* notifier_service
,
92 // Start the bitmap fetching. When it is complete, the callback
94 void StartBitmapFetch();
96 // Display the notification in the notification center
97 void Show(NotificationUIManager
* notification_manager
,
98 ChromeNotifierService
* notifier_service
,
101 // This gets a pointer to the SyncedNotificationSpecifics part
103 sync_pb::EntitySpecifics
GetEntitySpecifics() const;
105 // Write a notification to the console log.
106 void LogNotification();
109 // Helper function to mark a notification as read or dismissed.
110 void SetReadState(const ReadState
& read_state
);
112 // Method inherited from NotificationBitmapFetcher delegate.
113 virtual void OnFetchComplete(const GURL url
, const SkBitmap
* bitmap
) OVERRIDE
;
115 // If this bitmap has a valid GURL, create a fetcher for it.
116 void AddBitmapToFetchQueue(const GURL
& gurl
);
118 // Check to see if we have responses for all the bitmaps we need.
119 bool AreAllBitmapsFetched();
121 sync_pb::SyncedNotificationSpecifics specifics_
;
122 NotificationUIManager
* notification_manager_
;
123 ChromeNotifierService
* notifier_service_
;
126 ScopedVector
<NotificationBitmapFetcher
> fetchers_
;
127 gfx::Image app_icon_bitmap_
;
128 gfx::Image sender_bitmap_
;
129 gfx::Image image_bitmap_
;
130 std::vector
<gfx::Image
> button_bitmaps_
;
131 bool app_icon_bitmap_fetch_pending_
;
132 bool sender_bitmap_fetch_pending_
;
133 bool image_bitmap_fetch_pending_
;
134 std::vector
<bool> button_bitmaps_fetch_pending_
;
137 friend class SyncedNotificationTest
;
139 FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest
, AddBitmapToFetchQueueTest
);
140 FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest
, OnFetchCompleteTest
);
141 FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest
, QueueBitmapFetchJobsTest
);
142 FRIEND_TEST_ALL_PREFIXES(SyncedNotificationTest
, EmptyBitmapTest
);
144 DISALLOW_COPY_AND_ASSIGN(SyncedNotification
);
147 } // namespace notifier
149 #endif // CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_H_