Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "nsSupportsArrayEnumerator.h"
7 #include "nsISupportsArray.h"
9 nsSupportsArrayEnumerator::nsSupportsArrayEnumerator(nsISupportsArray* array)
10 : mArray(array), mCursor(0)
11 {
12 NS_ASSERTION(array, "null array");
13 NS_ADDREF(mArray);
14 }
16 nsSupportsArrayEnumerator::~nsSupportsArrayEnumerator()
17 {
18 NS_RELEASE(mArray);
19 }
21 NS_IMPL_ISUPPORTS(nsSupportsArrayEnumerator, nsIBidirectionalEnumerator, nsIEnumerator)
23 NS_IMETHODIMP
24 nsSupportsArrayEnumerator::First()
25 {
26 mCursor = 0;
27 uint32_t cnt;
28 nsresult rv = mArray->Count(&cnt);
29 if (NS_FAILED(rv)) return rv;
30 int32_t end = (int32_t)cnt;
31 if (mCursor < end)
32 return NS_OK;
33 else
34 return NS_ERROR_FAILURE;
35 }
37 NS_IMETHODIMP
38 nsSupportsArrayEnumerator::Next()
39 {
40 uint32_t cnt;
41 nsresult rv = mArray->Count(&cnt);
42 if (NS_FAILED(rv)) return rv;
43 int32_t end = (int32_t)cnt;
44 if (mCursor < end) // don't count upward forever
45 mCursor++;
46 if (mCursor < end)
47 return NS_OK;
48 else
49 return NS_ERROR_FAILURE;
50 }
52 NS_IMETHODIMP
53 nsSupportsArrayEnumerator::CurrentItem(nsISupports **aItem)
54 {
55 NS_ASSERTION(aItem, "null out parameter");
56 uint32_t cnt;
57 nsresult rv = mArray->Count(&cnt);
58 if (NS_FAILED(rv)) return rv;
59 if (mCursor >= 0 && mCursor < (int32_t)cnt) {
60 return mArray->GetElementAt(mCursor, aItem);
61 }
62 return NS_ERROR_FAILURE;
63 }
65 NS_IMETHODIMP
66 nsSupportsArrayEnumerator::IsDone()
67 {
68 uint32_t cnt;
69 nsresult rv = mArray->Count(&cnt);
70 if (NS_FAILED(rv)) return rv;
71 // XXX This is completely incompatible with the meaning of nsresult.
72 // NS_ENUMERATOR_FALSE is defined to be 1. (bug 778111)
73 return (mCursor >= 0 && mCursor < (int32_t)cnt)
74 ? (nsresult)NS_ENUMERATOR_FALSE : NS_OK;
75 }
77 ////////////////////////////////////////////////////////////////////////////////
79 NS_IMETHODIMP
80 nsSupportsArrayEnumerator::Last()
81 {
82 uint32_t cnt;
83 nsresult rv = mArray->Count(&cnt);
84 if (NS_FAILED(rv)) return rv;
85 mCursor = cnt - 1;
86 return NS_OK;
87 }
89 NS_IMETHODIMP
90 nsSupportsArrayEnumerator::Prev()
91 {
92 if (mCursor >= 0)
93 --mCursor;
94 if (mCursor >= 0)
95 return NS_OK;
96 else
97 return NS_ERROR_FAILURE;
98 }