{-# LANGUAGE OverloadedStrings, RecordWildCards, TupleSections #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}


{- |
= HeadlessExperimental

This domain provides experimental commands only supported in headless mode.
-}


module CDP.Domains.HeadlessExperimental (module CDP.Domains.HeadlessExperimental) where

import           Control.Applicative  ((<$>))
import           Control.Monad
import           Control.Monad.Loops
import           Control.Monad.Trans  (liftIO)
import qualified Data.Map             as M
import           Data.Maybe          
import Data.Functor.Identity
import Data.String
import qualified Data.Text as T
import qualified Data.List as List
import qualified Data.Text.IO         as TI
import qualified Data.Vector          as V
import Data.Aeson.Types (Parser(..))
import           Data.Aeson           (FromJSON (..), ToJSON (..), (.:), (.:?), (.=), (.!=), (.:!))
import qualified Data.Aeson           as A
import qualified Network.HTTP.Simple as Http
import qualified Network.URI          as Uri
import qualified Network.WebSockets as WS
import Control.Concurrent
import qualified Data.ByteString.Lazy as BS
import qualified Data.Map as Map
import Data.Proxy
import System.Random
import GHC.Generics
import Data.Char
import Data.Default

import CDP.Internal.Utils




-- | Type 'HeadlessExperimental.ScreenshotParams'.
--   Encoding options for a screenshot.
data HeadlessExperimentalScreenshotParamsFormat = HeadlessExperimentalScreenshotParamsFormatJpeg | HeadlessExperimentalScreenshotParamsFormatPng
  deriving (Eq HeadlessExperimentalScreenshotParamsFormat
Eq HeadlessExperimentalScreenshotParamsFormat
-> (HeadlessExperimentalScreenshotParamsFormat
    -> HeadlessExperimentalScreenshotParamsFormat -> Ordering)
-> (HeadlessExperimentalScreenshotParamsFormat
    -> HeadlessExperimentalScreenshotParamsFormat -> Bool)
-> (HeadlessExperimentalScreenshotParamsFormat
    -> HeadlessExperimentalScreenshotParamsFormat -> Bool)
-> (HeadlessExperimentalScreenshotParamsFormat
    -> HeadlessExperimentalScreenshotParamsFormat -> Bool)
-> (HeadlessExperimentalScreenshotParamsFormat
    -> HeadlessExperimentalScreenshotParamsFormat -> Bool)
-> (HeadlessExperimentalScreenshotParamsFormat
    -> HeadlessExperimentalScreenshotParamsFormat
    -> HeadlessExperimentalScreenshotParamsFormat)
-> (HeadlessExperimentalScreenshotParamsFormat
    -> HeadlessExperimentalScreenshotParamsFormat
    -> HeadlessExperimentalScreenshotParamsFormat)
-> Ord HeadlessExperimentalScreenshotParamsFormat
HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Ordering
HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat
$cmin :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat
max :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat
$cmax :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat
>= :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
$c>= :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
> :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
$c> :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
<= :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
$c<= :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
< :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
$c< :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
compare :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Ordering
$ccompare :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Ordering
$cp1Ord :: Eq HeadlessExperimentalScreenshotParamsFormat
Ord, HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
(HeadlessExperimentalScreenshotParamsFormat
 -> HeadlessExperimentalScreenshotParamsFormat -> Bool)
-> (HeadlessExperimentalScreenshotParamsFormat
    -> HeadlessExperimentalScreenshotParamsFormat -> Bool)
-> Eq HeadlessExperimentalScreenshotParamsFormat
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
$c/= :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
== :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
$c== :: HeadlessExperimentalScreenshotParamsFormat
-> HeadlessExperimentalScreenshotParamsFormat -> Bool
Eq, Int -> HeadlessExperimentalScreenshotParamsFormat -> ShowS
[HeadlessExperimentalScreenshotParamsFormat] -> ShowS
HeadlessExperimentalScreenshotParamsFormat -> String
(Int -> HeadlessExperimentalScreenshotParamsFormat -> ShowS)
-> (HeadlessExperimentalScreenshotParamsFormat -> String)
-> ([HeadlessExperimentalScreenshotParamsFormat] -> ShowS)
-> Show HeadlessExperimentalScreenshotParamsFormat
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [HeadlessExperimentalScreenshotParamsFormat] -> ShowS
$cshowList :: [HeadlessExperimentalScreenshotParamsFormat] -> ShowS
show :: HeadlessExperimentalScreenshotParamsFormat -> String
$cshow :: HeadlessExperimentalScreenshotParamsFormat -> String
showsPrec :: Int -> HeadlessExperimentalScreenshotParamsFormat -> ShowS
$cshowsPrec :: Int -> HeadlessExperimentalScreenshotParamsFormat -> ShowS
Show, ReadPrec [HeadlessExperimentalScreenshotParamsFormat]
ReadPrec HeadlessExperimentalScreenshotParamsFormat
Int -> ReadS HeadlessExperimentalScreenshotParamsFormat
ReadS [HeadlessExperimentalScreenshotParamsFormat]
(Int -> ReadS HeadlessExperimentalScreenshotParamsFormat)
-> ReadS [HeadlessExperimentalScreenshotParamsFormat]
-> ReadPrec HeadlessExperimentalScreenshotParamsFormat
-> ReadPrec [HeadlessExperimentalScreenshotParamsFormat]
-> Read HeadlessExperimentalScreenshotParamsFormat
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [HeadlessExperimentalScreenshotParamsFormat]
$creadListPrec :: ReadPrec [HeadlessExperimentalScreenshotParamsFormat]
readPrec :: ReadPrec HeadlessExperimentalScreenshotParamsFormat
$creadPrec :: ReadPrec HeadlessExperimentalScreenshotParamsFormat
readList :: ReadS [HeadlessExperimentalScreenshotParamsFormat]
$creadList :: ReadS [HeadlessExperimentalScreenshotParamsFormat]
readsPrec :: Int -> ReadS HeadlessExperimentalScreenshotParamsFormat
$creadsPrec :: Int -> ReadS HeadlessExperimentalScreenshotParamsFormat
Read)
instance FromJSON HeadlessExperimentalScreenshotParamsFormat where
  parseJSON :: Value -> Parser HeadlessExperimentalScreenshotParamsFormat
parseJSON = String
-> (Text -> Parser HeadlessExperimentalScreenshotParamsFormat)
-> Value
-> Parser HeadlessExperimentalScreenshotParamsFormat
forall a. String -> (Text -> Parser a) -> Value -> Parser a
A.withText String
"HeadlessExperimentalScreenshotParamsFormat" ((Text -> Parser HeadlessExperimentalScreenshotParamsFormat)
 -> Value -> Parser HeadlessExperimentalScreenshotParamsFormat)
-> (Text -> Parser HeadlessExperimentalScreenshotParamsFormat)
-> Value
-> Parser HeadlessExperimentalScreenshotParamsFormat
forall a b. (a -> b) -> a -> b
$ \Text
v -> case Text
v of
    Text
"jpeg" -> HeadlessExperimentalScreenshotParamsFormat
-> Parser HeadlessExperimentalScreenshotParamsFormat
forall (f :: * -> *) a. Applicative f => a -> f a
pure HeadlessExperimentalScreenshotParamsFormat
HeadlessExperimentalScreenshotParamsFormatJpeg
    Text
"png" -> HeadlessExperimentalScreenshotParamsFormat
-> Parser HeadlessExperimentalScreenshotParamsFormat
forall (f :: * -> *) a. Applicative f => a -> f a
pure HeadlessExperimentalScreenshotParamsFormat
HeadlessExperimentalScreenshotParamsFormatPng
    Text
"_" -> String -> Parser HeadlessExperimentalScreenshotParamsFormat
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"failed to parse HeadlessExperimentalScreenshotParamsFormat"
instance ToJSON HeadlessExperimentalScreenshotParamsFormat where
  toJSON :: HeadlessExperimentalScreenshotParamsFormat -> Value
toJSON HeadlessExperimentalScreenshotParamsFormat
v = Text -> Value
A.String (Text -> Value) -> Text -> Value
forall a b. (a -> b) -> a -> b
$ case HeadlessExperimentalScreenshotParamsFormat
v of
    HeadlessExperimentalScreenshotParamsFormat
HeadlessExperimentalScreenshotParamsFormatJpeg -> Text
"jpeg"
    HeadlessExperimentalScreenshotParamsFormat
HeadlessExperimentalScreenshotParamsFormatPng -> Text
"png"
data HeadlessExperimentalScreenshotParams = HeadlessExperimentalScreenshotParams
  {
    -- | Image compression format (defaults to png).
    HeadlessExperimentalScreenshotParams
-> Maybe HeadlessExperimentalScreenshotParamsFormat
headlessExperimentalScreenshotParamsFormat :: Maybe HeadlessExperimentalScreenshotParamsFormat,
    -- | Compression quality from range [0..100] (jpeg only).
    HeadlessExperimentalScreenshotParams -> Maybe Int
headlessExperimentalScreenshotParamsQuality :: Maybe Int
  }
  deriving (HeadlessExperimentalScreenshotParams
-> HeadlessExperimentalScreenshotParams -> Bool
(HeadlessExperimentalScreenshotParams
 -> HeadlessExperimentalScreenshotParams -> Bool)
-> (HeadlessExperimentalScreenshotParams
    -> HeadlessExperimentalScreenshotParams -> Bool)
-> Eq HeadlessExperimentalScreenshotParams
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HeadlessExperimentalScreenshotParams
-> HeadlessExperimentalScreenshotParams -> Bool
$c/= :: HeadlessExperimentalScreenshotParams
-> HeadlessExperimentalScreenshotParams -> Bool
== :: HeadlessExperimentalScreenshotParams
-> HeadlessExperimentalScreenshotParams -> Bool
$c== :: HeadlessExperimentalScreenshotParams
-> HeadlessExperimentalScreenshotParams -> Bool
Eq, Int -> HeadlessExperimentalScreenshotParams -> ShowS
[HeadlessExperimentalScreenshotParams] -> ShowS
HeadlessExperimentalScreenshotParams -> String
(Int -> HeadlessExperimentalScreenshotParams -> ShowS)
-> (HeadlessExperimentalScreenshotParams -> String)
-> ([HeadlessExperimentalScreenshotParams] -> ShowS)
-> Show HeadlessExperimentalScreenshotParams
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [HeadlessExperimentalScreenshotParams] -> ShowS
$cshowList :: [HeadlessExperimentalScreenshotParams] -> ShowS
show :: HeadlessExperimentalScreenshotParams -> String
$cshow :: HeadlessExperimentalScreenshotParams -> String
showsPrec :: Int -> HeadlessExperimentalScreenshotParams -> ShowS
$cshowsPrec :: Int -> HeadlessExperimentalScreenshotParams -> ShowS
Show)
instance FromJSON HeadlessExperimentalScreenshotParams where
  parseJSON :: Value -> Parser HeadlessExperimentalScreenshotParams
parseJSON = String
-> (Object -> Parser HeadlessExperimentalScreenshotParams)
-> Value
-> Parser HeadlessExperimentalScreenshotParams
forall a. String -> (Object -> Parser a) -> Value -> Parser a
A.withObject String
"HeadlessExperimentalScreenshotParams" ((Object -> Parser HeadlessExperimentalScreenshotParams)
 -> Value -> Parser HeadlessExperimentalScreenshotParams)
-> (Object -> Parser HeadlessExperimentalScreenshotParams)
-> Value
-> Parser HeadlessExperimentalScreenshotParams
forall a b. (a -> b) -> a -> b
$ \Object
o -> Maybe HeadlessExperimentalScreenshotParamsFormat
-> Maybe Int -> HeadlessExperimentalScreenshotParams
HeadlessExperimentalScreenshotParams
    (Maybe HeadlessExperimentalScreenshotParamsFormat
 -> Maybe Int -> HeadlessExperimentalScreenshotParams)
-> Parser (Maybe HeadlessExperimentalScreenshotParamsFormat)
-> Parser (Maybe Int -> HeadlessExperimentalScreenshotParams)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object
-> Text
-> Parser (Maybe HeadlessExperimentalScreenshotParamsFormat)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
A..:? Text
"format"
    Parser (Maybe Int -> HeadlessExperimentalScreenshotParams)
-> Parser (Maybe Int)
-> Parser HeadlessExperimentalScreenshotParams
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
A..:? Text
"quality"
instance ToJSON HeadlessExperimentalScreenshotParams where
  toJSON :: HeadlessExperimentalScreenshotParams -> Value
toJSON HeadlessExperimentalScreenshotParams
p = [Pair] -> Value
A.object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes [
    (Text
"format" Text -> HeadlessExperimentalScreenshotParamsFormat -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
A..=) (HeadlessExperimentalScreenshotParamsFormat -> Pair)
-> Maybe HeadlessExperimentalScreenshotParamsFormat -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (HeadlessExperimentalScreenshotParams
-> Maybe HeadlessExperimentalScreenshotParamsFormat
headlessExperimentalScreenshotParamsFormat HeadlessExperimentalScreenshotParams
p),
    (Text
"quality" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
A..=) (Int -> Pair) -> Maybe Int -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (HeadlessExperimentalScreenshotParams -> Maybe Int
headlessExperimentalScreenshotParamsQuality HeadlessExperimentalScreenshotParams
p)
    ]

-- | Sends a BeginFrame to the target and returns when the frame was completed. Optionally captures a
--   screenshot from the resulting frame. Requires that the target was created with enabled
--   BeginFrameControl. Designed for use with --run-all-compositor-stages-before-draw, see also
--   https://goo.gle/chrome-headless-rendering for more background.

-- | Parameters of the 'HeadlessExperimental.beginFrame' command.
data PHeadlessExperimentalBeginFrame = PHeadlessExperimentalBeginFrame
  {
    -- | Timestamp of this BeginFrame in Renderer TimeTicks (milliseconds of uptime). If not set,
    --   the current time will be used.
    PHeadlessExperimentalBeginFrame -> Maybe Double
pHeadlessExperimentalBeginFrameFrameTimeTicks :: Maybe Double,
    -- | The interval between BeginFrames that is reported to the compositor, in milliseconds.
    --   Defaults to a 60 frames/second interval, i.e. about 16.666 milliseconds.
    PHeadlessExperimentalBeginFrame -> Maybe Double
pHeadlessExperimentalBeginFrameInterval :: Maybe Double,
    -- | Whether updates should not be committed and drawn onto the display. False by default. If
    --   true, only side effects of the BeginFrame will be run, such as layout and animations, but
    --   any visual updates may not be visible on the display or in screenshots.
    PHeadlessExperimentalBeginFrame -> Maybe Bool
pHeadlessExperimentalBeginFrameNoDisplayUpdates :: Maybe Bool,
    -- | If set, a screenshot of the frame will be captured and returned in the response. Otherwise,
    --   no screenshot will be captured. Note that capturing a screenshot can fail, for example,
    --   during renderer initialization. In such a case, no screenshot data will be returned.
    PHeadlessExperimentalBeginFrame
-> Maybe HeadlessExperimentalScreenshotParams
pHeadlessExperimentalBeginFrameScreenshot :: Maybe HeadlessExperimentalScreenshotParams
  }
  deriving (PHeadlessExperimentalBeginFrame
-> PHeadlessExperimentalBeginFrame -> Bool
(PHeadlessExperimentalBeginFrame
 -> PHeadlessExperimentalBeginFrame -> Bool)
-> (PHeadlessExperimentalBeginFrame
    -> PHeadlessExperimentalBeginFrame -> Bool)
-> Eq PHeadlessExperimentalBeginFrame
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PHeadlessExperimentalBeginFrame
-> PHeadlessExperimentalBeginFrame -> Bool
$c/= :: PHeadlessExperimentalBeginFrame
-> PHeadlessExperimentalBeginFrame -> Bool
== :: PHeadlessExperimentalBeginFrame
-> PHeadlessExperimentalBeginFrame -> Bool
$c== :: PHeadlessExperimentalBeginFrame
-> PHeadlessExperimentalBeginFrame -> Bool
Eq, Int -> PHeadlessExperimentalBeginFrame -> ShowS
[PHeadlessExperimentalBeginFrame] -> ShowS
PHeadlessExperimentalBeginFrame -> String
(Int -> PHeadlessExperimentalBeginFrame -> ShowS)
-> (PHeadlessExperimentalBeginFrame -> String)
-> ([PHeadlessExperimentalBeginFrame] -> ShowS)
-> Show PHeadlessExperimentalBeginFrame
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PHeadlessExperimentalBeginFrame] -> ShowS
$cshowList :: [PHeadlessExperimentalBeginFrame] -> ShowS
show :: PHeadlessExperimentalBeginFrame -> String
$cshow :: PHeadlessExperimentalBeginFrame -> String
showsPrec :: Int -> PHeadlessExperimentalBeginFrame -> ShowS
$cshowsPrec :: Int -> PHeadlessExperimentalBeginFrame -> ShowS
Show)
pHeadlessExperimentalBeginFrame
  :: PHeadlessExperimentalBeginFrame
pHeadlessExperimentalBeginFrame :: PHeadlessExperimentalBeginFrame
pHeadlessExperimentalBeginFrame
  = Maybe Double
-> Maybe Double
-> Maybe Bool
-> Maybe HeadlessExperimentalScreenshotParams
-> PHeadlessExperimentalBeginFrame
PHeadlessExperimentalBeginFrame
    Maybe Double
forall a. Maybe a
Nothing
    Maybe Double
forall a. Maybe a
Nothing
    Maybe Bool
forall a. Maybe a
Nothing
    Maybe HeadlessExperimentalScreenshotParams
forall a. Maybe a
Nothing
instance ToJSON PHeadlessExperimentalBeginFrame where
  toJSON :: PHeadlessExperimentalBeginFrame -> Value
toJSON PHeadlessExperimentalBeginFrame
p = [Pair] -> Value
A.object ([Pair] -> Value) -> [Pair] -> Value
forall a b. (a -> b) -> a -> b
$ [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
catMaybes [
    (Text
"frameTimeTicks" Text -> Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
A..=) (Double -> Pair) -> Maybe Double -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (PHeadlessExperimentalBeginFrame -> Maybe Double
pHeadlessExperimentalBeginFrameFrameTimeTicks PHeadlessExperimentalBeginFrame
p),
    (Text
"interval" Text -> Double -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
A..=) (Double -> Pair) -> Maybe Double -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (PHeadlessExperimentalBeginFrame -> Maybe Double
pHeadlessExperimentalBeginFrameInterval PHeadlessExperimentalBeginFrame
p),
    (Text
"noDisplayUpdates" Text -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
A..=) (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (PHeadlessExperimentalBeginFrame -> Maybe Bool
pHeadlessExperimentalBeginFrameNoDisplayUpdates PHeadlessExperimentalBeginFrame
p),
    (Text
"screenshot" Text -> HeadlessExperimentalScreenshotParams -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
A..=) (HeadlessExperimentalScreenshotParams -> Pair)
-> Maybe HeadlessExperimentalScreenshotParams -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (PHeadlessExperimentalBeginFrame
-> Maybe HeadlessExperimentalScreenshotParams
pHeadlessExperimentalBeginFrameScreenshot PHeadlessExperimentalBeginFrame
p)
    ]
data HeadlessExperimentalBeginFrame = HeadlessExperimentalBeginFrame
  {
    -- | Whether the BeginFrame resulted in damage and, thus, a new frame was committed to the
    --   display. Reported for diagnostic uses, may be removed in the future.
    HeadlessExperimentalBeginFrame -> Bool
headlessExperimentalBeginFrameHasDamage :: Bool,
    -- | Base64-encoded image data of the screenshot, if one was requested and successfully taken. (Encoded as a base64 string when passed over JSON)
    HeadlessExperimentalBeginFrame -> Maybe Text
headlessExperimentalBeginFrameScreenshotData :: Maybe T.Text
  }
  deriving (HeadlessExperimentalBeginFrame
-> HeadlessExperimentalBeginFrame -> Bool
(HeadlessExperimentalBeginFrame
 -> HeadlessExperimentalBeginFrame -> Bool)
-> (HeadlessExperimentalBeginFrame
    -> HeadlessExperimentalBeginFrame -> Bool)
-> Eq HeadlessExperimentalBeginFrame
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HeadlessExperimentalBeginFrame
-> HeadlessExperimentalBeginFrame -> Bool
$c/= :: HeadlessExperimentalBeginFrame
-> HeadlessExperimentalBeginFrame -> Bool
== :: HeadlessExperimentalBeginFrame
-> HeadlessExperimentalBeginFrame -> Bool
$c== :: HeadlessExperimentalBeginFrame
-> HeadlessExperimentalBeginFrame -> Bool
Eq, Int -> HeadlessExperimentalBeginFrame -> ShowS
[HeadlessExperimentalBeginFrame] -> ShowS
HeadlessExperimentalBeginFrame -> String
(Int -> HeadlessExperimentalBeginFrame -> ShowS)
-> (HeadlessExperimentalBeginFrame -> String)
-> ([HeadlessExperimentalBeginFrame] -> ShowS)
-> Show HeadlessExperimentalBeginFrame
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [HeadlessExperimentalBeginFrame] -> ShowS
$cshowList :: [HeadlessExperimentalBeginFrame] -> ShowS
show :: HeadlessExperimentalBeginFrame -> String
$cshow :: HeadlessExperimentalBeginFrame -> String
showsPrec :: Int -> HeadlessExperimentalBeginFrame -> ShowS
$cshowsPrec :: Int -> HeadlessExperimentalBeginFrame -> ShowS
Show)
instance FromJSON HeadlessExperimentalBeginFrame where
  parseJSON :: Value -> Parser HeadlessExperimentalBeginFrame
parseJSON = String
-> (Object -> Parser HeadlessExperimentalBeginFrame)
-> Value
-> Parser HeadlessExperimentalBeginFrame
forall a. String -> (Object -> Parser a) -> Value -> Parser a
A.withObject String
"HeadlessExperimentalBeginFrame" ((Object -> Parser HeadlessExperimentalBeginFrame)
 -> Value -> Parser HeadlessExperimentalBeginFrame)
-> (Object -> Parser HeadlessExperimentalBeginFrame)
-> Value
-> Parser HeadlessExperimentalBeginFrame
forall a b. (a -> b) -> a -> b
$ \Object
o -> Bool -> Maybe Text -> HeadlessExperimentalBeginFrame
HeadlessExperimentalBeginFrame
    (Bool -> Maybe Text -> HeadlessExperimentalBeginFrame)
-> Parser Bool
-> Parser (Maybe Text -> HeadlessExperimentalBeginFrame)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> Parser Bool
forall a. FromJSON a => Object -> Text -> Parser a
A..: Text
"hasDamage"
    Parser (Maybe Text -> HeadlessExperimentalBeginFrame)
-> Parser (Maybe Text) -> Parser HeadlessExperimentalBeginFrame
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
o Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
A..:? Text
"screenshotData"
instance Command PHeadlessExperimentalBeginFrame where
  type CommandResponse PHeadlessExperimentalBeginFrame = HeadlessExperimentalBeginFrame
  commandName :: Proxy PHeadlessExperimentalBeginFrame -> String
commandName Proxy PHeadlessExperimentalBeginFrame
_ = String
"HeadlessExperimental.beginFrame"

-- | Disables headless events for the target.

-- | Parameters of the 'HeadlessExperimental.disable' command.
data PHeadlessExperimentalDisable = PHeadlessExperimentalDisable
  deriving (PHeadlessExperimentalDisable
-> PHeadlessExperimentalDisable -> Bool
(PHeadlessExperimentalDisable
 -> PHeadlessExperimentalDisable -> Bool)
-> (PHeadlessExperimentalDisable
    -> PHeadlessExperimentalDisable -> Bool)
-> Eq PHeadlessExperimentalDisable
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PHeadlessExperimentalDisable
-> PHeadlessExperimentalDisable -> Bool
$c/= :: PHeadlessExperimentalDisable
-> PHeadlessExperimentalDisable -> Bool
== :: PHeadlessExperimentalDisable
-> PHeadlessExperimentalDisable -> Bool
$c== :: PHeadlessExperimentalDisable
-> PHeadlessExperimentalDisable -> Bool
Eq, Int -> PHeadlessExperimentalDisable -> ShowS
[PHeadlessExperimentalDisable] -> ShowS
PHeadlessExperimentalDisable -> String
(Int -> PHeadlessExperimentalDisable -> ShowS)
-> (PHeadlessExperimentalDisable -> String)
-> ([PHeadlessExperimentalDisable] -> ShowS)
-> Show PHeadlessExperimentalDisable
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PHeadlessExperimentalDisable] -> ShowS
$cshowList :: [PHeadlessExperimentalDisable] -> ShowS
show :: PHeadlessExperimentalDisable -> String
$cshow :: PHeadlessExperimentalDisable -> String
showsPrec :: Int -> PHeadlessExperimentalDisable -> ShowS
$cshowsPrec :: Int -> PHeadlessExperimentalDisable -> ShowS
Show)
pHeadlessExperimentalDisable
  :: PHeadlessExperimentalDisable
pHeadlessExperimentalDisable :: PHeadlessExperimentalDisable
pHeadlessExperimentalDisable
  = PHeadlessExperimentalDisable
PHeadlessExperimentalDisable
instance ToJSON PHeadlessExperimentalDisable where
  toJSON :: PHeadlessExperimentalDisable -> Value
toJSON PHeadlessExperimentalDisable
_ = Value
A.Null
instance Command PHeadlessExperimentalDisable where
  type CommandResponse PHeadlessExperimentalDisable = ()
  commandName :: Proxy PHeadlessExperimentalDisable -> String
commandName Proxy PHeadlessExperimentalDisable
_ = String
"HeadlessExperimental.disable"
  fromJSON :: Proxy PHeadlessExperimentalDisable
-> Value -> Result (CommandResponse PHeadlessExperimentalDisable)
fromJSON = Result () -> Value -> Result ()
forall a b. a -> b -> a
const (Result () -> Value -> Result ())
-> (Proxy PHeadlessExperimentalDisable -> Result ())
-> Proxy PHeadlessExperimentalDisable
-> Value
-> Result ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Result ()
forall a. a -> Result a
A.Success (() -> Result ())
-> (Proxy PHeadlessExperimentalDisable -> ())
-> Proxy PHeadlessExperimentalDisable
-> Result ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Proxy PHeadlessExperimentalDisable -> ()
forall a b. a -> b -> a
const ()

-- | Enables headless events for the target.

-- | Parameters of the 'HeadlessExperimental.enable' command.
data PHeadlessExperimentalEnable = PHeadlessExperimentalEnable
  deriving (PHeadlessExperimentalEnable -> PHeadlessExperimentalEnable -> Bool
(PHeadlessExperimentalEnable
 -> PHeadlessExperimentalEnable -> Bool)
-> (PHeadlessExperimentalEnable
    -> PHeadlessExperimentalEnable -> Bool)
-> Eq PHeadlessExperimentalEnable
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PHeadlessExperimentalEnable -> PHeadlessExperimentalEnable -> Bool
$c/= :: PHeadlessExperimentalEnable -> PHeadlessExperimentalEnable -> Bool
== :: PHeadlessExperimentalEnable -> PHeadlessExperimentalEnable -> Bool
$c== :: PHeadlessExperimentalEnable -> PHeadlessExperimentalEnable -> Bool
Eq, Int -> PHeadlessExperimentalEnable -> ShowS
[PHeadlessExperimentalEnable] -> ShowS
PHeadlessExperimentalEnable -> String
(Int -> PHeadlessExperimentalEnable -> ShowS)
-> (PHeadlessExperimentalEnable -> String)
-> ([PHeadlessExperimentalEnable] -> ShowS)
-> Show PHeadlessExperimentalEnable
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PHeadlessExperimentalEnable] -> ShowS
$cshowList :: [PHeadlessExperimentalEnable] -> ShowS
show :: PHeadlessExperimentalEnable -> String
$cshow :: PHeadlessExperimentalEnable -> String
showsPrec :: Int -> PHeadlessExperimentalEnable -> ShowS
$cshowsPrec :: Int -> PHeadlessExperimentalEnable -> ShowS
Show)
pHeadlessExperimentalEnable
  :: PHeadlessExperimentalEnable
pHeadlessExperimentalEnable :: PHeadlessExperimentalEnable
pHeadlessExperimentalEnable
  = PHeadlessExperimentalEnable
PHeadlessExperimentalEnable
instance ToJSON PHeadlessExperimentalEnable where
  toJSON :: PHeadlessExperimentalEnable -> Value
toJSON PHeadlessExperimentalEnable
_ = Value
A.Null
instance Command PHeadlessExperimentalEnable where
  type CommandResponse PHeadlessExperimentalEnable = ()
  commandName :: Proxy PHeadlessExperimentalEnable -> String
commandName Proxy PHeadlessExperimentalEnable
_ = String
"HeadlessExperimental.enable"
  fromJSON :: Proxy PHeadlessExperimentalEnable
-> Value -> Result (CommandResponse PHeadlessExperimentalEnable)
fromJSON = Result () -> Value -> Result ()
forall a b. a -> b -> a
const (Result () -> Value -> Result ())
-> (Proxy PHeadlessExperimentalEnable -> Result ())
-> Proxy PHeadlessExperimentalEnable
-> Value
-> Result ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Result ()
forall a. a -> Result a
A.Success (() -> Result ())
-> (Proxy PHeadlessExperimentalEnable -> ())
-> Proxy PHeadlessExperimentalEnable
-> Result ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Proxy PHeadlessExperimentalEnable -> ()
forall a b. a -> b -> a
const ()