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