blob: c889495cd579ecc30945cdb26648fdc28473f454 [file] [log] [blame]
// Copyright 2013 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.
#ifndef IOS_CHROME_BROWSER_UPDATABLE_CONFIG_UPDATABLE_CONFIG_BASE_H_
#define IOS_CHROME_BROWSER_UPDATABLE_CONFIG_UPDATABLE_CONFIG_BASE_H_
#import <Foundation/Foundation.h>
namespace net {
class URLRequestContextGetter;
} // namespace net
@protocol UpdatableResourceBridge;
// Abstract base class for configurations bundled in a .plist file in
// application bundle. Configuration is periodically updated by pulling
// in a new configuration file from gstatic.com.
// DO NOT use this class directly, but instantiate either UpdatableArray
// or UpdatableDictionary class instead.
// |startUpdate:| must be called for every subclass.
@interface UpdatableConfigBase : NSObject
// Initializes a new Updatable Config object using .plist file named |plistName|
// which is in the application bundle. |appId| and |appVersion| are used to
// derive the URL to update this plist from gstatic.com.
// If |appId| is nil, a default value based on the application id from the
// application bundle will be provided.
// If |appVersion| is nil, a default value based on the application version
// number from the application bundle will be provided.
- (instancetype)initWithAppId:(NSString*)appId
version:(NSString*)appVersion
plist:(NSString*)plistName;
// Starts periodic checks with server for updated version of
// configuration plists
- (void)startUpdate:(net::URLRequestContextGetter*)requestContextGetter;
// Prevents any future update checks, and releases requestContextGetter. Should
// be called if the app is going to terminate.
- (void)stopUpdateChecks;
// Performs any post-update operations for the updated data to take effect.
- (void)resourceDidUpdate:(NSNotification*)notification;
// Subclasses must override this method to return a UpdatableResourceBridge
// object. The returned object determines whether the resource stored in the
// file |resourceName| is of plist, json, or some other data file format.
- (id<UpdatableResourceBridge>)newResource:(NSString*)resourceName;
// Returns the internal resources object. This accessor is intended for
// use by subclasses of this class and for unit testing only.
// Note that this is really a readonly property for subclasses, but for
// unit testing, the ability to set the resource is also needed.
@property(nonatomic, retain) id<UpdatableResourceBridge> updatableResource;
// Consistency check defaults to NO and is enabled only by Chrome application,
// not unit or kif tests.
+ (void)enableConsistencyCheck;
@end
#endif // IOS_CHROME_BROWSER_UPDATABLE_CONFIG_UPDATABLE_CONFIG_BASE_H_