{-# LANGUAGE ImplicitParams, RankNTypes, TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Represents an extension of the web process.
-- 
-- WebKitWebProcessExtension is a loadable module for the web process. It allows you to execute code in the
-- web process and being able to use the DOM API, to change any request or to inject custom
-- JavaScript code, for example.
-- 
-- To create a WebKitWebProcessExtension you should write a module with an initialization function that could
-- be either @/webkit_web_process_extension_initialize()/@ with prototype t'GI.WebKitWebProcessExtension.Callbacks.WebProcessExtensionInitializeFunction' or
-- @/webkit_web_process_extension_initialize_with_user_data()/@ with prototype t'GI.WebKitWebProcessExtension.Callbacks.WebProcessExtensionInitializeWithUserDataFunction'.
-- This function has to be public and it has to use the @/G_MODULE_EXPORT/@ macro. It is called when the
-- web process is initialized.
-- 
-- 
-- === /c code/
-- >static void
-- >web_page_created_callback (WebKitWebProcessExtension *extension,
-- >                           WebKitWebPage             *web_page,
-- >                           gpointer                   user_data)
-- >{
-- >    g_print ("Page %d created for %s\n",
-- >             webkit_web_page_get_id (web_page),
-- >             webkit_web_page_get_uri (web_page));
-- >}
-- >
-- >G_MODULE_EXPORT void
-- >webkit_web_process_extension_initialize (WebKitWebProcessExtension *extension)
-- >{
-- >    g_signal_connect (extension, "page-created",
-- >                      G_CALLBACK (web_page_created_callback),
-- >                      NULL);
-- >}
-- 
-- 
-- The previous piece of code shows a trivial example of an extension that notifies when
-- a t'GI.WebKitWebProcessExtension.Objects.WebPage.WebPage' is created.
-- 
-- WebKit has to know where it can find the created WebKitWebProcessExtension. To do so you
-- should use the @/webkit_web_context_set_web_extensions_directory()/@ function. The signal
-- @/WebKitWebContext::initialize-web-extensions/@ is the recommended place to call it.
-- 
-- To provide the initialization data used by the @/webkit_web_process_extension_initialize_with_user_data()/@
-- function, you have to call @/webkit_web_context_set_web_extensions_initialization_user_data()/@ with
-- the desired data as parameter. You can see an example of this in the following piece of code:
-- 
-- 
-- === /c code/
-- >#define WEB_EXTENSIONS_DIRECTORY // ...
-- >
-- >static void
-- >initialize_web_extensions (WebKitWebContext *context,
-- >                           gpointer          user_data)
-- >{
-- >  // Web Extensions get a different ID for each Web Process
-- >  static guint32 unique_id = 0;
-- >
-- >  webkit_web_context_set_web_extensions_directory (
-- >     context, WEB_EXTENSIONS_DIRECTORY);
-- >  webkit_web_context_set_web_extensions_initialization_user_data (
-- >     context, g_variant_new_uint32 (unique_id++));
-- >}
-- >
-- >int main (int argc, char **argv)
-- >{
-- >  g_signal_connect (webkit_web_context_get_default (),
-- >                   "initialize-web-extensions",
-- >                    G_CALLBACK (initialize_web_extensions),
-- >                    NULL);
-- >
-- >  GtkWidget *view = webkit_web_view_new ();
-- >
-- >  // ...
-- >}
-- 
-- 
-- /Since: 2.40/

#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif

module GI.WebKitWebProcessExtension.Objects.WebProcessExtension
    ( 

-- * Exported types
    WebProcessExtension(..)                 ,
    IsWebProcessExtension                   ,
    toWebProcessExtension                   ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [sendMessageToContext]("GI.WebKitWebProcessExtension.Objects.WebProcessExtension#g:method:sendMessageToContext"), [sendMessageToContextFinish]("GI.WebKitWebProcessExtension.Objects.WebProcessExtension#g:method:sendMessageToContextFinish"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unref]("GI.GObject.Objects.Object#g:method:unref"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getData]("GI.GObject.Objects.Object#g:method:getData"), [getPage]("GI.WebKitWebProcessExtension.Objects.WebProcessExtension#g:method:getPage"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata").
-- 
-- ==== Setters
-- [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

#if defined(ENABLE_OVERLOADING)
    ResolveWebProcessExtensionMethod        ,
#endif

-- ** getPage #method:getPage#

#if defined(ENABLE_OVERLOADING)
    WebProcessExtensionGetPageMethodInfo    ,
#endif
    webProcessExtensionGetPage              ,


-- ** sendMessageToContext #method:sendMessageToContext#

#if defined(ENABLE_OVERLOADING)
    WebProcessExtensionSendMessageToContextMethodInfo,
#endif
    webProcessExtensionSendMessageToContext ,


-- ** sendMessageToContextFinish #method:sendMessageToContextFinish#

#if defined(ENABLE_OVERLOADING)
    WebProcessExtensionSendMessageToContextFinishMethodInfo,
#endif
    webProcessExtensionSendMessageToContextFinish,




 -- * Signals


-- ** pageCreated #signal:pageCreated#

    WebProcessExtensionPageCreatedCallback  ,
#if defined(ENABLE_OVERLOADING)
    WebProcessExtensionPageCreatedSignalInfo,
#endif
    afterWebProcessExtensionPageCreated     ,
    onWebProcessExtensionPageCreated        ,


-- ** userMessageReceived #signal:userMessageReceived#

    WebProcessExtensionUserMessageReceivedCallback,
#if defined(ENABLE_OVERLOADING)
    WebProcessExtensionUserMessageReceivedSignalInfo,
#endif
    afterWebProcessExtensionUserMessageReceived,
    onWebProcessExtensionUserMessageReceived,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.Kind as DK
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GHC.Records as R

import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gio.Callbacks as Gio.Callbacks
import qualified GI.Gio.Interfaces.AsyncResult as Gio.AsyncResult
import qualified GI.Gio.Objects.Cancellable as Gio.Cancellable
import {-# SOURCE #-} qualified GI.WebKitWebProcessExtension.Objects.UserMessage as WebKitWebProcessExtension.UserMessage
import {-# SOURCE #-} qualified GI.WebKitWebProcessExtension.Objects.WebPage as WebKitWebProcessExtension.WebPage

-- | Memory-managed wrapper type.
newtype WebProcessExtension = WebProcessExtension (SP.ManagedPtr WebProcessExtension)
    deriving (WebProcessExtension -> WebProcessExtension -> Bool
(WebProcessExtension -> WebProcessExtension -> Bool)
-> (WebProcessExtension -> WebProcessExtension -> Bool)
-> Eq WebProcessExtension
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: WebProcessExtension -> WebProcessExtension -> Bool
== :: WebProcessExtension -> WebProcessExtension -> Bool
$c/= :: WebProcessExtension -> WebProcessExtension -> Bool
/= :: WebProcessExtension -> WebProcessExtension -> Bool
Eq)

instance SP.ManagedPtrNewtype WebProcessExtension where
    toManagedPtr :: WebProcessExtension -> ManagedPtr WebProcessExtension
toManagedPtr (WebProcessExtension ManagedPtr WebProcessExtension
p) = ManagedPtr WebProcessExtension
p

foreign import ccall "webkit_web_process_extension_get_type"
    c_webkit_web_process_extension_get_type :: IO B.Types.GType

instance B.Types.TypedObject WebProcessExtension where
    glibType :: IO GType
glibType = IO GType
c_webkit_web_process_extension_get_type

instance B.Types.GObject WebProcessExtension

-- | Type class for types which can be safely cast to `WebProcessExtension`, for instance with `toWebProcessExtension`.
class (SP.GObject o, O.IsDescendantOf WebProcessExtension o) => IsWebProcessExtension o
instance (SP.GObject o, O.IsDescendantOf WebProcessExtension o) => IsWebProcessExtension o

instance O.HasParentTypes WebProcessExtension
type instance O.ParentTypes WebProcessExtension = '[GObject.Object.Object]

-- | Cast to `WebProcessExtension`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toWebProcessExtension :: (MIO.MonadIO m, IsWebProcessExtension o) => o -> m WebProcessExtension
toWebProcessExtension :: forall (m :: * -> *) o.
(MonadIO m, IsWebProcessExtension o) =>
o -> m WebProcessExtension
toWebProcessExtension = IO WebProcessExtension -> m WebProcessExtension
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO WebProcessExtension -> m WebProcessExtension)
-> (o -> IO WebProcessExtension) -> o -> m WebProcessExtension
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr WebProcessExtension -> WebProcessExtension)
-> o -> IO WebProcessExtension
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr WebProcessExtension -> WebProcessExtension
WebProcessExtension

-- | Convert 'WebProcessExtension' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe WebProcessExtension) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_webkit_web_process_extension_get_type
    gvalueSet_ :: Ptr GValue -> Maybe WebProcessExtension -> IO ()
gvalueSet_ Ptr GValue
gv Maybe WebProcessExtension
P.Nothing = Ptr GValue -> Ptr WebProcessExtension -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr WebProcessExtension
forall a. Ptr a
FP.nullPtr :: FP.Ptr WebProcessExtension)
    gvalueSet_ Ptr GValue
gv (P.Just WebProcessExtension
obj) = WebProcessExtension -> (Ptr WebProcessExtension -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr WebProcessExtension
obj (Ptr GValue -> Ptr WebProcessExtension -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe WebProcessExtension)
gvalueGet_ Ptr GValue
gv = do
        Ptr WebProcessExtension
ptr <- Ptr GValue -> IO (Ptr WebProcessExtension)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr WebProcessExtension)
        if Ptr WebProcessExtension
ptr Ptr WebProcessExtension -> Ptr WebProcessExtension -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr WebProcessExtension
forall a. Ptr a
FP.nullPtr
        then WebProcessExtension -> Maybe WebProcessExtension
forall a. a -> Maybe a
P.Just (WebProcessExtension -> Maybe WebProcessExtension)
-> IO WebProcessExtension -> IO (Maybe WebProcessExtension)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr WebProcessExtension -> WebProcessExtension)
-> Ptr WebProcessExtension -> IO WebProcessExtension
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr WebProcessExtension -> WebProcessExtension
WebProcessExtension Ptr WebProcessExtension
ptr
        else Maybe WebProcessExtension -> IO (Maybe WebProcessExtension)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe WebProcessExtension
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveWebProcessExtensionMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
    ResolveWebProcessExtensionMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveWebProcessExtensionMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveWebProcessExtensionMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveWebProcessExtensionMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveWebProcessExtensionMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveWebProcessExtensionMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveWebProcessExtensionMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveWebProcessExtensionMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveWebProcessExtensionMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveWebProcessExtensionMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveWebProcessExtensionMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveWebProcessExtensionMethod "sendMessageToContext" o = WebProcessExtensionSendMessageToContextMethodInfo
    ResolveWebProcessExtensionMethod "sendMessageToContextFinish" o = WebProcessExtensionSendMessageToContextFinishMethodInfo
    ResolveWebProcessExtensionMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveWebProcessExtensionMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveWebProcessExtensionMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveWebProcessExtensionMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveWebProcessExtensionMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveWebProcessExtensionMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveWebProcessExtensionMethod "getPage" o = WebProcessExtensionGetPageMethodInfo
    ResolveWebProcessExtensionMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveWebProcessExtensionMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveWebProcessExtensionMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveWebProcessExtensionMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveWebProcessExtensionMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveWebProcessExtensionMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveWebProcessExtensionMethod t WebProcessExtension, O.OverloadedMethod info WebProcessExtension p) => OL.IsLabel t (WebProcessExtension -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveWebProcessExtensionMethod t WebProcessExtension, O.OverloadedMethod info WebProcessExtension p, R.HasField t WebProcessExtension p) => R.HasField t WebProcessExtension p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveWebProcessExtensionMethod t WebProcessExtension, O.OverloadedMethodInfo info WebProcessExtension) => OL.IsLabel t (O.MethodProxy info WebProcessExtension) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

-- signal WebProcessExtension::page-created
-- | This signal is emitted when a new t'GI.WebKitWebProcessExtension.Objects.WebPage.WebPage' is created in
-- the Web Process.
-- 
-- /Since: 2.40/
type WebProcessExtensionPageCreatedCallback =
    WebKitWebProcessExtension.WebPage.WebPage
    -- ^ /@webPage@/: the t'GI.WebKitWebProcessExtension.Objects.WebPage.WebPage' created
    -> IO ()

type C_WebProcessExtensionPageCreatedCallback =
    Ptr WebProcessExtension ->              -- object
    Ptr WebKitWebProcessExtension.WebPage.WebPage ->
    Ptr () ->                               -- user_data
    IO ()

-- | Generate a function pointer callable from C code, from a `C_WebProcessExtensionPageCreatedCallback`.
foreign import ccall "wrapper"
    mk_WebProcessExtensionPageCreatedCallback :: C_WebProcessExtensionPageCreatedCallback -> IO (FunPtr C_WebProcessExtensionPageCreatedCallback)

wrap_WebProcessExtensionPageCreatedCallback :: 
    GObject a => (a -> WebProcessExtensionPageCreatedCallback) ->
    C_WebProcessExtensionPageCreatedCallback
wrap_WebProcessExtensionPageCreatedCallback :: forall a.
GObject a =>
(a -> WebProcessExtensionPageCreatedCallback)
-> C_WebProcessExtensionPageCreatedCallback
wrap_WebProcessExtensionPageCreatedCallback a -> WebProcessExtensionPageCreatedCallback
gi'cb Ptr WebProcessExtension
gi'selfPtr Ptr WebPage
webPage Ptr ()
_ = do
    WebPage
webPage' <- ((ManagedPtr WebPage -> WebPage) -> Ptr WebPage -> IO WebPage
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr WebPage -> WebPage
WebKitWebProcessExtension.WebPage.WebPage) Ptr WebPage
webPage
    Ptr WebProcessExtension -> (WebProcessExtension -> IO ()) -> IO ()
forall a b.
(HasCallStack, ManagedPtrNewtype a) =>
Ptr a -> (a -> IO b) -> IO b
B.ManagedPtr.withTransient Ptr WebProcessExtension
gi'selfPtr ((WebProcessExtension -> IO ()) -> IO ())
-> (WebProcessExtension -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \WebProcessExtension
gi'self -> a -> WebProcessExtensionPageCreatedCallback
gi'cb (WebProcessExtension -> a
forall a b. Coercible a b => a -> b
Coerce.coerce WebProcessExtension
gi'self)  WebPage
webPage'


-- | Connect a signal handler for the [pageCreated](#signal:pageCreated) signal, to be run before the default handler.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Signals.on' webProcessExtension #pageCreated callback
-- @
-- 
-- 
onWebProcessExtensionPageCreated :: (IsWebProcessExtension a, MonadIO m) => a -> ((?self :: a) => WebProcessExtensionPageCreatedCallback) -> m SignalHandlerId
onWebProcessExtensionPageCreated :: forall a (m :: * -> *).
(IsWebProcessExtension a, MonadIO m) =>
a
-> ((?self::a) => WebProcessExtensionPageCreatedCallback)
-> m SignalHandlerId
onWebProcessExtensionPageCreated a
obj (?self::a) => WebProcessExtensionPageCreatedCallback
cb = IO SignalHandlerId -> m SignalHandlerId
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SignalHandlerId -> m SignalHandlerId)
-> IO SignalHandlerId -> m SignalHandlerId
forall a b. (a -> b) -> a -> b
$ do
    let wrapped :: a -> WebProcessExtensionPageCreatedCallback
wrapped a
self = let ?self = a
?self::a
self in (?self::a) => WebProcessExtensionPageCreatedCallback
WebProcessExtensionPageCreatedCallback
cb
    let wrapped' :: C_WebProcessExtensionPageCreatedCallback
wrapped' = (a -> WebProcessExtensionPageCreatedCallback)
-> C_WebProcessExtensionPageCreatedCallback
forall a.
GObject a =>
(a -> WebProcessExtensionPageCreatedCallback)
-> C_WebProcessExtensionPageCreatedCallback
wrap_WebProcessExtensionPageCreatedCallback a -> WebProcessExtensionPageCreatedCallback
wrapped
    FunPtr C_WebProcessExtensionPageCreatedCallback
wrapped'' <- C_WebProcessExtensionPageCreatedCallback
-> IO (FunPtr C_WebProcessExtensionPageCreatedCallback)
mk_WebProcessExtensionPageCreatedCallback C_WebProcessExtensionPageCreatedCallback
wrapped'
    a
-> Text
-> FunPtr C_WebProcessExtensionPageCreatedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"page-created" FunPtr C_WebProcessExtensionPageCreatedCallback
wrapped'' SignalConnectMode
SignalConnectBefore Maybe Text
forall a. Maybe a
Nothing

-- | Connect a signal handler for the [pageCreated](#signal:pageCreated) signal, to be run after the default handler.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Signals.after' webProcessExtension #pageCreated callback
-- @
-- 
-- 
-- 
-- By default the object invoking the signal is not passed to the callback.
-- If you need to access it, you can use the implit @?self@ parameter.
-- Note that this requires activating the @ImplicitParams@ GHC extension.
-- 
afterWebProcessExtensionPageCreated :: (IsWebProcessExtension a, MonadIO m) => a -> ((?self :: a) => WebProcessExtensionPageCreatedCallback) -> m SignalHandlerId
afterWebProcessExtensionPageCreated :: forall a (m :: * -> *).
(IsWebProcessExtension a, MonadIO m) =>
a
-> ((?self::a) => WebProcessExtensionPageCreatedCallback)
-> m SignalHandlerId
afterWebProcessExtensionPageCreated a
obj (?self::a) => WebProcessExtensionPageCreatedCallback
cb = IO SignalHandlerId -> m SignalHandlerId
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SignalHandlerId -> m SignalHandlerId)
-> IO SignalHandlerId -> m SignalHandlerId
forall a b. (a -> b) -> a -> b
$ do
    let wrapped :: a -> WebProcessExtensionPageCreatedCallback
wrapped a
self = let ?self = a
?self::a
self in (?self::a) => WebProcessExtensionPageCreatedCallback
WebProcessExtensionPageCreatedCallback
cb
    let wrapped' :: C_WebProcessExtensionPageCreatedCallback
wrapped' = (a -> WebProcessExtensionPageCreatedCallback)
-> C_WebProcessExtensionPageCreatedCallback
forall a.
GObject a =>
(a -> WebProcessExtensionPageCreatedCallback)
-> C_WebProcessExtensionPageCreatedCallback
wrap_WebProcessExtensionPageCreatedCallback a -> WebProcessExtensionPageCreatedCallback
wrapped
    FunPtr C_WebProcessExtensionPageCreatedCallback
wrapped'' <- C_WebProcessExtensionPageCreatedCallback
-> IO (FunPtr C_WebProcessExtensionPageCreatedCallback)
mk_WebProcessExtensionPageCreatedCallback C_WebProcessExtensionPageCreatedCallback
wrapped'
    a
-> Text
-> FunPtr C_WebProcessExtensionPageCreatedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"page-created" FunPtr C_WebProcessExtensionPageCreatedCallback
wrapped'' SignalConnectMode
SignalConnectAfter Maybe Text
forall a. Maybe a
Nothing


#if defined(ENABLE_OVERLOADING)
data WebProcessExtensionPageCreatedSignalInfo
instance SignalInfo WebProcessExtensionPageCreatedSignalInfo where
    type HaskellCallbackType WebProcessExtensionPageCreatedSignalInfo = WebProcessExtensionPageCreatedCallback
    connectSignal obj cb connectMode detail = do
        let cb' = wrap_WebProcessExtensionPageCreatedCallback cb
        cb'' <- mk_WebProcessExtensionPageCreatedCallback cb'
        connectSignalFunPtr obj "page-created" cb'' connectMode detail
    dbgSignalInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.WebKitWebProcessExtension.Objects.WebProcessExtension::page-created"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-webkitwebprocessextension-6.0.2/docs/GI-WebKitWebProcessExtension-Objects-WebProcessExtension.html#g:signal:pageCreated"})

#endif

-- signal WebProcessExtension::user-message-received
-- | This signal is emitted when a t'GI.WebKitWebProcessExtension.Objects.UserMessage.UserMessage' is received from the
-- @/WebKitWebContext/@ corresponding to /@extension@/. Messages sent by @/WebKitWebContext/@
-- are always broadcasted to all web extensions and they can\'t be
-- replied to. Calling 'GI.WebKitWebProcessExtension.Objects.UserMessage.userMessageSendReply' will do nothing.
-- 
-- /Since: 2.40/
type WebProcessExtensionUserMessageReceivedCallback =
    WebKitWebProcessExtension.UserMessage.UserMessage
    -- ^ /@message@/: the t'GI.WebKitWebProcessExtension.Objects.UserMessage.UserMessage' received
    -> IO ()

type C_WebProcessExtensionUserMessageReceivedCallback =
    Ptr WebProcessExtension ->              -- object
    Ptr WebKitWebProcessExtension.UserMessage.UserMessage ->
    Ptr () ->                               -- user_data
    IO ()

-- | Generate a function pointer callable from C code, from a `C_WebProcessExtensionUserMessageReceivedCallback`.
foreign import ccall "wrapper"
    mk_WebProcessExtensionUserMessageReceivedCallback :: C_WebProcessExtensionUserMessageReceivedCallback -> IO (FunPtr C_WebProcessExtensionUserMessageReceivedCallback)

wrap_WebProcessExtensionUserMessageReceivedCallback :: 
    GObject a => (a -> WebProcessExtensionUserMessageReceivedCallback) ->
    C_WebProcessExtensionUserMessageReceivedCallback
wrap_WebProcessExtensionUserMessageReceivedCallback :: forall a.
GObject a =>
(a -> WebProcessExtensionUserMessageReceivedCallback)
-> C_WebProcessExtensionUserMessageReceivedCallback
wrap_WebProcessExtensionUserMessageReceivedCallback a -> WebProcessExtensionUserMessageReceivedCallback
gi'cb Ptr WebProcessExtension
gi'selfPtr Ptr UserMessage
message Ptr ()
_ = do
    UserMessage
message' <- ((ManagedPtr UserMessage -> UserMessage)
-> Ptr UserMessage -> IO UserMessage
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr UserMessage -> UserMessage
WebKitWebProcessExtension.UserMessage.UserMessage) Ptr UserMessage
message
    Ptr WebProcessExtension -> (WebProcessExtension -> IO ()) -> IO ()
forall a b.
(HasCallStack, ManagedPtrNewtype a) =>
Ptr a -> (a -> IO b) -> IO b
B.ManagedPtr.withTransient Ptr WebProcessExtension
gi'selfPtr ((WebProcessExtension -> IO ()) -> IO ())
-> (WebProcessExtension -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \WebProcessExtension
gi'self -> a -> WebProcessExtensionUserMessageReceivedCallback
gi'cb (WebProcessExtension -> a
forall a b. Coercible a b => a -> b
Coerce.coerce WebProcessExtension
gi'self)  UserMessage
message'


-- | Connect a signal handler for the [userMessageReceived](#signal:userMessageReceived) signal, to be run before the default handler.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Signals.on' webProcessExtension #userMessageReceived callback
-- @
-- 
-- 
onWebProcessExtensionUserMessageReceived :: (IsWebProcessExtension a, MonadIO m) => a -> ((?self :: a) => WebProcessExtensionUserMessageReceivedCallback) -> m SignalHandlerId
onWebProcessExtensionUserMessageReceived :: forall a (m :: * -> *).
(IsWebProcessExtension a, MonadIO m) =>
a
-> ((?self::a) => WebProcessExtensionUserMessageReceivedCallback)
-> m SignalHandlerId
onWebProcessExtensionUserMessageReceived a
obj (?self::a) => WebProcessExtensionUserMessageReceivedCallback
cb = IO SignalHandlerId -> m SignalHandlerId
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SignalHandlerId -> m SignalHandlerId)
-> IO SignalHandlerId -> m SignalHandlerId
forall a b. (a -> b) -> a -> b
$ do
    let wrapped :: a -> WebProcessExtensionUserMessageReceivedCallback
wrapped a
self = let ?self = a
?self::a
self in (?self::a) => WebProcessExtensionUserMessageReceivedCallback
WebProcessExtensionUserMessageReceivedCallback
cb
    let wrapped' :: C_WebProcessExtensionUserMessageReceivedCallback
wrapped' = (a -> WebProcessExtensionUserMessageReceivedCallback)
-> C_WebProcessExtensionUserMessageReceivedCallback
forall a.
GObject a =>
(a -> WebProcessExtensionUserMessageReceivedCallback)
-> C_WebProcessExtensionUserMessageReceivedCallback
wrap_WebProcessExtensionUserMessageReceivedCallback a -> WebProcessExtensionUserMessageReceivedCallback
wrapped
    FunPtr C_WebProcessExtensionUserMessageReceivedCallback
wrapped'' <- C_WebProcessExtensionUserMessageReceivedCallback
-> IO (FunPtr C_WebProcessExtensionUserMessageReceivedCallback)
mk_WebProcessExtensionUserMessageReceivedCallback C_WebProcessExtensionUserMessageReceivedCallback
wrapped'
    a
-> Text
-> FunPtr C_WebProcessExtensionUserMessageReceivedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"user-message-received" FunPtr C_WebProcessExtensionUserMessageReceivedCallback
wrapped'' SignalConnectMode
SignalConnectBefore Maybe Text
forall a. Maybe a
Nothing

-- | Connect a signal handler for the [userMessageReceived](#signal:userMessageReceived) signal, to be run after the default handler.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Signals.after' webProcessExtension #userMessageReceived callback
-- @
-- 
-- 
-- 
-- By default the object invoking the signal is not passed to the callback.
-- If you need to access it, you can use the implit @?self@ parameter.
-- Note that this requires activating the @ImplicitParams@ GHC extension.
-- 
afterWebProcessExtensionUserMessageReceived :: (IsWebProcessExtension a, MonadIO m) => a -> ((?self :: a) => WebProcessExtensionUserMessageReceivedCallback) -> m SignalHandlerId
afterWebProcessExtensionUserMessageReceived :: forall a (m :: * -> *).
(IsWebProcessExtension a, MonadIO m) =>
a
-> ((?self::a) => WebProcessExtensionUserMessageReceivedCallback)
-> m SignalHandlerId
afterWebProcessExtensionUserMessageReceived a
obj (?self::a) => WebProcessExtensionUserMessageReceivedCallback
cb = IO SignalHandlerId -> m SignalHandlerId
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SignalHandlerId -> m SignalHandlerId)
-> IO SignalHandlerId -> m SignalHandlerId
forall a b. (a -> b) -> a -> b
$ do
    let wrapped :: a -> WebProcessExtensionUserMessageReceivedCallback
wrapped a
self = let ?self = a
?self::a
self in (?self::a) => WebProcessExtensionUserMessageReceivedCallback
WebProcessExtensionUserMessageReceivedCallback
cb
    let wrapped' :: C_WebProcessExtensionUserMessageReceivedCallback
wrapped' = (a -> WebProcessExtensionUserMessageReceivedCallback)
-> C_WebProcessExtensionUserMessageReceivedCallback
forall a.
GObject a =>
(a -> WebProcessExtensionUserMessageReceivedCallback)
-> C_WebProcessExtensionUserMessageReceivedCallback
wrap_WebProcessExtensionUserMessageReceivedCallback a -> WebProcessExtensionUserMessageReceivedCallback
wrapped
    FunPtr C_WebProcessExtensionUserMessageReceivedCallback
wrapped'' <- C_WebProcessExtensionUserMessageReceivedCallback
-> IO (FunPtr C_WebProcessExtensionUserMessageReceivedCallback)
mk_WebProcessExtensionUserMessageReceivedCallback C_WebProcessExtensionUserMessageReceivedCallback
wrapped'
    a
-> Text
-> FunPtr C_WebProcessExtensionUserMessageReceivedCallback
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
forall o a.
GObject o =>
o
-> Text
-> FunPtr a
-> SignalConnectMode
-> Maybe Text
-> IO SignalHandlerId
connectSignalFunPtr a
obj Text
"user-message-received" FunPtr C_WebProcessExtensionUserMessageReceivedCallback
wrapped'' SignalConnectMode
SignalConnectAfter Maybe Text
forall a. Maybe a
Nothing


#if defined(ENABLE_OVERLOADING)
data WebProcessExtensionUserMessageReceivedSignalInfo
instance SignalInfo WebProcessExtensionUserMessageReceivedSignalInfo where
    type HaskellCallbackType WebProcessExtensionUserMessageReceivedSignalInfo = WebProcessExtensionUserMessageReceivedCallback
    connectSignal obj cb connectMode detail = do
        let cb' = wrap_WebProcessExtensionUserMessageReceivedCallback cb
        cb'' <- mk_WebProcessExtensionUserMessageReceivedCallback cb'
        connectSignalFunPtr obj "user-message-received" cb'' connectMode detail
    dbgSignalInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.WebKitWebProcessExtension.Objects.WebProcessExtension::user-message-received"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-webkitwebprocessextension-6.0.2/docs/GI-WebKitWebProcessExtension-Objects-WebProcessExtension.html#g:signal:userMessageReceived"})

#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList WebProcessExtension
type instance O.AttributeList WebProcessExtension = WebProcessExtensionAttributeList
type WebProcessExtensionAttributeList = ('[ ] :: [(Symbol, DK.Type)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList WebProcessExtension = WebProcessExtensionSignalList
type WebProcessExtensionSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo), '("pageCreated", WebProcessExtensionPageCreatedSignalInfo), '("userMessageReceived", WebProcessExtensionUserMessageReceivedSignalInfo)] :: [(Symbol, DK.Type)])

#endif

-- method WebProcessExtension::get_page
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "extension"
--           , argType =
--               TInterface
--                 Name
--                   { namespace = "WebKitWebProcessExtension"
--                   , name = "WebProcessExtension"
--                   }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #WebKitWebProcessExtension"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "page_id"
--           , argType = TBasicType TUInt64
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the identifier of the #WebKitWebPage to get"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TInterface
--                  Name
--                    { namespace = "WebKitWebProcessExtension" , name = "WebPage" })
-- throws : False
-- Skip return : False

foreign import ccall "webkit_web_process_extension_get_page" webkit_web_process_extension_get_page :: 
    Ptr WebProcessExtension ->              -- extension : TInterface (Name {namespace = "WebKitWebProcessExtension", name = "WebProcessExtension"})
    Word64 ->                               -- page_id : TBasicType TUInt64
    IO (Ptr WebKitWebProcessExtension.WebPage.WebPage)

-- | Get the web page of the given /@pageId@/.
-- 
-- /Since: 2.40/
webProcessExtensionGetPage ::
    (B.CallStack.HasCallStack, MonadIO m, IsWebProcessExtension a) =>
    a
    -- ^ /@extension@/: a t'GI.WebKitWebProcessExtension.Objects.WebProcessExtension.WebProcessExtension'
    -> Word64
    -- ^ /@pageId@/: the identifier of the t'GI.WebKitWebProcessExtension.Objects.WebPage.WebPage' to get
    -> m WebKitWebProcessExtension.WebPage.WebPage
    -- ^ __Returns:__ the t'GI.WebKitWebProcessExtension.Objects.WebPage.WebPage' for the given /@pageId@/, or 'P.Nothing' if the
    --    identifier doesn\'t correspond to an existing web page.
webProcessExtensionGetPage :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsWebProcessExtension a) =>
a -> Word64 -> m WebPage
webProcessExtensionGetPage a
extension Word64
pageId = IO WebPage -> m WebPage
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO WebPage -> m WebPage) -> IO WebPage -> m WebPage
forall a b. (a -> b) -> a -> b
$ do
    Ptr WebProcessExtension
extension' <- a -> IO (Ptr WebProcessExtension)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
extension
    Ptr WebPage
result <- Ptr WebProcessExtension -> Word64 -> IO (Ptr WebPage)
webkit_web_process_extension_get_page Ptr WebProcessExtension
extension' Word64
pageId
    Text -> Ptr WebPage -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"webProcessExtensionGetPage" Ptr WebPage
result
    WebPage
result' <- ((ManagedPtr WebPage -> WebPage) -> Ptr WebPage -> IO WebPage
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr WebPage -> WebPage
WebKitWebProcessExtension.WebPage.WebPage) Ptr WebPage
result
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
extension
    WebPage -> IO WebPage
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return WebPage
result'

#if defined(ENABLE_OVERLOADING)
data WebProcessExtensionGetPageMethodInfo
instance (signature ~ (Word64 -> m WebKitWebProcessExtension.WebPage.WebPage), MonadIO m, IsWebProcessExtension a) => O.OverloadedMethod WebProcessExtensionGetPageMethodInfo a signature where
    overloadedMethod = webProcessExtensionGetPage

instance O.OverloadedMethodInfo WebProcessExtensionGetPageMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.WebKitWebProcessExtension.Objects.WebProcessExtension.webProcessExtensionGetPage",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-webkitwebprocessextension-6.0.2/docs/GI-WebKitWebProcessExtension-Objects-WebProcessExtension.html#v:webProcessExtensionGetPage"
        })


#endif

-- method WebProcessExtension::send_message_to_context
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "extension"
--           , argType =
--               TInterface
--                 Name
--                   { namespace = "WebKitWebProcessExtension"
--                   , name = "WebProcessExtension"
--                   }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #WebKitWebProcessExtension"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "message"
--           , argType =
--               TInterface
--                 Name
--                   { namespace = "WebKitWebProcessExtension" , name = "UserMessage" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #WebKitUserMessage"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "cancellable"
--           , argType =
--               TInterface Name { namespace = "Gio" , name = "Cancellable" }
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GCancellable or %NULL to ignore"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "callback"
--           , argType =
--               TInterface Name { namespace = "Gio" , name = "AsyncReadyCallback" }
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just
--                       "(nullable): A #GAsyncReadyCallback to call when the request is satisfied or %NULL"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeAsync
--           , argClosure = 4
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "user_data"
--           , argType = TBasicType TPtr
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the data to pass to callback function"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_web_process_extension_send_message_to_context" webkit_web_process_extension_send_message_to_context :: 
    Ptr WebProcessExtension ->              -- extension : TInterface (Name {namespace = "WebKitWebProcessExtension", name = "WebProcessExtension"})
    Ptr WebKitWebProcessExtension.UserMessage.UserMessage -> -- message : TInterface (Name {namespace = "WebKitWebProcessExtension", name = "UserMessage"})
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    FunPtr Gio.Callbacks.C_AsyncReadyCallback -> -- callback : TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"})
    Ptr () ->                               -- user_data : TBasicType TPtr
    IO ()

-- | Send /@message@/ to the @/WebKitWebContext/@ corresponding to /@extension@/. If /@message@/ is floating, it\'s consumed.
-- 
-- If you don\'t expect any reply, or you simply want to ignore it, you can pass 'P.Nothing' as /@calback@/.
-- When the operation is finished, /@callback@/ will be called. You can then call
-- 'GI.WebKitWebProcessExtension.Objects.WebProcessExtension.webProcessExtensionSendMessageToContextFinish' to get the message reply.
-- 
-- /Since: 2.40/
webProcessExtensionSendMessageToContext ::
    (B.CallStack.HasCallStack, MonadIO m, IsWebProcessExtension a, WebKitWebProcessExtension.UserMessage.IsUserMessage b, Gio.Cancellable.IsCancellable c) =>
    a
    -- ^ /@extension@/: a t'GI.WebKitWebProcessExtension.Objects.WebProcessExtension.WebProcessExtension'
    -> b
    -- ^ /@message@/: a t'GI.WebKitWebProcessExtension.Objects.UserMessage.UserMessage'
    -> Maybe (c)
    -- ^ /@cancellable@/: a t'GI.Gio.Objects.Cancellable.Cancellable' or 'P.Nothing' to ignore
    -> Maybe (Gio.Callbacks.AsyncReadyCallback)
    -- ^ /@callback@/: (nullable): A t'GI.Gio.Callbacks.AsyncReadyCallback' to call when the request is satisfied or 'P.Nothing'
    -> m ()
webProcessExtensionSendMessageToContext :: forall (m :: * -> *) a b c.
(HasCallStack, MonadIO m, IsWebProcessExtension a, IsUserMessage b,
 IsCancellable c) =>
a -> b -> Maybe c -> Maybe AsyncReadyCallback -> m ()
webProcessExtensionSendMessageToContext a
extension b
message Maybe c
cancellable Maybe AsyncReadyCallback
callback = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr WebProcessExtension
extension' <- a -> IO (Ptr WebProcessExtension)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
extension
    Ptr UserMessage
message' <- b -> IO (Ptr UserMessage)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
message
    Ptr Cancellable
maybeCancellable <- case Maybe c
cancellable of
        Maybe c
Nothing -> Ptr Cancellable -> IO (Ptr Cancellable)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Cancellable
forall a. Ptr a
nullPtr
        Just c
jCancellable -> do
            Ptr Cancellable
jCancellable' <- c -> IO (Ptr Cancellable)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr c
jCancellable
            Ptr Cancellable -> IO (Ptr Cancellable)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Cancellable
jCancellable'
    FunPtr C_AsyncReadyCallback
maybeCallback <- case Maybe AsyncReadyCallback
callback of
        Maybe AsyncReadyCallback
Nothing -> FunPtr C_AsyncReadyCallback -> IO (FunPtr C_AsyncReadyCallback)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Ptr Any -> FunPtr C_AsyncReadyCallback
forall a b. Ptr a -> FunPtr b
castPtrToFunPtr Ptr Any
forall a. Ptr a
nullPtr)
        Just AsyncReadyCallback
jCallback -> do
            Ptr (FunPtr C_AsyncReadyCallback)
ptrcallback <- IO (Ptr (FunPtr C_AsyncReadyCallback))
forall a. Storable a => IO (Ptr a)
callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback))
            FunPtr C_AsyncReadyCallback
jCallback' <- C_AsyncReadyCallback -> IO (FunPtr C_AsyncReadyCallback)
Gio.Callbacks.mk_AsyncReadyCallback (Maybe (Ptr (FunPtr C_AsyncReadyCallback))
-> AsyncReadyCallback -> C_AsyncReadyCallback
Gio.Callbacks.wrap_AsyncReadyCallback (Ptr (FunPtr C_AsyncReadyCallback)
-> Maybe (Ptr (FunPtr C_AsyncReadyCallback))
forall a. a -> Maybe a
Just Ptr (FunPtr C_AsyncReadyCallback)
ptrcallback) AsyncReadyCallback
jCallback)
            Ptr (FunPtr C_AsyncReadyCallback)
-> FunPtr C_AsyncReadyCallback -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke Ptr (FunPtr C_AsyncReadyCallback)
ptrcallback FunPtr C_AsyncReadyCallback
jCallback'
            FunPtr C_AsyncReadyCallback -> IO (FunPtr C_AsyncReadyCallback)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return FunPtr C_AsyncReadyCallback
jCallback'
    let userData :: Ptr a
userData = Ptr a
forall a. Ptr a
nullPtr
    Ptr WebProcessExtension
-> Ptr UserMessage
-> Ptr Cancellable
-> FunPtr C_AsyncReadyCallback
-> Ptr ()
-> IO ()
webkit_web_process_extension_send_message_to_context Ptr WebProcessExtension
extension' Ptr UserMessage
message' Ptr Cancellable
maybeCancellable FunPtr C_AsyncReadyCallback
maybeCallback Ptr ()
forall a. Ptr a
userData
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
extension
    b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
message
    Maybe c -> (c -> IO ()) -> IO ()
forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
whenJust Maybe c
cancellable c -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data WebProcessExtensionSendMessageToContextMethodInfo
instance (signature ~ (b -> Maybe (c) -> Maybe (Gio.Callbacks.AsyncReadyCallback) -> m ()), MonadIO m, IsWebProcessExtension a, WebKitWebProcessExtension.UserMessage.IsUserMessage b, Gio.Cancellable.IsCancellable c) => O.OverloadedMethod WebProcessExtensionSendMessageToContextMethodInfo a signature where
    overloadedMethod = webProcessExtensionSendMessageToContext

instance O.OverloadedMethodInfo WebProcessExtensionSendMessageToContextMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.WebKitWebProcessExtension.Objects.WebProcessExtension.webProcessExtensionSendMessageToContext",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-webkitwebprocessextension-6.0.2/docs/GI-WebKitWebProcessExtension-Objects-WebProcessExtension.html#v:webProcessExtensionSendMessageToContext"
        })


#endif

-- method WebProcessExtension::send_message_to_context_finish
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "extension"
--           , argType =
--               TInterface
--                 Name
--                   { namespace = "WebKitWebProcessExtension"
--                   , name = "WebProcessExtension"
--                   }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #WebKitWebProcessExtension"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "result"
--           , argType =
--               TInterface Name { namespace = "Gio" , name = "AsyncResult" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GAsyncResult" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TInterface
--                  Name
--                    { namespace = "WebKitWebProcessExtension" , name = "UserMessage" })
-- throws : True
-- Skip return : False

foreign import ccall "webkit_web_process_extension_send_message_to_context_finish" webkit_web_process_extension_send_message_to_context_finish :: 
    Ptr WebProcessExtension ->              -- extension : TInterface (Name {namespace = "WebKitWebProcessExtension", name = "WebProcessExtension"})
    Ptr Gio.AsyncResult.AsyncResult ->      -- result : TInterface (Name {namespace = "Gio", name = "AsyncResult"})
    Ptr (Ptr GError) ->                     -- error
    IO (Ptr WebKitWebProcessExtension.UserMessage.UserMessage)

-- | Finish an asynchronous operation started with 'GI.WebKitWebProcessExtension.Objects.WebProcessExtension.webProcessExtensionSendMessageToContext'.
-- 
-- /Since: 2.40/
webProcessExtensionSendMessageToContextFinish ::
    (B.CallStack.HasCallStack, MonadIO m, IsWebProcessExtension a, Gio.AsyncResult.IsAsyncResult b) =>
    a
    -- ^ /@extension@/: a t'GI.WebKitWebProcessExtension.Objects.WebProcessExtension.WebProcessExtension'
    -> b
    -- ^ /@result@/: a t'GI.Gio.Interfaces.AsyncResult.AsyncResult'
    -> m WebKitWebProcessExtension.UserMessage.UserMessage
    -- ^ __Returns:__ a t'GI.WebKitWebProcessExtension.Objects.UserMessage.UserMessage' with the reply or 'P.Nothing' in case of error. /(Can throw 'Data.GI.Base.GError.GError')/
webProcessExtensionSendMessageToContextFinish :: forall (m :: * -> *) a b.
(HasCallStack, MonadIO m, IsWebProcessExtension a,
 IsAsyncResult b) =>
a -> b -> m UserMessage
webProcessExtensionSendMessageToContextFinish a
extension b
result_ = IO UserMessage -> m UserMessage
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO UserMessage -> m UserMessage)
-> IO UserMessage -> m UserMessage
forall a b. (a -> b) -> a -> b
$ do
    Ptr WebProcessExtension
extension' <- a -> IO (Ptr WebProcessExtension)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
extension
    Ptr AsyncResult
result_' <- b -> IO (Ptr AsyncResult)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr b
result_
    IO UserMessage -> IO () -> IO UserMessage
forall a b. IO a -> IO b -> IO a
onException (do
        Ptr UserMessage
result <- (Ptr (Ptr GError) -> IO (Ptr UserMessage)) -> IO (Ptr UserMessage)
forall a. (Ptr (Ptr GError) -> IO a) -> IO a
propagateGError ((Ptr (Ptr GError) -> IO (Ptr UserMessage))
 -> IO (Ptr UserMessage))
-> (Ptr (Ptr GError) -> IO (Ptr UserMessage))
-> IO (Ptr UserMessage)
forall a b. (a -> b) -> a -> b
$ Ptr WebProcessExtension
-> Ptr AsyncResult -> Ptr (Ptr GError) -> IO (Ptr UserMessage)
webkit_web_process_extension_send_message_to_context_finish Ptr WebProcessExtension
extension' Ptr AsyncResult
result_'
        Text -> Ptr UserMessage -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"webProcessExtensionSendMessageToContextFinish" Ptr UserMessage
result
        UserMessage
result' <- ((ManagedPtr UserMessage -> UserMessage)
-> Ptr UserMessage -> IO UserMessage
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
wrapObject ManagedPtr UserMessage -> UserMessage
WebKitWebProcessExtension.UserMessage.UserMessage) Ptr UserMessage
result
        a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
extension
        b -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr b
result_
        UserMessage -> IO UserMessage
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return UserMessage
result'
     ) (do
        () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
     )

#if defined(ENABLE_OVERLOADING)
data WebProcessExtensionSendMessageToContextFinishMethodInfo
instance (signature ~ (b -> m WebKitWebProcessExtension.UserMessage.UserMessage), MonadIO m, IsWebProcessExtension a, Gio.AsyncResult.IsAsyncResult b) => O.OverloadedMethod WebProcessExtensionSendMessageToContextFinishMethodInfo a signature where
    overloadedMethod = webProcessExtensionSendMessageToContextFinish

instance O.OverloadedMethodInfo WebProcessExtensionSendMessageToContextFinishMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.WebKitWebProcessExtension.Objects.WebProcessExtension.webProcessExtensionSendMessageToContextFinish",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-webkitwebprocessextension-6.0.2/docs/GI-WebKitWebProcessExtension-Objects-WebProcessExtension.html#v:webProcessExtensionSendMessageToContextFinish"
        })


#endif