xpcom/ds/nsSupportsArrayEnumerator.cpp

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

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 }

mercurial