{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
-}

module GI.WebKit.Objects.SecurityOrigin
    ( 

-- * Exported types
    SecurityOrigin(..)                      ,
    SecurityOriginK                         ,
    toSecurityOrigin                        ,
    noSecurityOrigin                        ,


 -- * Methods
-- ** securityOriginGetAllWebDatabases
    securityOriginGetAllWebDatabases        ,


-- ** securityOriginGetHost
    securityOriginGetHost                   ,


-- ** securityOriginGetPort
    securityOriginGetPort                   ,


-- ** securityOriginGetProtocol
    securityOriginGetProtocol               ,


-- ** securityOriginGetWebDatabaseQuota
    securityOriginGetWebDatabaseQuota       ,


-- ** securityOriginGetWebDatabaseUsage
    securityOriginGetWebDatabaseUsage       ,


-- ** securityOriginSetWebDatabaseQuota
    securityOriginSetWebDatabaseQuota       ,




 -- * Properties
-- ** Host
    SecurityOriginHostPropertyInfo          ,
    getSecurityOriginHost                   ,


-- ** Port
    SecurityOriginPortPropertyInfo          ,
    getSecurityOriginPort                   ,


-- ** Protocol
    SecurityOriginProtocolPropertyInfo      ,
    getSecurityOriginProtocol               ,


-- ** WebDatabaseQuota
    SecurityOriginWebDatabaseQuotaPropertyInfo,
    constructSecurityOriginWebDatabaseQuota ,
    getSecurityOriginWebDatabaseQuota       ,
    setSecurityOriginWebDatabaseQuota       ,


-- ** WebDatabaseUsage
    SecurityOriginWebDatabaseUsagePropertyInfo,
    getSecurityOriginWebDatabaseUsage       ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.WebKit.Types
import GI.WebKit.Callbacks
import qualified GI.GObject as GObject

newtype SecurityOrigin = SecurityOrigin (ForeignPtr SecurityOrigin)
foreign import ccall "webkit_security_origin_get_type"
    c_webkit_security_origin_get_type :: IO GType

type instance ParentTypes SecurityOrigin = SecurityOriginParentTypes
type SecurityOriginParentTypes = '[GObject.Object]

instance GObject SecurityOrigin where
    gobjectIsInitiallyUnowned _ = False
    gobjectType _ = c_webkit_security_origin_get_type
    

class GObject o => SecurityOriginK o
instance (GObject o, IsDescendantOf SecurityOrigin o) => SecurityOriginK o

toSecurityOrigin :: SecurityOriginK o => o -> IO SecurityOrigin
toSecurityOrigin = unsafeCastTo SecurityOrigin

noSecurityOrigin :: Maybe SecurityOrigin
noSecurityOrigin = Nothing

-- VVV Prop "host"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable]

getSecurityOriginHost :: (MonadIO m, SecurityOriginK o) => o -> m T.Text
getSecurityOriginHost obj = liftIO $ getObjectPropertyString obj "host"

data SecurityOriginHostPropertyInfo
instance AttrInfo SecurityOriginHostPropertyInfo where
    type AttrAllowedOps SecurityOriginHostPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint SecurityOriginHostPropertyInfo = (~) ()
    type AttrBaseTypeConstraint SecurityOriginHostPropertyInfo = SecurityOriginK
    type AttrGetType SecurityOriginHostPropertyInfo = T.Text
    type AttrLabel SecurityOriginHostPropertyInfo = "SecurityOrigin::host"
    attrGet _ = getSecurityOriginHost
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "port"
   -- Type: TBasicType TUInt32
   -- Flags: [PropertyReadable]

getSecurityOriginPort :: (MonadIO m, SecurityOriginK o) => o -> m Word32
getSecurityOriginPort obj = liftIO $ getObjectPropertyCUInt obj "port"

data SecurityOriginPortPropertyInfo
instance AttrInfo SecurityOriginPortPropertyInfo where
    type AttrAllowedOps SecurityOriginPortPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint SecurityOriginPortPropertyInfo = (~) ()
    type AttrBaseTypeConstraint SecurityOriginPortPropertyInfo = SecurityOriginK
    type AttrGetType SecurityOriginPortPropertyInfo = Word32
    type AttrLabel SecurityOriginPortPropertyInfo = "SecurityOrigin::port"
    attrGet _ = getSecurityOriginPort
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "protocol"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable]

getSecurityOriginProtocol :: (MonadIO m, SecurityOriginK o) => o -> m T.Text
getSecurityOriginProtocol obj = liftIO $ getObjectPropertyString obj "protocol"

data SecurityOriginProtocolPropertyInfo
instance AttrInfo SecurityOriginProtocolPropertyInfo where
    type AttrAllowedOps SecurityOriginProtocolPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint SecurityOriginProtocolPropertyInfo = (~) ()
    type AttrBaseTypeConstraint SecurityOriginProtocolPropertyInfo = SecurityOriginK
    type AttrGetType SecurityOriginProtocolPropertyInfo = T.Text
    type AttrLabel SecurityOriginProtocolPropertyInfo = "SecurityOrigin::protocol"
    attrGet _ = getSecurityOriginProtocol
    attrSet _ = undefined
    attrConstruct _ = undefined

-- VVV Prop "web-database-quota"
   -- Type: TBasicType TUInt64
   -- Flags: [PropertyReadable,PropertyWritable]

getSecurityOriginWebDatabaseQuota :: (MonadIO m, SecurityOriginK o) => o -> m Word64
getSecurityOriginWebDatabaseQuota obj = liftIO $ getObjectPropertyUInt64 obj "web-database-quota"

setSecurityOriginWebDatabaseQuota :: (MonadIO m, SecurityOriginK o) => o -> Word64 -> m ()
setSecurityOriginWebDatabaseQuota obj val = liftIO $ setObjectPropertyUInt64 obj "web-database-quota" val

constructSecurityOriginWebDatabaseQuota :: Word64 -> IO ([Char], GValue)
constructSecurityOriginWebDatabaseQuota val = constructObjectPropertyUInt64 "web-database-quota" val

data SecurityOriginWebDatabaseQuotaPropertyInfo
instance AttrInfo SecurityOriginWebDatabaseQuotaPropertyInfo where
    type AttrAllowedOps SecurityOriginWebDatabaseQuotaPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint SecurityOriginWebDatabaseQuotaPropertyInfo = (~) Word64
    type AttrBaseTypeConstraint SecurityOriginWebDatabaseQuotaPropertyInfo = SecurityOriginK
    type AttrGetType SecurityOriginWebDatabaseQuotaPropertyInfo = Word64
    type AttrLabel SecurityOriginWebDatabaseQuotaPropertyInfo = "SecurityOrigin::web-database-quota"
    attrGet _ = getSecurityOriginWebDatabaseQuota
    attrSet _ = setSecurityOriginWebDatabaseQuota
    attrConstruct _ = constructSecurityOriginWebDatabaseQuota

-- VVV Prop "web-database-usage"
   -- Type: TBasicType TUInt64
   -- Flags: [PropertyReadable]

getSecurityOriginWebDatabaseUsage :: (MonadIO m, SecurityOriginK o) => o -> m Word64
getSecurityOriginWebDatabaseUsage obj = liftIO $ getObjectPropertyUInt64 obj "web-database-usage"

data SecurityOriginWebDatabaseUsagePropertyInfo
instance AttrInfo SecurityOriginWebDatabaseUsagePropertyInfo where
    type AttrAllowedOps SecurityOriginWebDatabaseUsagePropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint SecurityOriginWebDatabaseUsagePropertyInfo = (~) ()
    type AttrBaseTypeConstraint SecurityOriginWebDatabaseUsagePropertyInfo = SecurityOriginK
    type AttrGetType SecurityOriginWebDatabaseUsagePropertyInfo = Word64
    type AttrLabel SecurityOriginWebDatabaseUsagePropertyInfo = "SecurityOrigin::web-database-usage"
    attrGet _ = getSecurityOriginWebDatabaseUsage
    attrSet _ = undefined
    attrConstruct _ = undefined

type instance AttributeList SecurityOrigin = SecurityOriginAttributeList
type SecurityOriginAttributeList = ('[ '("host", SecurityOriginHostPropertyInfo), '("port", SecurityOriginPortPropertyInfo), '("protocol", SecurityOriginProtocolPropertyInfo), '("web-database-quota", SecurityOriginWebDatabaseQuotaPropertyInfo), '("web-database-usage", SecurityOriginWebDatabaseUsagePropertyInfo)] :: [(Symbol, *)])

type instance SignalList SecurityOrigin = SecurityOriginSignalList
type SecurityOriginSignalList = ('[ '("notify", GObject.ObjectNotifySignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method SecurityOrigin::get_all_web_databases
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TGList (TInterface "WebKit" "WebDatabase")
-- throws : False
-- Skip return : False

foreign import ccall "webkit_security_origin_get_all_web_databases" webkit_security_origin_get_all_web_databases :: 
    Ptr SecurityOrigin ->                   -- _obj : TInterface "WebKit" "SecurityOrigin"
    IO (Ptr (GList (Ptr WebDatabase)))


securityOriginGetAllWebDatabases ::
    (MonadIO m, SecurityOriginK a) =>
    a ->                                    -- _obj
    m [WebDatabase]
securityOriginGetAllWebDatabases _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_security_origin_get_all_web_databases _obj'
    checkUnexpectedReturnNULL "webkit_security_origin_get_all_web_databases" result
    result' <- unpackGList result
    result'' <- mapM (newObject WebDatabase) result'
    g_list_free result
    touchManagedPtr _obj
    return result''

-- method SecurityOrigin::get_host
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUTF8
-- throws : False
-- Skip return : False

foreign import ccall "webkit_security_origin_get_host" webkit_security_origin_get_host :: 
    Ptr SecurityOrigin ->                   -- _obj : TInterface "WebKit" "SecurityOrigin"
    IO CString


securityOriginGetHost ::
    (MonadIO m, SecurityOriginK a) =>
    a ->                                    -- _obj
    m T.Text
securityOriginGetHost _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_security_origin_get_host _obj'
    checkUnexpectedReturnNULL "webkit_security_origin_get_host" result
    result' <- cstringToText result
    touchManagedPtr _obj
    return result'

-- method SecurityOrigin::get_port
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUInt32
-- throws : False
-- Skip return : False

foreign import ccall "webkit_security_origin_get_port" webkit_security_origin_get_port :: 
    Ptr SecurityOrigin ->                   -- _obj : TInterface "WebKit" "SecurityOrigin"
    IO Word32


securityOriginGetPort ::
    (MonadIO m, SecurityOriginK a) =>
    a ->                                    -- _obj
    m Word32
securityOriginGetPort _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_security_origin_get_port _obj'
    touchManagedPtr _obj
    return result

-- method SecurityOrigin::get_protocol
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUTF8
-- throws : False
-- Skip return : False

foreign import ccall "webkit_security_origin_get_protocol" webkit_security_origin_get_protocol :: 
    Ptr SecurityOrigin ->                   -- _obj : TInterface "WebKit" "SecurityOrigin"
    IO CString


securityOriginGetProtocol ::
    (MonadIO m, SecurityOriginK a) =>
    a ->                                    -- _obj
    m T.Text
securityOriginGetProtocol _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_security_origin_get_protocol _obj'
    checkUnexpectedReturnNULL "webkit_security_origin_get_protocol" result
    result' <- cstringToText result
    touchManagedPtr _obj
    return result'

-- method SecurityOrigin::get_web_database_quota
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUInt64
-- throws : False
-- Skip return : False

foreign import ccall "webkit_security_origin_get_web_database_quota" webkit_security_origin_get_web_database_quota :: 
    Ptr SecurityOrigin ->                   -- _obj : TInterface "WebKit" "SecurityOrigin"
    IO Word64


securityOriginGetWebDatabaseQuota ::
    (MonadIO m, SecurityOriginK a) =>
    a ->                                    -- _obj
    m Word64
securityOriginGetWebDatabaseQuota _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_security_origin_get_web_database_quota _obj'
    touchManagedPtr _obj
    return result

-- method SecurityOrigin::get_web_database_usage
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUInt64
-- throws : False
-- Skip return : False

foreign import ccall "webkit_security_origin_get_web_database_usage" webkit_security_origin_get_web_database_usage :: 
    Ptr SecurityOrigin ->                   -- _obj : TInterface "WebKit" "SecurityOrigin"
    IO Word64


securityOriginGetWebDatabaseUsage ::
    (MonadIO m, SecurityOriginK a) =>
    a ->                                    -- _obj
    m Word64
securityOriginGetWebDatabaseUsage _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- webkit_security_origin_get_web_database_usage _obj'
    touchManagedPtr _obj
    return result

-- method SecurityOrigin::set_web_database_quota
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "quota", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "WebKit" "SecurityOrigin", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "quota", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "webkit_security_origin_set_web_database_quota" webkit_security_origin_set_web_database_quota :: 
    Ptr SecurityOrigin ->                   -- _obj : TInterface "WebKit" "SecurityOrigin"
    Word64 ->                               -- quota : TBasicType TUInt64
    IO ()


securityOriginSetWebDatabaseQuota ::
    (MonadIO m, SecurityOriginK a) =>
    a ->                                    -- _obj
    Word64 ->                               -- quota
    m ()
securityOriginSetWebDatabaseQuota _obj quota = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    webkit_security_origin_set_web_database_quota _obj' quota
    touchManagedPtr _obj
    return ()