display_error_observer_chromeos.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
16e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner// Copyright 2013 The Chromium Authors. All rights reserved.
26e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner// Use of this source code is governed by a BSD-style license that can be
36e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner// found in the LICENSE file.
46e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
56e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner#include "ash/display/display_error_observer_chromeos.h"
66e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
76e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner#include "ash/system/system_notifier.h"
86e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner#include "grit/ash_resources.h"
96e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner#include "grit/ash_strings.h"
106e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner#include "ui/base/l10n/l10n_util.h"
116e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner#include "ui/base/resource/resource_bundle.h"
126e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner#include "ui/message_center/message_center.h"
136e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner#include "ui/message_center/notification.h"
146e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner#include "ui/message_center/notification_delegate.h"
156e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner#include "ui/message_center/notification_list.h"
166e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
176e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattnerusing message_center::Notification;
186e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
19f6390f48e6324b0221d10a9c75ab625357d8a43aChris Lattnernamespace ash {
206e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattnernamespace internal {
216e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattnernamespace {
226e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
236e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattnerconst char kDisplayErrorNotificationId[] = "chrome://settings/display/error";
246e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
256e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner}  // namespace
266e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
276e94c00ab29e654125e845f3bce692a3764c1c11Chris LattnerDisplayErrorObserver::DisplayErrorObserver() {
286e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner}
296e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
306e94c00ab29e654125e845f3bce692a3764c1c11Chris LattnerDisplayErrorObserver::~DisplayErrorObserver() {
316e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner}
326e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
336e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattnervoid DisplayErrorObserver::OnDisplayModeChangeFailed(
346e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner    ui::OutputState new_state) {
356e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner  // Always remove the notification to make sure the notification appears
366e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner  // as a popup in any situation.
376e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner  message_center::MessageCenter::Get()->RemoveNotification(
386e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner      kDisplayErrorNotificationId, false /* by_user */);
396e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
406e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner  int message_id = (new_state == ui::OUTPUT_STATE_DUAL_MIRROR) ?
416e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner      IDS_ASH_DISPLAY_FAILURE_ON_MIRRORING :
42f6390f48e6324b0221d10a9c75ab625357d8a43aChris Lattner      IDS_ASH_DISPLAY_FAILURE_ON_NON_MIRRORING;
43f6390f48e6324b0221d10a9c75ab625357d8a43aChris Lattner
4470a76a633ed5101dbe472404efd989f4f1b3669cChris Lattner  ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
4570a76a633ed5101dbe472404efd989f4f1b3669cChris Lattner  scoped_ptr<Notification> notification(new Notification(
466e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner      message_center::NOTIFICATION_TYPE_SIMPLE,
476e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner      kDisplayErrorNotificationId,
486e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner      l10n_util::GetStringUTF16(message_id),
49f6390f48e6324b0221d10a9c75ab625357d8a43aChris Lattner      base::string16(),  // message
506e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner      bundle.GetImageNamed(IDR_AURA_NOTIFICATION_DISPLAY),
516e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner      base::string16(),  // display_source
526e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner      message_center::NotifierId(
536e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner          message_center::NotifierId::SYSTEM_COMPONENT,
546e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner          system_notifier::kNotifierDisplayError),
556e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner      message_center::RichNotificationData(),
565a5f6b6e38b7155200903816f22501cce4ca36a7Chris Lattner      NULL));
576e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner  message_center::MessageCenter::Get()->AddNotification(notification.Pass());
586e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner}
596e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
606e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattnerbase::string16 DisplayErrorObserver::
616e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner    GetTitleOfDisplayErrorNotificationForTest() {
62f6390f48e6324b0221d10a9c75ab625357d8a43aChris Lattner  message_center::NotificationList::Notifications notifications =
63f6390f48e6324b0221d10a9c75ab625357d8a43aChris Lattner      message_center::MessageCenter::Get()->GetVisibleNotifications();
64f6390f48e6324b0221d10a9c75ab625357d8a43aChris Lattner  for (message_center::NotificationList::Notifications::const_iterator iter =
656e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner           notifications.begin(); iter != notifications.end(); ++iter) {
666e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner    if ((*iter)->id() == kDisplayErrorNotificationId)
676e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner      return (*iter)->title();
686e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner  }
69f6390f48e6324b0221d10a9c75ab625357d8a43aChris Lattner
7070a76a633ed5101dbe472404efd989f4f1b3669cChris Lattner  return base::string16();
7170a76a633ed5101dbe472404efd989f4f1b3669cChris Lattner}
7270a76a633ed5101dbe472404efd989f4f1b3669cChris Lattner
7370a76a633ed5101dbe472404efd989f4f1b3669cChris Lattner}  // namespace internal
7470a76a633ed5101dbe472404efd989f4f1b3669cChris Lattner}  // namespace ash
7570a76a633ed5101dbe472404efd989f4f1b3669cChris Lattner