display_error_observer_chromeos.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
1// Copyright 2013 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. 4 5#include "ash/display/display_error_observer_chromeos.h" 6 7#include "ash/system/system_notifier.h" 8#include "grit/ash_resources.h" 9#include "grit/ash_strings.h" 10#include "ui/base/l10n/l10n_util.h" 11#include "ui/base/resource/resource_bundle.h" 12#include "ui/message_center/message_center.h" 13#include "ui/message_center/notification.h" 14#include "ui/message_center/notification_delegate.h" 15#include "ui/message_center/notification_list.h" 16 17using message_center::Notification; 18 19namespace ash { 20namespace internal { 21namespace { 22 23const char kDisplayErrorNotificationId[] = "chrome://settings/display/error"; 24 25} // namespace 26 27DisplayErrorObserver::DisplayErrorObserver() { 28} 29 30DisplayErrorObserver::~DisplayErrorObserver() { 31} 32 33void DisplayErrorObserver::OnDisplayModeChangeFailed( 34 chromeos::OutputState new_state) { 35 // Always remove the notification to make sure the notification appears 36 // as a popup in any situation. 37 message_center::MessageCenter::Get()->RemoveNotification( 38 kDisplayErrorNotificationId, false /* by_user */); 39 40 int message_id = (new_state == chromeos::STATE_DUAL_MIRROR) ? 41 IDS_ASH_DISPLAY_FAILURE_ON_MIRRORING : 42 IDS_ASH_DISPLAY_FAILURE_ON_NON_MIRRORING; 43 44 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 45 scoped_ptr<Notification> notification(new Notification( 46 message_center::NOTIFICATION_TYPE_SIMPLE, 47 kDisplayErrorNotificationId, 48 l10n_util::GetStringUTF16(message_id), 49 base::string16(), // message 50 bundle.GetImageNamed(IDR_AURA_UBER_TRAY_DISPLAY), 51 base::string16(), // display_source 52 message_center::NotifierId(system_notifier::NOTIFIER_DISPLAY_ERROR), 53 message_center::RichNotificationData(), 54 NULL)); 55 message_center::MessageCenter::Get()->AddNotification(notification.Pass()); 56} 57 58string16 DisplayErrorObserver::GetTitleOfDisplayErrorNotificationForTest() { 59 message_center::NotificationList::Notifications notifications = 60 message_center::MessageCenter::Get()->GetVisibleNotifications(); 61 for (message_center::NotificationList::Notifications::const_iterator iter = 62 notifications.begin(); iter != notifications.end(); ++iter) { 63 if ((*iter)->id() == kDisplayErrorNotificationId) 64 return (*iter)->title(); 65 } 66 67 return base::string16(); 68} 69 70} // namespace internal 71} // namespace ash 72