Bug 1407103 - Convert wstring attributes to AString in widget/nsIPrint*.idl. r=bobowen.

This avoids a lot of mismatches between nsAString and char16_t*, thus removing
many getter_Copies() and ToNewUnicode() and get() calls, and generally making
things simpler.

Note: the patch removes GetDefaultPrinterNameFromGlobalPrinters() by simply
inlining it at its two callsites, which is easy with the changed types.

--HG--
extra : rebase_source : 9ab9b3694f093fc9b22c7f8e2394a98674d76c11
This commit is contained in:
Nicholas Nethercote 2017-10-09 10:08:09 +11:00
parent 2790ca829a
commit c0a1cf9b49
26 changed files with 286 additions and 470 deletions

View file

@ -8156,7 +8156,7 @@ nsGlobalWindow::PrintOuter(ErrorResult& aError)
printSettingsService->GetGlobalPrintSettings(getter_AddRefs(printSettings)); printSettingsService->GetGlobalPrintSettings(getter_AddRefs(printSettings));
nsAutoString printerName; nsAutoString printerName;
printSettings->GetPrinterName(getter_Copies(printerName)); printSettings->GetPrinterName(printerName);
bool shouldGetDefaultPrinterName = printerName.IsEmpty(); bool shouldGetDefaultPrinterName = printerName.IsEmpty();
#ifdef MOZ_X11 #ifdef MOZ_X11
@ -8170,10 +8170,10 @@ nsGlobalWindow::PrintOuter(ErrorResult& aError)
} }
#endif #endif
if (shouldGetDefaultPrinterName) { if (shouldGetDefaultPrinterName) {
printSettingsService->GetDefaultPrinterName(getter_Copies(printerName)); printSettingsService->GetDefaultPrinterName(printerName);
printSettings->SetPrinterName(printerName.get()); printSettings->SetPrinterName(printerName);
} }
printSettingsService->InitPrintSettingsFromPrinter(printerName.get(), printSettingsService->InitPrintSettingsFromPrinter(printerName,
printSettings); printSettings);
printSettingsService->InitPrintSettingsFromPrefs(printSettings, printSettingsService->InitPrintSettingsFromPrefs(printSettings,
true, true,

View file

@ -642,17 +642,17 @@ nsPageFrame::PaintHeaderFooter(gfxContext& aRenderingContext,
// print document headers and footers // print document headers and footers
nsString headerLeft, headerCenter, headerRight; nsString headerLeft, headerCenter, headerRight;
mPD->mPrintSettings->GetHeaderStrLeft(getter_Copies(headerLeft)); mPD->mPrintSettings->GetHeaderStrLeft(headerLeft);
mPD->mPrintSettings->GetHeaderStrCenter(getter_Copies(headerCenter)); mPD->mPrintSettings->GetHeaderStrCenter(headerCenter);
mPD->mPrintSettings->GetHeaderStrRight(getter_Copies(headerRight)); mPD->mPrintSettings->GetHeaderStrRight(headerRight);
DrawHeaderFooter(aRenderingContext, *fontMet, eHeader, DrawHeaderFooter(aRenderingContext, *fontMet, eHeader,
headerLeft, headerCenter, headerRight, headerLeft, headerCenter, headerRight,
rect, ascent, visibleHeight); rect, ascent, visibleHeight);
nsString footerLeft, footerCenter, footerRight; nsString footerLeft, footerCenter, footerRight;
mPD->mPrintSettings->GetFooterStrLeft(getter_Copies(footerLeft)); mPD->mPrintSettings->GetFooterStrLeft(footerLeft);
mPD->mPrintSettings->GetFooterStrCenter(getter_Copies(footerCenter)); mPD->mPrintSettings->GetFooterStrCenter(footerCenter);
mPD->mPrintSettings->GetFooterStrRight(getter_Copies(footerRight)); mPD->mPrintSettings->GetFooterStrRight(footerRight);
DrawHeaderFooter(aRenderingContext, *fontMet, eFooter, DrawHeaderFooter(aRenderingContext, *fontMet, eFooter,
footerLeft, footerCenter, footerRight, footerLeft, footerCenter, footerRight,
rect, ascent, visibleHeight); rect, ascent, visibleHeight);

View file

@ -1011,7 +1011,7 @@ nsPrintEngine::CheckForPrinters(nsIPrintSettings* aPrintSettings)
// See if aPrintSettings already has a printer // See if aPrintSettings already has a printer
nsString printerName; nsString printerName;
nsresult rv = aPrintSettings->GetPrinterName(getter_Copies(printerName)); nsresult rv = aPrintSettings->GetPrinterName(printerName);
if (NS_SUCCEEDED(rv) && !printerName.IsEmpty()) { if (NS_SUCCEEDED(rv) && !printerName.IsEmpty()) {
return NS_OK; return NS_OK;
} }
@ -1021,9 +1021,9 @@ nsPrintEngine::CheckForPrinters(nsIPrintSettings* aPrintSettings)
do_GetService(sPrintSettingsServiceContractID, &rv); do_GetService(sPrintSettingsServiceContractID, &rv);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
rv = printSettingsService->GetDefaultPrinterName(getter_Copies(printerName)); rv = printSettingsService->GetDefaultPrinterName(printerName);
if (NS_SUCCEEDED(rv) && !printerName.IsEmpty()) { if (NS_SUCCEEDED(rv) && !printerName.IsEmpty()) {
rv = aPrintSettings->SetPrinterName(printerName.get()); rv = aPrintSettings->SetPrinterName(printerName);
} }
return rv; return rv;
#endif #endif
@ -1455,21 +1455,8 @@ nsPrintEngine::GetDisplayTitleAndURL(const UniquePtr<nsPrintObject>& aPO,
// First check to see if the PrintSettings has defined an alternate title // First check to see if the PrintSettings has defined an alternate title
// and use that if it did // and use that if it did
if (mPrt->mPrintSettings) { if (mPrt->mPrintSettings) {
char16_t * docTitleStrPS = nullptr; mPrt->mPrintSettings->GetTitle(aTitle);
char16_t * docURLStrPS = nullptr; mPrt->mPrintSettings->GetDocURL(aURLStr);
mPrt->mPrintSettings->GetTitle(&docTitleStrPS);
mPrt->mPrintSettings->GetDocURL(&docURLStrPS);
if (docTitleStrPS) {
aTitle = docTitleStrPS;
}
if (docURLStrPS) {
aURLStr = docURLStrPS;
}
free(docTitleStrPS);
free(docURLStrPS);
} }
nsAutoString docTitle; nsAutoString docTitle;
@ -1828,7 +1815,7 @@ nsPrintEngine::SetupToPrintContent()
printData->mPrintSettings->GetPrintToFile(&isPrintToFile); printData->mPrintSettings->GetPrintToFile(&isPrintToFile);
if (isPrintToFile) { if (isPrintToFile) {
// On some platforms The BeginDocument needs to know the name of the file. // On some platforms The BeginDocument needs to know the name of the file.
printData->mPrintSettings->GetToFileName(getter_Copies(fileNameStr)); printData->mPrintSettings->GetToFileName(fileNameStr);
} }
nsAutoString docTitleStr; nsAutoString docTitleStr;

View file

@ -137,17 +137,17 @@ PrintingParent::ShowPrintDialog(PBrowserParent* aParent,
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
nsString printerName; nsString printerName;
settings->GetPrinterName(getter_Copies(printerName)); settings->GetPrinterName(printerName);
#ifdef MOZ_X11 #ifdef MOZ_X11
// Requesting the default printer name on Linux has been removed in the child, // Requesting the default printer name on Linux has been removed in the child,
// because it was causing a sandbox violation (see Bug 1329216). // because it was causing a sandbox violation (see Bug 1329216).
// If no printer name is set at this point, use the print settings service // If no printer name is set at this point, use the print settings service
// to get the default printer name. // to get the default printer name.
if (printerName.IsEmpty()) { if (printerName.IsEmpty()) {
mPrintSettingsSvc->GetDefaultPrinterName(getter_Copies(printerName)); mPrintSettingsSvc->GetDefaultPrinterName(printerName);
settings->SetPrinterName(printerName.get()); settings->SetPrinterName(printerName);
} }
mPrintSettingsSvc->InitPrintSettingsFromPrinter(printerName.get(), settings); mPrintSettingsSvc->InitPrintSettingsFromPrinter(printerName, settings);
#endif #endif
// If this is for print preview or we are printing silently then we just need // If this is for print preview or we are printing silently then we just need
@ -155,8 +155,7 @@ PrintingParent::ShowPrintDialog(PBrowserParent* aParent,
if (isPrintPreview || printSilently || if (isPrintPreview || printSilently ||
Preferences::GetBool("print.always_print_silent", printSilently)) { Preferences::GetBool("print.always_print_silent", printSilently)) {
settings->SetIsInitializedFromPrinter(false); settings->SetIsInitializedFromPrinter(false);
mPrintSettingsSvc->InitPrintSettingsFromPrinter(printerName.get(), mPrintSettingsSvc->InitPrintSettingsFromPrinter(printerName, settings);
settings);
} else { } else {
rv = pps->ShowPrintDialog(parentWin, wbp, settings); rv = pps->ShowPrintDialog(parentWin, wbp, settings);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);

View file

@ -535,7 +535,7 @@ static void GetDefaultPrinterNameFromGlobalPrinters(nsAString &printerName)
{ {
nsCOMPtr<nsIPrinterEnumerator> prtEnum = do_GetService("@mozilla.org/gfx/printerenumerator;1"); nsCOMPtr<nsIPrinterEnumerator> prtEnum = do_GetService("@mozilla.org/gfx/printerenumerator;1");
if (prtEnum) { if (prtEnum) {
prtEnum->GetDefaultPrinterName(getter_Copies(printerName)); prtEnum->GetDefaultPrinterName(printerName);
} }
} }
@ -570,7 +570,7 @@ ShowNativePrintDialog(HWND aHWnd,
// Get the Print Name to be used // Get the Print Name to be used
nsString printerName; nsString printerName;
aPrintSettings->GetPrinterName(getter_Copies(printerName)); aPrintSettings->GetPrinterName(printerName);
// If there is no name then use the default printer // If there is no name then use the default printer
if (printerName.IsEmpty()) { if (printerName.IsEmpty()) {
@ -696,12 +696,12 @@ ShowNativePrintDialog(HWND aHWnd,
if (prntdlg.Flags & PD_PRINTTOFILE) { if (prntdlg.Flags & PD_PRINTTOFILE) {
char16ptr_t fileName = &(((wchar_t *)devnames)[devnames->wOutputOffset]); char16ptr_t fileName = &(((wchar_t *)devnames)[devnames->wOutputOffset]);
NS_ASSERTION(wcscmp(fileName, L"FILE:") == 0, "FileName must be `FILE:`"); NS_ASSERTION(wcscmp(fileName, L"FILE:") == 0, "FileName must be `FILE:`");
aPrintSettings->SetToFileName(fileName); aPrintSettings->SetToFileName(nsDependentString(fileName));
aPrintSettings->SetPrintToFile(true); aPrintSettings->SetPrintToFile(true);
} else { } else {
// clear "print to file" info // clear "print to file" info
aPrintSettings->SetPrintToFile(false); aPrintSettings->SetPrintToFile(false);
aPrintSettings->SetToFileName(nullptr); aPrintSettings->SetToFileName(EmptyString());
} }
nsCOMPtr<nsIPrintSettingsWin> psWin(do_QueryInterface(aPrintSettings)); nsCOMPtr<nsIPrintSettingsWin> psWin(do_QueryInterface(aPrintSettings));
@ -710,15 +710,15 @@ ShowNativePrintDialog(HWND aHWnd,
} }
// Setup local Data members // Setup local Data members
psWin->SetDeviceName(device); psWin->SetDeviceName(nsDependentString(device));
psWin->SetDriverName(driver); psWin->SetDriverName(nsDependentString(driver));
#if defined(DEBUG_rods) || defined(DEBUG_dcone) #if defined(DEBUG_rods) || defined(DEBUG_dcone)
wprintf(L"printer: driver %s, device %s flags: %d\n", driver, device, prntdlg.Flags); wprintf(L"printer: driver %s, device %s flags: %d\n", driver, device, prntdlg.Flags);
#endif #endif
// fill the print options with the info from the dialog // fill the print options with the info from the dialog
aPrintSettings->SetPrinterName(device); aPrintSettings->SetPrinterName(nsDependentString(device));
if (prntdlg.Flags & PD_SELECTION) { if (prntdlg.Flags & PD_SELECTION) {
aPrintSettings->SetPrintRange(nsIPrintSettings::kRangeSelection); aPrintSettings->SetPrintRange(nsIPrintSettings::kRangeSelection);

View file

@ -62,7 +62,7 @@ nsDeviceContextSpecAndroid::EndDocument()
{ {
nsString targetPath; nsString targetPath;
nsCOMPtr<nsIFile> destFile; nsCOMPtr<nsIFile> destFile;
mPrintSettings->GetToFileName(getter_Copies(targetPath)); mPrintSettings->GetToFileName(targetPath);
nsresult rv = NS_NewLocalFile(targetPath, false, getter_AddRefs(destFile)); nsresult rv = NS_NewLocalFile(targetPath, false, getter_AddRefs(destFile));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);

View file

@ -12,8 +12,7 @@ public:
{ {
// The aim here is to set up the objects enough that silent printing works // The aim here is to set up the objects enough that silent printing works
SetOutputFormat(nsIPrintSettings::kOutputFormatPDF); SetOutputFormat(nsIPrintSettings::kOutputFormatPDF);
SetPrinterName(u"PDF printer"); SetPrinterName(NS_LITERAL_STRING("PDF printer"));
} }
}; };

View file

@ -515,32 +515,32 @@ static const char sHeaderFooterTags[][4] = {"", "&T", "&U", "&D", "&P", "&PT"};
// Lists // Lists
nsString sel; nsString sel;
mSettings->GetHeaderStrLeft(getter_Copies(sel)); mSettings->GetHeaderStrLeft(sel);
mHeaderLeftList = [self headerFooterItemListWithFrame:NSMakeRect(156, 44, 100, 22) mHeaderLeftList = [self headerFooterItemListWithFrame:NSMakeRect(156, 44, 100, 22)
selectedItem:sel]; selectedItem:sel];
[self addSubview:mHeaderLeftList]; [self addSubview:mHeaderLeftList];
mSettings->GetHeaderStrCenter(getter_Copies(sel)); mSettings->GetHeaderStrCenter(sel);
mHeaderCenterList = [self headerFooterItemListWithFrame:NSMakeRect(256, 44, 100, 22) mHeaderCenterList = [self headerFooterItemListWithFrame:NSMakeRect(256, 44, 100, 22)
selectedItem:sel]; selectedItem:sel];
[self addSubview:mHeaderCenterList]; [self addSubview:mHeaderCenterList];
mSettings->GetHeaderStrRight(getter_Copies(sel)); mSettings->GetHeaderStrRight(sel);
mHeaderRightList = [self headerFooterItemListWithFrame:NSMakeRect(356, 44, 100, 22) mHeaderRightList = [self headerFooterItemListWithFrame:NSMakeRect(356, 44, 100, 22)
selectedItem:sel]; selectedItem:sel];
[self addSubview:mHeaderRightList]; [self addSubview:mHeaderRightList];
mSettings->GetFooterStrLeft(getter_Copies(sel)); mSettings->GetFooterStrLeft(sel);
mFooterLeftList = [self headerFooterItemListWithFrame:NSMakeRect(156, 0, 100, 22) mFooterLeftList = [self headerFooterItemListWithFrame:NSMakeRect(156, 0, 100, 22)
selectedItem:sel]; selectedItem:sel];
[self addSubview:mFooterLeftList]; [self addSubview:mFooterLeftList];
mSettings->GetFooterStrCenter(getter_Copies(sel)); mSettings->GetFooterStrCenter(sel);
mFooterCenterList = [self headerFooterItemListWithFrame:NSMakeRect(256, 0, 100, 22) mFooterCenterList = [self headerFooterItemListWithFrame:NSMakeRect(256, 0, 100, 22)
selectedItem:sel]; selectedItem:sel];
[self addSubview:mFooterCenterList]; [self addSubview:mFooterCenterList];
mSettings->GetFooterStrRight(getter_Copies(sel)); mSettings->GetFooterStrRight(sel);
mFooterRightList = [self headerFooterItemListWithFrame:NSMakeRect(356, 0, 100, 22) mFooterRightList = [self headerFooterItemListWithFrame:NSMakeRect(356, 0, 100, 22)
selectedItem:sel]; selectedItem:sel];
[self addSubview:mFooterRightList]; [self addSubview:mFooterRightList];
@ -570,22 +570,22 @@ static const char sHeaderFooterTags[][4] = {"", "&T", "&U", "&D", "&P", "&PT"};
{ {
const char* headerFooterStr; const char* headerFooterStr;
headerFooterStr = [self headerFooterStringForList:mHeaderLeftList]; headerFooterStr = [self headerFooterStringForList:mHeaderLeftList];
mSettings->SetHeaderStrLeft(NS_ConvertUTF8toUTF16(headerFooterStr).get()); mSettings->SetHeaderStrLeft(NS_ConvertUTF8toUTF16(headerFooterStr));
headerFooterStr = [self headerFooterStringForList:mHeaderCenterList]; headerFooterStr = [self headerFooterStringForList:mHeaderCenterList];
mSettings->SetHeaderStrCenter(NS_ConvertUTF8toUTF16(headerFooterStr).get()); mSettings->SetHeaderStrCenter(NS_ConvertUTF8toUTF16(headerFooterStr));
headerFooterStr = [self headerFooterStringForList:mHeaderRightList]; headerFooterStr = [self headerFooterStringForList:mHeaderRightList];
mSettings->SetHeaderStrRight(NS_ConvertUTF8toUTF16(headerFooterStr).get()); mSettings->SetHeaderStrRight(NS_ConvertUTF8toUTF16(headerFooterStr));
headerFooterStr = [self headerFooterStringForList:mFooterLeftList]; headerFooterStr = [self headerFooterStringForList:mFooterLeftList];
mSettings->SetFooterStrLeft(NS_ConvertUTF8toUTF16(headerFooterStr).get()); mSettings->SetFooterStrLeft(NS_ConvertUTF8toUTF16(headerFooterStr));
headerFooterStr = [self headerFooterStringForList:mFooterCenterList]; headerFooterStr = [self headerFooterStringForList:mFooterCenterList];
mSettings->SetFooterStrCenter(NS_ConvertUTF8toUTF16(headerFooterStr).get()); mSettings->SetFooterStrCenter(NS_ConvertUTF8toUTF16(headerFooterStr));
headerFooterStr = [self headerFooterStringForList:mFooterRightList]; headerFooterStr = [self headerFooterStringForList:mFooterRightList];
mSettings->SetFooterStrRight(NS_ConvertUTF8toUTF16(headerFooterStr).get()); mSettings->SetFooterStrRight(NS_ConvertUTF8toUTF16(headerFooterStr));
} }
// Summary // Summary

View file

@ -68,7 +68,7 @@ public:
NS_IMETHOD SetScaling(double aScaling) override; NS_IMETHOD SetScaling(double aScaling) override;
NS_IMETHOD GetScaling(double *aScaling) override; NS_IMETHOD GetScaling(double *aScaling) override;
NS_IMETHOD SetToFileName(const char16_t * aToFileName) override; NS_IMETHOD SetToFileName(const nsAString& aToFileName) override;
NS_IMETHOD GetOrientation(int32_t *aOrientation) override; NS_IMETHOD GetOrientation(int32_t *aOrientation) override;
NS_IMETHOD SetOrientation(int32_t aOrientation) override; NS_IMETHOD SetOrientation(int32_t aOrientation) override;

View file

@ -328,7 +328,7 @@ nsPrintSettingsX::GetScaling(double *aScaling)
} }
NS_IMETHODIMP NS_IMETHODIMP
nsPrintSettingsX::SetToFileName(const char16_t *aToFileName) nsPrintSettingsX::SetToFileName(const nsAString& aToFileName)
{ {
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT;
@ -341,10 +341,9 @@ nsPrintSettingsX::SetToFileName(const char16_t *aToFileName)
NSMutableDictionary* printInfoDict = [mPrintInfo dictionary]; NSMutableDictionary* printInfoDict = [mPrintInfo dictionary];
if (aToFileName && aToFileName[0]) { if (!aToFileName.IsEmpty()) {
NSURL* jobSavingURL = NSURL* jobSavingURL =
[NSURL fileURLWithPath: nsCocoaUtils::ToNSString( [NSURL fileURLWithPath: nsCocoaUtils::ToNSString(aToFileName)];
nsDependentString(aToFileName))];
if (jobSavingURL) { if (jobSavingURL) {
[printInfoDict setObject: NSPrintSaveJob forKey: NSPrintJobDisposition]; [printInfoDict setObject: NSPrintSaveJob forKey: NSPrintJobDisposition];
[printInfoDict setObject: jobSavingURL forKey: NSPrintJobSavingURL]; [printInfoDict setObject: jobSavingURL forKey: NSPrintJobSavingURL];

View file

@ -63,7 +63,7 @@ public:
uint32_t GetNumPrinters() uint32_t GetNumPrinters()
{ return mGlobalPrinterList ? mGlobalPrinterList->Length() : 0; } { return mGlobalPrinterList ? mGlobalPrinterList->Length() : 0; }
nsString* GetStringAt(int32_t aInx) { return &mGlobalPrinterList->ElementAt(aInx); } nsString* GetStringAt(int32_t aInx) { return &mGlobalPrinterList->ElementAt(aInx); }
void GetDefaultPrinterName(char16_t **aDefaultPrinterName); void GetDefaultPrinterName(nsAString& aDefaultPrinterName);
protected: protected:
GlobalPrinters() {} GlobalPrinters() {}
@ -246,7 +246,7 @@ gboolean nsDeviceContextSpecGTK::PrinterEnumerator(GtkPrinter *aPrinter,
// Find the printer whose name matches the one inside the settings. // Find the printer whose name matches the one inside the settings.
nsString printerName; nsString printerName;
nsresult rv = nsresult rv =
spec->mPrintSettings->GetPrinterName(getter_Copies(printerName)); spec->mPrintSettings->GetPrinterName(printerName);
if (NS_SUCCEEDED(rv) && !printerName.IsVoid()) { if (NS_SUCCEEDED(rv) && !printerName.IsVoid()) {
NS_ConvertUTF16toUTF8 requestedName(printerName); NS_ConvertUTF16toUTF8 requestedName(printerName);
const char* currentName = gtk_printer_get_name(aPrinter); const char* currentName = gtk_printer_get_name(aPrinter);
@ -328,7 +328,7 @@ NS_IMETHODIMP nsDeviceContextSpecGTK::EndDocument()
// Handle print-to-file ourselves for the benefit of embedders // Handle print-to-file ourselves for the benefit of embedders
nsString targetPath; nsString targetPath;
nsCOMPtr<nsIFile> destFile; nsCOMPtr<nsIFile> destFile;
mPrintSettings->GetToFileName(getter_Copies(targetPath)); mPrintSettings->GetToFileName(targetPath);
nsresult rv = NS_NewLocalFile(targetPath, false, getter_AddRefs(destFile)); nsresult rv = NS_NewLocalFile(targetPath, false, getter_AddRefs(destFile));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
@ -388,18 +388,19 @@ NS_IMETHODIMP nsPrinterEnumeratorGTK::GetPrinterNameList(nsIStringEnumerator **a
return NS_NewAdoptingStringEnumerator(aPrinterNameList, printers); return NS_NewAdoptingStringEnumerator(aPrinterNameList, printers);
} }
NS_IMETHODIMP nsPrinterEnumeratorGTK::GetDefaultPrinterName(char16_t **aDefaultPrinterName) NS_IMETHODIMP nsPrinterEnumeratorGTK::GetDefaultPrinterName(nsAString& aDefaultPrinterName)
{ {
DO_PR_DEBUG_LOG(("nsPrinterEnumeratorGTK::GetDefaultPrinterName()\n")); DO_PR_DEBUG_LOG(("nsPrinterEnumeratorGTK::GetDefaultPrinterName()\n"));
NS_ENSURE_ARG_POINTER(aDefaultPrinterName);
GlobalPrinters::GetInstance()->GetDefaultPrinterName(aDefaultPrinterName); GlobalPrinters::GetInstance()->GetDefaultPrinterName(aDefaultPrinterName);
DO_PR_DEBUG_LOG(("GetDefaultPrinterName(): default printer='%s'.\n", NS_ConvertUTF16toUTF8(*aDefaultPrinterName).get())); DO_PR_DEBUG_LOG(("GetDefaultPrinterName(): default printer='%s'.\n", NS_ConvertUTF16toUTF8(aDefaultPrinterName).get()));
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrinterEnumeratorGTK::InitPrintSettingsFromPrinter(const char16_t *aPrinterName, nsIPrintSettings *aPrintSettings) NS_IMETHODIMP
nsPrinterEnumeratorGTK::InitPrintSettingsFromPrinter(const nsAString& aPrinterName,
nsIPrintSettings *aPrintSettings)
{ {
DO_PR_DEBUG_LOG(("nsPrinterEnumeratorGTK::InitPrintSettingsFromPrinter()")); DO_PR_DEBUG_LOG(("nsPrinterEnumeratorGTK::InitPrintSettingsFromPrinter()"));
@ -418,7 +419,7 @@ NS_IMETHODIMP nsPrinterEnumeratorGTK::InitPrintSettingsFromPrinter(const char16_
filename.AssignLiteral("mozilla.pdf"); filename.AssignLiteral("mozilla.pdf");
DO_PR_DEBUG_LOG(("Setting default filename to '%s'\n", filename.get())); DO_PR_DEBUG_LOG(("Setting default filename to '%s'\n", filename.get()));
aPrintSettings->SetToFileName(NS_ConvertUTF8toUTF16(filename).get()); aPrintSettings->SetToFileName(NS_ConvertUTF8toUTF16(filename));
aPrintSettings->SetIsInitializedFromPrinter(true); aPrintSettings->SetIsInitializedFromPrinter(true);
@ -470,9 +471,9 @@ void GlobalPrinters::FreeGlobalPrinters()
} }
void void
GlobalPrinters::GetDefaultPrinterName(char16_t **aDefaultPrinterName) GlobalPrinters::GetDefaultPrinterName(nsAString& aDefaultPrinterName)
{ {
*aDefaultPrinterName = nullptr; aDefaultPrinterName.Truncate();
bool allocate = !GlobalPrinters::GetInstance()->PrintersAreAllocated(); bool allocate = !GlobalPrinters::GetInstance()->PrintersAreAllocated();
@ -487,7 +488,7 @@ GlobalPrinters::GetDefaultPrinterName(char16_t **aDefaultPrinterName)
if (GlobalPrinters::GetInstance()->GetNumPrinters() == 0) if (GlobalPrinters::GetInstance()->GetNumPrinters() == 0)
return; return;
*aDefaultPrinterName = ToNewUnicode(*GlobalPrinters::GetInstance()->GetStringAt(0)); aDefaultPrinterName = *GlobalPrinters::GetInstance()->GetStringAt(0);
if (allocate) { if (allocate) {
GlobalPrinters::GetInstance()->FreeGlobalPrinters(); GlobalPrinters::GetInstance()->FreeGlobalPrinters();

View file

@ -277,9 +277,9 @@ nsPrintDialogWidgetGTK::nsPrintDialogWidgetGTK(nsPIDOMWindowOuter *aParent,
GtkWidget* header_footer_table = gtk_table_new(3, 3, FALSE); // 3x3 table GtkWidget* header_footer_table = gtk_table_new(3, 3, FALSE); // 3x3 table
nsString header_footer_str[3]; nsString header_footer_str[3];
aSettings->GetHeaderStrLeft(getter_Copies(header_footer_str[0])); aSettings->GetHeaderStrLeft(header_footer_str[0]);
aSettings->GetHeaderStrCenter(getter_Copies(header_footer_str[1])); aSettings->GetHeaderStrCenter(header_footer_str[1]);
aSettings->GetHeaderStrRight(getter_Copies(header_footer_str[2])); aSettings->GetHeaderStrRight(header_footer_str[2]);
for (unsigned int i = 0; i < ArrayLength(header_dropdown); i++) { for (unsigned int i = 0; i < ArrayLength(header_dropdown); i++) {
header_dropdown[i] = ConstructHeaderFooterDropdown(header_footer_str[i].get()); header_dropdown[i] = ConstructHeaderFooterDropdown(header_footer_str[i].get());
@ -296,9 +296,9 @@ nsPrintDialogWidgetGTK::nsPrintDialogWidgetGTK(nsPIDOMWindowOuter *aParent,
i, (i + 1), 1, 2, (GtkAttachOptions) 0, (GtkAttachOptions) 0, 2, 2); i, (i + 1), 1, 2, (GtkAttachOptions) 0, (GtkAttachOptions) 0, 2, 2);
} }
aSettings->GetFooterStrLeft(getter_Copies(header_footer_str[0])); aSettings->GetFooterStrLeft(header_footer_str[0]);
aSettings->GetFooterStrCenter(getter_Copies(header_footer_str[1])); aSettings->GetFooterStrCenter(header_footer_str[1]);
aSettings->GetFooterStrRight(getter_Copies(header_footer_str[2])); aSettings->GetFooterStrRight(header_footer_str[2]);
for (unsigned int i = 0; i < ArrayLength(footer_dropdown); i++) { for (unsigned int i = 0; i < ArrayLength(footer_dropdown); i++) {
footer_dropdown[i] = ConstructHeaderFooterDropdown(header_footer_str[i].get()); footer_dropdown[i] = ConstructHeaderFooterDropdown(header_footer_str[i].get());
@ -371,22 +371,22 @@ nsPrintDialogWidgetGTK::ExportHeaderFooter(nsIPrintSettings *aNS)
{ {
const char* header_footer_str; const char* header_footer_str;
header_footer_str = OptionWidgetToString(header_dropdown[0]); header_footer_str = OptionWidgetToString(header_dropdown[0]);
aNS->SetHeaderStrLeft(NS_ConvertUTF8toUTF16(header_footer_str).get()); aNS->SetHeaderStrLeft(NS_ConvertUTF8toUTF16(header_footer_str));
header_footer_str = OptionWidgetToString(header_dropdown[1]); header_footer_str = OptionWidgetToString(header_dropdown[1]);
aNS->SetHeaderStrCenter(NS_ConvertUTF8toUTF16(header_footer_str).get()); aNS->SetHeaderStrCenter(NS_ConvertUTF8toUTF16(header_footer_str));
header_footer_str = OptionWidgetToString(header_dropdown[2]); header_footer_str = OptionWidgetToString(header_dropdown[2]);
aNS->SetHeaderStrRight(NS_ConvertUTF8toUTF16(header_footer_str).get()); aNS->SetHeaderStrRight(NS_ConvertUTF8toUTF16(header_footer_str));
header_footer_str = OptionWidgetToString(footer_dropdown[0]); header_footer_str = OptionWidgetToString(footer_dropdown[0]);
aNS->SetFooterStrLeft(NS_ConvertUTF8toUTF16(header_footer_str).get()); aNS->SetFooterStrLeft(NS_ConvertUTF8toUTF16(header_footer_str));
header_footer_str = OptionWidgetToString(footer_dropdown[1]); header_footer_str = OptionWidgetToString(footer_dropdown[1]);
aNS->SetFooterStrCenter(NS_ConvertUTF8toUTF16(header_footer_str).get()); aNS->SetFooterStrCenter(NS_ConvertUTF8toUTF16(header_footer_str));
header_footer_str = OptionWidgetToString(footer_dropdown[2]); header_footer_str = OptionWidgetToString(footer_dropdown[2]);
aNS->SetFooterStrRight(NS_ConvertUTF8toUTF16(header_footer_str).get()); aNS->SetFooterStrRight(NS_ConvertUTF8toUTF16(header_footer_str));
} }
nsresult nsresult
@ -583,10 +583,10 @@ nsPrintDialogServiceGTK::ShowPageSetup(nsPIDOMWindowOuter *aParent,
nsCOMPtr<nsIPrintSettingsService> psService = do_GetService("@mozilla.org/gfx/printsettings-service;1"); nsCOMPtr<nsIPrintSettingsService> psService = do_GetService("@mozilla.org/gfx/printsettings-service;1");
if (psService) { if (psService) {
nsString printName; nsString printName;
aNSSettings->GetPrinterName(getter_Copies(printName)); aNSSettings->GetPrinterName(printName);
if (printName.IsVoid()) { if (printName.IsVoid()) {
psService->GetDefaultPrinterName(getter_Copies(printName)); psService->GetDefaultPrinterName(printName);
aNSSettings->SetPrinterName(printName.get()); aNSSettings->SetPrinterName(printName);
} }
psService->InitPrintSettingsFromPrefs(aNSSettings, true, nsIPrintSettings::kInitSaveAll); psService->InitPrintSettingsFromPrefs(aNSSettings, true, nsIPrintSettings::kInitSaveAll);
} }

View file

@ -409,12 +409,12 @@ nsPrintSettingsGTK::SetOrientation(int32_t aOrientation)
} }
NS_IMETHODIMP NS_IMETHODIMP
nsPrintSettingsGTK::GetToFileName(char16_t * *aToFileName) nsPrintSettingsGTK::GetToFileName(nsAString& aToFileName)
{ {
// Get the gtk output filename // Get the gtk output filename
const char* gtk_output_uri = gtk_print_settings_get(mPrintSettings, GTK_PRINT_SETTINGS_OUTPUT_URI); const char* gtk_output_uri = gtk_print_settings_get(mPrintSettings, GTK_PRINT_SETTINGS_OUTPUT_URI);
if (!gtk_output_uri) { if (!gtk_output_uri) {
*aToFileName = ToNewUnicode(mToFileName); aToFileName = mToFileName;
return NS_OK; return NS_OK;
} }
@ -426,33 +426,27 @@ nsPrintSettingsGTK::GetToFileName(char16_t * *aToFileName)
return rv; return rv;
// Extract the path // Extract the path
nsAutoString path; return file->GetPath(aToFileName);
rv = file->GetPath(path);
NS_ENSURE_SUCCESS(rv, rv);
*aToFileName = ToNewUnicode(path);
return NS_OK;
} }
NS_IMETHODIMP NS_IMETHODIMP
nsPrintSettingsGTK::SetToFileName(const char16_t * aToFileName) nsPrintSettingsGTK::SetToFileName(const nsAString& aToFileName)
{ {
if (aToFileName[0] == 0) { if (aToFileName.IsEmpty()) {
mToFileName.SetLength(0); mToFileName.SetLength(0);
gtk_print_settings_set(mPrintSettings, GTK_PRINT_SETTINGS_OUTPUT_URI, gtk_print_settings_set(mPrintSettings, GTK_PRINT_SETTINGS_OUTPUT_URI,
nullptr); nullptr);
return NS_OK; return NS_OK;
} }
if (StringEndsWith(nsDependentString(aToFileName), NS_LITERAL_STRING(".ps"))) { if (StringEndsWith(aToFileName, NS_LITERAL_STRING(".ps"))) {
gtk_print_settings_set(mPrintSettings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT, "ps"); gtk_print_settings_set(mPrintSettings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT, "ps");
} else { } else {
gtk_print_settings_set(mPrintSettings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT, "pdf"); gtk_print_settings_set(mPrintSettings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT, "pdf");
} }
nsCOMPtr<nsIFile> file; nsCOMPtr<nsIFile> file;
nsresult rv = NS_NewLocalFile(nsDependentString(aToFileName), true, nsresult rv = NS_NewLocalFile(aToFileName, true, getter_AddRefs(file));
getter_AddRefs(file));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
// Convert the nsIFile to a URL // Convert the nsIFile to a URL
@ -467,7 +461,7 @@ nsPrintSettingsGTK::SetToFileName(const char16_t * aToFileName)
} }
NS_IMETHODIMP NS_IMETHODIMP
nsPrintSettingsGTK::GetPrinterName(char16_t * *aPrinter) nsPrintSettingsGTK::GetPrinterName(nsAString& aPrinter)
{ {
const char* gtkPrintName = gtk_print_settings_get_printer(mPrintSettings); const char* gtkPrintName = gtk_print_settings_get_printer(mPrintSettings);
if (!gtkPrintName) { if (!gtkPrintName) {
@ -475,17 +469,16 @@ nsPrintSettingsGTK::GetPrinterName(char16_t * *aPrinter)
gtkPrintName = gtk_printer_get_name(mGTKPrinter); gtkPrintName = gtk_printer_get_name(mGTKPrinter);
} else { } else {
// This mimics what nsPrintSettingsImpl does when we try to Get before we Set // This mimics what nsPrintSettingsImpl does when we try to Get before we Set
nsString nullPrintName; aPrinter.Truncate();
*aPrinter = ToNewUnicode(nullPrintName);
return NS_OK; return NS_OK;
} }
} }
*aPrinter = UTF8ToNewUnicode(nsDependentCString(gtkPrintName)); aPrinter = NS_ConvertUTF8toUTF16(gtkPrintName);
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP NS_IMETHODIMP
nsPrintSettingsGTK::SetPrinterName(const char16_t * aPrinter) nsPrintSettingsGTK::SetPrinterName(const nsAString& aPrinter)
{ {
NS_ConvertUTF16toUTF8 gtkPrinter(aPrinter); NS_ConvertUTF16toUTF8 gtkPrinter(aPrinter);
@ -537,16 +530,15 @@ nsPrintSettingsGTK::SetScaling(double aScaling)
} }
NS_IMETHODIMP NS_IMETHODIMP
nsPrintSettingsGTK::GetPaperName(char16_t * *aPaperName) nsPrintSettingsGTK::GetPaperName(nsAString& aPaperName)
{ {
NS_ENSURE_ARG_POINTER(aPaperName);
const gchar* name = const gchar* name =
gtk_paper_size_get_name(gtk_page_setup_get_paper_size(mPageSetup)); gtk_paper_size_get_name(gtk_page_setup_get_paper_size(mPageSetup));
*aPaperName = ToNewUnicode(NS_ConvertUTF8toUTF16(name)); aPaperName = NS_ConvertUTF8toUTF16(name);
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP NS_IMETHODIMP
nsPrintSettingsGTK::SetPaperName(const char16_t * aPaperName) nsPrintSettingsGTK::SetPaperName(const nsAString& aPaperName)
{ {
NS_ConvertUTF16toUTF8 gtkPaperName(aPaperName); NS_ConvertUTF16toUTF8 gtkPaperName(aPaperName);

View file

@ -68,13 +68,13 @@ public:
NS_IMETHOD GetOrientation(int32_t *aOrientation) override; NS_IMETHOD GetOrientation(int32_t *aOrientation) override;
NS_IMETHOD SetOrientation(int32_t aOrientation) override; NS_IMETHOD SetOrientation(int32_t aOrientation) override;
NS_IMETHOD GetToFileName(char16_t * *aToFileName) override; NS_IMETHOD GetToFileName(nsAString& aToFileName) override;
NS_IMETHOD SetToFileName(const char16_t * aToFileName) override; NS_IMETHOD SetToFileName(const nsAString& aToFileName) override;
// Gets/Sets the printer name in the GtkPrintSettings. If no printer name is specified there, // Gets/Sets the printer name in the GtkPrintSettings. If no printer name is specified there,
// you will get back the name of the current internal GtkPrinter. // you will get back the name of the current internal GtkPrinter.
NS_IMETHOD GetPrinterName(char16_t * *aPrinter) override; NS_IMETHOD GetPrinterName(nsAString& Printer) override;
NS_IMETHOD SetPrinterName(const char16_t * aPrinter) override; NS_IMETHOD SetPrinterName(const nsAString& aPrinter) override;
// Number of copies is stored/gotten from the GtkPrintSettings. // Number of copies is stored/gotten from the GtkPrintSettings.
NS_IMETHOD GetNumCopies(int32_t *aNumCopies) override; NS_IMETHOD GetNumCopies(int32_t *aNumCopies) override;
@ -84,8 +84,8 @@ public:
NS_IMETHOD SetScaling(double aScaling) override; NS_IMETHOD SetScaling(double aScaling) override;
// A name recognised by GTK is strongly advised here, as this is used to create a GtkPaperSize. // A name recognised by GTK is strongly advised here, as this is used to create a GtkPaperSize.
NS_IMETHOD GetPaperName(char16_t * *aPaperName) override; NS_IMETHOD GetPaperName(nsAString& aPaperName) override;
NS_IMETHOD SetPaperName(const char16_t * aPaperName) override; NS_IMETHOD SetPaperName(const nsAString& aPaperName) override;
NS_IMETHOD SetUnwriteableMarginInTwips(nsIntMargin& aUnwriteableMargin) override; NS_IMETHOD SetUnwriteableMarginInTwips(nsIntMargin& aUnwriteableMargin) override;
NS_IMETHOD SetUnwriteableMarginTop(double aUnwriteableMarginTop) override; NS_IMETHOD SetUnwriteableMarginTop(double aUnwriteableMarginTop) override;

View file

@ -202,16 +202,16 @@ interface nsIPrintSettings : nsISupports
attribute short printRange; attribute short printRange;
attribute wstring title; attribute AString title;
attribute wstring docURL; attribute AString docURL;
attribute wstring headerStrLeft; attribute AString headerStrLeft;
attribute wstring headerStrCenter; attribute AString headerStrCenter;
attribute wstring headerStrRight; attribute AString headerStrRight;
attribute wstring footerStrLeft; attribute AString footerStrLeft;
attribute wstring footerStrCenter; attribute AString footerStrCenter;
attribute wstring footerStrRight; attribute AString footerStrRight;
attribute short howToEnableFrameUI; /* indicates how to enable the frameset UI */ attribute short howToEnableFrameUI; /* indicates how to enable the frameset UI */
attribute boolean isCancelled; /* indicates whether the print job has been cancelled */ attribute boolean isCancelled; /* indicates whether the print job has been cancelled */
@ -222,7 +222,7 @@ interface nsIPrintSettings : nsISupports
attribute boolean showPrintProgress; /* indicates whether the progress dialog should be shown */ attribute boolean showPrintProgress; /* indicates whether the progress dialog should be shown */
/* Additional XP Related */ /* Additional XP Related */
attribute wstring paperName; /* name of paper */ attribute AString paperName; /* name of paper */
attribute short paperData; /* native data value */ attribute short paperData; /* native data value */
attribute double paperWidth; /* width of the paper in inches or mm */ attribute double paperWidth; /* width of the paper in inches or mm */
attribute double paperHeight; /* height of the paper in inches or mm */ attribute double paperHeight; /* height of the paper in inches or mm */
@ -233,10 +233,10 @@ interface nsIPrintSettings : nsISupports
attribute long orientation; /* see orientation consts */ attribute long orientation; /* see orientation consts */
attribute long numCopies; attribute long numCopies;
attribute wstring printerName; /* name of destination printer */ attribute AString printerName; /* name of destination printer */
attribute boolean printToFile; attribute boolean printToFile;
attribute wstring toFileName; attribute AString toFileName;
attribute short outputFormat; attribute short outputFormat;
attribute long printPageDelay; /* in milliseconds */ attribute long printPageDelay; /* in milliseconds */

View file

@ -58,7 +58,7 @@ interface nsIPrintSettingsService : nsISupports
/** /**
* The name of the last printer used, or else the system default printer. * The name of the last printer used, or else the system default printer.
*/ */
readonly attribute wstring defaultPrinterName; readonly attribute AString defaultPrinterName;
/** /**
* Initializes certain settings from the native printer into the PrintSettings * Initializes certain settings from the native printer into the PrintSettings
@ -68,7 +68,8 @@ interface nsIPrintSettingsService : nsISupports
* Page Size * Page Size
* Number of Copies * Number of Copies
*/ */
void initPrintSettingsFromPrinter(in wstring aPrinterName, in nsIPrintSettings aPrintSettings); void initPrintSettingsFromPrinter(in AString aPrinterName,
in nsIPrintSettings aPrintSettings);
/** /**
* Reads PrintSettings values from Prefs, * Reads PrintSettings values from Prefs,

View file

@ -35,8 +35,8 @@ interface nsIPrintSettingsWin : nsISupports
* via the "m_pd" data member of the CPrintDialog * via the "m_pd" data member of the CPrintDialog
* in MFC. * in MFC.
*/ */
[noscript] attribute wstring deviceName; [noscript] attribute AString deviceName;
[noscript] attribute wstring driverName; [noscript] attribute AString driverName;
[noscript] attribute nsDevMode devMode; [noscript] attribute nsDevMode devMode;

View file

@ -18,7 +18,7 @@ interface nsIPrinterEnumerator : nsISupports
* default printer; see nsIPrintSettingsService.defaultPrinterName * default printer; see nsIPrintSettingsService.defaultPrinterName
* for that. * for that.
*/ */
readonly attribute wstring defaultPrinterName; readonly attribute AString defaultPrinterName;
/** /**
* Initializes certain settings from the native printer into the PrintSettings * Initializes certain settings from the native printer into the PrintSettings
@ -27,7 +27,8 @@ interface nsIPrinterEnumerator : nsISupports
* Page Size * Page Size
* Number of Copies * Number of Copies
*/ */
void initPrintSettingsFromPrinter(in wstring aPrinterName, in nsIPrintSettings aPrintSettings); void initPrintSettingsFromPrinter(in AString aPrinterName,
in nsIPrintSettings aPrintSettings);
/** /**
* The list of printer names * The list of printer names

View file

@ -138,40 +138,16 @@ nsPrintOptions::SerializeToPrintData(nsIPrintSettings* aSettings,
aSettings->GetPrintBGImages(&data->printBGImages()); aSettings->GetPrintBGImages(&data->printBGImages());
aSettings->GetPrintRange(&data->printRange()); aSettings->GetPrintRange(&data->printRange());
// I have no idea if I'm doing this string copying correctly... aSettings->GetTitle(data->title());
nsString title; aSettings->GetDocURL(data->docURL());
aSettings->GetTitle(getter_Copies(title));
data->title() = title;
nsString docURL; aSettings->GetHeaderStrLeft(data->headerStrLeft());
aSettings->GetDocURL(getter_Copies(docURL)); aSettings->GetHeaderStrCenter(data->headerStrCenter());
data->docURL() = docURL; aSettings->GetHeaderStrRight(data->headerStrRight());
// Header strings... aSettings->GetFooterStrLeft(data->footerStrLeft());
nsString headerStrLeft; aSettings->GetFooterStrCenter(data->footerStrCenter());
aSettings->GetHeaderStrLeft(getter_Copies(headerStrLeft)); aSettings->GetFooterStrRight(data->footerStrRight());
data->headerStrLeft() = headerStrLeft;
nsString headerStrCenter;
aSettings->GetHeaderStrCenter(getter_Copies(headerStrCenter));
data->headerStrCenter() = headerStrCenter;
nsString headerStrRight;
aSettings->GetHeaderStrRight(getter_Copies(headerStrRight));
data->headerStrRight() = headerStrRight;
// Footer strings...
nsString footerStrLeft;
aSettings->GetFooterStrLeft(getter_Copies(footerStrLeft));
data->footerStrLeft() = footerStrLeft;
nsString footerStrCenter;
aSettings->GetFooterStrCenter(getter_Copies(footerStrCenter));
data->footerStrCenter() = footerStrCenter;
nsString footerStrRight;
aSettings->GetFooterStrRight(getter_Copies(footerStrRight));
data->footerStrRight() = footerStrRight;
aSettings->GetHowToEnableFrameUI(&data->howToEnableFrameUI()); aSettings->GetHowToEnableFrameUI(&data->howToEnableFrameUI());
aSettings->GetIsCancelled(&data->isCancelled()); aSettings->GetIsCancelled(&data->isCancelled());
@ -181,10 +157,7 @@ nsPrintOptions::SerializeToPrintData(nsIPrintSettings* aSettings,
aSettings->GetShrinkToFit(&data->shrinkToFit()); aSettings->GetShrinkToFit(&data->shrinkToFit());
aSettings->GetShowPrintProgress(&data->showPrintProgress()); aSettings->GetShowPrintProgress(&data->showPrintProgress());
nsString paperName; aSettings->GetPaperName(data->paperName());
aSettings->GetPaperName(getter_Copies(paperName));
data->paperName() = paperName;
aSettings->GetPaperData(&data->paperData()); aSettings->GetPaperData(&data->paperData());
aSettings->GetPaperWidth(&data->paperWidth()); aSettings->GetPaperWidth(&data->paperWidth());
aSettings->GetPaperHeight(&data->paperHeight()); aSettings->GetPaperHeight(&data->paperHeight());
@ -196,15 +169,11 @@ nsPrintOptions::SerializeToPrintData(nsIPrintSettings* aSettings,
aSettings->GetNumCopies(&data->numCopies()); aSettings->GetNumCopies(&data->numCopies());
nsString printerName; aSettings->GetPrinterName(data->printerName());
aSettings->GetPrinterName(getter_Copies(printerName));
data->printerName() = printerName;
aSettings->GetPrintToFile(&data->printToFile()); aSettings->GetPrintToFile(&data->printToFile());
nsString toFileName; aSettings->GetToFileName(data->toFileName());
aSettings->GetToFileName(getter_Copies(toFileName));
data->toFileName() = toFileName;
aSettings->GetOutputFormat(&data->outputFormat()); aSettings->GetOutputFormat(&data->outputFormat());
aSettings->GetPrintPageDelay(&data->printPageDelay()); aSettings->GetPrintPageDelay(&data->printPageDelay());
@ -276,19 +245,18 @@ nsPrintOptions::DeserializeToPrintSettings(const PrintData& data,
settings->SetPrintBGImages(data.printBGImages()); settings->SetPrintBGImages(data.printBGImages());
settings->SetPrintRange(data.printRange()); settings->SetPrintRange(data.printRange());
// I have no idea if I'm doing this string copying correctly... settings->SetTitle(data.title());
settings->SetTitle(data.title().get()); settings->SetDocURL(data.docURL());
settings->SetDocURL(data.docURL().get());
// Header strings... // Header strings...
settings->SetHeaderStrLeft(data.headerStrLeft().get()); settings->SetHeaderStrLeft(data.headerStrLeft());
settings->SetHeaderStrCenter(data.headerStrCenter().get()); settings->SetHeaderStrCenter(data.headerStrCenter());
settings->SetHeaderStrRight(data.headerStrRight().get()); settings->SetHeaderStrRight(data.headerStrRight());
// Footer strings... // Footer strings...
settings->SetFooterStrLeft(data.footerStrLeft().get()); settings->SetFooterStrLeft(data.footerStrLeft());
settings->SetFooterStrCenter(data.footerStrCenter().get()); settings->SetFooterStrCenter(data.footerStrCenter());
settings->SetFooterStrRight(data.footerStrRight().get()); settings->SetFooterStrRight(data.footerStrRight());
settings->SetHowToEnableFrameUI(data.howToEnableFrameUI()); settings->SetHowToEnableFrameUI(data.howToEnableFrameUI());
settings->SetIsCancelled(data.isCancelled()); settings->SetIsCancelled(data.isCancelled());
@ -298,7 +266,7 @@ nsPrintOptions::DeserializeToPrintSettings(const PrintData& data,
settings->SetShrinkToFit(data.shrinkToFit()); settings->SetShrinkToFit(data.shrinkToFit());
settings->SetShowPrintProgress(data.showPrintProgress()); settings->SetShowPrintProgress(data.showPrintProgress());
settings->SetPaperName(data.paperName().get()); settings->SetPaperName(data.paperName());
settings->SetPaperData(data.paperData()); settings->SetPaperData(data.paperData());
settings->SetPaperWidth(data.paperWidth()); settings->SetPaperWidth(data.paperWidth());
@ -311,11 +279,11 @@ nsPrintOptions::DeserializeToPrintSettings(const PrintData& data,
settings->SetNumCopies(data.numCopies()); settings->SetNumCopies(data.numCopies());
settings->SetPrinterName(data.printerName().get()); settings->SetPrinterName(data.printerName());
settings->SetPrintToFile(data.printToFile()); settings->SetPrintToFile(data.printToFile());
settings->SetToFileName(data.toFileName().get()); settings->SetToFileName(data.toFileName());
settings->SetOutputFormat(data.outputFormat()); settings->SetOutputFormat(data.outputFormat());
settings->SetPrintPageDelay(data.printPageDelay()); settings->SetPrintPageDelay(data.printPageDelay());
@ -533,7 +501,7 @@ nsPrintOptions::ReadPrefs(nsIPrintSettings* aPS, const nsAString& aPrinterName,
DUMP_DBL(kReadStr, kPrintPaperWidth, width); DUMP_DBL(kReadStr, kPrintPaperWidth, width);
aPS->SetPaperHeight(height); aPS->SetPaperHeight(height);
DUMP_DBL(kReadStr, kPrintPaperHeight, height); DUMP_DBL(kReadStr, kPrintPaperHeight, height);
aPS->SetPaperName(str.get()); aPS->SetPaperName(str);
DUMP_STR(kReadStr, kPrintPaperName, str.get()); DUMP_STR(kReadStr, kPrintPaperName, str.get());
#if defined(XP_WIN) #if defined(XP_WIN)
if (saveSanitizedSizePrefs) { if (saveSanitizedSizePrefs) {
@ -560,42 +528,42 @@ nsPrintOptions::ReadPrefs(nsIPrintSettings* aPS, const nsAString& aPrinterName,
if (aFlags & nsIPrintSettings::kInitSaveHeaderLeft) { if (aFlags & nsIPrintSettings::kInitSaveHeaderLeft) {
if (GETSTRPREF(kPrintHeaderStrLeft, str)) { if (GETSTRPREF(kPrintHeaderStrLeft, str)) {
aPS->SetHeaderStrLeft(str.get()); aPS->SetHeaderStrLeft(str);
DUMP_STR(kReadStr, kPrintHeaderStrLeft, str.get()); DUMP_STR(kReadStr, kPrintHeaderStrLeft, str.get());
} }
} }
if (aFlags & nsIPrintSettings::kInitSaveHeaderCenter) { if (aFlags & nsIPrintSettings::kInitSaveHeaderCenter) {
if (GETSTRPREF(kPrintHeaderStrCenter, str)) { if (GETSTRPREF(kPrintHeaderStrCenter, str)) {
aPS->SetHeaderStrCenter(str.get()); aPS->SetHeaderStrCenter(str);
DUMP_STR(kReadStr, kPrintHeaderStrCenter, str.get()); DUMP_STR(kReadStr, kPrintHeaderStrCenter, str.get());
} }
} }
if (aFlags & nsIPrintSettings::kInitSaveHeaderRight) { if (aFlags & nsIPrintSettings::kInitSaveHeaderRight) {
if (GETSTRPREF(kPrintHeaderStrRight, str)) { if (GETSTRPREF(kPrintHeaderStrRight, str)) {
aPS->SetHeaderStrRight(str.get()); aPS->SetHeaderStrRight(str);
DUMP_STR(kReadStr, kPrintHeaderStrRight, str.get()); DUMP_STR(kReadStr, kPrintHeaderStrRight, str.get());
} }
} }
if (aFlags & nsIPrintSettings::kInitSaveFooterLeft) { if (aFlags & nsIPrintSettings::kInitSaveFooterLeft) {
if (GETSTRPREF(kPrintFooterStrLeft, str)) { if (GETSTRPREF(kPrintFooterStrLeft, str)) {
aPS->SetFooterStrLeft(str.get()); aPS->SetFooterStrLeft(str);
DUMP_STR(kReadStr, kPrintFooterStrLeft, str.get()); DUMP_STR(kReadStr, kPrintFooterStrLeft, str.get());
} }
} }
if (aFlags & nsIPrintSettings::kInitSaveFooterCenter) { if (aFlags & nsIPrintSettings::kInitSaveFooterCenter) {
if (GETSTRPREF(kPrintFooterStrCenter, str)) { if (GETSTRPREF(kPrintFooterStrCenter, str)) {
aPS->SetFooterStrCenter(str.get()); aPS->SetFooterStrCenter(str);
DUMP_STR(kReadStr, kPrintFooterStrCenter, str.get()); DUMP_STR(kReadStr, kPrintFooterStrCenter, str.get());
} }
} }
if (aFlags & nsIPrintSettings::kInitSaveFooterRight) { if (aFlags & nsIPrintSettings::kInitSaveFooterRight) {
if (GETSTRPREF(kPrintFooterStrRight, str)) { if (GETSTRPREF(kPrintFooterStrRight, str)) {
aPS->SetFooterStrRight(str.get()); aPS->SetFooterStrRight(str);
DUMP_STR(kReadStr, kPrintFooterStrRight, str.get()); DUMP_STR(kReadStr, kPrintFooterStrRight, str.get());
} }
} }
@ -651,7 +619,7 @@ nsPrintOptions::ReadPrefs(nsIPrintSettings* aPS, const nsAString& aPrinterName,
if (aFlags & nsIPrintSettings::kInitSaveToFileName) { if (aFlags & nsIPrintSettings::kInitSaveToFileName) {
if (GETSTRPREF(kPrintToFileName, str)) { if (GETSTRPREF(kPrintToFileName, str)) {
aPS->SetToFileName(str.get()); aPS->SetToFileName(str);
DUMP_STR(kReadStr, kPrintToFileName, str.get()); DUMP_STR(kReadStr, kPrintToFileName, str.get());
} }
} }
@ -771,7 +739,7 @@ nsPrintOptions::WritePrefs(nsIPrintSettings *aPS, const nsAString& aPrinterName,
NS_SUCCEEDED(aPS->GetPaperSizeUnit(&sizeUnit)) && NS_SUCCEEDED(aPS->GetPaperSizeUnit(&sizeUnit)) &&
NS_SUCCEEDED(aPS->GetPaperWidth(&width)) && NS_SUCCEEDED(aPS->GetPaperWidth(&width)) &&
NS_SUCCEEDED(aPS->GetPaperHeight(&height)) && NS_SUCCEEDED(aPS->GetPaperHeight(&height)) &&
NS_SUCCEEDED(aPS->GetPaperName(getter_Copies(name))) NS_SUCCEEDED(aPS->GetPaperName(name))
) { ) {
DUMP_INT(kWriteStr, kPrintPaperSizeUnit, sizeUnit); DUMP_INT(kWriteStr, kPrintPaperSizeUnit, sizeUnit);
Preferences::SetInt(GetPrefName(kPrintPaperSizeUnit, aPrinterName), Preferences::SetInt(GetPrefName(kPrintPaperSizeUnit, aPrinterName),
@ -822,7 +790,7 @@ nsPrintOptions::WritePrefs(nsIPrintSettings *aPS, const nsAString& aPrinterName,
} }
if (aFlags & nsIPrintSettings::kInitSaveHeaderLeft) { if (aFlags & nsIPrintSettings::kInitSaveHeaderLeft) {
if (NS_SUCCEEDED(aPS->GetHeaderStrLeft(getter_Copies(uStr)))) { if (NS_SUCCEEDED(aPS->GetHeaderStrLeft(uStr))) {
DUMP_STR(kWriteStr, kPrintHeaderStrLeft, uStr.get()); DUMP_STR(kWriteStr, kPrintHeaderStrLeft, uStr.get());
Preferences::SetString(GetPrefName(kPrintHeaderStrLeft, aPrinterName), Preferences::SetString(GetPrefName(kPrintHeaderStrLeft, aPrinterName),
uStr); uStr);
@ -830,7 +798,7 @@ nsPrintOptions::WritePrefs(nsIPrintSettings *aPS, const nsAString& aPrinterName,
} }
if (aFlags & nsIPrintSettings::kInitSaveHeaderCenter) { if (aFlags & nsIPrintSettings::kInitSaveHeaderCenter) {
if (NS_SUCCEEDED(aPS->GetHeaderStrCenter(getter_Copies(uStr)))) { if (NS_SUCCEEDED(aPS->GetHeaderStrCenter(uStr))) {
DUMP_STR(kWriteStr, kPrintHeaderStrCenter, uStr.get()); DUMP_STR(kWriteStr, kPrintHeaderStrCenter, uStr.get());
Preferences::SetString(GetPrefName(kPrintHeaderStrCenter, aPrinterName), Preferences::SetString(GetPrefName(kPrintHeaderStrCenter, aPrinterName),
uStr); uStr);
@ -838,7 +806,7 @@ nsPrintOptions::WritePrefs(nsIPrintSettings *aPS, const nsAString& aPrinterName,
} }
if (aFlags & nsIPrintSettings::kInitSaveHeaderRight) { if (aFlags & nsIPrintSettings::kInitSaveHeaderRight) {
if (NS_SUCCEEDED(aPS->GetHeaderStrRight(getter_Copies(uStr)))) { if (NS_SUCCEEDED(aPS->GetHeaderStrRight(uStr))) {
DUMP_STR(kWriteStr, kPrintHeaderStrRight, uStr.get()); DUMP_STR(kWriteStr, kPrintHeaderStrRight, uStr.get());
Preferences::SetString(GetPrefName(kPrintHeaderStrRight, aPrinterName), Preferences::SetString(GetPrefName(kPrintHeaderStrRight, aPrinterName),
uStr); uStr);
@ -846,7 +814,7 @@ nsPrintOptions::WritePrefs(nsIPrintSettings *aPS, const nsAString& aPrinterName,
} }
if (aFlags & nsIPrintSettings::kInitSaveFooterLeft) { if (aFlags & nsIPrintSettings::kInitSaveFooterLeft) {
if (NS_SUCCEEDED(aPS->GetFooterStrLeft(getter_Copies(uStr)))) { if (NS_SUCCEEDED(aPS->GetFooterStrLeft(uStr))) {
DUMP_STR(kWriteStr, kPrintFooterStrLeft, uStr.get()); DUMP_STR(kWriteStr, kPrintFooterStrLeft, uStr.get());
Preferences::SetString(GetPrefName(kPrintFooterStrLeft, aPrinterName), Preferences::SetString(GetPrefName(kPrintFooterStrLeft, aPrinterName),
uStr); uStr);
@ -854,7 +822,7 @@ nsPrintOptions::WritePrefs(nsIPrintSettings *aPS, const nsAString& aPrinterName,
} }
if (aFlags & nsIPrintSettings::kInitSaveFooterCenter) { if (aFlags & nsIPrintSettings::kInitSaveFooterCenter) {
if (NS_SUCCEEDED(aPS->GetFooterStrCenter(getter_Copies(uStr)))) { if (NS_SUCCEEDED(aPS->GetFooterStrCenter(uStr))) {
DUMP_STR(kWriteStr, kPrintFooterStrCenter, uStr.get()); DUMP_STR(kWriteStr, kPrintFooterStrCenter, uStr.get());
Preferences::SetString(GetPrefName(kPrintFooterStrCenter, aPrinterName), Preferences::SetString(GetPrefName(kPrintFooterStrCenter, aPrinterName),
uStr); uStr);
@ -862,7 +830,7 @@ nsPrintOptions::WritePrefs(nsIPrintSettings *aPS, const nsAString& aPrinterName,
} }
if (aFlags & nsIPrintSettings::kInitSaveFooterRight) { if (aFlags & nsIPrintSettings::kInitSaveFooterRight) {
if (NS_SUCCEEDED(aPS->GetFooterStrRight(getter_Copies(uStr)))) { if (NS_SUCCEEDED(aPS->GetFooterStrRight(uStr))) {
DUMP_STR(kWriteStr, kPrintFooterStrRight, uStr.get()); DUMP_STR(kWriteStr, kPrintFooterStrRight, uStr.get());
Preferences::SetString(GetPrefName(kPrintFooterStrRight, aPrinterName), Preferences::SetString(GetPrefName(kPrintFooterStrRight, aPrinterName),
uStr); uStr);
@ -915,7 +883,7 @@ nsPrintOptions::WritePrefs(nsIPrintSettings *aPS, const nsAString& aPrinterName,
// Only the general version of this pref is saved // Only the general version of this pref is saved
if ((aFlags & nsIPrintSettings::kInitSavePrinterName) if ((aFlags & nsIPrintSettings::kInitSavePrinterName)
&& aPrinterName.IsEmpty()) { && aPrinterName.IsEmpty()) {
if (NS_SUCCEEDED(aPS->GetPrinterName(getter_Copies(uStr)))) { if (NS_SUCCEEDED(aPS->GetPrinterName(uStr))) {
DUMP_STR(kWriteStr, kPrinterName, uStr.get()); DUMP_STR(kWriteStr, kPrinterName, uStr.get());
Preferences::SetString(kPrinterName, uStr); Preferences::SetString(kPrinterName, uStr);
} }
@ -929,7 +897,7 @@ nsPrintOptions::WritePrefs(nsIPrintSettings *aPS, const nsAString& aPrinterName,
} }
if (aFlags & nsIPrintSettings::kInitSaveToFileName) { if (aFlags & nsIPrintSettings::kInitSaveToFileName) {
if (NS_SUCCEEDED(aPS->GetToFileName(getter_Copies(uStr)))) { if (NS_SUCCEEDED(aPS->GetToFileName(uStr))) {
DUMP_STR(kWriteStr, kPrintToFileName, uStr.get()); DUMP_STR(kWriteStr, kPrintToFileName, uStr.get());
Preferences::SetString(GetPrefName(kPrintToFileName, aPrinterName), uStr); Preferences::SetString(GetPrefName(kPrintToFileName, aPrinterName), uStr);
} }
@ -985,9 +953,9 @@ nsresult nsPrintOptions::_CreatePrintSettings(nsIPrintSettings **_retval)
NS_ADDREF(*_retval = printSettings); // ref count NS_ADDREF(*_retval = printSettings); // ref count
nsString printerName; nsString printerName;
nsresult rv = GetDefaultPrinterName(getter_Copies(printerName)); nsresult rv = GetDefaultPrinterName(printerName);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
(*_retval)->SetPrinterName(printerName.get()); (*_retval)->SetPrinterName(printerName);
(void)InitPrintSettingsFromPrefs(*_retval, false, (void)InitPrintSettingsFromPrefs(*_retval, false,
nsIPrintSettings::kInitSaveAll); nsIPrintSettings::kInitSaveAll);
@ -1015,7 +983,7 @@ nsPrintOptions::GetNewPrintSettings(nsIPrintSettings * *aNewPrintSettings)
} }
NS_IMETHODIMP NS_IMETHODIMP
nsPrintOptions::GetDefaultPrinterName(char16_t * *aDefaultPrinterName) nsPrintOptions::GetDefaultPrinterName(nsAString& aDefaultPrinterName)
{ {
nsresult rv; nsresult rv;
nsCOMPtr<nsIPrinterEnumerator> prtEnum = nsCOMPtr<nsIPrinterEnumerator> prtEnum =
@ -1040,7 +1008,7 @@ nsPrintOptions::GetDefaultPrinterName(char16_t * *aDefaultPrinterName)
} }
} }
if (isValid) { if (isValid) {
*aDefaultPrinterName = ToNewUnicode(lastPrinterName); aDefaultPrinterName = lastPrinterName;
return NS_OK; return NS_OK;
} }
} }
@ -1052,7 +1020,7 @@ nsPrintOptions::GetDefaultPrinterName(char16_t * *aDefaultPrinterName)
} }
NS_IMETHODIMP NS_IMETHODIMP
nsPrintOptions::InitPrintSettingsFromPrinter(const char16_t *aPrinterName, nsPrintOptions::InitPrintSettingsFromPrinter(const nsAString& aPrinterName,
nsIPrintSettings *aPrintSettings) nsIPrintSettings *aPrintSettings)
{ {
// Don't get print settings from the printer in the child when printing via // Don't get print settings from the printer in the child when printing via
@ -1062,11 +1030,10 @@ nsPrintOptions::InitPrintSettingsFromPrinter(const char16_t *aPrinterName,
} }
NS_ENSURE_ARG_POINTER(aPrintSettings); NS_ENSURE_ARG_POINTER(aPrintSettings);
NS_ENSURE_ARG_POINTER(aPrinterName);
#ifdef DEBUG #ifdef DEBUG
nsString printerName; nsString printerName;
aPrintSettings->GetPrinterName(getter_Copies(printerName)); aPrintSettings->GetPrinterName(printerName);
if (!printerName.Equals(aPrinterName)) { if (!printerName.Equals(aPrinterName)) {
NS_WARNING("Printer names should match!"); NS_WARNING("Printer names should match!");
} }
@ -1105,7 +1072,7 @@ GetAdjustedPrinterName(nsIPrintSettings* aPS, bool aUsePNP,
// Get the Printer Name from the PrintSettings // Get the Printer Name from the PrintSettings
// to use as a prefix for Pref Names // to use as a prefix for Pref Names
nsresult rv = aPS->GetPrinterName(getter_Copies(aPrinterName)); nsresult rv = aPS->GetPrinterName(aPrinterName);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
// Convert any whitespaces, carriage returns or newlines to _ // Convert any whitespaces, carriage returns or newlines to _

View file

@ -192,19 +192,15 @@ NS_IMETHODIMP nsPrintSettings::SetDuplex(const int32_t aDuplex)
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::GetPrinterName(char16_t * *aPrinter) NS_IMETHODIMP nsPrintSettings::GetPrinterName(nsAString& aPrinter)
{ {
NS_ENSURE_ARG_POINTER(aPrinter); aPrinter = mPrinter;
*aPrinter = ToNewUnicode(mPrinter);
NS_ENSURE_TRUE(*aPrinter, NS_ERROR_OUT_OF_MEMORY);
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::SetPrinterName(const char16_t * aPrinter) NS_IMETHODIMP nsPrintSettings::SetPrinterName(const nsAString& aPrinter)
{ {
if (!aPrinter || !mPrinter.Equals(aPrinter)) { if (!mPrinter.Equals(aPrinter)) {
mIsInitedFromPrinter = false; mIsInitedFromPrinter = false;
mIsInitedFromPrefs = false; mIsInitedFromPrefs = false;
} }
@ -237,19 +233,14 @@ NS_IMETHODIMP nsPrintSettings::SetPrintToFile(bool aPrintToFile)
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::GetToFileName(char16_t * *aToFileName) NS_IMETHODIMP nsPrintSettings::GetToFileName(nsAString& aToFileName)
{ {
//NS_ENSURE_ARG_POINTER(aToFileName); aToFileName = mToFileName;
*aToFileName = ToNewUnicode(mToFileName);
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::SetToFileName(const char16_t * aToFileName) NS_IMETHODIMP nsPrintSettings::SetToFileName(const nsAString& aToFileName)
{ {
if (aToFileName) {
mToFileName = aToFileName; mToFileName = aToFileName;
} else {
mToFileName.SetLength(0);
}
return NS_OK; return NS_OK;
} }
@ -501,43 +492,25 @@ NS_IMETHODIMP nsPrintSettings::SetPrintRange(int16_t aPrintRange)
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::GetTitle(char16_t * *aTitle) NS_IMETHODIMP nsPrintSettings::GetTitle(nsAString& aTitle)
{ {
NS_ENSURE_ARG_POINTER(aTitle); aTitle = mTitle;
if (!mTitle.IsEmpty()) {
*aTitle = ToNewUnicode(mTitle);
} else {
*aTitle = nullptr;
}
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::SetTitle(const char16_t * aTitle) NS_IMETHODIMP nsPrintSettings::SetTitle(const nsAString& aTitle)
{ {
if (aTitle) {
mTitle = aTitle; mTitle = aTitle;
} else {
mTitle.SetLength(0);
}
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::GetDocURL(char16_t * *aDocURL) NS_IMETHODIMP nsPrintSettings::GetDocURL(nsAString& aDocURL)
{ {
NS_ENSURE_ARG_POINTER(aDocURL); aDocURL = mURL;
if (!mURL.IsEmpty()) {
*aDocURL = ToNewUnicode(mURL);
} else {
*aDocURL = nullptr;
}
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::SetDocURL(const char16_t * aDocURL) NS_IMETHODIMP nsPrintSettings::SetDocURL(const nsAString& aDocURL)
{ {
if (aDocURL) {
mURL = aDocURL; mURL = aDocURL;
} else {
mURL.SetLength(0);
}
return NS_OK; return NS_OK;
} }
@ -586,103 +559,70 @@ nsPrintSettings::SetPrintOptionsBits(int32_t aBits)
return NS_OK; return NS_OK;
} }
nsresult NS_IMETHODIMP nsPrintSettings::GetHeaderStrLeft(nsAString& aTitle)
nsPrintSettings::GetMarginStrs(char16_t * *aTitle,
nsHeaderFooterEnum aType,
int16_t aJust)
{ {
NS_ENSURE_ARG_POINTER(aTitle); aTitle = mHeaderStrs[0];
*aTitle = nullptr; return NS_OK;
if (aType == eHeader) { }
switch (aJust) { NS_IMETHODIMP nsPrintSettings::SetHeaderStrLeft(const nsAString& aTitle)
case kJustLeft: *aTitle = ToNewUnicode(mHeaderStrs[0]);break; {
case kJustCenter: *aTitle = ToNewUnicode(mHeaderStrs[1]);break; mHeaderStrs[0] = aTitle;
case kJustRight: *aTitle = ToNewUnicode(mHeaderStrs[2]);break;
} //switch
} else {
switch (aJust) {
case kJustLeft: *aTitle = ToNewUnicode(mFooterStrs[0]);break;
case kJustCenter: *aTitle = ToNewUnicode(mFooterStrs[1]);break;
case kJustRight: *aTitle = ToNewUnicode(mFooterStrs[2]);break;
} //switch
}
return NS_OK; return NS_OK;
} }
nsresult NS_IMETHODIMP nsPrintSettings::GetHeaderStrCenter(nsAString& aTitle)
nsPrintSettings::SetMarginStrs(const char16_t * aTitle,
nsHeaderFooterEnum aType,
int16_t aJust)
{ {
NS_ENSURE_ARG_POINTER(aTitle); aTitle = mHeaderStrs[1];
if (aType == eHeader) { return NS_OK;
switch (aJust) { }
case kJustLeft: mHeaderStrs[0] = aTitle;break; NS_IMETHODIMP nsPrintSettings::SetHeaderStrCenter(const nsAString& aTitle)
case kJustCenter: mHeaderStrs[1] = aTitle;break; {
case kJustRight: mHeaderStrs[2] = aTitle;break; mHeaderStrs[1] = aTitle;
} //switch
} else {
switch (aJust) {
case kJustLeft: mFooterStrs[0] = aTitle;break;
case kJustCenter: mFooterStrs[1] = aTitle;break;
case kJustRight: mFooterStrs[2] = aTitle;break;
} //switch
}
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::GetHeaderStrLeft(char16_t * *aTitle) NS_IMETHODIMP nsPrintSettings::GetHeaderStrRight(nsAString& aTitle)
{ {
return GetMarginStrs(aTitle, eHeader, kJustLeft); aTitle = mHeaderStrs[2];
return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::SetHeaderStrLeft(const char16_t * aTitle) NS_IMETHODIMP nsPrintSettings::SetHeaderStrRight(const nsAString& aTitle)
{ {
return SetMarginStrs(aTitle, eHeader, kJustLeft); mHeaderStrs[2] = aTitle;
return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::GetHeaderStrCenter(char16_t * *aTitle) NS_IMETHODIMP nsPrintSettings::GetFooterStrLeft(nsAString& aTitle)
{ {
return GetMarginStrs(aTitle, eHeader, kJustCenter); aTitle = mFooterStrs[0];
return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::SetHeaderStrCenter(const char16_t * aTitle) NS_IMETHODIMP nsPrintSettings::SetFooterStrLeft(const nsAString& aTitle)
{ {
return SetMarginStrs(aTitle, eHeader, kJustCenter); mFooterStrs[0] = aTitle;
return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::GetHeaderStrRight(char16_t * *aTitle) NS_IMETHODIMP nsPrintSettings::GetFooterStrCenter(nsAString& aTitle)
{ {
return GetMarginStrs(aTitle, eHeader, kJustRight); aTitle = mFooterStrs[1];
return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::SetHeaderStrRight(const char16_t * aTitle) NS_IMETHODIMP nsPrintSettings::SetFooterStrCenter(const nsAString& aTitle)
{ {
return SetMarginStrs(aTitle, eHeader, kJustRight); mFooterStrs[1] = aTitle;
return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::GetFooterStrLeft(char16_t * *aTitle) NS_IMETHODIMP nsPrintSettings::GetFooterStrRight(nsAString& aTitle)
{ {
return GetMarginStrs(aTitle, eFooter, kJustLeft); aTitle = mFooterStrs[2];
return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::SetFooterStrLeft(const char16_t * aTitle) NS_IMETHODIMP nsPrintSettings::SetFooterStrRight(const nsAString& aTitle)
{ {
return SetMarginStrs(aTitle, eFooter, kJustLeft); mFooterStrs[2] = aTitle;
} return NS_OK;
NS_IMETHODIMP nsPrintSettings::GetFooterStrCenter(char16_t * *aTitle)
{
return GetMarginStrs(aTitle, eFooter, kJustCenter);
}
NS_IMETHODIMP nsPrintSettings::SetFooterStrCenter(const char16_t * aTitle)
{
return SetMarginStrs(aTitle, eFooter, kJustCenter);
}
NS_IMETHODIMP nsPrintSettings::GetFooterStrRight(char16_t * *aTitle)
{
return GetMarginStrs(aTitle, eFooter, kJustRight);
}
NS_IMETHODIMP nsPrintSettings::SetFooterStrRight(const char16_t * aTitle)
{
return SetMarginStrs(aTitle, eFooter, kJustRight);
} }
NS_IMETHODIMP nsPrintSettings::GetPrintFrameTypeUsage(int16_t *aPrintFrameTypeUsage) NS_IMETHODIMP nsPrintSettings::GetPrintFrameTypeUsage(int16_t *aPrintFrameTypeUsage)
@ -745,23 +685,14 @@ NS_IMETHODIMP nsPrintSettings::SetShowPrintProgress(bool aShowPrintProgress)
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::GetPaperName(char16_t * *aPaperName) NS_IMETHODIMP nsPrintSettings::GetPaperName(nsAString& aPaperName)
{ {
NS_ENSURE_ARG_POINTER(aPaperName); aPaperName = mPaperName;
if (!mPaperName.IsEmpty()) {
*aPaperName = ToNewUnicode(mPaperName);
} else {
*aPaperName = nullptr;
}
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettings::SetPaperName(const char16_t * aPaperName) NS_IMETHODIMP nsPrintSettings::SetPaperName(const nsAString& aPaperName)
{ {
if (aPaperName) {
mPaperName = aPaperName; mPaperName = aPaperName;
} else {
mPaperName.SetLength(0);
}
return NS_OK; return NS_OK;
} }

View file

@ -42,9 +42,6 @@ protected:
} nsHeaderFooterEnum; } nsHeaderFooterEnum;
nsresult GetMarginStrs(char16_t * *aTitle, nsHeaderFooterEnum aType, int16_t aJust);
nsresult SetMarginStrs(const char16_t * aTitle, nsHeaderFooterEnum aType, int16_t aJust);
// Members // Members
nsWeakPtr mSession; // Should never be touched by Clone or Assign nsWeakPtr mSession; // Should never be touched by Clone or Assign

View file

@ -68,7 +68,7 @@ public:
bool PrintersAreAllocated() { return mPrinters != nullptr; } bool PrintersAreAllocated() { return mPrinters != nullptr; }
LPWSTR GetItemFromList(int32_t aInx) { return mPrinters?mPrinters->ElementAt(aInx):nullptr; } LPWSTR GetItemFromList(int32_t aInx) { return mPrinters?mPrinters->ElementAt(aInx):nullptr; }
nsresult EnumeratePrinterList(); nsresult EnumeratePrinterList();
void GetDefaultPrinterName(nsString& aDefaultPrinterName); void GetDefaultPrinterName(nsAString& aDefaultPrinterName);
uint32_t GetNumPrinters() { return mPrinters?mPrinters->Length():0; } uint32_t GetNumPrinters() { return mPrinters?mPrinters->Length():0; }
protected: protected:
@ -94,8 +94,6 @@ struct AutoFreeGlobalPrinters
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
nsDeviceContextSpecWin::nsDeviceContextSpecWin() nsDeviceContextSpecWin::nsDeviceContextSpecWin()
{ {
mDriverName = nullptr;
mDeviceName = nullptr;
mDevMode = nullptr; mDevMode = nullptr;
#ifdef MOZ_ENABLE_SKIA_PDF #ifdef MOZ_ENABLE_SKIA_PDF
mPrintViaSkPDF = false; mPrintViaSkPDF = false;
@ -113,14 +111,12 @@ NS_IMPL_ISUPPORTS(nsDeviceContextSpecWin, nsIDeviceContextSpec)
nsDeviceContextSpecWin::~nsDeviceContextSpecWin() nsDeviceContextSpecWin::~nsDeviceContextSpecWin()
{ {
SetDeviceName(nullptr);
SetDriverName(nullptr);
SetDevMode(nullptr); SetDevMode(nullptr);
nsCOMPtr<nsIPrintSettingsWin> psWin(do_QueryInterface(mPrintSettings)); nsCOMPtr<nsIPrintSettingsWin> psWin(do_QueryInterface(mPrintSettings));
if (psWin) { if (psWin) {
psWin->SetDeviceName(nullptr); psWin->SetDeviceName(EmptyString());
psWin->SetDriverName(nullptr); psWin->SetDriverName(EmptyString());
psWin->SetDevMode(nullptr); psWin->SetDevMode(nullptr);
} }
@ -133,16 +129,6 @@ nsDeviceContextSpecWin::~nsDeviceContextSpecWin()
GlobalPrinters::GetInstance()->FreeGlobalPrinters(); GlobalPrinters::GetInstance()->FreeGlobalPrinters();
} }
//------------------------------------------------------------------
// helper
static char16_t * GetDefaultPrinterNameFromGlobalPrinters()
{
nsAutoString printerName;
GlobalPrinters::GetInstance()->GetDefaultPrinterName(printerName);
return ToNewUnicode(printerName);
}
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
NS_IMETHODIMP nsDeviceContextSpecWin::Init(nsIWidget* aWidget, NS_IMETHODIMP nsDeviceContextSpecWin::Init(nsIWidget* aWidget,
nsIPrintSettings* aPrintSettings, nsIPrintSettings* aPrintSettings,
@ -171,15 +157,15 @@ NS_IMETHODIMP nsDeviceContextSpecWin::Init(nsIWidget* aWidget,
nsCOMPtr<nsIPrintSettingsWin> psWin(do_QueryInterface(aPrintSettings)); nsCOMPtr<nsIPrintSettingsWin> psWin(do_QueryInterface(aPrintSettings));
if (psWin) { if (psWin) {
char16_t* deviceName; nsAutoString deviceName;
char16_t* driverName; nsAutoString driverName;
psWin->GetDeviceName(&deviceName); // creates new memory (makes a copy) psWin->GetDeviceName(deviceName);
psWin->GetDriverName(&driverName); // creates new memory (makes a copy) psWin->GetDriverName(driverName);
LPDEVMODEW devMode; LPDEVMODEW devMode;
psWin->GetDevMode(&devMode); // creates new memory (makes a copy) psWin->GetDevMode(&devMode); // creates new memory (makes a copy)
if (deviceName && driverName && devMode) { if (!deviceName.IsEmpty() && !driverName.IsEmpty() && devMode) {
// Scaling is special, it is one of the few // Scaling is special, it is one of the few
// devMode items that we control in layout // devMode items that we control in layout
if (devMode->dmFields & DM_SCALE) { if (devMode->dmFields & DM_SCALE) {
@ -194,15 +180,9 @@ NS_IMETHODIMP nsDeviceContextSpecWin::Init(nsIWidget* aWidget,
SetDriverName(driverName); SetDriverName(driverName);
SetDevMode(devMode); SetDevMode(devMode);
// clean up
free(deviceName);
free(driverName);
return NS_OK; return NS_OK;
} else { } else {
PR_PL(("***** nsDeviceContextSpecWin::Init - deviceName/driverName/devMode was NULL!\n")); PR_PL(("***** nsDeviceContextSpecWin::Init - deviceName/driverName/devMode was NULL!\n"));
if (deviceName) free(deviceName);
if (driverName) free(driverName);
if (devMode) ::HeapFree(::GetProcessHeap(), 0, devMode); if (devMode) ::HeapFree(::GetProcessHeap(), 0, devMode);
} }
} }
@ -211,41 +191,24 @@ NS_IMETHODIMP nsDeviceContextSpecWin::Init(nsIWidget* aWidget,
} }
// Get the Printer Name to be used and output format. // Get the Printer Name to be used and output format.
char16_t * printerName = nullptr; nsAutoString printerName;
if (mPrintSettings) { if (mPrintSettings) {
mPrintSettings->GetPrinterName(&printerName); mPrintSettings->GetPrinterName(printerName);
} }
// If there is no name then use the default printer // If there is no name then use the default printer
if (!printerName || (printerName && !*printerName)) { if (printerName.IsEmpty()) {
printerName = GetDefaultPrinterNameFromGlobalPrinters(); GlobalPrinters::GetInstance()->GetDefaultPrinterName(printerName);
} }
NS_ASSERTION(printerName, "We have to have a printer name"); if (printerName.IsEmpty()) {
if (!printerName || !*printerName) return rv; return rv;
}
return GetDataFromPrinter(printerName, mPrintSettings); return GetDataFromPrinter(printerName, mPrintSettings);
} }
//---------------------------------------------------------- //----------------------------------------------------------
// Helper Function - Free and reallocate the string
static void CleanAndCopyString(wchar_t*& aStr, const wchar_t* aNewStr)
{
if (aStr != nullptr) {
if (aNewStr != nullptr && wcslen(aStr) > wcslen(aNewStr)) { // reuse it if we can
wcscpy(aStr, aNewStr);
return;
} else {
free(aStr);
aStr = nullptr;
}
}
if (nullptr != aNewStr) {
aStr = (wchar_t*) malloc(sizeof(wchar_t) * (wcslen(aNewStr) + 1));
wcscpy(aStr, aNewStr);
}
}
already_AddRefed<PrintTarget> nsDeviceContextSpecWin::MakePrintTarget() already_AddRefed<PrintTarget> nsDeviceContextSpecWin::MakePrintTarget()
{ {
@ -266,7 +229,7 @@ already_AddRefed<PrintTarget> nsDeviceContextSpecWin::MakePrintTarget()
if (mOutputFormat == nsIPrintSettings::kOutputFormatPDF) { if (mOutputFormat == nsIPrintSettings::kOutputFormatPDF) {
nsString filename; nsString filename;
mPrintSettings->GetToFileName(getter_Copies(filename)); mPrintSettings->GetToFileName(filename);
nsAutoCString printFile(NS_ConvertUTF16toUTF8(filename).get()); nsAutoCString printFile(NS_ConvertUTF16toUTF8(filename).get());
auto skStream = MakeUnique<SkFILEWStream>(printFile.get()); auto skStream = MakeUnique<SkFILEWStream>(printFile.get());
@ -311,7 +274,7 @@ already_AddRefed<PrintTarget> nsDeviceContextSpecWin::MakePrintTarget()
if (mOutputFormat == nsIPrintSettings::kOutputFormatPDF) { if (mOutputFormat == nsIPrintSettings::kOutputFormatPDF) {
nsString filename; nsString filename;
mPrintSettings->GetToFileName(getter_Copies(filename)); mPrintSettings->GetToFileName(filename);
double width, height; double width, height;
mPrintSettings->GetEffectivePageSize(&width, &height); mPrintSettings->GetEffectivePageSize(&width, &height);
@ -339,8 +302,8 @@ already_AddRefed<PrintTarget> nsDeviceContextSpecWin::MakePrintTarget()
} }
if (mDevMode) { if (mDevMode) {
NS_WARNING_ASSERTION(mDriverName, "No driver!"); NS_WARNING_ASSERTION(!mDriverName.IsEmpty(), "No driver!");
HDC dc = ::CreateDCW(mDriverName, mDeviceName, nullptr, mDevMode); HDC dc = ::CreateDCW(mDriverName.get(), mDeviceName.get(), nullptr, mDevMode);
if (!dc) { if (!dc) {
gfxCriticalError(gfxCriticalError::DefaultOptions(false)) gfxCriticalError(gfxCriticalError::DefaultOptions(false))
<< "Failed to create device context in GetSurfaceForPrinter"; << "Failed to create device context in GetSurfaceForPrinter";
@ -457,8 +420,8 @@ nsDeviceContextSpecWin::BeginDocument(const nsAString& aTitle,
// to once we reach EndDocument. The only reason we create it here rather // to once we reach EndDocument. The only reason we create it here rather
// than in EndDocument is so that we don't need to store aTitle and // than in EndDocument is so that we don't need to store aTitle and
// aPrintToFileName as member data. // aPrintToFileName as member data.
NS_WARNING_ASSERTION(mDriverName, "No driver!"); NS_WARNING_ASSERTION(!mDriverName.IsEmpty(), "No driver!");
mDC = ::CreateDCW(mDriverName, mDeviceName, nullptr, mDevMode); mDC = ::CreateDCW(mDriverName.get(), mDeviceName.get(), nullptr, mDevMode);
if (mDC == NULL) { if (mDC == NULL) {
gfxCriticalError(gfxCriticalError::DefaultOptions(false)) gfxCriticalError(gfxCriticalError::DefaultOptions(false))
<< "Failed to create device context in GetSurfaceForPrinter"; << "Failed to create device context in GetSurfaceForPrinter";
@ -527,15 +490,15 @@ nsDeviceContextSpecWin::EndDocument()
} }
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
void nsDeviceContextSpecWin::SetDeviceName(char16ptr_t aDeviceName) void nsDeviceContextSpecWin::SetDeviceName(const nsAString& aDeviceName)
{ {
CleanAndCopyString(mDeviceName, aDeviceName); mDeviceName = aDeviceName;
} }
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
void nsDeviceContextSpecWin::SetDriverName(char16ptr_t aDriverName) void nsDeviceContextSpecWin::SetDriverName(const nsAString& aDriverName)
{ {
CleanAndCopyString(mDriverName, aDriverName); mDriverName = aDriverName;
} }
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
@ -560,7 +523,8 @@ nsDeviceContextSpecWin::GetDevMode(LPDEVMODEW &aDevMode)
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Setup the object's data member with the selected printer's data // Setup the object's data member with the selected printer's data
nsresult nsresult
nsDeviceContextSpecWin::GetDataFromPrinter(char16ptr_t aName, nsIPrintSettings* aPS) nsDeviceContextSpecWin::GetDataFromPrinter(const nsAString& aName,
nsIPrintSettings* aPS)
{ {
nsresult rv = NS_ERROR_FAILURE; nsresult rv = NS_ERROR_FAILURE;
@ -574,7 +538,8 @@ nsDeviceContextSpecWin::GetDataFromPrinter(char16ptr_t aName, nsIPrintSettings*
} }
nsHPRINTER hPrinter = nullptr; nsHPRINTER hPrinter = nullptr;
wchar_t *name = (wchar_t*)aName; // Windows APIs use non-const name argument const nsString& flat = PromiseFlatString(aName);
wchar_t* name = (wchar_t*)flat.get(); // Windows APIs use non-const name argument
BOOL status = ::OpenPrinterW(name, &hPrinter, nullptr); BOOL status = ::OpenPrinterW(name, &hPrinter, nullptr);
if (status) { if (status) {
@ -589,7 +554,7 @@ nsDeviceContextSpecWin::GetDataFromPrinter(char16ptr_t aName, nsIPrintSettings*
PR_PL(("**** nsDeviceContextSpecWin::GetDataFromPrinter - Couldn't get " PR_PL(("**** nsDeviceContextSpecWin::GetDataFromPrinter - Couldn't get "
"size of DEVMODE using DocumentPropertiesW(pDeviceName = \"%s\"). " "size of DEVMODE using DocumentPropertiesW(pDeviceName = \"%s\"). "
"GetLastEror() = %08x\n", "GetLastEror() = %08x\n",
aName ? NS_ConvertUTF16toUTF8(aName).get() : "", GetLastError())); NS_ConvertUTF16toUTF8(aName).get(), GetLastError()));
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
@ -614,7 +579,7 @@ nsDeviceContextSpecWin::GetDataFromPrinter(char16ptr_t aName, nsIPrintSettings*
// because they may have been set from invalid prefs. // because they may have been set from invalid prefs.
if (ret == IDOK) { if (ret == IDOK) {
// We need to get information from the device as well. // We need to get information from the device as well.
nsAutoHDC printerDC(::CreateICW(kDriverName, aName, nullptr, pDevMode)); nsAutoHDC printerDC(::CreateICW(kDriverName, name, nullptr, pDevMode));
if (NS_WARN_IF(!printerDC)) { if (NS_WARN_IF(!printerDC)) {
::HeapFree(::GetProcessHeap(), 0, pDevMode); ::HeapFree(::GetProcessHeap(), 0, pDevMode);
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
@ -635,7 +600,7 @@ nsDeviceContextSpecWin::GetDataFromPrinter(char16ptr_t aName, nsIPrintSettings*
SetDeviceName(aName); SetDeviceName(aName);
SetDriverName(kDriverName); SetDriverName(nsDependentString(kDriverName));
rv = NS_OK; rv = NS_OK;
} else { } else {
@ -664,22 +629,19 @@ NS_IMPL_ISUPPORTS(nsPrinterEnumeratorWin, nsIPrinterEnumerator)
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Return the Default Printer name // Return the Default Printer name
NS_IMETHODIMP NS_IMETHODIMP
nsPrinterEnumeratorWin::GetDefaultPrinterName(char16_t * *aDefaultPrinterName) nsPrinterEnumeratorWin::GetDefaultPrinterName(nsAString& aDefaultPrinterName)
{ {
NS_ENSURE_ARG_POINTER(aDefaultPrinterName); GlobalPrinters::GetInstance()->GetDefaultPrinterName(aDefaultPrinterName);
*aDefaultPrinterName = GetDefaultPrinterNameFromGlobalPrinters(); // helper
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP NS_IMETHODIMP
nsPrinterEnumeratorWin::InitPrintSettingsFromPrinter(const char16_t *aPrinterName, nsIPrintSettings *aPrintSettings) nsPrinterEnumeratorWin::InitPrintSettingsFromPrinter(const nsAString& aPrinterName,
nsIPrintSettings *aPrintSettings)
{ {
NS_ENSURE_ARG_POINTER(aPrinterName);
NS_ENSURE_ARG_POINTER(aPrintSettings); NS_ENSURE_ARG_POINTER(aPrintSettings);
if (!*aPrinterName) { if (aPrinterName.IsEmpty()) {
return NS_OK; return NS_OK;
} }
@ -724,7 +686,8 @@ nsPrinterEnumeratorWin::InitPrintSettingsFromPrinter(const char16_t *aPrinterNam
aPrintSettings->SetPrinterName(aPrinterName); aPrintSettings->SetPrinterName(aPrinterName);
// We need to get information from the device as well. // We need to get information from the device as well.
char16ptr_t printerName = aPrinterName; const nsString& flat = PromiseFlatString(aPrinterName);
char16ptr_t printerName = flat.get();
HDC dc = ::CreateICW(kDriverName, printerName, nullptr, devmode); HDC dc = ::CreateICW(kDriverName, printerName, nullptr, devmode);
if (NS_WARN_IF(!dc)) { if (NS_WARN_IF(!dc)) {
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
@ -833,7 +796,7 @@ GlobalPrinters::EnumerateNativePrinters()
//------------------------------------------------------------------ //------------------------------------------------------------------
// Uses the GetProfileString to get the default printer from the registry // Uses the GetProfileString to get the default printer from the registry
void void
GlobalPrinters::GetDefaultPrinterName(nsString& aDefaultPrinterName) GlobalPrinters::GetDefaultPrinterName(nsAString& aDefaultPrinterName)
{ {
aDefaultPrinterName.Truncate(); aDefaultPrinterName.Truncate();
WCHAR szDefaultPrinterName[1024]; WCHAR szDefaultPrinterName[1024];
@ -853,7 +816,8 @@ GlobalPrinters::GetDefaultPrinterName(nsString& aDefaultPrinterName)
aDefaultPrinterName = EmptyString(); aDefaultPrinterName = EmptyString();
} }
PR_PL(("DEFAULT PRINTER [%s]\n", aDefaultPrinterName.get())); PR_PL(("DEFAULT PRINTER [%s]\n",
PromiseFlatString(aDefaultPrinterName).get()));
} }
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------

View file

@ -51,8 +51,8 @@ public:
float GetPrintingScale() final; float GetPrintingScale() final;
void GetDriverName(wchar_t *&aDriverName) const { aDriverName = mDriverName; } void GetDriverName(nsAString& aDriverName) const { aDriverName = mDriverName; }
void GetDeviceName(wchar_t *&aDeviceName) const { aDeviceName = mDeviceName; } void GetDeviceName(nsAString& aDeviceName) const { aDeviceName = mDeviceName; }
// The GetDevMode will return a pointer to a DevMode // The GetDevMode will return a pointer to a DevMode
// whether it is from the Global memory handle or just the DevMode // whether it is from the Global memory handle or just the DevMode
@ -61,18 +61,19 @@ public:
void GetDevMode(LPDEVMODEW &aDevMode); void GetDevMode(LPDEVMODEW &aDevMode);
// helper functions // helper functions
nsresult GetDataFromPrinter(char16ptr_t aName, nsIPrintSettings* aPS = nullptr); nsresult GetDataFromPrinter(const nsAString& aName,
nsIPrintSettings* aPS = nullptr);
protected: protected:
void SetDeviceName(char16ptr_t aDeviceName); void SetDeviceName(const nsAString& aDeviceName);
void SetDriverName(char16ptr_t aDriverName); void SetDriverName(const nsAString& aDriverName);
void SetDevMode(LPDEVMODEW aDevMode); void SetDevMode(LPDEVMODEW aDevMode);
virtual ~nsDeviceContextSpecWin(); virtual ~nsDeviceContextSpecWin();
wchar_t* mDriverName; nsString mDriverName;
wchar_t* mDeviceName; nsString mDeviceName;
LPDEVMODEW mDevMode; LPDEVMODEW mDevMode;
nsCOMPtr<nsIPrintSettings> mPrintSettings; nsCOMPtr<nsIPrintSettings> mPrintSettings;

View file

@ -55,18 +55,15 @@ nsPrintOptionsWin::SerializeToPrintData(nsIPrintSettings* aSettings,
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
char16_t* deviceName; nsAutoString deviceName;
char16_t* driverName; nsAutoString driverName;
psWin->GetDeviceName(&deviceName); psWin->GetDeviceName(deviceName);
psWin->GetDriverName(&driverName); psWin->GetDriverName(driverName);
data->deviceName().Assign(deviceName); data->deviceName().Assign(deviceName);
data->driverName().Assign(driverName); data->driverName().Assign(driverName);
free(deviceName);
free(driverName);
// When creating the print dialog on Windows, we only need to send certain // When creating the print dialog on Windows, we only need to send certain
// print settings information from the parent to the child not vice versa. // print settings information from the parent to the child not vice versa.
if (XRE_IsParentProcess()) { if (XRE_IsParentProcess()) {
@ -117,8 +114,8 @@ nsPrintOptionsWin::DeserializeToPrintSettings(const PrintData& data,
} }
if (XRE_IsContentProcess()) { if (XRE_IsContentProcess()) {
psWin->SetDeviceName(data.deviceName().get()); psWin->SetDeviceName(data.deviceName());
psWin->SetDriverName(data.driverName().get()); psWin->SetDriverName(data.driverName());
psWin->SetPrintableWidthInInches(data.printableWidthInInches()); psWin->SetPrintableWidthInInches(data.printableWidthInInches());
psWin->SetPrintableHeightInInches(data.printableHeightInInches()); psWin->SetPrintableHeightInInches(data.printableHeightInInches());

View file

@ -154,10 +154,8 @@ nsPrintSettingsWin::nsPrintSettingsWin() :
* See documentation in nsPrintSettingsWin.h * See documentation in nsPrintSettingsWin.h
* @update * @update
*/ */
nsPrintSettingsWin::nsPrintSettingsWin(const nsPrintSettingsWin& aPS) : nsPrintSettingsWin::nsPrintSettingsWin(const nsPrintSettingsWin& aPS)
mDeviceName(nullptr), : mDevMode(nullptr)
mDriverName(nullptr),
mDevMode(nullptr)
{ {
*this = aPS; *this = aPS;
} }
@ -168,38 +166,28 @@ nsPrintSettingsWin::nsPrintSettingsWin(const nsPrintSettingsWin& aPS) :
*/ */
nsPrintSettingsWin::~nsPrintSettingsWin() nsPrintSettingsWin::~nsPrintSettingsWin()
{ {
if (mDeviceName) free(mDeviceName);
if (mDriverName) free(mDriverName);
if (mDevMode) ::HeapFree(::GetProcessHeap(), 0, mDevMode); if (mDevMode) ::HeapFree(::GetProcessHeap(), 0, mDevMode);
} }
NS_IMETHODIMP nsPrintSettingsWin::SetDeviceName(const char16_t * aDeviceName) NS_IMETHODIMP nsPrintSettingsWin::SetDeviceName(const nsAString& aDeviceName)
{ {
if (mDeviceName) { mDeviceName = aDeviceName;
free(mDeviceName);
}
mDeviceName = aDeviceName?wcsdup(char16ptr_t(aDeviceName)):nullptr;
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettingsWin::GetDeviceName(char16_t **aDeviceName) NS_IMETHODIMP nsPrintSettingsWin::GetDeviceName(nsAString& aDeviceName)
{ {
NS_ENSURE_ARG_POINTER(aDeviceName); aDeviceName = mDeviceName;
*aDeviceName = mDeviceName?reinterpret_cast<char16_t*>(wcsdup(mDeviceName)):nullptr;
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettingsWin::SetDriverName(const char16_t * aDriverName) NS_IMETHODIMP nsPrintSettingsWin::SetDriverName(const nsAString& aDriverName)
{ {
if (mDriverName) { mDriverName = aDriverName;
free(mDriverName);
}
mDriverName = aDriverName?wcsdup(char16ptr_t(aDriverName)):nullptr;
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP nsPrintSettingsWin::GetDriverName(char16_t **aDriverName) NS_IMETHODIMP nsPrintSettingsWin::GetDriverName(nsAString& aDriverName)
{ {
NS_ENSURE_ARG_POINTER(aDriverName); aDriverName = mDriverName;
*aDriverName = mDriverName?reinterpret_cast<char16_t*>(wcsdup(mDriverName)):nullptr;
return NS_OK; return NS_OK;
} }
@ -425,21 +413,13 @@ nsPrintSettingsWin& nsPrintSettingsWin::operator=(const nsPrintSettingsWin& rhs)
((nsPrintSettings&) *this) = rhs; ((nsPrintSettings&) *this) = rhs;
if (mDeviceName) {
free(mDeviceName);
}
if (mDriverName) {
free(mDriverName);
}
// Use free because we used the native malloc to create the memory // Use free because we used the native malloc to create the memory
if (mDevMode) { if (mDevMode) {
::HeapFree(::GetProcessHeap(), 0, mDevMode); ::HeapFree(::GetProcessHeap(), 0, mDevMode);
} }
mDeviceName = rhs.mDeviceName?wcsdup(rhs.mDeviceName):nullptr; mDeviceName = rhs.mDeviceName;
mDriverName = rhs.mDriverName?wcsdup(rhs.mDriverName):nullptr; mDriverName = rhs.mDriverName;
if (rhs.mDevMode) { if (rhs.mDevMode) {
CopyDevMode(rhs.mDevMode, mDevMode); CopyDevMode(rhs.mDevMode, mDevMode);

View file

@ -47,8 +47,8 @@ public:
protected: protected:
void CopyDevMode(DEVMODEW* aInDevMode, DEVMODEW *& aOutDevMode); void CopyDevMode(DEVMODEW* aInDevMode, DEVMODEW *& aOutDevMode);
wchar_t* mDeviceName; nsString mDeviceName;
wchar_t* mDriverName; nsString mDriverName;
LPDEVMODEW mDevMode; LPDEVMODEW mDevMode;
double mPrintableWidthInInches = 0l; double mPrintableWidthInInches = 0l;
double mPrintableHeightInInches = 0l; double mPrintableHeightInInches = 0l;