// replacement for fopen() // (not a full substitute: only supports read access) hnjFile* hnjFopen(const char* aURISpec, const char* aMode) { // this override only needs to support "r" NS_ASSERTION(!strcmp(aMode, "r"), "unsupported fopen() mode in hnjFopen"); nsCOMPtr<nsIURI> uri; nsresult rv = NS_NewURI(getter_AddRefs(uri), aURISpec); if (NS_FAILED(rv)) { return nullptr; } nsCOMPtr<nsIInputStream> instream; rv = NS_OpenURI(getter_AddRefs(instream), uri); if (NS_FAILED(rv)) { return nullptr; } hnjFile *f = new hnjFile; f->mStream = instream; f->mCurPos = 0; f->mLimit = 0; return f; }
// Create channel for requested URL. static nsCOMPtr<nsIChannel> createChannel( const char *url ) { nsCOMPtr<nsIInputStream> result; nsCOMPtr<nsIURI> uri; printf( "Calling NS_NewURI for %s...\n", url ); nsresult rv = NS_NewURI( getter_AddRefs( uri ), url ); if ( NS_SUCCEEDED( rv ) ) { printf( "...NS_NewURI completed OK\n" ); // Allocate a new input channel on this thread. printf( "Calling NS_OpenURI...\n" ); nsresult rv = NS_OpenURI( getter_AddRefs( result ), uri, 0 ); if ( NS_SUCCEEDED( rv ) ) { printf( "...NS_OpenURI completed OK\n" ); } else { printf( "%s %d: NS_OpenURI failed, rv=0x%08X\n", (char*)__FILE__, (int)__LINE__, (int)rv ); } } else { printf( "%s %d: NS_NewURI failed, rv=0x%08X\n", (char*)__FILE__, (int)__LINE__, (int)rv ); } return result; }
static bool load_async_1(nsISupports *element, void *data) { nsCOMPtr<nsIURI> uri( do_QueryInterface(element) ); if (!uri) return true; MyListener *listener = new MyListener(); if (!listener) return true; NS_ADDREF(listener); nsresult rv = NS_OpenURI(listener, nullptr, // aContext uri, nsContentUtils::GetSystemPrincipal(), nsILoadInfo::SEC_NORMAL, nsIContentPolicy::TYPE_OTHER, nullptr, // aLoadGroup nullptr, // aCallbacks gIOService); NS_RELEASE(listener); if (NS_SUCCEEDED(rv)) gRequestCount++; else printf(">> NS_OpenURI failed [rv=%x]\n", rv); return true; }
NS_IMETHODIMP nsXPInstallManager::OnCertAvailable(nsIURI *aURI, nsISupports* context, nsresult aStatus, nsIPrincipal *aPrincipal) { if (NS_FAILED(aStatus) && aStatus != NS_BINDING_ABORTED) { // Check for a bad status. The only acceptable failure status code we accept // is NS_BINDING_ABORTED. For all others we want to ensure that the // nsIPrincipal is nsnull. NS_ASSERTION(aPrincipal == nsnull, "There has been an error, but we have a principal!"); aPrincipal = nsnull; } // get the current one and assign the cert name nsXPITriggerItem *item = mTriggers->Get(mOutstandingCertLoads); item->SetPrincipal(aPrincipal); if (mOutstandingCertLoads == 0) { InitManagerInternal(); return NS_OK; } // get the next one to load. If there is any failure, we just go on to the // next trigger. When all triggers items are handled, we call into InitManagerInternal item = mTriggers->Get(--mOutstandingCertLoads); nsCOMPtr<nsIURI> uri; NS_NewURI(getter_AddRefs(uri), NS_ConvertUTF16toUTF8(item->mURL.get()).get()); if (!uri || mChromeType != NOT_CHROME) return OnCertAvailable(uri, context, NS_ERROR_FAILURE, nsnull); nsIStreamListener* listener = new CertReader(uri, nsnull, this); if (!listener) return OnCertAvailable(uri, context, NS_ERROR_FAILURE, nsnull); NS_ADDREF(listener); nsresult rv = NS_OpenURI(listener, nsnull, uri, nsnull, mLoadGroup); NS_ASSERTION(NS_SUCCEEDED(rv), "OpenURI failed"); NS_RELEASE(listener); if (NS_FAILED(rv)) return OnCertAvailable(uri, context, NS_ERROR_FAILURE, nsnull); return NS_OK; }
nsresult nsJARChannel::EnsureJarInput(PRBool blocking) { LOG(("nsJARChannel::EnsureJarInput [this=%x %s]\n", this, mSpec.get())); nsresult rv; nsCOMPtr<nsIURI> uri; rv = mJarURI->GetJARFile(getter_AddRefs(mJarBaseURI)); if (NS_FAILED(rv)) return rv; rv = mJarURI->GetJAREntry(mJarEntry); if (NS_FAILED(rv)) return rv; // The name of the JAR entry must not contain URL-escaped characters: // we're moving from URL domain to a filename domain here. nsStandardURL // does basic escaping by default, which breaks reading zipped files which // have e.g. spaces in their filenames. NS_UnescapeURL(mJarEntry); // try to get a nsIFile directly from the url, which will often succeed. { nsCOMPtr<nsIFileURL> fileURL = do_QueryInterface(mJarBaseURI); if (fileURL) fileURL->GetFile(getter_AddRefs(mJarFile)); } if (mJarFile) { mIsUnsafe = PR_FALSE; // NOTE: we do not need to deal with mSecurityInfo here, // because we're loading from a local file rv = CreateJarInput(gJarHandler->JarCache()); } else if (blocking) { NS_NOTREACHED("need sync downloader"); rv = NS_ERROR_NOT_IMPLEMENTED; } else { // kick off an async download of the base URI... rv = NS_NewDownloader(getter_AddRefs(mDownloader), this); if (NS_SUCCEEDED(rv)) rv = NS_OpenURI(mDownloader, nsnull, mJarBaseURI, nsnull, mLoadGroup, mCallbacks, mLoadFlags & ~(LOAD_DOCUMENT_URI | LOAD_CALL_CONTENT_SNIFFERS)); } return rv; }
NS_IMETHODIMP nsXPInstallManager::InitManager(nsIDOMWindowInternal* aParentWindow, nsXPITriggerInfo* aTriggers, PRUint32 aChromeType) { if ( !aTriggers || aTriggers->Size() == 0 ) { NS_WARNING("XPInstallManager called with no trigger info!"); delete aTriggers; NS_RELEASE_THIS(); return NS_ERROR_INVALID_POINTER; } nsresult rv = NS_OK; mNeedsShutdown = PR_TRUE; mTriggers = aTriggers; mChromeType = aChromeType; mParentWindow = aParentWindow; // Attempt to find a load group, continue if we can't find one though if (aParentWindow) { nsCOMPtr<nsIDOMDocument> domdoc; rv = aParentWindow->GetDocument(getter_AddRefs(domdoc)); if (NS_SUCCEEDED(rv) && domdoc) { nsCOMPtr<nsIDocument> doc = do_QueryInterface(domdoc); if (doc) mLoadGroup = doc->GetDocumentLoadGroup(); } } // Start downloading initial chunks looking for signatures, mOutstandingCertLoads = mTriggers->Size(); nsXPITriggerItem *item = mTriggers->Get(--mOutstandingCertLoads); nsCOMPtr<nsIURI> uri; NS_NewURI(getter_AddRefs(uri), NS_ConvertUTF16toUTF8(item->mURL)); nsCOMPtr<nsIStreamListener> listener = new CertReader(uri, nsnull, this); if (listener) rv = NS_OpenURI(listener, nsnull, uri, nsnull, mLoadGroup); else rv = NS_ERROR_OUT_OF_MEMORY; if (NS_FAILED(rv)) { Shutdown(); } return rv; }
static bool load_async_1(nsISupports *element, void *data) { nsCOMPtr<nsIURI> uri( do_QueryInterface(element) ); if (!uri) return true; MyListener *listener = new MyListener(); if (!listener) return true; NS_ADDREF(listener); nsresult rv = NS_OpenURI(listener, nullptr, uri, gIOService); NS_RELEASE(listener); if (NS_SUCCEEDED(rv)) gRequestCount++; else printf(">> NS_OpenURI failed [rv=%x]\n", rv); return true; }
int main(int argc, char **argv) { if (test_common_init(&argc, &argv) != 0) return -1; nsresult rv = NS_InitXPCOM2(nullptr, nullptr, nullptr); if (NS_FAILED(rv)) return rv; 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"); rv = NS_OpenURI(getter_AddRefs(stream), uri); RETURN_IF_FAILED(rv, "NS_OpenURI"); FILE* outfile = fopen(argv[2], "wb"); if (!outfile) { printf("error opening %s\n", argv[2]); return 1; } PRUint32 read; while (NS_SUCCEEDED(stream->Read(buf, sizeof(buf), &read)) && read) { fwrite(buf, 1, read, outfile); } printf("Done\n"); fclose(outfile); NS_ShutdownXPCOM(nullptr); return 0; }
NS_IMETHODIMP nsXPInstallManager::InitManager(nsIDOMWindowInternal* aParentWindow, nsXPITriggerInfo* aTriggers, PRUint32 aChromeType) { if ( !aTriggers || aTriggers->Size() == 0 ) { NS_WARNING("XPInstallManager called with no trigger info!"); delete aTriggers; NS_RELEASE_THIS(); return NS_ERROR_INVALID_POINTER; } nsresult rv = NS_OK; mNeedsShutdown = PR_TRUE; mTriggers = aTriggers; mChromeType = aChromeType; mParentWindow = aParentWindow; // Start downloading initial chunks looking for signatures, mOutstandingCertLoads = mTriggers->Size(); nsXPITriggerItem *item = mTriggers->Get(--mOutstandingCertLoads); nsCOMPtr<nsIURI> uri; NS_NewURI(getter_AddRefs(uri), NS_ConvertUTF16toUTF8(item->mURL)); nsCOMPtr<nsIStreamListener> listener = new CertReader(uri, nsnull, this); if (listener) rv = NS_OpenURI(listener, nsnull, uri); else rv = NS_ERROR_OUT_OF_MEMORY; if (NS_FAILED(rv)) { Shutdown(); } return rv; }
nsresult sbDeviceXMLInfo::Read(nsIURI * aDeviceXMLInfoURI, const nsAString & aExtensionsList) { NS_ENSURE_ARG_POINTER(aDeviceXMLInfoURI); nsresult rv; nsCString spec; rv = aDeviceXMLInfoURI->GetSpec(spec); Log("Reading %s", spec.BeginReading()); // If the URI is a file URL, pass it to the nsIFile variant of // this function, which has logic to scan directories: nsCOMPtr<nsIFileURL> fileUrl = do_QueryInterface(aDeviceXMLInfoURI); if (fileUrl) { nsCOMPtr<nsIFile> file; rv = fileUrl->GetFile(getter_AddRefs(file)); NS_ENSURE_SUCCESS(rv, rv); rv = Read(file, aExtensionsList); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; } // Open a stream to parse: nsCOMPtr<nsIInputStream> inputStream; rv = NS_OpenURI(getter_AddRefs(inputStream), aDeviceXMLInfoURI); NS_ENSURE_SUCCESS(rv, rv); // Parse the stream and close it: rv = Read(inputStream); inputStream->Close(); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; }
int main(int argc, char** argv) { if (3 != argc) { printf("usage: CvtURL url utf8\n"); return -1; } char* characterSetName = argv[2]; nsString* cset = ConvertCharacterSetName(characterSetName); if (NS_PTR_TO_INT32(cset) < 0) { printf("illegal character set name: '%s'\n", characterSetName); return -1; } // Create url object char* urlName = argv[1]; nsIURI* url; nsresult rv; rv = NS_NewURI(&url, urlName); if (NS_OK != rv) { printf("invalid URL: '%s'\n", urlName); return -1; } // Get an input stream from the url nsresult ec; nsIInputStream* in; ec = NS_OpenURI(&in, url); if (nsnull == in) { printf("open of url('%s') failed: error=%x\n", urlName, ec); return -1; } // Translate the input using the argument character set id into // unicode nsCOMPtr<nsIConverterInputStream> uin = do_CreateInstance("@mozilla.org/intl/converter-input-stream;1", &rv); if (NS_SUCCEEDED(rv)) rv = uin->Init(in, cset->get(), 4096); if (NS_FAILED(rv)) { printf("can't create converter input stream: %d\n", rv); return -1; } // Read the input and write some output PRTime start = PR_Now(); PRInt32 count = 0; for (;;) { PRUnichar buf[1000]; PRUint32 nb; ec = uin->Read(buf, 0, 1000, &nb); if (NS_FAILED(ec)) { printf("i/o error: %d\n", ec); break; } if (nb == 0) break; // EOF count += nb; } PRTime end = PR_Now(); PRTime conversion, ustoms; LL_I2L(ustoms, 1000); LL_SUB(conversion, end, start); LL_DIV(conversion, conversion, ustoms); char buf[500]; PR_snprintf(buf, sizeof(buf), "converting and discarding %d bytes took %lldms", count, conversion); puts(buf); // Release the objects in->Release(); url->Release(); return 0; }
nsresult sbLocalDatabaseLibraryFactory::InitalizeLibrary(nsIFile* aDatabaseFile, const nsAString &aResourceGUID) { nsresult rv; PRInt32 dbOk; nsCOMPtr<nsIFile> parentDirectory; rv = aDatabaseFile->GetParent(getter_AddRefs(parentDirectory)); NS_ENSURE_SUCCESS(rv, rv); PRBool parentExists; rv = parentDirectory->Exists(&parentExists); NS_ENSURE_SUCCESS(rv, rv); if (!parentExists) { rv = CreateDirectory(parentDirectory); NS_ENSURE_SUCCESS(rv, rv); } PRBool parentIsWritable = IsDirectoryWritable(parentDirectory); NS_ENSURE_TRUE(parentIsWritable, NS_ERROR_FILE_ACCESS_DENIED); // Now that we know we have appropriate permissions make a new query. nsCOMPtr<sbIDatabaseQuery> query = do_CreateInstance(SONGBIRD_DATABASEQUERY_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); rv = query->SetAsyncQuery(PR_FALSE); NS_ENSURE_SUCCESS(rv, rv); rv = SetQueryDatabaseFile(query, aDatabaseFile); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIURI> schemaURI; rv = NS_NewURI(getter_AddRefs(schemaURI), NS_LITERAL_CSTRING(SCHEMA_URL)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIInputStream> input; rv = NS_OpenURI(getter_AddRefs(input), schemaURI); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIConverterInputStream> converterStream = do_CreateInstance("@mozilla.org/intl/converter-input-stream;1", &rv); NS_ENSURE_SUCCESS(rv, rv); rv = converterStream->Init(input, "UTF-8", CONVERTER_BUFFER_SIZE, nsIConverterInputStream:: DEFAULT_REPLACEMENT_CHARACTER); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIUnicharInputStream> unichar = do_QueryInterface(converterStream, &rv); NS_ENSURE_SUCCESS(rv, rv); PRUint32 read; nsString response, result; rv = unichar->ReadString(PR_UINT32_MAX, result, &read); NS_ENSURE_SUCCESS(rv, rv); NS_ASSERTION(read, "Schema file zero bytes?"); while (read > 0) { response.Append(result); rv = unichar->ReadString(PR_UINT32_MAX, result, &read); NS_ENSURE_SUCCESS(rv, rv); } rv = unichar->Close(); NS_ENSURE_SUCCESS(rv, rv); NS_NAMED_LITERAL_STRING(colonNewline, ";\n"); PRInt32 posStart = 0; PRInt32 posEnd = response.Find(colonNewline, posStart); while (posEnd >= 0) { rv = query->AddQuery(Substring(response, posStart, posEnd - posStart)); NS_ENSURE_SUCCESS(rv, rv); posStart = posEnd + 2; posEnd = response.Find(colonNewline, posStart); } rv = query->Execute(&dbOk); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(dbOk == 0, NS_ERROR_FAILURE); nsString guid(aResourceGUID); if(guid.IsEmpty()) { // Create a resource guid for this database. nsCOMPtr<nsIUUIDGenerator> uuidGen = do_GetService("@mozilla.org/uuid-generator;1", &rv); NS_ENSURE_SUCCESS(rv, rv); nsID id; rv = uuidGen->GenerateUUIDInPlace(&id); NS_ENSURE_SUCCESS(rv, rv); char guidChars[NSID_LENGTH]; id.ToProvidedString(guidChars); guid = NS_ConvertASCIItoUTF16(nsDependentCString(guidChars + 1, NSID_LENGTH - 3)); } // Insert the guid into the database. nsCOMPtr<sbISQLInsertBuilder> insert = do_CreateInstance(SB_SQLBUILDER_INSERT_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); rv = insert->SetIntoTableName(NS_LITERAL_STRING("library_metadata")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddColumn(NS_LITERAL_STRING("name")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddColumn(NS_LITERAL_STRING("value")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddValueString(NS_LITERAL_STRING("resource-guid")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddValueString(guid); NS_ENSURE_SUCCESS(rv, rv); nsAutoString sql; rv = insert->ToString(sql); NS_ENSURE_SUCCESS(rv, rv); rv = query->ResetQuery(); NS_ENSURE_SUCCESS(rv, rv); rv = query->AddQuery(sql); NS_ENSURE_SUCCESS(rv, rv); rv = query->Execute(&dbOk); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(dbOk == 0, NS_ERROR_FAILURE); nsString now; sbLocalDatabaseLibrary::GetNowString(now); nsCOMPtr<nsIURI> fileURI; rv = NS_NewFileURI(getter_AddRefs(fileURI), aDatabaseFile); NS_ENSURE_SUCCESS(rv, rv); nsCString uriSpec; rv = fileURI->GetSpec(uriSpec); NS_ENSURE_SUCCESS(rv, rv); // Add the default library media item properties insert = do_CreateInstance(SB_SQLBUILDER_INSERT_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); rv = insert->SetIntoTableName(NS_LITERAL_STRING("library_media_item")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddColumn(NS_LITERAL_STRING("guid")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddValueString(guid); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddColumn(NS_LITERAL_STRING("created")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddValueString(now); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddColumn(NS_LITERAL_STRING("updated")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddValueString(now); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddColumn(NS_LITERAL_STRING("content_url")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddValueString(NS_ConvertUTF8toUTF16(uriSpec)); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddColumn(NS_LITERAL_STRING("hidden")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddValueLong(0); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddColumn(NS_LITERAL_STRING("is_list")); NS_ENSURE_SUCCESS(rv, rv); rv = insert->AddValueLong(0); NS_ENSURE_SUCCESS(rv, rv); rv = insert->ToString(sql); NS_ENSURE_SUCCESS(rv, rv); rv = query->ResetQuery(); NS_ENSURE_SUCCESS(rv, rv); rv = query->AddQuery(sql); NS_ENSURE_SUCCESS(rv, rv); rv = query->Execute(&dbOk); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(dbOk == 0, NS_ERROR_FAILURE); return NS_OK; }