Commit 99d73a87 authored by Collin Baker's avatar Collin Baker Committed by Commit Bot

Set WebUITabStripOnTablets trial based on touch screen

Uses WinRT's Windows.Devices.Input.TouchCapabilities to check if the
screen has touch input. If it does, registers the client in the
WebUITabStripOnTablets synthetic field trial.

Bug: 1044692
Change-Id: I62ea6c627805f3ae1b18479deffef3a7c638b574
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2536790
Commit-Queue: Collin Baker <collinbaker@chromium.org>
Reviewed-by: default avatarDana Fried <dfried@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827940}
parent 98bb5888
......@@ -11,10 +11,43 @@
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
#include "chrome/browser/ui/ui_features.h"
// Platform-specific headers for detecting tablet devices.
#if defined(OS_CHROMEOS)
#include "ash/public/cpp/tablet_mode.h"
#elif defined(OS_WIN)
#include <windows.h>
#endif // defined(OS_CHROMEOS)
namespace {
#if defined(OS_WIN)
// Returns whether the screen supports touch input. Returns false if it
// couldn't be checked.
bool HasBuiltInTouchScreen() {
int result = ::GetSystemMetrics(SM_DIGITIZER);
// The |result| can be a combination of the following:
// - NID_INTEGRATED_TOUCH: built-in touch screen
// - NID_EXTERNAL_TOUCH: external touch screen or tablet
// - NID_INTEGRATED_PEN: built-in pen support
// - NID_EXTERNAL_PEN: external pen screen or tablet
// - NID_MULTI_INPUT: not sure what this means
// - NID_READY: currently ready to receive touch or pen input
//
// Ideally, we want to determine if a device is a tablet or
// convertible. This means it supports entering system tablet mode.
// There is no direct way to check this, however having a built-in
// touch screen is a good proxy. Ignore pen digitizers; if a device
// only supports pen input it probably isn't a tablet.
return (result & NID_INTEGRATED_TOUCH) != 0;
}
#endif // defined(OS_WIN)
} // namespace
// static
void WebUITabStripFieldTrial::RegisterFieldTrialIfNecessary() {
static base::NoDestructor<WebUITabStripFieldTrial> instance;
......@@ -47,6 +80,8 @@ WebUITabStripFieldTrial::WebUITabStripFieldTrial() {
bool WebUITabStripFieldTrial::DeviceIsTabletModeCapable() {
#if defined(OS_CHROMEOS)
return ash::TabletMode::IsBoardTypeMarkedAsTabletCapable();
#elif defined(OS_WIN)
return HasBuiltInTouchScreen();
#else
// No known way to determine tablet-capability on other platforms.
// Since returning true will record the synthetic field trial for all
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment