blob: 8ab0627fae98ab5fcf5901a1fd5d394c13b9bc0b [file] [log] [blame]
// Copyright 2015 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 DevToolsEmulator_h
#define DevToolsEmulator_h
#include "platform/heap/Handle.h"
#include "public/platform/PointerProperties.h"
#include "public/platform/WebFloatPoint.h"
#include "public/platform/WebViewportStyle.h"
#include "public/web/WebDeviceEmulationParams.h"
#include "web/WebExport.h"
#include "wtf/Forward.h"
#include "wtf/Optional.h"
#include <memory>
namespace blink {
class IntPoint;
class IntRect;
class TransformationMatrix;
class WebInputEvent;
class WebViewImpl;
class WEB_EXPORT DevToolsEmulator final
: public GarbageCollectedFinalized<DevToolsEmulator> {
public:
~DevToolsEmulator();
static DevToolsEmulator* create(WebViewImpl*);
DECLARE_TRACE();
// Settings overrides.
void setTextAutosizingEnabled(bool);
void setDeviceScaleAdjustment(float);
void setPreferCompositingToLCDTextEnabled(bool);
void setViewportStyle(WebViewportStyle);
void setPluginsEnabled(bool);
void setScriptEnabled(bool);
void setDoubleTapToZoomEnabled(bool);
bool doubleTapToZoomEnabled() const;
void setAvailablePointerTypes(int);
void setPrimaryPointerType(PointerType);
void setAvailableHoverTypes(int);
void setPrimaryHoverType(HoverType);
void setMainFrameResizesAreOrientationChanges(bool);
// Emulation.
void enableDeviceEmulation(const WebDeviceEmulationParams&);
void disableDeviceEmulation();
// Position is given in CSS pixels, scale relative to a page scale of 1.0.
void forceViewport(const WebFloatPoint& position, float scale);
void resetViewport();
bool resizeIsDeviceSizeChange();
void setTouchEventEmulationEnabled(bool);
bool handleInputEvent(const WebInputEvent&);
void setScriptExecutionDisabled(bool);
// Notify the DevToolsEmulator about a scroll or scale change of the main
// frame. Updates the transform for a viewport override.
void mainFrameScrollOrScaleChanged();
// Returns a custom visible content rect if a viewport override is active.
// This ensures that all content inside the forced viewport is painted.
WTF::Optional<IntRect> visibleContentRectForPainting() const;
private:
explicit DevToolsEmulator(WebViewImpl*);
void enableMobileEmulation();
void disableMobileEmulation();
// Returns the original device scale factor when overridden by DevTools, or
// deviceScaleFactor() otherwise.
float compositorDeviceScaleFactor() const;
void applyDeviceEmulationTransform(TransformationMatrix*);
void applyViewportOverride(TransformationMatrix*);
void updateRootLayerTransform();
WebViewImpl* m_webViewImpl;
bool m_deviceMetricsEnabled;
bool m_emulateMobileEnabled;
WebDeviceEmulationParams m_emulationParams;
struct ViewportOverride {
WebFloatPoint position;
double scale;
bool originalVisualViewportMasking;
};
WTF::Optional<ViewportOverride> m_viewportOverride;
bool m_isOverlayScrollbarsEnabled;
bool m_isOrientationEventEnabled;
bool m_isMobileLayoutThemeEnabled;
float m_originalDefaultMinimumPageScaleFactor;
float m_originalDefaultMaximumPageScaleFactor;
bool m_embedderTextAutosizingEnabled;
float m_embedderDeviceScaleAdjustment;
bool m_embedderPreferCompositingToLCDTextEnabled;
WebViewportStyle m_embedderViewportStyle;
bool m_embedderPluginsEnabled;
int m_embedderAvailablePointerTypes;
PointerType m_embedderPrimaryPointerType;
int m_embedderAvailableHoverTypes;
HoverType m_embedderPrimaryHoverType;
bool m_embedderMainFrameResizesAreOrientationChanges;
bool m_touchEventEmulationEnabled;
bool m_doubleTapToZoomEnabled;
bool m_originalTouchEnabled;
bool m_originalDeviceSupportsMouse;
bool m_originalDeviceSupportsTouch;
int m_originalMaxTouchPoints;
std::unique_ptr<IntPoint> m_lastPinchAnchorCss;
std::unique_ptr<IntPoint> m_lastPinchAnchorDip;
bool m_embedderScriptEnabled;
bool m_scriptExecutionDisabled;
};
} // namespace blink
#endif