Bug 710793 - Move hal's private methods outside of Hal.h. r=jlebar sr=cjones
authorMounir Lamouri <mounir.lamouri@gmail.com>
Sat, 17 Dec 2011 22:04:51 +0100
changeset 83566 e04774d1a06f82fa03a6445aec4ecbf088dc0793
parent 83565 d1bce65ac70db6debecd69292424aeca54ab814f
child 83567 08543c8312d6dbd7c4f9f42ea612d81aa35569a0
push idunknown
push userunknown
push dateunknown
reviewersjlebar, cjones
bugs710793
milestone11.0a1
Bug 710793 - Move hal's private methods outside of Hal.h. r=jlebar sr=cjones
hal/Hal.cpp
hal/Hal.h
hal/HalImpl.h
hal/HalInternal.h
hal/HalSandbox.h
hal/android/AndroidHal.cpp
hal/windows/WindowsBattery.cpp
--- a/hal/Hal.cpp
+++ b/hal/Hal.cpp
@@ -33,16 +33,18 @@
  * 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 "HalImpl.h"
+#include "HalSandbox.h"
 #include "mozilla/Util.h"
 #include "nsThreadUtils.h"
 #include "nsXULAppAPI.h"
 #include "mozilla/Observer.h"
 #include "nsIDOMDocument.h"
 #include "nsIDOMWindow.h"
 #include "mozilla/Services.h"
 #include "nsIWebNavigation.h"
@@ -257,19 +259,16 @@ RegisterBatteryObserver(BatteryObserver*
 
 void
 UnregisterBatteryObserver(BatteryObserver* aBatteryObserver)
 {
   AssertMainThread();
   sBatteryObservers.RemoveObserver(aBatteryObserver);
 }
 
-// EnableBatteryNotifications isn't defined on purpose.
-// DisableBatteryNotifications isn't defined on purpose.
-
 void
 GetCurrentBatteryInformation(BatteryInformation* aBatteryInfo)
 {
   AssertMainThread();
 
   if (sBatteryObservers.HasCachedBatteryInformation()) {
     sBatteryObservers.GetCachedBatteryInformation(aBatteryInfo);
   } else {
--- a/hal/Hal.h
+++ b/hal/Hal.h
@@ -35,63 +35,52 @@
  * 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 "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
 
 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
  * 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.
@@ -131,34 +120,16 @@ void RegisterBatteryObserver(BatteryObse
 
 /**
  * Inform the battery backend a battery observer unregistered.
  * @param aBatteryObserver The observer that should be removed.
  */
 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.
  */
 void GetCurrentBatteryInformation(hal::BatteryInformation* aBatteryInfo);
 
 /**
  * Notify of a change in the battery state.
  * @param aBatteryInfo The new battery information.
  */
--- a/hal/HalImpl.h
+++ b/hal/HalImpl.h
@@ -32,17 +32,19 @@
  * 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
+#ifndef mozilla_HalImpl_h
+#define mozilla_HalImpl_h
 
+#define MOZ_HAL_NAMESPACE hal_impl
 #undef mozilla_Hal_h
-#define MOZ_HAL_NAMESPACE hal_impl
+#undef mozilla_HalInternal_h
 #include "Hal.h"
+#include "HalInternal.h"
 #undef MOZ_HAL_NAMESPACE
 
+#endif // mozilla_HalImpl_h
new file mode 100644
--- /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 <mounir.lamouri@mozilla.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_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
--- a/hal/HalSandbox.h
+++ b/hal/HalSandbox.h
@@ -32,17 +32,19 @@
  * 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
+#ifndef mozilla_hal_HalSandbox_h
+#define mozilla_hal_HalSandbox_h
 
+#define MOZ_HAL_NAMESPACE hal_sandbox
 #undef mozilla_Hal_h
-#define MOZ_HAL_NAMESPACE hal_sandbox
+#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
--- a/hal/android/AndroidHal.cpp
+++ b/hal/android/AndroidHal.cpp
@@ -31,16 +31,17 @@
  * 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 "HalImpl.h"
 #include "WindowIdentifier.h"
 #include "AndroidBridge.h"
 
 using mozilla::hal::WindowIdentifier;
 
 namespace mozilla {
 namespace hal_impl {
 
--- a/hal/windows/WindowsBattery.cpp
+++ b/hal/windows/WindowsBattery.cpp
@@ -31,16 +31,17 @@
  * 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 "HalImpl.h"
 #include "nsITimer.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/dom/battery/Constants.h"
 
 #include <windows.h>
 
 using namespace mozilla::dom::battery;