// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_INFOBARS_CORE_INFOBAR_H_ #define COMPONENTS_INFOBARS_CORE_INFOBAR_H_ #include <memory> #include <utility> #include "base/memory/raw_ptr.h" #include "components/infobars/core/infobar_delegate.h" #include "ui/gfx/animation/animation_delegate_notifier.h" #include "ui/gfx/animation/slide_animation.h" #include "ui/gfx/geometry/size.h" namespace infobars { class InfoBarContainer; class InfoBarManager; // InfoBar is a cross-platform base class for an infobar "view" (in the MVC // sense), which owns a corresponding InfoBarDelegate "model". Typically, // a caller will call XYZInfoBarDelegate::Create() and pass in the // InfoBarManager for the relevant tab. This will create an XYZInfoBarDelegate, // create a platform-specific subclass of InfoBar to own it, and then call // InfoBarManager::AddInfoBar() to give it ownership of the infobar. // During its life, the InfoBar may be shown and hidden as the owning tab is // switched between the foreground and background. Eventually, InfoBarManager // will instruct the InfoBar to close itself. At this point, the InfoBar will // optionally animate closed; once it's no longer visible, it deletes itself, // destroying the InfoBarDelegate in the process. // // Thus, InfoBarDelegate and InfoBar implementations can assume they share // lifetimes, and not NULL-check each other; but if one needs to reach back into // the owning InfoBarManager, it must check whether that's still possible. class InfoBar : public gfx::AnimationDelegate { … }; } // namespace infobars #endif // COMPONENTS_INFOBARS_CORE_INFOBAR_H_