Ejemplo n.º 1
0
        public static CfrV8Handler Convert(this Action <string, IJavascriptObject, IJavascriptObject[]> function, string name)
        {
            var res = new CfrV8Handler();

            res.Execute += (o, e) => function(name, e.Object.Convert(), e.Arguments.Convert());
            return(res);
        }
        bool BindFunctions(string objName, string[] funcNames)
        {
            if (remoteBrowser == null)
            {
                return(false);
            }
            try
            {
                var ctx = remoteBrowser.CreateRemoteCallContext();
                ctx.Enter();
                try
                {
                    // if (v8Handler != null) v8Handler.Dispose(); // unbind

                    v8Handler          = new CfrV8Handler();
                    v8Handler.Execute += new CfrV8HandlerExecuteEventHandler(JavascriptCallback);

                    CfrTaskRunner.GetForThread(CfxThreadId.Renderer).PostTask(new BindFunctionsTask(remoteBrowser, objName, funcNames, v8Handler));

                    return(true);
                }
                finally
                {
                    ctx.Exit();
                }
            }
            catch (System.IO.IOException)
            {
                return(false);
            }
        }
Ejemplo n.º 3
0
        public static CfrV8Handler Convert(this Action <IJavascriptObject, IJavascriptObject, IJavascriptObject, IJavascriptObject> function)
        {
            var res = new CfrV8Handler();

            res.Execute += (o, e) => function(e.Arguments[0].Convert(), e.Arguments[1].Convert(), e.Arguments[2].Convert(), e.Arguments[3].Convert());
            return(res);
        }
Ejemplo n.º 4
0
        public void Bind(HtmlTextureWrapper wrapper, CfrV8Handler v8handler)
        {
            Wrapper = wrapper;
            Wrapper.OnMainLoopBegin += (sender, args) => Executed = false;

            v8handler.Execute += JavascriptCallback;
        }
 internal ChromiumFxObjectCreationCallBack()
 {
     Handler          = new CfrV8Handler();
     Handler.Execute += (_, e) =>
     {
         _Result.Add(e.Arguments);
     };
 }
 private void Bind(CfrV8Handler handler, string functionName)
 {
     lock (this)
     {
         Functions.Add(handler);
         var func = CfrV8Value.CreateFunction(functionName, handler);
         _CfrV8Value.SetValue(functionName, func, CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete);
     }
 }
 public static CfrV8Handler Convert(this Action<string, IJavascriptObject, IJavascriptObject[]> function, string name)
 {
     var res = new CfrV8Handler();
     res.Execute += (o, e) => 
     {
         function(name, e.Object.Convert(), e.Arguments.Convert());    
     };
     return res;
 }
Ejemplo n.º 8
0
        public bool BindObject(JsBinding binding)
        {
            if (Closed)
            {
                return(false);
            }
            if (RemoteBrowser == null)
            {
                return(false);
            }
            try
            {
                var jsBinding = binding;
                if (JsBindings.ContainsKey(binding.Name))
                {
                    jsBinding = JsBindings[binding.Name];
                    jsBinding.MigrateFunctions(binding);
                }
                else
                {
                    JsBindings.Add(binding.Name, binding);
                }

                var remoteCallContext = RemoteBrowser.CreateRemoteCallContext();
                remoteCallContext.Enter();
                try
                {
                    V8Handler = new CfrV8Handler();
                    jsBinding.Bind(this, V8Handler);
                    var taskrunner = CfrTaskRunner.GetForThread((CfxThreadId)6);
                    if (taskrunner == null)
                    {
                        LogError("Unsuccessful Binding, TaskRunner is null");
                        remoteCallContext.Exit();
                        return(false);
                    }
                    taskrunner.PostTask(new BindFunctionsTask(RemoteBrowser, jsBinding.Name, jsBinding.Functions.Keys.ToArray(), V8Handler));
                    remoteCallContext.Exit();
                    return(true);
                }
                catch (Exception ex)
                {
                    remoteCallContext.Exit();
                    LogError(ex.Message);
                    VvvvLogger?.Log(ex);
                    return(false);
                }
            }
            catch (Exception ex)
            {
                LogError(ex.Message);
                VvvvLogger?.Log(ex);
                return(false);
            }
        }
Ejemplo n.º 9
0
 internal override CfrV8Value CreateV8Value()
 {
     v8Handler          = new CfrV8Handler();
     v8Handler.Execute += new CfrV8HandlerExecuteEventHandler(handler_Execute);
     return(CfrV8Value.CreateFunction(Name, v8Handler));
 }
Ejemplo n.º 10
0
 internal void SetV8Handler(CfrV8Handler handler)
 {
     handler.Execute += new CfrV8HandlerExecuteEventHandler(handler_Execute);
 }
            internal BindFunctionsTask(CfrBrowser remoteBrowser, string objName, string[] funcNames, CfrV8Handler v8Handler)
            {
                this.Execute += (s, e) =>
                {
                    var context = remoteBrowser.MainFrame.V8Context;
                    context.Enter();

                    CfrV8Value obj = null;

                    if (objName != null && objName != "" && !context.Global.HasValue(objName))
                    {
                        obj = CfrV8Value.CreateObject(new CfrV8Accessor());
                        context.Global.SetValue(objName, obj, CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.ReadOnly);
                        //context.Global.DeleteValue(objName);
                    }

                    foreach (string name in funcNames)
                    {
                        // bind
                        CfrV8Value func = CfrV8Value.CreateFunction(name, v8Handler);

                        if (obj != null && !obj.HasValue(name))
                        {
                            obj.SetValue(name, func, CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.ReadOnly);
                        }
                        else if (!context.Global.HasValue(name))
                        {
                            context.Global.SetValue(name, func, CfxV8PropertyAttribute.DontDelete | CfxV8PropertyAttribute.ReadOnly);
                        }
                    }
                    context.Exit();
                };
            }
Ejemplo n.º 12
0
        /// <summary>
        /// Register a new V8 extension with the specified JavaScript extension code and
        /// handler. Functions implemented by the handler are prototyped using the
        /// keyword 'native'. The calling of a native function is restricted to the scope
        /// in which the prototype of the native function is defined. This function may
        /// only be called on the render process main thread.
        /// Example JavaScript extension code: &lt;pre>
        /// // create the 'example' global object if it doesn't already exist.
        /// if (!example)
        /// example = {};
        /// // create the 'example.test' global object if it doesn't already exist.
        /// if (!example.test)
        /// example.test = {};
        /// (function() {
        /// // Define the function 'example.test.myfunction'.
        /// example.test.myfunction = function() {
        /// // Call CfrV8Handler.Execute() with the function name 'MyFunction'
        /// // and no arguments.
        /// native function MyFunction();
        /// return MyFunction();
        /// };
        /// // Define the getter function for parameter 'example.test.myparam'.
        /// example.test.__defineGetter__('myparam', function() {
        /// // Call CfrV8Handler.Execute() with the function name 'GetMyParam'
        /// // and no arguments.
        /// native function GetMyParam();
        /// return GetMyParam();
        /// });
        /// // Define the setter function for parameter 'example.test.myparam'.
        /// example.test.__defineSetter__('myparam', function(b) {
        /// // Call CfrV8Handler.Execute() with the function name 'SetMyParam'
        /// // and a single argument.
        /// native function SetMyParam();
        /// if(b) SetMyParam(b);
        /// });
        /// // Extension definitions can also contain normal JavaScript variables
        /// // and functions.
        /// var myint = 0;
        /// example.test.increment = function() {
        /// myint += 1;
        /// return myint;
        /// };
        /// })();
        /// &lt;/pre> Example usage in the page: &lt;pre>
        /// // Call the function.
        /// example.test.myfunction();
        /// // Set the parameter.
        /// example.test.myparam = value;
        /// // Get the parameter.
        /// value = example.test.myparam;
        /// // Call another function.
        /// example.test.increment();
        /// &lt;/pre>
        /// </summary>
        /// <remarks>
        /// See also the original CEF documentation in
        /// <see href="https://bitbucket.org/chromiumfx/chromiumfx/src/tip/cef/include/capi/cef_v8_capi.h">cef/include/capi/cef_v8_capi.h</see>.
        /// </remarks>
        public static bool RegisterExtension(string extensionName, string javascriptCode, CfrV8Handler handler)
        {
            var call = new CfxRuntimeRegisterExtensionRenderProcessCall();

            call.extensionName  = extensionName;
            call.javascriptCode = javascriptCode;
            call.handler        = CfrObject.Unwrap(handler);
            call.RequestExecution(CfxRemoteCallContext.CurrentContext.connection);
            return(call.__retval);
        }
Ejemplo n.º 13
0
 /// <summary>
 /// Register a new V8 extension with the specified JavaScript extension code and
 /// handler. Functions implemented by the handler are prototyped using the
 /// keyword 'native'. The calling of a native function is restricted to the scope
 /// in which the prototype of the native function is defined. This function may
 /// only be called on the render process main thread.
 /// Example JavaScript extension code: &lt;pre>
 /// // create the 'example' global object if it doesn't already exist.
 /// if (!example)
 /// example = {};
 /// // create the 'example.test' global object if it doesn't already exist.
 /// if (!example.test)
 /// example.test = {};
 /// (function() {
 /// // Define the function 'example.test.myfunction'.
 /// example.test.myfunction = function() {
 /// // Call CfrV8Handler.Execute() with the function name 'MyFunction'
 /// // and no arguments.
 /// native function MyFunction();
 /// return MyFunction();
 /// };
 /// // Define the getter function for parameter 'example.test.myparam'.
 /// example.test.__defineGetter__('myparam', function() {
 /// // Call CfrV8Handler.Execute() with the function name 'GetMyParam'
 /// // and no arguments.
 /// native function GetMyParam();
 /// return GetMyParam();
 /// });
 /// // Define the setter function for parameter 'example.test.myparam'.
 /// example.test.__defineSetter__('myparam', function(b) {
 /// // Call CfrV8Handler.Execute() with the function name 'SetMyParam'
 /// // and a single argument.
 /// native function SetMyParam();
 /// if(b) SetMyParam(b);
 /// });
 /// // Extension definitions can also contain normal JavaScript variables
 /// // and functions.
 /// var myint = 0;
 /// example.test.increment = function() {
 /// myint += 1;
 /// return myint;
 /// };
 /// })();
 /// &lt;/pre> Example usage in the page: &lt;pre>
 /// // Call the function.
 /// example.test.myfunction();
 /// // Set the parameter.
 /// example.test.myparam = value;
 /// // Get the parameter.
 /// value = example.test.myparam;
 /// // Call another function.
 /// example.test.increment();
 /// &lt;/pre>
 /// </summary>
 /// <remarks>
 /// See also the original CEF documentation in
 /// <see href="https://bitbucket.org/chromiumfx/chromiumfx/src/tip/cef/include/capi/cef_v8_capi.h">cef/include/capi/cef_v8_capi.h</see>.
 /// </remarks>
 public static bool RegisterExtension(string extensionName, string javascriptCode, CfrV8Handler handler)
 {
     var call = new CfxRuntimeRegisterExtensionRenderProcessCall();
     call.extensionName = extensionName;
     call.javascriptCode = javascriptCode;
     call.handler = CfrObject.Unwrap(handler);
     call.RequestExecution(CfxRemoteCallContext.CurrentContext.connection);
     return call.__retval;
 }
Ejemplo n.º 14
0
            internal BindFunctionsTask(CfrBrowser remoteBrowser, string objName, string[] funcNames, CfrV8Handler v8Handler)
            {
                Execute += (s, e) =>
                {
                    var v8Context = remoteBrowser.MainFrame.V8Context;
                    v8Context.Enter();
                    var cfrV8Value = (CfrV8Value)null;
                    if (!string.IsNullOrEmpty(objName) && !v8Context.Global.HasValue(objName))
                    {
                        cfrV8Value = CfrV8Value.CreateObject(new CfrV8Accessor());
                        v8Context.Global.SetValue(objName, cfrV8Value,
                                                  CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete);
                    }

                    foreach (var funcName in funcNames)
                    {
                        var function = CfrV8Value.CreateFunction(funcName, v8Handler);
                        if (cfrV8Value != null && !cfrV8Value.HasValue(funcName))
                        {
                            cfrV8Value.SetValue(funcName, function,
                                                CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete);
                        }
                        else if (!v8Context.Global.HasValue(funcName))
                        {
                            v8Context.Global.SetValue(funcName, function,
                                                      CfxV8PropertyAttribute.ReadOnly | CfxV8PropertyAttribute.DontDelete);
                        }
                    }

                    v8Context.Exit();
                };
            }