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:
Doug Turner 2010-09-13 12:49:27 -07:00
parent f9b04364b8
commit a3714148d3
6 changed files with 189 additions and 132 deletions

View File

@ -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

View 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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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