Exemplo n.º 1
0
        /// <summary>
        /// Working similar to SelectSingle but not throwing exceptions on error (simply return first result)
        /// </summary>
        /// <param name="xpath"></param>
        /// <returns></returns>
        public GeckoNode SelectFirst(string xpath)
        {
            var r = EvaluateXPathInternal(xpath);

            nsIDOMNode singleNode = null;

            using (var context = new AutoJSContext())
            {
                var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)r);

                // TODO: (Idenally I would generate these calls via a webidl-> C# compiler but for now just do it via manually written spidermonkey calls..)
                var resultType = SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "resultType").ToInteger();

                switch (resultType)
                {
                case nsIDOMXPathResultConsts.UNORDERED_NODE_ITERATOR_TYPE:
                    singleNode = (nsIDOMNode)SpiderMonkey.JS_CallFunctionName(context.ContextPointer, jsObject, "iterateNext", new JsVal[0]).ToComObject(context.ContextPointer);
                    break;

                case nsIDOMXPathResultConsts.FIRST_ORDERED_NODE_TYPE:
                case nsIDOMXPathResultConsts.ANY_UNORDERED_NODE_TYPE:
                    singleNode = (nsIDOMNode)SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "singleNodeValue").ToComObject(context.ContextPointer);
                    break;
                }
                var ret = singleNode.Wrap(GeckoNode.Create);
                Xpcom.FreeComObject(ref r);
                return(ret);
            }
        }
Exemplo n.º 2
0
		public JSAutoCompartment(AutoJSContext context, nsISupports comObject)
		{
			if (context == null)
				throw new ArgumentNullException("context");
			if (context.ContextPointer == IntPtr.Zero)
				throw new ArgumentException("context has Null ContextPointer");
			if (context == null)
				throw new ArgumentNullException("comObject");

			_obj = context.ConvertCOMObjectToJSObject(comObject);
			_cx = context.ContextPointer;
			_oldCompartment = SpiderMonkey.JS_EnterCompartment(_cx, _obj);			
		}
Exemplo n.º 3
0
        public GeckoNode SelectSingle(string xpath)
        {
            var r = EvaluateXPathInternal(xpath);

            nsIDOMNode singleNode = null;

            using (var context = new AutoJSContext(Window))
                using (var jsObject = context.ConvertCOMObjectToJSObject((nsISupports)r))
                {
                    // TODO: (Idenally I would generate these calls via a webidl-> C# compiler but for now just do it via manually written spidermonkey calls..)
                    var resultType = SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject.JSObject, "resultType").ToInteger();

#if PORTFF60
                    switch (resultType)
                    {
                    case nsIDOMXPathResultConsts.UNORDERED_NODE_ITERATOR_TYPE:
                        singleNode =
                            (nsIDOMNode)
                            SpiderMonkey.JS_CallFunctionName(context.ContextPointer, jsObject, "iterateNext",
                                                             new JsVal[0]).ToComObject(context.ContextPointer);
                        var test =
                            (SpiderMonkey.JS_CallFunctionName(context.ContextPointer, jsObject, "iterateNext",
                                                              new JsVal[0]));
                        if (!test.IsNull)
                        {
                            Xpcom.FreeComObject(ref singleNode);
                            Xpcom.FreeComObject(ref r);
                            throw new GeckoDomException("There are more than 1 nodes in Single selection");
                        }
                        break;

                    case nsIDOMXPathResultConsts.FIRST_ORDERED_NODE_TYPE:
                    case nsIDOMXPathResultConsts.ANY_UNORDERED_NODE_TYPE:
                        singleNode =
                            (nsIDOMNode)
                            SpiderMonkey.JS_GetProperty(context.ContextPointer, jsObject, "singleNodeValue")
                            .ToComObject(context.ContextPointer);
                        break;
                    }
#endif
                    throw new NotImplementedException();
                }

            #if PORTFF60
            var ret = singleNode.Wrap(GeckoNode.Create);
            Xpcom.FreeComObject(ref r);
            return(ret);
#endif
        }
Exemplo n.º 4
0
 public IEnumerator <GeckoNode> GetEnumerator()
 {
     using (var context = new AutoJSContext())
     {
         var   jsObject = context.ConvertCOMObjectToJSObject((nsISupports)xpathResult);
         JsVal jsVal;
         do
         {
             while (
                 !(jsVal = SpiderMonkey.JS_CallFunctionName(context.ContextPointer, jsObject, "iterateNext")).IsNull)
             {
                 yield return((jsVal.ToComObject(context.ContextPointer) as nsIDOMNode).Wrap(GeckoNode.Create));
             }
         } while (!jsVal.IsNull);
     }
 }
Exemplo n.º 5
0
        public JSAutoCompartment(AutoJSContext context, nsISupports comObject)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (context.ContextPointer == IntPtr.Zero)
            {
                throw new ArgumentException("context has Null ContextPointer");
            }
            if (context == null)
            {
                throw new ArgumentNullException("comObject");
            }

            _obj            = context.ConvertCOMObjectToJSObject(comObject);
            _cx             = context.ContextPointer;
            _oldCompartment = SpiderMonkey.JS_EnterCompartment(_cx, _obj);
        }
Exemplo n.º 6
0
        public JSAutoCompartment(AutoJSContext context, nsISupports comObject)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (context.ContextPointer == IntPtr.Zero)
            {
                throw new ArgumentException("context has Null ContextPointer");
            }
            if (context == null)
            {
                throw new ArgumentNullException("comObject");
            }

            _obj = context.ConvertCOMObjectToJSObject(comObject, false);
            _cx  = context.ContextPointer;

            EnterCompartment();
        }