/// <summary>
        /// Provides information to the web server about the requesting device.
        /// </summary>
        /// <param name="request">
        /// HttpRequest that provides information about the source device.
        /// </param>
        /// <returns>
        /// A HttpBrowserCapabilities object containing information which
        /// retrieves device data from 51Degrees.
        /// </returns>
        public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request)
        {
            HttpBrowserCapabilities caps;
            var baseCaps = base.GetBrowserCapabilities(request);
            var match    = WebProvider.GetMatch(request);

            if (match != null)
            {
                // A provider is present so 51Degrees can be used to override
                // some of the returned values.
                caps = new FiftyOneBrowserCapabilities(
                    baseCaps,
                    request,
                    match);

                // Copy the adapters from the original.
                var adapters = baseCaps.Adapters.GetEnumerator();
                while (adapters.MoveNext())
                {
                    caps.Adapters.Add(adapters.Key, adapters.Value);
                }

                // Copy the browsers from the original to prevent the Browsers
                // property returning null.
                if (baseCaps.Browsers != null)
                {
                    foreach (string browser in baseCaps.Browsers)
                    {
                        caps.AddBrowser(browser);
                    }
                }
            }
            else
            {
                // No 51Degrees active provider is present so we have to use
                // the base capabilities only.
                caps = baseCaps;
            }
            return(caps);
        }
        /// <summary>
        /// Provides information to the web server about the requesting device.
        /// </summary>
        /// <param name="request">
        /// HttpRequest that provides information about the source device.
        /// </param>
        /// <returns>
        /// A HttpBrowserCapabilities object containing information which 
        /// retrieves device data from 51Degrees.
        /// </returns>
        public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request)
        {
            HttpBrowserCapabilities caps;
            var baseCaps = base.GetBrowserCapabilities(request);
            var match = WebProvider.GetMatch(request);
            if (match != null)
            {
                // A provider is present so 51Degrees can be used to override
                // some of the returned values.
                caps = new FiftyOneBrowserCapabilities(
                    baseCaps,
                    request,
                    match);

                // Copy the adapters from the original.
                var adapters = baseCaps.Adapters.GetEnumerator();
                while (adapters.MoveNext())
                {
                    caps.Adapters.Add(adapters.Key, adapters.Value);
                }

                // Copy the browsers from the original to prevent the Browsers
                // property returning null.
                if (baseCaps.Browsers != null)
                {
                    foreach (string browser in baseCaps.Browsers)
                    {
                        caps.AddBrowser(browser);
                    }
                }
            }
            else
            {
                // No 51Degrees active provider is present so we have to use
                // the base capabilities only.
                caps = baseCaps;
            }
            return caps;
        }