accessibility_features_apitest.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file. 4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <string> 6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <vector> 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/json/json_writer.h" 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/prefs/pref_service.h" 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/strings/stringprintf.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/values.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/extensions/extension_apitest.h" 13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/common/pref_names.h" 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// API tests for chrome.accessibilityFeatures API. 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Note that the API is implemented using preference API infrastructure. 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// See preference_api.cc for the list of accessibility features exposed by the 18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// API and the related preferences. 19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace extensions { 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace { 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Keys for data in the test config argument that will be set for the test app 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// to use. 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// The test that the app should run. 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char kTestNameKey[] = "testName"; 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Key for list of features enabled when the test is initialized. 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char kEnabledFeaturesKey[] = "enabled"; 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Key for list fo features disabled when the test is initialized. 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char kDisabledFeaturesKey[] = "disabled"; 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A test extension path. The extension has only |accessibilityFeatures.read| 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// permission. 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char kTestExtensionPathReadPermission[] = 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "accessibility_features/read_permission/"; 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A test extension path. The extension has only |accessibilityFeatures.modify| 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// permission. 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char kTestExtensionPathMofifyPermission[] = 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "accessibility_features/modify_permission/"; 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Accessibility features API test. 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Tests are parameterized by whether the test extension is write-only (the 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// parameter value is true) or read-only (the parameter value is false). 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass AccessibilityFeaturesApiTest : public ExtensionApiTest, 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public testing::WithParamInterface<bool> { 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AccessibilityFeaturesApiTest() {} 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual ~AccessibilityFeaturesApiTest() {} 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch protected: 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Returns pref service to be used to initialize and later verify 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // accessibility preference values. 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PrefService* GetPrefs() { return browser()->profile()->GetPrefs(); } 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Returns the path of the extension that should be used in a parameterized 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // test. 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string GetTestExtensionPath() const { 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (GetParam()) 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return kTestExtensionPathMofifyPermission; 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return kTestExtensionPathReadPermission; 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Whether a parameterized test should have been able to modify accessibility 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // preferences (i.e. whether the test extension had modify permission). 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool ShouldModifyingFeatureSucceed() const { return GetParam(); } 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Returns preference path for accessibility features as defined by the API. 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const char* const GetPrefForFeature(const std::string& feature) { 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (feature == "spokenFeedback") 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prefs::kAccessibilitySpokenFeedbackEnabled; 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (feature == "largeCursor") 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prefs::kAccessibilityLargeCursorEnabled; 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (feature == "stickyKeys") 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prefs::kAccessibilityStickyKeysEnabled; 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (feature == "highContrast") 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prefs::kAccessibilityHighContrastEnabled; 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (feature == "screenMagnifier") 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prefs::kAccessibilityScreenMagnifierEnabled; 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (feature == "autoclick") 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prefs::kAccessibilityAutoclickEnabled; 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (feature == "virtualKeyboard") 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prefs::kAccessibilityVirtualKeyboardEnabled; 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return NULL; 85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Initializes preferences before running the test extension. 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |prefs| Pref service which should be initializzed. 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |enabled_features| List of boolean preference whose value should be set to 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // true. 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |disabled_features| List of boolean preferences whose value should be set 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // to false. 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool InitPrefServiceForTest( 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PrefService* prefs, 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::vector<std::string>& enabled_features, 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::vector<std::string>& disabled_features) { 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch for (size_t i = 0; i < enabled_features.size(); ++i) { 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const char* const pref_name = GetPrefForFeature(enabled_features[i]); 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(pref_name) << "Invalid feature " << enabled_features[i]; 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!pref_name) 101effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return false; 102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch prefs->SetBoolean(pref_name, true); 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch for (size_t i = 0; i < disabled_features.size(); ++i) { 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const char* const pref_name = GetPrefForFeature(disabled_features[i]); 107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(pref_name) << "Invalid feature " << disabled_features[i]; 108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!pref_name) 109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return false; 110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch prefs->SetBoolean(pref_name, false); 111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return true; 113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Verifies that preferences have the expected value. 116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |prefs| The pref service to be verified. 117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |enabled_features| The list of boolean preferences whose value should be 118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // true. 119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |disabled_features| The list of boolean preferences whose value should be 120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // false. 121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void VerifyPrefServiceState( 122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch PrefService* prefs, 123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::vector<std::string>& enabled_features, 124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::vector<std::string>& disabled_features) { 125effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch for (size_t i = 0; i < enabled_features.size(); ++i) { 126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const char* const pref_name = GetPrefForFeature(enabled_features[i]); 127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(pref_name) << "Invalid feature " << enabled_features[i]; 128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(prefs->GetBoolean(pref_name)); 129effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch for (size_t i = 0; i < disabled_features.size(); ++i) { 132effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const char* const pref_name = GetPrefForFeature(disabled_features[i]); 133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(pref_name) << "Invalid feature " << disabled_features[i]; 134effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_FALSE(prefs->GetBoolean(pref_name)); 135effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 136effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 137effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 138effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Given the test name and list of enabled and disabled features, generates 139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // and sets the JSON string that should be given to the test extension as 140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // test configuration. 141effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The result is saved to |result|. The return value is whether the test 142effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // argument was successfully generated. 143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool GenerateTestArg(const std::string& test_name, 144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::vector<std::string>& enabled_features, 145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::vector<std::string>& disabled_features, 146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string* result) { 147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::DictionaryValue test_arg; 148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_arg.SetString(kTestNameKey, test_name); 149effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 150effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<base::ListValue> enabled_list(new base::ListValue); 151effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch for (size_t i = 0; i < enabled_features.size(); ++i) 152effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_list->AppendString(enabled_features[i]); 153effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_arg.Set(kEnabledFeaturesKey, enabled_list.release()); 154effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 155effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<base::ListValue> disabled_list(new base::ListValue); 156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch for (size_t i = 0; i < disabled_features.size(); ++i) 157effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch disabled_list->AppendString(disabled_features[i]); 158effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_arg.Set(kDisabledFeaturesKey, disabled_list.release()); 159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return base::JSONWriter::Write(&test_arg, result); 161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 162effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Disabled now as this test is being flaky, see http://crbug.com/384266. 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISABLED_AccessibilityFeatureaApiTestInstantiatePermission, 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccessibilityFeaturesApiTest, 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) testing::Bool()); 169effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Tests that an extension with read permission can read accessibility features 171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// state, while an extension that doesn't have the permission cannot. 172effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_P(AccessibilityFeaturesApiTest, Get) { 173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> enabled_features; 174effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_features.push_back("largeCursor"); 175effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_features.push_back("stickyKeys"); 176effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_features.push_back("highContrast"); 177effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 178effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> disabled_features; 179effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch disabled_features.push_back("spokenFeedback"); 180effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch disabled_features.push_back("screenMagnifier"); 181effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch disabled_features.push_back("autoclick"); 182effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch disabled_features.push_back("virtualKeyboard"); 183effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 184effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE( 185effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch InitPrefServiceForTest(GetPrefs(), enabled_features, disabled_features)); 186effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 187effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string test_arg; 188effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(GenerateTestArg( 189effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "getterTest", enabled_features, disabled_features, &test_arg)); 190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE( 191effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RunPlatformAppTestWithArg(GetTestExtensionPath(), test_arg.c_str())); 192effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Tests that an extension with modify permission can modify accessibility 195effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// features, while an extension that doesn't have the permission can't. 196effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_P(AccessibilityFeaturesApiTest, Set) { 197effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> enabled_features; 198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_features.push_back("spokenFeedback"); 199effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_features.push_back("stickyKeys"); 200effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_features.push_back("autoclick"); 201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_features.push_back("virtualKeyboard"); 202effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 203effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> disabled_features; 204effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch disabled_features.push_back("largeCursor"); 205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch disabled_features.push_back("highContrast"); 206effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch disabled_features.push_back("screenMagnifier"); 207effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 208effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE( 209effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch InitPrefServiceForTest(GetPrefs(), enabled_features, disabled_features)); 210effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 211effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string test_arg; 212effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(GenerateTestArg( 213effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "setterTest", enabled_features, disabled_features, &test_arg)); 214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 215effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The test extension attempts to flip all feature values. 216effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE( 217effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RunPlatformAppTestWithArg(GetTestExtensionPath(), test_arg.c_str())); 218effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 219effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The test tries to flip the feature states. 220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (ShouldModifyingFeatureSucceed()) { 221effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VerifyPrefServiceState(GetPrefs(), disabled_features, enabled_features); 222effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } else { 223effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VerifyPrefServiceState(GetPrefs(), enabled_features, disabled_features); 224effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 225effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 226effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 227effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Tests that an extension with read permission is notified when accessibility 228effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// features change. 229effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(AccessibilityFeaturesApiTest, ObserveFeatures) { 230effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> enabled_features; 231effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_features.push_back("largeCursor"); 232effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_features.push_back("stickyKeys"); 233effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enabled_features.push_back("highContrast"); 234effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 235effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::vector<std::string> disabled_features; 236effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch disabled_features.push_back("screenMagnifier"); 237effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 238effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE( 239effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch InitPrefServiceForTest(GetPrefs(), enabled_features, disabled_features)); 240effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 241effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string test_arg; 242effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(GenerateTestArg( 243effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch "observerTest", enabled_features, disabled_features, &test_arg)); 244effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 245effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The test extension is supposed to report result twice when runnign this 246effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // test. First time when in initializes it's feature listeners, and second 247effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // time, when gets all expected events. This is done so the extension is 248effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // running when the accessibility features are flipped; oterwise, the 249effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // extension may not see events. 250effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(RunPlatformAppTestWithArg(kTestExtensionPathReadPermission, 251effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch test_arg.c_str())); 252effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // This should flip all features. 254effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE( 255effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch InitPrefServiceForTest(GetPrefs(), disabled_features, enabled_features)); 256effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 257effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Catch the second result notification sent by the test extension. 258effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ResultCatcher result_catcher; 259effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(result_catcher.GetNextResult()) << result_catcher.message(); 260effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 261effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 262effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace 263effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 264effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace extensions 265