Bug 594261 - IPC part - Factor out geolocation prompt into something that can be reused. r=chris jones, a=stuart

--HG--
rename : dom/src/geolocation/PGeolocationRequest.ipdl => dom/ipc/PContentPermissionRequest.ipdl
extra : rebase_source : 73f75b6f4c4deae71337dd2a9925d15aefcaacb8
This commit is contained in:
Doug Turner 2010-09-09 22:00:08 -07:00
parent 4511728eeb
commit 4c4c8dfdd9
14 changed files with 93 additions and 72 deletions

View File

@ -47,7 +47,7 @@ LIBXUL_LIBRARY = 1
FORCE_STATIC_LIB = 1
EXPORT_LIBRARY = 1
EXPORTS = TabMessageUtils.h
EXPORTS = TabMessageUtils.h PCOMContentPermissionRequestChild.h
EXPORTS_NAMESPACES = mozilla mozilla/dom
@ -80,10 +80,10 @@ LOCAL_INCLUDES += \
-I$(srcdir)/../../content/base/src \
-I$(srcdir)/../../content/events/src \
-I$(srcdir)/../../toolkit/components/places/src \
-I$(srcdir)/../src/geolocation \
-I$(topsrcdir)/chrome/src \
-I$(topsrcdir)/uriloader/exthandler \
-I$(srcdir)/../../netwerk/base/src \
-I$(srcdir)/../src/geolocation \
$(NULL)
CXXFLAGS += $(TK_CFLAGS)

View File

@ -42,7 +42,7 @@ include protocol PContentDialog;
include protocol PDocumentRenderer;
include protocol PDocumentRendererShmem;
include protocol PDocumentRendererNativeID;
include protocol PGeolocationRequest;
include protocol PContentPermissionRequest;
include protocol PExternalHelperApp;
include "mozilla/TabTypes.h";
@ -71,7 +71,7 @@ rpc protocol PBrowser
manages PDocumentRenderer;
manages PDocumentRendererShmem;
manages PDocumentRendererNativeID;
manages PGeolocationRequest;
manages PContentPermissionRequest;
manages PExternalHelperApp;
both:
@ -114,7 +114,7 @@ parent:
QueryContentResult(nsQueryContentEvent event);
PGeolocationRequest(URI uri);
PContentPermissionRequest(nsCString aType, URI uri);
PContentDialog(PRUint32 aType, nsCString aName, nsCString aFeatures,
PRInt32[] aIntParams, nsString[] aStringParams);

View File

@ -0,0 +1,54 @@
/* ***** 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 "mozilla/dom/PContentPermissionRequestChild.h"
// Microsoft's API Name hackery sucks
#undef CreateEvent
/*
PContentPermissionRequestChild implementations also are
XPCOM objects. Addref() is called on their implementation
before SendPCOntentPermissionRequestConstructor is called.
When Dealloc is called, IPDLRelease() is called.
Implementations of this method are expected to call
Release() on themselves. See Bug 594261 for more
information.
*/
class PCOMContentPermissionRequestChild : public mozilla::dom::PContentPermissionRequestChild {
public:
virtual void IPDLRelease() = 0;
};

View File

@ -43,7 +43,7 @@ using IPC::URI;
namespace mozilla {
namespace dom {
protocol PGeolocationRequest
protocol PContentPermissionRequest
{
manager PBrowser;

View File

@ -87,7 +87,7 @@
#include "nsIFrame.h"
#include "nsIView.h"
#include "nsIEventListenerManager.h"
#include "nsGeolocation.h"
#include "PCOMContentPermissionRequestChild.h"
#ifdef MOZ_WIDGET_QT
#include <QGraphicsView>
@ -968,21 +968,18 @@ TabChild::DeallocPContentDialog(PContentDialogChild* aDialog)
return true;
}
/* The PGeolocationRequestChild actor is implemented by a refcounted
nsGeolocationRequest, and has an identical lifetime. */
PGeolocationRequestChild*
TabChild::AllocPGeolocationRequest(const IPC::URI&)
PContentPermissionRequestChild*
TabChild::AllocPContentPermissionRequest(const nsCString& aType, const IPC::URI&)
{
NS_RUNTIMEABORT("unused");
return nsnull;
}
bool
TabChild::DeallocPGeolocationRequest(PGeolocationRequestChild* actor)
TabChild::DeallocPContentPermissionRequest(PContentPermissionRequestChild* actor)
{
static_cast<nsGeolocationRequest*>(actor)->Release();
return true;
static_cast<PCOMContentPermissionRequestChild*>(actor)->IPDLRelease();
return true;
}
bool

View File

@ -283,8 +283,8 @@ public:
const gfxMatrix& aMatrix,
const PRUint32& aNativeID);
virtual PGeolocationRequestChild* AllocPGeolocationRequest(const IPC::URI& uri);
virtual bool DeallocPGeolocationRequest(PGeolocationRequestChild* actor);
virtual PContentPermissionRequestChild* AllocPContentPermissionRequest(const nsCString& aType, const IPC::URI& uri);
virtual bool DeallocPContentPermissionRequest(PContentPermissionRequestChild* actor);
nsIWebNavigation* WebNavigation() { return mWebNav; }

View File

@ -524,14 +524,18 @@ TabParent::DeallocPDocumentRendererNativeID(PDocumentRendererNativeIDParent* act
return true;
}
PGeolocationRequestParent*
TabParent::AllocPGeolocationRequest(const IPC::URI& uri)
PContentPermissionRequestParent*
TabParent::AllocPContentPermissionRequest(const nsCString& type, const IPC::URI& uri)
{
return new GeolocationRequestParent(mFrameElement, uri);
if (type.Equals(NS_LITERAL_CSTRING("geolocation"))) {
return new GeolocationRequestParent(mFrameElement, uri);
}
return nsnull;
}
bool
TabParent::DeallocPGeolocationRequest(PGeolocationRequestParent* actor)
TabParent::DeallocPContentPermissionRequest(PContentPermissionRequestParent* actor)
{
delete actor;
return true;

View File

@ -199,8 +199,8 @@ public:
virtual bool DeallocPDocumentRendererNativeID(PDocumentRendererNativeIDParent* actor);
virtual PGeolocationRequestParent* AllocPGeolocationRequest(const IPC::URI& uri);
virtual bool DeallocPGeolocationRequest(PGeolocationRequestParent* actor);
virtual PContentPermissionRequestParent* AllocPContentPermissionRequest(const nsCString& aType, const IPC::URI& uri);
virtual bool DeallocPContentPermissionRequest(PContentPermissionRequestParent* actor);
JSBool GetGlobalJSObject(JSContext* cx, JSObject** globalp);

View File

@ -41,4 +41,5 @@ IPDLSRCS = \
PDocumentRenderer.ipdl \
PDocumentRendererNativeID.ipdl \
PDocumentRendererShmem.ipdl \
PContentPermissionRequest.ipdl \
$(NULL)

View File

@ -1,40 +0,0 @@
# ***** 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 Geolocation 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):
# Josh Matthews <josh@joshmatthews.net> (Initial Developer)
#
# 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 *****
IPDLSRCS = \
PGeolocationRequest.ipdl \
$(NULL)

View File

@ -1115,13 +1115,14 @@ nsGeolocation::RegisterRequestWithPrompt(nsGeolocationRequest* request)
// the one and only TabChild.
TabChild* child = GetTabChildFrom(window->GetDocShell());
child->SendPGeolocationRequestConstructor(request, IPC::URI(mURI));
// Retain a reference so the object isn't deleted without IPDL's knowledge.
// Corresponding release occurs in DeallocPGeolocationRequest.
// Corresponding release occurs in DeallocPContentPermissionRequest.
request->AddRef();
unused << request->Sendprompt();
nsCString type = NS_LITERAL_CSTRING("geolocation");
child->SendPContentPermissionRequestConstructor(request, type, IPC::URI(mURI));
request->Sendprompt();
return;
}
#endif

View File

@ -38,7 +38,7 @@
#define nsGeoLocation_h
#ifdef MOZ_IPC
#include "mozilla/dom/PGeolocationRequestChild.h"
#include "mozilla/dom/PContentPermissionRequestChild.h"
// Microsoft's API Name hackery sucks
#undef CreateEvent
#endif
@ -67,6 +67,10 @@
#include "nsIGeolocationProvider.h"
#include "nsIContentPermissionPrompt.h"
#ifdef MOZ_IPC
#include "PCOMContentPermissionRequestChild.h"
#endif
class nsGeolocationService;
class nsGeolocation;
@ -74,7 +78,7 @@ class nsGeolocationRequest
: public nsIContentPermissionRequest
, public nsITimerCallback
#ifdef MOZ_IPC
, public mozilla::dom::PGeolocationRequestChild
, public PCOMContentPermissionRequestChild
#endif
{
public:
@ -100,6 +104,7 @@ class nsGeolocationRequest
#ifdef MOZ_IPC
bool Recv__delete__(const bool& allow);
void IPDLRelease() { Release(); }
#endif
private:

View File

@ -45,14 +45,14 @@
#include "nsString.h"
#include "nsIDOMElement.h"
#include "mozilla/dom/PGeolocationRequestParent.h"
#include "mozilla/dom/PContentPermissionRequestParent.h"
class nsGeolocationRequestProxy;
namespace mozilla {
namespace dom {
class GeolocationRequestParent : public PGeolocationRequestParent
class GeolocationRequestParent : public PContentPermissionRequestParent
{
public:
GeolocationRequestParent(nsIDOMElement *element, const IPC::URI& principal);

View File

@ -55,7 +55,6 @@ EXPORT_LIBRARY = 1
##
IPDLDIRS = \
uriloader/exthandler \
dom/src/geolocation \
dom/plugins \
dom/ipc \
gfx/layers/ipc \