[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/pythonthings/cefpython/v31.2/cefpython/request_handler_cef1.pyx [Back]  [Original]

# Copyright (c) 2012-2014 The CEF Python authors. All rights reserved.
# License: New BSD License.
# Website: http://code.google.com/p/cefpython/

NAVTYPE_LINKCLICKED = cef_types.NAVTYPE_LINKCLICKED
NAVTYPE_FORMSUBMITTED = cef_types.NAVTYPE_FORMSUBMITTED
NAVTYPE_BACKFORWARD = cef_types.NAVTYPE_BACKFORWARD
NAVTYPE_RELOAD = cef_types.NAVTYPE_RELOAD
NAVTYPE_FORMRESUBMITTED = cef_types.NAVTYPE_FORMRESUBMITTED
NAVTYPE_OTHER = cef_types.NAVTYPE_OTHER
NAVTYPE_LINKDROPPED = cef_types.NAVTYPE_LINKDROPPED

cdef public cpp_bool RequestHandler_OnBeforeBrowse(
        CefRefPtr[CefBrowser] cefBrowser,
        CefRefPtr[CefFrame] cefFrame,
        CefRefPtr[CefRequest] cefRequest,
        cef_types.cef_handler_navtype_t navType,
        cpp_bool isRedirect
        ) except * with gil:
    cdef PyBrowser pyBrowser
    cdef PyFrame pyFrame
    cdef PyRequest pyRequest
    cdef object callback
    try:
        pyBrowser = GetPyBrowser(cefBrowser)
        pyFrame = GetPyFrame(cefFrame)
        pyRequest = CreatePyRequest(cefRequest)
        callback = pyBrowser.GetClientCallback("OnBeforeBrowse")
        if callback:
            return bool(callback(
                    pyBrowser, pyFrame, pyRequest, navType, isRedirect))
        else:
            return False
    except:
        (exc_type, exc_value, exc_trace) = sys.exc_info()
        sys.excepthook(exc_type, exc_value, exc_trace)

cdef public cpp_bool RequestHandler_OnBeforeResourceLoad(
        CefRefPtr[CefBrowser] cefBrowser,
        CefRefPtr[CefRequest] cefRequest,
        CefString& cefRedirectUrl,
        CefRefPtr[CefStreamReader]& cefStreamReader,
        CefRefPtr[CefResponse] cefResponse,
        int loadFlags
        ) except * with gil:
    cdef PyBrowser pyBrowser
    cdef PyRequest pyRequest
    cdef list pyRedirectUrl
    cdef PyStreamReader pyStreamReader
    cdef PyResponse pyResponse
    cdef object callback
    cdef py_bool ret
    try:
        pyBrowser = GetPyBrowser(cefBrowser)
        pyRequest = CreatePyRequest(cefRequest)
        pyRedirectUrl = [""]
        pyStreamReader = PyStreamReader()
        pyResponse = CreatePyResponse(cefResponse)
        callback = pyBrowser.GetClientCallback("OnBeforeResourceLoad")
        if callback:
            ret = callback(pyBrowser, pyRequest, pyRedirectUrl, 
                    pyStreamReader, pyResponse, loadFlags)
            assert type(pyRedirectUrl) == list
            assert type(pyRedirectUrl[0]) == str
            if pyRedirectUrl[0]:
                PyToCefString(pyRedirectUrl[0], cefRedirectUrl)
            if pyStreamReader.HasCefStreamReader():
                cefStreamReader.swap(pyStreamReader.GetCefStreamReader())
            return bool(ret)
        else:
            return False
    except:
        (exc_type, exc_value, exc_trace) = sys.exc_info()
        sys.excepthook(exc_type, exc_value, exc_trace)

cdef public void RequestHandler_OnResourceRedirect(
        CefRefPtr[CefBrowser] cefBrowser,
        CefString& cefOldUrl,
        CefString& cefNewUrl
        ) except * with gil:
    cdef PyBrowser pyBrowser
    cdef str pyOldUrl
    cdef list pyNewUrl # = [""] pass by reference (out).
    cdef object callback
    try:
        pyBrowser = GetPyBrowser(cefBrowser)
        pyOldUrl = CefToPyString(cefOldUrl)
        pyNewUrl = [CefToPyString(cefNewUrl)]
        callback = pyBrowser.GetClientCallback("OnResourceRedirect")
        if callback:
            callback(pyBrowser, pyOldUrl, pyNewUrl)
            if pyNewUrl[0]:
                PyToCefString(pyNewUrl[0], cefNewUrl)
    except:
        (exc_type, exc_value, exc_trace) = sys.exc_info()
        sys.excepthook(exc_type, exc_value, exc_trace)

cdef public void RequestHandler_OnResourceResponse(
        CefRefPtr[CefBrowser] cefBrowser,
        CefString& cefUrl,
        CefRefPtr[CefResponse] cefResponse,
        CefRefPtr[CefContentFilter]& cefContentFilter
        ) except * with gil:
    cdef PyBrowser pyBrowser
    cdef str pyUrl
    cdef PyResponse pyResponse
    cdef PyContentFilter pyContentFilter
    cdef object callback
    try:
        pyBrowser = GetPyBrowser(cefBrowser)
        pyUrl = CefToPyString(cefUrl)
        pyResponse = CreatePyResponse(cefResponse)
        pyContentFilter = PyContentFilter()
        callback = pyBrowser.GetClientCallback("OnResourceResponse")
        if callback:
            callback(pyBrowser, pyUrl, pyResponse, pyContentFilter)
            if pyContentFilter.HasHandler():
                cefContentFilter.swap(pyContentFilter.GetCefContentFilter())
    except:
        (exc_type, exc_value, exc_trace) = sys.exc_info()
        sys.excepthook(exc_type, exc_value, exc_trace)

cdef public cpp_bool RequestHandler_OnProtocolExecution(
        CefRefPtr[CefBrowser] cefBrowser,
        CefString& cefUrl,
        cpp_bool& cefAllowOSExecution
        ) except * with gil:
    # TODO: needs testing.
    cdef PyBrowser pyBrowser
    cdef str pyUrl
    cdef list pyAllowOSExecution # = [True] pass by reference (out).
    cdef object callback
    cdef py_bool ret
    try:
        pyBrowser = GetPyBrowser(cefBrowser)
        pyUrl = CefToPyString(cefUrl)
        pyAllowOSExecution = [bool(cefAllowOSExecution)]
        callback = pyBrowser.GetClientCallback("OnProtocolExecution")
        if callback:
            ret = callback(
                    pyBrowser, pyUrl, pyAllowOSExecution)
            # Since Cython 0.17.4 assigning a value to an argument
            # passed by reference will throw an error, the fix is to
            # to use "(&arg)[0] =" instead of "arg =", see this topic:
            # https://groups.google.com/forum/#!msg/cython-users/j58Sp3QMrD4/y9vJy9YBi_kJ
            # For CefRefPtr you should use swap() method instead.
            (&cefAllowOSExecution)[0] = bool(pyAllowOSExecution[0])
            return bool(ret)
        else:
            return False
    except:
        (exc_type, exc_value, exc_trace) = sys.exc_info()
        sys.excepthook(exc_type, exc_value, exc_trace)

cdef public cpp_bool RequestHandler_GetDownloadHandler(
        CefRefPtr[CefBrowser] cefBrowser,
        const CefString& cefMimeType,
        const CefString& cefFilename,
        cef_types.int64 cefContentLength,
        CefRefPtr[CefDownloadHandler]& cefDownloadHandler
        ) except * with gil:
    cdef PyBrowser pyBrowser
    cdef str pyMimeType
    cdef str pyFilename
    cdef long pyContentLength
    cdef object callback
    cdef object userDownloadHandler
    cdef CefRefPtr[CefDownloadHandler] downloadHandler
    try:
        pyBrowser = GetPyBrowser(cefBrowser)
        pyMimeType = CefToPyString(cefMimeType)
        pyFilename = CefToPyString(cefFilename)
        pyContentLength = cefContentLength
        callback = pyBrowser.GetClientCallback("GetDownloadHandler")
        if callback:
            userDownloadHandler = callback(pyBrowser, pyMimeType, pyFilename,
                    pyContentLength)
            if userDownloadHandler:
                downloadHandler = StoreUserDownloadHandler(userDownloadHandler)
                cefDownloadHandler.swap(downloadHandler)
                return True
            else:
                return False
        else:
            return False
    except:
        (exc_type, exc_value, exc_trace) = sys.exc_info()
        sys.excepthook(exc_type, exc_value, exc_trace)

cdef public cpp_bool RequestHandler_GetAuthCredentials(
        CefRefPtr[CefBrowser] cefBrowser,
        cpp_bool cefIsProxy,
        CefString& cefHost,
        int cefPort,
        CefString& cefRealm,
        CefString& cefScheme,
        CefString& cefUsername,
        CefString& cefPassword
        ) except * with gil:
    cdef PyBrowser pyBrowser
    cdef py_bool pyIsProxy
    cdef str pyHost
    cdef int pyPort
    cdef str pyRealm
    cdef str pyScheme
    cdef list pyUsername # = [""] pass by reference (out).
    cdef list pyPassword
    cdef object callback
    cdef py_bool ret
    try:
        pyBrowser = GetPyBrowser(cefBrowser)
        pyIsProxy = bool(cefIsProxy)
        pyHost = CefToPyString(cefHost)
        pyPort = int(cefPort)
        pyRealm = CefToPyString(cefRealm)
        pyScheme = CefToPyString(cefScheme)
        pyUsername = [""]
        pyPassword = [""]
        callback = pyBrowser.GetClientCallback("GetAuthCredentials")
        if callback:
            ret = callback(
                    pyBrowser,
                    pyIsProxy, pyHost, pyPort, pyRealm, pyScheme,
                    pyUsername, pyPassword)
            if ret:
                PyToCefString(pyUsername[0], cefUsername)
                PyToCefString(pyPassword[0], cefPassword)
            return bool(ret)
        else:
            # Default implementation.
            IF UNAME_SYSNAME == "Windows":
                ret = HttpAuthenticationDialog(
                        pyBrowser,
                        pyIsProxy, pyHost, pyPort, pyRealm, pyScheme,
                        pyUsername, pyPassword)
                if ret:
                    PyToCefString(pyUsername[0], cefUsername)
                    PyToCefString(pyPassword[0], cefPassword)
                return bool(ret)
            ELSE:
                return False
    except:
        (exc_type, exc_value, exc_trace) = sys.exc_info()
        sys.excepthook(exc_type, exc_value, exc_trace)

cdef public CefRefPtr[CefCookieManager] RequestHandler_GetCookieManager(
        CefRefPtr[CefBrowser] cefBrowser,
        CefString& mainUrl
        ) except * with gil:
    cdef PyBrowser pyBrowser
    cdef str pyMainUrl
    cdef object callback
    cdef PyCookieManager ret
    try:
        assert IsThread(TID_IO), "Must be called on the IO thread"
        pyBrowser = GetPyBrowser(cefBrowser)
        pyMainUrl = CefToPyString(mainUrl)
        callback = pyBrowser.GetClientCallback("GetCookieManager")
        if callback:
            ret = callback(pyBrowser, pyMainUrl)
            if ret:
                if isinstance(ret, PyCookieManager):
                    return ret.cefCookieManager
                else:
                    raise Exception("Expected CookieManager object")
            return NULL
        else:
            return NULL
    except:
        (exc_type, exc_value, exc_trace) = sys.exc_info()
        sys.excepthook(exc_type, exc_value, exc_trace)

Web Proxy Viewer  |  New URL  |  Original Page