diff options
Diffstat (limited to 'chromium/components/download/internal/scheduler/device_status.cc')
-rw-r--r-- | chromium/components/download/internal/scheduler/device_status.cc | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/chromium/components/download/internal/scheduler/device_status.cc b/chromium/components/download/internal/scheduler/device_status.cc new file mode 100644 index 00000000000..80c88c0053d --- /dev/null +++ b/chromium/components/download/internal/scheduler/device_status.cc @@ -0,0 +1,72 @@ +// Copyright 2017 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 "components/download/internal/scheduler/device_status.h" + +namespace download { + +DeviceStatus::Result::Result() + : meets_battery_requirement(false), meets_network_requirement(false) {} + +bool DeviceStatus::Result::MeetsRequirements() const { + return meets_battery_requirement && meets_network_requirement; +} + +DeviceStatus::DeviceStatus() + : battery_status(BatteryStatus::NOT_CHARGING), + network_status(NetworkStatus::DISCONNECTED) {} + +DeviceStatus::DeviceStatus(BatteryStatus battery, NetworkStatus network) + : battery_status(battery), network_status(network) {} + +bool DeviceStatus::operator==(const DeviceStatus& rhs) const { + return network_status == rhs.network_status && + battery_status == rhs.battery_status; +} + +DeviceStatus::Result DeviceStatus::MeetsCondition( + const SchedulingParams& params) const { + DeviceStatus::Result result; + + switch (params.battery_requirements) { + case SchedulingParams::BatteryRequirements::BATTERY_INSENSITIVE: + result.meets_battery_requirement = true; + break; + case SchedulingParams::BatteryRequirements::BATTERY_SENSITIVE: + result.meets_battery_requirement = + battery_status == BatteryStatus::CHARGING; + break; + default: + NOTREACHED(); + } + switch (params.network_requirements) { + case SchedulingParams::NetworkRequirements::NONE: + result.meets_network_requirement = + network_status != NetworkStatus::DISCONNECTED; + break; + case SchedulingParams::NetworkRequirements::OPTIMISTIC: + case SchedulingParams::NetworkRequirements::UNMETERED: + result.meets_network_requirement = + network_status == NetworkStatus::UNMETERED; + break; + default: + NOTREACHED(); + } + return result; +} + +Criteria::Criteria() + : requires_battery_charging(true), requires_unmetered_network(true) {} + +Criteria::Criteria(bool requires_battery_charging, + bool requires_unmetered_network) + : requires_battery_charging(requires_battery_charging), + requires_unmetered_network(requires_unmetered_network) {} + +bool Criteria::operator==(const Criteria& other) const { + return requires_battery_charging == other.requires_battery_charging && + requires_unmetered_network == other.requires_unmetered_network; +} + +} // namespace download |