{-# LANGUAGE OverloadedStrings, RecordWildCards, TupleSections #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE TypeFamilies #-} {- | = Browser The Browser domain defines methods and events for browser managing. = Target Supports additional targets discovery and allows to attach to them. -} module CDP.Domains.BrowserTarget (module CDP.Domains.BrowserTarget) 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 import CDP.Domains.DOMPageNetworkEmulationSecurity as DOMPageNetworkEmulationSecurity -- | Type 'Browser.BrowserContextID'. type BrowserBrowserContextID = T.Text -- | Type 'Browser.WindowID'. type BrowserWindowID = Int -- | Type 'Browser.WindowState'. -- The state of the browser window. data BrowserWindowState = BrowserWindowStateNormal | BrowserWindowStateMinimized | BrowserWindowStateMaximized | BrowserWindowStateFullscreen deriving (Ord, Eq, Show, Read) instance FromJSON BrowserWindowState where parseJSON = A.withText "BrowserWindowState" $ \v -> case v of "normal" -> pure BrowserWindowStateNormal "minimized" -> pure BrowserWindowStateMinimized "maximized" -> pure BrowserWindowStateMaximized "fullscreen" -> pure BrowserWindowStateFullscreen "_" -> fail "failed to parse BrowserWindowState" instance ToJSON BrowserWindowState where toJSON v = A.String $ case v of BrowserWindowStateNormal -> "normal" BrowserWindowStateMinimized -> "minimized" BrowserWindowStateMaximized -> "maximized" BrowserWindowStateFullscreen -> "fullscreen" -- | Type 'Browser.Bounds'. -- Browser window bounds information data BrowserBounds = BrowserBounds { -- | The offset from the left edge of the screen to the window in pixels. browserBoundsLeft :: Maybe Int, -- | The offset from the top edge of the screen to the window in pixels. browserBoundsTop :: Maybe Int, -- | The window width in pixels. browserBoundsWidth :: Maybe Int, -- | The window height in pixels. browserBoundsHeight :: Maybe Int, -- | The window state. Default to normal. browserBoundsWindowState :: Maybe BrowserWindowState } deriving (Eq, Show) instance FromJSON BrowserBounds where parseJSON = A.withObject "BrowserBounds" $ \o -> BrowserBounds <$> o A..:? "left" <*> o A..:? "top" <*> o A..:? "width" <*> o A..:? "height" <*> o A..:? "windowState" instance ToJSON BrowserBounds where toJSON p = A.object $ catMaybes [ ("left" A..=) <$> (browserBoundsLeft p), ("top" A..=) <$> (browserBoundsTop p), ("width" A..=) <$> (browserBoundsWidth p), ("height" A..=) <$> (browserBoundsHeight p), ("windowState" A..=) <$> (browserBoundsWindowState p) ] -- | Type 'Browser.PermissionType'. data BrowserPermissionType = BrowserPermissionTypeAccessibilityEvents | BrowserPermissionTypeAudioCapture | BrowserPermissionTypeBackgroundSync | BrowserPermissionTypeBackgroundFetch | BrowserPermissionTypeClipboardReadWrite | BrowserPermissionTypeClipboardSanitizedWrite | BrowserPermissionTypeDisplayCapture | BrowserPermissionTypeDurableStorage | BrowserPermissionTypeFlash | BrowserPermissionTypeGeolocation | BrowserPermissionTypeMidi | BrowserPermissionTypeMidiSysex | BrowserPermissionTypeNfc | BrowserPermissionTypeNotifications | BrowserPermissionTypePaymentHandler | BrowserPermissionTypePeriodicBackgroundSync | BrowserPermissionTypeProtectedMediaIdentifier | BrowserPermissionTypeSensors | BrowserPermissionTypeVideoCapture | BrowserPermissionTypeVideoCapturePanTiltZoom | BrowserPermissionTypeIdleDetection | BrowserPermissionTypeWakeLockScreen | BrowserPermissionTypeWakeLockSystem deriving (Ord, Eq, Show, Read) instance FromJSON BrowserPermissionType where parseJSON = A.withText "BrowserPermissionType" $ \v -> case v of "accessibilityEvents" -> pure BrowserPermissionTypeAccessibilityEvents "audioCapture" -> pure BrowserPermissionTypeAudioCapture "backgroundSync" -> pure BrowserPermissionTypeBackgroundSync "backgroundFetch" -> pure BrowserPermissionTypeBackgroundFetch "clipboardReadWrite" -> pure BrowserPermissionTypeClipboardReadWrite "clipboardSanitizedWrite" -> pure BrowserPermissionTypeClipboardSanitizedWrite "displayCapture" -> pure BrowserPermissionTypeDisplayCapture "durableStorage" -> pure BrowserPermissionTypeDurableStorage "flash" -> pure BrowserPermissionTypeFlash "geolocation" -> pure BrowserPermissionTypeGeolocation "midi" -> pure BrowserPermissionTypeMidi "midiSysex" -> pure BrowserPermissionTypeMidiSysex "nfc" -> pure BrowserPermissionTypeNfc "notifications" -> pure BrowserPermissionTypeNotifications "paymentHandler" -> pure BrowserPermissionTypePaymentHandler "periodicBackgroundSync" -> pure BrowserPermissionTypePeriodicBackgroundSync "protectedMediaIdentifier" -> pure BrowserPermissionTypeProtectedMediaIdentifier "sensors" -> pure BrowserPermissionTypeSensors "videoCapture" -> pure BrowserPermissionTypeVideoCapture "videoCapturePanTiltZoom" -> pure BrowserPermissionTypeVideoCapturePanTiltZoom "idleDetection" -> pure BrowserPermissionTypeIdleDetection "wakeLockScreen" -> pure BrowserPermissionTypeWakeLockScreen "wakeLockSystem" -> pure BrowserPermissionTypeWakeLockSystem "_" -> fail "failed to parse BrowserPermissionType" instance ToJSON BrowserPermissionType where toJSON v = A.String $ case v of BrowserPermissionTypeAccessibilityEvents -> "accessibilityEvents" BrowserPermissionTypeAudioCapture -> "audioCapture" BrowserPermissionTypeBackgroundSync -> "backgroundSync" BrowserPermissionTypeBackgroundFetch -> "backgroundFetch" BrowserPermissionTypeClipboardReadWrite -> "clipboardReadWrite" BrowserPermissionTypeClipboardSanitizedWrite -> "clipboardSanitizedWrite" BrowserPermissionTypeDisplayCapture -> "displayCapture" BrowserPermissionTypeDurableStorage -> "durableStorage" BrowserPermissionTypeFlash -> "flash" BrowserPermissionTypeGeolocation -> "geolocation" BrowserPermissionTypeMidi -> "midi" BrowserPermissionTypeMidiSysex -> "midiSysex" BrowserPermissionTypeNfc -> "nfc" BrowserPermissionTypeNotifications -> "notifications" BrowserPermissionTypePaymentHandler -> "paymentHandler" BrowserPermissionTypePeriodicBackgroundSync -> "periodicBackgroundSync" BrowserPermissionTypeProtectedMediaIdentifier -> "protectedMediaIdentifier" BrowserPermissionTypeSensors -> "sensors" BrowserPermissionTypeVideoCapture -> "videoCapture" BrowserPermissionTypeVideoCapturePanTiltZoom -> "videoCapturePanTiltZoom" BrowserPermissionTypeIdleDetection -> "idleDetection" BrowserPermissionTypeWakeLockScreen -> "wakeLockScreen" BrowserPermissionTypeWakeLockSystem -> "wakeLockSystem" -- | Type 'Browser.PermissionSetting'. data BrowserPermissionSetting = BrowserPermissionSettingGranted | BrowserPermissionSettingDenied | BrowserPermissionSettingPrompt deriving (Ord, Eq, Show, Read) instance FromJSON BrowserPermissionSetting where parseJSON = A.withText "BrowserPermissionSetting" $ \v -> case v of "granted" -> pure BrowserPermissionSettingGranted "denied" -> pure BrowserPermissionSettingDenied "prompt" -> pure BrowserPermissionSettingPrompt "_" -> fail "failed to parse BrowserPermissionSetting" instance ToJSON BrowserPermissionSetting where toJSON v = A.String $ case v of BrowserPermissionSettingGranted -> "granted" BrowserPermissionSettingDenied -> "denied" BrowserPermissionSettingPrompt -> "prompt" -- | Type 'Browser.PermissionDescriptor'. -- Definition of PermissionDescriptor defined in the Permissions API: -- https://w3c.github.io/permissions/#dictdef-permissiondescriptor. data BrowserPermissionDescriptor = BrowserPermissionDescriptor { -- | Name of permission. -- See https://cs.chromium.org/chromium/src/third_party/blink/renderer/modules/permissions/permission_descriptor.idl for valid permission names. browserPermissionDescriptorName :: T.Text, -- | For "midi" permission, may also specify sysex control. browserPermissionDescriptorSysex :: Maybe Bool, -- | For "push" permission, may specify userVisibleOnly. -- Note that userVisibleOnly = true is the only currently supported type. browserPermissionDescriptorUserVisibleOnly :: Maybe Bool, -- | For "clipboard" permission, may specify allowWithoutSanitization. browserPermissionDescriptorAllowWithoutSanitization :: Maybe Bool, -- | For "camera" permission, may specify panTiltZoom. browserPermissionDescriptorPanTiltZoom :: Maybe Bool } deriving (Eq, Show) instance FromJSON BrowserPermissionDescriptor where parseJSON = A.withObject "BrowserPermissionDescriptor" $ \o -> BrowserPermissionDescriptor <$> o A..: "name" <*> o A..:? "sysex" <*> o A..:? "userVisibleOnly" <*> o A..:? "allowWithoutSanitization" <*> o A..:? "panTiltZoom" instance ToJSON BrowserPermissionDescriptor where toJSON p = A.object $ catMaybes [ ("name" A..=) <$> Just (browserPermissionDescriptorName p), ("sysex" A..=) <$> (browserPermissionDescriptorSysex p), ("userVisibleOnly" A..=) <$> (browserPermissionDescriptorUserVisibleOnly p), ("allowWithoutSanitization" A..=) <$> (browserPermissionDescriptorAllowWithoutSanitization p), ("panTiltZoom" A..=) <$> (browserPermissionDescriptorPanTiltZoom p) ] -- | Type 'Browser.BrowserCommandId'. -- Browser command ids used by executeBrowserCommand. data BrowserBrowserCommandId = BrowserBrowserCommandIdOpenTabSearch | BrowserBrowserCommandIdCloseTabSearch deriving (Ord, Eq, Show, Read) instance FromJSON BrowserBrowserCommandId where parseJSON = A.withText "BrowserBrowserCommandId" $ \v -> case v of "openTabSearch" -> pure BrowserBrowserCommandIdOpenTabSearch "closeTabSearch" -> pure BrowserBrowserCommandIdCloseTabSearch "_" -> fail "failed to parse BrowserBrowserCommandId" instance ToJSON BrowserBrowserCommandId where toJSON v = A.String $ case v of BrowserBrowserCommandIdOpenTabSearch -> "openTabSearch" BrowserBrowserCommandIdCloseTabSearch -> "closeTabSearch" -- | Type 'Browser.Bucket'. -- Chrome histogram bucket. data BrowserBucket = BrowserBucket { -- | Minimum value (inclusive). browserBucketLow :: Int, -- | Maximum value (exclusive). browserBucketHigh :: Int, -- | Number of samples. browserBucketCount :: Int } deriving (Eq, Show) instance FromJSON BrowserBucket where parseJSON = A.withObject "BrowserBucket" $ \o -> BrowserBucket <$> o A..: "low" <*> o A..: "high" <*> o A..: "count" instance ToJSON BrowserBucket where toJSON p = A.object $ catMaybes [ ("low" A..=) <$> Just (browserBucketLow p), ("high" A..=) <$> Just (browserBucketHigh p), ("count" A..=) <$> Just (browserBucketCount p) ] -- | Type 'Browser.Histogram'. -- Chrome histogram. data BrowserHistogram = BrowserHistogram { -- | Name. browserHistogramName :: T.Text, -- | Sum of sample values. browserHistogramSum :: Int, -- | Total number of samples. browserHistogramCount :: Int, -- | Buckets. browserHistogramBuckets :: [BrowserBucket] } deriving (Eq, Show) instance FromJSON BrowserHistogram where parseJSON = A.withObject "BrowserHistogram" $ \o -> BrowserHistogram <$> o A..: "name" <*> o A..: "sum" <*> o A..: "count" <*> o A..: "buckets" instance ToJSON BrowserHistogram where toJSON p = A.object $ catMaybes [ ("name" A..=) <$> Just (browserHistogramName p), ("sum" A..=) <$> Just (browserHistogramSum p), ("count" A..=) <$> Just (browserHistogramCount p), ("buckets" A..=) <$> Just (browserHistogramBuckets p) ] -- | Type of the 'Browser.downloadWillBegin' event. data BrowserDownloadWillBegin = BrowserDownloadWillBegin { -- | Id of the frame that caused the download to begin. browserDownloadWillBeginFrameId :: DOMPageNetworkEmulationSecurity.PageFrameId, -- | Global unique identifier of the download. browserDownloadWillBeginGuid :: T.Text, -- | URL of the resource being downloaded. browserDownloadWillBeginUrl :: T.Text, -- | Suggested file name of the resource (the actual name of the file saved on disk may differ). browserDownloadWillBeginSuggestedFilename :: T.Text } deriving (Eq, Show) instance FromJSON BrowserDownloadWillBegin where parseJSON = A.withObject "BrowserDownloadWillBegin" $ \o -> BrowserDownloadWillBegin <$> o A..: "frameId" <*> o A..: "guid" <*> o A..: "url" <*> o A..: "suggestedFilename" instance Event BrowserDownloadWillBegin where eventName _ = "Browser.downloadWillBegin" -- | Type of the 'Browser.downloadProgress' event. data BrowserDownloadProgressState = BrowserDownloadProgressStateInProgress | BrowserDownloadProgressStateCompleted | BrowserDownloadProgressStateCanceled deriving (Ord, Eq, Show, Read) instance FromJSON BrowserDownloadProgressState where parseJSON = A.withText "BrowserDownloadProgressState" $ \v -> case v of "inProgress" -> pure BrowserDownloadProgressStateInProgress "completed" -> pure BrowserDownloadProgressStateCompleted "canceled" -> pure BrowserDownloadProgressStateCanceled "_" -> fail "failed to parse BrowserDownloadProgressState" instance ToJSON BrowserDownloadProgressState where toJSON v = A.String $ case v of BrowserDownloadProgressStateInProgress -> "inProgress" BrowserDownloadProgressStateCompleted -> "completed" BrowserDownloadProgressStateCanceled -> "canceled" data BrowserDownloadProgress = BrowserDownloadProgress { -- | Global unique identifier of the download. browserDownloadProgressGuid :: T.Text, -- | Total expected bytes to download. browserDownloadProgressTotalBytes :: Double, -- | Total bytes received. browserDownloadProgressReceivedBytes :: Double, -- | Download status. browserDownloadProgressState :: BrowserDownloadProgressState } deriving (Eq, Show) instance FromJSON BrowserDownloadProgress where parseJSON = A.withObject "BrowserDownloadProgress" $ \o -> BrowserDownloadProgress <$> o A..: "guid" <*> o A..: "totalBytes" <*> o A..: "receivedBytes" <*> o A..: "state" instance Event BrowserDownloadProgress where eventName _ = "Browser.downloadProgress" -- | Set permission settings for given origin. -- | Parameters of the 'Browser.setPermission' command. data PBrowserSetPermission = PBrowserSetPermission { -- | Descriptor of permission to override. pBrowserSetPermissionPermission :: BrowserPermissionDescriptor, -- | Setting of the permission. pBrowserSetPermissionSetting :: BrowserPermissionSetting, -- | Origin the permission applies to, all origins if not specified. pBrowserSetPermissionOrigin :: Maybe T.Text, -- | Context to override. When omitted, default browser context is used. pBrowserSetPermissionBrowserContextId :: Maybe BrowserBrowserContextID } deriving (Eq, Show) pBrowserSetPermission {- -- | Descriptor of permission to override. -} :: BrowserPermissionDescriptor {- -- | Setting of the permission. -} -> BrowserPermissionSetting -> PBrowserSetPermission pBrowserSetPermission arg_pBrowserSetPermissionPermission arg_pBrowserSetPermissionSetting = PBrowserSetPermission arg_pBrowserSetPermissionPermission arg_pBrowserSetPermissionSetting Nothing Nothing instance ToJSON PBrowserSetPermission where toJSON p = A.object $ catMaybes [ ("permission" A..=) <$> Just (pBrowserSetPermissionPermission p), ("setting" A..=) <$> Just (pBrowserSetPermissionSetting p), ("origin" A..=) <$> (pBrowserSetPermissionOrigin p), ("browserContextId" A..=) <$> (pBrowserSetPermissionBrowserContextId p) ] instance Command PBrowserSetPermission where type CommandResponse PBrowserSetPermission = () commandName _ = "Browser.setPermission" fromJSON = const . A.Success . const () -- | Grant specific permissions to the given origin and reject all others. -- | Parameters of the 'Browser.grantPermissions' command. data PBrowserGrantPermissions = PBrowserGrantPermissions { pBrowserGrantPermissionsPermissions :: [BrowserPermissionType], -- | Origin the permission applies to, all origins if not specified. pBrowserGrantPermissionsOrigin :: Maybe T.Text, -- | BrowserContext to override permissions. When omitted, default browser context is used. pBrowserGrantPermissionsBrowserContextId :: Maybe BrowserBrowserContextID } deriving (Eq, Show) pBrowserGrantPermissions :: [BrowserPermissionType] -> PBrowserGrantPermissions pBrowserGrantPermissions arg_pBrowserGrantPermissionsPermissions = PBrowserGrantPermissions arg_pBrowserGrantPermissionsPermissions Nothing Nothing instance ToJSON PBrowserGrantPermissions where toJSON p = A.object $ catMaybes [ ("permissions" A..=) <$> Just (pBrowserGrantPermissionsPermissions p), ("origin" A..=) <$> (pBrowserGrantPermissionsOrigin p), ("browserContextId" A..=) <$> (pBrowserGrantPermissionsBrowserContextId p) ] instance Command PBrowserGrantPermissions where type CommandResponse PBrowserGrantPermissions = () commandName _ = "Browser.grantPermissions" fromJSON = const . A.Success . const () -- | Reset all permission management for all origins. -- | Parameters of the 'Browser.resetPermissions' command. data PBrowserResetPermissions = PBrowserResetPermissions { -- | BrowserContext to reset permissions. When omitted, default browser context is used. pBrowserResetPermissionsBrowserContextId :: Maybe BrowserBrowserContextID } deriving (Eq, Show) pBrowserResetPermissions :: PBrowserResetPermissions pBrowserResetPermissions = PBrowserResetPermissions Nothing instance ToJSON PBrowserResetPermissions where toJSON p = A.object $ catMaybes [ ("browserContextId" A..=) <$> (pBrowserResetPermissionsBrowserContextId p) ] instance Command PBrowserResetPermissions where type CommandResponse PBrowserResetPermissions = () commandName _ = "Browser.resetPermissions" fromJSON = const . A.Success . const () -- | Set the behavior when downloading a file. -- | Parameters of the 'Browser.setDownloadBehavior' command. data PBrowserSetDownloadBehaviorBehavior = PBrowserSetDownloadBehaviorBehaviorDeny | PBrowserSetDownloadBehaviorBehaviorAllow | PBrowserSetDownloadBehaviorBehaviorAllowAndName | PBrowserSetDownloadBehaviorBehaviorDefault deriving (Ord, Eq, Show, Read) instance FromJSON PBrowserSetDownloadBehaviorBehavior where parseJSON = A.withText "PBrowserSetDownloadBehaviorBehavior" $ \v -> case v of "deny" -> pure PBrowserSetDownloadBehaviorBehaviorDeny "allow" -> pure PBrowserSetDownloadBehaviorBehaviorAllow "allowAndName" -> pure PBrowserSetDownloadBehaviorBehaviorAllowAndName "default" -> pure PBrowserSetDownloadBehaviorBehaviorDefault "_" -> fail "failed to parse PBrowserSetDownloadBehaviorBehavior" instance ToJSON PBrowserSetDownloadBehaviorBehavior where toJSON v = A.String $ case v of PBrowserSetDownloadBehaviorBehaviorDeny -> "deny" PBrowserSetDownloadBehaviorBehaviorAllow -> "allow" PBrowserSetDownloadBehaviorBehaviorAllowAndName -> "allowAndName" PBrowserSetDownloadBehaviorBehaviorDefault -> "default" data PBrowserSetDownloadBehavior = PBrowserSetDownloadBehavior { -- | Whether to allow all or deny all download requests, or use default Chrome behavior if -- available (otherwise deny). |allowAndName| allows download and names files according to -- their dowmload guids. pBrowserSetDownloadBehaviorBehavior :: PBrowserSetDownloadBehaviorBehavior, -- | BrowserContext to set download behavior. When omitted, default browser context is used. pBrowserSetDownloadBehaviorBrowserContextId :: Maybe BrowserBrowserContextID, -- | The default path to save downloaded files to. This is required if behavior is set to 'allow' -- or 'allowAndName'. pBrowserSetDownloadBehaviorDownloadPath :: Maybe T.Text, -- | Whether to emit download events (defaults to false). pBrowserSetDownloadBehaviorEventsEnabled :: Maybe Bool } deriving (Eq, Show) pBrowserSetDownloadBehavior {- -- | Whether to allow all or deny all download requests, or use default Chrome behavior if -- available (otherwise deny). |allowAndName| allows download and names files according to -- their dowmload guids. -} :: PBrowserSetDownloadBehaviorBehavior -> PBrowserSetDownloadBehavior pBrowserSetDownloadBehavior arg_pBrowserSetDownloadBehaviorBehavior = PBrowserSetDownloadBehavior arg_pBrowserSetDownloadBehaviorBehavior Nothing Nothing Nothing instance ToJSON PBrowserSetDownloadBehavior where toJSON p = A.object $ catMaybes [ ("behavior" A..=) <$> Just (pBrowserSetDownloadBehaviorBehavior p), ("browserContextId" A..=) <$> (pBrowserSetDownloadBehaviorBrowserContextId p), ("downloadPath" A..=) <$> (pBrowserSetDownloadBehaviorDownloadPath p), ("eventsEnabled" A..=) <$> (pBrowserSetDownloadBehaviorEventsEnabled p) ] instance Command PBrowserSetDownloadBehavior where type CommandResponse PBrowserSetDownloadBehavior = () commandName _ = "Browser.setDownloadBehavior" fromJSON = const . A.Success . const () -- | Cancel a download if in progress -- | Parameters of the 'Browser.cancelDownload' command. data PBrowserCancelDownload = PBrowserCancelDownload { -- | Global unique identifier of the download. pBrowserCancelDownloadGuid :: T.Text, -- | BrowserContext to perform the action in. When omitted, default browser context is used. pBrowserCancelDownloadBrowserContextId :: Maybe BrowserBrowserContextID } deriving (Eq, Show) pBrowserCancelDownload {- -- | Global unique identifier of the download. -} :: T.Text -> PBrowserCancelDownload pBrowserCancelDownload arg_pBrowserCancelDownloadGuid = PBrowserCancelDownload arg_pBrowserCancelDownloadGuid Nothing instance ToJSON PBrowserCancelDownload where toJSON p = A.object $ catMaybes [ ("guid" A..=) <$> Just (pBrowserCancelDownloadGuid p), ("browserContextId" A..=) <$> (pBrowserCancelDownloadBrowserContextId p) ] instance Command PBrowserCancelDownload where type CommandResponse PBrowserCancelDownload = () commandName _ = "Browser.cancelDownload" fromJSON = const . A.Success . const () -- | Close browser gracefully. -- | Parameters of the 'Browser.close' command. data PBrowserClose = PBrowserClose deriving (Eq, Show) pBrowserClose :: PBrowserClose pBrowserClose = PBrowserClose instance ToJSON PBrowserClose where toJSON _ = A.Null instance Command PBrowserClose where type CommandResponse PBrowserClose = () commandName _ = "Browser.close" fromJSON = const . A.Success . const () -- | Crashes browser on the main thread. -- | Parameters of the 'Browser.crash' command. data PBrowserCrash = PBrowserCrash deriving (Eq, Show) pBrowserCrash :: PBrowserCrash pBrowserCrash = PBrowserCrash instance ToJSON PBrowserCrash where toJSON _ = A.Null instance Command PBrowserCrash where type CommandResponse PBrowserCrash = () commandName _ = "Browser.crash" fromJSON = const . A.Success . const () -- | Crashes GPU process. -- | Parameters of the 'Browser.crashGpuProcess' command. data PBrowserCrashGpuProcess = PBrowserCrashGpuProcess deriving (Eq, Show) pBrowserCrashGpuProcess :: PBrowserCrashGpuProcess pBrowserCrashGpuProcess = PBrowserCrashGpuProcess instance ToJSON PBrowserCrashGpuProcess where toJSON _ = A.Null instance Command PBrowserCrashGpuProcess where type CommandResponse PBrowserCrashGpuProcess = () commandName _ = "Browser.crashGpuProcess" fromJSON = const . A.Success . const () -- | Returns version information. -- | Parameters of the 'Browser.getVersion' command. data PBrowserGetVersion = PBrowserGetVersion deriving (Eq, Show) pBrowserGetVersion :: PBrowserGetVersion pBrowserGetVersion = PBrowserGetVersion instance ToJSON PBrowserGetVersion where toJSON _ = A.Null data BrowserGetVersion = BrowserGetVersion { -- | Protocol version. browserGetVersionProtocolVersion :: T.Text, -- | Product name. browserGetVersionProduct :: T.Text, -- | Product revision. browserGetVersionRevision :: T.Text, -- | User-Agent. browserGetVersionUserAgent :: T.Text, -- | V8 version. browserGetVersionJsVersion :: T.Text } deriving (Eq, Show) instance FromJSON BrowserGetVersion where parseJSON = A.withObject "BrowserGetVersion" $ \o -> BrowserGetVersion <$> o A..: "protocolVersion" <*> o A..: "product" <*> o A..: "revision" <*> o A..: "userAgent" <*> o A..: "jsVersion" instance Command PBrowserGetVersion where type CommandResponse PBrowserGetVersion = BrowserGetVersion commandName _ = "Browser.getVersion" -- | Returns the command line switches for the browser process if, and only if -- --enable-automation is on the commandline. -- | Parameters of the 'Browser.getBrowserCommandLine' command. data PBrowserGetBrowserCommandLine = PBrowserGetBrowserCommandLine deriving (Eq, Show) pBrowserGetBrowserCommandLine :: PBrowserGetBrowserCommandLine pBrowserGetBrowserCommandLine = PBrowserGetBrowserCommandLine instance ToJSON PBrowserGetBrowserCommandLine where toJSON _ = A.Null data BrowserGetBrowserCommandLine = BrowserGetBrowserCommandLine { -- | Commandline parameters browserGetBrowserCommandLineArguments :: [T.Text] } deriving (Eq, Show) instance FromJSON BrowserGetBrowserCommandLine where parseJSON = A.withObject "BrowserGetBrowserCommandLine" $ \o -> BrowserGetBrowserCommandLine <$> o A..: "arguments" instance Command PBrowserGetBrowserCommandLine where type CommandResponse PBrowserGetBrowserCommandLine = BrowserGetBrowserCommandLine commandName _ = "Browser.getBrowserCommandLine" -- | Get Chrome histograms. -- | Parameters of the 'Browser.getHistograms' command. data PBrowserGetHistograms = PBrowserGetHistograms { -- | Requested substring in name. Only histograms which have query as a -- substring in their name are extracted. An empty or absent query returns -- all histograms. pBrowserGetHistogramsQuery :: Maybe T.Text, -- | If true, retrieve delta since last call. pBrowserGetHistogramsDelta :: Maybe Bool } deriving (Eq, Show) pBrowserGetHistograms :: PBrowserGetHistograms pBrowserGetHistograms = PBrowserGetHistograms Nothing Nothing instance ToJSON PBrowserGetHistograms where toJSON p = A.object $ catMaybes [ ("query" A..=) <$> (pBrowserGetHistogramsQuery p), ("delta" A..=) <$> (pBrowserGetHistogramsDelta p) ] data BrowserGetHistograms = BrowserGetHistograms { -- | Histograms. browserGetHistogramsHistograms :: [BrowserHistogram] } deriving (Eq, Show) instance FromJSON BrowserGetHistograms where parseJSON = A.withObject "BrowserGetHistograms" $ \o -> BrowserGetHistograms <$> o A..: "histograms" instance Command PBrowserGetHistograms where type CommandResponse PBrowserGetHistograms = BrowserGetHistograms commandName _ = "Browser.getHistograms" -- | Get a Chrome histogram by name. -- | Parameters of the 'Browser.getHistogram' command. data PBrowserGetHistogram = PBrowserGetHistogram { -- | Requested histogram name. pBrowserGetHistogramName :: T.Text, -- | If true, retrieve delta since last call. pBrowserGetHistogramDelta :: Maybe Bool } deriving (Eq, Show) pBrowserGetHistogram {- -- | Requested histogram name. -} :: T.Text -> PBrowserGetHistogram pBrowserGetHistogram arg_pBrowserGetHistogramName = PBrowserGetHistogram arg_pBrowserGetHistogramName Nothing instance ToJSON PBrowserGetHistogram where toJSON p = A.object $ catMaybes [ ("name" A..=) <$> Just (pBrowserGetHistogramName p), ("delta" A..=) <$> (pBrowserGetHistogramDelta p) ] data BrowserGetHistogram = BrowserGetHistogram { -- | Histogram. browserGetHistogramHistogram :: BrowserHistogram } deriving (Eq, Show) instance FromJSON BrowserGetHistogram where parseJSON = A.withObject "BrowserGetHistogram" $ \o -> BrowserGetHistogram <$> o A..: "histogram" instance Command PBrowserGetHistogram where type CommandResponse PBrowserGetHistogram = BrowserGetHistogram commandName _ = "Browser.getHistogram" -- | Get position and size of the browser window. -- | Parameters of the 'Browser.getWindowBounds' command. data PBrowserGetWindowBounds = PBrowserGetWindowBounds { -- | Browser window id. pBrowserGetWindowBoundsWindowId :: BrowserWindowID } deriving (Eq, Show) pBrowserGetWindowBounds {- -- | Browser window id. -} :: BrowserWindowID -> PBrowserGetWindowBounds pBrowserGetWindowBounds arg_pBrowserGetWindowBoundsWindowId = PBrowserGetWindowBounds arg_pBrowserGetWindowBoundsWindowId instance ToJSON PBrowserGetWindowBounds where toJSON p = A.object $ catMaybes [ ("windowId" A..=) <$> Just (pBrowserGetWindowBoundsWindowId p) ] data BrowserGetWindowBounds = BrowserGetWindowBounds { -- | Bounds information of the window. When window state is 'minimized', the restored window -- position and size are returned. browserGetWindowBoundsBounds :: BrowserBounds } deriving (Eq, Show) instance FromJSON BrowserGetWindowBounds where parseJSON = A.withObject "BrowserGetWindowBounds" $ \o -> BrowserGetWindowBounds <$> o A..: "bounds" instance Command PBrowserGetWindowBounds where type CommandResponse PBrowserGetWindowBounds = BrowserGetWindowBounds commandName _ = "Browser.getWindowBounds" -- | Get the browser window that contains the devtools target. -- | Parameters of the 'Browser.getWindowForTarget' command. data PBrowserGetWindowForTarget = PBrowserGetWindowForTarget { -- | Devtools agent host id. If called as a part of the session, associated targetId is used. pBrowserGetWindowForTargetTargetId :: Maybe TargetTargetID } deriving (Eq, Show) pBrowserGetWindowForTarget :: PBrowserGetWindowForTarget pBrowserGetWindowForTarget = PBrowserGetWindowForTarget Nothing instance ToJSON PBrowserGetWindowForTarget where toJSON p = A.object $ catMaybes [ ("targetId" A..=) <$> (pBrowserGetWindowForTargetTargetId p) ] data BrowserGetWindowForTarget = BrowserGetWindowForTarget { -- | Browser window id. browserGetWindowForTargetWindowId :: BrowserWindowID, -- | Bounds information of the window. When window state is 'minimized', the restored window -- position and size are returned. browserGetWindowForTargetBounds :: BrowserBounds } deriving (Eq, Show) instance FromJSON BrowserGetWindowForTarget where parseJSON = A.withObject "BrowserGetWindowForTarget" $ \o -> BrowserGetWindowForTarget <$> o A..: "windowId" <*> o A..: "bounds" instance Command PBrowserGetWindowForTarget where type CommandResponse PBrowserGetWindowForTarget = BrowserGetWindowForTarget commandName _ = "Browser.getWindowForTarget" -- | Set position and/or size of the browser window. -- | Parameters of the 'Browser.setWindowBounds' command. data PBrowserSetWindowBounds = PBrowserSetWindowBounds { -- | Browser window id. pBrowserSetWindowBoundsWindowId :: BrowserWindowID, -- | New window bounds. The 'minimized', 'maximized' and 'fullscreen' states cannot be combined -- with 'left', 'top', 'width' or 'height'. Leaves unspecified fields unchanged. pBrowserSetWindowBoundsBounds :: BrowserBounds } deriving (Eq, Show) pBrowserSetWindowBounds {- -- | Browser window id. -} :: BrowserWindowID {- -- | New window bounds. The 'minimized', 'maximized' and 'fullscreen' states cannot be combined -- with 'left', 'top', 'width' or 'height'. Leaves unspecified fields unchanged. -} -> BrowserBounds -> PBrowserSetWindowBounds pBrowserSetWindowBounds arg_pBrowserSetWindowBoundsWindowId arg_pBrowserSetWindowBoundsBounds = PBrowserSetWindowBounds arg_pBrowserSetWindowBoundsWindowId arg_pBrowserSetWindowBoundsBounds instance ToJSON PBrowserSetWindowBounds where toJSON p = A.object $ catMaybes [ ("windowId" A..=) <$> Just (pBrowserSetWindowBoundsWindowId p), ("bounds" A..=) <$> Just (pBrowserSetWindowBoundsBounds p) ] instance Command PBrowserSetWindowBounds where type CommandResponse PBrowserSetWindowBounds = () commandName _ = "Browser.setWindowBounds" fromJSON = const . A.Success . const () -- | Set dock tile details, platform-specific. -- | Parameters of the 'Browser.setDockTile' command. data PBrowserSetDockTile = PBrowserSetDockTile { pBrowserSetDockTileBadgeLabel :: Maybe T.Text, -- | Png encoded image. (Encoded as a base64 string when passed over JSON) pBrowserSetDockTileImage :: Maybe T.Text } deriving (Eq, Show) pBrowserSetDockTile :: PBrowserSetDockTile pBrowserSetDockTile = PBrowserSetDockTile Nothing Nothing instance ToJSON PBrowserSetDockTile where toJSON p = A.object $ catMaybes [ ("badgeLabel" A..=) <$> (pBrowserSetDockTileBadgeLabel p), ("image" A..=) <$> (pBrowserSetDockTileImage p) ] instance Command PBrowserSetDockTile where type CommandResponse PBrowserSetDockTile = () commandName _ = "Browser.setDockTile" fromJSON = const . A.Success . const () -- | Invoke custom browser commands used by telemetry. -- | Parameters of the 'Browser.executeBrowserCommand' command. data PBrowserExecuteBrowserCommand = PBrowserExecuteBrowserCommand { pBrowserExecuteBrowserCommandCommandId :: BrowserBrowserCommandId } deriving (Eq, Show) pBrowserExecuteBrowserCommand :: BrowserBrowserCommandId -> PBrowserExecuteBrowserCommand pBrowserExecuteBrowserCommand arg_pBrowserExecuteBrowserCommandCommandId = PBrowserExecuteBrowserCommand arg_pBrowserExecuteBrowserCommandCommandId instance ToJSON PBrowserExecuteBrowserCommand where toJSON p = A.object $ catMaybes [ ("commandId" A..=) <$> Just (pBrowserExecuteBrowserCommandCommandId p) ] instance Command PBrowserExecuteBrowserCommand where type CommandResponse PBrowserExecuteBrowserCommand = () commandName _ = "Browser.executeBrowserCommand" fromJSON = const . A.Success . const () -- | Type 'Target.TargetID'. type TargetTargetID = T.Text -- | Type 'Target.SessionID'. -- Unique identifier of attached debugging session. type TargetSessionID = T.Text -- | Type 'Target.TargetInfo'. data TargetTargetInfo = TargetTargetInfo { targetTargetInfoTargetId :: TargetTargetID, targetTargetInfoType :: T.Text, targetTargetInfoTitle :: T.Text, targetTargetInfoUrl :: T.Text, -- | Whether the target has an attached client. targetTargetInfoAttached :: Bool, -- | Opener target Id targetTargetInfoOpenerId :: Maybe TargetTargetID, -- | Whether the target has access to the originating window. targetTargetInfoCanAccessOpener :: Bool, -- | Frame id of originating window (is only set if target has an opener). targetTargetInfoOpenerFrameId :: Maybe DOMPageNetworkEmulationSecurity.PageFrameId, targetTargetInfoBrowserContextId :: Maybe BrowserBrowserContextID, -- | Provides additional details for specific target types. For example, for -- the type of "page", this may be set to "portal" or "prerender". targetTargetInfoSubtype :: Maybe T.Text } deriving (Eq, Show) instance FromJSON TargetTargetInfo where parseJSON = A.withObject "TargetTargetInfo" $ \o -> TargetTargetInfo <$> o A..: "targetId" <*> o A..: "type" <*> o A..: "title" <*> o A..: "url" <*> o A..: "attached" <*> o A..:? "openerId" <*> o A..: "canAccessOpener" <*> o A..:? "openerFrameId" <*> o A..:? "browserContextId" <*> o A..:? "subtype" instance ToJSON TargetTargetInfo where toJSON p = A.object $ catMaybes [ ("targetId" A..=) <$> Just (targetTargetInfoTargetId p), ("type" A..=) <$> Just (targetTargetInfoType p), ("title" A..=) <$> Just (targetTargetInfoTitle p), ("url" A..=) <$> Just (targetTargetInfoUrl p), ("attached" A..=) <$> Just (targetTargetInfoAttached p), ("openerId" A..=) <$> (targetTargetInfoOpenerId p), ("canAccessOpener" A..=) <$> Just (targetTargetInfoCanAccessOpener p), ("openerFrameId" A..=) <$> (targetTargetInfoOpenerFrameId p), ("browserContextId" A..=) <$> (targetTargetInfoBrowserContextId p), ("subtype" A..=) <$> (targetTargetInfoSubtype p) ] -- | Type 'Target.FilterEntry'. -- A filter used by target query/discovery/auto-attach operations. data TargetFilterEntry = TargetFilterEntry { -- | If set, causes exclusion of mathcing targets from the list. targetFilterEntryExclude :: Maybe Bool, -- | If not present, matches any type. targetFilterEntryType :: Maybe T.Text } deriving (Eq, Show) instance FromJSON TargetFilterEntry where parseJSON = A.withObject "TargetFilterEntry" $ \o -> TargetFilterEntry <$> o A..:? "exclude" <*> o A..:? "type" instance ToJSON TargetFilterEntry where toJSON p = A.object $ catMaybes [ ("exclude" A..=) <$> (targetFilterEntryExclude p), ("type" A..=) <$> (targetFilterEntryType p) ] -- | Type 'Target.TargetFilter'. -- The entries in TargetFilter are matched sequentially against targets and -- the first entry that matches determines if the target is included or not, -- depending on the value of `exclude` field in the entry. -- If filter is not specified, the one assumed is -- [{type: "browser", exclude: true}, {type: "tab", exclude: true}, {}] -- (i.e. include everything but `browser` and `tab`). type TargetTargetFilter = [TargetFilterEntry] -- | Type 'Target.RemoteLocation'. data TargetRemoteLocation = TargetRemoteLocation { targetRemoteLocationHost :: T.Text, targetRemoteLocationPort :: Int } deriving (Eq, Show) instance FromJSON TargetRemoteLocation where parseJSON = A.withObject "TargetRemoteLocation" $ \o -> TargetRemoteLocation <$> o A..: "host" <*> o A..: "port" instance ToJSON TargetRemoteLocation where toJSON p = A.object $ catMaybes [ ("host" A..=) <$> Just (targetRemoteLocationHost p), ("port" A..=) <$> Just (targetRemoteLocationPort p) ] -- | Type of the 'Target.attachedToTarget' event. data TargetAttachedToTarget = TargetAttachedToTarget { -- | Identifier assigned to the session used to send/receive messages. targetAttachedToTargetSessionId :: TargetSessionID, targetAttachedToTargetTargetInfo :: TargetTargetInfo, targetAttachedToTargetWaitingForDebugger :: Bool } deriving (Eq, Show) instance FromJSON TargetAttachedToTarget where parseJSON = A.withObject "TargetAttachedToTarget" $ \o -> TargetAttachedToTarget <$> o A..: "sessionId" <*> o A..: "targetInfo" <*> o A..: "waitingForDebugger" instance Event TargetAttachedToTarget where eventName _ = "Target.attachedToTarget" -- | Type of the 'Target.detachedFromTarget' event. data TargetDetachedFromTarget = TargetDetachedFromTarget { -- | Detached session identifier. targetDetachedFromTargetSessionId :: TargetSessionID } deriving (Eq, Show) instance FromJSON TargetDetachedFromTarget where parseJSON = A.withObject "TargetDetachedFromTarget" $ \o -> TargetDetachedFromTarget <$> o A..: "sessionId" instance Event TargetDetachedFromTarget where eventName _ = "Target.detachedFromTarget" -- | Type of the 'Target.receivedMessageFromTarget' event. data TargetReceivedMessageFromTarget = TargetReceivedMessageFromTarget { -- | Identifier of a session which sends a message. targetReceivedMessageFromTargetSessionId :: TargetSessionID, targetReceivedMessageFromTargetMessage :: T.Text } deriving (Eq, Show) instance FromJSON TargetReceivedMessageFromTarget where parseJSON = A.withObject "TargetReceivedMessageFromTarget" $ \o -> TargetReceivedMessageFromTarget <$> o A..: "sessionId" <*> o A..: "message" instance Event TargetReceivedMessageFromTarget where eventName _ = "Target.receivedMessageFromTarget" -- | Type of the 'Target.targetCreated' event. data TargetTargetCreated = TargetTargetCreated { targetTargetCreatedTargetInfo :: TargetTargetInfo } deriving (Eq, Show) instance FromJSON TargetTargetCreated where parseJSON = A.withObject "TargetTargetCreated" $ \o -> TargetTargetCreated <$> o A..: "targetInfo" instance Event TargetTargetCreated where eventName _ = "Target.targetCreated" -- | Type of the 'Target.targetDestroyed' event. data TargetTargetDestroyed = TargetTargetDestroyed { targetTargetDestroyedTargetId :: TargetTargetID } deriving (Eq, Show) instance FromJSON TargetTargetDestroyed where parseJSON = A.withObject "TargetTargetDestroyed" $ \o -> TargetTargetDestroyed <$> o A..: "targetId" instance Event TargetTargetDestroyed where eventName _ = "Target.targetDestroyed" -- | Type of the 'Target.targetCrashed' event. data TargetTargetCrashed = TargetTargetCrashed { targetTargetCrashedTargetId :: TargetTargetID, -- | Termination status type. targetTargetCrashedStatus :: T.Text, -- | Termination error code. targetTargetCrashedErrorCode :: Int } deriving (Eq, Show) instance FromJSON TargetTargetCrashed where parseJSON = A.withObject "TargetTargetCrashed" $ \o -> TargetTargetCrashed <$> o A..: "targetId" <*> o A..: "status" <*> o A..: "errorCode" instance Event TargetTargetCrashed where eventName _ = "Target.targetCrashed" -- | Type of the 'Target.targetInfoChanged' event. data TargetTargetInfoChanged = TargetTargetInfoChanged { targetTargetInfoChangedTargetInfo :: TargetTargetInfo } deriving (Eq, Show) instance FromJSON TargetTargetInfoChanged where parseJSON = A.withObject "TargetTargetInfoChanged" $ \o -> TargetTargetInfoChanged <$> o A..: "targetInfo" instance Event TargetTargetInfoChanged where eventName _ = "Target.targetInfoChanged" -- | Activates (focuses) the target. -- | Parameters of the 'Target.activateTarget' command. data PTargetActivateTarget = PTargetActivateTarget { pTargetActivateTargetTargetId :: TargetTargetID } deriving (Eq, Show) pTargetActivateTarget :: TargetTargetID -> PTargetActivateTarget pTargetActivateTarget arg_pTargetActivateTargetTargetId = PTargetActivateTarget arg_pTargetActivateTargetTargetId instance ToJSON PTargetActivateTarget where toJSON p = A.object $ catMaybes [ ("targetId" A..=) <$> Just (pTargetActivateTargetTargetId p) ] instance Command PTargetActivateTarget where type CommandResponse PTargetActivateTarget = () commandName _ = "Target.activateTarget" fromJSON = const . A.Success . const () -- | Attaches to the target with given id. -- | Parameters of the 'Target.attachToTarget' command. data PTargetAttachToTarget = PTargetAttachToTarget { pTargetAttachToTargetTargetId :: TargetTargetID, -- | Enables "flat" access to the session via specifying sessionId attribute in the commands. -- We plan to make this the default, deprecate non-flattened mode, -- and eventually retire it. See crbug.com/991325. pTargetAttachToTargetFlatten :: Maybe Bool } deriving (Eq, Show) pTargetAttachToTarget :: TargetTargetID -> PTargetAttachToTarget pTargetAttachToTarget arg_pTargetAttachToTargetTargetId = PTargetAttachToTarget arg_pTargetAttachToTargetTargetId Nothing instance ToJSON PTargetAttachToTarget where toJSON p = A.object $ catMaybes [ ("targetId" A..=) <$> Just (pTargetAttachToTargetTargetId p), ("flatten" A..=) <$> (pTargetAttachToTargetFlatten p) ] data TargetAttachToTarget = TargetAttachToTarget { -- | Id assigned to the session. targetAttachToTargetSessionId :: TargetSessionID } deriving (Eq, Show) instance FromJSON TargetAttachToTarget where parseJSON = A.withObject "TargetAttachToTarget" $ \o -> TargetAttachToTarget <$> o A..: "sessionId" instance Command PTargetAttachToTarget where type CommandResponse PTargetAttachToTarget = TargetAttachToTarget commandName _ = "Target.attachToTarget" -- | Attaches to the browser target, only uses flat sessionId mode. -- | Parameters of the 'Target.attachToBrowserTarget' command. data PTargetAttachToBrowserTarget = PTargetAttachToBrowserTarget deriving (Eq, Show) pTargetAttachToBrowserTarget :: PTargetAttachToBrowserTarget pTargetAttachToBrowserTarget = PTargetAttachToBrowserTarget instance ToJSON PTargetAttachToBrowserTarget where toJSON _ = A.Null data TargetAttachToBrowserTarget = TargetAttachToBrowserTarget { -- | Id assigned to the session. targetAttachToBrowserTargetSessionId :: TargetSessionID } deriving (Eq, Show) instance FromJSON TargetAttachToBrowserTarget where parseJSON = A.withObject "TargetAttachToBrowserTarget" $ \o -> TargetAttachToBrowserTarget <$> o A..: "sessionId" instance Command PTargetAttachToBrowserTarget where type CommandResponse PTargetAttachToBrowserTarget = TargetAttachToBrowserTarget commandName _ = "Target.attachToBrowserTarget" -- | Closes the target. If the target is a page that gets closed too. -- | Parameters of the 'Target.closeTarget' command. data PTargetCloseTarget = PTargetCloseTarget { pTargetCloseTargetTargetId :: TargetTargetID } deriving (Eq, Show) pTargetCloseTarget :: TargetTargetID -> PTargetCloseTarget pTargetCloseTarget arg_pTargetCloseTargetTargetId = PTargetCloseTarget arg_pTargetCloseTargetTargetId instance ToJSON PTargetCloseTarget where toJSON p = A.object $ catMaybes [ ("targetId" A..=) <$> Just (pTargetCloseTargetTargetId p) ] instance Command PTargetCloseTarget where type CommandResponse PTargetCloseTarget = () commandName _ = "Target.closeTarget" fromJSON = const . A.Success . const () -- | Inject object to the target's main frame that provides a communication -- channel with browser target. -- -- Injected object will be available as `window[bindingName]`. -- -- The object has the follwing API: -- - `binding.send(json)` - a method to send messages over the remote debugging protocol -- - `binding.onmessage = json => handleMessage(json)` - a callback that will be called for the protocol notifications and command responses. -- | Parameters of the 'Target.exposeDevToolsProtocol' command. data PTargetExposeDevToolsProtocol = PTargetExposeDevToolsProtocol { pTargetExposeDevToolsProtocolTargetId :: TargetTargetID, -- | Binding name, 'cdp' if not specified. pTargetExposeDevToolsProtocolBindingName :: Maybe T.Text } deriving (Eq, Show) pTargetExposeDevToolsProtocol :: TargetTargetID -> PTargetExposeDevToolsProtocol pTargetExposeDevToolsProtocol arg_pTargetExposeDevToolsProtocolTargetId = PTargetExposeDevToolsProtocol arg_pTargetExposeDevToolsProtocolTargetId Nothing instance ToJSON PTargetExposeDevToolsProtocol where toJSON p = A.object $ catMaybes [ ("targetId" A..=) <$> Just (pTargetExposeDevToolsProtocolTargetId p), ("bindingName" A..=) <$> (pTargetExposeDevToolsProtocolBindingName p) ] instance Command PTargetExposeDevToolsProtocol where type CommandResponse PTargetExposeDevToolsProtocol = () commandName _ = "Target.exposeDevToolsProtocol" fromJSON = const . A.Success . const () -- | Creates a new empty BrowserContext. Similar to an incognito profile but you can have more than -- one. -- | Parameters of the 'Target.createBrowserContext' command. data PTargetCreateBrowserContext = PTargetCreateBrowserContext { -- | If specified, disposes this context when debugging session disconnects. pTargetCreateBrowserContextDisposeOnDetach :: Maybe Bool, -- | Proxy server, similar to the one passed to --proxy-server pTargetCreateBrowserContextProxyServer :: Maybe T.Text, -- | Proxy bypass list, similar to the one passed to --proxy-bypass-list pTargetCreateBrowserContextProxyBypassList :: Maybe T.Text, -- | An optional list of origins to grant unlimited cross-origin access to. -- Parts of the URL other than those constituting origin are ignored. pTargetCreateBrowserContextOriginsWithUniversalNetworkAccess :: Maybe [T.Text] } deriving (Eq, Show) pTargetCreateBrowserContext :: PTargetCreateBrowserContext pTargetCreateBrowserContext = PTargetCreateBrowserContext Nothing Nothing Nothing Nothing instance ToJSON PTargetCreateBrowserContext where toJSON p = A.object $ catMaybes [ ("disposeOnDetach" A..=) <$> (pTargetCreateBrowserContextDisposeOnDetach p), ("proxyServer" A..=) <$> (pTargetCreateBrowserContextProxyServer p), ("proxyBypassList" A..=) <$> (pTargetCreateBrowserContextProxyBypassList p), ("originsWithUniversalNetworkAccess" A..=) <$> (pTargetCreateBrowserContextOriginsWithUniversalNetworkAccess p) ] data TargetCreateBrowserContext = TargetCreateBrowserContext { -- | The id of the context created. targetCreateBrowserContextBrowserContextId :: BrowserBrowserContextID } deriving (Eq, Show) instance FromJSON TargetCreateBrowserContext where parseJSON = A.withObject "TargetCreateBrowserContext" $ \o -> TargetCreateBrowserContext <$> o A..: "browserContextId" instance Command PTargetCreateBrowserContext where type CommandResponse PTargetCreateBrowserContext = TargetCreateBrowserContext commandName _ = "Target.createBrowserContext" -- | Returns all browser contexts created with `Target.createBrowserContext` method. -- | Parameters of the 'Target.getBrowserContexts' command. data PTargetGetBrowserContexts = PTargetGetBrowserContexts deriving (Eq, Show) pTargetGetBrowserContexts :: PTargetGetBrowserContexts pTargetGetBrowserContexts = PTargetGetBrowserContexts instance ToJSON PTargetGetBrowserContexts where toJSON _ = A.Null data TargetGetBrowserContexts = TargetGetBrowserContexts { -- | An array of browser context ids. targetGetBrowserContextsBrowserContextIds :: [BrowserBrowserContextID] } deriving (Eq, Show) instance FromJSON TargetGetBrowserContexts where parseJSON = A.withObject "TargetGetBrowserContexts" $ \o -> TargetGetBrowserContexts <$> o A..: "browserContextIds" instance Command PTargetGetBrowserContexts where type CommandResponse PTargetGetBrowserContexts = TargetGetBrowserContexts commandName _ = "Target.getBrowserContexts" -- | Creates a new page. -- | Parameters of the 'Target.createTarget' command. data PTargetCreateTarget = PTargetCreateTarget { -- | The initial URL the page will be navigated to. An empty string indicates about:blank. pTargetCreateTargetUrl :: T.Text, -- | Frame width in DIP (headless chrome only). pTargetCreateTargetWidth :: Maybe Int, -- | Frame height in DIP (headless chrome only). pTargetCreateTargetHeight :: Maybe Int, -- | The browser context to create the page in. pTargetCreateTargetBrowserContextId :: Maybe BrowserBrowserContextID, -- | Whether BeginFrames for this target will be controlled via DevTools (headless chrome only, -- not supported on MacOS yet, false by default). pTargetCreateTargetEnableBeginFrameControl :: Maybe Bool, -- | Whether to create a new Window or Tab (chrome-only, false by default). pTargetCreateTargetNewWindow :: Maybe Bool, -- | Whether to create the target in background or foreground (chrome-only, -- false by default). pTargetCreateTargetBackground :: Maybe Bool } deriving (Eq, Show) pTargetCreateTarget {- -- | The initial URL the page will be navigated to. An empty string indicates about:blank. -} :: T.Text -> PTargetCreateTarget pTargetCreateTarget arg_pTargetCreateTargetUrl = PTargetCreateTarget arg_pTargetCreateTargetUrl Nothing Nothing Nothing Nothing Nothing Nothing instance ToJSON PTargetCreateTarget where toJSON p = A.object $ catMaybes [ ("url" A..=) <$> Just (pTargetCreateTargetUrl p), ("width" A..=) <$> (pTargetCreateTargetWidth p), ("height" A..=) <$> (pTargetCreateTargetHeight p), ("browserContextId" A..=) <$> (pTargetCreateTargetBrowserContextId p), ("enableBeginFrameControl" A..=) <$> (pTargetCreateTargetEnableBeginFrameControl p), ("newWindow" A..=) <$> (pTargetCreateTargetNewWindow p), ("background" A..=) <$> (pTargetCreateTargetBackground p) ] data TargetCreateTarget = TargetCreateTarget { -- | The id of the page opened. targetCreateTargetTargetId :: TargetTargetID } deriving (Eq, Show) instance FromJSON TargetCreateTarget where parseJSON = A.withObject "TargetCreateTarget" $ \o -> TargetCreateTarget <$> o A..: "targetId" instance Command PTargetCreateTarget where type CommandResponse PTargetCreateTarget = TargetCreateTarget commandName _ = "Target.createTarget" -- | Detaches session with given id. -- | Parameters of the 'Target.detachFromTarget' command. data PTargetDetachFromTarget = PTargetDetachFromTarget { -- | Session to detach. pTargetDetachFromTargetSessionId :: Maybe TargetSessionID } deriving (Eq, Show) pTargetDetachFromTarget :: PTargetDetachFromTarget pTargetDetachFromTarget = PTargetDetachFromTarget Nothing instance ToJSON PTargetDetachFromTarget where toJSON p = A.object $ catMaybes [ ("sessionId" A..=) <$> (pTargetDetachFromTargetSessionId p) ] instance Command PTargetDetachFromTarget where type CommandResponse PTargetDetachFromTarget = () commandName _ = "Target.detachFromTarget" fromJSON = const . A.Success . const () -- | Deletes a BrowserContext. All the belonging pages will be closed without calling their -- beforeunload hooks. -- | Parameters of the 'Target.disposeBrowserContext' command. data PTargetDisposeBrowserContext = PTargetDisposeBrowserContext { pTargetDisposeBrowserContextBrowserContextId :: BrowserBrowserContextID } deriving (Eq, Show) pTargetDisposeBrowserContext :: BrowserBrowserContextID -> PTargetDisposeBrowserContext pTargetDisposeBrowserContext arg_pTargetDisposeBrowserContextBrowserContextId = PTargetDisposeBrowserContext arg_pTargetDisposeBrowserContextBrowserContextId instance ToJSON PTargetDisposeBrowserContext where toJSON p = A.object $ catMaybes [ ("browserContextId" A..=) <$> Just (pTargetDisposeBrowserContextBrowserContextId p) ] instance Command PTargetDisposeBrowserContext where type CommandResponse PTargetDisposeBrowserContext = () commandName _ = "Target.disposeBrowserContext" fromJSON = const . A.Success . const () -- | Returns information about a target. -- | Parameters of the 'Target.getTargetInfo' command. data PTargetGetTargetInfo = PTargetGetTargetInfo { pTargetGetTargetInfoTargetId :: Maybe TargetTargetID } deriving (Eq, Show) pTargetGetTargetInfo :: PTargetGetTargetInfo pTargetGetTargetInfo = PTargetGetTargetInfo Nothing instance ToJSON PTargetGetTargetInfo where toJSON p = A.object $ catMaybes [ ("targetId" A..=) <$> (pTargetGetTargetInfoTargetId p) ] data TargetGetTargetInfo = TargetGetTargetInfo { targetGetTargetInfoTargetInfo :: TargetTargetInfo } deriving (Eq, Show) instance FromJSON TargetGetTargetInfo where parseJSON = A.withObject "TargetGetTargetInfo" $ \o -> TargetGetTargetInfo <$> o A..: "targetInfo" instance Command PTargetGetTargetInfo where type CommandResponse PTargetGetTargetInfo = TargetGetTargetInfo commandName _ = "Target.getTargetInfo" -- | Retrieves a list of available targets. -- | Parameters of the 'Target.getTargets' command. data PTargetGetTargets = PTargetGetTargets { -- | Only targets matching filter will be reported. If filter is not specified -- and target discovery is currently enabled, a filter used for target discovery -- is used for consistency. pTargetGetTargetsFilter :: Maybe TargetTargetFilter } deriving (Eq, Show) pTargetGetTargets :: PTargetGetTargets pTargetGetTargets = PTargetGetTargets Nothing instance ToJSON PTargetGetTargets where toJSON p = A.object $ catMaybes [ ("filter" A..=) <$> (pTargetGetTargetsFilter p) ] data TargetGetTargets = TargetGetTargets { -- | The list of targets. targetGetTargetsTargetInfos :: [TargetTargetInfo] } deriving (Eq, Show) instance FromJSON TargetGetTargets where parseJSON = A.withObject "TargetGetTargets" $ \o -> TargetGetTargets <$> o A..: "targetInfos" instance Command PTargetGetTargets where type CommandResponse PTargetGetTargets = TargetGetTargets commandName _ = "Target.getTargets" -- | Controls whether to automatically attach to new targets which are considered to be related to -- this one. When turned on, attaches to all existing related targets as well. When turned off, -- automatically detaches from all currently attached targets. -- This also clears all targets added by `autoAttachRelated` from the list of targets to watch -- for creation of related targets. -- | Parameters of the 'Target.setAutoAttach' command. data PTargetSetAutoAttach = PTargetSetAutoAttach { -- | Whether to auto-attach to related targets. pTargetSetAutoAttachAutoAttach :: Bool, -- | Whether to pause new targets when attaching to them. Use `Runtime.runIfWaitingForDebugger` -- to run paused targets. pTargetSetAutoAttachWaitForDebuggerOnStart :: Bool, -- | Enables "flat" access to the session via specifying sessionId attribute in the commands. -- We plan to make this the default, deprecate non-flattened mode, -- and eventually retire it. See crbug.com/991325. pTargetSetAutoAttachFlatten :: Maybe Bool, -- | Only targets matching filter will be attached. pTargetSetAutoAttachFilter :: Maybe TargetTargetFilter } deriving (Eq, Show) pTargetSetAutoAttach {- -- | Whether to auto-attach to related targets. -} :: Bool {- -- | Whether to pause new targets when attaching to them. Use `Runtime.runIfWaitingForDebugger` -- to run paused targets. -} -> Bool -> PTargetSetAutoAttach pTargetSetAutoAttach arg_pTargetSetAutoAttachAutoAttach arg_pTargetSetAutoAttachWaitForDebuggerOnStart = PTargetSetAutoAttach arg_pTargetSetAutoAttachAutoAttach arg_pTargetSetAutoAttachWaitForDebuggerOnStart Nothing Nothing instance ToJSON PTargetSetAutoAttach where toJSON p = A.object $ catMaybes [ ("autoAttach" A..=) <$> Just (pTargetSetAutoAttachAutoAttach p), ("waitForDebuggerOnStart" A..=) <$> Just (pTargetSetAutoAttachWaitForDebuggerOnStart p), ("flatten" A..=) <$> (pTargetSetAutoAttachFlatten p), ("filter" A..=) <$> (pTargetSetAutoAttachFilter p) ] instance Command PTargetSetAutoAttach where type CommandResponse PTargetSetAutoAttach = () commandName _ = "Target.setAutoAttach" fromJSON = const . A.Success . const () -- | Adds the specified target to the list of targets that will be monitored for any related target -- creation (such as child frames, child workers and new versions of service worker) and reported -- through `attachedToTarget`. The specified target is also auto-attached. -- This cancels the effect of any previous `setAutoAttach` and is also cancelled by subsequent -- `setAutoAttach`. Only available at the Browser target. -- | Parameters of the 'Target.autoAttachRelated' command. data PTargetAutoAttachRelated = PTargetAutoAttachRelated { pTargetAutoAttachRelatedTargetId :: TargetTargetID, -- | Whether to pause new targets when attaching to them. Use `Runtime.runIfWaitingForDebugger` -- to run paused targets. pTargetAutoAttachRelatedWaitForDebuggerOnStart :: Bool, -- | Only targets matching filter will be attached. pTargetAutoAttachRelatedFilter :: Maybe TargetTargetFilter } deriving (Eq, Show) pTargetAutoAttachRelated :: TargetTargetID {- -- | Whether to pause new targets when attaching to them. Use `Runtime.runIfWaitingForDebugger` -- to run paused targets. -} -> Bool -> PTargetAutoAttachRelated pTargetAutoAttachRelated arg_pTargetAutoAttachRelatedTargetId arg_pTargetAutoAttachRelatedWaitForDebuggerOnStart = PTargetAutoAttachRelated arg_pTargetAutoAttachRelatedTargetId arg_pTargetAutoAttachRelatedWaitForDebuggerOnStart Nothing instance ToJSON PTargetAutoAttachRelated where toJSON p = A.object $ catMaybes [ ("targetId" A..=) <$> Just (pTargetAutoAttachRelatedTargetId p), ("waitForDebuggerOnStart" A..=) <$> Just (pTargetAutoAttachRelatedWaitForDebuggerOnStart p), ("filter" A..=) <$> (pTargetAutoAttachRelatedFilter p) ] instance Command PTargetAutoAttachRelated where type CommandResponse PTargetAutoAttachRelated = () commandName _ = "Target.autoAttachRelated" fromJSON = const . A.Success . const () -- | Controls whether to discover available targets and notify via -- `targetCreated/targetInfoChanged/targetDestroyed` events. -- | Parameters of the 'Target.setDiscoverTargets' command. data PTargetSetDiscoverTargets = PTargetSetDiscoverTargets { -- | Whether to discover available targets. pTargetSetDiscoverTargetsDiscover :: Bool, -- | Only targets matching filter will be attached. If `discover` is false, -- `filter` must be omitted or empty. pTargetSetDiscoverTargetsFilter :: Maybe TargetTargetFilter } deriving (Eq, Show) pTargetSetDiscoverTargets {- -- | Whether to discover available targets. -} :: Bool -> PTargetSetDiscoverTargets pTargetSetDiscoverTargets arg_pTargetSetDiscoverTargetsDiscover = PTargetSetDiscoverTargets arg_pTargetSetDiscoverTargetsDiscover Nothing instance ToJSON PTargetSetDiscoverTargets where toJSON p = A.object $ catMaybes [ ("discover" A..=) <$> Just (pTargetSetDiscoverTargetsDiscover p), ("filter" A..=) <$> (pTargetSetDiscoverTargetsFilter p) ] instance Command PTargetSetDiscoverTargets where type CommandResponse PTargetSetDiscoverTargets = () commandName _ = "Target.setDiscoverTargets" fromJSON = const . A.Success . const () -- | Enables target discovery for the specified locations, when `setDiscoverTargets` was set to -- `true`. -- | Parameters of the 'Target.setRemoteLocations' command. data PTargetSetRemoteLocations = PTargetSetRemoteLocations { -- | List of remote locations. pTargetSetRemoteLocationsLocations :: [TargetRemoteLocation] } deriving (Eq, Show) pTargetSetRemoteLocations {- -- | List of remote locations. -} :: [TargetRemoteLocation] -> PTargetSetRemoteLocations pTargetSetRemoteLocations arg_pTargetSetRemoteLocationsLocations = PTargetSetRemoteLocations arg_pTargetSetRemoteLocationsLocations instance ToJSON PTargetSetRemoteLocations where toJSON p = A.object $ catMaybes [ ("locations" A..=) <$> Just (pTargetSetRemoteLocationsLocations p) ] instance Command PTargetSetRemoteLocations where type CommandResponse PTargetSetRemoteLocations = () commandName _ = "Target.setRemoteLocations" fromJSON = const . A.Success . const ()