mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 595445 - Factor out geolocation prompt into something that can be reused - Part 2 r=olli a=mfinkle
--HG-- rename : dom/src/geolocation/nsGeolocationOOP.h => dom/base/nsContentPermissionHelper.h extra : rebase_source : c11252249778200db9d77c3937101ef349bfb847
This commit is contained in:
parent
f9b04364b8
commit
a3714148d3
@ -78,6 +78,7 @@ EXPORTS = \
|
||||
nsPIWindowRoot.h \
|
||||
nsFocusManager.h \
|
||||
nsWrapperCache.h \
|
||||
nsContentPermissionHelper.h \
|
||||
$(NULL)
|
||||
|
||||
CPPSRCS = \
|
||||
@ -101,6 +102,7 @@ CPPSRCS = \
|
||||
nsScriptNameSpaceManager.cpp \
|
||||
nsDOMScriptObjectFactory.cpp \
|
||||
nsQueryContentEventResult.cpp \
|
||||
nsContentPermissionHelper.cpp \
|
||||
$(NULL)
|
||||
|
||||
include $(topsrcdir)/dom/dom-config.mk
|
||||
|
167
dom/base/nsContentPermissionHelper.cpp
Normal file
167
dom/base/nsContentPermissionHelper.cpp
Normal file
@ -0,0 +1,167 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* The Mozilla Foundation
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Doug Turner <dougt@mozilla.com> (Original Author)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsContentPermissionHelper.h"
|
||||
#include "nsIContentPermissionPrompt.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsIDOMWindow.h"
|
||||
#include "nsIDOMElement.h"
|
||||
|
||||
#include "mozilla/unused.h"
|
||||
|
||||
#ifdef MOZ_IPC
|
||||
|
||||
using mozilla::unused; // <snicker>
|
||||
|
||||
nsContentPermissionRequestProxy::nsContentPermissionRequestProxy()
|
||||
{
|
||||
MOZ_COUNT_CTOR(nsContentPermissionRequestProxy);
|
||||
}
|
||||
|
||||
nsContentPermissionRequestProxy::~nsContentPermissionRequestProxy()
|
||||
{
|
||||
MOZ_COUNT_DTOR(nsContentPermissionRequestProxy);
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsContentPermissionRequestProxy::Init(const nsACString & type,
|
||||
mozilla::dom::ContentPermissionRequestParent* parent)
|
||||
{
|
||||
NS_ASSERTION(parent, "null parent");
|
||||
mParent = parent;
|
||||
mType = type;
|
||||
|
||||
nsCOMPtr<nsIContentPermissionPrompt> prompt = do_GetService(NS_CONTENT_PERMISSION_PROMPT_CONTRACTID);
|
||||
if (!prompt) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
prompt->Prompt(this);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS1(nsContentPermissionRequestProxy, nsIContentPermissionRequest);
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsContentPermissionRequestProxy::GetType(nsACString & aType)
|
||||
{
|
||||
aType = mType;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsContentPermissionRequestProxy::GetWindow(nsIDOMWindow * *aRequestingWindow)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aRequestingWindow);
|
||||
*aRequestingWindow = nsnull; // ipc doesn't have a window
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsContentPermissionRequestProxy::GetUri(nsIURI * *aRequestingURI)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aRequestingURI);
|
||||
if (mParent == nsnull)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
NS_ADDREF(*aRequestingURI = mParent->mURI);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsContentPermissionRequestProxy::GetElement(nsIDOMElement * *aRequestingElement)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aRequestingElement);
|
||||
if (mParent == nsnull)
|
||||
return NS_ERROR_FAILURE;
|
||||
NS_ADDREF(*aRequestingElement = mParent->mElement);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsContentPermissionRequestProxy::Cancel()
|
||||
{
|
||||
NS_ASSERTION(mParent, "No parent for request");
|
||||
if (mParent == nsnull)
|
||||
return NS_ERROR_FAILURE;
|
||||
unused << mozilla::dom::ContentPermissionRequestParent::Send__delete__(mParent, false);
|
||||
mParent = nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsContentPermissionRequestProxy::Allow()
|
||||
{
|
||||
NS_ASSERTION(mParent, "No parent for request");
|
||||
if (mParent == nsnull)
|
||||
return NS_ERROR_FAILURE;
|
||||
unused << mozilla::dom::ContentPermissionRequestParent::Send__delete__(mParent, true);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
ContentPermissionRequestParent::ContentPermissionRequestParent(const nsACString& aType,
|
||||
nsIDOMElement *aElement,
|
||||
const IPC::URI& aUri)
|
||||
{
|
||||
MOZ_COUNT_CTOR(ContentPermissionRequestParent);
|
||||
|
||||
mURI = aUri;
|
||||
mElement = aElement;
|
||||
mType = aType;
|
||||
}
|
||||
|
||||
ContentPermissionRequestParent::~ContentPermissionRequestParent()
|
||||
{
|
||||
MOZ_COUNT_DTOR(ContentPermissionRequestParent);
|
||||
}
|
||||
|
||||
bool
|
||||
ContentPermissionRequestParent::Recvprompt()
|
||||
{
|
||||
mProxy = new nsContentPermissionRequestProxy();
|
||||
NS_ASSERTION(mProxy, "Alloc of request proxy failed");
|
||||
if (NS_FAILED(mProxy->Init(mType, this)))
|
||||
mProxy->Cancel();
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
#endif
|
@ -35,32 +35,32 @@
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef nsGeolocationOOP_h
|
||||
#define nsGeolocationOOP_h
|
||||
#ifndef nsContentPermissionHelper_h
|
||||
#define nsContentPermissionHelper_h
|
||||
|
||||
#include "base/basictypes.h"
|
||||
|
||||
#include "nsIGeolocationProvider.h"
|
||||
#include "nsIContentPermissionPrompt.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIDOMElement.h"
|
||||
|
||||
#include "mozilla/dom/PContentPermissionRequestParent.h"
|
||||
|
||||
class nsGeolocationRequestProxy;
|
||||
class nsContentPermissionRequestProxy;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class GeolocationRequestParent : public PContentPermissionRequestParent
|
||||
class ContentPermissionRequestParent : public PContentPermissionRequestParent
|
||||
{
|
||||
public:
|
||||
GeolocationRequestParent(nsIDOMElement *element, const IPC::URI& principal);
|
||||
virtual ~GeolocationRequestParent();
|
||||
ContentPermissionRequestParent(const nsACString& type, nsIDOMElement *element, const IPC::URI& principal);
|
||||
virtual ~ContentPermissionRequestParent();
|
||||
|
||||
nsCOMPtr<nsIURI> mURI;
|
||||
nsCOMPtr<nsIDOMElement> mElement;
|
||||
nsCOMPtr<nsGeolocationRequestProxy> mProxy;
|
||||
nsCOMPtr<nsContentPermissionRequestProxy> mProxy;
|
||||
nsCString mType;
|
||||
|
||||
private:
|
||||
virtual bool Recvprompt();
|
||||
@ -69,20 +69,21 @@ class GeolocationRequestParent : public PContentPermissionRequestParent
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
||||
class nsGeolocationRequestProxy : public nsIContentPermissionRequest
|
||||
class nsContentPermissionRequestProxy : public nsIContentPermissionRequest
|
||||
{
|
||||
public:
|
||||
nsGeolocationRequestProxy();
|
||||
virtual ~nsGeolocationRequestProxy();
|
||||
nsContentPermissionRequestProxy();
|
||||
virtual ~nsContentPermissionRequestProxy();
|
||||
|
||||
nsresult Init(mozilla::dom::GeolocationRequestParent* parent);
|
||||
nsresult Init(const nsACString& type, mozilla::dom::ContentPermissionRequestParent* parent);
|
||||
|
||||
NS_DECL_ISUPPORTS;
|
||||
NS_DECL_NSICONTENTPERMISSIONREQUEST;
|
||||
|
||||
private:
|
||||
// Non-owning pointer to the GeolocationRequestParent object which owns this proxy.
|
||||
mozilla::dom::GeolocationRequestParent* mParent;
|
||||
// Non-owning pointer to the ContentPermissionRequestParent object which owns this proxy.
|
||||
mozilla::dom::ContentPermissionRequestParent* mParent;
|
||||
nsCString mType;
|
||||
};
|
||||
#endif // nsGeolocationOOP_h
|
||||
#endif // nsContentPermissionHelper_h
|
||||
|
@ -83,7 +83,7 @@ LOCAL_INCLUDES += \
|
||||
-I$(topsrcdir)/chrome/src \
|
||||
-I$(topsrcdir)/uriloader/exthandler \
|
||||
-I$(srcdir)/../../netwerk/base/src \
|
||||
-I$(srcdir)/../src/geolocation \
|
||||
-I$(srcdir)/../src/base \
|
||||
$(NULL)
|
||||
|
||||
CXXFLAGS += $(TK_CFLAGS)
|
||||
|
@ -63,7 +63,7 @@
|
||||
#include "nsNetUtil.h"
|
||||
#include "jsarray.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsGeolocationOOP.h"
|
||||
#include "nsContentPermissionHelper.h"
|
||||
#include "nsIDOMNSHTMLFrameElement.h"
|
||||
#include "nsIDialogCreator.h"
|
||||
#include "nsThreadUtils.h"
|
||||
@ -527,11 +527,7 @@ TabParent::DeallocPDocumentRendererNativeID(PDocumentRendererNativeIDParent* act
|
||||
PContentPermissionRequestParent*
|
||||
TabParent::AllocPContentPermissionRequest(const nsCString& type, const IPC::URI& uri)
|
||||
{
|
||||
if (type.Equals(NS_LITERAL_CSTRING("geolocation"))) {
|
||||
return new GeolocationRequestParent(mFrameElement, uri);
|
||||
}
|
||||
|
||||
return nsnull;
|
||||
return new ContentPermissionRequestParent(type, mFrameElement, uri);
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -35,7 +35,7 @@
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifdef MOZ_IPC
|
||||
#include "nsGeolocationOOP.h"
|
||||
#include "nsContentPermissionHelper.h"
|
||||
#include "nsXULAppAPI.h"
|
||||
|
||||
#include "mozilla/dom/PBrowserChild.h"
|
||||
@ -1143,112 +1143,3 @@ DOMCI_DATA(GeoPositionCoords, void)
|
||||
DOMCI_DATA(GeoPosition, void)
|
||||
#endif
|
||||
|
||||
#ifdef MOZ_IPC
|
||||
nsGeolocationRequestProxy::nsGeolocationRequestProxy()
|
||||
{
|
||||
MOZ_COUNT_CTOR(nsGeolocationRequestProxy);
|
||||
}
|
||||
|
||||
nsGeolocationRequestProxy::~nsGeolocationRequestProxy()
|
||||
{
|
||||
MOZ_COUNT_DTOR(nsGeolocationRequestProxy);
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGeolocationRequestProxy::Init(mozilla::dom::GeolocationRequestParent* parent)
|
||||
{
|
||||
NS_ASSERTION(parent, "null parent");
|
||||
mParent = parent;
|
||||
|
||||
nsCOMPtr<nsIContentPermissionPrompt> prompt = do_GetService(NS_CONTENT_PERMISSION_PROMPT_CONTRACTID);
|
||||
if (!prompt) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
(void) prompt->Prompt(this);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS1(nsGeolocationRequestProxy, nsIContentPermissionRequest);
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGeolocationRequestProxy::GetType(nsACString & aType)
|
||||
{
|
||||
aType = "geolocation";
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGeolocationRequestProxy::GetWindow(nsIDOMWindow * *aRequestingWindow)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aRequestingWindow);
|
||||
*aRequestingWindow = nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGeolocationRequestProxy::GetUri(nsIURI * *aRequestingURI)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aRequestingURI);
|
||||
NS_ASSERTION(mParent, "No parent for request");
|
||||
|
||||
NS_ADDREF(*aRequestingURI = mParent->mURI);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGeolocationRequestProxy::GetElement(nsIDOMElement * *aRequestingElement)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aRequestingElement);
|
||||
NS_ASSERTION(mParent && mParent->mElement.get(), "No parent for request");
|
||||
NS_ADDREF(*aRequestingElement = mParent->mElement);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGeolocationRequestProxy::Cancel()
|
||||
{
|
||||
NS_ASSERTION(mParent, "No parent for request");
|
||||
unused << mozilla::dom::GeolocationRequestParent::Send__delete__(mParent, false);
|
||||
mParent = nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGeolocationRequestProxy::Allow()
|
||||
{
|
||||
NS_ASSERTION(mParent, "No parent for request");
|
||||
unused << mozilla::dom::GeolocationRequestParent::Send__delete__(mParent, true);
|
||||
mParent = nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
GeolocationRequestParent::GeolocationRequestParent(nsIDOMElement *element, const IPC::URI& uri)
|
||||
{
|
||||
MOZ_COUNT_CTOR(GeolocationRequestParent);
|
||||
|
||||
mURI = uri;
|
||||
mElement = element;
|
||||
}
|
||||
|
||||
GeolocationRequestParent::~GeolocationRequestParent()
|
||||
{
|
||||
MOZ_COUNT_DTOR(GeolocationRequestParent);
|
||||
}
|
||||
|
||||
bool
|
||||
GeolocationRequestParent::Recvprompt()
|
||||
{
|
||||
mProxy = new nsGeolocationRequestProxy();
|
||||
NS_ASSERTION(mProxy, "Alloc of request proxy failed");
|
||||
if (NS_FAILED(mProxy->Init(this)))
|
||||
mProxy->Cancel();
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user