author | Chris Jones <jones.chris.g@gmail.com> |
Wed, 05 Oct 2011 15:15:45 -0700 | |
changeset 78181 | 7e1f77774d9eee2b3d1b6b6baaa0c4656bfa5b0d |
parent 78180 | c82d199958ff63d1a546c01bd600f5fa929db803 |
child 78182 | f107192c7d5936c81814f00967f580aaca99ed32 |
child 78188 | d67391276eb8d819304845b7885c7c489ad17d95 |
push id | 21275 |
push user | bmo@edmorley.co.uk |
push date | Thu, 06 Oct 2011 10:15:46 +0000 |
treeherder | mozilla-central@f107192c7d59 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | khuey, roc |
bugs | 690670 |
milestone | 10.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/ipc/ContentChild.cpp +++ b/dom/ipc/ContentChild.cpp @@ -47,38 +47,40 @@ #include "ContentChild.h" #include "CrashReporterChild.h" #include "TabChild.h" #if defined(MOZ_SYDNEYAUDIO) #include "AudioChild.h" #endif +#include "mozilla/dom/ExternalHelperAppChild.h" +#include "mozilla/dom/PCrashReporterChild.h" +#include "mozilla/dom/StorageChild.h" +#include "mozilla/hal_sandbox/PHalChild.h" #include "mozilla/ipc/TestShellChild.h" -#include "mozilla/net/NeckoChild.h" #include "mozilla/ipc/XPCShellEnvironment.h" #include "mozilla/jsipc/PContextWrapperChild.h" -#include "mozilla/dom/ExternalHelperAppChild.h" -#include "mozilla/dom/StorageChild.h" -#include "mozilla/dom/PCrashReporterChild.h" +#include "mozilla/net/NeckoChild.h" #if defined(MOZ_SYDNEYAUDIO) #include "nsAudioStream.h" #endif #include "nsIMemoryReporter.h" #include "nsIObserverService.h" #include "nsTObserverArray.h" #include "nsIObserver.h" #include "nsIPrefService.h" #include "nsServiceManagerUtils.h" #include "nsXULAppAPI.h" #include "nsWeakReference.h" #include "nsIScriptError.h" #include "nsIConsoleService.h" #include "nsJSEnvironment.h" +#include "SandboxHal.h" #include "History.h" #include "nsDocShellCID.h" #include "nsNetUtil.h" #include "base/message_loop.h" #include "base/task.h" @@ -104,16 +106,17 @@ #include <process.h> #define getpid _getpid #endif #ifdef ACCESSIBILITY #include "nsIAccessibilityService.h" #endif +using namespace mozilla::hal_sandbox; using namespace mozilla::ipc; using namespace mozilla::net; using namespace mozilla::places; using namespace mozilla::docshell; namespace mozilla { namespace dom { @@ -435,16 +438,29 @@ ContentChild::AllocPCrashReporter(const bool ContentChild::DeallocPCrashReporter(PCrashReporterChild* crashreporter) { delete crashreporter; return true; } +PHalChild* +ContentChild::AllocPHal() +{ + return CreateHalChild(); +} + +bool +ContentChild::DeallocPHal(PHalChild* aHal) +{ + delete aHal; + return true; +} + PTestShellChild* ContentChild::AllocPTestShell() { return new TestShellChild(); } bool ContentChild::DeallocPTestShell(PTestShellChild* shell)
--- a/dom/ipc/ContentChild.h +++ b/dom/ipc/ContentChild.h @@ -91,16 +91,19 @@ public: virtual bool DeallocPBrowser(PBrowserChild*); virtual PCrashReporterChild* AllocPCrashReporter(const mozilla::dom::NativeThreadId& id, const PRUint32& processType); virtual bool DeallocPCrashReporter(PCrashReporterChild*); + NS_OVERRIDE virtual PHalChild* AllocPHal(); + NS_OVERRIDE virtual bool DeallocPHal(PHalChild*); + virtual PMemoryReportRequestChild* AllocPMemoryReportRequest(); virtual bool DeallocPMemoryReportRequest(PMemoryReportRequestChild* actor); virtual bool RecvPMemoryReportRequestConstructor(PMemoryReportRequestChild* child);
--- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -71,16 +71,17 @@ #include "nsIScriptError.h" #include "nsConsoleMessage.h" #include "nsAppDirectoryServiceDefs.h" #include "nsAppRunner.h" #include "IDBFactory.h" #if defined(MOZ_SYDNEYAUDIO) #include "AudioParent.h" #endif +#include "SandboxHal.h" #if defined(ANDROID) || defined(LINUX) #include <sys/time.h> #include <sys/resource.h> #include "nsSystemInfo.h" #endif #ifdef MOZ_PERMISSIONS @@ -89,16 +90,17 @@ #ifdef MOZ_CRASHREPORTER #include "nsICrashReporter.h" #include "nsExceptionHandler.h" #endif #include "mozilla/dom/ExternalHelperAppParent.h" #include "mozilla/dom/StorageParent.h" +#include "mozilla/hal_sandbox/PHalParent.h" #include "mozilla/Services.h" #include "mozilla/unused.h" #include "nsDeviceMotion.h" #include "mozilla/Util.h" #include "nsIMemoryReporter.h" #include "nsMemoryReporterManager.h" #include "mozilla/dom/PMemoryReportRequestParent.h" @@ -111,16 +113,17 @@ #include "nsIClipboard.h" #include "nsWidgetsCID.h" #include "nsISupportsPrimitives.h" static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID); static const char* sClipboardTextFlavors[] = { kUnicodeMime }; using mozilla::Preferences; using namespace mozilla::ipc; +using namespace mozilla::hal_sandbox; using namespace mozilla::net; using namespace mozilla::places; using mozilla::unused; // heh using base::KillProcess; namespace mozilla { namespace dom { @@ -815,16 +818,29 @@ ContentParent::RecvPCrashReporterConstru bool ContentParent::DeallocPCrashReporter(PCrashReporterParent* crashreporter) { delete crashreporter; return true; } +PHalParent* +ContentParent::AllocPHal() +{ + return CreateHalParent(); +} + +bool +ContentParent::DeallocPHal(PHalParent* aHal) +{ + delete aHal; + return true; +} + PMemoryReportRequestParent* ContentParent::AllocPMemoryReportRequest() { MemoryReportRequestParent* parent = new MemoryReportRequestParent(); return parent; } bool
--- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h @@ -130,16 +130,19 @@ private: virtual PCrashReporterParent* AllocPCrashReporter(const NativeThreadId& tid, const PRUint32& processType); virtual bool DeallocPCrashReporter(PCrashReporterParent* crashreporter); virtual bool RecvPCrashReporterConstructor(PCrashReporterParent* actor, const NativeThreadId& tid, const PRUint32& processType); + NS_OVERRIDE virtual PHalParent* AllocPHal(); + NS_OVERRIDE virtual bool DeallocPHal(PHalParent*); + virtual PMemoryReportRequestParent* AllocPMemoryReportRequest(); virtual bool DeallocPMemoryReportRequest(PMemoryReportRequestParent* actor); virtual PTestShellParent* AllocPTestShell(); virtual bool DeallocPTestShell(PTestShellParent* shell); virtual PAudioParent* AllocPAudio(const PRInt32&, const PRInt32&,
--- a/dom/ipc/Makefile.in +++ b/dom/ipc/Makefile.in @@ -103,16 +103,17 @@ LOCAL_INCLUDES += \ -I$(srcdir)/../../netwerk/base/src \ -I$(srcdir)/../src/base \ -I$(srcdir)/../src/storage \ -I$(srcdir)/../../xpcom/base \ -I$(srcdir)/../indexedDB \ -I$(topsrcdir)/extensions/cookie \ -I$(topsrcdir)/dom/base \ -I$(topsrcdir)/toolkit/xre \ + -I$(topsrcdir)/hal/sandbox \ $(NULL) DEFINES += -DBIN_SUFFIX='"$(BIN_SUFFIX)"' ifdef MOZ_PERMISSIONS DEFINES += -DMOZ_PERMISSIONS endif
--- a/dom/ipc/PContent.ipdl +++ b/dom/ipc/PContent.ipdl @@ -34,21 +34,22 @@ * 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 protocol PAudio; include protocol PBrowser; include protocol PCrashReporter; -include protocol PTestShell; +include protocol PExternalHelperApp; +include protocol PHal; +include protocol PMemoryReportRequest; include protocol PNecko; -include protocol PExternalHelperApp; include protocol PStorage; -include protocol PMemoryReportRequest; +include protocol PTestShell; include "mozilla/chrome/RegistryMessageUtils.h"; include "mozilla/net/NeckoMessageUtils.h"; include "mozilla/dom/TabMessageUtils.h"; include "nsGeoPositionIPCSerialiser.h"; include "PPrefTuple.h"; @@ -94,21 +95,22 @@ struct FontListEntry { PRUint8 index; }; rpc protocol PContent { manages PAudio; manages PBrowser; manages PCrashReporter; - manages PTestShell; + manages PExternalHelperApp; + manages PHal; + manages PMemoryReportRequest; manages PNecko; - manages PExternalHelperApp; manages PStorage; - manages PMemoryReportRequest; + manages PTestShell; child: PBrowser(PRUint32 chromeFlags); PMemoryReportRequest(); PTestShell(); @@ -141,24 +143,26 @@ child: /** * Start accessibility engine in content process. */ ActivateA11y(); AppInfo(nsCString version, nsCString buildID); parent: + PAudio(PRInt32 aNumChannels, PRInt32 aRate, PRInt32 aFormat); + + sync PCrashReporter(NativeThreadId tid, PRUint32 processType); + + PHal(); + PNecko(); PStorage(StorageConstructData data); - PAudio(PRInt32 aNumChannels, PRInt32 aRate, PRInt32 aFormat); - - sync PCrashReporter(NativeThreadId tid, PRUint32 processType); - // Services remoting async StartVisitedQuery(URI uri); async VisitURI(URI uri, URI referrer, PRUint32 flags); async SetURITitle(URI uri, nsString title); // filepicker remoting sync ShowFilePicker(PRInt16 mode, PRInt16 selectedType, bool addToRecentDocs,
new file mode 100644 --- /dev/null +++ b/hal/Hal.cpp @@ -0,0 +1,77 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: sw=2 ts=8 et ft=cpp : */ +/* ***** 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 Code. + * + * The Initial Developer of the Original Code is + * The Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Jones <jones.chris.g@gmail.com> + * + * 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 "Hal.h" +#include "mozilla/Util.h" +#include "nsThreadUtils.h" +#include "nsXULAppAPI.h" + +#define PROXY_IF_SANDBOXED(_call) \ + do { \ + if (InSandbox()) { \ + hal_sandbox::_call; \ + } else { \ + hal_impl::_call; \ + } \ + } while (0) + +namespace mozilla { +namespace hal { + +static void +AssertMainThread() +{ + MOZ_ASSERT(NS_IsMainThread()); +} + +static bool +InSandbox() +{ + return GeckoProcessType_Content == XRE_GetProcessType(); +} + +void +Vibrate(const nsTArray<uint32>& pattern) +{ + AssertMainThread(); + PROXY_IF_SANDBOXED(Vibrate(pattern)); +} + +} // namespace hal +} // namespace mozilla
new file mode 100644 --- /dev/null +++ b/hal/Hal.h @@ -0,0 +1,86 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: sw=2 ts=8 et ft=cpp : */ +/* ***** 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 Code. + * + * The Initial Developer of the Original Code is + * The Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Jones <jones.chris.g@gmail.com> + * + * 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 ***** */ + +#ifndef mozilla_Hal_h +#define mozilla_Hal_h 1 + +#include "base/basictypes.h" +#include "mozilla/Types.h" +#include "nsTArray.h" + +#ifndef MOZ_HAL_NAMESPACE +// This goop plays some cpp tricks to ensure a uniform API across the +// API entry point, "sandbox" implementations (for content processes), +// and "impl" backends where the real work happens. After this runs +// through cpp, there will be three sets of identical APIs +// hal_impl:: --- the platform-specific implementation of an API. +// hal_sandbox:: --- forwards calls up to the parent process +// hal:: --- invokes sandboxed impl if in a sandboxed process, +// otherwise forwards to hal_impl +// +// External code should never invoke hal_impl:: or hal_sandbox:: code +// directly. +# include "HalImpl.h" +# include "HalSandbox.h" +# define MOZ_HAL_NAMESPACE hal +# define MOZ_DEFINED_HAL_NAMESPACE 1 +#endif + +namespace mozilla { +namespace MOZ_HAL_NAMESPACE /*hal*/ { + +/** + * Turn the default vibrator device on/off per the pattern specified + * by |pattern|. Each element in the pattern is the number of + * milliseconds to turn the vibrator on or off. The first element in + * |pattern| is an "on" element, the next is "off", and so on. + * + * If |pattern| is empty, any in-progress vibration is canceled. + */ +void Vibrate(const nsTArray<uint32>& pattern); + +} +} + +#ifdef MOZ_DEFINED_HAL_NAMESPACE +# undef MOZ_DEFINED_HAL_NAMESPACE +# undef MOZ_HAL_NAMESPACE +#endif + +#endif // mozilla_Hal_h
new file mode 100644 --- /dev/null +++ b/hal/HalImpl.h @@ -0,0 +1,48 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: sw=2 ts=8 et ft=cpp : */ +/* ***** 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 Code. + * + * The Initial Developer of the Original Code is + * The Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Jones <jones.chris.g@gmail.com> + * + * 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 ***** */ + +#ifndef mozilla_Hal_h +# error "This is an internal file, don't include it" +#endif + +#undef mozilla_Hal_h +#define MOZ_HAL_NAMESPACE hal_impl +#include "Hal.h" +#undef MOZ_HAL_NAMESPACE +
new file mode 100644 --- /dev/null +++ b/hal/HalSandbox.h @@ -0,0 +1,47 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: sw=2 ts=8 et ft=cpp : */ +/* ***** 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 Code. + * + * The Initial Developer of the Original Code is + * The Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Jones <jones.chris.g@gmail.com> + * + * 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 ***** */ + +#ifndef mozilla_Hal_h +# error "This is an internal file, don't include it" +#endif + +#undef mozilla_Hal_h +#define MOZ_HAL_NAMESPACE hal_sandbox +#include "Hal.h" +#undef MOZ_HAL_NAMESPACE
new file mode 100644 --- /dev/null +++ b/hal/Makefile.in @@ -0,0 +1,71 @@ +# +# ***** 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 Corporation code. +# +# The Initial Developer of the Original Code is Mozilla Foundation. +# Portions created by the Initial Developer are Copyright (C) 2011 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Chris Jones <jones.chris.g@gmail.com> +# +# Alternatively, the contents of this file may be used under the terms of +# either of 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 ***** + +DEPTH = .. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = \ + $(srcdir) \ + $(srcdir)/fallback \ + $(srcdir)/sandbox \ + $(NULL) + +include $(DEPTH)/config/autoconf.mk + +MODULE = hal +LIBRARY_NAME = hal_s +FORCE_STATIC_LIB = 1 +LIBXUL_LIBRARY = 1 +EXPORT_LIBRARY = 1 + +EXPORTS_NAMESPACES = mozilla +EXPORTS_mozilla = \ + Hal.h \ + HalImpl.h \ + HalSandbox.h \ + $(NULL) + +CPPSRCS = \ + Hal.cpp \ + SandboxHal.cpp \ + $(NULL) + +CPPSRCS += FallbackHal.cpp + +include $(topsrcdir)/config/config.mk +include $(topsrcdir)/ipc/chromium/chromium-config.mk +include $(topsrcdir)/config/rules.mk
new file mode 100644 --- /dev/null +++ b/hal/fallback/FallbackHal.cpp @@ -0,0 +1,50 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: sw=2 ts=8 et ft=cpp : */ +/* ***** 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 Code. + * + * The Initial Developer of the Original Code is + * The Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Jones <jones.chris.g@gmail.com> + * + * 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 "Hal.h" + +namespace mozilla { +namespace hal_impl { + +void +Vibrate(const nsTArray<uint32>& pattern) +{} + +} // hal_impl +} // namespace mozilla
new file mode 100644 --- /dev/null +++ b/hal/sandbox/PHal.ipdl @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: sw=2 ts=8 et ft=cpp : */ +/* ***** 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 Code. + * + * The Initial Developer of the Original Code is + * The Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Jones <jones.chris.g@gmail.com> + * + * 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 protocol PContent; + +namespace mozilla { +namespace hal_sandbox { + +protocol PHal { + manager PContent; + +parent: + Vibrate(uint32[] pattern); + + __delete__(); +}; + +} // namespace hal +} // namespace mozilla
new file mode 100644 --- /dev/null +++ b/hal/sandbox/SandboxHal.cpp @@ -0,0 +1,94 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: sw=2 ts=8 et ft=cpp : */ +/* ***** 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 Code. + * + * The Initial Developer of the Original Code is + * The Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Jones <jones.chris.g@gmail.com> + * + * 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 "Hal.h" +#include "mozilla/dom/ContentChild.h" +#include "mozilla/hal_sandbox/PHalChild.h" +#include "mozilla/hal_sandbox/PHalParent.h" + +using namespace mozilla; +using namespace mozilla::dom; +using namespace mozilla::hal; + +namespace mozilla { +namespace hal_sandbox { + +static PHalChild* sHal; +static PHalChild* +Hal() +{ + if (!sHal) { + sHal = ContentChild::GetSingleton()->SendPHalConstructor(); + } + return sHal; +} + +void +Vibrate(const nsTArray<uint32>& pattern) +{ + AutoInfallibleTArray<uint32, 8> p(pattern); + Hal()->SendVibrate(p); +} + +class HalParent : public PHalParent { +public: + NS_OVERRIDE virtual bool + RecvVibrate(const InfallibleTArray<unsigned int>& pattern) { + // Forward to hal::, not hal_impl::, because we might be a + // subprocess of another sandboxed process. The hal:: entry point + // will do the right thing. + hal::Vibrate(pattern); + return true; + } +}; + +class HalChild : public PHalChild { +public: +}; + +PHalChild* CreateHalChild() { + return new HalChild(); +} + +PHalParent* CreateHalParent() { + return new HalParent(); +} + +} // namespace hal_sandbox +} // namespace mozilla
new file mode 100644 --- /dev/null +++ b/hal/sandbox/SandboxHal.h @@ -0,0 +1,56 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: sw=2 ts=8 et ft=cpp : */ +/* ***** 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 Code. + * + * The Initial Developer of the Original Code is + * The Mozilla Foundation + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Jones <jones.chris.g@gmail.com> + * + * 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 ***** */ + +#ifndef mozilla_SandboxHal_h +#define mozilla_SandboxHal_h + +namespace mozilla { +namespace hal_sandbox { + +class PHalChild; +class PHalParent; + +PHalChild* CreateHalChild(); + +PHalParent* CreateHalParent(); + +} +} + +#endif // mozilla_SandboxHal_h
new file mode 100644 --- /dev/null +++ b/hal/sandbox/ipdl.mk @@ -0,0 +1,39 @@ +# ***** 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 Content App. +# +# The Initial Developer of the Original Code is +# The Mozilla Foundation. +# Portions created by the Initial Developer are Copyright (C) 2011 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# 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 = \ + PHal.ipdl \ + $(NULL)
--- a/ipc/ipdl/Makefile.in +++ b/ipc/ipdl/Makefile.in @@ -54,16 +54,17 @@ EXPORT_LIBRARY = 1 ## When you add IPDL files to a source directory, list the directory here. ## IPDLDIRS = \ uriloader/exthandler \ dom/plugins/ipc \ dom/ipc \ dom/src/storage \ gfx/layers/ipc \ + hal/sandbox \ ipc/testshell \ js/ipc \ js/jetpack \ layout/ipc \ netwerk/ipc \ netwerk/protocol/ftp \ netwerk/protocol/http \ netwerk/protocol/wyciwyg \
--- a/toolkit/library/libxul-config.mk +++ b/toolkit/library/libxul-config.mk @@ -91,16 +91,17 @@ STATIC_LIBS += \ jsipc_s \ domipc_s \ domplugins_s \ mozipc_s \ mozipdlgen_s \ ipcshell_s \ gfx2d \ gfxipc_s \ + hal_s \ $(NULL) ifdef MOZ_IPDL_TESTS STATIC_LIBS += ipdlunittest_s endif ifeq (Linux,$(OS_ARCH)) ifneq (Android,$(OS_TARGET))
--- a/toolkit/toolkit-makefiles.sh +++ b/toolkit/toolkit-makefiles.sh @@ -729,16 +729,20 @@ MAKEFILES_extensions=" extensions/pref/autoconfig/public/Makefile extensions/pref/autoconfig/src/Makefile " MAKEFILES_startupcache=" startupcache/Makefile " +MAKEFILES_hal=" + hal/Makefile +" + add_makefiles " $MAKEFILES_db $MAKEFILES_dom $MAKEFILES_editor $MAKEFILES_xmlparser $MAKEFILES_gfx $MAKEFILES_htmlparser $MAKEFILES_intl @@ -770,16 +774,17 @@ add_makefiles " $MAKEFILES_xpfe $MAKEFILES_embedding $MAKEFILES_xulapp $MAKEFILES_libpr0n $MAKEFILES_accessible $MAKEFILES_libmar $MAKEFILES_extensions $MAKEFILES_startupcache + $MAKEFILES_hal " # # Conditional makefiles # if [ "$ENABLE_TESTS" ]; then add_makefiles "
--- a/toolkit/toolkit-tiers.mk +++ b/toolkit/toolkit-tiers.mk @@ -89,16 +89,17 @@ tier_platform_dirs += gfx/qcms # # "gecko" - core components # tier_platform_dirs += ipc js/ipc js/jetpack tier_platform_dirs += \ + hal \ js/src/xpconnect \ intl/chardet \ $(NULL) ifdef MOZ_ENABLE_GTK2 ifdef MOZ_X11 tier_platform_dirs += widget/src/gtkxtbin endif