commit 470c1bc46464e1a745063c76f742a9575c4d5077
Author: Oskar Eisemuth <dev_oskar(a)hotmail.com>
Date: Tue Jan 28 16:31:20 2014 +0100
Bug 701479 - Remove usage of EnumPrintersW to test if port is FILE:. nsDeviceContextSpecWin shouldn't start UI for asking for a filename nor query all possible printers. r=jimm, a=lsblakk
---
widget/windows/nsDeviceContextSpecWin.cpp | 196 -----------------------------
1 file changed, 196 deletions(-)
diff --git a/widget/windows/nsDeviceContextSpecWin.cpp b/widget/windows/nsDeviceContextSpecWin.cpp
index 134d74f..1da105f 100644
--- a/widget/windows/nsDeviceContextSpecWin.cpp
+++ b/widget/windows/nsDeviceContextSpecWin.cpp
@@ -181,189 +181,6 @@ static PRUnichar * GetDefaultPrinterNameFromGlobalPrinters()
return ToNewUnicode(printerName);
}
-//----------------------------------------------------------------
-static nsresult
-EnumerateNativePrinters(DWORD aWhichPrinters, LPWSTR aPrinterName, bool& aIsFound, bool& aIsFile)
-{
- DWORD dwSizeNeeded = 0;
- DWORD dwNumItems = 0;
- LPPRINTER_INFO_2W lpInfo = NULL;
-
- // Get buffer size
- if (::EnumPrintersW(aWhichPrinters, NULL, 2, NULL, 0, &dwSizeNeeded,
- &dwNumItems)) {
- return NS_ERROR_FAILURE;
- }
-
- // allocate memory
- lpInfo = (LPPRINTER_INFO_2W) malloc(dwSizeNeeded);
- if (!lpInfo) {
- return NS_ERROR_OUT_OF_MEMORY;
- }
-
- if (::EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 2, (LPBYTE)lpInfo,
- dwSizeNeeded, &dwSizeNeeded, &dwNumItems) == 0) {
- free(lpInfo);
- return NS_OK;
- }
-
- for (DWORD i = 0; i < dwNumItems; i++ ) {
- if (wcscmp(lpInfo[i].pPrinterName, aPrinterName) == 0) {
- aIsFound = true;
- aIsFile = wcscmp(lpInfo[i].pPortName, L"FILE:") == 0;
- break;
- }
- }
-
- free(lpInfo);
- return NS_OK;
-}
-
-//----------------------------------------------------------------
-static void
-CheckForPrintToFileWithName(LPWSTR aPrinterName, bool& aIsFile)
-{
- bool isFound = false;
- aIsFile = false;
- nsresult rv = EnumerateNativePrinters(PRINTER_ENUM_LOCAL, aPrinterName, isFound, aIsFile);
- if (isFound) return;
-
- rv = EnumerateNativePrinters(PRINTER_ENUM_NETWORK, aPrinterName, isFound, aIsFile);
- if (isFound) return;
-
- rv = EnumerateNativePrinters(PRINTER_ENUM_SHARED, aPrinterName, isFound, aIsFile);
- if (isFound) return;
-
- rv = EnumerateNativePrinters(PRINTER_ENUM_REMOTE, aPrinterName, isFound, aIsFile);
- if (isFound) return;
-}
-
-static nsresult
-GetFileNameForPrintSettings(nsIPrintSettings* aPS)
-{
- // for testing
-#ifdef DEBUG_rods
- return NS_OK;
-#endif
-
- nsresult rv;
-
- nsCOMPtr<nsIFilePicker> filePicker = do_CreateInstance("@mozilla.org/filepicker;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- nsCOMPtr<nsIStringBundleService> bundleService =
- mozilla::services::GetStringBundleService();
- if (!bundleService)
- return NS_ERROR_FAILURE;
- nsCOMPtr<nsIStringBundle> bundle;
- rv = bundleService->CreateBundle(NS_ERROR_GFX_PRINTER_BUNDLE_URL, getter_AddRefs(bundle));
- NS_ENSURE_SUCCESS(rv, rv);
-
- nsXPIDLString title;
- rv = bundle->GetStringFromName(NS_LITERAL_STRING("PrintToFile").get(), getter_Copies(title));
- NS_ENSURE_SUCCESS(rv, rv);
-
- nsCOMPtr<nsIWindowWatcher> wwatch =
- (do_GetService(NS_WINDOWWATCHER_CONTRACTID, &rv));
- NS_ENSURE_SUCCESS(rv, rv);
-
- nsCOMPtr<nsIDOMWindow> window;
- wwatch->GetActiveWindow(getter_AddRefs(window));
-
- rv = filePicker->Init(window, title, nsIFilePicker::modeSave);
- NS_ENSURE_SUCCESS(rv, rv);
-
- rv = filePicker->AppendFilters(nsIFilePicker::filterAll);
- NS_ENSURE_SUCCESS(rv, rv);
-
- PRUnichar* fileName;
- aPS->GetToFileName(&fileName);
-
- if (fileName) {
- if (*fileName) {
- nsAutoString leafName;
- nsCOMPtr<nsIFile> file(do_CreateInstance("@mozilla.org/file/local;1"));
- if (file) {
- rv = file->InitWithPath(nsDependentString(fileName));
- if (NS_SUCCEEDED(rv)) {
- file->GetLeafName(leafName);
- filePicker->SetDisplayDirectory(file);
- }
- }
- if (!leafName.IsEmpty()) {
- rv = filePicker->SetDefaultString(leafName);
- }
- NS_ENSURE_SUCCESS(rv, rv);
- }
- nsMemory::Free(fileName);
- }
-
- int16_t dialogResult;
- filePicker->Show(&dialogResult);
-
- if (dialogResult == nsIFilePicker::returnCancel) {
- return NS_ERROR_ABORT;
- }
-
- nsCOMPtr<nsIFile> localFile;
- rv = filePicker->GetFile(getter_AddRefs(localFile));
- NS_ENSURE_SUCCESS(rv, rv);
-
- if (dialogResult == nsIFilePicker::returnReplace) {
- // be extra safe and only delete when the file is really a file
- bool isFile;
- rv = localFile->IsFile(&isFile);
- if (NS_SUCCEEDED(rv) && isFile) {
- rv = localFile->Remove(false /* recursive delete */);
- NS_ENSURE_SUCCESS(rv, rv);
- }
- }
-
- nsAutoString unicodePath;
- rv = localFile->GetPath(unicodePath);
- NS_ENSURE_SUCCESS(rv,rv);
-
- if (unicodePath.IsEmpty()) {
- rv = NS_ERROR_ABORT;
- }
-
- if (NS_SUCCEEDED(rv)) aPS->SetToFileName(unicodePath.get());
-
- return rv;
-}
-
-//----------------------------------------------------------------------------------
-static nsresult
-CheckForPrintToFile(nsIPrintSettings* aPS, LPWSTR aPrinterName, PRUnichar* aUPrinterName)
-{
- nsresult rv = NS_OK;
-
- if (!aPrinterName && !aUPrinterName) return rv;
-
- bool toFile;
- CheckForPrintToFileWithName(aPrinterName?aPrinterName:aUPrinterName, toFile);
- // Since the driver wasn't a "Print To File" Driver, check to see
- // if the name of the file has been set to the special "FILE:"
- if (!toFile) {
- nsXPIDLString toFileName;
- aPS->GetToFileName(getter_Copies(toFileName));
- if (toFileName) {
- if (*toFileName) {
- if (toFileName.EqualsLiteral("FILE:")) {
- // this skips the setting of the "print to file" info below
- // which we don't want to do.
- return NS_OK;
- }
- }
- }
- }
- aPS->SetPrintToFile(toFile);
- if (toFile) {
- rv = GetFileNameForPrintSettings(aPS);
- }
- return rv;
-}
-
//----------------------------------------------------------------------------------
NS_IMETHODIMP nsDeviceContextSpecWin::Init(nsIWidget* aWidget,
nsIPrintSettings* aPrintSettings,
@@ -398,15 +215,6 @@ NS_IMETHODIMP nsDeviceContextSpecWin::Init(nsIWidget* aWidget,
SetDriverName(driverName);
SetDevMode(devMode);
- if (!aIsPrintPreview) {
- rv = CheckForPrintToFile(mPrintSettings, deviceName, nullptr);
- if (NS_FAILED(rv)) {
- nsCRT::free(deviceName);
- nsCRT::free(driverName);
- return NS_ERROR_FAILURE;
- }
- }
-
// clean up
nsCRT::free(deviceName);
nsCRT::free(driverName);
@@ -437,10 +245,6 @@ NS_IMETHODIMP nsDeviceContextSpecWin::Init(nsIWidget* aWidget,
NS_ASSERTION(printerName, "We have to have a printer name");
if (!printerName || !*printerName) return rv;
- if (!aIsPrintPreview) {
- CheckForPrintToFile(mPrintSettings, nullptr, printerName);
- }
-
return GetDataFromPrinter(printerName, mPrintSettings);
}