blob: 8251297137ae864fc21bab0339d1754681f871ed [file] [log] [blame]
// Copyright (c) 2012 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/notification_test_util.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
#include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
#include "content/public/test/test_utils.h"
// -----------------------------------------------------------------------------
StubNotificationUIManager::StubNotificationUIManager() {}
StubNotificationUIManager::~StubNotificationUIManager() {}
unsigned int StubNotificationUIManager::GetNotificationCount() const {
return notifications_.size();
}
const message_center::Notification&
StubNotificationUIManager::GetNotificationAt(unsigned int index) const {
DCHECK_GT(GetNotificationCount(), index);
return notifications_[index].first;
}
void StubNotificationUIManager::SetNotificationAddedCallback(
const base::Closure& callback) {
notification_added_callback_ = callback;
}
bool StubNotificationUIManager::SilentDismissById(
const std::string& delegate_id,
ProfileID profile_id) {
auto iter = notifications_.begin();
for (; iter != notifications_.end(); ++iter) {
if (iter->first.id() != delegate_id || iter->second != profile_id)
continue;
notifications_.erase(iter);
return true;
}
return false;
}
void StubNotificationUIManager::Add(
const message_center::Notification& notification,
Profile* profile) {
if (is_shutdown_started_)
return;
notifications_.push_back(std::make_pair(
notification, NotificationUIManager::GetProfileID(profile)));
if (!notification_added_callback_.is_null()) {
notification_added_callback_.Run();
notification_added_callback_.Reset();
}
}
bool StubNotificationUIManager::Update(
const message_center::Notification& notification,
Profile* profile) {
const ProfileID profile_id = NotificationUIManager::GetProfileID(profile);
auto iter = notifications_.begin();
for (; iter != notifications_.end(); ++iter) {
const message_center::Notification& old_notification = iter->first;
if (old_notification.id() == notification.id() &&
old_notification.origin_url() == notification.origin_url() &&
iter->second == profile_id) {
notifications_.erase(iter);
notifications_.push_back(std::make_pair(notification, profile_id));
return true;
}
}
return false;
}
const message_center::Notification* StubNotificationUIManager::FindById(
const std::string& delegate_id,
ProfileID profile_id) const {
auto iter = notifications_.begin();
for (; iter != notifications_.end(); ++iter) {
if (iter->first.id() != delegate_id || iter->second != profile_id)
continue;
return &iter->first;
}
return nullptr;
}
bool StubNotificationUIManager::CancelById(const std::string& delegate_id,
ProfileID profile_id) {
auto iter = notifications_.begin();
for (; iter != notifications_.end(); ++iter) {
if (iter->first.id() != delegate_id || iter->second != profile_id)
continue;
iter->first.delegate()->Close(false /* by_user */);
notifications_.erase(iter);
return true;
}
return false;
}
std::set<std::string> StubNotificationUIManager::GetAllIdsByProfile(
ProfileID profile_id) {
std::set<std::string> delegate_ids;
for (const auto& pair : notifications_) {
if (pair.second == profile_id)
delegate_ids.insert(pair.first.id());
}
return delegate_ids;
}
bool StubNotificationUIManager::CancelAllBySourceOrigin(
const GURL& source_origin) {
last_canceled_source_ = source_origin;
return true;
}
bool StubNotificationUIManager::CancelAllByProfile(ProfileID profile_id) {
NOTIMPLEMENTED();
return false;
}
void StubNotificationUIManager::CancelAll() {
for (const auto& pair : notifications_)
pair.first.delegate()->Close(false /* by_user */);
notifications_.clear();
}
void StubNotificationUIManager::StartShutdown() {
is_shutdown_started_ = true;
CancelAll();
}
FullscreenStateWaiter::FullscreenStateWaiter(
Browser* browser, bool desired_state)
: browser_(browser),
desired_state_(desired_state) {}
void FullscreenStateWaiter::Wait() {
while (desired_state_ !=
browser_->exclusive_access_manager()->context()->IsFullscreen()) {
content::RunAllPendingInMessageLoop();
}
}