xpcom/tests/TestStorageStream.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 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 #include <stdlib.h>
     6 #include "nsIStorageStream.h"
     7 #include "nsIInputStream.h"
     8 #include "nsIOutputStream.h"
     9 #include "nsCOMPtr.h"
    11 int main()
    12 {
    13   char kData[4096];
    14   memset(kData, 0, sizeof(kData));
    16   nsresult rv;
    17   nsCOMPtr<nsIStorageStream> stor;
    19   rv = NS_NewStorageStream(4096, UINT32_MAX, getter_AddRefs(stor));
    20   if (NS_FAILED(rv))
    21     return -1;
    23   nsCOMPtr<nsIOutputStream> out;
    24   rv = stor->GetOutputStream(0, getter_AddRefs(out));
    25   if (NS_FAILED(rv))
    26     return -1;
    28   uint32_t n;
    30   rv = out->Write(kData, sizeof(kData), &n);
    31   if (NS_FAILED(rv))
    32     return -1;
    34   rv = out->Write(kData, sizeof(kData), &n);
    35   if (NS_FAILED(rv))
    36     return -1;
    38   rv = out->Close();
    39   if (NS_FAILED(rv))
    40     return -1;
    42   out = nullptr;
    44   nsCOMPtr<nsIInputStream> in;
    45   rv = stor->NewInputStream(0, getter_AddRefs(in));
    46   if (NS_FAILED(rv))
    47     return -1;
    49   char buf[4096];
    51   // consume contents of input stream
    52   do {
    53     rv = in->Read(buf, sizeof(buf), &n);
    54     if (NS_FAILED(rv))
    55       return -1;
    56   } while (n != 0);
    58   rv = in->Close();
    59   if (NS_FAILED(rv))
    60     return -1;
    61   in = nullptr;
    63   // now, write 3 more full 4k segments + 11 bytes, starting at 8192
    64   // total written equals 20491 bytes
    66   rv = stor->GetOutputStream(8192, getter_AddRefs(out));
    67   if (NS_FAILED(rv))
    68     return -1;
    70   rv = out->Write(kData, sizeof(kData), &n);
    71   if (NS_FAILED(rv))
    72     return -1;
    74   rv = out->Write(kData, sizeof(kData), &n);
    75   if (NS_FAILED(rv))
    76     return -1;
    78   rv = out->Write(kData, sizeof(kData), &n);
    79   if (NS_FAILED(rv))
    80     return -1;
    82   rv = out->Write(kData, 11, &n);
    83   if (NS_FAILED(rv))
    84     return -1;
    86   rv = out->Close();
    87   if (NS_FAILED(rv))
    88     return -1;
    90   out = nullptr;
    92   // now, read all
    93   rv = stor->NewInputStream(0, getter_AddRefs(in));
    94   if (NS_FAILED(rv))
    95     return -1;
    97   // consume contents of input stream
    98   do {
    99     rv = in->Read(buf, sizeof(buf), &n);
   100     if (NS_FAILED(rv))
   101       return -1;
   102   } while (n != 0);
   104   rv = in->Close();
   105   if (NS_FAILED(rv))
   106     return -1;
   107   in = nullptr;
   109   return 0;
   110 }

mercurial