Ejemplo n.º 1
0
        /// <summary>
        /// Evaluate javascript in the current context with system privileges.
        /// </summary>
        /// <param name="jsScript"></param>
        /// <param name="jsval"></param>
        /// <returns></returns>
        public bool EvaluateTrustedScript(string jsScript, out string result)
        {
            var    ptr          = new JsVal();
            IntPtr globalObject = SpiderMonkey.JS_GetGlobalForScopeChain(_cx);
            bool   ret;
            IntPtr systemGlobalObject = SpiderMonkey.JS_GetGlobalForScopeChain(GlobalJSContextHolder.BackstageJSContext);
            // Compartments have to be entered and left in LIFO order.
            bool   inSystemCompartment = false;
            IntPtr oldCompartment      = IntPtr.Zero;

            try
            {
                // Allow access to any object on page.
                oldCompartment = SpiderMonkey.JS_EnterCompartment(_cx, systemGlobalObject);
                // At any time, a JSContext has a current (possibly-NULL) compartment.
                inSystemCompartment = true;
                ret = SpiderMonkey.JS_EvaluateScript(_cx, globalObject, jsScript, (uint)jsScript.Length, "script", 1, ref ptr);
                IntPtr jsStringPtr = SpiderMonkey.JS_ValueToString(_cx, ptr);
                result = Marshal.PtrToStringAnsi(SpiderMonkey.JS_EncodeString(_cx, jsStringPtr));
            }
            finally
            {
                if (inSystemCompartment)
                {
                    SpiderMonkey.JS_LeaveCompartment(_cx, oldCompartment);
                }
            }
            return(ret);
        }
Ejemplo n.º 2
0
        internal string ConvertValueToString(JsVal value)
        {
            if (value.IsString)
            {
                var v = Xpcom.XPConnect.Instance.JSValToVariant(_cx, ref value);
                return(nsString.Get(v.GetAsAString));
            }

            // Fallback for non string JsVal's
            // If the JsVal is not a string convert it to a JSString
            // then convert the JSString to a utf8 string.
            // NOTE: This fallback isn't ideal and may cause unicode replacement chars to appear.

            IntPtr jsp        = SpiderMonkey.JS_ValueToString(_cx, value);
            var    utf8StrPtr = SpiderMonkey.JS_EncodeStringToUTF8(_cx, jsp);

            if (utf8StrPtr != IntPtr.Zero)
            {
                try
                {
                    var    length = SpiderMonkey.JS_GetStringEncodingLength(_cx, jsp);
                    byte[] result = new byte[length];
                    Marshal.Copy(utf8StrPtr, result, 0, length);
                    return(Encoding.UTF8.GetString(result, 0, length));
                }
                finally
                {
                    SpiderMonkey.JS_Free(_cx, utf8StrPtr);
                }
            }
            return(null);
        }
Ejemplo n.º 3
0
 public override string ToString()
 {
     using (AutoJSContext context = new AutoJSContext())
     {
         IntPtr jsString = SpiderMonkey.JS_ValueToString(context.ContextPointer, this);
         return(Marshal.PtrToStringAnsi(SpiderMonkey.JS_EncodeString(context.ContextPointer, jsString)));
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Evaluate javascript in the current context.
        /// </summary>
        /// <param name="jsScript"></param>
        /// <param name="jsval"></param>
        /// <returns></returns>
        public bool EvaluateScript(string jsScript, out string result)
        {
            var    ptr          = new JsVal();
            IntPtr globalObject = SpiderMonkey.JS_GetGlobalForScopeChain(_cx);
            bool   ret          = SpiderMonkey.JS_EvaluateScript(_cx, globalObject, jsScript, (uint)jsScript.Length, "script", 1, ref ptr);

            IntPtr jsStringPtr = SpiderMonkey.JS_ValueToString(_cx, ptr);

            result = Marshal.PtrToStringAnsi(SpiderMonkey.JS_EncodeString(_cx, jsStringPtr));
            return(ret);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Evaluate javascript in the current context.
        /// </summary>
        /// <param name="jsScript"></param>
        /// <param name="jsval"></param>
        /// <returns></returns>
        public bool EvaluateScript(string jsScript, out string result)
        {
            var    ptr          = new JsVal();
            IntPtr globalObject = SpiderMonkey.JS_GetGlobalForScopeChain(_cx);
            bool   ret          = SpiderMonkey.JS_EvaluateScript(_cx, globalObject, jsScript, (uint)jsScript.Length, "script", 1, ref ptr);
            // TODO: maybe getting JS_EvaluateScriptForPrincipals working would increase priviliges of the running script.
            //bool ret = SpiderMonkey.JS_EvaluateScriptForPrincipals(_cx, globalObject, ..., jsScript, (uint)jsScript.Length,"script", 1, ref ptr);


            IntPtr jsStringPtr = SpiderMonkey.JS_ValueToString(_cx, ptr);

            result = Marshal.PtrToStringAnsi(SpiderMonkey.JS_EncodeString(_cx, jsStringPtr));
            return(ret);
        }
Ejemplo n.º 6
0
        internal string ConvertValueToString(JsVal value)
        {
            IntPtr jsp = SpiderMonkey.JS_ValueToString(_cx, value);

            if (jsp != IntPtr.Zero)
            {
                uint length;
                var  chars = SpiderMonkey.JS_GetStringCharsAndLength(_cx, jsp, out length);
                if (chars != IntPtr.Zero)
                {
                    return(Marshal.PtrToStringUni(chars, (int)length));
                }
            }
            return(null);
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Evaluate javascript in the current context.
 /// </summary>
 /// <param name="jsScript"></param>
 /// <param name="thisObject">a nsISupports com object that this is set too.</param>
 /// <param name="result"></param>
 /// <returns></returns>
 public bool EvaluateScript(string jsScript, nsISupports thisObject, out string result)
 {
     try
     {
         Guid   guid         = typeof(nsISupports).GUID;
         IntPtr globalObject = SpiderMonkey.JS_GetGlobalForScopeChain(_cx);
         var    ptr          = new JsVal();
         var    wrapper      = XPConnect.WrapNative(_cx, globalObject, thisObject, ref guid);
         bool   ret          = SpiderMonkey.JS_EvaluateScript(_cx, wrapper.GetJSObjectAttribute(), jsScript, (uint)jsScript.Length, "script", 1, ref ptr);
         IntPtr jsStringPtr  = SpiderMonkey.JS_ValueToString(_cx, ptr);
         result = Marshal.PtrToStringAnsi(SpiderMonkey.JS_EncodeString(_cx, jsStringPtr));
         return(ret);
     }
     catch (Exception e)
     {
         Console.WriteLine("Exception {0}", e);
         result = String.Empty;
         return(false);
     }
 }