Revert "[headless] Use --disable-infobars switch in headless Chrome"
This reverts commit 70c0208350
.
Reason for revert: breaking linux-cft compile e.g. https://ci.chromium.org/ui/p/chrome/builders/ci/linux-cft/b8745477625053030737/overview
Original change's description:
> [headless] Use --disable-infobars switch in headless Chrome
>
> Disabling infobars in headless mode unconditionally has proven
> to be too aggressive. This CL changes infobars behavior in headless
> to be the same as in Chrome for Testing, which is: hide infobars
> only when --disable-infobars switch is present and only if the infobar
> has no buttons.
>
> Bug: 341947684, 333945848
> Change-Id: I8c544116d7650b3ebb7824406f328b6289494876
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5606442
> Commit-Queue: Peter Kasting <pkasting@chromium.org>
> Reviewed-by: Andrey Kosyakov <caseq@chromium.org>
> Reviewed-by: Peter Kasting <pkasting@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#1313099}
Bug: 341947684, 333945848
Change-Id: I1fe1b09896badc62c3629bf28fb7c4623ae57252
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5618571
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Darren Shen <shend@chromium.org>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Owners-Override: Darren Shen <shend@chromium.org>
Reviewed-by: Andrey Kosyakov <caseq@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1313119}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
0aa706158f
commit
72b16e51a7
chrome/browser/headless
components/infobars/core
headless
@@ -25,20 +25,17 @@
|
|||||||
#include "base/threading/thread_restrictions.h"
|
#include "base/threading/thread_restrictions.h"
|
||||||
#include "chrome/browser/headless/headless_mode_browsertest_utils.h"
|
#include "chrome/browser/headless/headless_mode_browsertest_utils.h"
|
||||||
#include "chrome/browser/headless/headless_mode_util.h"
|
#include "chrome/browser/headless/headless_mode_util.h"
|
||||||
#include "chrome/browser/infobars/confirm_infobar_creator.h"
|
|
||||||
#include "chrome/browser/process_singleton.h"
|
#include "chrome/browser/process_singleton.h"
|
||||||
#include "chrome/browser/profiles/profile.h"
|
#include "chrome/browser/profiles/profile.h"
|
||||||
#include "chrome/browser/ui/browser.h"
|
#include "chrome/browser/ui/browser.h"
|
||||||
#include "chrome/browser/ui/browser_window.h"
|
#include "chrome/browser/ui/browser_window.h"
|
||||||
|
#include "chrome/browser/ui/page_info/page_info_infobar_delegate.h"
|
||||||
#include "chrome/browser/ui/views/frame/app_menu_button.h"
|
#include "chrome/browser/ui/views/frame/app_menu_button.h"
|
||||||
#include "chrome/browser/ui/views/frame/browser_view.h"
|
#include "chrome/browser/ui/views/frame/browser_view.h"
|
||||||
#include "chrome/browser/ui/views/frame/toolbar_button_provider.h"
|
#include "chrome/browser/ui/views/frame/toolbar_button_provider.h"
|
||||||
#include "chrome/common/chrome_switches.h"
|
#include "chrome/common/chrome_switches.h"
|
||||||
#include "components/headless/clipboard/headless_clipboard.h" // nogncheck
|
#include "components/headless/clipboard/headless_clipboard.h" // nogncheck
|
||||||
#include "components/infobars/content/content_infobar_manager.h" // nogncheck
|
#include "components/infobars/content/content_infobar_manager.h" // nogncheck
|
||||||
#include "components/infobars/core/confirm_infobar_delegate.h"
|
|
||||||
#include "components/infobars/core/infobar.h"
|
|
||||||
#include "components/infobars/core/infobars_switches.h"
|
|
||||||
#include "content/public/browser/browser_context.h"
|
#include "content/public/browser/browser_context.h"
|
||||||
#include "content/public/browser/browser_task_traits.h"
|
#include "content/public/browser/browser_task_traits.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
@@ -62,6 +59,8 @@
|
|||||||
#include "ui/views/widget/widget.h"
|
#include "ui/views/widget/widget.h"
|
||||||
#include "url/gurl.h"
|
#include "url/gurl.h"
|
||||||
|
|
||||||
|
using testing::Ge;
|
||||||
|
using testing::SizeIs;
|
||||||
using views::Widget;
|
using views::Widget;
|
||||||
|
|
||||||
namespace headless {
|
namespace headless {
|
||||||
@@ -161,74 +160,17 @@ IN_PROC_BROWSER_TEST_F(HeadlessModeBrowserTest, BrowserWindowIsActive) {
|
|||||||
EXPECT_TRUE(browser()->window()->IsActive());
|
EXPECT_TRUE(browser()->window()->IsActive());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Infobar tests -------------------------------------------------------------
|
IN_PROC_BROWSER_TEST_F(HeadlessModeBrowserTest, NoInfoBarInHeadless) {
|
||||||
|
|
||||||
class TestInfoBarDelegate : public ConfirmInfoBarDelegate {
|
|
||||||
public:
|
|
||||||
TestInfoBarDelegate(const TestInfoBarDelegate&) = delete;
|
|
||||||
TestInfoBarDelegate& operator=(const TestInfoBarDelegate&) = delete;
|
|
||||||
|
|
||||||
static void Create(infobars::ContentInfoBarManager* infobar_manager,
|
|
||||||
int buttons) {
|
|
||||||
infobar_manager->AddInfoBar(
|
|
||||||
CreateConfirmInfoBar(std::unique_ptr<ConfirmInfoBarDelegate>(
|
|
||||||
new TestInfoBarDelegate(buttons))));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ConfirmInfoBarDelegate:
|
|
||||||
infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override {
|
|
||||||
return TEST_INFOBAR;
|
|
||||||
}
|
|
||||||
std::u16string GetMessageText() const override {
|
|
||||||
return buttons_ ? u"BUTTON" : u"";
|
|
||||||
}
|
|
||||||
int GetButtons() const override { return buttons_; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
explicit TestInfoBarDelegate(int buttons) : buttons_(buttons) {}
|
|
||||||
~TestInfoBarDelegate() override = default;
|
|
||||||
|
|
||||||
int buttons_;
|
|
||||||
};
|
|
||||||
|
|
||||||
class HeadlessModeInfobarBrowserTest
|
|
||||||
: public HeadlessModeBrowserTest,
|
|
||||||
public testing::WithParamInterface<bool> {
|
|
||||||
public:
|
|
||||||
HeadlessModeInfobarBrowserTest() = default;
|
|
||||||
~HeadlessModeInfobarBrowserTest() override = default;
|
|
||||||
|
|
||||||
void SetUpCommandLine(base::CommandLine* command_line) override {
|
|
||||||
HeadlessModeBrowserTest::SetUpCommandLine(command_line);
|
|
||||||
if (disable_infobars()) {
|
|
||||||
command_line->AppendSwitch(::switches::kDisableInfoBars);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool disable_infobars() const { return GetParam(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
INSTANTIATE_TEST_SUITE_P(/* no prefix */,
|
|
||||||
HeadlessModeInfobarBrowserTest,
|
|
||||||
::testing::Bool());
|
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_P(HeadlessModeInfobarBrowserTest, InfoBarsCanBeDisabled) {
|
|
||||||
content::WebContents* web_contents = GetActiveWebContents();
|
content::WebContents* web_contents = GetActiveWebContents();
|
||||||
ASSERT_TRUE(web_contents);
|
ASSERT_TRUE(web_contents);
|
||||||
|
|
||||||
infobars::ContentInfoBarManager* infobar_manager =
|
infobars::ContentInfoBarManager* infobar_manager =
|
||||||
infobars::ContentInfoBarManager::FromWebContents(web_contents);
|
infobars::ContentInfoBarManager::FromWebContents(web_contents);
|
||||||
ASSERT_TRUE(infobar_manager);
|
ASSERT_TRUE(infobar_manager);
|
||||||
ASSERT_THAT(infobar_manager->infobars(), testing::IsEmpty());
|
|
||||||
|
|
||||||
TestInfoBarDelegate::Create(infobar_manager,
|
PageInfoInfoBarDelegate::Create(infobar_manager);
|
||||||
ConfirmInfoBarDelegate::BUTTON_NONE);
|
|
||||||
TestInfoBarDelegate::Create(infobar_manager,
|
|
||||||
ConfirmInfoBarDelegate::BUTTON_OK);
|
|
||||||
|
|
||||||
// The infobar with a button should appear even if infobars are disabled.
|
EXPECT_THAT(infobar_manager->infobars(), testing::IsEmpty());
|
||||||
EXPECT_THAT(infobar_manager->infobars(),
|
|
||||||
testing::SizeIs(disable_infobars() ? 1 : 2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserAgent tests -----------------------------------------------------------
|
// UserAgent tests -----------------------------------------------------------
|
||||||
|
@@ -10,22 +10,35 @@
|
|||||||
#include "base/observer_list.h"
|
#include "base/observer_list.h"
|
||||||
#include "base/ranges/algorithm.h"
|
#include "base/ranges/algorithm.h"
|
||||||
#include "build/branding_buildflags.h"
|
#include "build/branding_buildflags.h"
|
||||||
#include "components/infobars/core/confirm_infobar_delegate.h"
|
|
||||||
#include "components/infobars/core/infobar.h"
|
#include "components/infobars/core/infobar.h"
|
||||||
#include "components/infobars/core/infobars_switches.h"
|
|
||||||
#include "ui/gfx/switches.h"
|
#include "ui/gfx/switches.h"
|
||||||
|
|
||||||
|
#if BUILDFLAG(CHROME_FOR_TESTING)
|
||||||
|
#include "components/infobars/core/confirm_infobar_delegate.h"
|
||||||
|
#include "components/infobars/core/infobars_switches.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace infobars {
|
namespace infobars {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
bool DisableInfoBars() {
|
bool ShouldEnableInfoBars() {
|
||||||
const auto* const command_line = base::CommandLine::ForCurrentProcess();
|
// In headless mode info bars are not visible and cause unexpected layout
|
||||||
// Infobars can only be disabled when Chrome is running in headless mode and
|
// changes which are often very confusing for headless users.
|
||||||
// in Chrome for Testing.
|
const base::CommandLine* command_line =
|
||||||
return command_line->HasSwitch(::switches::kDisableInfoBars) &&
|
base::CommandLine::ForCurrentProcess();
|
||||||
(BUILDFLAG(CHROME_FOR_TESTING) ||
|
if (command_line->HasSwitch(::switches::kHeadless)) {
|
||||||
command_line->HasSwitch(::switches::kHeadless));
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if BUILDFLAG(CHROME_FOR_TESTING)
|
||||||
|
// Chrome for Testing users are allowed to disable info bars with a switch.
|
||||||
|
if (command_line->HasSwitch(switches::kDisableInfoBars)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
@@ -123,7 +136,7 @@ void InfoBarManager::RemoveObserver(Observer* obs) {
|
|||||||
observer_list_.RemoveObserver(obs);
|
observer_list_.RemoveObserver(obs);
|
||||||
}
|
}
|
||||||
|
|
||||||
InfoBarManager::InfoBarManager() : infobars_enabled_(!DisableInfoBars()) {}
|
InfoBarManager::InfoBarManager() : infobars_enabled_(ShouldEnableInfoBars()) {}
|
||||||
|
|
||||||
InfoBarManager::~InfoBarManager() = default;
|
InfoBarManager::~InfoBarManager() = default;
|
||||||
|
|
||||||
@@ -175,12 +188,19 @@ bool InfoBarManager::ShouldShowInfoBar(const InfoBar* infobar) const {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only buttonless infobars should be disabled. The ones with buttons are
|
// Chrome for Testing can hide infobars that do not require confirmation using
|
||||||
// semantically message boxes and must be shown because certain functionality
|
// --disable-infobars command line switch.
|
||||||
// depends on them, see crbug.com/333945848 and crbug.com/341947684.
|
#if BUILDFLAG(CHROME_FOR_TESTING)
|
||||||
const auto* const delegate = infobar->delegate()->AsConfirmInfoBarDelegate();
|
ConfirmInfoBarDelegate* delegate =
|
||||||
return delegate &&
|
infobar->delegate()->AsConfirmInfoBarDelegate();
|
||||||
delegate->GetButtons() != ConfirmInfoBarDelegate::BUTTON_NONE;
|
if (delegate &&
|
||||||
|
delegate->GetButtons() != ConfirmInfoBarDelegate::BUTTON_NONE) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Headless mode and non confirmational Chrome for Testing are not shown.
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace infobars
|
} // namespace infobars
|
||||||
|
@@ -690,8 +690,6 @@ test("headless_browsertests") {
|
|||||||
"//components/embedder_support:embedder_support",
|
"//components/embedder_support:embedder_support",
|
||||||
"//components/headless/select_file_dialog",
|
"//components/headless/select_file_dialog",
|
||||||
"//components/headless/test",
|
"//components/headless/test",
|
||||||
"//components/infobars/content",
|
|
||||||
"//components/infobars/core",
|
|
||||||
"//components/policy/core/browser",
|
"//components/policy/core/browser",
|
||||||
"//components/security_state/content",
|
"//components/security_state/content",
|
||||||
"//components/version_info",
|
"//components/version_info",
|
||||||
|
@@ -18,8 +18,6 @@ include_rules = [
|
|||||||
]
|
]
|
||||||
specific_include_rules = {
|
specific_include_rules = {
|
||||||
"headless_browser_browsertest.*": [
|
"headless_browser_browsertest.*": [
|
||||||
"+components/infobars/core",
|
|
||||||
"+components/infobars/content",
|
|
||||||
"+storage/browser",
|
"+storage/browser",
|
||||||
"+ui/shell_dialogs",
|
"+ui/shell_dialogs",
|
||||||
],
|
],
|
||||||
|
@@ -2,8 +2,6 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
#include "headless/public/headless_browser.h"
|
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
@@ -22,10 +20,6 @@
|
|||||||
#include "build/build_config.h"
|
#include "build/build_config.h"
|
||||||
#include "components/devtools/simple_devtools_protocol_client/simple_devtools_protocol_client.h"
|
#include "components/devtools/simple_devtools_protocol_client/simple_devtools_protocol_client.h"
|
||||||
#include "components/headless/select_file_dialog/headless_select_file_dialog.h"
|
#include "components/headless/select_file_dialog/headless_select_file_dialog.h"
|
||||||
#include "components/infobars/content/content_infobar_manager.h"
|
|
||||||
#include "components/infobars/core/confirm_infobar_delegate.h"
|
|
||||||
#include "components/infobars/core/infobar.h"
|
|
||||||
#include "components/infobars/core/infobars_switches.h"
|
|
||||||
#include "content/public/browser/navigation_controller.h"
|
#include "content/public/browser/navigation_controller.h"
|
||||||
#include "content/public/browser/navigation_entry.h"
|
#include "content/public/browser/navigation_entry.h"
|
||||||
#include "content/public/browser/permission_controller_delegate.h"
|
#include "content/public/browser/permission_controller_delegate.h"
|
||||||
@@ -39,6 +33,7 @@
|
|||||||
#include "headless/lib/browser/headless_browser_context_impl.h"
|
#include "headless/lib/browser/headless_browser_context_impl.h"
|
||||||
#include "headless/lib/browser/headless_browser_impl.h"
|
#include "headless/lib/browser/headless_browser_impl.h"
|
||||||
#include "headless/lib/browser/headless_web_contents_impl.h"
|
#include "headless/lib/browser/headless_web_contents_impl.h"
|
||||||
|
#include "headless/public/headless_browser.h"
|
||||||
#include "headless/public/headless_web_contents.h"
|
#include "headless/public/headless_web_contents.h"
|
||||||
#include "headless/public/switches.h"
|
#include "headless/public/switches.h"
|
||||||
#include "headless/test/headless_browser_test.h"
|
#include "headless/test/headless_browser_test.h"
|
||||||
@@ -76,8 +71,6 @@ using testing::UnorderedElementsAre;
|
|||||||
|
|
||||||
namespace headless {
|
namespace headless {
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, CreateAndDestroyBrowserContext) {
|
IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, CreateAndDestroyBrowserContext) {
|
||||||
HeadlessBrowserContext* browser_context =
|
HeadlessBrowserContext* browser_context =
|
||||||
browser()->CreateBrowserContextBuilder().Build();
|
browser()->CreateBrowserContextBuilder().Build();
|
||||||
@@ -884,82 +877,4 @@ IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, DISABLED_NetworkServiceCrash) {
|
|||||||
} while (wc->GetController().GetLastCommittedEntry()->GetURL() != new_url);
|
} while (wc->GetController().GetLastCommittedEntry()->GetURL() != new_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Infobar tests -------------------------------------------------------------
|
|
||||||
|
|
||||||
class TestInfoBarDelegate : public ConfirmInfoBarDelegate {
|
|
||||||
public:
|
|
||||||
explicit TestInfoBarDelegate(int buttons) : buttons_(buttons) {}
|
|
||||||
|
|
||||||
TestInfoBarDelegate(const TestInfoBarDelegate&) = delete;
|
|
||||||
TestInfoBarDelegate& operator=(const TestInfoBarDelegate&) = delete;
|
|
||||||
|
|
||||||
~TestInfoBarDelegate() override = default;
|
|
||||||
|
|
||||||
static void Create(infobars::ContentInfoBarManager* infobar_manager,
|
|
||||||
int buttons) {
|
|
||||||
infobar_manager->AddInfoBar(std::make_unique<infobars::InfoBar>(
|
|
||||||
std::make_unique<TestInfoBarDelegate>(buttons)));
|
|
||||||
}
|
|
||||||
|
|
||||||
// ConfirmInfoBarDelegate:
|
|
||||||
infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override {
|
|
||||||
return TEST_INFOBAR;
|
|
||||||
}
|
|
||||||
std::u16string GetMessageText() const override {
|
|
||||||
return buttons_ ? u"BUTTON" : u"";
|
|
||||||
}
|
|
||||||
int GetButtons() const override { return buttons_; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
int buttons_;
|
|
||||||
};
|
|
||||||
|
|
||||||
class HeadlessInfobarBrowserTest : public HeadlessBrowserTest,
|
|
||||||
public testing::WithParamInterface<bool> {
|
|
||||||
public:
|
|
||||||
HeadlessInfobarBrowserTest() = default;
|
|
||||||
~HeadlessInfobarBrowserTest() override = default;
|
|
||||||
|
|
||||||
void SetUpCommandLine(base::CommandLine* command_line) override {
|
|
||||||
HeadlessBrowserTest::SetUpCommandLine(command_line);
|
|
||||||
if (disable_infobars()) {
|
|
||||||
command_line->AppendSwitch(::switches::kDisableInfoBars);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool disable_infobars() const { return GetParam(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
INSTANTIATE_TEST_SUITE_P(/* no prefix */,
|
|
||||||
HeadlessInfobarBrowserTest,
|
|
||||||
::testing::Bool());
|
|
||||||
|
|
||||||
IN_PROC_BROWSER_TEST_P(HeadlessInfobarBrowserTest, InfoBarsCanBeDisabled) {
|
|
||||||
HeadlessBrowserContext* browser_context =
|
|
||||||
browser()->CreateBrowserContextBuilder().Build();
|
|
||||||
|
|
||||||
HeadlessWebContents* headless_web_contents =
|
|
||||||
browser_context->CreateWebContentsBuilder().Build();
|
|
||||||
ASSERT_TRUE(WaitForLoad(headless_web_contents));
|
|
||||||
|
|
||||||
content::WebContents* web_contents =
|
|
||||||
HeadlessWebContentsImpl::From(headless_web_contents)->web_contents();
|
|
||||||
ASSERT_TRUE(web_contents);
|
|
||||||
|
|
||||||
auto infobar_manager =
|
|
||||||
std::make_unique<infobars::ContentInfoBarManager>(web_contents);
|
|
||||||
ASSERT_THAT(infobar_manager->infobars(), testing::IsEmpty());
|
|
||||||
|
|
||||||
TestInfoBarDelegate::Create(infobar_manager.get(),
|
|
||||||
ConfirmInfoBarDelegate::BUTTON_NONE);
|
|
||||||
TestInfoBarDelegate::Create(infobar_manager.get(),
|
|
||||||
ConfirmInfoBarDelegate::BUTTON_OK);
|
|
||||||
|
|
||||||
// The infobar with a button should appear even if infobars are disabled.
|
|
||||||
EXPECT_THAT(infobar_manager->infobars(),
|
|
||||||
testing::SizeIs(disable_infobars() ? 1 : 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
} // namespace headless
|
} // namespace headless
|
||||||
|
Reference in New Issue
Block a user