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     Time* now = new Time();
     47     bool success = Time::FromLocalExploded(now_exp, now);
     48     DCHECK(success);
     49     return now;
     50   }
     51 
     52  private:
     53   ClockInterface* clock_;
     54 
     55   DISALLOW_COPY_AND_ASSIGN(CurrDateVariable);
     56 };
     57 
     58 // A variable returning the current hour in local time.
     59 class CurrHourVariable : public Variable<int> {
     60  public:
     61   // TODO(garnold) Turn this into an async variable with the needed callback
     62   // logic for when it value changes.
     63   CurrHourVariable(const string& name, ClockInterface* clock)
     64       : Variable<int>(name, TimeDelta::FromMinutes(5)), clock_(clock) {}
     65 
     66  protected:
     67   virtual const int* GetValue(TimeDelta /* timeout */,
     68                               string* /* errmsg */) {
     69     Time::Exploded exploded;
     70     clock_->GetWallclockTime().LocalExplode(&exploded);
     71     return new int(exploded.hour);
     72   }
     73 
     74  private:
     75   ClockInterface* clock_;
     76 
     77   DISALLOW_COPY_AND_ASSIGN(CurrHourVariable);
     78 };
     79 
     80 bool RealTimeProvider::Init() {
     81   var_curr_date_.reset(new CurrDateVariable("curr_date", clock_));
     82   var_curr_hour_.reset(new CurrHourVariable("curr_hour", clock_));
     83   return true;
     84 }
     85 
     86 }  // namespace chromeos_update_manager
     87