[go: nahoru, domu]

blob: 016235e1a926cdf4ca1b0b47f084e79c8855a838 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/infobars/infobar_observer.h"
InfoBarObserver::InfoBarObserver(infobars::InfoBarManager* manager, Type type)
: type_(type) {
// There may be no |manager| if the browser window is currently closing.
if (manager)
infobar_observation_.Observe(manager);
}
InfoBarObserver::~InfoBarObserver() {}
void InfoBarObserver::Wait() {
// When there is no manager being observed, there is nothing to wait on, so
// return immediately.
if (infobar_observation_.IsObserving())
run_loop_.Run();
}
void InfoBarObserver::OnInfoBarAdded(infobars::InfoBar* infobar) {
OnNotified(Type::kInfoBarAdded);
}
void InfoBarObserver::OnInfoBarRemoved(infobars::InfoBar* infobar,
bool animate) {
OnNotified(Type::kInfoBarRemoved);
}
void InfoBarObserver::OnInfoBarReplaced(infobars::InfoBar* old_infobar,
infobars::InfoBar* new_infobar) {
OnNotified(Type::kInfoBarReplaced);
}
void InfoBarObserver::OnManagerShuttingDown(infobars::InfoBarManager* manager) {
if (run_loop_.running())
run_loop_.Quit();
DCHECK(infobar_observation_.IsObservingSource(manager));
infobar_observation_.Reset();
}
void InfoBarObserver::OnNotified(Type type) {
if (type == type_)
run_loop_.Quit();
}