public void OnWebMessageRecieved(WebMessageReceivedEventArgs args) { string source = args.Source; string json = args.WebMessageAsJson; string str = args.WebMessageAsString; JObject jsonObj = JObject.Parse(json); if (!jsonObj.ContainsKey("message")) { return; } if (!jsonObj.ContainsKey("args")) { return; } Messages m; if (!Enum.TryParse <Messages>(jsonObj["message"].Value <string>(), out m)) { return; } JToken msgArgs = jsonObj["args"]; switch (m) { case Messages.MG_CREATE_TAB: { int tabId = msgArgs["tabId"].Value <int>(); bool shouldBeActive = msgArgs["active"].Value <bool>(); Tab newTab = Tab.CreateNewTab(this, _contentEnvironment, tabId, shouldBeActive); if (!_tabDictionary.ContainsKey(tabId)) { newTab.Dock = DockStyle.Fill; tableLayoutPanel1.Controls.Add(newTab, 0, 1); _tabDictionary.Add(tabId, newTab); } } break; case Messages.MG_NAVIGATE: { string uri = msgArgs["uri"].Value <string>(); string browserScheme = "browser://"; if (uri.Contains(browserScheme)) { string path = uri.Substring(browserScheme.Length); if (path == "favorites" || path == "settings" || path == "history") { string filePath = "Content\\content_ui\\"; filePath = Path.Combine(filePath, path); filePath += ".html"; string fullPath = GetFullPathFor(filePath); _tabDictionary[_activeTabId].Navigate(fullPath); } else { System.Diagnostics.Debug.WriteLine("Requested unknown browser page"); } } else { _tabDictionary[_activeTabId].Navigate(uri); } } break; case Messages.MG_GO_FORWARD: { _tabDictionary[_activeTabId].GoForward(); } break; case Messages.MG_GO_BACK: { _tabDictionary[_activeTabId].GoBack(); } break; case Messages.MG_RELOAD: { _tabDictionary[_activeTabId].Reload(); } break; case Messages.MG_CANCEL: { _tabDictionary[_activeTabId].CallDevToolsProtocolMethod("Page.stopLoading", "{}", null); } break; case Messages.MG_SWITCH_TAB: { int tabId = msgArgs["tabId"].Value <int>(); SwitchToTab(tabId); } break; case Messages.MG_CLOSE_TAB: { int tabId = msgArgs["tabId"].Value <int>(); tableLayoutPanel1.Controls.Remove(_tabDictionary[tabId]); _tabDictionary.Remove(tabId); } break; case Messages.MG_CLOSE_WINDOW: { Close(); } break; case Messages.MG_SHOW_OPTIONS: { _optionsWebView.Visible = true; ResizeUIWebViews(); _optionsWebView.BringToFront(); _optionsWebView.Focus(); } break; case Messages.MG_HIDE_OPTIONS: { _optionsWebView.Visible = false; } break; case Messages.MG_OPTION_SELECTED: { _tabDictionary[_activeTabId].Focus(); } break; case Messages.MG_GET_FAVORITES: case Messages.MG_GET_SETTINGS: case Messages.MG_GET_HISTORY: { // Forward back to requesting tab JToken tabIdToken = msgArgs["tabId"]; int tabId = tabIdToken.Value <int>(); RemoveFields(msgArgs, new string[] { "tabId" }); PostJsonToWebView(jsonObj, _tabDictionary[tabId]); } break; } }