blob: 5883f7346d56f2b984bb31137ebf38ba9b427622 [file] [log] [blame]
// <copyright file="SendingRemoteHttpRequestEventArgs.cs" company="Selenium Committers">
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
// </copyright>
using System;
using System.Collections.Generic;
namespace OpenQA.Selenium.Remote;
/// <summary>
/// Provides data for the SendingRemoteHttpRequest event of a <see cref="HttpCommandExecutor"/> object.
/// </summary>
public class SendingRemoteHttpRequestEventArgs : EventArgs
{
private readonly Dictionary<string, string> headers = new Dictionary<string, string>();
/// <summary>
/// Initializes a new instance of the <see cref="SendingRemoteHttpRequestEventArgs"/> class.
/// </summary>
/// <param name="method">The HTTP method of the request being sent.</param>
/// <param name="fullUrl">The full URL of the request being sent.</param>
/// <param name="requestBody">The body of the request.</param>
/// <exception cref="ArgumentNullException">If <paramref name="method"/>, <paramref name="fullUrl"/> are null.</exception>
public SendingRemoteHttpRequestEventArgs(string method, string fullUrl, string? requestBody)
{
this.Method = method ?? throw new ArgumentNullException(nameof(method));
this.FullUrl = fullUrl ?? throw new ArgumentNullException(nameof(fullUrl));
this.RequestBody = requestBody;
}
/// <summary>
/// Gets the HTTP method for the HTTP request.
/// </summary>
public string Method { get; }
/// <summary>
/// Gets the full URL of the HTTP request.
/// </summary>
public string FullUrl { get; }
/// <summary>
/// Gets the body of the HTTP request as a string.
/// </summary>
public string? RequestBody { get; }
/// <summary>
/// Gets a read-only dictionary of the headers of the HTTP request.
/// Does not include default headers of the web client making the request.
/// </summary>
public IReadOnlyDictionary<string, string> Headers => this.headers;
/// <summary>
/// Adds a header to the HTTP request.
/// </summary>
/// <param name="headerName">The name of the header to add.</param>
/// <param name="headerValue">The value of the header to add.</param>
/// <remarks>
/// Adding headers here will attempt to add them to the headers for the
/// HTTP request being sent; however, be aware they may be overwritten by
/// the client raising the event.
/// </remarks>
/// <exception cref="ArgumentException">If <paramref name="headerName"/> is <see langword="null"/> or <see cref="string.Empty"/>.</exception>
/// <exception cref="ArgumentNullException">If <paramref name="headerValue"/> is <see langword="null"/>.</exception>
public void AddHeader(string headerName, string headerValue)
{
if (string.IsNullOrEmpty(headerName))
{
throw new ArgumentException("Header name may not be null or the empty string.", nameof(headerName));
}
if (headerValue == null)
{
throw new ArgumentNullException(nameof(headerValue), "Header value may not be null.");
}
this.headers[headerName] = headerValue;
}
}