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