// Copyright (c) 2011 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 CHROME_BROWSER_UI_COCOA_INFOBARS_INFOBAR_H_
#define CHROME_BROWSER_UI_COCOA_INFOBARS_INFOBAR_H_
#pragma once

#include "base/logging.h"  // for DCHECK

@class InfoBarController;

// A C++ wrapper around an Objective-C InfoBarController.  This class
// exists solely to be the return value for InfoBarDelegate::CreateInfoBar(),
// as defined in chrome/browser/tab_contents/confirm_infobar_delegate.h.  This
// class would be analogous to the various bridge classes we already
// have, but since there is no pre-defined InfoBar interface, it is
// easier to simply throw away this object and deal with the
// controller directly rather than pass messages through a bridge.
//
// Callers should delete the returned InfoBar immediately after
// calling CreateInfoBar(), as the returned InfoBar* object is not
// pointed to by anyone.  Expected usage:
//
// scoped_ptr<InfoBar> infobar(delegate->CreateInfoBar());
// InfoBarController* controller = infobar->controller();
// // Do something with the controller, and save a pointer so it can be
// // deleted later.  |infobar| will be deleted automatically.

class InfoBar {
 public:
  InfoBar(InfoBarController* controller) {
    DCHECK(controller);
    controller_ = controller;
  }

  InfoBarController* controller() {
    return controller_;
  }

 private:
  // Pointer to the infobar controller.  Is never null.
  InfoBarController* controller_;  // weak

  DISALLOW_COPY_AND_ASSIGN(InfoBar);
};

#endif  // CHROME_BROWSER_UI_COCOA_INFOBARS_INFOBAR_H_