commit 470c1bc46464e1a745063c76f742a9575c4d5077 Author: Oskar Eisemuth dev_oskar@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); }