This file is indexed.

/usr/include/thunderbird/nsHttpRequestHead.h is in thunderbird-dev 1:38.6.0+build1-0ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef nsHttpRequestHead_h__
#define nsHttpRequestHead_h__

#include "nsHttp.h"
#include "nsHttpHeaderArray.h"
#include "nsString.h"

namespace mozilla { namespace net {

//-----------------------------------------------------------------------------
// nsHttpRequestHead represents the request line and headers from an HTTP
// request.
//-----------------------------------------------------------------------------

class nsHttpRequestHead
{
public:
    nsHttpRequestHead();
    ~nsHttpRequestHead();

    void SetMethod(const nsACString &method);
    void SetVersion(nsHttpVersion version) { mVersion = version; }
    void SetRequestURI(const nsCSubstring &s) { mRequestURI = s; }
    void SetPath(const nsCSubstring &s) { mPath = s; }

    const nsHttpHeaderArray &Headers() const { return mHeaders; }
    nsHttpHeaderArray & Headers()          { return mHeaders; }
    const nsCString &Method()        const { return mMethod; }
    nsHttpVersion       Version()    const { return mVersion; }
    const nsCSubstring &RequestURI() const { return mRequestURI; }
    const nsCSubstring &Path()       const { return mPath.IsEmpty() ? mRequestURI : mPath; }

    void SetHTTPS(bool val) { mHTTPS = val; }
    bool IsHTTPS() const { return mHTTPS; }

    void SetOrigin(const nsACString &scheme, const nsACString &host, int32_t port);
    const nsCString &Origin() const { return mOrigin; }

    const char *PeekHeader(nsHttpAtom h) const
    {
        return mHeaders.PeekHeader(h);
    }
    nsresult SetHeader(nsHttpAtom h, const nsACString &v, bool m=false) { return mHeaders.SetHeader(h, v, m); }
    nsresult GetHeader(nsHttpAtom h, nsACString &v) const
    {
        return mHeaders.GetHeader(h, v);
    }
    void ClearHeader(nsHttpAtom h)                                           { mHeaders.ClearHeader(h); }
    void ClearHeaders()                                                      { mHeaders.Clear(); }

    const char *FindHeaderValue(nsHttpAtom h, const char *v) const
    {
        return mHeaders.FindHeaderValue(h, v);
    }
    bool HasHeaderValue(nsHttpAtom h, const char *v) const
    {
      return mHeaders.HasHeaderValue(h, v);
    }

    void Flatten(nsACString &, bool pruneProxyHeaders = false);

    // Don't allow duplicate values
    nsresult SetHeaderOnce(nsHttpAtom h, const char *v, bool merge = false)
    {
        if (!merge || !HasHeaderValue(h, v))
            return mHeaders.SetHeader(h, nsDependentCString(v), merge);
        return NS_OK;
    }

    bool IsSafeMethod() const;

    enum ParsedMethodType
    {
        kMethod_Custom,
        kMethod_Get,
        kMethod_Post,
        kMethod_Options,
        kMethod_Connect,
        kMethod_Head,
        kMethod_Put,
        kMethod_Trace
    };

    ParsedMethodType ParsedMethod() const { return mParsedMethod; }
    bool EqualsMethod(ParsedMethodType aType) const { return mParsedMethod == aType; }
    bool IsGet() const { return EqualsMethod(kMethod_Get); }
    bool IsPost() const { return EqualsMethod(kMethod_Post); }
    bool IsOptions() const { return EqualsMethod(kMethod_Options); }
    bool IsConnect() const { return EqualsMethod(kMethod_Connect); }
    bool IsHead() const { return EqualsMethod(kMethod_Head); }
    bool IsPut() const { return EqualsMethod(kMethod_Put); }
    bool IsTrace() const { return EqualsMethod(kMethod_Trace); }
    void ParseHeaderSet(char *buffer) { mHeaders.ParseHeaderSet(buffer); }

private:
    // All members must be copy-constructable and assignable
    nsHttpHeaderArray mHeaders;
    nsCString         mMethod;
    nsHttpVersion     mVersion;

    // mRequestURI and mPath are strings instead of an nsIURI
    // because this is used off the main thread
    nsCString         mRequestURI;
    nsCString         mPath;

    nsCString         mOrigin;
    ParsedMethodType  mParsedMethod;
    bool              mHTTPS;
};

}} // namespace mozilla::net

#endif // nsHttpRequestHead_h__