blob: d68b26a7cee272840dd09cd9d02639e39bb4b17f [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This class represents the metadata for a service sending synced
// notifications.
#ifndef CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_APP_INFO_H_
#define CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_APP_INFO_H_
#include <string>
#include <vector>
#include "base/memory/scoped_vector.h"
#include "chrome/browser/image_holder.h"
#include "ui/gfx/image/image.h"
#include "ui/message_center/notifier_settings.h"
#include "url/gurl.h"
class Profile;
namespace notifier {
class SyncedNotificationAppInfoService;
class SyncedNotificationAppInfo : public chrome::ImageHolderDelegate {
public:
SyncedNotificationAppInfo(
Profile* const profile,
const std::string& settings_display_name,
SyncedNotificationAppInfoService* synced_notification_app_info_service);
virtual ~SyncedNotificationAppInfo();
// Return true if the app id is present in this AppInfo protobuf.
bool HasAppId(const std::string& app_id);
// Add an app id to the supported set for this AppInfo protobuf.
void AddAppId(const std::string& app_id);
// Remove an app id from the set for this AppInfo protobuf.
void RemoveAppId(const std::string& app_id);
std::string settings_display_name() const { return settings_display_name_; }
// Sets/gets the link to navigate to when the user clicks on the body of the
// app's welcome notification.
void SetWelcomeLinkUrl(const GURL& settings_link_url);
GURL welcome_link_url() const { return welcome_link_url_; }
// Set the URL for the low and high DPI bitmaps for the settings dialog.
void SetSettingsURLs(const GURL& settings_low_dpi,
const GURL& settings_high_dpi);
// Set the URL for the low and high DPI bitmaps for indicating the sending
// service.
void SetMonochromeURLs(const GURL& monochrome_low_dpi,
const GURL& monochrome_high_dpi);
// Set the URL for the low and high DPI bitmaps for use by the welcome dialog.
void SetWelcomeURLs(const GURL& welcome_low_dpi,
const GURL& welcome_high_dpi);
GURL settings_icon_url();
// If an app info is updated, keep track of the newly added app ids so we can
// later inform the chrome_notifier_service to show any newly enabled
// notifications.
void set_added_app_ids(std::vector<std::string> added_app_ids) {
added_app_ids_ = added_app_ids;
}
std::vector<std::string> added_app_ids() { return added_app_ids_; }
// If an app info is updated removing app ids, keep track of the removed app
// ids so we can later remove any affected notifications.
void set_removed_app_ids(std::vector<std::string> removed_app_ids) {
removed_app_ids_ = removed_app_ids;
}
std::vector<std::string> removed_app_ids() { return removed_app_ids_; }
// TODO(petewil): Check resolution of system and return the right icon.
gfx::Image icon();
// Build a vector of app_ids that this app_info contains.
std::vector<std::string> GetAppIdList();
// Set up for fetching all the bitmaps in this AppInfo.
void QueueBitmapFetchJobs();
// Start the bitmap fetching. When it is complete, the callback
// will notify the ChromeNotifierService of the new app info availablity.
void StartBitmapFetch();
// Method inherited from ImageHolderDelegate
virtual void OnFetchComplete() OVERRIDE;
// Check to see if we have responses for all the bitmaps we need.
bool AreAllBitmapsFetched();
// Construct a Message Center NotifierId from this synced notification app
// info object.
message_center::NotifierId GetNotifierId();
private:
// TODO(petewil): We need a unique id for a key. We will use the settings
// display name, but it would be more robust with a unique id.
Profile* profile_;
std::vector<std::string> app_ids_;
std::string settings_display_name_;
GURL welcome_link_url_;
// The 1x and 2x versions of the icon for settings, small.
scoped_ptr<chrome::ImageHolder> settings_holder_;
// Monochrome icons for app badging (1x and 2x), small.
scoped_ptr<chrome::ImageHolder> monochrome_holder_;
// Welcome dialog icon (1x and 2x), large.
scoped_ptr<chrome::ImageHolder> welcome_holder_;
// A landing page link for settings/welcome toast.
GURL welcome_landing_page_url_;
std::vector<std::string> added_app_ids_;
std::vector<std::string> removed_app_ids_;
SyncedNotificationAppInfoService* synced_notification_app_info_service_;
FRIEND_TEST_ALL_PREFIXES(SyncedNotificationAppInfoTest, AddRemoveTest);
FRIEND_TEST_ALL_PREFIXES(SyncedNotificationAppInfoTest, GetAppIdListTest);
FRIEND_TEST_ALL_PREFIXES(SyncedNotificationAppInfoTest,
CreateBitmapFetcherTest);
FRIEND_TEST_ALL_PREFIXES(SyncedNotificationAppInfoTest, OnFetchCompleteTest);
FRIEND_TEST_ALL_PREFIXES(SyncedNotificationAppInfoTest,
QueueBitmapFetchJobsTest);
FRIEND_TEST_ALL_PREFIXES(SyncedNotificationAppInfoTest,
AreAllBitmapsFetchedTest);
DISALLOW_COPY_AND_ASSIGN(SyncedNotificationAppInfo);
};
} // namespace notifier
#endif // CHROME_BROWSER_NOTIFICATIONS_SYNC_NOTIFIER_SYNCED_NOTIFICATION_APP_INFO_H_