display_error_observer.cc 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. #include "ash/display/display_error_observer.h"
  5. #include "ash/display/display_util.h"
  6. #include "ash/strings/grit/ash_strings.h"
  7. #include "base/logging.h"
  8. #include "base/strings/string_number_conversions.h"
  9. #include "ui/base/l10n/l10n_util.h"
  10. #include "ui/chromeos/devicetype_utils.h"
  11. #include "ui/display/types/display_snapshot.h"
  12. #include "ui/display/util/display_util.h"
  13. namespace ash {
  14. DisplayErrorObserver::DisplayErrorObserver() = default;
  15. DisplayErrorObserver::~DisplayErrorObserver() = default;
  16. void DisplayErrorObserver::OnDisplayModeChangeFailed(
  17. const display::DisplayConfigurator::DisplayStateList& displays,
  18. display::MultipleDisplayState new_state) {
  19. bool internal_display_failed = false;
  20. LOG(ERROR) << "Failed to configure the following display(s):";
  21. for (auto* display : displays) {
  22. const int64_t display_id = display->display_id();
  23. internal_display_failed |= display::IsInternalDisplayId(display_id);
  24. LOG(ERROR) << "- Display with ID = " << display_id << ", and EDID = "
  25. << base::HexEncode(display->edid().data(),
  26. display->edid().size())
  27. << ".";
  28. }
  29. if (internal_display_failed && displays.size() == 1u) {
  30. // If the internal display is the only display that failed, don't show this
  31. // notification to the user, as it's confusing and less helpful.
  32. // https://crbug.com/775197.
  33. return;
  34. }
  35. std::u16string message =
  36. (new_state == display::MULTIPLE_DISPLAY_STATE_MULTI_MIRROR)
  37. ? l10n_util::GetStringUTF16(IDS_ASH_DISPLAY_FAILURE_ON_MIRRORING)
  38. : ui::SubstituteChromeOSDeviceType(
  39. IDS_ASH_DISPLAY_FAILURE_ON_NON_MIRRORING);
  40. ShowDisplayErrorNotification(message, true);
  41. }
  42. } // namespace ash