| // 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/assist_ranker/ranker_model.h" |
| |
| #include <memory> |
| |
| #include "base/time/time.h" |
| #include "components/assist_ranker/proto/ranker_model.pb.h" |
| |
| namespace assist_ranker { |
| |
| RankerModel::RankerModel() : proto_(std::make_unique<RankerModelProto>()) {} |
| |
| RankerModel::~RankerModel() {} |
| |
| // static |
| std::unique_ptr<RankerModel> RankerModel::FromString(const std::string& data) { |
| auto model = std::make_unique<RankerModel>(); |
| if (!model->mutable_proto()->ParseFromString(data)) |
| return nullptr; |
| return model; |
| } |
| |
| bool RankerModel::IsExpired() const { |
| if (!proto().has_metadata()) |
| return true; |
| |
| const auto& metadata = proto().metadata(); |
| |
| // If the age of the model cannot be determined, presume it to be expired. |
| if (!metadata.has_last_modified_sec()) |
| return true; |
| |
| // If the model has no set cache duration, then it never expires. |
| if (!metadata.has_cache_duration_sec() || metadata.cache_duration_sec() == 0) |
| return false; |
| |
| // Otherwise, a model is expired if its age exceeds the cache duration. |
| base::Time last_modified = |
| base::Time() + base::TimeDelta::FromSeconds(metadata.last_modified_sec()); |
| base::TimeDelta age = base::Time::Now() - last_modified; |
| return age > base::TimeDelta::FromSeconds(metadata.cache_duration_sec()); |
| } |
| |
| const std::string& RankerModel::GetSourceURL() const { |
| return proto_->metadata().source(); |
| } |
| |
| std::string RankerModel::SerializeAsString() const { |
| return proto_->SerializeAsString(); |
| } |
| |
| } // namespace assist_ranker |