1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* vim: set sw=4 ts=8 et tw=80 : */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7 #include "PrintDataUtils.h"
8 #include "nsIPrintSettings.h"
9 #include "nsIServiceManager.h"
10 #include "nsIWebBrowserPrint.h"
11 #include "nsString.h"
12
13 namespace mozilla {
14 namespace embedding {
15
16 /**
17 * MockWebBrowserPrint is a mostly useless implementation of nsIWebBrowserPrint,
18 * but wraps a PrintData so that it's able to return information to print
19 * settings dialogs that need an nsIWebBrowserPrint to interrogate.
20 */
21
22 NS_IMPL_ISUPPORTS(MockWebBrowserPrint, nsIWebBrowserPrint);
23
MockWebBrowserPrint(const PrintData & aData)24 MockWebBrowserPrint::MockWebBrowserPrint(const PrintData &aData)
25 : mData(aData) {}
26
~MockWebBrowserPrint()27 MockWebBrowserPrint::~MockWebBrowserPrint() {}
28
29 NS_IMETHODIMP
GetGlobalPrintSettings(nsIPrintSettings ** aGlobalPrintSettings)30 MockWebBrowserPrint::GetGlobalPrintSettings(
31 nsIPrintSettings **aGlobalPrintSettings) {
32 return NS_ERROR_NOT_IMPLEMENTED;
33 }
34
35 NS_IMETHODIMP
GetCurrentPrintSettings(nsIPrintSettings ** aCurrentPrintSettings)36 MockWebBrowserPrint::GetCurrentPrintSettings(
37 nsIPrintSettings **aCurrentPrintSettings) {
38 return NS_ERROR_NOT_IMPLEMENTED;
39 }
40
41 NS_IMETHODIMP
GetDoingPrint(bool * aDoingPrint)42 MockWebBrowserPrint::GetDoingPrint(bool *aDoingPrint) {
43 return NS_ERROR_NOT_IMPLEMENTED;
44 }
45
46 NS_IMETHODIMP
GetDoingPrintPreview(bool * aDoingPrintPreview)47 MockWebBrowserPrint::GetDoingPrintPreview(bool *aDoingPrintPreview) {
48 return NS_ERROR_NOT_IMPLEMENTED;
49 }
50
51 NS_IMETHODIMP
GetIsFramesetDocument(bool * aIsFramesetDocument)52 MockWebBrowserPrint::GetIsFramesetDocument(bool *aIsFramesetDocument) {
53 *aIsFramesetDocument = mData.isFramesetDocument();
54 return NS_OK;
55 }
56
57 NS_IMETHODIMP
GetIsFramesetFrameSelected(bool * aIsFramesetFrameSelected)58 MockWebBrowserPrint::GetIsFramesetFrameSelected(
59 bool *aIsFramesetFrameSelected) {
60 *aIsFramesetFrameSelected = mData.isFramesetFrameSelected();
61 return NS_OK;
62 }
63
64 NS_IMETHODIMP
GetIsIFrameSelected(bool * aIsIFrameSelected)65 MockWebBrowserPrint::GetIsIFrameSelected(bool *aIsIFrameSelected) {
66 *aIsIFrameSelected = mData.isIFrameSelected();
67 return NS_OK;
68 }
69
70 NS_IMETHODIMP
GetIsRangeSelection(bool * aIsRangeSelection)71 MockWebBrowserPrint::GetIsRangeSelection(bool *aIsRangeSelection) {
72 *aIsRangeSelection = mData.isRangeSelection();
73 return NS_OK;
74 }
75
76 NS_IMETHODIMP
GetPrintPreviewNumPages(int32_t * aPrintPreviewNumPages)77 MockWebBrowserPrint::GetPrintPreviewNumPages(int32_t *aPrintPreviewNumPages) {
78 return NS_ERROR_NOT_IMPLEMENTED;
79 }
80
81 NS_IMETHODIMP
Print(nsIPrintSettings * aThePrintSettings,nsIWebProgressListener * aWPListener)82 MockWebBrowserPrint::Print(nsIPrintSettings *aThePrintSettings,
83 nsIWebProgressListener *aWPListener) {
84 return NS_ERROR_NOT_IMPLEMENTED;
85 }
86
87 NS_IMETHODIMP
PrintPreview(nsIPrintSettings * aThePrintSettings,mozIDOMWindowProxy * aChildDOMWin,nsIWebProgressListener * aWPListener)88 MockWebBrowserPrint::PrintPreview(nsIPrintSettings *aThePrintSettings,
89 mozIDOMWindowProxy *aChildDOMWin,
90 nsIWebProgressListener *aWPListener) {
91 return NS_ERROR_NOT_IMPLEMENTED;
92 }
93
94 NS_IMETHODIMP
PrintPreviewNavigate(int16_t aNavType,int32_t aPageNum)95 MockWebBrowserPrint::PrintPreviewNavigate(int16_t aNavType, int32_t aPageNum) {
96 return NS_ERROR_NOT_IMPLEMENTED;
97 }
98
99 NS_IMETHODIMP
Cancel()100 MockWebBrowserPrint::Cancel() { return NS_ERROR_NOT_IMPLEMENTED; }
101
102 NS_IMETHODIMP
EnumerateDocumentNames(uint32_t * aCount,char16_t *** aResult)103 MockWebBrowserPrint::EnumerateDocumentNames(uint32_t *aCount,
104 char16_t ***aResult) {
105 *aCount = 0;
106 *aResult = nullptr;
107
108 if (mData.printJobName().IsEmpty()) {
109 return NS_OK;
110 }
111
112 // The only consumer that cares about this is the OS X printing
113 // dialog, and even then, it only cares about the first document
114 // name. That's why we only send a single document name through
115 // PrintData.
116 char16_t **array = (char16_t **)moz_xmalloc(sizeof(char16_t *));
117 array[0] = ToNewUnicode(mData.printJobName());
118
119 *aCount = 1;
120 *aResult = array;
121 return NS_OK;
122 }
123
124 NS_IMETHODIMP
ExitPrintPreview()125 MockWebBrowserPrint::ExitPrintPreview() { return NS_ERROR_NOT_IMPLEMENTED; }
126
127 } // namespace embedding
128 } // namespace mozilla
129