Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(468)

Unified Diff: chrome/browser/popup_blocker_browsertest.cc

Issue 10913043: Convert the popups pyauto test to browser_tests. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix cros Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/policy/policy_browsertest.cc ('k') | chrome/test/base/ui_test_utils.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/popup_blocker_browsertest.cc
===================================================================
--- chrome/browser/popup_blocker_browsertest.cc (revision 154448)
+++ chrome/browser/popup_blocker_browsertest.cc (working copy)
@@ -7,15 +7,30 @@
#include "base/file_util.h"
#include "base/message_loop.h"
#include "base/path_service.h"
+#include "chrome/browser/autocomplete/autocomplete_match.h"
+#include "chrome/browser/autocomplete/autocomplete_result.h"
+#include "chrome/browser/content_settings/host_content_settings_map.h"
+#include "chrome/browser/content_settings/tab_specific_content_settings.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/omnibox/location_bar.h"
+#include "chrome/browser/ui/omnibox/omnibox_edit_model.h"
+#include "chrome/browser/ui/omnibox/omnibox_view.h"
+#include "chrome/browser/ui/tab_contents/tab_contents.h"
+#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_paths.h"
+#include "chrome/common/chrome_switches.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/common/url_constants.h"
+#include "content/public/test/browser_test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
using content::WebContents;
@@ -24,22 +39,136 @@
static const FilePath::CharType* kTestDir = FILE_PATH_LITERAL("popup_blocker");
-typedef InProcessBrowserTest PopupBlockerBrowserTest;
+class PopupBlockerBrowserTest : public InProcessBrowserTest {
+ public:
+ PopupBlockerBrowserTest() {}
+ // Returns a url that shows one popup.
+ GURL GetTestURL() {
+ return ui_test_utils::GetTestUrl(
+ FilePath(kTestDir),
+ FilePath(FILE_PATH_LITERAL("popup-blocked-to-post-blank.html")));
+ }
+
+ std::vector<TabContents*> GetBlockedContents(Browser* browser) {
+ // Do a round trip to the renderer first to flush any in-flight IPCs to
+ // create a to-be-blocked window.
+ TabContents* tab = chrome::GetActiveTabContents(browser);
+ CHECK(content::ExecuteJavaScript(
+ tab->web_contents()->GetRenderViewHost(), L"", L""));
+ BlockedContentTabHelper* blocked_content =
+ tab->blocked_content_tab_helper();
+ std::vector<TabContents*> blocked_contents;
+ blocked_content->GetBlockedContents(&blocked_contents);
+ return blocked_contents;
+ }
+
+ void NavigateAndCheckPopupShown(Browser* browser, const GURL& url) {
+ content::WindowedNotificationObserver observer(
+ chrome::NOTIFICATION_TAB_ADDED,
+ content::NotificationService::AllSources());
+ ui_test_utils::NavigateToURL(browser, url);
+ observer.Wait();
+
+ ASSERT_EQ(2u, browser::GetBrowserCount(browser->profile()));
+
+ std::vector<TabContents*> blocked_contents = GetBlockedContents(browser);
+ ASSERT_TRUE(blocked_contents.empty());
+ }
+
+ void BasicTest(Browser* browser) {
+ GURL url(GetTestURL());
+ ui_test_utils::NavigateToURL(browser, url);
+
+ // If the popup blocker blocked the blank post, there should be only one
+ // tab in only one browser window and the URL of current tab must be equal
+ // to the original URL.
+ EXPECT_EQ(1u, browser::GetBrowserCount(browser->profile()));
+ EXPECT_EQ(1, browser->tab_count());
+ WebContents* web_contents = chrome::GetActiveWebContents(browser);
+ EXPECT_EQ(url, web_contents->GetURL());
+
+ std::vector<TabContents*> blocked_contents = GetBlockedContents(browser);
+ ASSERT_EQ(1u, blocked_contents.size());
+
+ content::WindowedNotificationObserver observer(
+ chrome::NOTIFICATION_TAB_ADDED,
+ content::NotificationService::AllSources());
+
+ TabContents* tab_contents = TabContents::FromWebContents(web_contents);
+ BlockedContentTabHelper* blocked_content =
+ tab_contents->blocked_content_tab_helper();
+ blocked_content->LaunchForContents(blocked_contents[0]);
+
+ observer.Wait();
+ }
+};
+
IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, PopupBlockedPostBlank) {
- FilePath file_name(FILE_PATH_LITERAL("popup-blocked-to-post-blank.html"));
- FilePath test_dir(kTestDir);
- GURL url(ui_test_utils::GetTestUrl(test_dir, file_name));
+ BasicTest(browser());
+}
+
+IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest,
+ PopupBlockedPostBlankIncognito) {
+ BasicTest(CreateIncognitoBrowser());
+}
+
+IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, MultiplePopups) {
+ GURL url(ui_test_utils::GetTestUrl(
+ FilePath(kTestDir), FilePath(FILE_PATH_LITERAL("popup-many.html"))));
ui_test_utils::NavigateToURL(browser(), url);
+ std::vector<TabContents*> blocked_contents = GetBlockedContents(browser());
+ ASSERT_EQ(2u, blocked_contents.size());
+}
- // If the popup blocker blocked the blank post, there should be only one
- // tab in only one browser window and the URL of current tab must be equal
- // to the original URL.
- EXPECT_EQ(1u, browser::GetBrowserCount(browser()->profile()));
- EXPECT_EQ(1, browser()->tab_count());
- WebContents* cur_tab = chrome::GetActiveWebContents(browser());
- ASSERT_TRUE(cur_tab);
- EXPECT_EQ(url, cur_tab->GetURL());
+// Verify that popups are launched on browser back button.
+IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest,
+ AllowPopupThroughContentSetting) {
+ GURL url(GetTestURL());
+ browser()->profile()->GetHostContentSettingsMap()->SetContentSetting(
+ ContentSettingsPattern::FromURL(url),
+ ContentSettingsPattern::Wildcard(),
+ CONTENT_SETTINGS_TYPE_POPUPS,
+ "",
+ CONTENT_SETTING_ALLOW);
+
+ NavigateAndCheckPopupShown(browser(), url);
}
+IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, PopupsLaunchWhenTabIsClosed) {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kDisablePopupBlocking);
+ GURL url = ui_test_utils::GetTestUrl(
+ FilePath(kTestDir),
+ FilePath(FILE_PATH_LITERAL("popup-on-unload.html")));
+ ui_test_utils::NavigateToURL(browser(), url);
+
+ NavigateAndCheckPopupShown(browser(), GURL(chrome::kAboutBlankURL));
+}
+
+// Verify that when you unblock popup, the popup shows in history and omnibox.
+IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest,
+ UnblockedPopupShowsInHistoryAndOmnibox) {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kDisablePopupBlocking);
+ GURL url(GetTestURL());
+ NavigateAndCheckPopupShown(browser(), url);
+
+ std::string search_string =
+ "data:text/html,<title>Popup Success!</title>you should not see this "
+ "message if popup blocker is enabled";
+
+ ui_test_utils::HistoryEnumerator history(browser()->profile());
+ std::vector<GURL>& history_urls = history.urls();
+ ASSERT_EQ(2u, history_urls.size());
+ ASSERT_EQ(GURL(search_string), history_urls[0]);
+ ASSERT_EQ(url, history_urls[1]);
+
+ LocationBar* location_bar = browser()->window()->GetLocationBar();
+ ui_test_utils::SendToOmniboxAndSubmit(location_bar, search_string);
+ OmniboxEditModel* model = location_bar->GetLocationEntry()->model();
+ EXPECT_EQ(GURL(search_string), model->CurrentMatch().destination_url);
+ EXPECT_EQ(ASCIIToUTF16(search_string), model->CurrentMatch().contents);
+}
+
} // namespace
« no previous file with comments | « chrome/browser/policy/policy_browsertest.cc ('k') | chrome/test/base/ui_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698