Crash calling exitPrintPreview() during Print Preview [@ nsPrintData::DoOnProgressChange(int, int, int, int) ] - [@ nsPrintData::OnEndPrinting]

NEW
Assigned to

Status

()

Toolkit
Printing
--
critical
9 years ago
2 years ago

People

(Reporter: wildmyron, Assigned: smaug)

Tracking

({crash, testcase})

Trunk
x86
Windows XP
crash, testcase
Points:
---

Firefox Tracking Flags

(Not tracked)

Details

(Whiteboard: [ccbr], crash signature)

Attachments

(1 attachment)

(Reporter)

Description

9 years ago
Created attachment 369434 [details]
Testcase

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2a1pre) Gecko/20090324 Minefield/3.6a1pre ID:20090324044213

Calling exitPrintPreview()during print preview crashes Firefox @ nsPrintData::DoOnProgressChange

Testcase based on attachment 290345 [details] by Martijn with a call to exitPrintPreview() in the listener for onStateChange. Requires enhanced priveleges.

I guess this is a bit evil because this is exiting print preview before the preview has completed. I'm guessing that the listener is removed before doCommonPrint() completes and sends the final notification. (There seem to be two notifications - one on print preview progress dialog close and one on print preview completion.)

Sample crash report:
bp-c406136d-c0c4-49ca-81d5-1a0e22090325

Stack:
Frame  	Module  	Signature [Expand]  	Source
0 	ntdll.dll 	ntdll.dll@0xe4f4 	
1 	kernel32.dll 	kernel32.dll@0x2541 	
2 	xul.dll 	google_breakpad::ExceptionHandler::WriteMinidumpOnHandlerThread 	toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc:562
3 	xul.dll 	google_breakpad::ExceptionHandler::HandlePureVirtualCall 	toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc:506
4 	mozcrt19.dll 	_purecall 	obj-firefox/memory/jemalloc/src/purevirt.c:47
5 	xul.dll 	nsPrintData::DoOnProgressChange 	layout/printing/nsPrintData.cpp:154
6 	xul.dll 	nsPrintData::OnEndPrinting 	layout/printing/nsPrintData.cpp:141
7 	xul.dll 	nsPrintEngine::FinishPrintPreview 	layout/printing/nsPrintEngine.cpp:3184
8 	xul.dll 	nsPrintEngine::Observe 	layout/printing/nsPrintEngine.cpp:3234
9 	xul.dll 	nsPrintProgress::DoneIniting 	embedding/components/printingui/src/win/nsPrintProgress.cpp:221
10 	xul.dll 	NS_InvokeByIndex_P 	xpcom/reflect/xptcall/src/md/win32/xptcinvoke.cpp:101
11 	xul.dll 	XPCWrappedNative::CallMethod 	js/src/xpconnect/src/xpcwrappednative.cpp:2463

Variations of the testcase crash with slightly different stacks, e.g.
bp-e0ff9ebf-e9e1-4ca1-ab59-6ee0c2090324 nsPrintData::DoOnProgressChange
bp-c09fc744-a229-46f0-a2a1-5c85e2090324 nsVoidArray::Count

Doesn't seem to be a regression (also crashes Fx2)
(In reply to comment #0)
> I guess this is a bit evil because this is exiting print preview before the
> preview has completed.
This is indeed evil. Exiting print preview before it is completed is ok in some
cases but not if it happens in nsIWebProgessListener::onStateChange.

Is this bug blocking some other work? Otherwise I think we could just 
document that nsIWebProgessListener must not cancel print preview.
(Reporter)

Comment 2

9 years ago
It isn't directly blocking any other work, I came across it while trying to create a testcase for a print preview bug. I was using martijn's code to do print preview and wanted to close firefox after the print preview finished. I don't have much experience with javascript and was having trouble getting the call to exitPrintPreview() to run. I was actually trying to get exitPrintPreview to be called after the preview completed and thought waiting for STATE_STOP would work.
Actually, I think we could make exitPrintPreview() to return some error code
when it is not possible to exit.
Taking.
Assignee: nobody → Olli.Pettay
Whiteboard: [ccbr]

Comment 4

7 years ago
one example in firefox 4
bp-9c6ba1f4-2a08-4ff3-9b61-9d3722110325
Summary: Crash calling exitPrintPreview() during Print Preview [@ nsPrintData::DoOnProgressChange(int, int, int, int) ] → Crash calling exitPrintPreview() during Print Preview [@ nsPrintData::DoOnProgressChange(int, int, int, int) ] - [@ nsPrintData::OnEndPrinting]
Crash Signature: [@ nsPrintData::DoOnProgressChange(int, int, int, int) ] [@ nsPrintData::OnEndPrinting]

Updated

2 years ago
Crash Signature: [@ nsPrintData::DoOnProgressChange(int, int, int, int) ] [@ nsPrintData::OnEndPrinting] → [@ nsPrintData::DoOnProgressChange(int, int, int, int) ] [@ nsPrintData::OnEndPrinting] [@ nsPrintData::DoOnProgressChange ]
You need to log in before you can comment on or make changes to this bug.