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 { 21 22const char kDisplayErrorNotificationId[] = "chrome://settings/display/error"; 23 24} // namespace 25 26DisplayErrorObserver::DisplayErrorObserver() { 27} 28 29DisplayErrorObserver::~DisplayErrorObserver() { 30} 31 32void DisplayErrorObserver::OnDisplayModeChangeFailed( 33 ui::MultipleDisplayState new_state) { 34 // Always remove the notification to make sure the notification appears 35 // as a popup in any situation. 36 message_center::MessageCenter::Get()->RemoveNotification( 37 kDisplayErrorNotificationId, false /* by_user */); 38 39 int message_id = (new_state == ui::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR) ? 40 IDS_ASH_DISPLAY_FAILURE_ON_MIRRORING : 41 IDS_ASH_DISPLAY_FAILURE_ON_NON_MIRRORING; 42 43 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 44 scoped_ptr<Notification> notification(new Notification( 45 message_center::NOTIFICATION_TYPE_SIMPLE, 46 kDisplayErrorNotificationId, 47 l10n_util::GetStringUTF16(message_id), 48 base::string16(), // message 49 bundle.GetImageNamed(IDR_AURA_NOTIFICATION_DISPLAY), 50 base::string16(), // display_source 51 message_center::NotifierId( 52 message_center::NotifierId::SYSTEM_COMPONENT, 53 system_notifier::kNotifierDisplayError), 54 message_center::RichNotificationData(), 55 NULL)); 56 message_center::MessageCenter::Get()->AddNotification(notification.Pass()); 57} 58 59base::string16 DisplayErrorObserver:: 60 GetTitleOfDisplayErrorNotificationForTest() { 61 message_center::NotificationList::Notifications notifications = 62 message_center::MessageCenter::Get()->GetVisibleNotifications(); 63 for (message_center::NotificationList::Notifications::const_iterator iter = 64 notifications.begin(); iter != notifications.end(); ++iter) { 65 if ((*iter)->id() == kDisplayErrorNotificationId) 66 return (*iter)->title(); 67 } 68 69 return base::string16(); 70} 71 72} // namespace ash 73