Bug 470455 - test_database_sync_embed_visits.js leaks, r=sdwilsh
[wine-gecko.git] / content / events / src / nsDOMPopupBlockedEvent.cpp
blob78e997310c1e3d129e5306ebf3414d4920cb6a5e
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
13 * License.
15 * The Original Code is mozilla.org code.
17 * The Initial Developer of the Original Code is
18 * Netscape Communications Corporation.
19 * Portions created by the Initial Developer are Copyright (C) 1998
20 * the Initial Developer. All Rights Reserved.
22 * Contributor(s):
23 * Steve Clark (buster@netscape.com)
24 * Ilya Konstantinov (mozilla-code@future.shiny.co.il)
26 * Alternatively, the contents of this file may be used under the terms of
27 * either the GNU General Public License Version 2 or later (the "GPL"), or
28 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29 * in which case the provisions of the GPL or the LGPL are applicable instead
30 * of those above. If you wish to allow use of your version of this file only
31 * under the terms of either the GPL or the LGPL, and not to allow others to
32 * use your version of this file under the terms of the MPL, indicate your
33 * decision by deleting the provisions above and replace them with the notice
34 * and other provisions required by the GPL or the LGPL. If you do not delete
35 * the provisions above, a recipient may use your version of this file under
36 * the terms of any one of the MPL, the GPL or the LGPL.
38 * ***** END LICENSE BLOCK ***** */
40 #include "nsDOMPopupBlockedEvent.h"
41 #include "nsIURI.h"
42 #include "nsContentUtils.h"
44 nsDOMPopupBlockedEvent::nsDOMPopupBlockedEvent(nsPresContext* aPresContext,
45 nsPopupBlockedEvent* aEvent)
46 : nsDOMEvent(aPresContext, aEvent ? aEvent :
47 new nsPopupBlockedEvent(PR_FALSE, 0))
49 NS_ASSERTION(mEvent->eventStructType == NS_POPUPBLOCKED_EVENT, "event type mismatch");
51 if (aEvent) {
52 mEventIsInternal = PR_FALSE;
54 else {
55 mEventIsInternal = PR_TRUE;
56 mEvent->time = PR_Now();
60 nsDOMPopupBlockedEvent::~nsDOMPopupBlockedEvent()
62 if (mEventIsInternal) {
63 if (mEvent->eventStructType == NS_POPUPBLOCKED_EVENT) {
64 nsPopupBlockedEvent* event = static_cast<nsPopupBlockedEvent*>(mEvent);
65 NS_IF_RELEASE(event->mPopupWindowURI);
67 delete event;
68 mEvent = nsnull;
73 NS_IMPL_ADDREF_INHERITED(nsDOMPopupBlockedEvent, nsDOMEvent)
74 NS_IMPL_RELEASE_INHERITED(nsDOMPopupBlockedEvent, nsDOMEvent)
76 NS_INTERFACE_MAP_BEGIN(nsDOMPopupBlockedEvent)
77 NS_INTERFACE_MAP_ENTRY(nsIDOMPopupBlockedEvent)
78 NS_INTERFACE_MAP_ENTRY_CONTENT_CLASSINFO(PopupBlockedEvent)
79 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
81 NS_IMETHODIMP
82 nsDOMPopupBlockedEvent::InitPopupBlockedEvent(const nsAString & aTypeArg,
83 PRBool aCanBubbleArg, PRBool aCancelableArg,
84 nsIDOMWindow *aRequestingWindow,
85 nsIURI *aPopupWindowURI,
86 const nsAString & aPopupWindowName,
87 const nsAString & aPopupWindowFeatures)
89 nsresult rv = nsDOMEvent::InitEvent(aTypeArg, aCanBubbleArg, aCancelableArg);
90 NS_ENSURE_SUCCESS(rv, rv);
92 switch (mEvent->eventStructType)
94 case NS_POPUPBLOCKED_EVENT:
96 nsPopupBlockedEvent* event = static_cast<nsPopupBlockedEvent*>(mEvent);
97 event->mRequestingWindow = do_GetWeakReference(aRequestingWindow);
98 event->mPopupWindowURI = aPopupWindowURI;
99 NS_IF_ADDREF(event->mPopupWindowURI);
100 event->mPopupWindowFeatures = aPopupWindowFeatures;
101 event->mPopupWindowName = aPopupWindowName;
102 break;
104 default:
105 break;
108 return NS_OK;
111 NS_IMETHODIMP
112 nsDOMPopupBlockedEvent::GetRequestingWindow(nsIDOMWindow **aRequestingWindow)
114 if (mEvent->eventStructType == NS_POPUPBLOCKED_EVENT) {
115 nsPopupBlockedEvent* event = static_cast<nsPopupBlockedEvent*>(mEvent);
116 CallQueryReferent(event->mRequestingWindow.get(), aRequestingWindow);
117 } else {
118 *aRequestingWindow = 0;
121 return NS_OK; // Don't throw an exception
124 NS_IMETHODIMP
125 nsDOMPopupBlockedEvent::GetPopupWindowURI(nsIURI **aPopupWindowURI)
127 NS_ENSURE_ARG_POINTER(aPopupWindowURI);
128 if (mEvent->eventStructType == NS_POPUPBLOCKED_EVENT) {
129 nsPopupBlockedEvent* event = static_cast<nsPopupBlockedEvent*>(mEvent);
130 *aPopupWindowURI = event->mPopupWindowURI;
131 NS_IF_ADDREF(*aPopupWindowURI);
132 return NS_OK;
134 *aPopupWindowURI = 0;
135 return NS_OK; // Don't throw an exception
138 NS_IMETHODIMP
139 nsDOMPopupBlockedEvent::GetPopupWindowFeatures(nsAString &aPopupWindowFeatures)
141 if (mEvent->eventStructType == NS_POPUPBLOCKED_EVENT) {
142 nsPopupBlockedEvent* event = static_cast<nsPopupBlockedEvent*>(mEvent);
143 aPopupWindowFeatures = event->mPopupWindowFeatures;
144 return NS_OK;
146 aPopupWindowFeatures.Truncate();
147 return NS_OK; // Don't throw an exception
150 NS_IMETHODIMP
151 nsDOMPopupBlockedEvent::GetPopupWindowName(nsAString &aPopupWindowName)
153 if (mEvent->eventStructType == NS_POPUPBLOCKED_EVENT) {
154 nsPopupBlockedEvent* event = static_cast<nsPopupBlockedEvent*>(mEvent);
155 aPopupWindowName = event->mPopupWindowName;
156 return NS_OK;
158 aPopupWindowName.Truncate();
159 return NS_OK; // Don't throw an exception
162 nsresult NS_NewDOMPopupBlockedEvent(nsIDOMEvent** aInstancePtrResult,
163 nsPresContext* aPresContext,
164 nsPopupBlockedEvent *aEvent)
166 nsDOMPopupBlockedEvent* it = new nsDOMPopupBlockedEvent(aPresContext, aEvent);
167 if (nsnull == it) {
168 return NS_ERROR_OUT_OF_MEMORY;
171 return CallQueryInterface(it, aInstancePtrResult);