// 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_BROWSER_INFOBARS_INFOBAR_CONTROLLER_H_
#define IOS_CHROME_BROWSER_INFOBARS_INFOBAR_CONTROLLER_H_

#import <UIKit/UIKit.h>

@protocol InfoBarViewProtocol;
class InfoBarViewDelegate;
namespace infobars {
class InfoBarDelegate;
}

// InfoBar for iOS acts as a UIViewController for InfoBarView.
@interface InfoBarController : NSObject

@property(nonatomic, readonly) InfoBarViewDelegate* delegate;
// Designated initializer.
- (instancetype)initWithDelegate:(InfoBarViewDelegate*)delegate
    NS_DESIGNATED_INITIALIZER;

- (instancetype)init NS_UNAVAILABLE;

// Creates a view and lays out all the infobar elements in it. Will not add
// it as a subview yet. This method must be overriden in subclasses.
- (UIView<InfoBarViewProtocol>*)viewForDelegate:
                                    (infobars::InfoBarDelegate*)delegate
                                          frame:(CGRect)bounds;

// Creates the view.
- (void)layoutForDelegate:(infobars::InfoBarDelegate*)delegate
                    frame:(CGRect)bounds;

// Detaches view from its delegate.
// After this function is called, no user interaction can be handled.
- (void)detachView;

// Returns the actual height in pixels of this infobar instance.
- (int)barHeight;

// Adjusts visible portion of this infobar.
- (void)onHeightsRecalculated:(int)newHeight;

// Removes the view.
- (void)removeView;

// Accesses the view.
- (UIView<InfoBarViewProtocol>*)view;

@end

#endif  // IOS_CHROME_BROWSER_INFOBARS_INFOBAR_CONTROLLER_H_
