| Index: ash/common/system/chromeos/power/tray_power.cc | 
| diff --git a/ash/common/system/chromeos/power/tray_power.cc b/ash/common/system/chromeos/power/tray_power.cc | 
| deleted file mode 100644 | 
| index 7d071ed461fcccf986a3639853491ec9a3f1836e..0000000000000000000000000000000000000000 | 
| --- a/ash/common/system/chromeos/power/tray_power.cc | 
| +++ /dev/null | 
| @@ -1,363 +0,0 @@ | 
| -// 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 "ash/common/system/chromeos/power/tray_power.h" | 
| - | 
| -#include <utility> | 
| - | 
| -#include "ash/common/accessibility_delegate.h" | 
| -#include "ash/common/ash_switches.h" | 
| -#include "ash/common/system/chromeos/devicetype_utils.h" | 
| -#include "ash/common/system/chromeos/power/battery_notification.h" | 
| -#include "ash/common/system/chromeos/power/dual_role_notification.h" | 
| -#include "ash/common/system/date/date_view.h" | 
| -#include "ash/common/system/system_notifier.h" | 
| -#include "ash/common/system/tray/system_tray_delegate.h" | 
| -#include "ash/common/system/tray/tray_constants.h" | 
| -#include "ash/common/system/tray/tray_item_view.h" | 
| -#include "ash/common/system/tray/tray_utils.h" | 
| -#include "ash/resources/grit/ash_resources.h" | 
| -#include "ash/strings/grit/ash_strings.h" | 
| -#include "base/command_line.h" | 
| -#include "base/logging.h" | 
| -#include "base/metrics/histogram.h" | 
| -#include "base/time/time.h" | 
| -#include "ui/accessibility/ax_node_data.h" | 
| -#include "ui/base/resource/resource_bundle.h" | 
| -#include "ui/message_center/message_center.h" | 
| -#include "ui/message_center/notification.h" | 
| -#include "ui/message_center/notification_delegate.h" | 
| -#include "ui/views/controls/image_view.h" | 
| -#include "ui/views/view.h" | 
| - | 
| -using message_center::MessageCenter; | 
| -using message_center::Notification; | 
| - | 
| -namespace ash { | 
| - | 
| -// Informs the TrayPower instance when a USB notification is closed. | 
| -class UsbNotificationDelegate : public message_center::NotificationDelegate { | 
| - public: | 
| -  explicit UsbNotificationDelegate(TrayPower* tray_power) | 
| -      : tray_power_(tray_power) {} | 
| - | 
| -  // Overridden from message_center::NotificationDelegate. | 
| -  void Close(bool by_user) override { | 
| -    if (by_user) | 
| -      tray_power_->NotifyUsbNotificationClosedByUser(); | 
| -  } | 
| - | 
| - private: | 
| -  ~UsbNotificationDelegate() override {} | 
| - | 
| -  TrayPower* tray_power_; | 
| - | 
| -  DISALLOW_COPY_AND_ASSIGN(UsbNotificationDelegate); | 
| -}; | 
| - | 
| -namespace { | 
| - | 
| -std::string GetNotificationStateString( | 
| -    TrayPower::NotificationState notification_state) { | 
| -  switch (notification_state) { | 
| -    case TrayPower::NOTIFICATION_NONE: | 
| -      return "none"; | 
| -    case TrayPower::NOTIFICATION_LOW_POWER: | 
| -      return "low power"; | 
| -    case TrayPower::NOTIFICATION_CRITICAL: | 
| -      return "critical power"; | 
| -  } | 
| -  NOTREACHED() << "Unknown state " << notification_state; | 
| -  return "Unknown state"; | 
| -} | 
| - | 
| -void LogBatteryForUsbCharger(TrayPower::NotificationState state, | 
| -                             int battery_percent) { | 
| -  LOG(WARNING) << "Showing " << GetNotificationStateString(state) | 
| -               << " notification. USB charger is connected. " | 
| -               << "Battery percentage: " << battery_percent << "%."; | 
| -} | 
| - | 
| -void LogBatteryForNoCharger(TrayPower::NotificationState state, | 
| -                            int remaining_minutes) { | 
| -  LOG(WARNING) << "Showing " << GetNotificationStateString(state) | 
| -               << " notification. No charger connected." | 
| -               << " Remaining time: " << remaining_minutes << " minutes."; | 
| -} | 
| - | 
| -}  // namespace | 
| - | 
| -namespace tray { | 
| - | 
| -// This view is used only for the tray. | 
| -class PowerTrayView : public TrayItemView { | 
| - public: | 
| -  explicit PowerTrayView(SystemTrayItem* owner) : TrayItemView(owner) { | 
| -    CreateImageView(); | 
| -    UpdateImage(); | 
| -  } | 
| - | 
| -  ~PowerTrayView() override {} | 
| - | 
| -  // Overriden from views::View. | 
| -  void GetAccessibleNodeData(ui::AXNodeData* node_data) override { | 
| -    node_data->SetName(accessible_name_); | 
| -    node_data->role = ui::AX_ROLE_BUTTON; | 
| -  } | 
| - | 
| -  void UpdateStatus(bool battery_alert) { | 
| -    UpdateImage(); | 
| -    SetVisible(PowerStatus::Get()->IsBatteryPresent()); | 
| - | 
| -    if (battery_alert) { | 
| -      accessible_name_ = PowerStatus::Get()->GetAccessibleNameString(true); | 
| -      NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, true); | 
| -    } | 
| -  } | 
| - | 
| - private: | 
| -  void UpdateImage() { | 
| -    const PowerStatus::BatteryImageInfo info = | 
| -        PowerStatus::Get()->GetBatteryImageInfo(PowerStatus::ICON_LIGHT); | 
| -    if (info != previous_image_info_) { | 
| -      image_view()->SetImage(PowerStatus::Get()->GetBatteryImage(info)); | 
| -      previous_image_info_ = info; | 
| -    } | 
| -  } | 
| - | 
| -  base::string16 accessible_name_; | 
| - | 
| -  // Information about the last-used image. Cached to avoid unnecessary updates | 
| -  // (http://crbug.com/589348). | 
| -  PowerStatus::BatteryImageInfo previous_image_info_; | 
| - | 
| -  DISALLOW_COPY_AND_ASSIGN(PowerTrayView); | 
| -}; | 
| - | 
| -}  // namespace tray | 
| - | 
| -const int TrayPower::kCriticalMinutes = 5; | 
| -const int TrayPower::kLowPowerMinutes = 15; | 
| -const int TrayPower::kNoWarningMinutes = 30; | 
| -const int TrayPower::kCriticalPercentage = 5; | 
| -const int TrayPower::kLowPowerPercentage = 10; | 
| -const int TrayPower::kNoWarningPercentage = 15; | 
| - | 
| -const char TrayPower::kUsbNotificationId[] = "usb-charger"; | 
| - | 
| -TrayPower::TrayPower(SystemTray* system_tray, MessageCenter* message_center) | 
| -    : SystemTrayItem(system_tray, UMA_POWER), | 
| -      message_center_(message_center), | 
| -      power_tray_(NULL), | 
| -      notification_state_(NOTIFICATION_NONE), | 
| -      usb_charger_was_connected_(false), | 
| -      line_power_was_connected_(false), | 
| -      usb_notification_dismissed_(false) { | 
| -  PowerStatus::Get()->AddObserver(this); | 
| -} | 
| - | 
| -TrayPower::~TrayPower() { | 
| -  PowerStatus::Get()->RemoveObserver(this); | 
| -  message_center_->RemoveNotification(kUsbNotificationId, false); | 
| -} | 
| - | 
| -views::View* TrayPower::CreateTrayView(LoginStatus status) { | 
| -  // There may not be enough information when this is created about whether | 
| -  // there is a battery or not. So always create this, and adjust visibility as | 
| -  // necessary. | 
| -  CHECK(power_tray_ == NULL); | 
| -  power_tray_ = new tray::PowerTrayView(this); | 
| -  power_tray_->UpdateStatus(false); | 
| -  return power_tray_; | 
| -} | 
| - | 
| -views::View* TrayPower::CreateDefaultView(LoginStatus status) { | 
| -  // Make sure icon status is up to date. (Also triggers stub activation). | 
| -  PowerStatus::Get()->RequestStatusUpdate(); | 
| -  return NULL; | 
| -} | 
| - | 
| -void TrayPower::DestroyTrayView() { | 
| -  power_tray_ = NULL; | 
| -} | 
| - | 
| -void TrayPower::DestroyDefaultView() {} | 
| - | 
| -void TrayPower::UpdateAfterLoginStatusChange(LoginStatus status) {} | 
| - | 
| -void TrayPower::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { | 
| -  SetTrayImageItemBorder(power_tray_, alignment); | 
| -} | 
| - | 
| -void TrayPower::OnPowerStatusChanged() { | 
| -  bool battery_alert = UpdateNotificationState(); | 
| -  if (power_tray_) | 
| -    power_tray_->UpdateStatus(battery_alert); | 
| - | 
| -  // Factory testing may place the battery into unusual states. | 
| -  if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 
| -          ash::switches::kAshHideNotificationsForFactory)) | 
| -    return; | 
| - | 
| -  MaybeShowUsbChargerNotification(); | 
| -  MaybeShowDualRoleNotification(); | 
| - | 
| -  if (battery_alert) { | 
| -    // Remove any existing notification so it's dismissed before adding a new | 
| -    // one. Otherwise we might update a "low battery" notification to "critical" | 
| -    // without it being shown again. | 
| -    battery_notification_.reset(); | 
| -    battery_notification_.reset( | 
| -        new BatteryNotification(message_center_, notification_state_)); | 
| -  } else if (notification_state_ == NOTIFICATION_NONE) { | 
| -    battery_notification_.reset(); | 
| -  } else if (battery_notification_.get()) { | 
| -    battery_notification_->Update(notification_state_); | 
| -  } | 
| - | 
| -  usb_charger_was_connected_ = PowerStatus::Get()->IsUsbChargerConnected(); | 
| -  line_power_was_connected_ = PowerStatus::Get()->IsLinePowerConnected(); | 
| -} | 
| - | 
| -bool TrayPower::MaybeShowUsbChargerNotification() { | 
| -  ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 
| -  const PowerStatus& status = *PowerStatus::Get(); | 
| - | 
| -  bool usb_charger_is_connected = status.IsUsbChargerConnected(); | 
| - | 
| -  // Check for a USB charger being connected. | 
| -  if (usb_charger_is_connected && !usb_charger_was_connected_ && | 
| -      !usb_notification_dismissed_) { | 
| -    std::unique_ptr<Notification> notification(new Notification( | 
| -        message_center::NOTIFICATION_TYPE_SIMPLE, kUsbNotificationId, | 
| -        rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_LOW_POWER_CHARGER_TITLE), | 
| -        ash::SubstituteChromeOSDeviceType( | 
| -            IDS_ASH_STATUS_TRAY_LOW_POWER_CHARGER_MESSAGE_SHORT), | 
| -        rb.GetImageNamed(IDR_AURA_NOTIFICATION_LOW_POWER_CHARGER), | 
| -        base::string16(), GURL(), | 
| -        message_center::NotifierId(message_center::NotifierId::SYSTEM_COMPONENT, | 
| -                                   system_notifier::kNotifierPower), | 
| -        message_center::RichNotificationData(), | 
| -        new UsbNotificationDelegate(this))); | 
| -    message_center_->AddNotification(std::move(notification)); | 
| -    return true; | 
| -  } else if (!usb_charger_is_connected && usb_charger_was_connected_) { | 
| -    // USB charger was unplugged or was identified as a different type while | 
| -    // the USB charger notification was showing. | 
| -    message_center_->RemoveNotification(kUsbNotificationId, false); | 
| -    if (!status.IsLinePowerConnected()) | 
| -      usb_notification_dismissed_ = false; | 
| -    return true; | 
| -  } | 
| -  return false; | 
| -} | 
| - | 
| -void TrayPower::MaybeShowDualRoleNotification() { | 
| -  const PowerStatus& status = *PowerStatus::Get(); | 
| -  if (!status.HasDualRoleDevices()) { | 
| -    dual_role_notification_.reset(); | 
| -    return; | 
| -  } | 
| - | 
| -  if (!dual_role_notification_) | 
| -    dual_role_notification_.reset(new DualRoleNotification(message_center_)); | 
| -  dual_role_notification_->Update(); | 
| -} | 
| - | 
| -bool TrayPower::UpdateNotificationState() { | 
| -  const PowerStatus& status = *PowerStatus::Get(); | 
| -  if (!status.IsBatteryPresent() || status.IsBatteryTimeBeingCalculated() || | 
| -      status.IsMainsChargerConnected()) { | 
| -    notification_state_ = NOTIFICATION_NONE; | 
| -    return false; | 
| -  } | 
| - | 
| -  return status.IsUsbChargerConnected() | 
| -             ? UpdateNotificationStateForRemainingPercentage() | 
| -             : UpdateNotificationStateForRemainingTime(); | 
| -} | 
| - | 
| -bool TrayPower::UpdateNotificationStateForRemainingTime() { | 
| -  // The notification includes a rounded minutes value, so round the estimate | 
| -  // received from the power manager to match. | 
| -  const int remaining_minutes = static_cast<int>( | 
| -      PowerStatus::Get()->GetBatteryTimeToEmpty().InSecondsF() / 60.0 + 0.5); | 
| - | 
| -  if (remaining_minutes >= kNoWarningMinutes || | 
| -      PowerStatus::Get()->IsBatteryFull()) { | 
| -    notification_state_ = NOTIFICATION_NONE; | 
| -    return false; | 
| -  } | 
| - | 
| -  switch (notification_state_) { | 
| -    case NOTIFICATION_NONE: | 
| -      if (remaining_minutes <= kCriticalMinutes) { | 
| -        notification_state_ = NOTIFICATION_CRITICAL; | 
| -        LogBatteryForNoCharger(notification_state_, remaining_minutes); | 
| -        return true; | 
| -      } | 
| -      if (remaining_minutes <= kLowPowerMinutes) { | 
| -        notification_state_ = NOTIFICATION_LOW_POWER; | 
| -        LogBatteryForNoCharger(notification_state_, remaining_minutes); | 
| -        return true; | 
| -      } | 
| -      return false; | 
| -    case NOTIFICATION_LOW_POWER: | 
| -      if (remaining_minutes <= kCriticalMinutes) { | 
| -        notification_state_ = NOTIFICATION_CRITICAL; | 
| -        LogBatteryForNoCharger(notification_state_, remaining_minutes); | 
| -        return true; | 
| -      } | 
| -      return false; | 
| -    case NOTIFICATION_CRITICAL: | 
| -      return false; | 
| -  } | 
| -  NOTREACHED(); | 
| -  return false; | 
| -} | 
| - | 
| -bool TrayPower::UpdateNotificationStateForRemainingPercentage() { | 
| -  // The notification includes a rounded percentage, so round the value received | 
| -  // from the power manager to match. | 
| -  const int remaining_percentage = | 
| -      PowerStatus::Get()->GetRoundedBatteryPercent(); | 
| - | 
| -  if (remaining_percentage >= kNoWarningPercentage || | 
| -      PowerStatus::Get()->IsBatteryFull()) { | 
| -    notification_state_ = NOTIFICATION_NONE; | 
| -    return false; | 
| -  } | 
| - | 
| -  switch (notification_state_) { | 
| -    case NOTIFICATION_NONE: | 
| -      if (remaining_percentage <= kCriticalPercentage) { | 
| -        notification_state_ = NOTIFICATION_CRITICAL; | 
| -        LogBatteryForUsbCharger(notification_state_, remaining_percentage); | 
| -        return true; | 
| -      } | 
| -      if (remaining_percentage <= kLowPowerPercentage) { | 
| -        notification_state_ = NOTIFICATION_LOW_POWER; | 
| -        LogBatteryForUsbCharger(notification_state_, remaining_percentage); | 
| -        return true; | 
| -      } | 
| -      return false; | 
| -    case NOTIFICATION_LOW_POWER: | 
| -      if (remaining_percentage <= kCriticalPercentage) { | 
| -        notification_state_ = NOTIFICATION_CRITICAL; | 
| -        LogBatteryForUsbCharger(notification_state_, remaining_percentage); | 
| -        return true; | 
| -      } | 
| -      return false; | 
| -    case NOTIFICATION_CRITICAL: | 
| -      return false; | 
| -  } | 
| -  NOTREACHED(); | 
| -  return false; | 
| -} | 
| - | 
| -void TrayPower::NotifyUsbNotificationClosedByUser() { | 
| -  usb_notification_dismissed_ = true; | 
| -} | 
| - | 
| -}  // namespace ash | 
|  |