Bug 1026535 - Fix mismatched class/struct tags. r=ehsan
authorBirunthan Mohanathas <birunthan@mohanathas.com>
Wed, 18 Jun 2014 17:57:51 -0700
changeset 211421 fcf15eb82338c3339cb39066828467b504ccc1a1
parent 211420 ca251a28d3ddae784436d28829fb019025f4b127
child 211422 2daf3d9be2cb95d8e8bce3173420c16d75a61872
push id515
push userraliiev@mozilla.com
push dateMon, 06 Oct 2014 12:51:51 +0000
treeherdermozilla-release@267c7a481bef [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersehsan
bugs1026535
milestone33.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
Bug 1026535 - Fix mismatched class/struct tags. r=ehsan
accessible/src/windows/sdn/sdnTextAccessible.h
content/base/public/nsIDocument.h
content/base/public/nsINode.h
content/base/src/DOMPoint.h
content/base/src/nsDocument.h
content/canvas/src/WebGLContext.h
content/canvas/src/WebGLProgram.h
content/html/content/src/HTMLContentElement.h
content/media/directshow/DirectShowReader.h
content/media/eme/MediaKeyMessageEvent.h
content/media/fmp4/PlatformDecoderModule.h
content/media/webrtc/MediaEngine.h
content/svg/content/src/SVGMotionSMILType.h
content/svg/content/src/SVGTransformableElement.h
dom/archivereader/ArchiveReader.h
dom/base/Console.h
dom/base/Navigator.h
dom/base/nsDOMWindowUtils.h
dom/bindings/Codegen.py
dom/camera/DOMCameraControl.h
dom/camera/DOMCameraManager.h
dom/devicestorage/DeviceStorage.h
dom/events/DOMEventTargetHelper.h
dom/events/MessageEvent.h
dom/filehandle/FileHandle.h
dom/filesystem/Directory.h
dom/indexedDB/IDBFactory.h
dom/indexedDB/IDBRequest.h
dom/interfaces/base/nsIDOMWindowUtils.idl
dom/interfaces/geolocation/nsIDOMGeoGeolocation.idl
dom/ipc/PBrowser.ipdl
dom/ipc/TabContext.h
dom/ipc/nsIContentChild.h
dom/ipc/nsIContentParent.h
dom/media/GetUserMediaRequest.h
dom/media/MediaManager.h
dom/telephony/ipc/TelephonyIPCService.h
dom/workers/WorkerPrivate.h
dom/workers/WorkerRunnable.h
dom/xbl/nsXBLMaybeCompiled.h
gfx/layers/apz/src/AsyncPanZoomController.h
gfx/layers/apz/src/Axis.h
gfx/layers/apz/testutil/APZTestData.h
gfx/layers/client/SimpleTiledContentClient.h
gfx/layers/client/TextureClient.h
gfx/layers/composite/LayerManagerComposite.h
gfx/layers/ipc/CompositableForwarder.h
gfx/layers/ipc/CompositorChild.h
gfx/layers/ipc/ImageBridgeChild.h
gfx/layers/opengl/Composer2D.h
gfx/src/nsDeviceContext.h
gfx/thebes/gfxBlur.h
gfx/thebes/gfxUtils.h
gfx/thebes/gfxWindowsPlatform.h
hal/HalScreenConfiguration.h
image/decoders/nsJPEGDecoder.h
image/public/imgIContainer.idl
image/src/ImageOps.h
image/src/imgRequestProxy.h
js/public/Class.h
js/public/OldDebugAPI.h
js/public/RootingAPI.h
js/src/gc/GCRuntime.h
js/src/gc/Heap.h
js/src/gc/Marking.h
js/src/gc/Nursery.h
js/src/gc/StoreBuffer.cpp
js/src/gc/Tracer.h
js/src/jit/AsmJS.h
js/src/jit/AsmJSLink.h
js/src/jit/Recover.h
js/src/jsalloc.h
js/src/jsfriendapi.h
js/src/jsinfer.h
js/src/jsobj.h
js/src/jspubtd.h
js/src/jsscript.h
js/src/vm/ForkJoin.h
js/src/vm/HelperThreads.h
js/src/vm/ObjectImpl.h
js/src/vm/RegExpObject.h
js/src/vm/Runtime.h
js/src/vm/Stack.h
js/xpconnect/src/XPCQuickStubs.h
layout/base/GeometryUtils.h
layout/base/nsLayoutUtils.h
layout/forms/nsButtonFrameRenderer.h
layout/generic/StickyScrollContainer.h
layout/generic/nsAbsoluteContainingBlock.h
layout/generic/nsFlexContainerFrame.h
layout/generic/nsHTMLReflowMetrics.h
layout/generic/nsImageFrame.h
layout/mathml/nsIMathMLFrame.h
layout/mathml/nsMathMLChar.h
layout/style/AnimationCommon.h
layout/style/CSSVariableDeclarations.h
layout/style/ImageLoader.h
layout/style/nsCSSParser.h
layout/style/nsComputedDOMStyle.h
layout/style/nsStyleUtil.h
layout/xul/nsBoxLayoutState.h
media/webrtc/signaling/src/mediapipeline/MediaPipelineFilter.h
media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.h
media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.h
netwerk/base/src/BackgroundFileSaver.h
toolkit/components/downloads/ApplicationReputation.h
tools/profiler/platform.h
widget/nsIRollupListener.h
widget/xpwidgets/PuppetWidget.h
xpcom/base/CycleCollectedJSRuntime.h
xpcom/reflect/xptinfo/public/XPTInterfaceInfoManager.h
--- a/accessible/src/windows/sdn/sdnTextAccessible.h
+++ b/accessible/src/windows/sdn/sdnTextAccessible.h
@@ -8,17 +8,17 @@
 #define mozilla_a11y_sdnTextAccessible_h_
 
 #include "ISimpleDOMText.h"
 #include "IUnknownImpl.h"
 
 #include "AccessibleWrap.h"
 
 class nsIFrame;
-class nsPoint;
+struct nsPoint;
 
 namespace mozilla {
 namespace a11y {
  
 class sdnTextAccessible MOZ_FINAL : public ISimpleDOMText
 {
 public:
   sdnTextAccessible(AccessibleWrap* aAccessible) : mAccessible(aAccessible) {};
--- a/content/base/public/nsIDocument.h
+++ b/content/base/public/nsIDocument.h
@@ -75,17 +75,17 @@ class nsScriptLoader;
 class nsSMILAnimationController;
 class nsStyleSet;
 class nsTextNode;
 class nsWindowSizes;
 class nsSmallVoidArray;
 class nsDOMCaretPosition;
 class nsViewportInfo;
 class nsIGlobalObject;
-class nsCSSSelectorList;
+struct nsCSSSelectorList;
 
 namespace mozilla {
 class ErrorResult;
 class EventStates;
 
 namespace css {
 class Loader;
 class ImageLoader;
--- a/content/base/public/nsINode.h
+++ b/content/base/public/nsINode.h
@@ -26,17 +26,17 @@
 #ifdef XP_WIN
 #ifdef GetClassInfo
 #undef GetClassInfo
 #endif
 #endif
 
 class nsAttrAndChildArray;
 class nsChildContentList;
-class nsCSSSelectorList;
+struct nsCSSSelectorList;
 class nsDOMAttributeMap;
 class nsIContent;
 class nsIDocument;
 class nsIDOMElement;
 class nsIDOMNodeList;
 class nsIDOMUserDataHandler;
 class nsIEditor;
 class nsIFrame;
--- a/content/base/src/DOMPoint.h
+++ b/content/base/src/DOMPoint.h
@@ -13,17 +13,17 @@
 #include "mozilla/ErrorResult.h"
 #include "nsCOMPtr.h"
 #include "mozilla/dom/BindingDeclarations.h"
 
 namespace mozilla {
 namespace dom {
 
 class GlobalObject;
-class DOMPointInit;
+struct DOMPointInit;
 
 class DOMPointReadOnly : public nsWrapperCache
 {
 public:
   DOMPointReadOnly(nsISupports* aParent, double aX, double aY,
                    double aZ, double aW)
     : mParent(aParent)
     , mX(aX)
--- a/content/base/src/nsDocument.h
+++ b/content/base/src/nsDocument.h
@@ -97,17 +97,17 @@ class nsHtml5TreeOpExecutor;
 class nsDocumentOnStack;
 class nsPointerLockPermissionRequest;
 class nsISecurityConsoleMessage;
 
 namespace mozilla {
 class EventChainPreVisitor;
 namespace dom {
 class UndoManager;
-class LifecycleCallbacks;
+struct LifecycleCallbacks;
 class CallbackFunction;
 }
 }
 
 /**
  * Right now our identifier map entries contain information for 'name'
  * and 'id' mappings of a given string. This is so that
  * nsHTMLDocument::ResolveName only has to do one hash lookup instead
--- a/content/canvas/src/WebGLContext.h
+++ b/content/canvas/src/WebGLContext.h
@@ -60,17 +60,17 @@ class nsIDocShell;
 
 namespace mozilla {
 
 class WebGLMemoryPressureObserver;
 class WebGLContextBoundObject;
 class WebGLActiveInfo;
 class WebGLExtensionBase;
 class WebGLBuffer;
-class WebGLVertexAttribData;
+struct WebGLVertexAttribData;
 class WebGLShader;
 class WebGLProgram;
 class WebGLQuery;
 class WebGLUniformLocation;
 class WebGLFramebuffer;
 class WebGLRenderbuffer;
 class WebGLShaderPrecisionFormat;
 class WebGLTexture;
--- a/content/canvas/src/WebGLProgram.h
+++ b/content/canvas/src/WebGLProgram.h
@@ -14,17 +14,17 @@
 #include "mozilla/LinkedList.h"
 #include "nsWrapperCache.h"
 #include "WebGLShader.h"
 #include "WebGLUniformInfo.h"
 
 namespace mozilla {
 
 class WebGLShader;
-class WebGLUniformInfo;
+struct WebGLUniformInfo;
 
 typedef nsDataHashtable<nsCStringHashKey, nsCString> CStringMap;
 typedef nsDataHashtable<nsCStringHashKey, WebGLUniformInfo> CStringToUniformInfoMap;
 
 class WebGLProgram MOZ_FINAL
     : public nsWrapperCache
     , public WebGLRefCountedObject<WebGLProgram>
     , public LinkedListElement<WebGLProgram>
--- a/content/html/content/src/HTMLContentElement.h
+++ b/content/html/content/src/HTMLContentElement.h
@@ -4,17 +4,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef mozilla_dom_HTMLContentElement_h__
 #define mozilla_dom_HTMLContentElement_h__
 
 #include "nsINodeList.h"
 #include "nsGenericHTMLElement.h"
 
-class nsCSSSelectorList;
+struct nsCSSSelectorList;
 
 namespace mozilla {
 namespace dom {
 
 class DistributedContentList;
 
 class HTMLContentElement MOZ_FINAL : public nsGenericHTMLElement
 {
--- a/content/media/directshow/DirectShowReader.h
+++ b/content/media/directshow/DirectShowReader.h
@@ -7,20 +7,20 @@
 #if !defined(DirectShowReader_h_)
 #define DirectShowReader_h_
 
 #include "windows.h" // HRESULT, DWORD
 #include "MediaDecoderReader.h"
 #include "mozilla/RefPtr.h"
 #include "MP3FrameParser.h"
 
-class IGraphBuilder;
-class IMediaControl;
-class IMediaSeeking;
-class IMediaEventEx;
+struct IGraphBuilder;
+struct IMediaControl;
+struct IMediaSeeking;
+struct IMediaEventEx;
 
 namespace mozilla {
 
 class AudioSinkFilter;
 class SourceFilter;
 
 namespace dom {
 class TimeRanges;
--- a/content/media/eme/MediaKeyMessageEvent.h
+++ b/content/media/eme/MediaKeyMessageEvent.h
@@ -15,17 +15,17 @@
 #include "mozilla/dom/Event.h"
 #include "mozilla/dom/TypedArray.h"
 #include "js/TypeDecls.h"
 #include "mozilla/dom/MediaKeyMessageEventBinding.h"
 
 namespace mozilla {
 namespace dom {
 
-class MediaKeyMessageEventInit;
+struct MediaKeyMessageEventInit;
 
 class MediaKeyMessageEvent MOZ_FINAL : public Event
 {
 public:
   NS_DECL_ISUPPORTS_INHERITED
   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(MediaKeyMessageEvent, Event)
   virtual ~MediaKeyMessageEvent();
 protected:
--- a/content/media/fmp4/PlatformDecoderModule.h
+++ b/content/media/fmp4/PlatformDecoderModule.h
@@ -11,17 +11,17 @@
 #include "mozilla/layers/LayersTypes.h"
 #include "nsTArray.h"
 #include "mozilla/RefPtr.h"
 #include <queue>
 
 namespace mp4_demuxer {
 class VideoDecoderConfig;
 class AudioDecoderConfig;
-struct MP4Sample;
+class MP4Sample;
 }
 
 class nsIThreadPool;
 
 namespace mozilla {
 
 namespace layers {
 class ImageContainer;
--- a/content/media/webrtc/MediaEngine.h
+++ b/content/media/webrtc/MediaEngine.h
@@ -7,29 +7,29 @@
 
 #include "mozilla/RefPtr.h"
 #include "nsIDOMFile.h"
 #include "DOMMediaStream.h"
 #include "MediaStreamGraph.h"
 
 namespace mozilla {
 
-class VideoTrackConstraintsN;
-class AudioTrackConstraintsN;
+struct VideoTrackConstraintsN;
+struct AudioTrackConstraintsN;
 
 /**
  * Abstract interface for managing audio and video devices. Each platform
  * must implement a concrete class that will map these classes and methods
  * to the appropriate backend. For example, on Desktop platforms, these will
  * correspond to equivalent webrtc (GIPS) calls, and on B2G they will map to
  * a Gonk interface.
  */
 class MediaEngineVideoSource;
 class MediaEngineAudioSource;
-struct MediaEnginePrefs;
+class MediaEnginePrefs;
 
 enum MediaEngineState {
   kAllocated,
   kStarted,
   kStopped,
   kReleased
 };
 
--- a/content/svg/content/src/SVGMotionSMILType.h
+++ b/content/svg/content/src/SVGMotionSMILType.h
@@ -12,17 +12,17 @@
 #include "mozilla/Attributes.h"
 #include "nsISMILType.h"
 
 class nsSMILValue;
 
 namespace mozilla {
 
 namespace gfx {
-struct Matrix;
+class Matrix;
 }
 
 /**
  * MotionRotateType: Enum to indicate the type of our "rotate" attribute.
  */
 enum RotateType {
   eRotateType_Explicit,     // for e.g. rotate="45"/"45deg"/"0.785rad"
   eRotateType_Auto,         // for rotate="auto"
--- a/content/svg/content/src/SVGTransformableElement.h
+++ b/content/svg/content/src/SVGTransformableElement.h
@@ -14,17 +14,17 @@
 
 namespace mozilla {
 namespace dom {
 
 class SVGAnimatedTransformList;
 class SVGGraphicsElement;
 class SVGMatrix;
 class SVGIRect;
-class SVGBoundingBoxOptions;
+struct SVGBoundingBoxOptions;
 
 class SVGTransformableElement : public nsSVGElement
 {
 public:
   SVGTransformableElement(already_AddRefed<nsINodeInfo>& aNodeInfo)
     : nsSVGElement(aNodeInfo) {}
   virtual ~SVGTransformableElement() {}
 
--- a/dom/archivereader/ArchiveReader.h
+++ b/dom/archivereader/ArchiveReader.h
@@ -13,17 +13,17 @@
 
 #include "nsCOMArray.h"
 #include "nsIChannel.h"
 #include "nsIDOMFile.h"
 #include "mozilla/Attributes.h"
 
 namespace mozilla {
 namespace dom {
-class ArchiveReaderOptions;
+struct ArchiveReaderOptions;
 class GlobalObject;
 } // namespace dom
 } // namespace mozilla
 
 BEGIN_ARCHIVEREADER_NAMESPACE
 
 class ArchiveRequest;
 
--- a/dom/base/Console.h
+++ b/dom/base/Console.h
@@ -17,17 +17,17 @@
 #include "nsWrapperCache.h"
 
 class nsIConsoleAPIStorage;
 
 namespace mozilla {
 namespace dom {
 
 class ConsoleCallData;
-class ConsoleStackEntry;
+struct ConsoleStackEntry;
 
 class Console MOZ_FINAL : public nsITimerCallback
                         , public nsIObserver
                         , public nsWrapperCache
 {
 public:
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(Console,
--- a/dom/base/Navigator.h
+++ b/dom/base/Navigator.h
@@ -28,17 +28,17 @@ class nsDOMCameraManager;
 class nsDOMDeviceStorage;
 class nsIDOMBlob;
 class nsIPrincipal;
 
 namespace mozilla {
 namespace dom {
 class Geolocation;
 class systemMessageCallback;
-class MediaStreamConstraints;
+struct MediaStreamConstraints;
 class WakeLock;
 class ArrayBufferViewOrBlobOrStringOrFormData;
 }
 }
 
 #ifdef MOZ_B2G_RIL
 class nsIDOMMozIccManager;
 #endif // MOZ_B2G_RIL
--- a/dom/base/nsDOMWindowUtils.h
+++ b/dom/base/nsDOMWindowUtils.h
@@ -11,18 +11,18 @@
 #include "nsIDOMWindowUtils.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/BasicEvents.h"
 
 class nsGlobalWindow;
 class nsIPresShell;
 class nsIWidget;
 class nsPresContext;
-class nsPoint;
 class nsIDocument;
+struct nsPoint;
 
 namespace mozilla {
   namespace layers {
     class LayerTransactionChild;
   }
 }
 
 class nsTranslationNodeList MOZ_FINAL : public nsITranslationNodeList
--- a/dom/bindings/Codegen.py
+++ b/dom/bindings/Codegen.py
@@ -11251,17 +11251,17 @@ class CGForwardDeclarations(CGWrapper):
             # Don't need to do anything for void, primitive, string, any or object.
             # There may be some other cases we are missing.
 
         # Needed for at least Wrap.
         for d in descriptors:
             builder.add(d.nativeType)
 
         # We just about always need NativePropertyHooks
-        builder.addInMozillaDom("NativePropertyHooks")
+        builder.addInMozillaDom("NativePropertyHooks", isStruct=True)
         builder.addInMozillaDom("ProtoAndIfaceCache")
         # Add the atoms cache type, even if we don't need it.
         for d in descriptors:
             builder.add(d.nativeType + "Atoms", isStruct=True)
 
         for callback in mainCallbacks:
             forwardDeclareForType(callback)
             for t in getTypesFromCallback(callback):
--- a/dom/camera/DOMCameraControl.h
+++ b/dom/camera/DOMCameraControl.h
@@ -21,20 +21,20 @@
 class nsDOMDeviceStorage;
 class nsPIDOMWindow;
 class nsIDOMBlob;
 
 namespace mozilla {
 
 namespace dom {
   class CameraCapabilities;
-  class CameraPictureOptions;
-  class CameraStartRecordingOptions;
-  class CameraRegion;
-  class CameraSize;
+  struct CameraPictureOptions;
+  struct CameraStartRecordingOptions;
+  struct CameraRegion;
+  struct CameraSize;
   template<typename T> class Optional;
 }
 class ErrorResult;
 class StartRecordingHelper;
 
 // Main camera control.
 class nsDOMCameraControl MOZ_FINAL : public DOMMediaStream
 {
--- a/dom/camera/DOMCameraManager.h
+++ b/dom/camera/DOMCameraManager.h
@@ -19,17 +19,17 @@
 #include "mozilla/Attributes.h"
 
 class nsPIDOMWindow;
 
 namespace mozilla {
   class ErrorResult;
   class nsDOMCameraControl;
   namespace dom {
-    class CameraConfiguration;
+    struct CameraConfiguration;
     class GetCameraCallback;
     class CameraErrorCallback;
   }
 }
 
 typedef nsTArray<nsRefPtr<mozilla::nsDOMCameraControl> > CameraControls;
 typedef nsClassHashtable<nsUint64HashKey, CameraControls> WindowTable;
 typedef mozilla::dom::Optional<mozilla::dom::OwningNonNull<mozilla::dom::CameraErrorCallback>>
--- a/dom/devicestorage/DeviceStorage.h
+++ b/dom/devicestorage/DeviceStorage.h
@@ -25,17 +25,17 @@
 
 class DeviceStorageFile;
 class nsIInputStream;
 class nsIOutputStream;
 
 namespace mozilla {
 class EventListenerManager;
 namespace dom {
-class DeviceStorageEnumerationParameters;
+struct DeviceStorageEnumerationParameters;
 class DOMCursor;
 class DOMRequest;
 class Promise;
 class DeviceStorageFileSystem;
 } // namespace dom
 namespace ipc {
 class FileDescriptor;
 }
--- a/dom/events/DOMEventTargetHelper.h
+++ b/dom/events/DOMEventTargetHelper.h
@@ -12,17 +12,17 @@
 #include "nsPIDOMWindow.h"
 #include "nsIScriptGlobalObject.h"
 #include "nsIScriptContext.h"
 #include "MainThreadUtils.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/EventListenerManager.h"
 #include "mozilla/dom/EventTarget.h"
 
-class JSCompartment;
+struct JSCompartment;
 
 namespace mozilla {
 
 class ErrorResult;
 
 #define NS_DOMEVENTTARGETHELPER_IID \
 { 0xa28385c6, 0x9451, 0x4d7e, \
   { 0xa3, 0xdd, 0xf4, 0xb6, 0x87, 0x2f, 0xa4, 0x76 } }
--- a/dom/events/MessageEvent.h
+++ b/dom/events/MessageEvent.h
@@ -9,17 +9,17 @@
 #include "mozilla/dom/Event.h"
 #include "nsCycleCollectionParticipant.h"
 #include "nsIDOMMessageEvent.h"
 #include "mozilla/dom/MessagePortList.h"
 
 namespace mozilla {
 namespace dom {
 
-class MessageEventInit;
+struct MessageEventInit;
 class MessagePort;
 class MessagePortBase;
 class MessagePortList;
 class OwningWindowProxyOrMessagePort;
 
 /**
  * Implements the MessageEvent event, used for cross-document messaging and
  * server-sent events.
--- a/dom/filehandle/FileHandle.h
+++ b/dom/filehandle/FileHandle.h
@@ -29,17 +29,17 @@ class nsIDOMBlob;
 class nsPIDOMWindow;
 
 namespace mozilla {
 
 class EventChainPreVisitor;
 
 namespace dom {
 
-class DOMFileMetadataParameters;
+struct DOMFileMetadataParameters;
 class FileHelper;
 class FileRequest;
 class FileService;
 class FinishHelper;
 class MetadataHelper;
 class MutableFile;
 
 class FileHandle : public DOMEventTargetHelper,
--- a/dom/filesystem/Directory.h
+++ b/dom/filesystem/Directory.h
@@ -25,17 +25,17 @@
 // by Directory#CreateFileW.
 #ifdef CreateFile
 #undef CreateFile
 #endif
 
 namespace mozilla {
 namespace dom {
 
-class CreateFileOptions;
+struct CreateFileOptions;
 class FileSystemBase;
 class Promise;
 class StringOrFileOrDirectory;
 
 class Directory MOZ_FINAL
   : public nsISupports
   , public nsWrapperCache
 {
--- a/dom/indexedDB/IDBFactory.h
+++ b/dom/indexedDB/IDBFactory.h
@@ -22,17 +22,17 @@ class nsIPrincipal;
 class nsPIDOMWindow;
 template<typename> class nsRefPtr;
 
 namespace mozilla {
 class ErrorResult;
 
 namespace dom {
 class nsIContentParent;
-class IDBOpenDBOptions;
+struct IDBOpenDBOptions;
 
 namespace indexedDB {
 
 struct DatabaseInfo;
 class IDBDatabase;
 class IDBOpenDBRequest;
 class IndexedDBChild;
 class IndexedDBParent;
--- a/dom/indexedDB/IDBRequest.h
+++ b/dom/indexedDB/IDBRequest.h
@@ -22,17 +22,17 @@
 class nsIScriptContext;
 class nsPIDOMWindow;
 
 namespace mozilla {
 class EventChainPostVisitor;
 class EventChainPreVisitor;
 namespace dom {
 class OwningIDBObjectStoreOrIDBIndexOrIDBCursor;
-class ErrorEventInit;
+struct ErrorEventInit;
 }
 }
 
 BEGIN_INDEXEDDB_NAMESPACE
 
 class HelperBase;
 class IDBCursor;
 class IDBFactory;
--- a/dom/interfaces/base/nsIDOMWindowUtils.idl
+++ b/dom/interfaces/base/nsIDOMWindowUtils.idl
@@ -16,17 +16,17 @@
  *          SpecialPowers, which is used to access nsIDOMWindowUtils
  *          in plain mochitests, does not know how to handle them.
  *          (Use 'jsval' return values instead.)
  */
 
 %{C++
 #include "nsColor.h"
 class gfxContext;
-class nsRect;
+struct nsRect;
 %}
 
 [ref] native nsConstRect(const nsRect);
 native nscolor(nscolor);
 [ptr] native gfxContext(gfxContext);
 typedef unsigned long long nsViewID;
 
 interface nsICycleCollectorListener;
--- a/dom/interfaces/geolocation/nsIDOMGeoGeolocation.idl
+++ b/dom/interfaces/geolocation/nsIDOMGeoGeolocation.idl
@@ -5,17 +5,17 @@
 #include "domstubs.idl"
 
 interface nsIDOMGeoPositionCallback;
 interface nsIDOMGeoPositionErrorCallback;
 
 %{C++
 namespace mozilla {
 namespace dom {
-class PositionOptions;
+struct PositionOptions;
 }
 }
 %}
 
 [ptr] native NamespacedPositionOptions(mozilla::dom::PositionOptions);
 
 [builtinclass, uuid(9142ab45-0ab5-418c-9bab-338a6d271d4f)]
 interface nsIDOMGeoGeolocation : nsISupports
--- a/dom/ipc/PBrowser.ipdl
+++ b/dom/ipc/PBrowser.ipdl
@@ -17,17 +17,17 @@ include protocol POfflineCacheUpdate;
 include protocol PIndexedDB;
 include DOMTypes;
 include JavaScriptTypes;
 include URIParams;
 include PContentPermission;
 
 
 using class IPC::Principal from "mozilla/dom/PermissionMessageUtils.h";
-using struct mozilla::gfx::Matrix from "mozilla/gfx/Matrix.h";
+using class mozilla::gfx::Matrix from "mozilla/gfx/Matrix.h";
 using struct gfxSize from "gfxPoint.h";
 using CSSRect from "Units.h";
 using struct mozilla::layers::FrameMetrics from "FrameMetrics.h";
 using struct mozilla::layers::ScrollableLayerGuid from "FrameMetrics.h";
 using struct mozilla::layers::ZoomConstraints from "FrameMetrics.h";
 using FrameMetrics::ViewID from "FrameMetrics.h";
 using mozilla::layout::ScrollingBehavior from "mozilla/layout/RenderFrameUtils.h";
 using struct mozilla::void_t from "ipc/IPCMessageUtils.h";
--- a/dom/ipc/TabContext.h
+++ b/dom/ipc/TabContext.h
@@ -9,17 +9,17 @@
 
 #include "mozilla/layout/RenderFrameUtils.h"
 #include "mozIApplication.h"
 #include "nsCOMPtr.h"
 
 namespace mozilla {
 namespace dom {
 
-struct IPCTabContext;
+class IPCTabContext;
 
 /**
  * TabContext encapsulates information about an iframe that may be a mozbrowser
  * or mozapp.  You can ask whether a TabContext corresponds to a mozbrowser or
  * mozapp, get the app that contains the browser, and so on.
  *
  * TabParent and TabChild both inherit from TabContext, and you can also have
  * standalone TabContext objects.
--- a/dom/ipc/nsIContentChild.h
+++ b/dom/ipc/nsIContentChild.h
@@ -25,17 +25,17 @@ namespace mozilla {
 
 namespace jsipc {
 class PJavaScriptChild;
 class JavaScriptChild;
 class CpowEntry;
 } // jsipc
 
 namespace dom {
-struct IPCTabContext;
+class IPCTabContext;
 
 class nsIContentChild : public nsISupports
 {
 public:
   NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICONTENTCHILD_IID)
 
   BlobChild* GetOrCreateActorForBlob(nsIDOMBlob* aBlob);
 
--- a/dom/ipc/nsIContentParent.h
+++ b/dom/ipc/nsIContentParent.h
@@ -26,17 +26,17 @@ namespace mozilla {
 
 namespace jsipc {
 class PJavaScriptParent;
 class JavaScriptParent;
 class CpowEntry;
 } // namespace jsipc
 
 namespace dom {
-struct IPCTabContext;
+class IPCTabContext;
 class ContentParent;
 
 class nsIContentParent : public nsISupports
                        , public mozilla::dom::ipc::MessageManagerCallback
 {
 public:
   NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICONTENTPARENT_IID)
 
--- a/dom/media/GetUserMediaRequest.h
+++ b/dom/media/GetUserMediaRequest.h
@@ -9,17 +9,18 @@
 #include "nsISupportsImpl.h"
 #include "nsAutoPtr.h"
 #include "nsWrapperCache.h"
 #include "mozilla/dom/BindingUtils.h"
 #include "nsPIDOMWindow.h"
 
 namespace mozilla {
 namespace dom {
-class MediaStreamConstraints;
+
+struct MediaStreamConstraints;
 
 class GetUserMediaRequest : public nsISupports, public nsWrapperCache
 {
 public:
   GetUserMediaRequest(nsPIDOMWindow* aInnerWindow,
                       const nsAString& aCallID,
                       const MediaStreamConstraints& aConstraints,
                       bool aIsSecure);
--- a/dom/media/MediaManager.h
+++ b/dom/media/MediaManager.h
@@ -31,17 +31,17 @@
 #endif
 
 #ifdef MOZ_WIDGET_GONK
 #include "DOMCameraManager.h"
 #endif
 
 namespace mozilla {
 namespace dom {
-class MediaStreamConstraints;
+struct MediaStreamConstraints;
 class NavigatorUserMediaSuccessCallback;
 class NavigatorUserMediaErrorCallback;
 }
 
 #ifdef PR_LOGGING
 extern PRLogModuleInfo* GetMediaManagerLog();
 #define MM_LOG(msg) PR_LOG(GetMediaManagerLog(), PR_LOG_DEBUG, msg)
 #else
--- a/dom/telephony/ipc/TelephonyIPCService.h
+++ b/dom/telephony/ipc/TelephonyIPCService.h
@@ -8,17 +8,17 @@
 
 #include "mozilla/dom/telephony/TelephonyCommon.h"
 #include "mozilla/Attributes.h"
 #include "nsIObserver.h"
 #include "nsITelephonyService.h"
 
 BEGIN_TELEPHONY_NAMESPACE
 
-struct IPCTelephonyRequest;
+class IPCTelephonyRequest;
 class PTelephonyChild;
 
 class TelephonyIPCService MOZ_FINAL : public nsITelephonyService
                                      , public nsITelephonyListener
                                      , public nsIObserver
 {
 public:
   NS_DECL_ISUPPORTS
--- a/dom/workers/WorkerPrivate.h
+++ b/dom/workers/WorkerPrivate.h
@@ -34,17 +34,17 @@ class nsIEventTarget;
 class nsIPrincipal;
 class nsIScriptContext;
 class nsIThread;
 class nsIThreadInternal;
 class nsITimer;
 class nsIURI;
 
 namespace JS {
-class RuntimeStats;
+struct RuntimeStats;
 }
 
 namespace mozilla {
 namespace dom {
 class Function;
 }
 }
 
--- a/dom/workers/WorkerRunnable.h
+++ b/dom/workers/WorkerRunnable.h
@@ -9,17 +9,17 @@
 #include "Workers.h"
 
 #include "nsICancelableRunnable.h"
 
 #include "mozilla/Atomics.h"
 #include "nsISupportsImpl.h"
 #include "nsThreadUtils.h" /* nsRunnable */
 
-class JSContext;
+struct JSContext;
 class nsIEventTarget;
 
 BEGIN_WORKERS_NAMESPACE
 
 class WorkerPrivate;
 
 // Use this runnable to communicate from the worker to its parent or vice-versa.
 // The busy count must be taken into consideration and declared at construction
--- a/dom/xbl/nsXBLMaybeCompiled.h
+++ b/dom/xbl/nsXBLMaybeCompiled.h
@@ -73,17 +73,17 @@ private:
     // An pointer that represents the function before being compiled, with
     // BIT_UNCOMPILED set.
     uintptr_t mUncompiled;
 
     // The JS object for the compiled result.
     JSObject* mCompiled;
   };
 
-  friend class js::GCMethods<nsXBLMaybeCompiled<UncompiledT> >;
+  friend struct js::GCMethods<nsXBLMaybeCompiled<UncompiledT>>;
 };
 
 /* Add support for JS::Heap<nsXBLMaybeCompiled>. */
 namespace js {
 
 template <class UncompiledT>
 struct GCMethods<nsXBLMaybeCompiled<UncompiledT> >
 {
--- a/gfx/layers/apz/src/AsyncPanZoomController.h
+++ b/gfx/layers/apz/src/AsyncPanZoomController.h
@@ -33,17 +33,17 @@ class SharedMemoryBasic;
 
 namespace layers {
 
 struct ScrollableLayerGuid;
 class CompositorParent;
 class GestureEventListener;
 class ContainerLayer;
 class PCompositorParent;
-class ViewTransform;
+struct ViewTransform;
 class AsyncPanZoomAnimation;
 class FlingAnimation;
 
 /**
  * Controller for all panning and zooming logic. Any time a user input is
  * detected and it must be processed in some way to affect what the user sees,
  * it goes through here. Listens for any input event from InputData and can
  * optionally handle WidgetGUIEvent-derived touch events, but this must be done
--- a/gfx/layers/apz/src/Axis.h
+++ b/gfx/layers/apz/src/Axis.h
@@ -20,17 +20,17 @@ const float EPSILON = 0.0001f;
 // Epsilon to be used when comparing 'float' coordinate values
 // with FuzzyEqualsAdditive. The rationale is that 'float' has 7 decimal
 // digits of precision, and coordinate values should be no larger than in the
 // ten thousands. Note also that the smallest legitimate difference in page
 // coordinates is 1 app unit, which is 1/60 of a (CSS pixel), so this epsilon
 // isn't too large.
 const float COORDINATE_EPSILON = 0.01f;
 
-class FrameMetrics;
+struct FrameMetrics;
 class AsyncPanZoomController;
 
 /**
  * Helper class to maintain each axis of movement (X,Y) for panning and zooming.
  * Note that everything here is specific to one axis; that is, the X axis knows
  * nothing about the Y axis and vice versa.
  */
 class Axis {
--- a/gfx/layers/apz/testutil/APZTestData.h
+++ b/gfx/layers/apz/testutil/APZTestData.h
@@ -34,17 +34,17 @@ typedef uint32_t SequenceNumber;
  */
 // TODO(botond):
 //  - Improve warnings/asserts.
 //  - Add ability to associate a repaint request triggered during a layers update
 //    with the sequence number of the paint that caused the layers update.
 class APZTestData {
   typedef FrameMetrics::ViewID ViewID;
   friend struct IPC::ParamTraits<APZTestData>;
-  friend class APZTestDataToJSConverter;
+  friend struct APZTestDataToJSConverter;
 public:
   void StartNewPaint(SequenceNumber aSequenceNumber) {
     mPaints.insert(DataStore::value_type(aSequenceNumber, Bucket()));
     // TODO(botond): MOZ_ASSERT() that we didn't already have a paint with this
     // sequence number once we get rid ofAPZCTreeManager::UpdatePanZoomControllerTree()
     // calls for repeat transactions (bug 1007728).
   }
   void LogTestDataForPaint(SequenceNumber aSequenceNumber,
--- a/gfx/layers/client/SimpleTiledContentClient.h
+++ b/gfx/layers/client/SimpleTiledContentClient.h
@@ -12,17 +12,17 @@
 
 #include "SharedBuffer.h"
 
 namespace mozilla {
 namespace layers {
 
 class ClientTiledThebesLayer;
 
-class SimpleTiledLayerTile;
+struct SimpleTiledLayerTile;
 class SimpleTiledLayerBuffer;
 class SimpleClientTiledThebesLayer;
 class SimpleTiledLayerBuffer;
 
 #define GFX_SIMP_TILEDLAYER_DEBUG_OVERLAY
 
 struct SimpleTiledLayerTile
 {
--- a/gfx/layers/client/TextureClient.h
+++ b/gfx/layers/client/TextureClient.h
@@ -42,17 +42,17 @@ class GLContext;
 namespace layers {
 
 class AsyncTransactionTracker;
 class ContentClient;
 class CompositableForwarder;
 class ISurfaceAllocator;
 class CompositableClient;
 class PlanarYCbCrImage;
-class PlanarYCbCrData;
+struct PlanarYCbCrData;
 class Image;
 class PTextureChild;
 class TextureChild;
 class BufferTextureClient;
 class TextureClient;
 
 /**
  * TextureClient is the abstraction that allows us to share data between the
--- a/gfx/layers/composite/LayerManagerComposite.h
+++ b/gfx/layers/composite/LayerManagerComposite.h
@@ -49,17 +49,17 @@ class TextureImage;
 
 namespace layers {
 
 class CanvasLayerComposite;
 class ColorLayerComposite;
 class CompositableHost;
 class Compositor;
 class ContainerLayerComposite;
-class EffectChain;
+struct EffectChain;
 class ImageLayer;
 class ImageLayerComposite;
 class LayerComposite;
 class RefLayerComposite;
 class SurfaceDescriptor;
 class ThebesLayerComposite;
 class TiledLayerComposer;
 class TextRenderer;
--- a/gfx/layers/ipc/CompositableForwarder.h
+++ b/gfx/layers/ipc/CompositableForwarder.h
@@ -19,17 +19,17 @@
 struct nsIntPoint;
 struct nsIntRect;
 
 namespace mozilla {
 namespace layers {
 
 class CompositableClient;
 class AsyncTransactionTracker;
-class TextureFactoryIdentifier;
+struct TextureFactoryIdentifier;
 class SurfaceDescriptor;
 class SurfaceDescriptorTiles;
 class ThebesBufferData;
 class ClientTiledLayerBuffer;
 class PTextureChild;
 
 /**
  * A transaction is a set of changes that happenned on the content side, that
--- a/gfx/layers/ipc/CompositorChild.h
+++ b/gfx/layers/ipc/CompositorChild.h
@@ -20,17 +20,17 @@
 
 class nsIObserver;
 
 namespace mozilla {
 namespace layers {
 
 class ClientLayerManager;
 class CompositorParent;
-class FrameMetrics;
+struct FrameMetrics;
 
 class CompositorChild MOZ_FINAL : public PCompositorChild
 {
   NS_INLINE_DECL_REFCOUNTING(CompositorChild)
 public:
   CompositorChild(ClientLayerManager *aLayerManager);
 
   void Destroy();
--- a/gfx/layers/ipc/ImageBridgeChild.h
+++ b/gfx/layers/ipc/ImageBridgeChild.h
@@ -33,17 +33,17 @@ class Shmem;
 namespace layers {
 
 class ClientTiledLayerBuffer;
 class AsyncTransactionTracker;
 class ImageClient;
 class ImageContainer;
 class ImageBridgeParent;
 class CompositableClient;
-class CompositableTransaction;
+struct CompositableTransaction;
 class Image;
 class TextureClient;
 
 /**
  * Returns true if the current thread is the ImageBrdigeChild's thread.
  *
  * Can be called from any thread.
  */
--- a/gfx/layers/opengl/Composer2D.h
+++ b/gfx/layers/opengl/Composer2D.h
@@ -24,17 +24,17 @@
  * path.  If the given layer tree requires more generality than the
  * hardware provides, the implementation should bail and have the
  * layer manager fall back on full GPU composition.
  */
 
 namespace mozilla {
 
 namespace gfx {
-struct Matrix;
+class Matrix;
 }
 
 namespace layers {
 
 class Layer;
 
 class Composer2D {
   NS_INLINE_DECL_REFCOUNTING(Composer2D)
--- a/gfx/src/nsDeviceContext.h
+++ b/gfx/src/nsDeviceContext.h
@@ -17,25 +17,25 @@
 #include "nsISupports.h"                // for NS_INLINE_DECL_REFCOUNTING
 #include "nsMathUtils.h"                // for NS_round
 #include "nscore.h"                     // for char16_t, nsAString
 #include "mozilla/AppUnits.h"           // for AppUnits
 
 class gfxASurface;
 class gfxTextPerfMetrics;
 class gfxUserFontSet;
-class nsFont;
+struct nsFont;
 class nsFontCache;
 class nsFontMetrics;
 class nsIAtom;
 class nsIDeviceContextSpec;
 class nsIScreen;
 class nsIScreenManager;
 class nsIWidget;
-class nsRect;
+struct nsRect;
 class nsRenderingContext;
 
 class nsDeviceContext MOZ_FINAL
 {
 public:
     nsDeviceContext();
 
     NS_INLINE_DECL_REFCOUNTING(nsDeviceContext)
--- a/gfx/thebes/gfxBlur.h
+++ b/gfx/thebes/gfxBlur.h
@@ -10,18 +10,18 @@
 #include "nsSize.h"
 #include "nsAutoPtr.h"
 #include "gfxPoint.h"
 #include "mozilla/RefPtr.h"
 
 class gfxContext;
 struct gfxRect;
 struct gfxRGBA;
-class gfxCornerSizes;
-class gfxMatrix;
+struct gfxCornerSizes;
+struct gfxMatrix;
 
 namespace mozilla {
   namespace gfx {
     class AlphaBoxBlur;
     class SourceSurface;
     class DrawTarget;
   }
 }
--- a/gfx/thebes/gfxUtils.h
+++ b/gfx/thebes/gfxUtils.h
@@ -13,17 +13,17 @@
 #include "mozilla/RefPtr.h"
 
 class gfxDrawable;
 class nsIntRegion;
 struct nsIntRect;
 
 namespace mozilla {
 namespace layers {
-class PlanarYCbCrData;
+struct PlanarYCbCrData;
 }
 }
 
 class gfxUtils {
 public:
     typedef mozilla::gfx::DataSourceSurface DataSourceSurface;
     typedef mozilla::gfx::IntPoint IntPoint;
     typedef mozilla::gfx::Matrix Matrix;
--- a/gfx/thebes/gfxWindowsPlatform.h
+++ b/gfx/thebes/gfxWindowsPlatform.h
@@ -43,19 +43,19 @@
 #define D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION 4096
 #endif
 
 namespace mozilla {
 namespace layers {
 class DeviceManagerD3D9;
 }
 }
-class IDirect3DDevice9;
-class ID3D11Device;
-class IDXGIAdapter1;
+struct IDirect3DDevice9;
+struct ID3D11Device;
+struct IDXGIAdapter1;
 
 class nsIMemoryReporter;
 
 // Utility to get a Windows HDC from a thebes context,
 // used by both GDI and Uniscribe font shapers
 struct DCFromContext {
     DCFromContext(gfxContext *aContext) {
         dc = nullptr;
--- a/hal/HalScreenConfiguration.h
+++ b/hal/HalScreenConfiguration.h
@@ -6,15 +6,15 @@
 
 #ifndef mozilla_HalScreenConfiguration_h
 #define mozilla_HalScreenConfiguration_h
 
 #include "mozilla/Observer.h"
 
 namespace mozilla {
 namespace hal {
-struct ScreenConfiguration;
+class ScreenConfiguration;
 typedef Observer<ScreenConfiguration> ScreenConfigurationObserver;
 } // namespace hal
 } // namespace mozilla
 
 #endif  // mozilla_HalScreenConfiguration_h
 
--- a/image/decoders/nsJPEGDecoder.h
+++ b/image/decoders/nsJPEGDecoder.h
@@ -42,17 +42,17 @@ typedef enum {
     JPEG_DECOMPRESS_SEQUENTIAL,           /* Output sequential pixels */
     JPEG_DONE,
     JPEG_SINK_NON_JPEG_TRAILER,          /* Some image files have a */
                                          /* non-JPEG trailer */
     JPEG_ERROR    
 } jstate;
 
 class RasterImage;
-class Orientation;
+struct Orientation;
 
 class nsJPEGDecoder : public Decoder
 {
 public:
   nsJPEGDecoder(RasterImage &aImage, Decoder::DecodeStyle aDecodeStyle);
   virtual ~nsJPEGDecoder();
 
   virtual void InitInternal();
--- a/image/public/imgIContainer.idl
+++ b/image/public/imgIContainer.idl
@@ -28,17 +28,17 @@ class nsIFrame;
 
 namespace mozilla {
 class TimeStamp;
 class SVGImageContext;
 }
 
 namespace mozilla {
 namespace image {
-class Orientation;
+struct Orientation;
 }
 }
 
 %}
 
 [ptr] native gfxContext(gfxContext);
 [ref] native gfxMatrix(gfxMatrix);
 [ref] native gfxRect(gfxRect);
--- a/image/src/ImageOps.h
+++ b/image/src/ImageOps.h
@@ -11,17 +11,17 @@
 
 class imgIContainer;
 struct nsIntRect;
 
 namespace mozilla {
 namespace image {
 
 class Image;
-class Orientation;
+struct Orientation;
 
 class ImageOps
 {
 public:
   /**
    * Creates a version of an existing image which does not animate and is frozen
    * at the first frame.
    *
--- a/image/src/imgRequestProxy.h
+++ b/image/src/imgRequestProxy.h
@@ -27,17 +27,17 @@
      0x1dd2,                                         \
      0x11b2,                                         \
     {0x8f, 0x65, 0x9c, 0x46, 0x2e, 0xe2, 0xbc, 0x95} \
 }
 
 class imgINotificationObserver;
 class imgRequestNotifyRunnable;
 class imgStatusNotifyRunnable;
-class nsIntRect;
+struct nsIntRect;
 class ProxyBehaviour;
 
 namespace mozilla {
 namespace image {
 class Image;
 class ImageURL;
 } // namespace image
 } // namespace mozilla
--- a/js/public/Class.h
+++ b/js/public/Class.h
@@ -19,22 +19,22 @@
 
 /*
  * A JSClass acts as a vtable for JS objects that allows JSAPI clients to
  * control various aspects of the behavior of an object like property lookup.
  * js::Class is an engine-private extension that allows more control over
  * object behavior and, e.g., allows custom slow layout.
  */
 
-class JSFreeOp;
+struct JSFreeOp;
 struct JSFunctionSpec;
 
 namespace js {
 
-class Class;
+struct Class;
 class FreeOp;
 class PropertyName;
 class Shape;
 
 // This is equal to JSFunction::class_.  Use it in places where you don't want
 // to #include jsfun.h.
 extern JS_FRIEND_DATA(const js::Class* const) FunctionClassPtr;
 
--- a/js/public/OldDebugAPI.h
+++ b/js/public/OldDebugAPI.h
@@ -15,17 +15,17 @@
 
 #include "jsapi.h"
 #include "jsbytecode.h"
 
 #include "js/CallArgs.h"
 #include "js/TypeDecls.h"
 
 class JSAtom;
-class JSFreeOp;
+struct JSFreeOp;
 
 namespace js {
 class InterpreterFrame;
 class FrameIter;
 class ScriptSource;
 }
 
 // Raw JSScript* because this needs to be callable from a signal handler.
--- a/js/public/RootingAPI.h
+++ b/js/public/RootingAPI.h
@@ -1087,17 +1087,17 @@ MutableHandle<T>::MutableHandle(Persiste
  * containing Heap<T> or TenuredHeap<T> members to make sure their referents get
  * marked when the object itself is marked.
  */
 template<typename T>
 class PersistentRooted : private mozilla::LinkedListElement<PersistentRooted<T> > {
     friend class mozilla::LinkedList<PersistentRooted>;
     friend class mozilla::LinkedListElement<PersistentRooted>;
 
-    friend class js::gc::PersistentRootedMarker<T>;
+    friend struct js::gc::PersistentRootedMarker<T>;
 
     void registerWithRuntime(JSRuntime *rt) {
         JS::shadow::Runtime *srt = JS::shadow::Runtime::asShadowRuntime(rt);
         srt->getPersistentRootedList<T>().insertBack(this);
     }
 
   public:
     explicit PersistentRooted(JSContext *cx) : ptr(js::GCMethods<T>::initial())
--- a/js/src/gc/GCRuntime.h
+++ b/js/src/gc/GCRuntime.h
@@ -26,17 +26,17 @@
 
 namespace js {
 
 namespace gc {
 
 typedef Vector<JS::Zone *, 4, SystemAllocPolicy> ZoneVector;
 
 class MarkingValidator;
-class AutoPrepareForTracing;
+struct AutoPrepareForTracing;
 class AutoTraceSession;
 
 struct ConservativeGCData
 {
     /*
      * The GC scans conservatively between ThreadData::nativeStackBase and
      * nativeStackTop unless the latter is nullptr.
      */
--- a/js/src/gc/Heap.h
+++ b/js/src/gc/Heap.h
@@ -22,17 +22,17 @@
 #include "js/HeapAPI.h"
 
 struct JSCompartment;
 
 struct JSRuntime;
 
 namespace JS {
 namespace shadow {
-class Runtime;
+struct Runtime;
 }
 }
 
 namespace js {
 
 class FreeOp;
 
 namespace gc {
--- a/js/src/gc/Marking.h
+++ b/js/src/gc/Marking.h
@@ -15,29 +15,29 @@ class JSLinearString;
 namespace js {
 
 class ArgumentsObject;
 class ArrayBufferObject;
 class ArrayBufferViewObject;
 class SharedArrayBufferObject;
 class BaseShape;
 class DebugScopeObject;
-struct GCMarker;
+class GCMarker;
 class GlobalObject;
 class LazyScript;
 class ScopeObject;
 class Shape;
 class UnownedBaseShape;
 
 template<class> class HeapPtr;
 
 namespace jit {
 class JitCode;
-class IonScript;
-class VMFunction;
+struct IonScript;
+struct VMFunction;
 }
 
 namespace types {
 class Type;
 }
 
 namespace gc {
 
--- a/js/src/gc/Nursery.h
+++ b/js/src/gc/Nursery.h
@@ -28,17 +28,17 @@ struct Zone;
 
 namespace js {
 
 class ObjectElements;
 class HeapSlot;
 void SetGCZeal(JSRuntime *, uint8_t, uint32_t);
 
 namespace gc {
-class Cell;
+struct Cell;
 class Collector;
 class MinorCollectionTracer;
 class ForkJoinNursery;
 } /* namespace gc */
 
 namespace types {
 struct TypeObject;
 }
--- a/js/src/gc/StoreBuffer.cpp
+++ b/js/src/gc/StoreBuffer.cpp
@@ -371,16 +371,16 @@ JS::HeapValueRelocate(JS::Value *valuep)
     JS_ASSERT(valuep);
     JS_ASSERT(valuep->isMarkable());
     if (valuep->isString() && valuep->toString()->isPermanentAtom())
         return;
     JSRuntime *runtime = static_cast<js::gc::Cell *>(valuep->toGCThing())->runtimeFromMainThread();
     runtime->gc.storeBuffer.removeRelocatableValueFromAnyThread(valuep);
 }
 
-template class StoreBuffer::MonoTypeBuffer<StoreBuffer::ValueEdge>;
-template class StoreBuffer::MonoTypeBuffer<StoreBuffer::CellPtrEdge>;
-template class StoreBuffer::MonoTypeBuffer<StoreBuffer::SlotsEdge>;
-template class StoreBuffer::MonoTypeBuffer<StoreBuffer::WholeCellEdges>;
-template class StoreBuffer::RelocatableMonoTypeBuffer<StoreBuffer::ValueEdge>;
-template class StoreBuffer::RelocatableMonoTypeBuffer<StoreBuffer::CellPtrEdge>;
+template struct StoreBuffer::MonoTypeBuffer<StoreBuffer::ValueEdge>;
+template struct StoreBuffer::MonoTypeBuffer<StoreBuffer::CellPtrEdge>;
+template struct StoreBuffer::MonoTypeBuffer<StoreBuffer::SlotsEdge>;
+template struct StoreBuffer::MonoTypeBuffer<StoreBuffer::WholeCellEdges>;
+template struct StoreBuffer::RelocatableMonoTypeBuffer<StoreBuffer::ValueEdge>;
+template struct StoreBuffer::RelocatableMonoTypeBuffer<StoreBuffer::CellPtrEdge>;
 
 #endif /* JSGC_GENERATIONAL */
--- a/js/src/gc/Tracer.h
+++ b/js/src/gc/Tracer.h
@@ -12,23 +12,23 @@
 #include "js/GCAPI.h"
 #include "js/SliceBudget.h"
 #include "js/TracingAPI.h"
 
 namespace js {
 class GCMarker;
 class ObjectImpl;
 namespace gc {
-class ArenaHeader;
+struct ArenaHeader;
 }
 namespace jit {
 class JitCode;
 }
 namespace types {
-class TypeObject;
+struct TypeObject;
 }
 
 static const size_t NON_INCREMENTAL_MARK_STACK_BASE_CAPACITY = 4096;
 static const size_t INCREMENTAL_MARK_STACK_BASE_CAPACITY = 32768;
 
 /*
  * When the native stack is low, the GC does not call JS_TraceChildren to mark
  * the reachable "children" of the thing. Rather the thing is put aside and
--- a/js/src/jit/AsmJS.h
+++ b/js/src/jit/AsmJS.h
@@ -15,20 +15,20 @@
 
 #include "js/TypeDecls.h"
 #include "vm/ObjectImpl.h"
 
 namespace js {
 
 class ExclusiveContext;
 namespace frontend {
-    template <typename ParseHandler> struct Parser;
+    template <typename ParseHandler> class Parser;
     template <typename ParseHandler> struct ParseContext;
     class FullParseHandler;
-    struct ParseNode;
+    class ParseNode;
 }
 
 typedef frontend::Parser<frontend::FullParseHandler> AsmJSParser;
 typedef frontend::ParseContext<frontend::FullParseHandler> AsmJSParseContext;
 
 // Takes over parsing of a function starting with "use asm". The return value
 // indicates whether an error was reported which the caller should propagate.
 // If no error was reported, the function may still fail to validate as asm.js.
--- a/js/src/jit/AsmJSLink.h
+++ b/js/src/jit/AsmJSLink.h
@@ -10,17 +10,17 @@
 #include "NamespaceImports.h"
 
 class JSAtom;
 
 namespace js {
 
 class AsmJSActivation;
 class AsmJSModule;
-namespace jit { class CallSite; }
+namespace jit { struct CallSite; }
 
 // Iterates over the frames of a single AsmJSActivation.
 class AsmJSFrameIterator
 {
     const AsmJSModule *module_;
     const jit::CallSite *callsite_;
     uint8_t *sp_;
 
--- a/js/src/jit/Recover.h
+++ b/js/src/jit/Recover.h
@@ -6,17 +6,17 @@
 
 #ifndef jit_Recover_h
 #define jit_Recover_h
 
 #include "mozilla/Attributes.h"
 
 #include "jit/Snapshots.h"
 
-class JSContext;
+struct JSContext;
 
 namespace js {
 namespace jit {
 
 #define RECOVER_OPCODE_LIST(_)                  \
     _(ResumePoint)                              \
     _(BitNot)                                   \
     _(BitAnd)                                   \
--- a/js/src/jsalloc.h
+++ b/js/src/jsalloc.h
@@ -14,17 +14,17 @@
 #ifndef jsalloc_h
 #define jsalloc_h
 
 #include "js/TypeDecls.h"
 #include "js/Utility.h"
 
 namespace js {
 
-class ContextFriendFields;
+struct ContextFriendFields;
 
 /* Policy for using system memory functions and doing no error reporting. */
 class SystemAllocPolicy
 {
   public:
     void *malloc_(size_t bytes) { return js_malloc(bytes); }
     void *calloc_(size_t bytes) { return js_calloc(bytes); }
     void *realloc_(void *p, size_t oldBytes, size_t bytes) { return js_realloc(p, bytes); }
--- a/js/src/jsfriendapi.h
+++ b/js/src/jsfriendapi.h
@@ -32,17 +32,17 @@
 #endif
 
 #define JS_CHECK_STACK_SIZE(limit, lval) JS_CHECK_STACK_SIZE_WITH_TOLERANCE(limit, lval, 0)
 
 class JSAtom;
 struct JSErrorFormatString;
 class JSLinearString;
 struct JSJitInfo;
-class JSErrorReport;
+struct JSErrorReport;
 
 namespace JS {
 template <class T>
 class Heap;
 } /* namespace JS */
 
 extern JS_FRIEND_API(void)
 JS_SetGrayGCRootsTracer(JSRuntime *rt, JSTraceDataOp traceOp, void *data);
--- a/js/src/jsinfer.h
+++ b/js/src/jsinfer.h
@@ -204,19 +204,19 @@ template <> struct ExecutionModeTraits<P
 namespace jit {
     struct IonScript;
     class IonAllocPolicy;
     class TempAllocator;
 }
 
 namespace types {
 
-class TypeZone;
+struct TypeZone;
 class TypeSet;
-class TypeObjectKey;
+struct TypeObjectKey;
 
 /*
  * Information about a single concrete type. We pack this into a single word,
  * where small values are particular primitive or other singleton types, and
  * larger values are either specific JS objects or type objects.
  */
 class Type
 {
@@ -1395,17 +1395,17 @@ struct TypeObjectKey
 // by the compiler, but this is only done on the main thread. If we are
 // compiling off thread and use a property which has not yet been instantiated,
 // it will be treated as empty and non-configured and will be instantiated when
 // rejoining to the main thread. If it is in fact not empty, the compilation
 // will fail; to avoid this, we try to instantiate singleton property types
 // during generation of baseline caches.
 class HeapTypeSetKey
 {
-    friend class TypeObjectKey;
+    friend struct TypeObjectKey;
 
     // Object and property being accessed.
     TypeObjectKey *object_;
     jsid id_;
 
     // If instantiated, the underlying heap type set.
     HeapTypeSet *maybeTypes_;
 
--- a/js/src/jsobj.h
+++ b/js/src/jsobj.h
@@ -28,17 +28,17 @@
 
 namespace JS {
 struct ObjectsExtraSizes;
 }
 
 namespace js {
 
 class AutoPropDescVector;
-struct GCMarker;
+class GCMarker;
 struct NativeIterator;
 class Nursery;
 struct StackShape;
 
 inline JSObject *
 CastAsObject(PropertyOp op)
 {
     return JS_FUNC_TO_DATA_PTR(JSObject *, op);
@@ -202,18 +202,18 @@ class ForkJoinNursery;
  *
  * The JSFunction struct is an extension of this struct allocated from a larger
  * GC size-class.
  */
 class JSObject : public js::ObjectImpl
 {
   private:
     friend class js::Shape;
-    friend struct js::GCMarker;
-    friend class  js::NewObjectCache;
+    friend class js::GCMarker;
+    friend class js::NewObjectCache;
     friend class js::Nursery;
     friend class js::gc::ForkJoinNursery;
 
     /* Make the type object to use for LAZY_TYPE objects. */
     static js::types::TypeObject *makeLazyType(JSContext *cx, js::HandleObject obj);
 
   public:
     static const js::Class class_;
--- a/js/src/jspubtd.h
+++ b/js/src/jspubtd.h
@@ -326,17 +326,17 @@ namespace js {
  * Parallel operations in general can have one of three states. They may
  * succeed, fail, or "bail", where bail indicates that the code encountered an
  * unexpected condition and should be re-run sequentially. Different
  * subcategories of the "bail" state are encoded as variants of TP_RETRY_*.
  */
 enum ParallelResult { TP_SUCCESS, TP_RETRY_SEQUENTIALLY, TP_RETRY_AFTER_GC, TP_FATAL };
 
 struct ThreadSafeContext;
-struct ForkJoinContext;
+class ForkJoinContext;
 class ExclusiveContext;
 
 class Allocator;
 
 enum ThingRootKind
 {
     THING_ROOT_OBJECT,
     THING_ROOT_SHAPE,
--- a/js/src/jsscript.h
+++ b/js/src/jsscript.h
@@ -46,17 +46,17 @@ class BindingIter;
 class LazyScript;
 class RegExpObject;
 struct SourceCompressionTask;
 class Shape;
 class WatchpointMap;
 class NestedScopeObject;
 
 namespace frontend {
-    class BytecodeEmitter;
+    struct BytecodeEmitter;
 }
 
 }
 
 /*
  * Type of try note associated with each catch or finally block, and also with
  * for-in and other kinds of loops. Non-for-in loops do not need these notes
  * for exception unwinding, but storing their boundaries here is helpful for
@@ -379,17 +379,17 @@ class SourceDataCache
 
   private:
     void holdEntry(AutoHoldEntry &holder, ScriptSource *ss);
     void releaseEntry(AutoHoldEntry &holder);
 };
 
 class ScriptSource
 {
-    friend class SourceCompressionTask;
+    friend struct SourceCompressionTask;
 
     uint32_t refs;
 
     // Note: while ScriptSources may be compressed off thread, they are only
     // modified by the main thread, and all members are always safe to access
     // on the main thread.
 
     // Indicate which field in the |data| union is active.
--- a/js/src/vm/ForkJoin.h
+++ b/js/src/vm/ForkJoin.h
@@ -342,17 +342,17 @@ struct ParallelBailoutRecord {
     void updateCause(ParallelBailoutCause cause,
                      JSScript *outermostScript,
                      JSScript *currentScript,
                      jsbytecode *currentPc);
     void addTrace(JSScript *script,
                   jsbytecode *pc);
 };
 
-struct ForkJoinShared;
+class ForkJoinShared;
 
 class ForkJoinContext : public ThreadSafeContext
 {
   public:
     // Bailout record used to record the reason this thread stopped executing
     ParallelBailoutRecord *const bailoutRecord;
 
 #ifdef FORKJOIN_SPEW
--- a/js/src/vm/HelperThreads.h
+++ b/js/src/vm/HelperThreads.h
@@ -452,17 +452,17 @@ OffThreadParsingMustWaitForGC(JSRuntime 
 #endif
 
 // Compression tasks are allocated on the stack by their triggering thread,
 // which will block on the compression completing as the task goes out of scope
 // to ensure it completes at the required time.
 struct SourceCompressionTask
 {
     friend class ScriptSource;
-    friend class HelperThread;
+    friend struct HelperThread;
 
 #ifdef JS_THREADSAFE
     // Thread performing the compression.
     HelperThread *helperThread;
 #endif
 
   private:
     // Context from the triggering thread. Don't use this off thread!
--- a/js/src/vm/ObjectImpl.h
+++ b/js/src/vm/ObjectImpl.h
@@ -256,17 +256,17 @@ class ObjectElements
 
     static const size_t VALUES_PER_HEADER = 2;
 };
 
 /* Shared singleton for objects with no elements. */
 extern HeapSlot *const emptyObjectElements;
 
 struct Class;
-struct GCMarker;
+class GCMarker;
 struct ObjectOps;
 class Shape;
 
 class NewObjectCache;
 class TaggedProto;
 
 inline Value
 ObjectValue(ObjectImpl &obj);
@@ -486,17 +486,17 @@ class ObjectImpl : public gc::BarrieredC
                       HeapSlot **fixedStart, HeapSlot **fixedEnd,
                       HeapSlot **slotsStart, HeapSlot **slotsEnd)
     {
         MOZ_ASSERT(slotInRange(start + length, SENTINEL_ALLOWED));
         getSlotRangeUnchecked(start, length, fixedStart, fixedEnd, slotsStart, slotsEnd);
     }
 
   protected:
-    friend struct GCMarker;
+    friend class GCMarker;
     friend class Shape;
     friend class NewObjectCache;
 
     void invalidateSlotRange(uint32_t start, uint32_t length) {
 #ifdef DEBUG
         HeapSlot *fixedStart, *fixedEnd, *slotsStart, *slotsEnd;
         getSlotRange(start, length, &fixedStart, &fixedEnd, &slotsStart, &slotsEnd);
         Debug_SetSlotRangeToCrashOnTouch(fixedStart, fixedEnd);
--- a/js/src/vm/RegExpObject.h
+++ b/js/src/vm/RegExpObject.h
@@ -32,17 +32,17 @@
  * needed for execution. When a RegExpShared needs to be created, it is looked
  * up in a per-compartment table to allow reuse between objects. Lastly, on
  * GC, every RegExpShared (that is not active on the callstack) is discarded.
  * Because of the last point, any code using a RegExpShared (viz., by executing
  * a regexp) must indicate the RegExpShared is active via RegExpGuard.
  */
 namespace js {
 
-class MatchPair;
+struct MatchPair;
 class MatchPairs;
 class RegExpShared;
 
 namespace frontend { class TokenStream; }
 
 enum RegExpFlag
 {
     IgnoreCaseFlag  = 0x01,
--- a/js/src/vm/Runtime.h
+++ b/js/src/vm/Runtime.h
@@ -44,17 +44,17 @@
 #ifdef _MSC_VER
 #pragma warning(push)
 #pragma warning(disable:4100) /* Silence unreferenced formal parameter warnings */
 #endif
 
 namespace js {
 
 class PerThreadData;
-class ThreadSafeContext;
+struct ThreadSafeContext;
 class AutoKeepAtoms;
 #ifdef JS_TRACE_LOGGING
 class TraceLogger;
 #endif
 
 /* Thread Local Storage slot for storing the runtime for a thread. */
 extern mozilla::ThreadLocal<PerThreadData*> TlsPerThreadData;
 
@@ -81,17 +81,17 @@ class AsmJSActivation;
 class MathCache;
 
 namespace jit {
 class JitRuntime;
 class JitActivation;
 struct PcScriptCache;
 class Simulator;
 class SimulatorRuntime;
-class AutoFlushICache;
+struct AutoFlushICache;
 }
 
 /*
  * GetSrcNote cache to avoid O(n^2) growth in finding a source note for a
  * given pc in a script. We use the script->code pointer to tag the cache,
  * instead of the script address itself, so that source notes are always found
  * by offset from the bytecode with which they were generated.
  */
--- a/js/src/vm/Stack.h
+++ b/js/src/vm/Stack.h
@@ -28,17 +28,17 @@ class ArgumentsObject;
 class AsmJSModule;
 class InterpreterRegs;
 class ScopeObject;
 class ScriptFrameIter;
 class SPSProfiler;
 class InterpreterFrame;
 class StaticBlockObject;
 
-struct ScopeCoordinate;
+class ScopeCoordinate;
 
 // VM stack layout
 //
 // A JSRuntime's stack consists of a linked list of activations. Every activation
 // contains a number of scripted frames that are either running in the interpreter
 // (InterpreterActivation) or JIT code (JitActivation). The frames inside a single
 // activation are contiguous: whenever C++ calls back into JS, a new activation is
 // pushed.
--- a/js/xpconnect/src/XPCQuickStubs.h
+++ b/js/xpconnect/src/XPCQuickStubs.h
@@ -7,17 +7,17 @@
 #ifndef xpcquickstubs_h___
 #define xpcquickstubs_h___
 
 #include "XPCForwards.h"
 
 class qsObjectHelper;
 namespace mozilla {
 namespace dom {
-class NativePropertiesHolder;
+struct NativePropertiesHolder;
 }
 }
 
 /* XPCQuickStubs.h - Support functions used only by quick stubs. */
 
 class XPCCallContext;
 
 #define XPC_QS_NULL_INDEX  ((uint16_t) -1)
--- a/layout/base/GeometryUtils.h
+++ b/layout/base/GeometryUtils.h
@@ -21,17 +21,17 @@ class nsIDocument;
 namespace mozilla {
 
 namespace dom {
 struct BoxQuadOptions;
 struct ConvertCoordinateOptions;
 class DOMQuad;
 class DOMRectReadOnly;
 class DOMPoint;
-class DOMPointInit;
+struct DOMPointInit;
 class OwningTextOrElementOrDocument;
 class TextOrElementOrDocument;
 }
 
 typedef dom::TextOrElementOrDocument GeometryNode;
 typedef dom::OwningTextOrElementOrDocument OwningGeometryNode;
 
 /**
--- a/layout/base/nsLayoutUtils.h
+++ b/layout/base/nsLayoutUtils.h
@@ -51,17 +51,17 @@ class gfxDrawable;
 class nsView;
 class nsIFrame;
 class nsStyleCoord;
 class nsStyleCorners;
 class gfxContext;
 class nsPIDOMWindow;
 class imgIRequest;
 class nsIDocument;
-class gfxPoint;
+struct gfxPoint;
 struct nsStyleFont;
 struct nsStyleImageOrientation;
 struct nsOverflowAreas;
 
 namespace mozilla {
 class SVGImageContext;
 struct IntrinsicSize;
 struct ContainerLayerParameters;
--- a/layout/forms/nsButtonFrameRenderer.h
+++ b/layout/forms/nsButtonFrameRenderer.h
@@ -10,17 +10,17 @@
 #include "nsMargin.h"
 
 class nsIFrame;
 class nsFrame;
 class nsDisplayList;
 class nsDisplayListBuilder;
 class nsPresContext;
 class nsRenderingContext;
-class nsRect;
+struct nsRect;
 class nsStyleContext;
 
 
 #define NS_BUTTON_RENDERER_FOCUS_INNER_CONTEXT_INDEX  0
 #define NS_BUTTON_RENDERER_FOCUS_OUTER_CONTEXT_INDEX  1
 #define NS_BUTTON_RENDERER_LAST_CONTEXT_INDEX   NS_BUTTON_RENDERER_FOCUS_OUTER_CONTEXT_INDEX
 
 class nsButtonFrameRenderer {
--- a/layout/generic/StickyScrollContainer.h
+++ b/layout/generic/StickyScrollContainer.h
@@ -11,17 +11,17 @@
 
 #ifndef StickyScrollContainer_h
 #define StickyScrollContainer_h
 
 #include "nsPoint.h"
 #include "nsTArray.h"
 #include "nsIScrollPositionListener.h"
 
-class nsRect;
+struct nsRect;
 class nsIFrame;
 class nsIScrollableFrame;
 
 namespace mozilla {
 
 class StickyScrollContainer MOZ_FINAL : public nsIScrollPositionListener
 {
 public:
--- a/layout/generic/nsAbsoluteContainingBlock.h
+++ b/layout/generic/nsAbsoluteContainingBlock.h
@@ -10,17 +10,17 @@
 
 #ifndef nsAbsoluteContainingBlock_h___
 #define nsAbsoluteContainingBlock_h___
 
 #include "nsFrameList.h"
 #include "nsIFrame.h"
 
 class nsContainerFrame;
-class nsHTMLReflowState;
+struct nsHTMLReflowState;
 class nsPresContext;
 
 /**
  * This class contains the logic for being an absolute containing block.  This
  * class is used within viewport frames (for frames representing content with
  * fixed position) and blocks (for frames representing absolutely positioned
  * content), since each set of frames is absolutely positioned with respect to
  * its parent.
--- a/layout/generic/nsFlexContainerFrame.h
+++ b/layout/generic/nsFlexContainerFrame.h
@@ -30,17 +30,17 @@ public:
   // Factory method:
   friend nsContainerFrame* NS_NewFlexContainerFrame(nsIPresShell* aPresShell,
                                                     nsStyleContext* aContext);
 
   // Forward-decls of helper classes
   class FlexItem;
   class FlexLine;
   class FlexboxAxisTracker;
-  class StrutInfo;
+  struct StrutInfo;
 
   // nsIFrame overrides
   virtual void BuildDisplayList(nsDisplayListBuilder*   aBuilder,
                                 const nsRect&           aDirtyRect,
                                 const nsDisplayListSet& aLists) MOZ_OVERRIDE;
 
   virtual void Reflow(nsPresContext*           aPresContext,
                       nsHTMLReflowMetrics&     aDesiredSize,
--- a/layout/generic/nsHTMLReflowMetrics.h
+++ b/layout/generic/nsHTMLReflowMetrics.h
@@ -9,17 +9,17 @@
 #define nsHTMLReflowMetrics_h___
 
 #include "nsRect.h"
 #include "nsBoundingMetrics.h"
 #include "WritingModes.h"
 
 //----------------------------------------------------------------------
 
-class nsHTMLReflowState;
+struct nsHTMLReflowState;
 
 // Option flags
 #define NS_REFLOW_CALC_BOUNDING_METRICS  0x0001
 
 /**
  * When we store overflow areas as an array of scrollable and visual
  * overflow, we use these indices.
  *
--- a/layout/generic/nsImageFrame.h
+++ b/layout/generic/nsImageFrame.h
@@ -19,17 +19,17 @@
 #include "mozilla/Attributes.h"
 #include "mozilla/DebugOnly.h"
 #include "nsIReflowCallback.h"
 
 class nsImageMap;
 class nsIURI;
 class nsILoadGroup;
 struct nsHTMLReflowState;
-struct nsHTMLReflowMetrics;
+class nsHTMLReflowMetrics;
 class nsDisplayImage;
 class nsPresContext;
 class nsImageFrame;
 class nsTransform2D;
 class nsImageLoadingContent;
 
 namespace mozilla {
 namespace layers {
--- a/layout/mathml/nsIMathMLFrame.h
+++ b/layout/mathml/nsIMathMLFrame.h
@@ -6,17 +6,17 @@
 #ifndef nsIMathMLFrame_h___
 #define nsIMathMLFrame_h___
 
 #include "nsQueryFrame.h"
 #include "nsMathMLOperators.h"
 
 struct nsPresentationData;
 struct nsEmbellishData;
-struct nsHTMLReflowMetrics;
+class nsHTMLReflowMetrics;
 class nsRenderingContext;
 class nsIFrame;
 
 // For MathML, this 'type' will be used to determine the spacing between frames
 // Subclasses can return a 'type' that will give them a particular spacing
 enum eMathMLFrameType {
   eMathMLFrameType_UNKNOWN = -1,
   eMathMLFrameType_Ordinary,
--- a/layout/mathml/nsMathMLChar.h
+++ b/layout/mathml/nsMathMLChar.h
@@ -15,19 +15,19 @@
 #include "gfxFont.h"
 
 class nsGlyphTable;
 class nsIFrame;
 class nsDisplayListBuilder;
 class nsDisplayListSet;
 class nsPresContext;
 class nsRenderingContext;
-class nsBoundingMetrics;
+struct nsBoundingMetrics;
 class nsStyleContext;
-class nsFont;
+struct nsFont;
 
 // Hints for Stretch() to indicate criteria for stretching
 enum {
   // Don't stretch
   NS_STRETCH_NONE     = 0x00,
   // Variable size stretches
   NS_STRETCH_VARIABLE_MASK = 0x0F,
   NS_STRETCH_NORMAL   = 0x01, // try to stretch to requested size
--- a/layout/style/AnimationCommon.h
+++ b/layout/style/AnimationCommon.h
@@ -18,17 +18,17 @@
 #include "nsStyleStruct.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/FloatingPoint.h"
 #include "nsCSSPseudoElements.h"
 
 class nsIFrame;
 class nsPresContext;
 class nsStyleChangeList;
-class ElementPropertyTransition;
+struct ElementPropertyTransition;
 
 
 namespace mozilla {
 namespace css {
 
 bool IsGeometricProperty(nsCSSProperty aProperty);
 
 struct CommonElementAnimationData;
--- a/layout/style/CSSVariableDeclarations.h
+++ b/layout/style/CSSVariableDeclarations.h
@@ -8,17 +8,17 @@
 #ifndef mozilla_CSSVariableDeclarations_h
 #define mozilla_CSSVariableDeclarations_h
 
 #include "nsDataHashtable.h"
 
 namespace mozilla {
 class CSSVariableResolver;
 }
-class nsRuleData;
+struct nsRuleData;
 
 namespace mozilla {
 
 class CSSVariableDeclarations
 {
 public:
   CSSVariableDeclarations();
   CSSVariableDeclarations(const CSSVariableDeclarations& aOther);
--- a/layout/style/ImageLoader.h
+++ b/layout/style/ImageLoader.h
@@ -21,17 +21,17 @@ class nsIFrame;
 class nsIDocument;
 class nsPresContext;
 class nsIURI;
 class nsIPrincipal;
 
 namespace mozilla {
 namespace css {
 
-class ImageValue;
+struct ImageValue;
 
 class ImageLoader MOZ_FINAL : public imgINotificationObserver,
                               public imgIOnloadBlocker {
 public:
   typedef mozilla::css::ImageValue Image;
 
   ImageLoader(nsIDocument* aDocument)
   : mDocument(aDocument),
--- a/layout/style/nsCSSParser.h
+++ b/layout/style/nsCSSParser.h
@@ -18,17 +18,17 @@
 
 class nsCSSStyleSheet;
 class nsIPrincipal;
 class nsIURI;
 struct nsCSSSelectorList;
 class nsMediaList;
 class nsCSSKeyframeRule;
 class nsCSSValue;
-class nsRuleData;
+struct nsRuleData;
 
 namespace mozilla {
 class CSSVariableValues;
 namespace css {
 class Rule;
 class Declaration;
 class Loader;
 class StyleRule;
--- a/layout/style/nsComputedDOMStyle.h
+++ b/layout/style/nsComputedDOMStyle.h
@@ -26,47 +26,47 @@ namespace dom {
 class Element;
 }
 }
 
 struct nsComputedStyleMap;
 class nsIFrame;
 class nsIPresShell;
 class nsDOMCSSValueList;
-class nsMargin;
+struct nsMargin;
 class nsROCSSPrimitiveValue;
-class nsStyleBackground;
-class nsStyleBorder;
-class nsStyleContent;
-class nsStyleColumn;
-class nsStyleColor;
+struct nsStyleBackground;
+struct nsStyleBorder;
+struct nsStyleContent;
+struct nsStyleColumn;
+struct nsStyleColor;
 class nsStyleCoord;
 class nsStyleCorners;
-class nsStyleDisplay;
-class nsStyleFilter;
-class nsStyleFont;
+struct nsStyleDisplay;
+struct nsStyleFilter;
+struct nsStyleFont;
 class nsStyleGradient;
-class nsStyleImage;
-class nsStyleList;
-class nsStyleMargin;
-class nsStyleOutline;
-class nsStylePadding;
-class nsStylePosition;
-class nsStyleQuotes;
+struct nsStyleImage;
+struct nsStyleList;
+struct nsStyleMargin;
+struct nsStyleOutline;
+struct nsStylePadding;
+struct nsStylePosition;
+struct nsStyleQuotes;
 class nsStyleSides;
-class nsStyleSVG;
-class nsStyleSVGReset;
-class nsStyleTable;
-class nsStyleText;
-class nsStyleTextReset;
+struct nsStyleSVG;
+struct nsStyleSVGReset;
+struct nsStyleTable;
+struct nsStyleText;
+struct nsStyleTextReset;
 class nsStyleTimingFunction;
-class nsStyleUIReset;
-class nsStyleVisibility;
-class nsStyleXUL;
-class nsTimingFunction;
+struct nsStyleUIReset;
+struct nsStyleVisibility;
+struct nsStyleXUL;
+struct nsTimingFunction;
 class gfx3DMatrix;
 
 class nsComputedDOMStyle MOZ_FINAL : public nsDOMCSSDeclaration
 {
 public:
   typedef nsCSSProps::KTableValue KTableValue;
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
--- a/layout/style/nsStyleUtil.h
+++ b/layout/style/nsStyleUtil.h
@@ -14,17 +14,17 @@
 class nsCSSValue;
 class nsStringComparator;
 class nsStyleCoord;
 class nsIContent;
 class nsIPrincipal;
 class nsIURI;
 struct gfxFontFeature;
 struct gfxAlternateValue;
-class nsCSSValueList;
+struct nsCSSValueList;
 
 // Style utility functions
 class nsStyleUtil {
 public:
 
  static bool DashMatchCompare(const nsAString& aAttributeValue,
                                 const nsAString& aSelectorValue,
                                 const nsStringComparator& aComparator);
--- a/layout/xul/nsBoxLayoutState.h
+++ b/layout/xul/nsBoxLayoutState.h
@@ -14,17 +14,17 @@
 #define nsBoxLayoutState_h___
 
 #include "nsCOMPtr.h"
 #include "nsPresContext.h"
 #include "nsIPresShell.h"
 
 class nsRenderingContext;
 class nsCalculatedBoxInfo;
-struct nsHTMLReflowMetrics;
+class nsHTMLReflowMetrics;
 struct nsHTMLReflowState;
 class nsString;
 class nsHTMLReflowCommand;
 
 class MOZ_STACK_CLASS nsBoxLayoutState
 {
 public:
   nsBoxLayoutState(nsPresContext* aPresContext,
--- a/media/webrtc/signaling/src/mediapipeline/MediaPipelineFilter.h
+++ b/media/webrtc/signaling/src/mediapipeline/MediaPipelineFilter.h
@@ -11,17 +11,17 @@
 #define mediapipelinefilter_h__
 
 #include <cstddef>
 #include <stdint.h>
 
 #include <set>
 
 namespace webrtc {
-class RTPHeader;
+struct RTPHeader;
 }
 
 namespace mozilla {
 
 // A class that handles the work of filtering RTP packets that arrive at a
 // MediaPipeline. This is primarily important for the use of BUNDLE (ie;
 // multiple m-lines share the same RTP stream). There are three ways that this
 // can work;
--- a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.h
+++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.h
@@ -67,18 +67,18 @@ class MediaPipeline;
 
 #ifdef USE_FAKE_MEDIA_STREAMS
 typedef Fake_DOMMediaStream DOMMediaStream;
 #else
 class DOMMediaStream;
 #endif
 
 namespace dom {
-class RTCConfiguration;
-class MediaConstraintsInternal;
+struct RTCConfiguration;
+struct MediaConstraintsInternal;
 class MediaStreamTrack;
 
 #ifdef USE_FAKE_PCOBSERVER
 typedef test::AFakePCObserver PeerConnectionObserver;
 typedef const char *PCObserverString;
 #else
 class PeerConnectionObserver;
 typedef NS_ConvertUTF8toUTF16 PCObserverString;
@@ -202,17 +202,17 @@ class RTCStatsQuery {
 class PeerConnectionImpl MOZ_FINAL : public nsISupports,
 #ifdef MOZILLA_INTERNAL_API
                                      public mozilla::DataChannelConnection::DataConnectionListener,
                                      public nsNSSShutDownObject,
                                      public DOMMediaStream::PrincipalChangeObserver,
 #endif
                                      public sigslot::has_slots<>
 {
-  class Internal; // Avoid exposing c includes to bindings
+  struct Internal; // Avoid exposing c includes to bindings
 
 public:
   PeerConnectionImpl(const mozilla::dom::GlobalObject* aGlobal = nullptr);
   virtual ~PeerConnectionImpl();
 
   enum Error {
     kNoError                          = 0,
     kInvalidConstraintsType           = 1,
--- a/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.h
+++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.h
@@ -32,18 +32,18 @@
 #endif
 
 class nsIPrincipal;
 
 namespace mozilla {
 class DataChannel;
 class PeerIdentity;
 namespace dom {
-class RTCInboundRTPStreamStats;
-class RTCOutboundRTPStreamStats;
+struct RTCInboundRTPStreamStats;
+struct RTCOutboundRTPStreamStats;
 }
 }
 
 #include "nricectx.h"
 #include "nriceresolver.h"
 #include "nricemediastream.h"
 #include "MediaPipeline.h"
 
--- a/netwerk/base/src/BackgroundFileSaver.h
+++ b/netwerk/base/src/BackgroundFileSaver.h
@@ -20,17 +20,17 @@
 #include "nsIBackgroundFileSaver.h"
 #include "nsIStreamListener.h"
 #include "nsStreamUtils.h"
 #include "ScopedNSSTypes.h"
 
 class nsIAsyncInputStream;
 class nsIThread;
 class nsIX509CertList;
-class PRLogModuleInfo;
+struct PRLogModuleInfo;
 
 namespace mozilla {
 namespace net {
 
 class DigestOutputStream;
 
 ////////////////////////////////////////////////////////////////////////////////
 //// BackgroundFileSaver
--- a/toolkit/components/downloads/ApplicationReputation.h
+++ b/toolkit/components/downloads/ApplicationReputation.h
@@ -13,17 +13,17 @@
 #include "nsISupports.h"
 
 #include "nsCOMPtr.h"
 #include "nsString.h"
 
 class nsIRequest;
 class PendingDBLookup;
 class PendingLookup;
-class PRLogModuleInfo;
+struct PRLogModuleInfo;
 
 class ApplicationReputationService MOZ_FINAL :
   public nsIApplicationReputationService {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIAPPLICATIONREPUTATIONSERVICE
 
 public:
--- a/tools/profiler/platform.h
+++ b/tools/profiler/platform.h
@@ -244,17 +244,17 @@ void set_tls_stack_top(void* stackTop);
 
 // ----------------------------------------------------------------------------
 // Sampler
 //
 // A sampler periodically samples the state of the VM and optionally
 // (if used for profiling) the program counter and stack pointer for
 // the thread that created it.
 
-class PseudoStack;
+struct PseudoStack;
 class ThreadProfile;
 
 // TickSample captures the information collected for each sample.
 class TickSample {
  public:
   TickSample()
       :
         pc(NULL),
--- a/widget/nsIRollupListener.h
+++ b/widget/nsIRollupListener.h
@@ -6,17 +6,17 @@
 
 #ifndef __nsIRollupListener_h__
 #define __nsIRollupListener_h__
 
 #include "nsTArray.h"
 
 class nsIContent;
 class nsIWidget;
-class nsIntPoint;
+struct nsIntPoint;
 
 class nsIRollupListener {
  public: 
 
   /**
    * Notifies the object to rollup, optionally returning the node that
    * was just rolled up.
    *
--- a/widget/xpwidgets/PuppetWidget.h
+++ b/widget/xpwidgets/PuppetWidget.h
@@ -30,17 +30,17 @@ class gfxASurface;
 namespace mozilla {
 
 namespace dom {
 class TabChild;
 }
 
 namespace widget {
 
-class AutoCacheNativeKeyCommands;
+struct AutoCacheNativeKeyCommands;
 
 class PuppetWidget : public nsBaseWidget, public nsSupportsWeakReference
 {
   typedef mozilla::dom::TabChild TabChild;
   typedef mozilla::gfx::DrawTarget DrawTarget;
   typedef nsBaseWidget Base;
 
   // The width and height of the "widget" are clamped to this.
@@ -136,17 +136,17 @@ public:
   { return NS_ERROR_UNEXPECTED; }
 
   NS_IMETHOD_(bool)
   ExecuteNativeKeyBinding(NativeKeyBindingsType aType,
                           const mozilla::WidgetKeyboardEvent& aEvent,
                           DoCommandCallback aCallback,
                           void* aCallbackData) MOZ_OVERRIDE;
 
-  friend class AutoCacheNativeKeyCommands;
+  friend struct AutoCacheNativeKeyCommands;
 
   //
   // nsBaseWidget methods we override
   //
 
   // Documents loaded in child processes are always subdocuments of
   // other docs in an ancestor process.  To ensure that the
   // backgrounds of those documents are painted like those of
--- a/xpcom/base/CycleCollectedJSRuntime.h
+++ b/xpcom/base/CycleCollectedJSRuntime.h
@@ -15,17 +15,17 @@
 #include "nsDataHashtable.h"
 #include "nsHashKeys.h"
 #include "nsTArray.h"
 
 class nsCycleCollectionNoteRootCallback;
 class nsIException;
 
 namespace js {
-class Class;
+struct Class;
 }
 
 namespace mozilla {
 
 class JSGCThingParticipant: public nsCycleCollectionParticipant
 {
 public:
   NS_IMETHOD_(void) Root(void* aPtr)
--- a/xpcom/reflect/xptinfo/public/XPTInterfaceInfoManager.h
+++ b/xpcom/reflect/xptinfo/public/XPTInterfaceInfoManager.h
@@ -12,18 +12,18 @@
 
 #include "mozilla/MemoryReporting.h"
 #include "mozilla/Mutex.h"
 #include "mozilla/ReentrantMonitor.h"
 #include "nsDataHashtable.h"
 
 template<typename T> class nsCOMArray;
 class nsIMemoryReporter;
-class XPTHeader;
-class XPTInterfaceDirectoryEntry;
+struct XPTHeader;
+struct XPTInterfaceDirectoryEntry;
 class xptiInterfaceEntry;
 class xptiInterfaceInfo;
 class xptiTypelibGuts;
 
 namespace mozilla {
 
 class XPTInterfaceInfoManager MOZ_FINAL
     : public nsIInterfaceInfoManager