blob: 7d86214f91e206acf05270e2ace9559f867c7d6a [file] [log] [blame]
// Copyright (c) 2011 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 "ash/public/cpp/ash_pref_names.h"
#include "ash/public/cpp/ash_switches.h"
#include "ash/public/cpp/stylus_utils.h"
#include "base/sys_info.h"
#include "base/test/scoped_feature_list.h"
#include "base/values.h"
#include "chrome/browser/chromeos/arc/arc_util.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chrome/browser/chromeos/settings/stub_install_attributes.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/settings/cros_settings_names.h"
#include "components/arc/arc_util.h"
#include "components/prefs/pref_service.h"
#include "services/ui/public/cpp/input_devices/input_device_client_test_api.h"
#include "ui/events/devices/input_device.h"
#include "ui/events/devices/touchscreen_device.h"
#include "ui/events/test/event_generator.h"
namespace {
const char kTestAppId[] = "ljoammodoonkhnehlncldjelhidljdpi";
} // namespace
class ChromeOSInfoPrivateTest : public extensions::ExtensionApiTest {
public:
ChromeOSInfoPrivateTest() {}
~ChromeOSInfoPrivateTest() override {}
protected:
void EnableKioskSession() {
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kForceAppMode);
base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(switches::kAppId,
kTestAppId);
}
void SetDeviceType(const std::string& device_type) {
const std::string lsb_release = std::string("DEVICETYPE=") + device_type;
base::SysInfo::SetChromeOSVersionInfoForTest(lsb_release,
base::Time::Now());
}
};
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, TestGetAndSet) {
// Set the initial timezone different from what JS function
// timezoneSetTest() will attempt to set.
profile()->GetPrefs()->SetString(prefs::kUserTimezone, "America/Los_Angeles");
// Check that accessibility settings are set to default values.
PrefService* prefs = profile()->GetPrefs();
ASSERT_FALSE(prefs->GetBoolean(ash::prefs::kAccessibilityLargeCursorEnabled));
ASSERT_FALSE(prefs->GetBoolean(ash::prefs::kAccessibilityStickyKeysEnabled));
ASSERT_FALSE(
prefs->GetBoolean(ash::prefs::kAccessibilitySpokenFeedbackEnabled));
ASSERT_FALSE(
prefs->GetBoolean(ash::prefs::kAccessibilityHighContrastEnabled));
ASSERT_FALSE(
prefs->GetBoolean(ash::prefs::kAccessibilityScreenMagnifierEnabled));
ASSERT_FALSE(prefs->GetBoolean(ash::prefs::kAccessibilityAutoclickEnabled));
ASSERT_FALSE(profile()->GetPrefs()->GetBoolean(
prefs::kLanguageSendFunctionKeys));
ASSERT_FALSE(
profile()->GetPrefs()->GetBoolean(prefs::kCameraMediaConsolidated));
ASSERT_TRUE(RunComponentExtensionTest("chromeos_info_private/basic"))
<< message_;
// Check that all accessibility settings have been flipped by the test.
ASSERT_TRUE(prefs->GetBoolean(ash::prefs::kAccessibilityLargeCursorEnabled));
ASSERT_TRUE(prefs->GetBoolean(ash::prefs::kAccessibilityStickyKeysEnabled));
ASSERT_TRUE(
prefs->GetBoolean(ash::prefs::kAccessibilitySpokenFeedbackEnabled));
ASSERT_TRUE(prefs->GetBoolean(ash::prefs::kAccessibilityHighContrastEnabled));
ASSERT_TRUE(
prefs->GetBoolean(ash::prefs::kAccessibilityScreenMagnifierEnabled));
ASSERT_TRUE(prefs->GetBoolean(ash::prefs::kAccessibilityAutoclickEnabled));
ASSERT_TRUE(prefs->GetBoolean(prefs::kLanguageSendFunctionKeys));
ASSERT_TRUE(prefs->GetBoolean(prefs::kCameraMediaConsolidated));
}
// TODO(steel): Investigate merging the following tests.
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, Kiosk) {
EnableKioskSession();
ASSERT_TRUE(
RunPlatformAppTestWithArg("chromeos_info_private/extended", "kiosk"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, ArcNotAvailable) {
ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
"arc not-available"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, Chromebase) {
SetDeviceType("CHROMEBASE");
ASSERT_TRUE(
RunPlatformAppTestWithArg("chromeos_info_private/extended", "chromebase"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, Chromebit) {
SetDeviceType("CHROMEBIT");
ASSERT_TRUE(
RunPlatformAppTestWithArg("chromeos_info_private/extended", "chromebit"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, Chromebook) {
SetDeviceType("CHROMEBOOK");
ASSERT_TRUE(
RunPlatformAppTestWithArg("chromeos_info_private/extended", "chromebook"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, Chromebox) {
SetDeviceType("CHROMEBOX");
ASSERT_TRUE(
RunPlatformAppTestWithArg("chromeos_info_private/extended", "chromebox"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, UnknownDeviceType) {
SetDeviceType("UNKNOWN");
ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
"unknown device type"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, AssistantSupported) {
// Enable native Assistant.
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(chromeos::switches::kAssistantFeature);
ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
"assistant supported"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, AssistantUnsupported) {
// Disable native Assistant.
base::test::ScopedFeatureList feature_list;
feature_list.InitAndDisableFeature(chromeos::switches::kAssistantFeature);
ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
"assistant unsupported"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, StylusUnsupported) {
ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
"stylus unsupported"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, StylusSupported) {
ui::InputDeviceClientTestApi test_api;
ui::TouchscreenDevice touchscreen(1,
ui::InputDeviceType::INPUT_DEVICE_INTERNAL,
"Touchscreen", gfx::Size(1024, 768), 0);
touchscreen.has_stylus = true;
test_api.SetTouchscreenDevices({touchscreen});
ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
"stylus supported"))
<< message_;
}
// TODO(https://crbug.com/814675): Excluded from Mash because pointer events
// aren't seen.
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateTest, StylusSeen) {
ui::InputDeviceClientTestApi test_api;
ui::TouchscreenDevice touchscreen(1,
ui::InputDeviceType::INPUT_DEVICE_INTERNAL,
"Touchscreen", gfx::Size(1024, 768), 0);
touchscreen.has_stylus = true;
test_api.SetTouchscreenDevices({touchscreen});
ui::test::EventGenerator generator(browser()->window()->GetNativeWindow());
generator.EnterPenPointerMode();
generator.PressTouch();
generator.ReleaseTouch();
generator.ExitPenPointerMode();
ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
"stylus seen"))
<< message_;
}
class ChromeOSInfoPrivateInternalStylusTest : public ChromeOSInfoPrivateTest {
public:
ChromeOSInfoPrivateInternalStylusTest() = default;
~ChromeOSInfoPrivateInternalStylusTest() override = default;
void SetUpCommandLine(base::CommandLine* command_line) override {
ChromeOSInfoPrivateTest::SetUpCommandLine(command_line);
command_line->AppendSwitch(ash::switches::kHasInternalStylus);
}
private:
DISALLOW_COPY_AND_ASSIGN(ChromeOSInfoPrivateInternalStylusTest);
};
IN_PROC_BROWSER_TEST_F(ChromeOSInfoPrivateInternalStylusTest,
StylusSeenInternal) {
ash::stylus_utils::SetHasStylusInputForTesting();
ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
"stylus seen"))
<< message_;
}
class ChromeOSArcInfoPrivateTest : public ChromeOSInfoPrivateTest {
public:
ChromeOSArcInfoPrivateTest() = default;
~ChromeOSArcInfoPrivateTest() override = default;
void SetUpCommandLine(base::CommandLine* command_line) override {
extensions::ExtensionApiTest::SetUpCommandLine(command_line);
// Make ARC enabled for ArcAvailable/ArcEnabled tests.
arc::SetArcAvailableCommandLineForTesting(command_line);
}
private:
DISALLOW_COPY_AND_ASSIGN(ChromeOSArcInfoPrivateTest);
};
IN_PROC_BROWSER_TEST_F(ChromeOSArcInfoPrivateTest, ArcEnabled) {
ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
"arc enabled"))
<< message_;
}
IN_PROC_BROWSER_TEST_F(ChromeOSArcInfoPrivateTest, ArcAvailable) {
// Even if ARC is available, ARC may not be able to be enabled. (Please
// see arc::IsArcAllowedForProfile() for details).
// In such cases, we expect "available". However, current testing framework
// does not seem to run with such cases, unfortunately. So, here directly
// control the function.
arc::DisallowArcForTesting();
ASSERT_TRUE(RunPlatformAppTestWithArg("chromeos_info_private/extended",
"arc available"))
<< message_;
}
class ChromeOSManagedDeviceInfoPrivateTest : public ChromeOSInfoPrivateTest {
public:
ChromeOSManagedDeviceInfoPrivateTest() = default;
~ChromeOSManagedDeviceInfoPrivateTest() override = default;
private:
chromeos::ScopedStubInstallAttributes test_install_attributes_{
chromeos::StubInstallAttributes::CreateCloudManaged("fake-domain",
"fake-id")};
DISALLOW_COPY_AND_ASSIGN(ChromeOSManagedDeviceInfoPrivateTest);
};
IN_PROC_BROWSER_TEST_F(ChromeOSManagedDeviceInfoPrivateTest, Managed) {
ASSERT_TRUE(
RunPlatformAppTestWithArg("chromeos_info_private/extended", "managed"))
<< message_;
}