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/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 chrome::BitmapFetcherDelegate {
36 SyncedNotification(const syncer::SyncData& sync_data,
37 ChromeNotifierService* notifier,
38 NotificationUIManager* notification_manager);
40 virtual ~SyncedNotification();
48 static const int kUndefinedPriority = 65535;
50 void Update(const syncer::SyncData& sync_data);
52 // Display the notification in the notification center
53 void Show(Profile* profile);
55 // This gets a pointer to the SyncedNotificationSpecifics part
57 sync_pb::EntitySpecifics GetEntitySpecifics() const;
59 // Display the notification if it has the specified app_id_name.
60 void ShowAllForAppId(Profile* profile,
61 std::string app_id_name);
63 // Remove the notification if it has the specified app_id_name.
64 void HideAllForAppId(std::string app_id_name);
66 // Fill up the queue of bitmaps to fetch.
67 void QueueBitmapFetchJobs(ChromeNotifierService* notifier_service,
70 // Start the bitmap fetching. When it is complete, the callback
72 void StartBitmapFetch();
74 // Check against an incoming notification, see if only the read state is
76 bool EqualsIgnoringReadState(const SyncedNotification& other) const;
78 // Mark the notification as Read.
79 void NotificationHasBeenRead();
81 // Mark a notification as Dismissed (deleted).
82 void NotificationHasBeenDismissed();
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;
113 // Use this to prevent toasting a notification.
114 void set_toast_state(bool toast_state);
116 // Write a notification to the console log.
117 void LogNotification();
120 // Method inherited from BitmapFetcher delegate.
121 virtual void OnFetchComplete(const GURL url, const SkBitmap* bitmap) OVERRIDE;
123 // If this bitmap has a valid GURL, create a fetcher for it.
124 void CreateBitmapFetcher(const GURL& gurl);
126 // Check to see if we have responses for all the bitmaps we need.
127 bool AreAllBitmapsFetched();
129 // Helper function to mark a notification as read or dismissed.
130 void SetReadState(const ReadState& read_state);
132 void SetNotifierServiceForTest(ChromeNotifierService* notifier) {
133 notifier_service_ = notifier;
136 sync_pb::SyncedNotificationSpecifics specifics_;
137 NotificationUIManager* notification_manager_;
138 ChromeNotifierService* notifier_service_;
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_;
151 friend class SyncedNotificationTest;
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);
161 DISALLOW_COPY_AND_ASSIGN(SyncedNotification);
164 } // namespace notifier
166 #endif // CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_H_