/// <summary>Raises the <see cref="ObserveHttpModify"/> event.</summary> /// <param name="e">The data for the event.</param> protected virtual void OnObserveHttpModifyRequest(GeckoObserveHttpModifyRequestEventArgs e) { var evnt = (EventHandler <GeckoObserveHttpModifyRequestEventArgs>)Events[ObserveHttpModifyRequestEvent]; if (evnt != null) { evnt(this, e); } }
/// <summary>Raises the <see cref="ObserveHttpModify"/> event.</summary> /// <param name="e">The data for the event.</param> protected virtual void OnObserveHttpModifyRequest(GeckoObserveHttpModifyRequestEventArgs e) { var evnt = ( EventHandler<GeckoObserveHttpModifyRequestEventArgs> ) Events[ ObserveHttpModifyRequestEvent ]; if ( evnt != null ) evnt( this, e ); }
public void Observe(nsISupports aSubject, string aTopic, string aData) { if (aTopic.Equals(ObserverNotifications.HttpRequests.HttpOnModifyRequest)) { using (var httpChannel = HttpChannel.Create(aSubject)) { var origUri = httpChannel.OriginalUri; var uri = httpChannel.Uri; var uriRef = httpChannel.Referrer; var reqMethod = httpChannel.RequestMethod; var reqHeaders = httpChannel.GetRequestHeaders(); byte[] reqBody = null; bool? reqBodyContainsHeaders = null; #region POST data var uploadChannel = Xpcom.QueryInterface<nsIUploadChannel>(aSubject); var uploadChannel2 = Xpcom.QueryInterface<nsIUploadChannel2>(aSubject); if (uploadChannel != null) { var uc = new UploadChannel(uploadChannel); var uploadStream = uc.UploadStream; if (uploadStream != null) { if (uploadStream.CanSeek) { var rdr = new BinaryReader(uploadStream); var reqBodyStream = new MemoryStream(); try { reqBody = new byte[] { }; int avl = 0; while ((avl = ((int)uploadStream.Available)) > 0) { reqBodyStream.Write(rdr.ReadBytes(avl), 0, avl); } reqBody = reqBodyStream.ToArray(); if (uploadChannel2 != null) reqBodyContainsHeaders = uploadChannel2.GetUploadStreamHasHeadersAttribute(); } catch (IOException ex) { // failed to read body, ignore } // rewind stream, so browser can read it as usual uploadStream.Seek(0, 0); } } } #endregion POST data var evt = new GeckoObserveHttpModifyRequestEventArgs(uri, uriRef, reqMethod, reqBody, reqHeaders, httpChannel, reqBodyContainsHeaders); OnObserveHttpModifyRequest(evt); if (evt.Cancel) { httpChannel.Cancel(nsIHelperAppLauncherConstants.NS_BINDING_ABORTED); } } } }