diff --git a/gfx/2d/RecordedEvent.cpp b/gfx/2d/RecordedEvent.cpp index 8a0e13f68c27..1da4aba7895e 100644 --- a/gfx/2d/RecordedEvent.cpp +++ b/gfx/2d/RecordedEvent.cpp @@ -23,6 +23,11 @@ RecordedEvent::LoadEventFromStream(std::istream &aStream, EventType aType) { return LoadEvent(aStream, aType); } +RecordedEvent * +RecordedEvent::LoadEventFromStream(EventStream& aStream, EventType aType) { + return LoadEvent(aStream, aType); +} + string RecordedEvent::GetEventName(EventType aType) { diff --git a/gfx/2d/RecordedEvent.h b/gfx/2d/RecordedEvent.h index c74456531e8c..6a25a228b836 100644 --- a/gfx/2d/RecordedEvent.h +++ b/gfx/2d/RecordedEvent.h @@ -210,6 +210,7 @@ struct MemStream { class EventStream { public: virtual void write(const char* aData, size_t aSize) = 0; + virtual void read(char* aOut, size_t aSize) = 0; }; class RecordedEvent { @@ -298,6 +299,7 @@ public: template static RecordedEvent *LoadEvent(S &aStream, EventType aType); static RecordedEvent *LoadEventFromStream(std::istream &aStream, EventType aType); + static RecordedEvent *LoadEventFromStream(EventStream& aStream, EventType aType); // An alternative to LoadEvent that avoids a heap allocation for the event. // This accepts a callable `f' that will take a RecordedEvent* as a single parameter diff --git a/layout/printing/DrawEventRecorder.h b/layout/printing/DrawEventRecorder.h index 9640a636cc0e..a2a6924d9819 100644 --- a/layout/printing/DrawEventRecorder.h +++ b/layout/printing/DrawEventRecorder.h @@ -15,11 +15,12 @@ namespace layout { class PRFileDescStream : public mozilla::gfx::EventStream { public: - PRFileDescStream() : mFd(nullptr) {} + PRFileDescStream() : mFd(nullptr), mGood(true) {} void Open(const char* aFilename) { MOZ_ASSERT(!IsOpen()); mFd = PR_Open(aFilename, PR_RDWR | PR_CREATE_FILE, PR_IRUSR | PR_IWUSR); + mGood = true; } void Close() { @@ -46,8 +47,18 @@ public: } } + void read(char* aOut, size_t aSize) { + PRInt32 res = PR_Read(mFd, static_cast(aOut), aSize); + mGood = res >= 0 && ((size_t)res == aSize); + } + + bool good() { + return mGood; + } + private: PRFileDesc* mFd; + bool mGood; }; class DrawEventRecorderPRFileDesc : public gfx::DrawEventRecorderPrivate @@ -85,6 +96,7 @@ private: }; } + } #endif /* mozilla_layout_printing_DrawEventRecorder_h */ diff --git a/layout/printing/PrintTranslator.cpp b/layout/printing/PrintTranslator.cpp index a2f1f5cbf7b5..168f9e81c3c7 100644 --- a/layout/printing/PrintTranslator.cpp +++ b/layout/printing/PrintTranslator.cpp @@ -25,7 +25,7 @@ PrintTranslator::PrintTranslator(nsDeviceContext* aDeviceContext) } bool -PrintTranslator::TranslateRecording(std::istream& aRecording) +PrintTranslator::TranslateRecording(PRFileDescStream& aRecording) { uint32_t magicInt; ReadElement(aRecording, magicInt); diff --git a/layout/printing/PrintTranslator.h b/layout/printing/PrintTranslator.h index 4558518ab74e..9ef079fcc877 100644 --- a/layout/printing/PrintTranslator.h +++ b/layout/printing/PrintTranslator.h @@ -35,7 +35,7 @@ class PrintTranslator final : public Translator public: explicit PrintTranslator(nsDeviceContext* aDeviceContext); - bool TranslateRecording(std::istream& aRecording); + bool TranslateRecording(PRFileDescStream& aRecording); DrawTarget* LookupDrawTarget(ReferencePtr aRefPtr) final { diff --git a/layout/printing/ipc/RemotePrintJobParent.cpp b/layout/printing/ipc/RemotePrintJobParent.cpp index 46f47ed66dab..73a349302636 100644 --- a/layout/printing/ipc/RemotePrintJobParent.cpp +++ b/layout/printing/ipc/RemotePrintJobParent.cpp @@ -124,7 +124,9 @@ RemotePrintJobParent::PrintPage(const nsCString& aPageFileName) return rv; } - std::ifstream recording(recordingPath.get(), std::ifstream::binary); + PRFileDescStream recording; + recording.Open(recordingPath.get()); + MOZ_ASSERT(recording.IsOpen()); if (!mPrintTranslator->TranslateRecording(recording)) { return NS_ERROR_FAILURE; } @@ -134,7 +136,7 @@ RemotePrintJobParent::PrintPage(const nsCString& aPageFileName) return rv; } - recording.close(); + recording.Close(); rv = recordingFile->Remove(/* recursive= */ false); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; @@ -240,5 +242,3 @@ RemotePrintJobParent::ActorDestroy(ActorDestroyReason aWhy) } // namespace layout } // namespace mozilla - -