Files
tubestation/widget/nsPrintSettingsImpl.h
Nika Layzell 583cee7bac Bug 1778211 - Reject xpidl CDATA containing 'virtual', r=xpcom-reviewers,necko-reviewers,mccr8,dragana
We'll probably want to do something more accurate in the future with a
custom clang static analysis pass which validates that XPIDL interfaces
have the expected vtable and struct layout, however doing so would be
more involved than the string matching done in this patch.

In addition to checking for extra virtual methods, we'll likely also
want to check for data members on interfaces, and reject them unless the
class is marked as `[builtinclass]` in addition to some other attribute
which we'll need to add to prevent them from being implemented in Rust
(as c++ data members will not be reflected by the rust macro).

There were 2 instances of a comment which contained the word 'virtual'
within a CDATA block. These comments were moved out of the CDATA block
to avoid triggering the error.

Differential Revision: https://phabricator.services.mozilla.com/D151068
2022-07-06 14:53:06 +00:00

133 lines
4.0 KiB
C++

/* -*- Mode: IDL; tab-width: 4; 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 nsPrintSettingsImpl_h__
#define nsPrintSettingsImpl_h__
#include "nsIPrintSettings.h"
#include "nsIWeakReferenceUtils.h"
#include "nsMargin.h"
#include "nsPaper.h"
#include "nsProxyRelease.h"
#include "nsString.h"
#define NUM_HEAD_FOOT 3
//*****************************************************************************
//*** nsPrintSettings
//*****************************************************************************
class nsPrintSettings;
namespace mozilla {
/**
* A struct that can be used off the main thread to collect printer-specific
* info that can be used to initialized a default nsIPrintSettings object.
*/
struct PrintSettingsInitializer {
nsString mPrinter;
PaperInfo mPaperInfo;
int16_t mPaperSizeUnit = nsIPrintSettings::kPaperSizeInches;
// If we fail to obtain printer capabilities, being given the option to print
// in color to your monochrome printer is a lot less annoying than not being
// given the option to print in color to your color printer.
bool mPrintInColor = true;
int mResolution = 0;
int mSheetOrientation = nsIPrintSettings::kPortraitOrientation;
int mNumCopies = 1;
int mDuplex = nsIPrintSettings::kDuplexNone;
// This is to hold a reference to a newly cloned settings object that will
// then be initialized by the other values in the initializer that may have
// been changed on a background thread.
nsMainThreadPtrHandle<nsPrintSettings> mPrintSettings;
#ifdef XP_WIN
CopyableTArray<uint8_t> mDevmodeWStorage;
#endif
};
} // namespace mozilla
class nsPrintSettings : public nsIPrintSettings {
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIPRINTSETTINGS
using PrintSettingsInitializer = mozilla::PrintSettingsInitializer;
nsPrintSettings();
nsPrintSettings(const nsPrintSettings& aPS);
/**
* Initialize relevant members from the PrintSettingsInitializer.
* This is specifically not a constructor so that we can ensure that the
* relevant setters are dynamically dispatched to derived classes.
*/
virtual void InitWithInitializer(const PrintSettingsInitializer& aSettings);
nsPrintSettings& operator=(const nsPrintSettings& rhs);
// Sets a default file name for the print settings.
void SetDefaultFileName();
protected:
virtual ~nsPrintSettings();
// May be implemented by the platform-specific derived class
virtual nsresult _Clone(nsIPrintSettings** _retval);
virtual nsresult _Assign(nsIPrintSettings* aPS);
// Members
nsWeakPtr mSession; // Should never be touched by Clone or Assign
// mMargin, mEdge, and mUnwriteableMargin are stored in twips
nsIntMargin mMargin;
nsIntMargin mEdge;
nsIntMargin mUnwriteableMargin;
nsTArray<int32_t> mPageRanges;
double mScaling = 1.0;
bool mPrintBGColors = false;
bool mPrintBGImages = false;
bool mPrintSilent = false;
bool mShrinkToFit = true;
bool mShowMarginGuides = false;
bool mHonorPageRuleMargins = true;
bool mPrintSelectionOnly = false;
int32_t mPrintPageDelay = 50; // XXX Do we really want this?
nsString mTitle;
nsString mURL;
nsString mHeaderStrs[NUM_HEAD_FOOT];
nsString mFooterStrs[NUM_HEAD_FOOT];
nsString mPaperId;
double mPaperWidth = 8.5;
double mPaperHeight = 11.0;
int16_t mPaperSizeUnit = kPaperSizeInches;
bool mPrintReversed = false;
bool mPrintInColor = true;
int32_t mOrientation = kPortraitOrientation;
int32_t mResolution = 0;
int32_t mDuplex = kDuplexNone;
int32_t mNumCopies = 1;
int32_t mNumPagesPerSheet = 1;
int16_t mOutputFormat = kOutputFormatNative;
OutputDestinationType mOutputDestination = kOutputDestinationPrinter;
nsString mPrinter;
nsString mToFileName;
nsCOMPtr<nsIOutputStream> mOutputStream;
bool mIsInitedFromPrinter = false;
bool mIsInitedFromPrefs = false;
};
#endif /* nsPrintSettings_h__ */