// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include "chrome/browser/content_settings/cookie_settings_factory.h" #include "chrome/browser/infobars/infobar_service.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/views/collected_cookies_views.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "components/content_settings/core/browser/cookie_settings.h" #include "net/test/embedded_test_server/embedded_test_server.h" class CollectedCookiesViewsTest : public InProcessBrowserTest { public: void SetUpOnMainThread() override { ASSERT_TRUE(embedded_test_server()->Start()); // Disable cookies. CookieSettingsFactory::GetForProfile(browser()->profile()) ->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); // Load a page with cookies. ui_test_utils::NavigateToURL( browser(), embedded_test_server()->GetURL("/cookie1.html")); // Spawn a cookies dialog. Note that |cookies_dialog_| will delete itself // automatically when it closes. cookies_dialog_ = new CollectedCookiesViews( browser()->tab_strip_model()->GetActiveWebContents()); } // Closing dialog with modified data will shows infobar. void SetDialogChanged() { cookies_dialog_->status_changed_ = true; } void CloseCookiesDialog() { cookies_dialog_->Close(); } size_t infobar_count() const { content::WebContents* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); return web_contents ? InfoBarService::FromWebContents(web_contents)->infobar_count() : 0; } private: CollectedCookiesViews* cookies_dialog_ = nullptr; }; IN_PROC_BROWSER_TEST_F(CollectedCookiesViewsTest, CloseDialog) { // Test closing dialog without changing data. CloseCookiesDialog(); EXPECT_EQ(0u, infobar_count()); } IN_PROC_BROWSER_TEST_F(CollectedCookiesViewsTest, ChangeAndCloseDialog) { // Test closing dialog with changing data. Dialog will show infobar. SetDialogChanged(); CloseCookiesDialog(); EXPECT_EQ(1u, infobar_count()); } IN_PROC_BROWSER_TEST_F(CollectedCookiesViewsTest, ChangeAndNavigateAway) { // Test navigation after changing dialog data. Changed dialog should not show // infobar or crash because InfoBarService is gone. SetDialogChanged(); // Navigation in the owning tab will close dialog. ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL("/cookie2.html")); EXPECT_EQ(0u, infobar_count()); } IN_PROC_BROWSER_TEST_F(CollectedCookiesViewsTest, ChangeAndCloseTab) { // Test closing tab after changing dialog data. Changed dialog should not // show infobar or crash because InfoBarService is gone. SetDialogChanged(); // Closing the owning tab will close dialog. browser()->tab_strip_model()->GetActiveWebContents()->Close(); EXPECT_EQ(0u, infobar_count()); }