public void ChangeUrl(Uri url) { var conf = configProvider.GetConfig(); if (conf is null) { throw new ConfigException(Resources.ConfigNotFound); } if (conf.Info is null) { throw new ConfigException(Resources.ConfigInfoIsNull); } var shared = configProvider.GetSharedConfig(); var tmp = conf.Info.Url; conf.Info.Url = url; if (shared != null && shared.Config != null && shared.Config.Info != null) { shared.Config.Info.Url = url; } try { OnConfigUrlChanged?.Invoke(this, conf, url); } catch { conf.Info.Url = tmp; if (shared != null && shared.Config != null && shared.Config.Info != null) { shared.Config.Info.Url = tmp; } throw; } configProvider.Commit(); OnUrlChanged?.Invoke(this, url); }
private void Client_OnEvent(string method, Newtonsoft.Json.Linq.JToken args) { Frame frame = null; switch (method) { case "Page.navigatedWithinDocument": var newUrl = args["url"].ToString(); Frames.TryGetValue(args["frameId"].ToString(), out frame); OnUrlChanged?.Invoke(newUrl, frame); break; case "Page.frameNavigated": frame = args["frame"].ToObject <Frame>(); Frames[frame.id] = frame; OnNavigated?.Invoke(frame); break; case "Runtime.executionContextsCleared": OnPageDestroyed?.Invoke(); IsScreencastStarted = false; break; case "Page.frameStartedLoading": OnStartedLoading?.Invoke(args["frameId"].ToString()); break; case "Page.loadEventFired": OnLoaded?.Invoke(); break; case "Network.loadingFinished": var reqId = args["requestId"].ToString(); if (Responses.TryGetValue(reqId, out Response resp)) { OnRequestComplete?.Invoke(resp.Request, resp); } break; case "Network.responseReceived": reqId = args["requestId"].ToString(); if (Requests.TryGetValue(reqId, out Request req)) { Requests.Remove(reqId); } resp = args["response"].ToObject <Response>(); resp.Request = req; resp.requestId = reqId; Responses[reqId] = resp; // HACK: Chrome sucks and the response is not actually ready yet. // OnRequestComplete?.Invoke(req, resp); break; case "Network.requestWillBeSent": reqId = args["requestId"].ToString(); req = args.ToObject <Request>(); req.frameId = args["frameId"].ToString(); Frames.TryGetValue(req.frameId, out req.Frame); req.requestId = reqId; Requests[reqId] = req; OnRequestStarted?.Invoke(req); break; case "Page.screencastFrame": var sessionId = (int)args["sessionId"]; var t = Client.Send("Page.screencastFrameAck", new { sessionId }); MostRecentFrameBase64 = args["data"].ToString(); MostRecentFrameMetadata = args["metadata"].ToObject <ScreencastFrameMetadata>(); OnScreencastFrame?.Invoke(MostRecentFrameBase64, MostRecentFrameMetadata); break; } }