embedding/components/printingui/src/mac/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.

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

mercurial