// Copyright 2016 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.

#ifndef UI_EVENTS_BLINK_BLINK_FEATURES_H_
#define UI_EVENTS_BLINK_BLINK_FEATURES_H_

#include "base/feature_list.h"

namespace features {

// Enables resampling GestureScroll events on compositor thread.
extern const base::Feature kResamplingScrollEvents;

// This flag is used to set field parameters to choose predictor we use when
// resampling is disabled. It's used for gatherig accuracy metrics on finch
// without enabling resampling. It does not have any effect when the resampling
// flag is enabled.
extern const base::Feature kScrollPredictorTypeChoice;

// This feature allows native ET_MOUSE_EXIT events to be passed
// through to blink as mouse leave events. Traditionally these events were
// converted to mouse move events due to a number of inconsistencies on
// the native platforms. crbug.com/450631
extern const base::Feature kSendMouseLeaveEvents;

// When enabled, this feature prevents Blink from changing the hover state and
// dispatching mouse enter/exit events for elements under the mouse after the
// layout under the mouse cursor is changed.
extern const base::Feature kUpdateHoverFromLayoutChangeAtBeginFrame;

// When enabled, this feature prevents Blink from changing the hover state and
// dispatching mouse enter/exit events for elements under the mouse as the page
// is scrolled.
extern const base::Feature kUpdateHoverFromScrollAtBeginFrame;

// Enables handling touch events in compositor using impl side touch action
// knowledge.
extern const base::Feature kCompositorTouchAction;

// Enables fallback cursor mode for dpad devices.
extern const base::Feature kFallbackCursorMode;

// When enabled, this feature prevent blink sending key event to web unless it
// is on installed PWA.
extern const base::Feature kDontSendKeyEventsToJavascript;

// Skips the browser touch event filter, ensuring that events that reach the
// queue and would otherwise be filtered out will instead be passed onto the
// renderer compositor process as long as the page hasn't timed out. If
// skip_filtering_process is browser_and_renderer, also skip the renderer cc
// touch event filter, ensuring that events will be passed onto the renderer
// main thread. Which event types will be always forwarded is controlled by the
// "type" FeatureParam,
// which can be either "discrete" (default) or "all".
extern const base::Feature kSkipBrowserTouchFilter;
extern const char kSkipBrowserTouchFilterTypeParamName[];
extern const char kSkipBrowserTouchFilterTypeParamValueDiscrete[];
extern const char kSkipBrowserTouchFilterTypeParamValueAll[];
extern const char kSkipBrowserTouchFilterFilteringProcessParamName[];
extern const char kSkipBrowserTouchFilterFilteringProcessParamValueBrowser[];
extern const char
    kSkipBrowserTouchFilterFilteringProcessParamValueBrowserAndRenderer[];
}

#endif  // UI_EVENTS_BLINK_BLINK_FEATURES_H_
