Bumping manifests a=b2g-bump
[gecko.git] / netwerk / test / TestIncrementalDownload.cpp
blob94079f7b9301f3c849eaecd180c1349ab7bba893
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
24 ~FetchObserver() {}
25 public:
26 NS_DECL_ISUPPORTS
27 NS_DECL_NSIREQUESTOBSERVER
28 NS_DECL_NSIPROGRESSEVENTSINK
31 NS_IMPL_ISUPPORTS(FetchObserver, nsIRequestObserver,
32 nsIProgressEventSink)
34 NS_IMETHODIMP
35 FetchObserver::OnStartRequest(nsIRequest *request, nsISupports *context)
37 printf("FetchObserver::OnStartRequest\n");
38 return NS_OK;
41 NS_IMETHODIMP
42 FetchObserver::OnProgress(nsIRequest *request, nsISupports *context,
43 uint64_t progress, uint64_t progressMax)
45 printf("FetchObserver::OnProgress [%lu/%lu]\n",
46 (unsigned long)progress, (unsigned long)progressMax);
47 return NS_OK;
50 NS_IMETHODIMP
51 FetchObserver::OnStatus(nsIRequest *request, nsISupports *context,
52 nsresult status, const char16_t *statusText)
54 return NS_OK;
57 NS_IMETHODIMP
58 FetchObserver::OnStopRequest(nsIRequest *request, nsISupports *context,
59 nsresult status)
61 printf("FetchObserver::OnStopRequest [status=%x]\n",
62 static_cast<uint32_t>(status));
64 QuitPumpingEvents();
65 return NS_OK;
68 //-----------------------------------------------------------------------------
70 static nsresult
71 DoIncrementalFetch(const char *uriSpec, const char *resultPath, int32_t chunkSize,
72 int32_t interval)
74 nsCOMPtr<nsIFile> resultFile;
75 nsresult rv = NS_NewNativeLocalFile(nsDependentCString(resultPath),
76 false, getter_AddRefs(resultFile));
77 if (NS_FAILED(rv))
78 return rv;
80 nsCOMPtr<nsIURI> uri;
81 rv = NS_NewURI(getter_AddRefs(uri), uriSpec);
82 if (NS_FAILED(rv))
83 return rv;
85 nsCOMPtr<nsIRequestObserver> observer = new FetchObserver();
86 if (!observer)
87 return NS_ERROR_OUT_OF_MEMORY;
89 nsCOMPtr<nsIIncrementalDownload> download =
90 do_CreateInstance(NS_INCREMENTALDOWNLOAD_CONTRACTID, &rv);
91 if (NS_FAILED(rv))
92 return rv;
94 rv = download->Init(uri, resultFile, chunkSize, interval);
95 if (NS_FAILED(rv))
96 return rv;
98 rv = download->Start(observer, nullptr);
99 if (NS_FAILED(rv))
100 return rv;
102 PumpEvents();
103 return NS_OK;
107 main(int argc, char **argv)
109 if (PR_GetEnv("MOZ_BREAK_ON_MAIN"))
110 NS_BREAK();
112 if (argc < 5) {
113 fprintf(stderr, "USAGE: TestIncrementalDownload <url> <file> <chunksize> <interval-in-seconds>\n");
114 return -1;
117 nsresult rv = NS_InitXPCOM2(nullptr, nullptr, nullptr);
118 if (NS_FAILED(rv))
119 return -1;
121 int32_t chunkSize = atoi(argv[3]);
122 int32_t interval = atoi(argv[4]);
124 rv = DoIncrementalFetch(argv[1], argv[2], chunkSize, interval);
125 if (NS_FAILED(rv))
126 fprintf(stderr, "ERROR: DoIncrementalFetch failed [%x]\n",
127 static_cast<uint32_t>(rv));
129 NS_ShutdownXPCOM(nullptr);
130 return 0;