summaryrefslogtreecommitdiffstats
path: root/netwerk/cookie/nsICookie.idl
blob: 6d7fedfd210d6b2b81785c5c9e2ff8ce094491bb (plain)
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/* -*- 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/. */

#include "nsISupports.idl"

/**
 * Main cookie object interface.
 */

%{C++
namespace mozilla {
  class OriginAttributes;

  namespace net {
    class Cookie;
  }
}
%}

[ref] native const_OriginAttributes(const mozilla::OriginAttributes);
[ref] native const_Cookie(const mozilla::net::Cookie);

typedef long nsCookieStatus;
typedef long nsCookiePolicy;

[builtinclass, scriptable, uuid(adf0db5e-211e-45a3-be14-4486ac430a58)]
interface nsICookie : nsISupports {
    const uint32_t SAMESITE_NONE   = 0;
    const uint32_t SAMESITE_LAX    = 1;
    const uint32_t SAMESITE_STRICT = 2;

    /**
     * the name of the cookie
     */
    readonly attribute ACString name;

    /**
     * the cookie value
     */
    readonly attribute AUTF8String value;

    /**
     * true if the cookie is a domain cookie, false otherwise
     */
    readonly attribute boolean isDomain;

    /**
     * the host (possibly fully qualified) of the cookie
     */
    readonly attribute AUTF8String host;

    /**
     * the host (possibly fully qualified) of the cookie,
     * without a leading dot to represent if it is a
     * domain cookie.
     */
    readonly attribute AUTF8String rawHost;

    /**
     * the path pertaining to the cookie
     */
    readonly attribute AUTF8String path;

    /**
     * true if the cookie was transmitted over ssl, false otherwise
     */
    readonly attribute boolean isSecure;

    /**
     * @DEPRECATED use nsICookie.expiry and nsICookie.isSession instead.
     *
     * expiration time in seconds since midnight (00:00:00), January 1, 1970 UTC.
     * expires = 0 represents a session cookie.
     * expires = 1 represents an expiration time earlier than Jan 1, 1970.
     */
    readonly attribute uint64_t expires;

    /**
     * the actual expiry time of the cookie, in seconds
     * since midnight (00:00:00), January 1, 1970 UTC.
     *
     * this is distinct from nsICookie::expires, which
     * has different and obsolete semantics.
     */
    readonly attribute int64_t expiry;

    /**
     * The origin attributes for this cookie
     */
    [implicit_jscontext]
    readonly attribute jsval originAttributes;

    /**
     * Native getter for origin attributes
     */
    [noscript, notxpcom, nostdcall, binaryname(OriginAttributesNative)]
    const_OriginAttributes OriginAttributesNative();

    [noscript, notxpcom, nostdcall, binaryname(AsCookie)]
    const_Cookie AsCookie();

    /**
     * true if the cookie is a session cookie.
     * note that expiry time will also be honored
     * for session cookies (see below); thus, whichever is
     * the more restrictive of the two will take effect.
     */
    readonly attribute boolean isSession;

    /**
     * true if the cookie is an http only cookie
     */
    readonly attribute boolean isHttpOnly;

    /**
     * the creation time of the cookie, in microseconds
     * since midnight (00:00:00), January 1, 1970 UTC.
     */
    readonly attribute int64_t creationTime;

    /**
     * the last time the cookie was accessed (i.e. created,
     * modified, or read by the server), in microseconds
     * since midnight (00:00:00), January 1, 1970 UTC.
     *
     * note that this time may be approximate.
     */
    readonly attribute int64_t lastAccessed;

    /**
     * the SameSite attribute; this controls the cookie behavior for cross-site
     * requests as per
     * https://tools.ietf.org/html/draft-west-first-party-cookies-07
     *
     * This should be one of:
     * - SAMESITE_NONE - the SameSite attribute is not present
     * - SAMESITE_LAX - the SameSite attribute is present, but not strict
     * - SAMESITE_STRICT - the SameSite attribute is present and strict
     */
    readonly attribute int32_t sameSite;

    /**
     * The list of possible schemes of cookies. It's a bitmap because a cookie
     * can be set on HTTP and HTTPS. At the moment, we treat it as the same
     * cookie.
     */
    cenum schemeType : 8 {
      SCHEME_UNSET = 0x00,
      SCHEME_HTTP = 0x01,
      SCHEME_HTTPS = 0x02,
      SCHEME_FILE = 0x04,
    };

    /**
     * Bitmap of schemes.
     */
    readonly attribute nsICookie_schemeType schemeMap;

    /**
     * true if the cookie's OriginAttributes PartitionKey is NOT empty
     */
    readonly attribute boolean isPartitioned;
};