Bug 1354443 part.4 nsPrintData should guarantee that object which has nsIWebProgressListener interface won't be released during calling a method of it r=dholbert

Although, this should be rewritten with range-based for loop, this patch just making them use nsCOMPtr to refer the objects.

MozReview-Commit-ID: IJBWs8CTyCF
This commit is contained in:
Masayuki Nakano 2017-05-02 17:07:45 +09:00
Родитель 4a6eeab901
Коммит d11d55f55f
1 изменённых файлов: 17 добавлений и 9 удалений

Просмотреть файл

@ -108,11 +108,17 @@ nsPrintData::DoOnProgressChange(int32_t aProgress,
bool aDoStartStop,
int32_t aFlag)
{
for (int32_t i=0;i<mPrintProgressListeners.Count();i++) {
nsIWebProgressListener* wpl = mPrintProgressListeners.ObjectAt(i);
wpl->OnProgressChange(nullptr, nullptr, aProgress, aMaxProgress, aProgress, aMaxProgress);
size_t numberOfListeners = mPrintProgressListeners.Length();
for (size_t i = 0; i < numberOfListeners; ++i) {
nsCOMPtr<nsIWebProgressListener> listener =
mPrintProgressListeners.SafeElementAt(i);
if (NS_WARN_IF(!listener)) {
continue;
}
listener->OnProgressChange(nullptr, nullptr, aProgress, aMaxProgress,
aProgress, aMaxProgress);
if (aDoStartStop) {
wpl->OnStateChange(nullptr, nullptr, aFlag, NS_OK);
listener->OnStateChange(nullptr, nullptr, aFlag, NS_OK);
}
}
}
@ -120,12 +126,14 @@ nsPrintData::DoOnProgressChange(int32_t aProgress,
void
nsPrintData::DoOnStatusChange(nsresult aStatus)
{
uint32_t numberOfListeners = mPrintProgressListeners.Length();
for (uint32_t i = 0; i < numberOfListeners; ++i) {
nsIWebProgressListener* listener = mPrintProgressListeners.SafeElementAt(i);
if (listener) {
listener->OnStatusChange(nullptr, nullptr, aStatus, nullptr);
size_t numberOfListeners = mPrintProgressListeners.Length();
for (size_t i = 0; i < numberOfListeners; ++i) {
nsCOMPtr<nsIWebProgressListener> listener =
mPrintProgressListeners.SafeElementAt(i);
if (NS_WARN_IF(!listener)) {
continue;
}
listener->OnStatusChange(nullptr, nullptr, aStatus, nullptr);
}
}