public void AddContentLength_ToTrue_HeaderContainsContentLength()
        {
            GeckoMIMEInputStream stream = new GeckoMIMEInputStream();
            stream.AddContentLength = true;

            Assert.IsTrue(ReadGeckoMIMEInputStreamAsUTF8(stream).Contains("Content-Length"));
        }
        public void SetData_SimpleData_HeaderContainsSimpleData()
        {
            GeckoMIMEInputStream stream = new GeckoMIMEInputStream();
            string simpleData = "id=hello";
            stream.SetData(simpleData);

            Assert.IsTrue(ReadGeckoMIMEInputStreamAsUTF8(stream).Contains(simpleData));
        }
        public void AddHeader_AddValidHeaderEntry_HeaderContainsHeaderEntry()
        {
            GeckoMIMEInputStream stream = new GeckoMIMEInputStream();
            stream.AddHeader("Content-Type", "application/x-www-form-urlencoded");

            string header = ReadGeckoMIMEInputStreamAsUTF8(stream);
            Assert.IsTrue(header.Contains("Content-Type"));
            Assert.IsTrue(header.Contains("application/x-www-form-urlencoded"));
        }
        /// <summary>
        /// This is for unit tests only.
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        internal string ReadGeckoMIMEInputStreamAsUTF8(GeckoMIMEInputStream stream)
        {
            IntPtr buffer = Marshal.AllocCoTaskMem(2048);
            var count = stream.InputStream.Read(buffer, 2048);
            byte[] temp = new byte[2048];
            for (int i = 0; i < count; ++i)
            {
                temp[i] = Marshal.ReadByte(buffer, i);
            }

            return System.Text.UTF8Encoding.UTF8.GetString(temp).Trim();
        }
        /// <summary>
        ///  Navigates to the specified URL using the given load flags, referrer and post data
        ///  In order to find out when Navigate has finished attach a handler to NavigateFinishedNotifier.NavigateFinished.
        /// </summary>
        /// <param name="url">The url to navigate to.  If the url is empty or null, the browser does not navigate and the method returns false.</param>
        /// <param name="loadFlags">Flags which specify how the page is loaded.</param>
        /// <param name="referrer">The referring URL, or null.</param>
        /// <param name="postData">post data and headers, or null</param>
        /// <param name="headers">headers, or null</param>
        /// <returns>true if Navigate started. false otherwise.</returns>
        public bool Navigate(string url, GeckoLoadFlags loadFlags, string referrer, GeckoMIMEInputStream postData, GeckoMIMEInputStream headers)
        {
            if (string.IsNullOrEmpty(url))
            {
                return(false);
            }

            // added these from http://code.google.com/p/geckofx/issues/detail?id=5 so that it will work even if browser isn't currently shown
            //if (!IsHandleCreated) CreateHandle();
            //if (IsBusy) this.Stop();


            //	if (!IsHandleCreated)
            //		throw new InvalidOperationException("Cannot call Navigate() before the window handle is created.");

            // WebNav.LoadURI throws an exception if we try to open a file that doesn't exist...
            Uri created;

            if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out created) && created.IsAbsoluteUri && created.IsFile)
            {
                if (!File.Exists(created.LocalPath) && !Directory.Exists(created.LocalPath))
                {
                    return(false);
                }
            }

            nsIURI referrerUri = null;

            if (!string.IsNullOrEmpty(referrer))
            {
                //referrerUri = Xpcom.GetService<nsIIOService>("@mozilla.org/network/io-service;1").NewURI(new nsAUTF8String(referrer), null, null);
                referrerUri = IOService.CreateNsIUri(referrer);
            }


            _webNav.LoadURI(url, (uint)loadFlags, referrerUri, postData != null ? postData.InputStream : null, headers != null ? headers.InputStream : null);

            return(true);
        }
        /// <summary>
        ///  Navigates to the specified URL using the given load flags, referrer and post data
        ///  In order to find out when Navigate has finished attach a handler to NavigateFinishedNotifier.NavigateFinished.
        /// </summary>
        /// <param name="url">The url to navigate to.  If the url is empty or null, the browser does not navigate and the method returns false.</param>
        /// <param name="loadFlags">Flags which specify how the page is loaded.</param>
        /// <param name="referrer">The referring URL, or null.</param>
        /// <param name="postData">post data and headers, or null</param>
        /// <param name="headers">headers, or null</param>
        /// <returns>true if Navigate started. false otherwise.</returns>
        public bool Navigate(string url, GeckoLoadFlags loadFlags, string referrer, GeckoMIMEInputStream postData, GeckoMIMEInputStream headers)
        {
            if (string.IsNullOrEmpty(url))
                return false;

            // WebNav.LoadURI throws an exception if we try to open a file that doesn't exist...
            Uri created;
            if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out created) && created.IsAbsoluteUri && created.IsFile)
            {
                if (!File.Exists(created.LocalPath) && !Directory.Exists(created.LocalPath))
                    return false;
            }

            nsIURI referrerUri = null;
            if (!string.IsNullOrEmpty(referrer))
            {
                //referrerUri = Xpcom.GetService<nsIIOService>("@mozilla.org/network/io-service;1").NewURI(new nsAUTF8String(referrer), null, null);
                referrerUri = IOService.CreateNsIUri(referrer);
            }

            WebNav.LoadURI(url, (uint)loadFlags, referrerUri, postData != null ? postData.InputStream : null, headers != null ? headers.InputStream : null);

            return true;
        }
 /// <summary>
 ///  Navigates to the specified URL using the given load flags, referrer and post data
 ///  In order to find out when Navigate has finished attach a handler to NavigateFinishedNotifier.NavigateFinished.
 /// </summary>
 /// <param name="url">The url to navigate to.  If the url is empty or null, the browser does not navigate and the method returns false.</param>
 /// <param name="loadFlags">Flags which specify how the page is loaded.</param>
 /// <param name="referrer">The referring URL, or null.</param>
 /// <param name="postData">post data and headers, or null</param>
 /// <returns>true if Navigate started. false otherwise.</returns>
 public bool Navigate(string url, GeckoLoadFlags loadFlags, string referrer, GeckoMIMEInputStream postData)
 {
     return Navigate(url, loadFlags, referrer, postData, null);
 }
        /// <summary>
        ///  Navigates to the specified URL using the given load flags, referrer and post data
        ///  In order to find out when Navigate has finished attach a handler to NavigateFinishedNotifier.NavigateFinished.
        /// </summary>
        /// <param name="url">The url to navigate to.  If the url is empty or null, the browser does not navigate and the method returns false.</param>
        /// <param name="loadFlags">Flags which specify how the page is loaded.</param>
        /// <param name="referrer">The referring URL, or null.</param>
        /// <param name="postData">post data and headers, or null</param>
        /// <param name="headers">headers, or null</param>
        /// <returns>true if Navigate started. false otherwise.</returns>
        public bool Navigate(string url, GeckoLoadFlags loadFlags, string referrer, GeckoMIMEInputStream postData, GeckoMIMEInputStream headers)
        {
            if (string.IsNullOrEmpty(url))
                return false;

            // added these from http://code.google.com/p/geckofx/issues/detail?id=5 so that it will work even if browser isn't currently shown
            if (!IsHandleCreated) CreateHandle();
            if (IsBusy) this.Stop();


            if (!IsHandleCreated)
                throw new InvalidOperationException("Cannot call Navigate() before the window handle is created.");

            // WebNav.LoadURI throws an exception if we try to open a file that doesn't exist...
            Uri created;
            if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out created) && created.IsAbsoluteUri && created.IsFile)
            {
                if (!File.Exists(created.LocalPath) && !Directory.Exists(created.LocalPath))
                    return false;
            }

            nsIURI referrerUri = null;
            if (!string.IsNullOrEmpty(referrer))
            {
                //TODO - check for memory leaks
                referrerUri = IOService.CreateNsIUri(referrer);
            }

            ClearCachedCOMPtrs();

            WebNav.LoadURI(url, (uint)loadFlags, referrerUri, postData != null ? postData.InputStream : null, headers != null ? headers.InputStream : null);

            return true;
        }
 /// <summary>
 ///  Navigates to the specified URL using the given load flags, referrer and post data
 ///  In order to find out when Navigate has finished attach a handler to NavigateFinishedNotifier.NavigateFinished.
 /// </summary>
 /// <param name="url">The url to navigate to.  If the url is empty or null, the browser does not navigate and the method returns false.</param>
 /// <param name="loadFlags">Flags which specify how the page is loaded.</param>
 /// <param name="referrer">The referring URL, or null.</param>
 /// <param name="postData">post data and headers, or null</param>
 /// <returns>true if Navigate started. false otherwise.</returns>
 public bool Navigate(string url, GeckoLoadFlags loadFlags, string referrer, GeckoMIMEInputStream postData)
 {
     return(Navigate(url, loadFlags, referrer, postData, null));
 }