blob: 6511f81daffa590589fbbef15d2525d23a2aef7d [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.
#include "chrome/browser/notifications/sync_notifier/synced_notification_app_info.h"
#include "chrome/browser/notifications/sync_notifier/synced_notification_app_info_service.h"
#include "chrome/browser/profiles/profile.h"
#include "sync/api/sync_data.h"
#include "sync/protocol/synced_notification_app_info_specifics.pb.h"
using chrome::ImageHolder;
using chrome::ImageHolderDelegate;
namespace notifier {
SyncedNotificationAppInfo::SyncedNotificationAppInfo(
Profile* const profile,
const std::string& settings_display_name,
SyncedNotificationAppInfoService* synced_notification_app_info_service)
: profile_(profile),
settings_display_name_(settings_display_name),
synced_notification_app_info_service_(
synced_notification_app_info_service) {}
SyncedNotificationAppInfo::~SyncedNotificationAppInfo() {}
GURL SyncedNotificationAppInfo::settings_icon_url() {
if (settings_holder_ != NULL)
return settings_holder_->low_dpi_url();
else
return GURL();
}
bool SyncedNotificationAppInfo::HasAppId(const std::string& app_id) {
std::vector<std::string>::iterator it;
for (it = app_ids_.begin(); it != app_ids_.end(); ++it) {
if (app_id == *it)
return true;
}
return false;
}
void SyncedNotificationAppInfo::AddAppId(const std::string& app_id) {
if (HasAppId(app_id))
return;
app_ids_.push_back(app_id);
}
void SyncedNotificationAppInfo::RemoveAppId(const std::string& app_id) {
std::vector<std::string>::iterator it;
for (it = app_ids_.begin(); it != app_ids_.end(); ++it) {
if (app_id == *it) {
app_ids_.erase(it);
return;
}
}
}
void SyncedNotificationAppInfo::SetWelcomeLinkUrl(
const GURL& welcome_link_url) {
welcome_link_url_ = welcome_link_url;
}
void SyncedNotificationAppInfo::SetSettingsURLs(
const GURL& settings_low_dpi, const GURL& settings_high_dpi) {
settings_holder_.reset(new ImageHolder(settings_low_dpi,
settings_high_dpi,
profile_,
this));
}
void SyncedNotificationAppInfo::SetMonochromeURLs(
const GURL& monochrome_low_dpi, const GURL& monochrome_high_dpi) {
monochrome_holder_.reset(new ImageHolder(monochrome_low_dpi,
monochrome_high_dpi,
profile_,
this));
}
void SyncedNotificationAppInfo::SetWelcomeURLs(
const GURL& welcome_low_dpi, const GURL& welcome_high_dpi) {
welcome_holder_.reset(new ImageHolder(welcome_low_dpi,
welcome_high_dpi,
profile_,
this));
}
gfx::Image SyncedNotificationAppInfo::icon() {
if (settings_holder_ != NULL)
return settings_holder_->low_dpi_image();
else
return gfx::Image();
}
std::vector<std::string> SyncedNotificationAppInfo::GetAppIdList() {
std::vector<std::string> app_id_list;
std::vector<std::string>::iterator it;
for (it = app_ids_.begin(); it != app_ids_.end(); ++it) {
app_id_list.push_back(*it);
}
return app_id_list;
}
// TODO: rename, queing now happens elsewhere.
// Fill up the queue of bitmaps to fetch.
void SyncedNotificationAppInfo::QueueBitmapFetchJobs() {
// If there are no bitmaps to fetch, call OnBitmapFetchesDone.
if (AreAllBitmapsFetched()) {
synced_notification_app_info_service_->OnBitmapFetchesDone(
added_app_ids_, removed_app_ids_);
DVLOG(2) << "AppInfo object with no bitmaps, we should add some. "
<< this->settings_display_name_;
return;
}
}
// Start the bitmap fetching. When it is complete, the callback
// will notify the ChromeNotifierService of the new app info availablity.
void SyncedNotificationAppInfo::StartBitmapFetch() {
if (settings_holder_.get() != NULL)
settings_holder_->StartFetch();
if (monochrome_holder_.get() != NULL)
monochrome_holder_->StartFetch();
if (welcome_holder_.get() != NULL)
welcome_holder_->StartFetch();
}
// Method inherited from ImageHolderDelegate
void SyncedNotificationAppInfo::OnFetchComplete() {
if (AreAllBitmapsFetched()) {
if (synced_notification_app_info_service_ != NULL) {
synced_notification_app_info_service_->OnBitmapFetchesDone(
added_app_ids_, removed_app_ids_);
}
}
}
// Check to see if we have responses for all the bitmaps we got a URL for.
bool SyncedNotificationAppInfo::AreAllBitmapsFetched() {
bool done =
(settings_holder_.get() == NULL || settings_holder_->IsFetchingDone()) &&
(monochrome_holder_.get() == NULL ||
monochrome_holder_->IsFetchingDone()) &&
(welcome_holder_.get() == NULL || welcome_holder_->IsFetchingDone());
return done;
}
message_center::NotifierId SyncedNotificationAppInfo::GetNotifierId() {
return message_center::NotifierId(
message_center::NotifierId::SYNCED_NOTIFICATION_SERVICE,
settings_display_name_);
}
} // namespace notifier