|  | // Copyright 2023 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef IOS_CHROME_BROWSER_UNIT_CONVERSION_MODEL_UNIT_CONVERSION_SERVICE_H_ | 
|  | #define IOS_CHROME_BROWSER_UNIT_CONVERSION_MODEL_UNIT_CONVERSION_SERVICE_H_ | 
|  |  | 
|  | #import <Foundation/Foundation.h> | 
|  |  | 
|  | #import "components/keyed_service/core/keyed_service.h" | 
|  |  | 
|  | // An observable KeyedService which tracks the changes of target unit which | 
|  | // implies changes in the default conversion | 
|  | class UnitConversionService : public KeyedService { | 
|  | public: | 
|  | // Updates the `default_conversion_cache_` with the `source_unit` as the key | 
|  | // and `target_unit` as its value. | 
|  | void UpdateDefaultConversionCache(NSUnit* source_unit, NSUnit* target_unit); | 
|  |  | 
|  | // Returns the default target unit for a given source unit from | 
|  | // `default_conversion_cache_`, if the source unit is not present in the | 
|  | // dictionary the value returned is computed from the | 
|  | // `unit_conversion_provider`. | 
|  | NSUnit* GetDefaultTargetFromUnit(NSUnit* unit); | 
|  |  | 
|  | private: | 
|  | // A cache to store the changes made to the target unit from a source unit, | 
|  | // the key represent a source unit and the value the new target unit. | 
|  | NSMutableDictionary* default_conversion_cache_ = | 
|  | [[NSMutableDictionary alloc] init]; | 
|  | }; | 
|  |  | 
|  | #endif  // IOS_CHROME_BROWSER_UNIT_CONVERSION_MODEL_UNIT_CONVERSION_SERVICE_H_ |