gecko-dev/layout/printing/nsPagePrintTimer.h
Bob Owen dd481e414a Bug 1156742 Part 10: Allow RemotePrintJob to influence nsPagePrintTimer. r=roc
Adds a new timer for the RemotePrintJob to notify the nsPagePrintTimer when the last page has finished printing in the parent.
Changed the page delay timer to reset the watch dog count on every page to prevent timeouts due to remote printing.
2016-01-05 10:08:57 +00:00

81 lines
2.1 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsPagePrintTimer_h___
#define nsPagePrintTimer_h___
// Timer Includes
#include "nsITimer.h"
#include "nsIDocumentViewerPrint.h"
#include "nsPrintObject.h"
#include "mozilla/Attributes.h"
#include "nsThreadUtils.h"
class nsPrintEngine;
//---------------------------------------------------
//-- Page Timer Class
//---------------------------------------------------
class nsPagePrintTimer final : public nsRunnable,
public nsITimerCallback
{
public:
NS_DECL_ISUPPORTS_INHERITED
nsPagePrintTimer(nsPrintEngine* aPrintEngine,
nsIDocumentViewerPrint* aDocViewerPrint,
uint32_t aDelay)
: mPrintEngine(aPrintEngine)
, mDocViewerPrint(aDocViewerPrint)
, mDelay(aDelay)
, mFiringCount(0)
, mPrintObj(nullptr)
, mWatchDogCount(0)
, mDone(false)
{
mDocViewerPrint->IncrementDestroyRefCount();
}
NS_DECL_NSITIMERCALLBACK
nsresult Start(nsPrintObject* aPO);
NS_IMETHOD Run() override;
void Stop();
void WaitForRemotePrint();
void RemotePrintFinished();
private:
~nsPagePrintTimer();
nsresult StartTimer(bool aUseDelay);
nsresult StartWatchDogTimer();
void StopWatchDogTimer();
void Fail();
nsPrintEngine* mPrintEngine;
nsCOMPtr<nsIDocumentViewerPrint> mDocViewerPrint;
nsCOMPtr<nsITimer> mTimer;
nsCOMPtr<nsITimer> mWatchDogTimer;
nsCOMPtr<nsITimer> mWaitingForRemotePrint;
uint32_t mDelay;
uint32_t mFiringCount;
nsPrintObject * mPrintObj;
uint32_t mWatchDogCount;
bool mDone;
static const uint32_t WATCH_DOG_INTERVAL = 1000;
static const uint32_t WATCH_DOG_MAX_COUNT = 10;
};
nsresult
NS_NewPagePrintTimer(nsPagePrintTimer **aResult);
#endif /* nsPagePrintTimer_h___ */