10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file. 40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/prefs/pref_service.h" 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/ui/webui/options/options_ui_browsertest.h" 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/common/url_constants.h" 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/public/test/browser_test_utils.h" 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace options { 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass ClearBrowserDataBrowserTest : public OptionsUIBrowserTest { 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch protected: 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void ClickElement(const std::string& selector) { 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool element_enabled = false; 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_NO_FATAL_FAILURE(GetElementEnabledState(selector, &element_enabled)); 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(element_enabled); 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(content::ExecuteScript( 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetSettingsFrame(), 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "document.querySelector('" + selector + "').click();")); 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool IsElementEnabled(const std::string& selector) { 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool element_enabled = false; 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetElementEnabledState(selector, &element_enabled); 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return element_enabled; 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private: 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void GetElementEnabledState( 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const std::string& selector, 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool* enabled) { 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetSettingsFrame(), 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch "window.domAutomationController.send(!document.querySelector('" + 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch selector + "').disabled);", 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch enabled)); 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}; 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 440529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochIN_PROC_BROWSER_TEST_F(ClearBrowserDataBrowserTest, 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch CommitButtonDisabledWhileDeletionInProgress) { 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const char kCommitButtonId[] = "#clear-browser-data-commit"; 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch BrowsingDataRemoverCompletionInhibitor completion_inhibitor; 480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Navigate to the Clear Browsing Data dialog to ensure that the commit button 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // is initially enabled, usable, and gets disabled after having been pressed. 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage); 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_NO_FATAL_FAILURE(ClickElement(kCommitButtonId)); 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_FALSE(IsElementEnabled(kCommitButtonId)); 540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch completion_inhibitor.BlockUntilNearCompletion(); 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Simulate a reload while the previous removal is still running, and verify 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // that the button is still disabled. 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage); 600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_FALSE(IsElementEnabled(kCommitButtonId)); 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch completion_inhibitor.ContinueToCompletion(); 630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // However, the button should be enabled again once the process has finished. 650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage); 660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(IsElementEnabled(kCommitButtonId)); 670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ClearBrowserDataBrowserTest, 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CommitButtonDisabledWhenNoDataTypesSelected) { 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const char kCommitButtonId[] = "#clear-browser-data-commit"; 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const char* kDataTypes[] = {"browser.clear_data.browsing_history", 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "browser.clear_data.download_history", 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "browser.clear_data.cache", 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "browser.clear_data.cookies", 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "browser.clear_data.passwords", 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "browser.clear_data.form_data", 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "browser.clear_data.hosted_apps_data", 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "browser.clear_data.content_licenses"}; 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) PrefService* prefs = browser()->profile()->GetPrefs(); 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (size_t i = 0; i < arraysize(kDataTypes); ++i) { 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) prefs->SetBoolean(kDataTypes[i], false); 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Navigate to the Clear Browsing Data dialog to ensure that the commit button 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // is disabled if clearing is not requested for any of the data types. 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage); 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(IsElementEnabled(kCommitButtonId)); 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // However, expect the commit button to be re-enabled if any of the data types 9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // gets selected to be cleared. 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (size_t i = 0; i < arraysize(kDataTypes); ++i) { 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) prefs->SetBoolean(kDataTypes[i], true); 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(IsElementEnabled(kCommitButtonId)); 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) prefs->SetBoolean(kDataTypes[i], false); 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace options 101