// 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_originalTouchEventFeatureDetectionEnabled;
  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
