{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)

/No description available in the introspection data./
-}

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

module GI.WebKit2WebExtension.Objects.WebPage
    (

-- * Exported types
    WebPage(..)                             ,
    IsWebPage                               ,
    toWebPage                               ,
    noWebPage                               ,


 -- * Methods
-- ** getDomDocument #method:getDomDocument#

#if ENABLE_OVERLOADING
    WebPageGetDomDocumentMethodInfo         ,
#endif
    webPageGetDomDocument                   ,


-- ** getEditor #method:getEditor#

#if ENABLE_OVERLOADING
    WebPageGetEditorMethodInfo              ,
#endif
    webPageGetEditor                        ,


-- ** getId #method:getId#

#if ENABLE_OVERLOADING
    WebPageGetIdMethodInfo                  ,
#endif
    webPageGetId                            ,


-- ** getMainFrame #method:getMainFrame#

#if ENABLE_OVERLOADING
    WebPageGetMainFrameMethodInfo           ,
#endif
    webPageGetMainFrame                     ,


-- ** getUri #method:getUri#

#if ENABLE_OVERLOADING
    WebPageGetUriMethodInfo                 ,
#endif
    webPageGetUri                           ,




 -- * Properties
-- ** uri #attr:uri#
{- | The current active URI of the 'GI.WebKit2WebExtension.Objects.WebPage.WebPage'.
-}
#if ENABLE_OVERLOADING
    WebPageUriPropertyInfo                  ,
#endif
    getWebPageUri                           ,
#if ENABLE_OVERLOADING
    webPageUri                              ,
#endif




 -- * Signals
-- ** consoleMessageSent #signal:consoleMessageSent#

    C_WebPageConsoleMessageSentCallback     ,
    WebPageConsoleMessageSentCallback       ,
#if ENABLE_OVERLOADING
    WebPageConsoleMessageSentSignalInfo     ,
#endif
    afterWebPageConsoleMessageSent          ,
    genClosure_WebPageConsoleMessageSent    ,
    mk_WebPageConsoleMessageSentCallback    ,
    noWebPageConsoleMessageSentCallback     ,
    onWebPageConsoleMessageSent             ,
    wrap_WebPageConsoleMessageSentCallback  ,


-- ** contextMenu #signal:contextMenu#

    C_WebPageContextMenuCallback            ,
    WebPageContextMenuCallback              ,
#if ENABLE_OVERLOADING
    WebPageContextMenuSignalInfo            ,
#endif
    afterWebPageContextMenu                 ,
    genClosure_WebPageContextMenu           ,
    mk_WebPageContextMenuCallback           ,
    noWebPageContextMenuCallback            ,
    onWebPageContextMenu                    ,
    wrap_WebPageContextMenuCallback         ,


-- ** documentLoaded #signal:documentLoaded#

    C_WebPageDocumentLoadedCallback         ,
    WebPageDocumentLoadedCallback           ,
#if ENABLE_OVERLOADING
    WebPageDocumentLoadedSignalInfo         ,
#endif
    afterWebPageDocumentLoaded              ,
    genClosure_WebPageDocumentLoaded        ,
    mk_WebPageDocumentLoadedCallback        ,
    noWebPageDocumentLoadedCallback         ,
    onWebPageDocumentLoaded                 ,
    wrap_WebPageDocumentLoadedCallback      ,


-- ** formControlsAssociated #signal:formControlsAssociated#

    C_WebPageFormControlsAssociatedCallback ,
    WebPageFormControlsAssociatedCallback   ,
#if ENABLE_OVERLOADING
    WebPageFormControlsAssociatedSignalInfo ,
#endif
    afterWebPageFormControlsAssociated      ,
    genClosure_WebPageFormControlsAssociated,
    mk_WebPageFormControlsAssociatedCallback,
    noWebPageFormControlsAssociatedCallback ,
    onWebPageFormControlsAssociated         ,
    wrap_WebPageFormControlsAssociatedCallback,


-- ** sendRequest #signal:sendRequest#

    C_WebPageSendRequestCallback            ,
    WebPageSendRequestCallback              ,
#if ENABLE_OVERLOADING
    WebPageSendRequestSignalInfo            ,
#endif
    afterWebPageSendRequest                 ,
    genClosure_WebPageSendRequest           ,
    mk_WebPageSendRequestCallback           ,
    noWebPageSendRequestCallback            ,
    onWebPageSendRequest                    ,
    wrap_WebPageSendRequestCallback         ,


-- ** willSubmitForm #signal:willSubmitForm#

    C_WebPageWillSubmitFormCallback         ,
    WebPageWillSubmitFormCallback           ,
#if ENABLE_OVERLOADING
    WebPageWillSubmitFormSignalInfo         ,
#endif
    afterWebPageWillSubmitForm              ,
    genClosure_WebPageWillSubmitForm        ,
    mk_WebPageWillSubmitFormCallback        ,
    noWebPageWillSubmitFormCallback         ,
    onWebPageWillSubmitForm                 ,
    wrap_WebPageWillSubmitFormCallback      ,




    ) 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.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
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.Text as T
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 GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Enums as WebKit2WebExtension.Enums
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.ContextMenu as WebKit2WebExtension.ContextMenu
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.DOMDocument as WebKit2WebExtension.DOMDocument
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.DOMElement as WebKit2WebExtension.DOMElement
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.Frame as WebKit2WebExtension.Frame
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.URIRequest as WebKit2WebExtension.URIRequest
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.URIResponse as WebKit2WebExtension.URIResponse
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.WebEditor as WebKit2WebExtension.WebEditor
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.WebHitTestResult as WebKit2WebExtension.WebHitTestResult
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Structs.ConsoleMessage as WebKit2WebExtension.ConsoleMessage

-- | Memory-managed wrapper type.
newtype WebPage = WebPage (ManagedPtr WebPage)
foreign import ccall "webkit_web_page_get_type"
    c_webkit_web_page_get_type :: IO GType

instance GObject WebPage where
    gobjectType = c_webkit_web_page_get_type


-- | Type class for types which can be safely cast to `WebPage`, for instance with `toWebPage`.
class (GObject o, O.IsDescendantOf WebPage o) => IsWebPage o
instance (GObject o, O.IsDescendantOf WebPage o) => IsWebPage o

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

-- | Cast to `WebPage`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toWebPage :: (MonadIO m, IsWebPage o) => o -> m WebPage
toWebPage = liftIO . unsafeCastTo WebPage

-- | A convenience alias for `Nothing` :: `Maybe` `WebPage`.
noWebPage :: Maybe WebPage
noWebPage = Nothing

#if ENABLE_OVERLOADING
type family ResolveWebPageMethod (t :: Symbol) (o :: *) :: * where
    ResolveWebPageMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveWebPageMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveWebPageMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveWebPageMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveWebPageMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveWebPageMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveWebPageMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveWebPageMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveWebPageMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveWebPageMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveWebPageMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveWebPageMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveWebPageMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveWebPageMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveWebPageMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveWebPageMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveWebPageMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveWebPageMethod "getDomDocument" o = WebPageGetDomDocumentMethodInfo
    ResolveWebPageMethod "getEditor" o = WebPageGetEditorMethodInfo
    ResolveWebPageMethod "getId" o = WebPageGetIdMethodInfo
    ResolveWebPageMethod "getMainFrame" o = WebPageGetMainFrameMethodInfo
    ResolveWebPageMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveWebPageMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveWebPageMethod "getUri" o = WebPageGetUriMethodInfo
    ResolveWebPageMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveWebPageMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveWebPageMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveWebPageMethod t WebPage, O.MethodInfo info WebPage p) => OL.IsLabel t (WebPage -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

#endif

-- signal WebPage::console-message-sent
{- |
Emitted when a message is sent to the console. This can be a message
produced by the use of JavaScript console API, a JavaScript exception,
a security error or other errors, warnings, debug or log messages.
The /@consoleMessage@/ contains information of the message.

/Since: 2.12/
-}
type WebPageConsoleMessageSentCallback =
    WebKit2WebExtension.ConsoleMessage.ConsoleMessage
    {- ^ /@consoleMessage@/: the 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage' -}
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `WebPageConsoleMessageSentCallback`@.
noWebPageConsoleMessageSentCallback :: Maybe WebPageConsoleMessageSentCallback
noWebPageConsoleMessageSentCallback = Nothing

-- | Type for the callback on the (unwrapped) C side.
type C_WebPageConsoleMessageSentCallback =
    Ptr () ->                               -- object
    Ptr WebKit2WebExtension.ConsoleMessage.ConsoleMessage ->
    Ptr () ->                               -- user_data
    IO ()

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

-- | Wrap the callback into a `GClosure`.
genClosure_WebPageConsoleMessageSent :: MonadIO m => WebPageConsoleMessageSentCallback -> m (GClosure C_WebPageConsoleMessageSentCallback)
genClosure_WebPageConsoleMessageSent cb = liftIO $ do
    let cb' = wrap_WebPageConsoleMessageSentCallback cb
    mk_WebPageConsoleMessageSentCallback cb' >>= B.GClosure.newGClosure


-- | Wrap a `WebPageConsoleMessageSentCallback` into a `C_WebPageConsoleMessageSentCallback`.
wrap_WebPageConsoleMessageSentCallback ::
    WebPageConsoleMessageSentCallback ->
    C_WebPageConsoleMessageSentCallback
wrap_WebPageConsoleMessageSentCallback _cb _ consoleMessage _ = do
    B.ManagedPtr.withTransient WebKit2WebExtension.ConsoleMessage.ConsoleMessage consoleMessage $ \consoleMessage' -> do
        _cb  consoleMessage'


{- |
Connect a signal handler for the “@console-message-sent@” 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' webPage #consoleMessageSent callback
@
-}
onWebPageConsoleMessageSent :: (IsWebPage a, MonadIO m) => a -> WebPageConsoleMessageSentCallback -> m SignalHandlerId
onWebPageConsoleMessageSent obj cb = liftIO $ do
    let cb' = wrap_WebPageConsoleMessageSentCallback cb
    cb'' <- mk_WebPageConsoleMessageSentCallback cb'
    connectSignalFunPtr obj "console-message-sent" cb'' SignalConnectBefore

{- |
Connect a signal handler for the “@console-message-sent@” 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' webPage #consoleMessageSent callback
@
-}
afterWebPageConsoleMessageSent :: (IsWebPage a, MonadIO m) => a -> WebPageConsoleMessageSentCallback -> m SignalHandlerId
afterWebPageConsoleMessageSent obj cb = liftIO $ do
    let cb' = wrap_WebPageConsoleMessageSentCallback cb
    cb'' <- mk_WebPageConsoleMessageSentCallback cb'
    connectSignalFunPtr obj "console-message-sent" cb'' SignalConnectAfter


-- signal WebPage::context-menu
{- |
Emitted before a context menu is displayed in the UI Process to
give the application a chance to customize the proposed menu,
build its own context menu or pass user data to the UI Process.
This signal is useful when the information available in the UI Process
is not enough to build or customize the context menu, for example, to
add menu entries depending on the 'GI.WebKit2WebExtension.Objects.DOMNode.DOMNode' at the coordinates of the
/@hitTestResult@/. Otherwise, it\'s recommended to use @/WebKitWebView::context-menu/@
signal instead.

/Since: 2.8/
-}
type WebPageContextMenuCallback =
    WebKit2WebExtension.ContextMenu.ContextMenu
    {- ^ /@contextMenu@/: the proposed @/WebKitContextMenu/@ -}
    -> WebKit2WebExtension.WebHitTestResult.WebHitTestResult
    {- ^ /@hitTestResult@/: a 'GI.WebKit2WebExtension.Objects.WebHitTestResult.WebHitTestResult' -}
    -> IO Bool
    {- ^ __Returns:__ 'True' if the proposed /@contextMenu@/ has been modified, or 'False' otherwise. -}

-- | A convenience synonym for @`Nothing` :: `Maybe` `WebPageContextMenuCallback`@.
noWebPageContextMenuCallback :: Maybe WebPageContextMenuCallback
noWebPageContextMenuCallback = Nothing

-- | Type for the callback on the (unwrapped) C side.
type C_WebPageContextMenuCallback =
    Ptr () ->                               -- object
    Ptr WebKit2WebExtension.ContextMenu.ContextMenu ->
    Ptr WebKit2WebExtension.WebHitTestResult.WebHitTestResult ->
    Ptr () ->                               -- user_data
    IO CInt

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

-- | Wrap the callback into a `GClosure`.
genClosure_WebPageContextMenu :: MonadIO m => WebPageContextMenuCallback -> m (GClosure C_WebPageContextMenuCallback)
genClosure_WebPageContextMenu cb = liftIO $ do
    let cb' = wrap_WebPageContextMenuCallback cb
    mk_WebPageContextMenuCallback cb' >>= B.GClosure.newGClosure


-- | Wrap a `WebPageContextMenuCallback` into a `C_WebPageContextMenuCallback`.
wrap_WebPageContextMenuCallback ::
    WebPageContextMenuCallback ->
    C_WebPageContextMenuCallback
wrap_WebPageContextMenuCallback _cb _ contextMenu hitTestResult _ = do
    contextMenu' <- (newObject WebKit2WebExtension.ContextMenu.ContextMenu) contextMenu
    hitTestResult' <- (newObject WebKit2WebExtension.WebHitTestResult.WebHitTestResult) hitTestResult
    result <- _cb  contextMenu' hitTestResult'
    let result' = (fromIntegral . fromEnum) result
    return result'


{- |
Connect a signal handler for the “@context-menu@” 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' webPage #contextMenu callback
@
-}
onWebPageContextMenu :: (IsWebPage a, MonadIO m) => a -> WebPageContextMenuCallback -> m SignalHandlerId
onWebPageContextMenu obj cb = liftIO $ do
    let cb' = wrap_WebPageContextMenuCallback cb
    cb'' <- mk_WebPageContextMenuCallback cb'
    connectSignalFunPtr obj "context-menu" cb'' SignalConnectBefore

{- |
Connect a signal handler for the “@context-menu@” 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' webPage #contextMenu callback
@
-}
afterWebPageContextMenu :: (IsWebPage a, MonadIO m) => a -> WebPageContextMenuCallback -> m SignalHandlerId
afterWebPageContextMenu obj cb = liftIO $ do
    let cb' = wrap_WebPageContextMenuCallback cb
    cb'' <- mk_WebPageContextMenuCallback cb'
    connectSignalFunPtr obj "context-menu" cb'' SignalConnectAfter


-- signal WebPage::document-loaded
{- |
This signal is emitted when the DOM document of a 'GI.WebKit2WebExtension.Objects.WebPage.WebPage' has been
loaded.

You can wait for this signal to get the DOM document with
'GI.WebKit2WebExtension.Objects.WebPage.webPageGetDomDocument'.
-}
type WebPageDocumentLoadedCallback =
    IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `WebPageDocumentLoadedCallback`@.
noWebPageDocumentLoadedCallback :: Maybe WebPageDocumentLoadedCallback
noWebPageDocumentLoadedCallback = Nothing

-- | Type for the callback on the (unwrapped) C side.
type C_WebPageDocumentLoadedCallback =
    Ptr () ->                               -- object
    Ptr () ->                               -- user_data
    IO ()

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

-- | Wrap the callback into a `GClosure`.
genClosure_WebPageDocumentLoaded :: MonadIO m => WebPageDocumentLoadedCallback -> m (GClosure C_WebPageDocumentLoadedCallback)
genClosure_WebPageDocumentLoaded cb = liftIO $ do
    let cb' = wrap_WebPageDocumentLoadedCallback cb
    mk_WebPageDocumentLoadedCallback cb' >>= B.GClosure.newGClosure


-- | Wrap a `WebPageDocumentLoadedCallback` into a `C_WebPageDocumentLoadedCallback`.
wrap_WebPageDocumentLoadedCallback ::
    WebPageDocumentLoadedCallback ->
    C_WebPageDocumentLoadedCallback
wrap_WebPageDocumentLoadedCallback _cb _ _ = do
    _cb


{- |
Connect a signal handler for the “@document-loaded@” 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' webPage #documentLoaded callback
@
-}
onWebPageDocumentLoaded :: (IsWebPage a, MonadIO m) => a -> WebPageDocumentLoadedCallback -> m SignalHandlerId
onWebPageDocumentLoaded obj cb = liftIO $ do
    let cb' = wrap_WebPageDocumentLoadedCallback cb
    cb'' <- mk_WebPageDocumentLoadedCallback cb'
    connectSignalFunPtr obj "document-loaded" cb'' SignalConnectBefore

{- |
Connect a signal handler for the “@document-loaded@” 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' webPage #documentLoaded callback
@
-}
afterWebPageDocumentLoaded :: (IsWebPage a, MonadIO m) => a -> WebPageDocumentLoadedCallback -> m SignalHandlerId
afterWebPageDocumentLoaded obj cb = liftIO $ do
    let cb' = wrap_WebPageDocumentLoadedCallback cb
    cb'' <- mk_WebPageDocumentLoadedCallback cb'
    connectSignalFunPtr obj "document-loaded" cb'' SignalConnectAfter


-- signal WebPage::form-controls-associated
{- |
Emitted after form elements (or form associated elements) are associated to a particular web
page. This is useful to implement form auto filling for web pages where form fields are added
dynamically. This signal might be emitted multiple times for the same web page.

Note that this signal could be also emitted when form controls are moved between forms. In
that case, the /@elements@/ array carries the list of those elements which have moved.

Clients should take a reference to the members of the /@elements@/ array if it is desired to
keep them alive after the signal handler returns.

/Since: 2.16/
-}
type WebPageFormControlsAssociatedCallback =
    [WebKit2WebExtension.DOMElement.DOMElement]
    {- ^ /@elements@/: a 'GI.GLib.Structs.PtrArray.PtrArray' of
    'GI.WebKit2WebExtension.Objects.DOMElement.DOMElement' with the list of forms in the page -}
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `WebPageFormControlsAssociatedCallback`@.
noWebPageFormControlsAssociatedCallback :: Maybe WebPageFormControlsAssociatedCallback
noWebPageFormControlsAssociatedCallback = Nothing

-- | Type for the callback on the (unwrapped) C side.
type C_WebPageFormControlsAssociatedCallback =
    Ptr () ->                               -- object
    Ptr (GPtrArray (Ptr WebKit2WebExtension.DOMElement.DOMElement)) ->
    Ptr () ->                               -- user_data
    IO ()

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

-- | Wrap the callback into a `GClosure`.
genClosure_WebPageFormControlsAssociated :: MonadIO m => WebPageFormControlsAssociatedCallback -> m (GClosure C_WebPageFormControlsAssociatedCallback)
genClosure_WebPageFormControlsAssociated cb = liftIO $ do
    let cb' = wrap_WebPageFormControlsAssociatedCallback cb
    mk_WebPageFormControlsAssociatedCallback cb' >>= B.GClosure.newGClosure


-- | Wrap a `WebPageFormControlsAssociatedCallback` into a `C_WebPageFormControlsAssociatedCallback`.
wrap_WebPageFormControlsAssociatedCallback ::
    WebPageFormControlsAssociatedCallback ->
    C_WebPageFormControlsAssociatedCallback
wrap_WebPageFormControlsAssociatedCallback _cb _ elements _ = do
    elements' <- unpackGPtrArray elements
    elements'' <- mapM (newObject WebKit2WebExtension.DOMElement.DOMElement) elements'
    _cb  elements''


{- |
Connect a signal handler for the “@form-controls-associated@” 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' webPage #formControlsAssociated callback
@
-}
onWebPageFormControlsAssociated :: (IsWebPage a, MonadIO m) => a -> WebPageFormControlsAssociatedCallback -> m SignalHandlerId
onWebPageFormControlsAssociated obj cb = liftIO $ do
    let cb' = wrap_WebPageFormControlsAssociatedCallback cb
    cb'' <- mk_WebPageFormControlsAssociatedCallback cb'
    connectSignalFunPtr obj "form-controls-associated" cb'' SignalConnectBefore

{- |
Connect a signal handler for the “@form-controls-associated@” 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' webPage #formControlsAssociated callback
@
-}
afterWebPageFormControlsAssociated :: (IsWebPage a, MonadIO m) => a -> WebPageFormControlsAssociatedCallback -> m SignalHandlerId
afterWebPageFormControlsAssociated obj cb = liftIO $ do
    let cb' = wrap_WebPageFormControlsAssociatedCallback cb
    cb'' <- mk_WebPageFormControlsAssociatedCallback cb'
    connectSignalFunPtr obj "form-controls-associated" cb'' SignalConnectAfter


-- signal WebPage::send-request
{- |
This signal is emitted when /@request@/ is about to be sent to
the server. This signal can be used to modify the 'GI.WebKit2WebExtension.Objects.URIRequest.URIRequest'
that will be sent to the server. You can also cancel the resource load
operation by connecting to this signal and returning 'True'.

In case of a server redirection this signal is
emitted again with the /@request@/ argument containing the new
request to be sent to the server due to the redirection and the
/@redirectedResponse@/ parameter containing the response
received by the server for the initial request.

Modifications to the 'GI.WebKit2WebExtension.Objects.URIRequest.URIRequest' and its associated
'GI.Soup.Structs.MessageHeaders.MessageHeaders' will be taken into account when the request
is sent over the network.
-}
type WebPageSendRequestCallback =
    WebKit2WebExtension.URIRequest.URIRequest
    {- ^ /@request@/: a 'GI.WebKit2WebExtension.Objects.URIRequest.URIRequest' -}
    -> WebKit2WebExtension.URIResponse.URIResponse
    {- ^ /@redirectedResponse@/: a 'GI.WebKit2WebExtension.Objects.URIResponse.URIResponse', or 'Nothing' -}
    -> IO Bool
    {- ^ __Returns:__ 'True' to stop other handlers from being invoked for the event.
   'False' to continue emission of the event. -}

-- | A convenience synonym for @`Nothing` :: `Maybe` `WebPageSendRequestCallback`@.
noWebPageSendRequestCallback :: Maybe WebPageSendRequestCallback
noWebPageSendRequestCallback = Nothing

-- | Type for the callback on the (unwrapped) C side.
type C_WebPageSendRequestCallback =
    Ptr () ->                               -- object
    Ptr WebKit2WebExtension.URIRequest.URIRequest ->
    Ptr WebKit2WebExtension.URIResponse.URIResponse ->
    Ptr () ->                               -- user_data
    IO CInt

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

-- | Wrap the callback into a `GClosure`.
genClosure_WebPageSendRequest :: MonadIO m => WebPageSendRequestCallback -> m (GClosure C_WebPageSendRequestCallback)
genClosure_WebPageSendRequest cb = liftIO $ do
    let cb' = wrap_WebPageSendRequestCallback cb
    mk_WebPageSendRequestCallback cb' >>= B.GClosure.newGClosure


-- | Wrap a `WebPageSendRequestCallback` into a `C_WebPageSendRequestCallback`.
wrap_WebPageSendRequestCallback ::
    WebPageSendRequestCallback ->
    C_WebPageSendRequestCallback
wrap_WebPageSendRequestCallback _cb _ request redirectedResponse _ = do
    request' <- (newObject WebKit2WebExtension.URIRequest.URIRequest) request
    redirectedResponse' <- (newObject WebKit2WebExtension.URIResponse.URIResponse) redirectedResponse
    result <- _cb  request' redirectedResponse'
    let result' = (fromIntegral . fromEnum) result
    return result'


{- |
Connect a signal handler for the “@send-request@” 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' webPage #sendRequest callback
@
-}
onWebPageSendRequest :: (IsWebPage a, MonadIO m) => a -> WebPageSendRequestCallback -> m SignalHandlerId
onWebPageSendRequest obj cb = liftIO $ do
    let cb' = wrap_WebPageSendRequestCallback cb
    cb'' <- mk_WebPageSendRequestCallback cb'
    connectSignalFunPtr obj "send-request" cb'' SignalConnectBefore

{- |
Connect a signal handler for the “@send-request@” 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' webPage #sendRequest callback
@
-}
afterWebPageSendRequest :: (IsWebPage a, MonadIO m) => a -> WebPageSendRequestCallback -> m SignalHandlerId
afterWebPageSendRequest obj cb = liftIO $ do
    let cb' = wrap_WebPageSendRequestCallback cb
    cb'' <- mk_WebPageSendRequestCallback cb'
    connectSignalFunPtr obj "send-request" cb'' SignalConnectAfter


-- signal WebPage::will-submit-form
{- |
This signal is emitted to indicate various points during form
submission. /@step@/ indicates the current stage of form submission.

If this signal is emitted with 'GI.WebKit2WebExtension.Enums.FormSubmissionStepSendDomEvent',
then the DOM submit event is about to be emitted. JavaScript code
may rely on the submit event to detect that the user has clicked
on a submit button, and to possibly cancel the form submission
before 'GI.WebKit2WebExtension.Enums.FormSubmissionStepComplete'. However, beware
that, for historical reasons, the submit event is not emitted at
all if the form submission is triggered by JavaScript. For these
reasons, 'GI.WebKit2WebExtension.Enums.FormSubmissionStepSendDomEvent' may not
be used to reliably detect whether a form will be submitted.
Instead, use it to detect if a user has clicked on a form\'s
submit button even if JavaScript later cancels the form
submission, or to read the values of the form\'s fields even if
JavaScript later clears certain fields before submitting. This
may be needed, for example, to implement a robust browser
password manager, as some misguided websites may use such
techniques to attempt to thwart password managers.

If this signal is emitted with 'GI.WebKit2WebExtension.Enums.FormSubmissionStepComplete',
the form will imminently be submitted. It can no longer be
cancelled. This event always occurs immediately before a form is
submitted to its target, so use this event to reliably detect
when a form is submitted. This event occurs after
'GI.WebKit2WebExtension.Enums.FormSubmissionStepSendDomEvent' if that event is
emitted.

/Since: 2.20/
-}
type WebPageWillSubmitFormCallback =
    WebKit2WebExtension.DOMElement.DOMElement
    {- ^ /@form@/: the 'GI.WebKit2WebExtension.Objects.DOMElement.DOMElement' to be submitted, which will always correspond to an HTMLFormElement -}
    -> WebKit2WebExtension.Enums.FormSubmissionStep
    {- ^ /@step@/: a @/WebKitFormSubmissionEventType/@ indicating the current
stage of form submission -}
    -> WebKit2WebExtension.Frame.Frame
    {- ^ /@sourceFrame@/: the 'GI.WebKit2WebExtension.Objects.Frame.Frame' containing the form to be
submitted -}
    -> WebKit2WebExtension.Frame.Frame
    {- ^ /@targetFrame@/: the 'GI.WebKit2WebExtension.Objects.Frame.Frame' containing the form\'s target,
which may be the same as /@sourceFrame@/ if no target was specified -}
    -> [T.Text]
    {- ^ /@textFieldNames@/: names of
the form\'s text fields -}
    -> [T.Text]
    {- ^ /@textFieldValues@/: values
of the form\'s text fields -}
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `WebPageWillSubmitFormCallback`@.
noWebPageWillSubmitFormCallback :: Maybe WebPageWillSubmitFormCallback
noWebPageWillSubmitFormCallback = Nothing

-- | Type for the callback on the (unwrapped) C side.
type C_WebPageWillSubmitFormCallback =
    Ptr () ->                               -- object
    Ptr WebKit2WebExtension.DOMElement.DOMElement ->
    CUInt ->
    Ptr WebKit2WebExtension.Frame.Frame ->
    Ptr WebKit2WebExtension.Frame.Frame ->
    Ptr (GPtrArray CString) ->
    Ptr (GPtrArray CString) ->
    Ptr () ->                               -- user_data
    IO ()

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

-- | Wrap the callback into a `GClosure`.
genClosure_WebPageWillSubmitForm :: MonadIO m => WebPageWillSubmitFormCallback -> m (GClosure C_WebPageWillSubmitFormCallback)
genClosure_WebPageWillSubmitForm cb = liftIO $ do
    let cb' = wrap_WebPageWillSubmitFormCallback cb
    mk_WebPageWillSubmitFormCallback cb' >>= B.GClosure.newGClosure


-- | Wrap a `WebPageWillSubmitFormCallback` into a `C_WebPageWillSubmitFormCallback`.
wrap_WebPageWillSubmitFormCallback ::
    WebPageWillSubmitFormCallback ->
    C_WebPageWillSubmitFormCallback
wrap_WebPageWillSubmitFormCallback _cb _ form step sourceFrame targetFrame textFieldNames textFieldValues _ = do
    form' <- (newObject WebKit2WebExtension.DOMElement.DOMElement) form
    let step' = (toEnum . fromIntegral) step
    sourceFrame' <- (newObject WebKit2WebExtension.Frame.Frame) sourceFrame
    targetFrame' <- (newObject WebKit2WebExtension.Frame.Frame) targetFrame
    textFieldNames' <- unpackGPtrArray textFieldNames
    textFieldNames'' <- mapM cstringToText textFieldNames'
    textFieldValues' <- unpackGPtrArray textFieldValues
    textFieldValues'' <- mapM cstringToText textFieldValues'
    _cb  form' step' sourceFrame' targetFrame' textFieldNames'' textFieldValues''


{- |
Connect a signal handler for the “@will-submit-form@” 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' webPage #willSubmitForm callback
@
-}
onWebPageWillSubmitForm :: (IsWebPage a, MonadIO m) => a -> WebPageWillSubmitFormCallback -> m SignalHandlerId
onWebPageWillSubmitForm obj cb = liftIO $ do
    let cb' = wrap_WebPageWillSubmitFormCallback cb
    cb'' <- mk_WebPageWillSubmitFormCallback cb'
    connectSignalFunPtr obj "will-submit-form" cb'' SignalConnectBefore

{- |
Connect a signal handler for the “@will-submit-form@” 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' webPage #willSubmitForm callback
@
-}
afterWebPageWillSubmitForm :: (IsWebPage a, MonadIO m) => a -> WebPageWillSubmitFormCallback -> m SignalHandlerId
afterWebPageWillSubmitForm obj cb = liftIO $ do
    let cb' = wrap_WebPageWillSubmitFormCallback cb
    cb'' <- mk_WebPageWillSubmitFormCallback cb'
    connectSignalFunPtr obj "will-submit-form" cb'' SignalConnectAfter


-- VVV Prop "uri"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable]
   -- Nullable: (Just True,Nothing)

{- |
Get the value of the “@uri@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' webPage #uri
@
-}
getWebPageUri :: (MonadIO m, IsWebPage o) => o -> m (Maybe T.Text)
getWebPageUri obj = liftIO $ B.Properties.getObjectPropertyString obj "uri"

#if ENABLE_OVERLOADING
data WebPageUriPropertyInfo
instance AttrInfo WebPageUriPropertyInfo where
    type AttrAllowedOps WebPageUriPropertyInfo = '[ 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint WebPageUriPropertyInfo = (~) ()
    type AttrBaseTypeConstraint WebPageUriPropertyInfo = IsWebPage
    type AttrGetType WebPageUriPropertyInfo = (Maybe T.Text)
    type AttrLabel WebPageUriPropertyInfo = "uri"
    type AttrOrigin WebPageUriPropertyInfo = WebPage
    attrGet _ = getWebPageUri
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined
#endif

#if ENABLE_OVERLOADING
instance O.HasAttributeList WebPage
type instance O.AttributeList WebPage = WebPageAttributeList
type WebPageAttributeList = ('[ '("uri", WebPageUriPropertyInfo)] :: [(Symbol, *)])
#endif

#if ENABLE_OVERLOADING
webPageUri :: AttrLabelProxy "uri"
webPageUri = AttrLabelProxy

#endif

#if ENABLE_OVERLOADING
data WebPageConsoleMessageSentSignalInfo
instance SignalInfo WebPageConsoleMessageSentSignalInfo where
    type HaskellCallbackType WebPageConsoleMessageSentSignalInfo = WebPageConsoleMessageSentCallback
    connectSignal _ obj cb connectMode = do
        let cb' = wrap_WebPageConsoleMessageSentCallback cb
        cb'' <- mk_WebPageConsoleMessageSentCallback cb'
        connectSignalFunPtr obj "console-message-sent" cb'' connectMode

data WebPageContextMenuSignalInfo
instance SignalInfo WebPageContextMenuSignalInfo where
    type HaskellCallbackType WebPageContextMenuSignalInfo = WebPageContextMenuCallback
    connectSignal _ obj cb connectMode = do
        let cb' = wrap_WebPageContextMenuCallback cb
        cb'' <- mk_WebPageContextMenuCallback cb'
        connectSignalFunPtr obj "context-menu" cb'' connectMode

data WebPageDocumentLoadedSignalInfo
instance SignalInfo WebPageDocumentLoadedSignalInfo where
    type HaskellCallbackType WebPageDocumentLoadedSignalInfo = WebPageDocumentLoadedCallback
    connectSignal _ obj cb connectMode = do
        let cb' = wrap_WebPageDocumentLoadedCallback cb
        cb'' <- mk_WebPageDocumentLoadedCallback cb'
        connectSignalFunPtr obj "document-loaded" cb'' connectMode

data WebPageFormControlsAssociatedSignalInfo
instance SignalInfo WebPageFormControlsAssociatedSignalInfo where
    type HaskellCallbackType WebPageFormControlsAssociatedSignalInfo = WebPageFormControlsAssociatedCallback
    connectSignal _ obj cb connectMode = do
        let cb' = wrap_WebPageFormControlsAssociatedCallback cb
        cb'' <- mk_WebPageFormControlsAssociatedCallback cb'
        connectSignalFunPtr obj "form-controls-associated" cb'' connectMode

data WebPageSendRequestSignalInfo
instance SignalInfo WebPageSendRequestSignalInfo where
    type HaskellCallbackType WebPageSendRequestSignalInfo = WebPageSendRequestCallback
    connectSignal _ obj cb connectMode = do
        let cb' = wrap_WebPageSendRequestCallback cb
        cb'' <- mk_WebPageSendRequestCallback cb'
        connectSignalFunPtr obj "send-request" cb'' connectMode

data WebPageWillSubmitFormSignalInfo
instance SignalInfo WebPageWillSubmitFormSignalInfo where
    type HaskellCallbackType WebPageWillSubmitFormSignalInfo = WebPageWillSubmitFormCallback
    connectSignal _ obj cb connectMode = do
        let cb' = wrap_WebPageWillSubmitFormCallback cb
        cb'' <- mk_WebPageWillSubmitFormCallback cb'
        connectSignalFunPtr obj "will-submit-form" cb'' connectMode

type instance O.SignalList WebPage = WebPageSignalList
type WebPageSignalList = ('[ '("consoleMessageSent", WebPageConsoleMessageSentSignalInfo), '("contextMenu", WebPageContextMenuSignalInfo), '("documentLoaded", WebPageDocumentLoadedSignalInfo), '("formControlsAssociated", WebPageFormControlsAssociatedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("sendRequest", WebPageSendRequestSignalInfo), '("willSubmitForm", WebPageWillSubmitFormSignalInfo)] :: [(Symbol, *)])

#endif

-- method WebPage::get_dom_document
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "web_page", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "WebPage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitWebPage", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "DOMDocument"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_web_page_get_dom_document" webkit_web_page_get_dom_document ::
    Ptr WebPage ->                          -- web_page : TInterface (Name {namespace = "WebKit2WebExtension", name = "WebPage"})
    IO (Ptr WebKit2WebExtension.DOMDocument.DOMDocument)

{- |
Get the 'GI.WebKit2WebExtension.Objects.DOMDocument.DOMDocument' currently loaded in /@webPage@/
-}
webPageGetDomDocument ::
    (B.CallStack.HasCallStack, MonadIO m, IsWebPage a) =>
    a
    {- ^ /@webPage@/: a 'GI.WebKit2WebExtension.Objects.WebPage.WebPage' -}
    -> m (Maybe WebKit2WebExtension.DOMDocument.DOMDocument)
    {- ^ __Returns:__ the 'GI.WebKit2WebExtension.Objects.DOMDocument.DOMDocument' currently loaded, or 'Nothing'
   if no document is currently loaded. -}
webPageGetDomDocument webPage = liftIO $ do
    webPage' <- unsafeManagedPtrCastPtr webPage
    result <- webkit_web_page_get_dom_document webPage'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (newObject WebKit2WebExtension.DOMDocument.DOMDocument) result'
        return result''
    touchManagedPtr webPage
    return maybeResult

#if ENABLE_OVERLOADING
data WebPageGetDomDocumentMethodInfo
instance (signature ~ (m (Maybe WebKit2WebExtension.DOMDocument.DOMDocument)), MonadIO m, IsWebPage a) => O.MethodInfo WebPageGetDomDocumentMethodInfo a signature where
    overloadedMethod _ = webPageGetDomDocument

#endif

-- method WebPage::get_editor
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "web_page", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "WebPage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitWebPage", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "WebEditor"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_web_page_get_editor" webkit_web_page_get_editor ::
    Ptr WebPage ->                          -- web_page : TInterface (Name {namespace = "WebKit2WebExtension", name = "WebPage"})
    IO (Ptr WebKit2WebExtension.WebEditor.WebEditor)

{- |
Gets the 'GI.WebKit2WebExtension.Objects.WebEditor.WebEditor' of a 'GI.WebKit2WebExtension.Objects.WebPage.WebPage'.

/Since: 2.10/
-}
webPageGetEditor ::
    (B.CallStack.HasCallStack, MonadIO m, IsWebPage a) =>
    a
    {- ^ /@webPage@/: a 'GI.WebKit2WebExtension.Objects.WebPage.WebPage' -}
    -> m WebKit2WebExtension.WebEditor.WebEditor
    {- ^ __Returns:__ the 'GI.WebKit2WebExtension.Objects.WebEditor.WebEditor' -}
webPageGetEditor webPage = liftIO $ do
    webPage' <- unsafeManagedPtrCastPtr webPage
    result <- webkit_web_page_get_editor webPage'
    checkUnexpectedReturnNULL "webPageGetEditor" result
    result' <- (newObject WebKit2WebExtension.WebEditor.WebEditor) result
    touchManagedPtr webPage
    return result'

#if ENABLE_OVERLOADING
data WebPageGetEditorMethodInfo
instance (signature ~ (m WebKit2WebExtension.WebEditor.WebEditor), MonadIO m, IsWebPage a) => O.MethodInfo WebPageGetEditorMethodInfo a signature where
    overloadedMethod _ = webPageGetEditor

#endif

-- method WebPage::get_id
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "web_page", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "WebPage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitWebPage", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUInt64)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_web_page_get_id" webkit_web_page_get_id ::
    Ptr WebPage ->                          -- web_page : TInterface (Name {namespace = "WebKit2WebExtension", name = "WebPage"})
    IO Word64

{- |
Get the identifier of the 'GI.WebKit2WebExtension.Objects.WebPage.WebPage'
-}
webPageGetId ::
    (B.CallStack.HasCallStack, MonadIO m, IsWebPage a) =>
    a
    {- ^ /@webPage@/: a 'GI.WebKit2WebExtension.Objects.WebPage.WebPage' -}
    -> m Word64
    {- ^ __Returns:__ the identifier of /@webPage@/ -}
webPageGetId webPage = liftIO $ do
    webPage' <- unsafeManagedPtrCastPtr webPage
    result <- webkit_web_page_get_id webPage'
    touchManagedPtr webPage
    return result

#if ENABLE_OVERLOADING
data WebPageGetIdMethodInfo
instance (signature ~ (m Word64), MonadIO m, IsWebPage a) => O.MethodInfo WebPageGetIdMethodInfo a signature where
    overloadedMethod _ = webPageGetId

#endif

-- method WebPage::get_main_frame
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "web_page", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "WebPage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitWebPage", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "Frame"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_web_page_get_main_frame" webkit_web_page_get_main_frame ::
    Ptr WebPage ->                          -- web_page : TInterface (Name {namespace = "WebKit2WebExtension", name = "WebPage"})
    IO (Ptr WebKit2WebExtension.Frame.Frame)

{- |
Returns the main frame of a 'GI.WebKit2WebExtension.Objects.WebPage.WebPage'.

/Since: 2.2/
-}
webPageGetMainFrame ::
    (B.CallStack.HasCallStack, MonadIO m, IsWebPage a) =>
    a
    {- ^ /@webPage@/: a 'GI.WebKit2WebExtension.Objects.WebPage.WebPage' -}
    -> m WebKit2WebExtension.Frame.Frame
    {- ^ __Returns:__ the 'GI.WebKit2WebExtension.Objects.Frame.Frame' that is the main frame of /@webPage@/ -}
webPageGetMainFrame webPage = liftIO $ do
    webPage' <- unsafeManagedPtrCastPtr webPage
    result <- webkit_web_page_get_main_frame webPage'
    checkUnexpectedReturnNULL "webPageGetMainFrame" result
    result' <- (newObject WebKit2WebExtension.Frame.Frame) result
    touchManagedPtr webPage
    return result'

#if ENABLE_OVERLOADING
data WebPageGetMainFrameMethodInfo
instance (signature ~ (m WebKit2WebExtension.Frame.Frame), MonadIO m, IsWebPage a) => O.MethodInfo WebPageGetMainFrameMethodInfo a signature where
    overloadedMethod _ = webPageGetMainFrame

#endif

-- method WebPage::get_uri
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "web_page", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "WebPage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitWebPage", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_web_page_get_uri" webkit_web_page_get_uri ::
    Ptr WebPage ->                          -- web_page : TInterface (Name {namespace = "WebKit2WebExtension", name = "WebPage"})
    IO CString

{- |
Returns the current active URI of /@webPage@/.

You can monitor the active URI by connecting to the notify::uri
signal of /@webPage@/.
-}
webPageGetUri ::
    (B.CallStack.HasCallStack, MonadIO m, IsWebPage a) =>
    a
    {- ^ /@webPage@/: a 'GI.WebKit2WebExtension.Objects.WebPage.WebPage' -}
    -> m (Maybe T.Text)
    {- ^ __Returns:__ the current active URI of /@webView@/ or 'Nothing' if nothing has been
   loaded yet. -}
webPageGetUri webPage = liftIO $ do
    webPage' <- unsafeManagedPtrCastPtr webPage
    result <- webkit_web_page_get_uri webPage'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- cstringToText result'
        return result''
    touchManagedPtr webPage
    return maybeResult

#if ENABLE_OVERLOADING
data WebPageGetUriMethodInfo
instance (signature ~ (m (Maybe T.Text)), MonadIO m, IsWebPage a) => O.MethodInfo WebPageGetUriMethodInfo a signature where
    overloadedMethod _ = webPageGetUri

#endif