2003-11-10 02:44:02 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2012-05-21 15:12:37 +04:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
2003-11-10 02:44:02 +03:00
|
|
|
|
2004-10-22 00:57:17 +04:00
|
|
|
#include "TestCommon.h"
|
2003-11-10 03:01:17 +03:00
|
|
|
#include "nsCOMPtr.h"
|
2005-11-08 22:23:00 +03:00
|
|
|
#include "nsStringAPI.h"
|
2003-11-10 03:01:17 +03:00
|
|
|
#include "nsIURI.h"
|
|
|
|
#include "nsIChannel.h"
|
|
|
|
#include "nsIHttpChannel.h"
|
|
|
|
#include "nsIInputStream.h"
|
|
|
|
#include "nsNetUtil.h"
|
2015-07-07 05:17:00 +03:00
|
|
|
#include "nsServiceManagerUtils.h"
|
2012-09-21 14:28:56 +04:00
|
|
|
#include "mozilla/unused.h"
|
2014-09-21 20:40:12 +04:00
|
|
|
#include "nsIScriptSecurityManager.h"
|
2003-11-10 02:44:02 +03:00
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
2012-09-21 14:28:56 +04:00
|
|
|
using namespace mozilla;
|
|
|
|
|
2003-11-10 02:44:02 +03:00
|
|
|
/*
|
|
|
|
* Test synchronous Open.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define RETURN_IF_FAILED(rv, what) \
|
|
|
|
PR_BEGIN_MACRO \
|
|
|
|
if (NS_FAILED(rv)) { \
|
2012-10-16 08:26:51 +04:00
|
|
|
printf(what ": failed - %08x\n", static_cast<uint32_t>(rv)); \
|
2003-11-10 02:44:02 +03:00
|
|
|
return -1; \
|
|
|
|
} \
|
|
|
|
PR_END_MACRO
|
|
|
|
|
|
|
|
int
|
|
|
|
main(int argc, char **argv)
|
|
|
|
{
|
2004-10-22 00:57:17 +04:00
|
|
|
if (test_common_init(&argc, &argv) != 0)
|
|
|
|
return -1;
|
|
|
|
|
2012-07-30 18:20:58 +04:00
|
|
|
nsresult rv = NS_InitXPCOM2(nullptr, nullptr, nullptr);
|
2012-08-07 21:17:27 +04:00
|
|
|
if (NS_FAILED(rv)) return -1;
|
2006-02-14 18:37:10 +03:00
|
|
|
|
2003-11-10 02:44:02 +03:00
|
|
|
char buf[256];
|
|
|
|
|
|
|
|
if (argc != 3) {
|
|
|
|
printf("Usage: TestOpen url filename\nLoads a URL using ::Open, writing it to a file\n");
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsCOMPtr<nsIURI> uri;
|
|
|
|
nsCOMPtr<nsIInputStream> stream;
|
|
|
|
|
|
|
|
rv = NS_NewURI(getter_AddRefs(uri), argv[1]);
|
|
|
|
RETURN_IF_FAILED(rv, "NS_NewURI");
|
|
|
|
|
2014-09-21 20:40:12 +04:00
|
|
|
nsCOMPtr<nsIScriptSecurityManager> secman =
|
|
|
|
do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
|
|
|
|
RETURN_IF_FAILED(rv, "Couldn't get script security manager!");
|
|
|
|
nsCOMPtr<nsIPrincipal> systemPrincipal;
|
|
|
|
rv = secman->GetSystemPrincipal(getter_AddRefs(systemPrincipal));
|
|
|
|
RETURN_IF_FAILED(rv, "Couldn't get system principal!");
|
|
|
|
|
2015-01-12 07:26:40 +03:00
|
|
|
nsCOMPtr<nsIChannel> channel;
|
|
|
|
rv = NS_NewChannel(getter_AddRefs(channel),
|
|
|
|
uri,
|
|
|
|
systemPrincipal,
|
2015-09-16 06:12:52 +03:00
|
|
|
nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL,
|
2015-01-12 07:26:40 +03:00
|
|
|
nsIContentPolicy::TYPE_OTHER);
|
|
|
|
RETURN_IF_FAILED(rv, "NS_NewChannel");
|
|
|
|
|
2015-09-16 06:12:52 +03:00
|
|
|
rv = channel->Open2(getter_AddRefs(stream));
|
|
|
|
RETURN_IF_FAILED(rv, "channel->Open2()");
|
2003-11-10 02:44:02 +03:00
|
|
|
|
|
|
|
FILE* outfile = fopen(argv[2], "wb");
|
|
|
|
if (!outfile) {
|
|
|
|
printf("error opening %s\n", argv[2]);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2012-08-22 19:56:38 +04:00
|
|
|
uint32_t read;
|
2003-11-10 02:44:02 +03:00
|
|
|
while (NS_SUCCEEDED(stream->Read(buf, sizeof(buf), &read)) && read) {
|
2012-09-21 14:28:56 +04:00
|
|
|
unused << fwrite(buf, 1, read, outfile);
|
2003-11-10 02:44:02 +03:00
|
|
|
}
|
|
|
|
printf("Done\n");
|
|
|
|
|
|
|
|
fclose(outfile);
|
|
|
|
|
2012-07-30 18:20:58 +04:00
|
|
|
NS_ShutdownXPCOM(nullptr);
|
2003-11-10 02:44:02 +03:00
|
|
|
return 0;
|
|
|
|
}
|