1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
// Copyright 2019 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/ui/test/test_infobar.h"
#include <algorithm>
#include <iterator>
#include "chrome/browser/infobars/test_support/infobar_observer.h"
#include "chrome/browser/ui/browser.h"
#include "components/infobars/content/content_infobar_manager.h"
#include "components/infobars/core/infobar.h"
TestInfoBar::TestInfoBar() = default;
TestInfoBar::~TestInfoBar() = default;
void TestInfoBar::PreShow() {
starting_infobars_ = GetNewInfoBars().value();
}
bool TestInfoBar::VerifyUi() {
auto infobars = GetNewInfoBars();
if (!infobars || infobars->empty()) {
return false;
}
return std::ranges::equal(*infobars, expected_identifiers_, {},
&infobars::InfoBar::GetIdentifier);
}
void TestInfoBar::WaitForUserDismissal() {
while (!GetNewInfoBars().value_or(InfoBars()).empty()) {
InfoBarObserver observer(GetInfoBarManager(),
InfoBarObserver::Type::kInfoBarRemoved);
observer.Wait();
}
}
void TestInfoBar::AddExpectedInfoBar(
infobars::InfoBarDelegate::InfoBarIdentifier identifier) {
expected_identifiers_.push_back(identifier);
}
content::WebContents* TestInfoBar::GetWebContents() {
return browser()->tab_strip_model()->GetActiveWebContents();
}
const content::WebContents* TestInfoBar::GetWebContents() const {
return browser()->tab_strip_model()->GetActiveWebContents();
}
infobars::ContentInfoBarManager* TestInfoBar::GetInfoBarManager() {
return const_cast<infobars::ContentInfoBarManager*>(
static_cast<const TestInfoBar*>(this)->GetInfoBarManager());
}
const infobars::ContentInfoBarManager* TestInfoBar::GetInfoBarManager() const {
// There may be no web contents if the browser window is closing.
const content::WebContents* web_contents = GetWebContents();
return web_contents
? infobars::ContentInfoBarManager::FromWebContents(web_contents)
: nullptr;
}
std::optional<TestInfoBar::InfoBars> TestInfoBar::GetNewInfoBars() const {
const infobars::ContentInfoBarManager* infobar_manager = GetInfoBarManager();
if (!infobar_manager) {
return std::nullopt;
}
const auto& infobars = infobar_manager->infobars();
if ((infobars.size() < starting_infobars_.size()) ||
!std::equal(starting_infobars_.begin(), starting_infobars_.end(),
infobars.begin())) {
return std::nullopt;
}
return InfoBars(std::next(infobars.begin(), starting_infobars_.size()),
infobars.end());
}
|