|
1 #include <stdio.h> |
|
2 #include "TestCommon.h" |
|
3 #include "nsNetUtil.h" |
|
4 #include "nsThreadUtils.h" |
|
5 #include "prlog.h" |
|
6 #include "mozilla/Attributes.h" |
|
7 |
|
8 #if defined(PR_LOGGING) |
|
9 // |
|
10 // set NSPR_LOG_MODULES=Test:5 |
|
11 // |
|
12 static PRLogModuleInfo *gTestLog = nullptr; |
|
13 #endif |
|
14 #define LOG(args) PR_LOG(gTestLog, PR_LOG_DEBUG, args) |
|
15 |
|
16 class MyStreamLoaderObserver MOZ_FINAL : public nsIStreamLoaderObserver |
|
17 { |
|
18 public: |
|
19 NS_DECL_ISUPPORTS |
|
20 NS_DECL_NSISTREAMLOADEROBSERVER |
|
21 }; |
|
22 |
|
23 NS_IMPL_ISUPPORTS(MyStreamLoaderObserver, nsIStreamLoaderObserver) |
|
24 |
|
25 NS_IMETHODIMP |
|
26 MyStreamLoaderObserver::OnStreamComplete(nsIStreamLoader *loader, |
|
27 nsISupports *ctxt, |
|
28 nsresult status, |
|
29 uint32_t resultLen, |
|
30 const uint8_t *result) |
|
31 { |
|
32 LOG(("OnStreamComplete [status=%x resultLen=%u]\n", status, resultLen)); |
|
33 |
|
34 nsCOMPtr<nsIRequest> request; |
|
35 loader->GetRequest(getter_AddRefs(request)); |
|
36 LOG((" request=%p\n", request.get())); |
|
37 |
|
38 QuitPumpingEvents(); |
|
39 return NS_OK; |
|
40 } |
|
41 |
|
42 int main(int argc, char **argv) |
|
43 { |
|
44 if (test_common_init(&argc, &argv) != 0) |
|
45 return -1; |
|
46 |
|
47 if (argc < 2) { |
|
48 printf("usage: %s <url>\n", argv[0]); |
|
49 return -1; |
|
50 } |
|
51 |
|
52 #if defined(PR_LOGGING) |
|
53 gTestLog = PR_NewLogModule("Test"); |
|
54 #endif |
|
55 |
|
56 nsresult rv = NS_InitXPCOM2(nullptr, nullptr, nullptr); |
|
57 if (NS_FAILED(rv)) |
|
58 return -1; |
|
59 |
|
60 { |
|
61 nsCOMPtr<nsIURI> uri; |
|
62 rv = NS_NewURI(getter_AddRefs(uri), nsDependentCString(argv[1])); |
|
63 if (NS_FAILED(rv)) |
|
64 return -1; |
|
65 |
|
66 nsCOMPtr<nsIChannel> chan; |
|
67 rv = NS_NewChannel(getter_AddRefs(chan), uri); |
|
68 if (NS_FAILED(rv)) |
|
69 return -1; |
|
70 |
|
71 nsCOMPtr<nsIStreamLoaderObserver> observer = new MyStreamLoaderObserver(); |
|
72 if (!observer) |
|
73 return -1; |
|
74 |
|
75 nsCOMPtr<nsIStreamLoader> loader; |
|
76 rv = NS_NewStreamLoader(getter_AddRefs(loader), observer); |
|
77 if (NS_FAILED(rv)) |
|
78 return -1; |
|
79 |
|
80 rv = chan->AsyncOpen(loader, nullptr); |
|
81 if (NS_FAILED(rv)) |
|
82 return -1; |
|
83 |
|
84 PumpEvents(); |
|
85 } // this scopes the nsCOMPtrs |
|
86 // no nsCOMPtrs are allowed to be alive when you call NS_ShutdownXPCOM |
|
87 NS_ShutdownXPCOM(nullptr); |
|
88 return 0; |
|
89 } |