Beispiel #1
0
            protected override bool Execute(string name, CefV8Value obj, CefV8Value[] arguments, out CefV8Value returnValue, out string exception)
            {
                if (name == _config.JSQueryFunction)
                {
                    if (arguments.Length != 1 || !arguments[0].IsObject)
                    {
                        returnValue = null;
                        exception   = "Invalid arguments; expecting a single object";
                        return(true);
                    }

                    var arg = arguments[0];

                    var requestVal = arg.GetValue(CefMessageRouter.MemberRequest);
                    if (requestVal == null || !requestVal.IsString)
                    {
                        returnValue = null;
                        exception   = "Invalid arguments; object member '" +
                                      CefMessageRouter.MemberRequest + "' is required and must " +
                                      "have type string";
                        return(true);
                    }

                    CefV8Value successVal = null;
                    if (arg.HasValue(CefMessageRouter.MemberOnSuccess))
                    {
                        successVal = arg.GetValue(CefMessageRouter.MemberOnSuccess);
                        if (!successVal.IsFunction)
                        {
                            returnValue = null;
                            exception   = "Invalid arguments; object member '" +
                                          CefMessageRouter.MemberOnSuccess + "' must have type " +
                                          "function";
                            return(true);
                        }
                    }

                    CefV8Value failureVal = null;
                    if (arg.HasValue(CefMessageRouter.MemberOnFailure))
                    {
                        failureVal = arg.GetValue(CefMessageRouter.MemberOnFailure);
                        if (!failureVal.IsFunction)
                        {
                            returnValue = null;
                            exception   = "Invalid arguments; object member '" +
                                          CefMessageRouter.MemberOnFailure + "' must have type " +
                                          "function";
                            return(true);
                        }
                    }

                    CefV8Value persistentVal = null;
                    if (arg.HasValue(CefMessageRouter.MemberPersistent))
                    {
                        persistentVal = arg.GetValue(CefMessageRouter.MemberPersistent);
                        if (!persistentVal.IsBool)
                        {
                            returnValue = null;
                            exception   = "Invalid arguments; object member '" +
                                          CefMessageRouter.MemberPersistent + "' must have type " +
                                          "boolean";
                            return(true);
                        }
                    }

                    var context    = CefV8Context.GetCurrentContext();
                    var contextId  = GetIDForContext(context);
                    var frameId    = context.GetFrame().Identifier;
                    var persistent = (persistentVal != null && persistentVal.GetBoolValue());

                    var requestId = _router.SendQuery(context.GetBrowser(), frameId, contextId,
                                                      requestVal.GetStringValue(), persistent, successVal, failureVal);
                    returnValue = CefV8Value.CreateInt(requestId);
                    exception   = null;
                    return(true);
                }
                else if (name == _config.JSCancelFunction)
                {
                    if (arguments.Length != 1 || !arguments[0].IsInt)
                    {
                        returnValue = null;
                        exception   = "Invalid arguments; expecting a single integer";
                        return(true);
                    }

                    var result    = false;
                    var requestId = arguments[0].GetIntValue();
                    if (requestId != CefMessageRouter.ReservedId)
                    {
                        CefV8Context context   = CefV8Context.GetCurrentContext();
                        var          contextId = GetIDForContext(context);
                        var          frameId   = context.GetFrame().Identifier;

                        result = _router.SendCancel(context.GetBrowser(), frameId, contextId, requestId);
                    }
                    returnValue = CefV8Value.CreateBool(result);
                    exception   = null;
                    return(true);
                }

                returnValue = null;
                exception   = null;
                return(false);
            }