private static List <JsVal> ConvertTypes(object[] paramObjects, AutoJSContext context)
        {
            var collection = new List <JsVal>();

            foreach (var p in paramObjects)
            {
                JsVal val;
                if (p is nsAString || p is nsACString || p is nsAUTF8String || p is String)
                {
                    SpiderMonkey.JS_ExecuteScript(context.ContextPointer, '"' + p.ToString() + '"', out val);
                }
                else if (p is nsISupports)
                {
                    // This returns a  [xpconnect wrapped nsISupports] - why may or may not be good enought - if not could try and access the objects wrappedJSObject property?
                    // val = SpiderMonkey.JS_CallFunctionName(context.ContextPointer, jsObject, "valueOf");
                    // Replaced CallFunctionName 'valueOf' method with 'managed convert' (for speed reasons)
                    val = JsVal.FromPtr(context.ConvertCOMObjectToJSObject((nsISupports)p));
                }
                else if (p is bool)
                {
                    SpiderMonkey.JS_ExecuteScript(context.ContextPointer, ((bool)p) ? "true;" : "false;", out val);
                }
                else if (p is double)
                {
                    val = JsVal.FromDouble((double)p);
                }
                else
                {
                    SpiderMonkey.JS_ExecuteScript(context.ContextPointer, p.ToString(), out val);
                }
                collection.Add(val);
            }
            return(collection);
        }
        public void SpiderMonkeyEntryPointTests()
        {
            foreach (var entryPoint in EntryPoints())
            {
                using (var dummy = new GeckoWebBrowser())
                {
                    dummy.CreateControl();
                    var dummyHandle = dummy.Handle;

                    // Try us around the using because, AutoJSContext can throw exception caused by the junk arguments we pass to EntryPoints.
                    try
                    {
                        using (var cx = new AutoJSContext(dummy.Window))
                        {
                            entryPoint.Value(cx.ContextPointer, SpiderMonkey.CurrentGlobalOrNull(cx.ContextPointer));
                        }
                    }
                    catch (Exception e)
                    {
                        if (e is EntryPointNotFoundException)
                        {
                            Assert.Fail(String.Format("{0}:{1} EntryPoint is wrong: {2}", entryPoint.Value, entryPoint.Key,
                                                      e.Message));
                        }
                    }
                }
            }
        }
Example #3
0
        private static JsVal CreateBoolJsVal(AutoJSContext context, bool b)
        {
            JsVal val;

            SpiderMonkey.JS_ExecuteScript(context.ContextPointer, ((bool)b) ? "true;" : "false;", out val);
            return(val);
        }
        public GeckoElement GetElementByJQuery(string jQuery)
        {
            using (var autoContext = new AutoJSContext(_window))
            {
                var jsValue = autoContext.EvaluateScript(jQuery, _window.DomWindow);

                if (!jsValue.IsObject)
                {
                    return(null);
                }

                var nativeComObject = jsValue.ToComObject(autoContext.ContextPointer);
                var element         = Xpcom.QueryInterface </* nsIDOMHTMLElement */ nsIDOMElement>(nativeComObject);
                if (element != null)
                {
                    return(GeckoHtmlElement.Create((mozIDOMWindowProxy)_window.DomWindow, element));
                }

                if (!SpiderMonkey.JS_HasProperty(autoContext.ContextPointer, jsValue.AsPtr, "length"))
                {
                    return(null);
                }

                var length = SpiderMonkey.JS_GetProperty(autoContext.ContextPointer, jsValue.AsPtr, "length").ToInteger();
                if (length == 0)
                {
                    return(null);
                }

                return(CreateHtmlElementFromDom(autoContext, jsValue, 0));
            }
        }
 public string GetStringValue()
 {
     using (var context = new AutoJSContext())
     {
         var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)_xpathResult.Instance);
         return(SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "stringValue").ToString());
     }
 }
Example #6
0
 public void PeekCompartmentScope_NotContextHaveBeenPushed_ReturnsGlobalContext()
 {
     using (var context = new AutoJSContext())
     {
         var globalObject = SpiderMonkey.DefaultObjectForContextOrNull(context.ContextPointer);
         Assert.AreEqual(context.PeekCompartmentScope(), globalObject);
     }
 }
Example #7
0
 public GeckoNode GetSingleNodeValue()
 {
     using (var context = new AutoJSContext())
     {
         var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)xpathResult.Instance);
         return((SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "singleNodeValue").ToComObject(context.ContextPointer) as nsIDOMNode).Wrap(GeckoNode.Create));
     }
 }
Example #8
0
 public double GetNumberValue()
 {
     using (var context = new AutoJSContext())
     {
         var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)xpathResult.Instance);
         return(SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "numberValue").ToDouble());
     }
 }
Example #9
0
 public XPathResultType GetResultType()
 {
     using (var context = new AutoJSContext())
     {
         var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)xpathResult.Instance);
         return((XPathResultType)SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "resultType").ToInteger());
     }
 }
 public bool GetBooleanValue()
 {
     using (var context = new AutoJSContext(_proxy))
         using (var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)_xpathResult.Instance))
         {
             return(SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject.JSObject, "booleanValue").ToBoolean());
         }
 }
        public void JS_TypeOfValue_OnBoolJsValCreatedBySpiderMonkey_ReturnsTypeBool()
        {
            var jsVal = CreateBoolJsVal(_gwb.Window, true);

            using (AutoJSContext cx = new AutoJSContext(_gwb.Window))
            {
                Assert.AreEqual(JSType.JSTYPE_BOOLEAN, SpiderMonkey.JS_TypeOfValue(cx.ContextPointer, jsVal));
            }
        }
        public void JS_TypeOfValue_OnNumberJsValCreatedBySpiderMonkey_ReturnsTypeNumber()
        {
            var jsVal = CreateNumberJsVal(_gwb.Window, 100);

            using (AutoJSContext cx = new AutoJSContext(_gwb.Window))
            {
                Assert.AreEqual(JSType.JSTYPE_NUMBER, SpiderMonkey.JS_TypeOfValue(cx.ContextPointer, jsVal));
            }
        }
        public void JS_TypeOfValue_OnStringJsValCreatedBySpiderMonkey_ReturnsTypeString()
        {
            var jsVal = CreateStringJsVal(_gwb.Window, "hello world");

            using (AutoJSContext cx = new AutoJSContext(_gwb.Window))
            {
                Assert.AreEqual(JSType.JSTYPE_STRING, SpiderMonkey.JS_TypeOfValue(cx.ContextPointer, jsVal));
            }
        }
Example #14
0
        public void JS_TypeOfValue_OnStringJsValCreatedBySpiderMonkey_ReturnsTypeString()
        {
            var jsVal = CreateStringJsVal("hello world");

            using (AutoJSContext cx = new AutoJSContext(GlobalJSContextHolder.BackstageJSContext))
            {
                Assert.AreEqual(JSType.JSTYPE_STRING, SpiderMonkey.JS_TypeOfValue(cx.ContextPointer, jsVal));
            }
        }
        private static GeckoElement CreateHtmlElementFromDom(AutoJSContext autoContext, JsVal jsValue, int elementIndex)
        {
            var elementIndexString = elementIndex.ToString(CultureInfo.InvariantCulture);
            var firstNativeDom     = SpiderMonkey.JS_GetProperty(autoContext.ContextPointer, jsValue.AsPtr, elementIndexString).ToComObject(autoContext.ContextPointer);

            var element = Xpcom.QueryInterface </* nsIDOMHTMLElement */ nsIDOMElement>(firstNativeDom);

            return(element == null ? null : GeckoHtmlElement.Create((mozIDOMWindowProxy)autoContext.Window, element));
        }
Example #16
0
 public void CallVoidMethod(string methodName, params object[] paramObjects)
 {
     using (var context = new AutoJSContext(_globalWindow))
     {
         var jsObject   = context.ConvertCOMObjectToJSObject(_thisObject);
         var collection = ConvertTypes(paramObjects, context);
         SpiderMonkey.JS_CallFunctionName(context.ContextPointer, jsObject, methodName, collection.ToArray());
     }
 }
Example #17
0
        public void JS_TypeOfValue_OnBoolJsValCreatedBySpiderMonkey_ReturnsTypeBool()
        {
            var jsVal = CreateBoolJsVal(true);

            using (AutoJSContext cx = new AutoJSContext(GlobalJSContextHolder.BackstageJSContext))
            {
                Assert.AreEqual(JSType.JSTYPE_BOOLEAN, SpiderMonkey.JS_TypeOfValue(cx.ContextPointer, jsVal));
            }
        }
Example #18
0
        public void JS_TypeOfValue_OnNumberJsValCreatedBySpiderMonkey_ReturnsTypeNumber()
        {
            var jsVal = CreateNumberJsVal(100);

            using (AutoJSContext cx = new AutoJSContext(GlobalJSContextHolder.BackstageJSContext))
            {
                Assert.AreEqual(JSType.JSTYPE_NUMBER, SpiderMonkey.JS_TypeOfValue(cx.ContextPointer, jsVal));
            }
        }
Example #19
0
 public void CallVoidMethod(string methodName, params object[] paramObjects)
 {
     using (var context = new AutoJSContext(_globalWindowProxy))
         using (var jsObject = context.ConvertCOMObjectToJSObject(_thisObject, true))
         {
             DisposablCollection disposablCollection;
             var collection = ConvertTypes(paramObjects, context, out disposablCollection);
             SpiderMonkey.JS_CallFunctionName(context.ContextPointer, jsObject.JSObject, methodName, collection.ToArray());
             disposablCollection.Dispose();
         }
 }
Example #20
0
        public void PushCompartmentScope_PushANewScopeObject_PeekNoLongerReturnsGlobalContext()
        {
            _browser.TestLoadHtml("hello world");
            using (var context = new AutoJSContext(_browser.Window.JSContext))
            {
                context.PushCompartmentScope((nsISupports)_browser.Window.DomWindow);

                var globalObject = SpiderMonkey.DefaultObjectForContextOrNull(context.ContextPointer);
                Assert.AreNotEqual(context.PeekCompartmentScope(), globalObject);
            }
        }
Example #21
0
 public T CallMethod <T>(string methodName, params object[] paramObjects)
 {
     using (var context = new AutoJSContext(_globalWindow))
     {
         var jsObject   = context.ConvertCOMObjectToJSObject(_thisObject);
         var collection = ConvertTypes(paramObjects, context);
         var retObject  =
             SpiderMonkey.JS_CallFunctionName(context.ContextPointer, jsObject, methodName, collection.ToArray())
             .ToObject();
         return(ConvertObject <T>(retObject));
     }
 }
Example #22
0
        public void JS_NewStringCopyN()
        {
            using (AutoJSContext cx = new AutoJSContext(GlobalJSContextHolder.BackstageJSContext))
            {
                IntPtr jsString = SpiderMonkey.JS_NewStringCopyN(cx.ContextPointer, "hello world", 11);
                Assert.NotNull(jsString);

                IntPtr str    = SpiderMonkey.JS_EncodeString(cx.ContextPointer, jsString);
                string result = Marshal.PtrToStringAnsi(str);
                Assert.AreEqual("hello world", result);
            }
        }
Example #23
0
 public void SetProperty(string propertyName, object value)
 {
     using (var context = new AutoJSContext(_globalWindow))
     {
         var jsObject = context.ConvertCOMObjectToJSObject(_thisObject);
         if (!SpiderMonkey.JS_SetProperty(context.ContextPointer, jsObject, propertyName,
                                          ConvertTypes(new[] { value }, context).First()))
         {
             throw new GeckoException(String.Format("Property '{0}' of value '{1}' could not be set on object",
                                                    propertyName, value));
         }
     }
 }
Example #24
0
        private static JsVal CreateJsVal(AutoJSContext cx, string jscript)
        {
            if (cx == null)
            {
                return(CreateJsVal(jscript));
            }

            var  ptr = new JsVal();
            bool ret = SpiderMonkey.JS_EvaluateScript(cx.ContextPointer, jscript, (uint)jscript.Length, "script", 1, ref ptr);

            Assert.IsTrue(ret);
            return(ptr);
        }
Example #25
0
        public void JS_TypeOfValue()
        {
            if (Xpcom.IsLinux && IntPtr.Size == 8)
            {
                Assert.Ignore("unsafe test:seg faults on 64bit Linux");
            }

            using (AutoJSContext cx = new AutoJSContext(GlobalJSContextHolder.BackstageJSContext))
            {
                Assert.AreEqual(JSType.JSTYPE_NUMBER, SpiderMonkey.JS_TypeOfValue(cx.ContextPointer, JsVal.FromPtr(0)));
                Assert.AreEqual(JSType.JSTYPE_NUMBER, SpiderMonkey.JS_TypeOfValue(cx.ContextPointer, JsVal.FromPtr(0xffff0000ffffffff)));
                Assert.AreEqual(JSType.JSTYPE_BOOLEAN, SpiderMonkey.JS_TypeOfValue(cx.ContextPointer, JsVal.FromPtr(0xffffffffffffffff)));
            }
        }
Example #26
0
 public T GetProperty <T>(string propertyName)
 {
     using (var context = new AutoJSContext(_globalWindow))
     {
         var jsObject = context.ConvertCOMObjectToJSObject(_thisObject);
         var result   = SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, propertyName);
         if (result.IsUndefined)
         {
             throw new GeckoException(String.Format("Property '{0}' of type '{1}' does not exist on object",
                                                    propertyName, typeof(T).Name));
         }
         var retObject = result.ToObject();
         return(ConvertObject <T>(retObject));
     }
 }
Example #27
0
        public void GetWrappedNativePrototype()
        {
            _browser.TestLoadHtml("<span id='a'>hello world</span>");
            var element = _browser.Document.GetHtmlElementById("a");

            using (AutoJSContext context = new AutoJSContext(_browser.Window.JSContext))
            {
                IntPtr globalObject   = SpiderMonkey.JS_GetGlobalForScopeChain(context.ContextPointer);
                var    jsobjectholder = m_instance.GetWrappedNativePrototype(context.ContextPointer, globalObject, new MyClassInfo());

                string result;
                Console.WriteLine(context.EvaluateScript("this", (nsISupports)jsobjectholder, out result));
                Console.WriteLine(result);
            }
        }
Example #28
0
        /// <summary>
        /// Unittest helper method to create a String JsVal
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        private static JsVal CreateJsVal(string jscript)
        {
            using (AutoJSContext cx = new AutoJSContext(GlobalJSContextHolder.BackstageJSContext))
            {
                var ptr = new JsVal();
                var _securityManager = Xpcom.GetService <nsIScriptSecurityManager>("@mozilla.org/scriptsecuritymanager;1");
                var _systemPrincipal = _securityManager.GetSystemPrincipal();

                IntPtr globalObject = SpiderMonkey.JS_GetGlobalForScopeChain(cx.ContextPointer);
                bool   ret          = SpiderMonkey.JS_EvaluateScript(cx.ContextPointer, globalObject, jscript, (uint)jscript.Length, "script", 1, ref ptr);
                Assert.IsTrue(ret);
                Marshal.ReleaseComObject(_securityManager);

                return(ptr);
            }
        }
Example #29
0
        public void FindInterfaceWithMember_OnAWindowElementLookingForNameMethod_ReturnsInterfaceThatContainsMethodNode()
        {
            _browser.TestLoadHtml("hello world");
            using (var context = new AutoJSContext(_browser.Window))
            {
                var jsValWindow = context.EvaluateScript("this");
                var jsVal       = SpiderMonkeyTests.CreateStringJsVal(context, "name");
                var jsObject    = SpiderMonkey.JS_ValueToObject(context.ContextPointer, jsValWindow);
                var a           = m_instance.GetWrappedNativeOfJSObject(context.ContextPointer, jsObject);

                // Perform the test.
                var i = a.FindInterfaceWithMember(ref jsVal.AsPtr);

                Assert.NotNull(i);
                Assert.IsTrue(i.IsScriptable());
                Assert.AreEqual("nsIDOMWindow", i.GetNameShared());
            }
        }
Example #30
0
        public void FindInterfaceWithName_OnAWindowElementLookingForADOMWindowInterface_ReturnsExpectedInterface()
        {
            _browser.TestLoadHtml("hello world");
            using (var context = new AutoJSContext(_browser.Window.JSContext))
            {
                context.PushCompartmentScope((nsISupports)_browser.Window.DomWindow);
                var jsValWindow = context.EvaluateScript("this");
                var jsVal       = SpiderMonkeyTests.CreateStringJsVal(context, "nsIDOMWindow");
                var jsObject    = SpiderMonkey.JS_ValueToObject(context.ContextPointer, jsValWindow);
                var a           = m_instance.GetWrappedNativeOfJSObject(context.ContextPointer, jsObject);

                // Perform the test
                var i = a.FindInterfaceWithName(ref jsVal.AsPtr);

                Assert.NotNull(i);
                Assert.IsTrue(i.IsScriptable());
                Assert.AreEqual("nsIDOMWindow", i.GetNameShared());
            }
        }