netwerk/test/TestIncrementalDownload.cpp

Wed, 31 Dec 2014 06:55:46 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:46 +0100
changeset 1
ca08bd8f51b2
permissions
-rw-r--r--

Added tag TORBROWSER_REPLICA for changeset 6474c204b198

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim:set ts=2 sw=2 sts=2 cin et: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this
     5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 #include <stdlib.h>
     8 #include "TestCommon.h"
     9 #include "nsNetUtil.h"
    10 #include "nsIIncrementalDownload.h"
    11 #include "nsIRequestObserver.h"
    12 #include "nsIProgressEventSink.h"
    13 #include "nsThreadUtils.h"
    14 #include "nsAutoPtr.h"
    15 #include "prprf.h"
    16 #include "prenv.h"
    17 #include "mozilla/Attributes.h"
    19 //-----------------------------------------------------------------------------
    21 class FetchObserver MOZ_FINAL : public nsIRequestObserver
    22                               , public nsIProgressEventSink
    23 {
    24 public:
    25   NS_DECL_ISUPPORTS
    26   NS_DECL_NSIREQUESTOBSERVER
    27   NS_DECL_NSIPROGRESSEVENTSINK
    28 };
    30 NS_IMPL_ISUPPORTS(FetchObserver, nsIRequestObserver,
    31                   nsIProgressEventSink)
    33 NS_IMETHODIMP
    34 FetchObserver::OnStartRequest(nsIRequest *request, nsISupports *context)
    35 {
    36   printf("FetchObserver::OnStartRequest\n");
    37   return NS_OK;
    38 }
    40 NS_IMETHODIMP
    41 FetchObserver::OnProgress(nsIRequest *request, nsISupports *context,
    42                           uint64_t progress, uint64_t progressMax)
    43 {
    44   printf("FetchObserver::OnProgress [%lu/%lu]\n",
    45          (unsigned long)progress, (unsigned long)progressMax);
    46   return NS_OK;
    47 }
    49 NS_IMETHODIMP
    50 FetchObserver::OnStatus(nsIRequest *request, nsISupports *context,
    51                         nsresult status, const char16_t *statusText)
    52 {
    53   return NS_OK;
    54 }
    56 NS_IMETHODIMP
    57 FetchObserver::OnStopRequest(nsIRequest *request, nsISupports *context,
    58                              nsresult status)
    59 {
    60   printf("FetchObserver::OnStopRequest [status=%x]\n",
    61          static_cast<uint32_t>(status));
    63   QuitPumpingEvents();
    64   return NS_OK;
    65 }
    67 //-----------------------------------------------------------------------------
    69 static nsresult
    70 DoIncrementalFetch(const char *uriSpec, const char *resultPath, int32_t chunkSize,
    71                    int32_t interval)
    72 {
    73   nsCOMPtr<nsIFile> resultFile;
    74   nsresult rv = NS_NewNativeLocalFile(nsDependentCString(resultPath),
    75                                       false, getter_AddRefs(resultFile));
    76   if (NS_FAILED(rv))
    77     return rv;
    79   nsCOMPtr<nsIURI> uri;
    80   rv = NS_NewURI(getter_AddRefs(uri), uriSpec);
    81   if (NS_FAILED(rv))
    82     return rv;
    84   nsCOMPtr<nsIRequestObserver> observer = new FetchObserver();
    85   if (!observer)
    86     return NS_ERROR_OUT_OF_MEMORY;
    88   nsCOMPtr<nsIIncrementalDownload> download =
    89       do_CreateInstance(NS_INCREMENTALDOWNLOAD_CONTRACTID, &rv);
    90   if (NS_FAILED(rv))
    91     return rv;
    93   rv = download->Init(uri, resultFile, chunkSize, interval);
    94   if (NS_FAILED(rv))
    95     return rv;
    97   rv = download->Start(observer, nullptr);
    98   if (NS_FAILED(rv))
    99     return rv;
   101   PumpEvents();
   102   return NS_OK;
   103 }
   105 int
   106 main(int argc, char **argv)
   107 {
   108   if (PR_GetEnv("MOZ_BREAK_ON_MAIN"))
   109     NS_BREAK();
   111   if (argc < 5) {
   112     fprintf(stderr, "USAGE: TestIncrementalDownload <url> <file> <chunksize> <interval-in-seconds>\n");
   113     return -1;
   114   }
   116   nsresult rv = NS_InitXPCOM2(nullptr, nullptr, nullptr);
   117   if (NS_FAILED(rv))
   118     return -1;
   120   int32_t chunkSize = atoi(argv[3]);
   121   int32_t interval = atoi(argv[4]);
   123   rv = DoIncrementalFetch(argv[1], argv[2], chunkSize, interval);
   124   if (NS_FAILED(rv))
   125     fprintf(stderr, "ERROR: DoIncrementalFetch failed [%x]\n",
   126             static_cast<uint32_t>(rv));
   128   NS_ShutdownXPCOM(nullptr);
   129   return 0;
   130 }

mercurial