1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
15 * The Original Code is mozilla.org code.
17 * The Initial Developer of the Original Code is
19 * Portions created by the Initial Developer are Copyright (C) 2003
20 * the Initial Developer. All Rights Reserved.
23 * Daniel Witte (dwitte@stanford.edu)
25 * Alternatively, the contents of this file may be used under the terms of
26 * either the GNU General Public License Version 2 or later (the "GPL"), or
27 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28 * in which case the provisions of the GPL or the LGPL are applicable instead
29 * of those above. If you wish to allow use of your version of this file only
30 * under the terms of either the GPL or the LGPL, and not to allow others to
31 * use your version of this file under the terms of the MPL, indicate your
32 * decision by deleting the provisions above and replace them with the notice
33 * and other provisions required by the GPL or the LGPL. If you do not delete
34 * the provisions above, a recipient may use your version of this file under
35 * the terms of any one of the MPL, the GPL or the LGPL.
37 * ***** END LICENSE BLOCK ***** */
42 #include "nsICookie.h"
43 #include "nsICookie2.h"
47 * The nsCookie class is the main cookie storage medium for use within cookie
48 * code. It implements nsICookie2, which extends nsICookie, a frozen interface
49 * for xpcom access of cookie objects.
52 /******************************************************************************
55 ******************************************************************************/
57 class nsCookie
: public nsICookie2
66 // for internal use only. see nsCookie::Create().
67 nsCookie(const char *aName
,
73 PRInt64 aLastAccessed
,
85 , mLastAccessed(aLastAccessed
)
86 , mCreationID(aCreationID
)
87 , mIsSession(aIsSession
!= PR_FALSE
)
88 , mIsSecure(aIsSecure
!= PR_FALSE
)
89 , mIsHttpOnly(aIsHttpOnly
!= PR_FALSE
)
94 // public helper to create an nsCookie object. use |operator delete|
95 // to destroy an object created by this method.
96 static nsCookie
* Create(const nsACString
&aName
,
97 const nsACString
&aValue
,
98 const nsACString
&aHost
,
99 const nsACString
&aPath
,
101 PRInt64 aLastAccessed
,
107 virtual ~nsCookie() {}
109 // fast (inline, non-xpcom) getters
110 inline const nsDependentCString
Name() const { return nsDependentCString(mName
, mValue
- 1); }
111 inline const nsDependentCString
Value() const { return nsDependentCString(mValue
, mHost
- 1); }
112 inline const nsDependentCString
Host() const { return nsDependentCString(mHost
, mPath
- 1); }
113 inline const nsDependentCString
RawHost() const { return nsDependentCString(IsDomain() ? mHost
+ 1 : mHost
, mPath
- 1); }
114 inline const nsDependentCString
Path() const { return nsDependentCString(mPath
, mEnd
); }
115 inline PRInt64
Expiry() const { return mExpiry
; } // in seconds
116 inline PRInt64
LastAccessed() const { return mLastAccessed
; } // in microseconds
117 inline PRInt64
CreationID() const { return mCreationID
; } // in microseconds
118 inline PRBool
IsSession() const { return mIsSession
; }
119 inline PRBool
IsDomain() const { return *mHost
== '.'; }
120 inline PRBool
IsSecure() const { return mIsSecure
; }
121 inline PRBool
IsHttpOnly() const { return mIsHttpOnly
; }
124 inline void SetExpiry(PRInt64 aExpiry
) { mExpiry
= aExpiry
; }
125 inline void SetLastAccessed(PRInt64 aTime
) { mLastAccessed
= aTime
; }
126 inline void SetIsSession(PRBool aIsSession
) { mIsSession
= (PRPackedBool
) aIsSession
; }
127 // set the creation id manually, overriding the monotonicity checks in Create().
129 inline void SetCreationID(PRInt64 aID
) { mCreationID
= aID
; }
131 // linked list management helper
132 inline nsCookie
*& Next() { return mNext
; }
136 // we use char* ptrs to store the strings in a contiguous block,
137 // so we save on the overhead of using nsCStrings. However, we
138 // store a terminating null for each string, so we can hand them
139 // out as nsAFlatCStrings.
148 PRInt64 mLastAccessed
;
149 // creation id is unique for each cookie and approximately represents the cookie
150 // creation time, in microseconds.
152 PRPackedBool mIsSession
;
153 PRPackedBool mIsSecure
;
154 PRPackedBool mIsHttpOnly
;
157 #endif // nsCookie_h__