1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#ifndef CHROME_BROWSER_UI_COCOA_INFOBARS_INFOBAR_H_
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_UI_COCOA_INFOBARS_INFOBAR_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h"  // for DCHECK
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch@class InfoBarController;
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A C++ wrapper around an Objective-C InfoBarController.  This class
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// exists solely to be the return value for InfoBarDelegate::CreateInfoBar(),
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// as defined in chrome/browser/tab_contents/confirm_infobar_delegate.h.  This
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// class would be analogous to the various bridge classes we already
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// have, but since there is no pre-defined InfoBar interface, it is
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// easier to simply throw away this object and deal with the
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// controller directly rather than pass messages through a bridge.
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Callers should delete the returned InfoBar immediately after
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// calling CreateInfoBar(), as the returned InfoBar* object is not
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// pointed to by anyone.  Expected usage:
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// scoped_ptr<InfoBar> infobar(delegate->CreateInfoBar());
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// InfoBarController* controller = infobar->controller();
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // Do something with the controller, and save a pointer so it can be
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // deleted later.  |infobar| will be deleted automatically.
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InfoBar {
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  InfoBar(InfoBarController* controller) {
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    DCHECK(controller);
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    controller_ = controller;
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  InfoBarController* controller() {
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return controller_;
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Pointer to the infobar controller.  Is never null.
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  InfoBarController* controller_;  // weak
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(InfoBar);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif  // CHROME_BROWSER_UI_COCOA_INFOBARS_INFOBAR_H_
49