public void ForceSynchronize()
    {
      Browser.Visible = CurrentModel.Mode == Model.WorkMode.Browse || !IsBusy;
      Browser.IsWebBrowserContextMenuEnabled = CurrentModel.Mode == Model.WorkMode.Browse;
      progressBar.Visible = IsBusy;
      Browser.AllowNavigation = CurrentModel.Mode == Model.WorkMode.Browse || IsBusy;
      toolStrip1.Enabled = CurrentModel.Mode == Model.WorkMode.Browse;
      Browser.AllowWebBrowserDrop = CurrentModel.Mode == Model.WorkMode.Browse;

      if (/*!IsBusy && */!WebPosition.Equals(cachedPosition, Position))
      {
        if (!Uri.Equals(cachedPosition, Position.Persist))
        {
          Browser.AllowNavigation = true;
          //Browser.Navigate(Position.Url.AbsoluteUri);
          Browser.Navigate(Position.Url);
          Console.WriteLine("Navigate {0}", Position.Url);
          urlComboBox.Text = Position.Url.AbsoluteUri;
        }
        cachedPosition = Position.Persist;
      }
      if (CurrentModel.Mode == Model.WorkMode.Browse)
      {
        backButton.Enabled = Browser.CanGoBack;
        forwardButton.Enabled = Browser.CanGoForward;
        if (!IsBusy && Browser.Url != null && !Uri.Equals(Position.Url, Browser.Url))
        {
          Position.Set(WebPosition.Parse(Browser.Url.AbsoluteUri));
          cachedPosition = Position.Persist;
          urlComboBox.Text = cachedPosition.Url;
        }
      }
      if (CurrentModel.Mode == Model.WorkMode.Parse)
      {
        if (Browser.Focused && Browser.Document != null && Browser.Document.DomDocument != null)
        {
          mshtml.HTMLDocumentClass nativeDoc = Browser.Document.DomDocument as mshtml.HTMLDocumentClass;
          if (nativeDoc != null && nativeDoc.selection != null && nativeDoc.selection.type != "None")
            nativeDoc.selection.empty();
        }
        if (!IsBusy && Browser.Document != null)
        {
          if (!WebPosition.Equals(lastParsedDocument.Key, cachedPosition))
          {
            if (lastParsedDocument.Value != null)
              DeinitDocument(lastParsedDocument.Value);
            lastParsedDocument = new KeyValuePair<WebPosition.PersistStruct, HtmlDocument>(cachedPosition, Browser.Document);
            InitDocument(Browser.Document);
          }
        }
        if (!contextMenuStrip1.Visible) //Browser.Focused
          SetLastPointedElement(CurrentPointedElement);
      }
    }
 public RequestState(WebPosition.PersistStruct pos, WebRequest request)
 {
     this.Request = request;
     this.Position = pos;
 }
 private void SetPosition(string adress)
 {
   cachedPosition = WebPosition.EmptyPosition.Persist;
   WebPosition pos = WebPosition.Parse(adress);
   if (pos != null)
   {
     Position.Set(pos);
   }
 }