Index: components/download/internal/proto_conversions.cc |
diff --git a/components/download/internal/proto_conversions.cc b/components/download/internal/proto_conversions.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dc4187aa3236f955b43a5979c90d68038edd7ed6 |
--- /dev/null |
+++ b/components/download/internal/proto_conversions.cc |
@@ -0,0 +1,285 @@ |
+// 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 <utility> |
+ |
+#include "base/memory/ptr_util.h" |
+#include "base/time/time.h" |
+#include "components/download/internal/proto_conversions.h" |
+#include "net/http/http_request_headers.h" |
+ |
+namespace download { |
+ |
+protodb::Entry_State ProtoConversions::RequestStateToProto(Entry::State state) { |
+ switch (state) { |
+ case Entry::State::NEW: |
+ return protodb::Entry_State_NEW; |
+ case Entry::State::AVAILABLE: |
+ return protodb::Entry_State_AVAILABLE; |
+ case Entry::State::ACTIVE: |
+ return protodb::Entry_State_ACTIVE; |
+ case Entry::State::PAUSED: |
+ return protodb::Entry_State_PAUSED; |
+ case Entry::State::COMPLETE: |
+ return protodb::Entry_State_COMPLETE; |
+ case Entry::State::WATCHDOG: |
+ return protodb::Entry_State_WATCHDOG; |
+ } |
+ |
+ NOTREACHED(); |
+ return protodb::Entry_State_NEW; |
+} |
+ |
+Entry::State ProtoConversions::RequestStateFromProto( |
+ protodb::Entry_State state) { |
+ switch (state) { |
+ case protodb::Entry_State_NEW: |
+ return Entry::State::NEW; |
+ case protodb::Entry_State_AVAILABLE: |
+ return Entry::State::AVAILABLE; |
+ case protodb::Entry_State_ACTIVE: |
+ return Entry::State::ACTIVE; |
+ case protodb::Entry_State_PAUSED: |
+ return Entry::State::PAUSED; |
+ case protodb::Entry_State_COMPLETE: |
+ return Entry::State::COMPLETE; |
+ case protodb::Entry_State_WATCHDOG: |
+ return Entry::State::WATCHDOG; |
+ } |
+ |
+ NOTREACHED(); |
+ return Entry::State::NEW; |
+} |
+ |
+protodb::DownloadClient ProtoConversions::DownloadClientToProto( |
+ DownloadClient client) { |
+ switch (client) { |
+ case DownloadClient::INVALID: |
+ return protodb::DownloadClient::INVALID; |
+ case DownloadClient::TEST: |
+ return protodb::DownloadClient::TEST; |
+ case DownloadClient::OFFLINE_PAGE_PREFETCH: |
+ return protodb::DownloadClient::OFFLINE_PAGE_PREFETCH; |
+ case DownloadClient::BOUNDARY: |
+ return protodb::DownloadClient::BOUNDARY; |
+ } |
+ |
+ NOTREACHED(); |
+ return protodb::DownloadClient::INVALID; |
+} |
+ |
+DownloadClient ProtoConversions::DownloadClientFromProto( |
+ protodb::DownloadClient client) { |
+ switch (client) { |
+ case protodb::DownloadClient::INVALID: |
+ return DownloadClient::INVALID; |
+ case protodb::DownloadClient::TEST: |
+ return DownloadClient::TEST; |
+ case protodb::DownloadClient::OFFLINE_PAGE_PREFETCH: |
+ return DownloadClient::OFFLINE_PAGE_PREFETCH; |
+ case protodb::DownloadClient::BOUNDARY: |
+ return DownloadClient::BOUNDARY; |
+ } |
+ |
+ NOTREACHED(); |
+ return DownloadClient::INVALID; |
+} |
+ |
+SchedulingParams::NetworkRequirements |
+ProtoConversions::NetworkRequirementsFromProto( |
+ protodb::SchedulingParams_NetworkRequirements network_requirements) { |
+ switch (network_requirements) { |
+ case protodb::SchedulingParams_NetworkRequirements_NONE: |
+ return SchedulingParams::NetworkRequirements::NONE; |
+ case protodb::SchedulingParams_NetworkRequirements_OPTIMISTIC: |
+ return SchedulingParams::NetworkRequirements::OPTIMISTIC; |
+ case protodb::SchedulingParams_NetworkRequirements_UNMETERED: |
+ return SchedulingParams::NetworkRequirements::UNMETERED; |
+ } |
+ |
+ NOTREACHED(); |
+ return SchedulingParams::NetworkRequirements::NONE; |
+} |
+ |
+protodb::SchedulingParams_NetworkRequirements |
+ProtoConversions::NetworkRequirementsToProto( |
+ SchedulingParams::NetworkRequirements network_requirements) { |
+ switch (network_requirements) { |
+ case SchedulingParams::NetworkRequirements::NONE: |
+ return protodb::SchedulingParams_NetworkRequirements_NONE; |
+ case SchedulingParams::NetworkRequirements::OPTIMISTIC: |
+ return protodb::SchedulingParams_NetworkRequirements_OPTIMISTIC; |
+ case SchedulingParams::NetworkRequirements::UNMETERED: |
+ return protodb::SchedulingParams_NetworkRequirements_UNMETERED; |
+ } |
+ |
+ NOTREACHED(); |
+ return protodb::SchedulingParams_NetworkRequirements_NONE; |
+} |
+ |
+SchedulingParams::BatteryRequirements |
+ProtoConversions::BatteryRequirementsFromProto( |
+ protodb::SchedulingParams_BatteryRequirements battery_requirements) { |
+ switch (battery_requirements) { |
+ case protodb::SchedulingParams_BatteryRequirements_BATTERY_INSENSITIVE: |
+ return SchedulingParams::BatteryRequirements::BATTERY_INSENSITIVE; |
+ case protodb::SchedulingParams_BatteryRequirements_BATTERY_SENSITIVE: |
+ return SchedulingParams::BatteryRequirements::BATTERY_SENSITIVE; |
+ } |
+ |
+ NOTREACHED(); |
+ return SchedulingParams::BatteryRequirements::BATTERY_INSENSITIVE; |
+} |
+ |
+protodb::SchedulingParams_BatteryRequirements |
+ProtoConversions::BatteryRequirementsToProto( |
+ SchedulingParams::BatteryRequirements battery_requirements) { |
+ switch (battery_requirements) { |
+ case SchedulingParams::BatteryRequirements::BATTERY_INSENSITIVE: |
+ return protodb::SchedulingParams_BatteryRequirements_BATTERY_INSENSITIVE; |
+ case SchedulingParams::BatteryRequirements::BATTERY_SENSITIVE: |
+ return protodb::SchedulingParams_BatteryRequirements_BATTERY_SENSITIVE; |
+ } |
+ |
+ NOTREACHED(); |
+ return protodb::SchedulingParams_BatteryRequirements_BATTERY_INSENSITIVE; |
+} |
+ |
+SchedulingParams::Priority ProtoConversions::SchedulingPriorityFromProto( |
+ protodb::SchedulingParams_Priority priority) { |
+ switch (priority) { |
+ case protodb::SchedulingParams_Priority_LOW: |
+ return SchedulingParams::Priority::LOW; |
+ case protodb::SchedulingParams_Priority_NORMAL: |
+ return SchedulingParams::Priority::NORMAL; |
+ case protodb::SchedulingParams_Priority_HIGH: |
+ return SchedulingParams::Priority::HIGH; |
+ case protodb::SchedulingParams_Priority_UI: |
+ return SchedulingParams::Priority::UI; |
+ } |
+ |
+ NOTREACHED(); |
+ return SchedulingParams::Priority::LOW; |
+} |
+ |
+protodb::SchedulingParams_Priority ProtoConversions::SchedulingPriorityToProto( |
+ SchedulingParams::Priority priority) { |
+ switch (priority) { |
+ case SchedulingParams::Priority::LOW: |
+ return protodb::SchedulingParams_Priority_LOW; |
+ case SchedulingParams::Priority::NORMAL: |
+ return protodb::SchedulingParams_Priority_NORMAL; |
+ case SchedulingParams::Priority::HIGH: |
+ return protodb::SchedulingParams_Priority_HIGH; |
+ case SchedulingParams::Priority::UI: |
+ return protodb::SchedulingParams_Priority_UI; |
+ } |
+ |
+ NOTREACHED(); |
+ return protodb::SchedulingParams_Priority_LOW; |
+} |
+ |
+SchedulingParams ProtoConversions::SchedulingParamsFromProto( |
+ const protodb::SchedulingParams& proto) { |
+ SchedulingParams scheduling_params; |
+ |
+ scheduling_params.cancel_time = |
+ base::Time::FromInternalValue(proto.cancel_time()); |
+ scheduling_params.priority = SchedulingPriorityFromProto(proto.priority()); |
+ scheduling_params.network_requirements = |
+ NetworkRequirementsFromProto(proto.network_requirements()); |
+ scheduling_params.battery_requirements = |
+ BatteryRequirementsFromProto(proto.battery_requirements()); |
+ |
+ return scheduling_params; |
+} |
+ |
+void ProtoConversions::SchedulingParamsToProto( |
+ const SchedulingParams& scheduling_params, |
+ protodb::SchedulingParams* proto) { |
+ proto->set_cancel_time(scheduling_params.cancel_time.ToInternalValue()); |
+ proto->set_priority(SchedulingPriorityToProto(scheduling_params.priority)); |
+ proto->set_network_requirements( |
+ NetworkRequirementsToProto(scheduling_params.network_requirements)); |
+ proto->set_battery_requirements( |
+ BatteryRequirementsToProto(scheduling_params.battery_requirements)); |
+} |
+ |
+RequestParams ProtoConversions::RequestParamsFromProto( |
+ const protodb::RequestParams& proto) { |
+ RequestParams request_params; |
+ request_params.url = GURL(proto.url()); |
+ request_params.method = proto.method(); |
+ |
+ for (int i = 0; i < proto.headers_size(); i++) { |
+ protodb::RequestHeader header = proto.headers(i); |
+ request_params.request_headers.SetHeader(header.key(), header.value()); |
+ } |
+ |
+ return request_params; |
+} |
+ |
+void ProtoConversions::RequestParamsToProto(const RequestParams& request_params, |
+ protodb::RequestParams* proto) { |
+ proto->set_url(request_params.url.spec()); |
+ proto->set_method(request_params.method); |
+ |
+ int i = 0; |
+ net::HttpRequestHeaders::Iterator iter(request_params.request_headers); |
+ while (iter.GetNext()) { |
+ protodb::RequestHeader* header = proto->add_headers(); |
+ header->set_key(iter.name()); |
+ header->set_value(iter.value()); |
+ i++; |
+ } |
+} |
+ |
+Entry ProtoConversions::EntryFromProto(const protodb::Entry& proto) { |
+ Entry entry; |
+ |
+ entry.guid = proto.guid(); |
+ entry.client = DownloadClientFromProto(proto.name_space()); |
+ entry.scheduling_params = |
+ SchedulingParamsFromProto(proto.scheduling_params()); |
+ entry.request_params = RequestParamsFromProto(proto.request_params()); |
+ entry.state = RequestStateFromProto(proto.state()); |
+ |
+ return entry; |
+} |
+ |
+protodb::Entry ProtoConversions::EntryToProto(const Entry& entry) { |
+ protodb::Entry proto; |
+ |
+ proto.set_guid(entry.guid); |
+ proto.set_name_space(DownloadClientToProto(entry.client)); |
+ SchedulingParamsToProto(entry.scheduling_params, |
+ proto.mutable_scheduling_params()); |
+ RequestParamsToProto(entry.request_params, proto.mutable_request_params()); |
+ proto.set_state(RequestStateToProto(entry.state)); |
+ |
+ return proto; |
+} |
+ |
+std::unique_ptr<std::vector<Entry>> ProtoConversions::EntryVectorFromProto( |
+ std::unique_ptr<std::vector<protodb::Entry>> protos) { |
+ auto entries = base::MakeUnique<std::vector<Entry>>(); |
+ for (auto& proto : *protos) { |
+ entries->push_back(EntryFromProto(proto)); |
+ } |
+ |
+ return entries; |
+} |
+ |
+std::unique_ptr<std::vector<protodb::Entry>> |
+ProtoConversions::EntryVectorToProto( |
+ std::unique_ptr<std::vector<Entry>> entries) { |
+ auto protos = base::MakeUnique<std::vector<protodb::Entry>>(); |
+ for (auto& entry : *entries) { |
+ protos->push_back(EntryToProto(entry)); |
+ } |
+ |
+ return protos; |
+} |
+ |
+} // namespace download |