embedding/components/printingui/src/unixshared/nsPrintProgress.cpp

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
michael@0 2 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 3 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 5
michael@0 6 #include "nsPrintProgress.h"
michael@0 7
michael@0 8 #include "nsIBaseWindow.h"
michael@0 9 #include "nsISupportsArray.h"
michael@0 10 #include "nsXPCOM.h"
michael@0 11 #include "nsISupportsPrimitives.h"
michael@0 12 #include "nsIComponentManager.h"
michael@0 13
michael@0 14 NS_IMPL_ADDREF(nsPrintProgress)
michael@0 15 NS_IMPL_RELEASE(nsPrintProgress)
michael@0 16
michael@0 17 NS_INTERFACE_MAP_BEGIN(nsPrintProgress)
michael@0 18 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIPrintStatusFeedback)
michael@0 19 NS_INTERFACE_MAP_ENTRY(nsIPrintProgress)
michael@0 20 NS_INTERFACE_MAP_ENTRY(nsIPrintStatusFeedback)
michael@0 21 NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener)
michael@0 22 NS_INTERFACE_MAP_END_THREADSAFE
michael@0 23
michael@0 24
michael@0 25 nsPrintProgress::nsPrintProgress(nsIPrintSettings* aPrintSettings)
michael@0 26 {
michael@0 27 m_closeProgress = false;
michael@0 28 m_processCanceled = false;
michael@0 29 m_pendingStateFlags = -1;
michael@0 30 m_pendingStateValue = NS_OK;
michael@0 31 m_PrintSetting = aPrintSettings;
michael@0 32 }
michael@0 33
michael@0 34 nsPrintProgress::~nsPrintProgress()
michael@0 35 {
michael@0 36 (void)ReleaseListeners();
michael@0 37 }
michael@0 38
michael@0 39 /* void openProgressDialog (in nsIDOMWindow parent, in string dialogURL, in nsISupports parameters); */
michael@0 40 NS_IMETHODIMP nsPrintProgress::OpenProgressDialog(nsIDOMWindow *parent,
michael@0 41 const char *dialogURL,
michael@0 42 nsISupports *parameters,
michael@0 43 nsIObserver *openDialogObserver,
michael@0 44 bool *notifyOnOpen)
michael@0 45 {
michael@0 46 *notifyOnOpen = true;
michael@0 47 m_observer = openDialogObserver;
michael@0 48 nsresult rv = NS_ERROR_FAILURE;
michael@0 49
michael@0 50 if (m_dialog)
michael@0 51 return NS_ERROR_ALREADY_INITIALIZED;
michael@0 52
michael@0 53 if (!dialogURL || !*dialogURL)
michael@0 54 return NS_ERROR_INVALID_ARG;
michael@0 55
michael@0 56 if (parent)
michael@0 57 {
michael@0 58 // Set up window.arguments[0]...
michael@0 59 nsCOMPtr<nsISupportsArray> array;
michael@0 60 rv = NS_NewISupportsArray(getter_AddRefs(array));
michael@0 61 NS_ENSURE_SUCCESS(rv, rv);
michael@0 62
michael@0 63 nsCOMPtr<nsISupportsInterfacePointer> ifptr =
michael@0 64 do_CreateInstance(NS_SUPPORTS_INTERFACE_POINTER_CONTRACTID, &rv);
michael@0 65 NS_ENSURE_SUCCESS(rv, rv);
michael@0 66
michael@0 67 ifptr->SetData(static_cast<nsIPrintProgress*>(this));
michael@0 68 ifptr->SetDataIID(&NS_GET_IID(nsIPrintProgress));
michael@0 69
michael@0 70 array->AppendElement(ifptr);
michael@0 71
michael@0 72 array->AppendElement(parameters);
michael@0 73
michael@0 74 // Open the dialog.
michael@0 75 nsCOMPtr<nsIDOMWindow> newWindow;
michael@0 76 rv = parent->OpenDialog(NS_ConvertASCIItoUTF16(dialogURL),
michael@0 77 NS_LITERAL_STRING("_blank"),
michael@0 78 NS_LITERAL_STRING("chrome,titlebar,dependent,centerscreen"),
michael@0 79 array, getter_AddRefs(newWindow));
michael@0 80 }
michael@0 81
michael@0 82 return rv;
michael@0 83 }
michael@0 84
michael@0 85 /* void closeProgressDialog (in boolean forceClose); */
michael@0 86 NS_IMETHODIMP nsPrintProgress::CloseProgressDialog(bool forceClose)
michael@0 87 {
michael@0 88 m_closeProgress = true;
michael@0 89 // XXX Invalid cast of bool to nsresult (bug 778106)
michael@0 90 return OnStateChange(nullptr, nullptr, nsIWebProgressListener::STATE_STOP,
michael@0 91 (nsresult)forceClose);
michael@0 92 }
michael@0 93
michael@0 94 /* nsIPrompt GetPrompter (); */
michael@0 95 NS_IMETHODIMP nsPrintProgress::GetPrompter(nsIPrompt **_retval)
michael@0 96 {
michael@0 97 NS_ENSURE_ARG_POINTER(_retval);
michael@0 98 *_retval = nullptr;
michael@0 99
michael@0 100 if (! m_closeProgress && m_dialog)
michael@0 101 return m_dialog->GetPrompter(_retval);
michael@0 102
michael@0 103 return NS_ERROR_FAILURE;
michael@0 104 }
michael@0 105
michael@0 106 /* attribute boolean processCanceledByUser; */
michael@0 107 NS_IMETHODIMP nsPrintProgress::GetProcessCanceledByUser(bool *aProcessCanceledByUser)
michael@0 108 {
michael@0 109 NS_ENSURE_ARG_POINTER(aProcessCanceledByUser);
michael@0 110 *aProcessCanceledByUser = m_processCanceled;
michael@0 111 return NS_OK;
michael@0 112 }
michael@0 113 NS_IMETHODIMP nsPrintProgress::SetProcessCanceledByUser(bool aProcessCanceledByUser)
michael@0 114 {
michael@0 115 if(m_PrintSetting)
michael@0 116 m_PrintSetting->SetIsCancelled(true);
michael@0 117 m_processCanceled = aProcessCanceledByUser;
michael@0 118 OnStateChange(nullptr, nullptr, nsIWebProgressListener::STATE_STOP, NS_OK);
michael@0 119 return NS_OK;
michael@0 120 }
michael@0 121
michael@0 122 /* void RegisterListener (in nsIWebProgressListener listener); */
michael@0 123 NS_IMETHODIMP nsPrintProgress::RegisterListener(nsIWebProgressListener * listener)
michael@0 124 {
michael@0 125 if (!listener) //Nothing to do with a null listener!
michael@0 126 return NS_OK;
michael@0 127
michael@0 128 m_listenerList.AppendObject(listener);
michael@0 129 if (m_closeProgress || m_processCanceled)
michael@0 130 listener->OnStateChange(nullptr, nullptr, nsIWebProgressListener::STATE_STOP, NS_OK);
michael@0 131 else
michael@0 132 {
michael@0 133 listener->OnStatusChange(nullptr, nullptr, NS_OK, m_pendingStatus.get());
michael@0 134 if (m_pendingStateFlags != -1)
michael@0 135 listener->OnStateChange(nullptr, nullptr, m_pendingStateFlags, m_pendingStateValue);
michael@0 136 }
michael@0 137
michael@0 138 return NS_OK;
michael@0 139 }
michael@0 140
michael@0 141 /* void UnregisterListener (in nsIWebProgressListener listener); */
michael@0 142 NS_IMETHODIMP nsPrintProgress::UnregisterListener(nsIWebProgressListener *listener)
michael@0 143 {
michael@0 144 if (listener)
michael@0 145 m_listenerList.RemoveObject(listener);
michael@0 146
michael@0 147 return NS_OK;
michael@0 148 }
michael@0 149
michael@0 150 /* void doneIniting (); */
michael@0 151 NS_IMETHODIMP nsPrintProgress::DoneIniting()
michael@0 152 {
michael@0 153 if (m_observer) {
michael@0 154 m_observer->Observe(nullptr, nullptr, nullptr);
michael@0 155 }
michael@0 156 return NS_OK;
michael@0 157 }
michael@0 158
michael@0 159 /* void onStateChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long aStateFlags, in nsresult aStatus); */
michael@0 160 NS_IMETHODIMP nsPrintProgress::OnStateChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, uint32_t aStateFlags, nsresult aStatus)
michael@0 161 {
michael@0 162 m_pendingStateFlags = aStateFlags;
michael@0 163 m_pendingStateValue = aStatus;
michael@0 164
michael@0 165 uint32_t count = m_listenerList.Count();
michael@0 166 for (uint32_t i = count - 1; i < count; i --)
michael@0 167 {
michael@0 168 nsCOMPtr<nsIWebProgressListener> progressListener = m_listenerList.SafeObjectAt(i);
michael@0 169 if (progressListener)
michael@0 170 progressListener->OnStateChange(aWebProgress, aRequest, aStateFlags, aStatus);
michael@0 171 }
michael@0 172
michael@0 173 return NS_OK;
michael@0 174 }
michael@0 175
michael@0 176 /* void onProgressChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in long aCurSelfProgress, in long aMaxSelfProgress, in long aCurTotalProgress, in long aMaxTotalProgress); */
michael@0 177 NS_IMETHODIMP nsPrintProgress::OnProgressChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, int32_t aCurSelfProgress, int32_t aMaxSelfProgress, int32_t aCurTotalProgress, int32_t aMaxTotalProgress)
michael@0 178 {
michael@0 179 uint32_t count = m_listenerList.Count();
michael@0 180 for (uint32_t i = count - 1; i < count; i --)
michael@0 181 {
michael@0 182 nsCOMPtr<nsIWebProgressListener> progressListener = m_listenerList.SafeObjectAt(i);
michael@0 183 if (progressListener)
michael@0 184 progressListener->OnProgressChange(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress);
michael@0 185 }
michael@0 186
michael@0 187 return NS_OK;
michael@0 188 }
michael@0 189
michael@0 190 /* void onLocationChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsIURI location, in unsigned long aFlags); */
michael@0 191 NS_IMETHODIMP nsPrintProgress::OnLocationChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsIURI *location, uint32_t aFlags)
michael@0 192 {
michael@0 193 return NS_ERROR_NOT_IMPLEMENTED;
michael@0 194 }
michael@0 195
michael@0 196 /* void onStatusChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsresult aStatus, in wstring aMessage); */
michael@0 197 NS_IMETHODIMP nsPrintProgress::OnStatusChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsresult aStatus, const char16_t *aMessage)
michael@0 198 {
michael@0 199 if (aMessage && *aMessage)
michael@0 200 m_pendingStatus = aMessage;
michael@0 201
michael@0 202 uint32_t count = m_listenerList.Count();
michael@0 203 for (uint32_t i = count - 1; i < count; i --)
michael@0 204 {
michael@0 205 nsCOMPtr<nsIWebProgressListener> progressListener = m_listenerList.SafeObjectAt(i);
michael@0 206 if (progressListener)
michael@0 207 progressListener->OnStatusChange(aWebProgress, aRequest, aStatus, aMessage);
michael@0 208 }
michael@0 209
michael@0 210 return NS_OK;
michael@0 211 }
michael@0 212
michael@0 213 /* void onSecurityChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long state); */
michael@0 214 NS_IMETHODIMP nsPrintProgress::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, uint32_t state)
michael@0 215 {
michael@0 216 return NS_OK;
michael@0 217 }
michael@0 218
michael@0 219 nsresult nsPrintProgress::ReleaseListeners()
michael@0 220 {
michael@0 221 m_listenerList.Clear();
michael@0 222
michael@0 223 return NS_OK;
michael@0 224 }
michael@0 225
michael@0 226 NS_IMETHODIMP nsPrintProgress::ShowStatusString(const char16_t *status)
michael@0 227 {
michael@0 228 return OnStatusChange(nullptr, nullptr, NS_OK, status);
michael@0 229 }
michael@0 230
michael@0 231 /* void startMeteors (); */
michael@0 232 NS_IMETHODIMP nsPrintProgress::StartMeteors()
michael@0 233 {
michael@0 234 return NS_ERROR_NOT_IMPLEMENTED;
michael@0 235 }
michael@0 236
michael@0 237 /* void stopMeteors (); */
michael@0 238 NS_IMETHODIMP nsPrintProgress::StopMeteors()
michael@0 239 {
michael@0 240 return NS_ERROR_NOT_IMPLEMENTED;
michael@0 241 }
michael@0 242
michael@0 243 /* void showProgress (in long percent); */
michael@0 244 NS_IMETHODIMP nsPrintProgress::ShowProgress(int32_t percent)
michael@0 245 {
michael@0 246 return NS_ERROR_NOT_IMPLEMENTED;
michael@0 247 }
michael@0 248
michael@0 249 /* [noscript] void setDocShell (in nsIDocShell shell, in nsIDOMWindow window); */
michael@0 250 NS_IMETHODIMP nsPrintProgress::SetDocShell(nsIDocShell *shell, nsIDOMWindow *window)
michael@0 251 {
michael@0 252 return NS_ERROR_NOT_IMPLEMENTED;
michael@0 253 }
michael@0 254
michael@0 255 /* void closeWindow (); */
michael@0 256 NS_IMETHODIMP nsPrintProgress::CloseWindow()
michael@0 257 {
michael@0 258 return NS_ERROR_NOT_IMPLEMENTED;
michael@0 259 }
michael@0 260

mercurial