using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using RomCheater.Logging; namespace RomCheater.Core { public interface IWebBrowserProvider { IWebBrowserInterface GetProvider(); } public interface IWebBrowserInterface { void Navigate(string urlString); void Navigate(Uri url); } public class EmptyWebBrowserProvider : BaseWebBrowserProvider, IWebBrowserInterface { public EmptyWebBrowserProvider() :base() { } } public class WebBrowserProvider : BaseWebBrowserProvider, IWebBrowserInterface { public WebBrowserProvider() : this(new WebBrowser()) { } public WebBrowserProvider(IWebBrowserInterface provider) { } public WebBrowserProvider(WebBrowser provider) : base(provider) { } } public class BaseWebBrowserProvider : IWebBrowserInterface, IWebBrowserProvider { public BaseWebBrowserProvider() : this(new WebBrowser()) { } protected BaseWebBrowserProvider(WebBrowser provider) { this.Provider = provider; } #region IWebBrowserInterface Members private WebBrowser _Provider; public WebBrowser Provider { get { return _Provider; } protected set { _Provider = value; } } #region Extensions to WebBrowser provider public void Navigate(string urlString) { NavigateInternal(urlString); } public void Navigate(Uri url) { NavigateInternal(url.ToString()); } private void NavigateInternal(string url) { try { Uri uri = new Uri(url); this.Provider.Navigate(uri); } catch (UriFormatException ex) { MessageBox.Show(string.Format("Could not navigate to url: '{0}'", url), string.Format("A Uri Format Exception Occurred in '{0}'", this.GetType().Name), MessageBoxButtons.OK, MessageBoxIcon.Error); logger.Error.WriteLine("Unable to navigate to url: '{0}'", url); logger.VerboseError.WriteLine(ex.ToString()); } } #endregion #endregion #region IWebBrowserProvider Members public IWebBrowserInterface GetProvider() { return (IWebBrowserInterface)this; } #endregion } }