1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/prefs/pref_service.h" 6#include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" 7#include "chrome/browser/profiles/profile.h" 8#include "chrome/browser/ui/browser.h" 9#include "chrome/browser/ui/webui/options/options_ui_browsertest.h" 10#include "chrome/common/url_constants.h" 11#include "content/public/test/browser_test_utils.h" 12 13namespace options { 14 15class ClearBrowserDataBrowserTest : public OptionsUIBrowserTest { 16 protected: 17 void ClickElement(const std::string& selector) { 18 bool element_enabled = false; 19 ASSERT_NO_FATAL_FAILURE(GetElementEnabledState(selector, &element_enabled)); 20 ASSERT_TRUE(element_enabled); 21 ASSERT_TRUE(content::ExecuteScript( 22 GetSettingsFrame(), 23 "document.querySelector('" + selector + "').click();")); 24 } 25 26 bool IsElementEnabled(const std::string& selector) { 27 bool element_enabled = false; 28 GetElementEnabledState(selector, &element_enabled); 29 return element_enabled; 30 } 31 32 private: 33 void GetElementEnabledState( 34 const std::string& selector, 35 bool* enabled) { 36 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 37 GetSettingsFrame(), 38 "window.domAutomationController.send(!document.querySelector('" + 39 selector + "').disabled);", 40 enabled)); 41 } 42}; 43 44IN_PROC_BROWSER_TEST_F(ClearBrowserDataBrowserTest, 45 CommitButtonDisabledWhileDeletionInProgress) { 46 const char kCommitButtonId[] = "#clear-browser-data-commit"; 47 BrowsingDataRemoverCompletionInhibitor completion_inhibitor; 48 49 // Navigate to the Clear Browsing Data dialog to ensure that the commit button 50 // is initially enabled, usable, and gets disabled after having been pressed. 51 NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage); 52 ASSERT_NO_FATAL_FAILURE(ClickElement(kCommitButtonId)); 53 EXPECT_FALSE(IsElementEnabled(kCommitButtonId)); 54 55 completion_inhibitor.BlockUntilNearCompletion(); 56 57 // Simulate a reload while the previous removal is still running, and verify 58 // that the button is still disabled. 59 NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage); 60 EXPECT_FALSE(IsElementEnabled(kCommitButtonId)); 61 62 completion_inhibitor.ContinueToCompletion(); 63 64 // However, the button should be enabled again once the process has finished. 65 NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage); 66 EXPECT_TRUE(IsElementEnabled(kCommitButtonId)); 67} 68 69IN_PROC_BROWSER_TEST_F(ClearBrowserDataBrowserTest, 70 CommitButtonDisabledWhenNoDataTypesSelected) { 71 const char kCommitButtonId[] = "#clear-browser-data-commit"; 72 const char* kDataTypes[] = {"browser.clear_data.browsing_history", 73 "browser.clear_data.download_history", 74 "browser.clear_data.cache", 75 "browser.clear_data.cookies", 76 "browser.clear_data.passwords", 77 "browser.clear_data.form_data", 78 "browser.clear_data.hosted_apps_data", 79 "browser.clear_data.content_licenses"}; 80 81 PrefService* prefs = browser()->profile()->GetPrefs(); 82 for (size_t i = 0; i < arraysize(kDataTypes); ++i) { 83 prefs->SetBoolean(kDataTypes[i], false); 84 } 85 86 // Navigate to the Clear Browsing Data dialog to ensure that the commit button 87 // is disabled if clearing is not requested for any of the data types. 88 NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage); 89 EXPECT_FALSE(IsElementEnabled(kCommitButtonId)); 90 91 // However, expect the commit button to be re-enabled if any of the data types 92 // gets selected to be cleared. 93 for (size_t i = 0; i < arraysize(kDataTypes); ++i) { 94 prefs->SetBoolean(kDataTypes[i], true); 95 EXPECT_TRUE(IsElementEnabled(kCommitButtonId)); 96 prefs->SetBoolean(kDataTypes[i], false); 97 } 98} 99 100} // namespace options 101