| // Copyright 2014 The Chromium OS Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef BUFFET_STATES_STATE_CHANGE_QUEUE_INTERFACE_H_ | 
 | #define BUFFET_STATES_STATE_CHANGE_QUEUE_INTERFACE_H_ | 
 |  | 
 | #include <vector> | 
 |  | 
 | #include <base/time/time.h> | 
 | #include <chromeos/variant_dictionary.h> | 
 |  | 
 | namespace buffet { | 
 |  | 
 | // A simple notification record event to track device state changes. | 
 | // The |timestamp| records the time of the state change. | 
 | // |changed_properties| contains a property set with the new property values | 
 | // which were updated at the time the event was recorded. | 
 | struct StateChange { | 
 |   StateChange(base::Time time, | 
 |               chromeos::VariantDictionary properties) | 
 |     : timestamp(time), changed_properties(std::move(properties)) {} | 
 |   base::Time timestamp; | 
 |   chromeos::VariantDictionary changed_properties; | 
 | }; | 
 |  | 
 | // An abstract interface to StateChangeQueue to record and retrieve state | 
 | // change notification events. | 
 | class StateChangeQueueInterface { | 
 |  public: | 
 |   // Returns true if the state change notification queue is empty. | 
 |   virtual bool IsEmpty() const = 0; | 
 |  | 
 |   // Called by StateManager when device state properties are updated. | 
 |   virtual bool NotifyPropertiesUpdated( | 
 |       base::Time timestamp, | 
 |       chromeos::VariantDictionary changed_properties) = 0; | 
 |  | 
 |   // Returns the recorded state changes since last time this method was called. | 
 |   virtual std::vector<StateChange> GetAndClearRecordedStateChanges() = 0; | 
 |  | 
 |  protected: | 
 |   // No one should attempt do destroy the queue through the interface. | 
 |   ~StateChangeQueueInterface() {} | 
 | }; | 
 |  | 
 | }  // namespace buffet | 
 |  | 
 | #endif  // BUFFET_STATES_STATE_CHANGE_QUEUE_INTERFACE_H_ |