// Copyright 2012 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_APP_DEFERRED_INITIALIZATION_RUNNER_H_ #define IOS_CHROME_APP_DEFERRED_INITIALIZATION_RUNNER_H_ #import #include "base/ios/block_types.h" // A singleton object to run initialization code asynchronously. Blocks are // scheduled to be run after a delay. The block is named when added to the // singleton so that other code can force a deferred block to be run // synchronously if necessary. @interface DeferredInitializationRunner : NSObject // Returns singleton instance. + (DeferredInitializationRunner*)sharedInstance; // Schedules |block| to be run after |delaySeconds| on the current queue. // This |block| is stored as |name| so code can force this initialization to // be run synchronously if necessary. This method may be called more than // once with the same |name| parameter. Any block with the same |name| // cancels a previously scheduled block of the same |name| if the block has // not been run yet. - (void)runBlockNamed:(NSString*)name after:(NSTimeInterval)delaySeconds block:(ProceduralBlock)block; // Looks up a previously scheduled block of |name|. If block has not been // run yet, run it synchronously now. - (void)runBlockIfNecessary:(NSString*)name; // Cancels a previously scheduled block of |name|. This is a no-op if the // block has already been executed. - (void)cancelBlockNamed:(NSString*)name; // Number of blocks that have been registered but not executed yet. // Exposed for testing. @property(nonatomic, readonly) NSUInteger numberOfBlocksRemaining; @end #endif // IOS_CHROME_APP_DEFERRED_INITIALIZATION_RUNNER_H_