Home | History | Annotate | Download | only in update_manager
      1 //
      2 // Copyright (C) 2014 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 #include "update_engine/update_manager/real_time_provider.h"
     18 
     19 #include <string>
     20 
     21 #include <base/time/time.h>
     22 
     23 #include "update_engine/common/clock_interface.h"
     24 
     25 using base::Time;
     26 using base::TimeDelta;
     27 using chromeos_update_engine::ClockInterface;
     28 using std::string;
     29 
     30 namespace chromeos_update_manager {
     31 
     32 // A variable returning the current date.
     33 class CurrDateVariable : public Variable<Time> {
     34  public:
     35   // TODO(garnold) Turn this into an async variable with the needed callback
     36   // logic for when it value changes.
     37   CurrDateVariable(const string& name, ClockInterface* clock)
     38       : Variable<Time>(name, TimeDelta::FromHours(1)), clock_(clock) {}
     39 
     40  protected:
     41   virtual const Time* GetValue(TimeDelta /* timeout */,
     42                                string* /* errmsg */) {
     43     Time::Exploded now_exp;
     44     clock_->GetWallclockTime().LocalExplode(&now_exp);
     45     now_exp.hour = now_exp.minute = now_exp.second = now_exp.millisecond = 0;
     46     return new Time(Time::FromLocalExploded(now_exp));
     47   }
     48 
     49  private:
     50   ClockInterface* clock_;
     51 
     52   DISALLOW_COPY_AND_ASSIGN(CurrDateVariable);
     53 };
     54 
     55 // A variable returning the current hour in local time.
     56 class CurrHourVariable : public Variable<int> {
     57  public:
     58   // TODO(garnold) Turn this into an async variable with the needed callback
     59   // logic for when it value changes.
     60   CurrHourVariable(const string& name, ClockInterface* clock)
     61       : Variable<int>(name, TimeDelta::FromMinutes(5)), clock_(clock) {}
     62 
     63  protected:
     64   virtual const int* GetValue(TimeDelta /* timeout */,
     65                               string* /* errmsg */) {
     66     Time::Exploded exploded;
     67     clock_->GetWallclockTime().LocalExplode(&exploded);
     68     return new int(exploded.hour);
     69   }
     70 
     71  private:
     72   ClockInterface* clock_;
     73 
     74   DISALLOW_COPY_AND_ASSIGN(CurrHourVariable);
     75 };
     76 
     77 bool RealTimeProvider::Init() {
     78   var_curr_date_.reset(new CurrDateVariable("curr_date", clock_));
     79   var_curr_hour_.reset(new CurrHourVariable("curr_hour", clock_));
     80   return true;
     81 }
     82 
     83 }  // namespace chromeos_update_manager
     84