diff --git a/hal/Hal.cpp b/hal/Hal.cpp index ee4e2e9d288..7ca684bb4dd 100644 --- a/hal/Hal.cpp +++ b/hal/Hal.cpp @@ -38,6 +38,8 @@ * ***** END LICENSE BLOCK ***** */ #include "Hal.h" +#include "HalImpl.h" +#include "HalSandbox.h" #include "mozilla/Util.h" #include "nsThreadUtils.h" #include "nsXULAppAPI.h" @@ -262,9 +264,6 @@ UnregisterBatteryObserver(BatteryObserver* aBatteryObserver) sBatteryObservers.RemoveObserver(aBatteryObserver); } -// EnableBatteryNotifications isn't defined on purpose. -// DisableBatteryNotifications isn't defined on purpose. - void GetCurrentBatteryInformation(BatteryInformation* aBatteryInfo) { diff --git a/hal/Hal.h b/hal/Hal.h index 569e2c2c48f..9872d686990 100644 --- a/hal/Hal.h +++ b/hal/Hal.h @@ -40,42 +40,26 @@ #ifndef mozilla_Hal_h #define mozilla_Hal_h 1 +#include "mozilla/hal_sandbox/PHal.h" #include "base/basictypes.h" #include "mozilla/Types.h" #include "nsTArray.h" #include "prlog.h" #include "mozilla/dom/battery/Types.h" -#ifndef MOZ_HAL_NAMESPACE +/* + * Hal.h contains the public Hal API. + * + * By default, this file defines its functions in the hal namespace, but if + * MOZ_HAL_NAMESPACE is defined, we'll define our functions in that namespace. + * + * This is used by HalImpl.h and HalSandbox.h, which define copies of all the + * functions here in the hal_impl and hal_sandbox namespaces. + */ class nsIDOMWindow; -// Only include this hunk of code once, and include it before -// HalImpl.h and HalSandbox.h. -namespace mozilla { -namespace hal { - -extern PRLogModuleInfo *sHalLog; -#define HAL_LOG(msg) PR_LOG(sHalLog, PR_LOG_DEBUG, msg) - -class WindowIdentifier; - -} // namespace hal -} // namespace mozilla - -// 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" +#ifndef MOZ_HAL_NAMESPACE # define MOZ_HAL_NAMESPACE hal # define MOZ_DEFINED_HAL_NAMESPACE 1 #endif @@ -83,10 +67,15 @@ class WindowIdentifier; namespace mozilla { namespace hal { -class BatteryInformation; + +class WindowIdentifier; + +extern PRLogModuleInfo *sHalLog; +#define HAL_LOG(msg) PR_LOG(sHalLog, PR_LOG_DEBUG, msg) + } // namespace hal -namespace MOZ_HAL_NAMESPACE /*hal*/ { +namespace MOZ_HAL_NAMESPACE { /** * Turn the default vibrator device on/off per the pattern specified @@ -135,24 +124,6 @@ void RegisterBatteryObserver(BatteryObserver* aBatteryObserver); */ void UnregisterBatteryObserver(BatteryObserver* aBatteryObserver); -/** - * Enables battery notifications from the backend. - * - * This method is semi-private in the sense of it is visible in the hal - * namespace but should not be used. Calls to this method from the hal - * namespace will produce a link error because it is not defined. - */ -void EnableBatteryNotifications(); - -/** - * Disables battery notifications from the backend. - * - * This method is semi-private in the sense of it is visible in the hal - * namespace but should not be used. Calls to this method from the hal - * namespace will produce a link error because it is not defined. - */ -void DisableBatteryNotifications(); - /** * Returns the current battery information. */ diff --git a/hal/HalImpl.h b/hal/HalImpl.h index 61b3147cfb6..688e2981af1 100644 --- a/hal/HalImpl.h +++ b/hal/HalImpl.h @@ -37,12 +37,14 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef mozilla_Hal_h -# error "This is an internal file, don't include it" -#endif +#ifndef mozilla_HalImpl_h +#define mozilla_HalImpl_h -#undef mozilla_Hal_h #define MOZ_HAL_NAMESPACE hal_impl +#undef mozilla_Hal_h +#undef mozilla_HalInternal_h #include "Hal.h" +#include "HalInternal.h" #undef MOZ_HAL_NAMESPACE +#endif // mozilla_HalImpl_h diff --git a/hal/HalInternal.h b/hal/HalInternal.h new file mode 100644 index 00000000000..ce1c96a97f6 --- /dev/null +++ b/hal/HalInternal.h @@ -0,0 +1,73 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set 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): + * Mounir Lamouri + * + * 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_HalInternal_h +#define mozilla_HalInternal_h 1 + +/* + * This file is included by HalImpl.h and HalSandbox.h with a mechanism similar + * to Hal.h. That means those headers set MOZ_HAL_NAMESPACE to specify in which + * namespace the internal functions should appear. + * + * The difference between Hal.h and HalInternal.h is that methods declared in + * HalInternal.h don't appear in the hal namespace. That also means this file + * should not be included except by HalInternal.h and HalSandbox.h. + */ + +#ifndef MOZ_HAL_NAMESPACE +# error "You shouldn't directly include HalInternal.h!" +#endif + +namespace mozilla { +namespace MOZ_HAL_NAMESPACE { + +/** + * Enables battery notifications from the backend. + */ +void EnableBatteryNotifications(); + +/** + * Disables battery notifications from the backend. + */ +void DisableBatteryNotifications(); + +} // namespace MOZ_HAL_NAMESPACE +} // namespace mozilla + +#endif // mozilla_HalInternal_h diff --git a/hal/HalSandbox.h b/hal/HalSandbox.h index ca7ae64fb93..8376b45de66 100644 --- a/hal/HalSandbox.h +++ b/hal/HalSandbox.h @@ -37,12 +37,14 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef mozilla_Hal_h -# error "This is an internal file, don't include it" -#endif +#ifndef mozilla_hal_HalSandbox_h +#define mozilla_hal_HalSandbox_h -#undef mozilla_Hal_h #define MOZ_HAL_NAMESPACE hal_sandbox +#undef mozilla_Hal_h +#undef mozilla_HalInternal_h #include "Hal.h" -#include "mozilla/hal_sandbox/PHal.h" +#include "HalInternal.h" #undef MOZ_HAL_NAMESPACE + +#endif // mozilla_hal_HalSandbox_h diff --git a/hal/android/AndroidHal.cpp b/hal/android/AndroidHal.cpp index a9bf6c985ae..5eba97a4024 100644 --- a/hal/android/AndroidHal.cpp +++ b/hal/android/AndroidHal.cpp @@ -36,6 +36,7 @@ * ***** END LICENSE BLOCK ***** */ #include "Hal.h" +#include "HalImpl.h" #include "WindowIdentifier.h" #include "AndroidBridge.h" diff --git a/hal/windows/WindowsBattery.cpp b/hal/windows/WindowsBattery.cpp index 99259b5b508..87fb0b4d814 100644 --- a/hal/windows/WindowsBattery.cpp +++ b/hal/windows/WindowsBattery.cpp @@ -36,6 +36,7 @@ * ***** END LICENSE BLOCK ***** */ #include "Hal.h" +#include "HalImpl.h" #include "nsITimer.h" #include "mozilla/Preferences.h" #include "mozilla/dom/battery/Constants.h"