bug 1047696 - mark a number of classes MOZ_FINAL to get compilers to devirtualize more r=froydnj
authorTrevor Saunders <trev.saunders@gmail.com>
Tue, 05 Aug 2014 13:33:55 -0400
changeset 201106 3bc727b5027c0caa433cdc83c7e6c962e6083890
parent 201105 6ffbc0815d0846c6c90a3854a24bcb4a1f265eb7
child 201107 2f5bca505197795a2c20735aab54a079859cdf94
push id1
push userroot
push dateMon, 20 Oct 2014 17:29:22 +0000
reviewersfroydnj
bugs1047696
milestone34.0a1
bug 1047696 - mark a number of classes MOZ_FINAL to get compilers to devirtualize more r=froydnj
accessible/base/AccCollector.h
accessible/base/NotificationController.h
accessible/base/nsAccessibilityService.h
accessible/generic/OuterDocAccessible.h
accessible/html/HTMLFormControlAccessible.h
accessible/html/HTMLImageMapAccessible.h
accessible/html/HTMLSelectAccessible.h
accessible/xul/XULFormControlAccessible.h
accessible/xul/XULTreeGridAccessible.h
caps/nsNullPrincipal.h
caps/nsPrincipal.h
caps/nsScriptSecurityManager.h
caps/nsSystemPrincipal.h
content/base/public/nsNameSpaceManager.h
content/base/src/WebSocket.h
content/base/src/nsXMLHttpRequest.h
content/html/content/src/HTMLOptionsCollection.h
content/media/ogg/OggReader.h
content/svg/content/src/SVGMotionSMILAnimationFunction.h
docshell/base/nsDocShell.h
docshell/shistory/src/nsSHistory.h
dom/base/Navigator.h
dom/canvas/CanvasRenderingContext2D.h
dom/indexedDB/IDBDatabase.h
dom/ipc/ContentParent.h
dom/ipc/TabChild.h
dom/plugins/base/nsPluginInstanceOwner.h
dom/src/geolocation/nsGeolocation.cpp
editor/composer/nsEditorSpellCheck.h
editor/libeditor/nsHTMLEditor.h
editor/txmgr/nsTransactionItem.h
editor/txmgr/nsTransactionManager.h
embedding/browser/nsWebBrowser.h
gfx/gl/GLTextureImage.h
gfx/gl/TextureImageEGL.h
gfx/layers/ImageContainer.h
gfx/layers/basic/BasicLayers.h
gfx/layers/client/ClientLayerManager.h
gfx/layers/client/ContentClient.h
gfx/layers/composite/LayerManagerComposite.h
gfx/layers/ipc/CompositorParent.h
gfx/layers/ipc/ImageBridgeParent.h
gfx/layers/opengl/TextureHostOGL.h
gfx/src/gfxCrashReporterUtils.cpp
gfx/thebes/gfxXlibSurface.h
image/decoders/icon/nsIconURI.h
image/src/RasterImage.h
image/src/SurfaceCache.cpp
image/src/VectorImage.h
image/src/imgLoader.h
image/src/imgRequest.h
image/src/imgTools.h
js/xpconnect/src/XPCComponents.cpp
layout/base/nsCaret.h
layout/base/nsDisplayList.h
layout/base/nsPresShell.h
layout/base/nsRefreshDriver.cpp
layout/forms/nsComboboxControlFrame.cpp
layout/forms/nsComboboxControlFrame.h
layout/forms/nsListControlFrame.h
layout/forms/nsTextControlFrame.h
layout/generic/ScrollbarActivity.h
layout/generic/Selection.h
layout/generic/nsBulletFrame.cpp
layout/generic/nsBulletFrame.h
layout/generic/nsCanvasFrame.h
layout/generic/nsColumnSetFrame.h
layout/generic/nsGfxScrollFrame.h
layout/generic/nsImageMap.h
layout/generic/nsPageFrame.h
layout/generic/nsSelection.cpp
layout/generic/nsTextRunTransformations.h
layout/inspector/inCSSValueSearch.h
layout/inspector/inDOMUtils.h
layout/inspector/inFlasher.h
layout/mathml/nsMathMLmfencedFrame.h
layout/style/CSSStyleSheet.cpp
layout/style/StyleRule.h
layout/style/nsCSSRules.h
layout/svg/SVGTextFrame.h
layout/svg/nsSVGEffects.h
layout/svg/nsSVGOuterSVGFrame.h
layout/tables/nsTableCellFrame.h
layout/tables/nsTableColGroupFrame.h
layout/tables/nsTableRowGroupFrame.h
layout/xul/grid/nsGridLayout2.h
layout/xul/grid/nsGridRowLeafLayout.h
layout/xul/nsImageBoxFrame.h
layout/xul/nsListBoxBodyFrame.cpp
layout/xul/nsListBoxBodyFrame.h
layout/xul/nsListBoxObject.cpp
layout/xul/nsMenuBarFrame.h
layout/xul/nsMenuBarListener.h
layout/xul/nsMenuFrame.h
layout/xul/nsMenuPopupFrame.h
layout/xul/nsRepeatService.h
layout/xul/nsScrollBoxObject.cpp
layout/xul/nsSliderFrame.h
layout/xul/nsSplitterFrame.cpp
netwerk/base/src/nsSocketTransportService2.h
netwerk/cache/nsDiskCacheDeviceSQL.h
netwerk/cache2/CacheEntry.h
netwerk/protocol/http/HttpChannelChild.h
netwerk/protocol/http/nsHttpChannel.h
netwerk/protocol/http/nsHttpConnection.h
netwerk/protocol/http/nsHttpHandler.h
netwerk/protocol/http/nsHttpPipeline.h
netwerk/protocol/http/nsHttpTransaction.h
parser/html/nsHtml5TreeOpExecutor.h
parser/htmlparser/src/nsParser.h
security/manager/ssl/src/nsNSSCertificate.h
security/manager/ssl/src/nsNSSComponent.h
toolkit/components/autocomplete/nsAutoCompleteController.h
toolkit/components/downloads/nsDownloadManager.h
widget/xpwidgets/GfxInfoX11.h
widget/xpwidgets/PuppetWidget.h
xpcom/base/nsCycleCollector.cpp
xpcom/base/nsMemoryReporterManager.h
xpcom/io/nsBinaryStream.h
xpfe/appshell/nsContentTreeOwner.h
xpfe/components/directory/nsDirectoryViewer.h
--- a/accessible/base/AccCollector.h
+++ b/accessible/base/AccCollector.h
@@ -66,17 +66,17 @@ private:
   AccCollector(const AccCollector&);
   AccCollector& operator =(const AccCollector&);
 };
 
 /**
  * Collect embedded objects. Provide quick access to accessible by index and
  * vice versa.
  */
-class EmbeddedObjCollector : public AccCollector
+class EmbeddedObjCollector MOZ_FINAL : public AccCollector
 {
 public:
   virtual ~EmbeddedObjCollector() { }
 
 public:
   virtual int32_t GetIndexAt(Accessible* aAccessible);
 
 protected:
--- a/accessible/base/NotificationController.h
+++ b/accessible/base/NotificationController.h
@@ -80,18 +80,18 @@ private:
   Class* mInstance;
   Callback mCallback;
   nsRefPtr<Arg> mArg;
 };
 
 /**
  * Used to process notifications from core for the document accessible.
  */
-class NotificationController : public EventQueue,
-                               public nsARefreshObserver
+class NotificationController MOZ_FINAL : public EventQueue,
+                                         public nsARefreshObserver
 {
 public:
   NotificationController(DocAccessible* aDocument, nsIPresShell* aPresShell);
 
   NS_IMETHOD_(MozExternalRefCountType) AddRef(void);
   NS_IMETHOD_(MozExternalRefCountType) Release(void);
 
   NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(NotificationController)
--- a/accessible/base/nsAccessibilityService.h
+++ b/accessible/base/nsAccessibilityService.h
@@ -36,21 +36,21 @@ SelectionManager* SelectionMgr();
 /**
  * Returns the application accessible.
  */
 ApplicationAccessible* ApplicationAcc();
 
 } // namespace a11y
 } // namespace mozilla
 
-class nsAccessibilityService : public mozilla::a11y::DocManager,
-                               public mozilla::a11y::FocusManager,
-                               public mozilla::a11y::SelectionManager,
-                               public nsIAccessibilityService,
-                               public nsIObserver
+class nsAccessibilityService MOZ_FINAL : public mozilla::a11y::DocManager,
+                                         public mozilla::a11y::FocusManager,
+                                         public mozilla::a11y::SelectionManager,
+                                         public nsIAccessibilityService,
+                                         public nsIObserver
 {
 public:
   typedef mozilla::a11y::Accessible Accessible;
   typedef mozilla::a11y::DocAccessible DocAccessible;
 
 protected:
   virtual ~nsAccessibilityService();
 
--- a/accessible/generic/OuterDocAccessible.h
+++ b/accessible/generic/OuterDocAccessible.h
@@ -15,17 +15,17 @@ namespace a11y {
  * Used for <browser>, <frame>, <iframe>, <page> or editor> elements.
  * 
  * In these variable names, "outer" relates to the OuterDocAccessible as
  * opposed to the DocAccessibleWrap which is "inner". The outer node is
  * a something like tags listed above, whereas the inner node corresponds to
  * the inner document root.
  */
 
-class OuterDocAccessible : public AccessibleWrap
+class OuterDocAccessible MOZ_FINAL : public AccessibleWrap
 {
 public:
   OuterDocAccessible(nsIContent* aContent, DocAccessible* aDoc);
 
   NS_DECL_ISUPPORTS_INHERITED
 
   // nsIAccessible
   NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
--- a/accessible/html/HTMLFormControlAccessible.h
+++ b/accessible/html/HTMLFormControlAccessible.h
@@ -104,17 +104,17 @@ protected:
   virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
 };
 
 
 /**
  * Accessible for HTML input@type="text", input@type="password", textarea and
  * other HTML text controls.
  */
-class HTMLTextFieldAccessible : public HyperTextAccessibleWrap
+class HTMLTextFieldAccessible MOZ_FINAL : public HyperTextAccessibleWrap
 {
 
 public:
   enum { eAction_Click = 0 };
 
   HTMLTextFieldAccessible(nsIContent* aContent, DocAccessible* aDoc);
 
   NS_DECL_ISUPPORTS_INHERITED
--- a/accessible/html/HTMLImageMapAccessible.h
+++ b/accessible/html/HTMLImageMapAccessible.h
@@ -11,17 +11,17 @@
 #include "nsIDOMHTMLMapElement.h"
 
 namespace mozilla {
 namespace a11y {
 
 /**
  * Used for HTML image maps.
  */
-class HTMLImageMapAccessible : public ImageAccessibleWrap
+class HTMLImageMapAccessible MOZ_FINAL : public ImageAccessibleWrap
 {
 public:
   HTMLImageMapAccessible(nsIContent* aContent, DocAccessible* aDoc);
 
   // nsISupports and cycle collector
   NS_DECL_ISUPPORTS_INHERITED
 
   // Accessible
@@ -47,17 +47,17 @@ protected:
 
   // Accessible
   virtual void CacheChildren();
 };
 
 /**
  * Accessible for image map areas - must be child of image.
  */
-class HTMLAreaAccessible : public HTMLLinkAccessible
+class HTMLAreaAccessible MOZ_FINAL : public HTMLLinkAccessible
 {
 public:
 
   HTMLAreaAccessible(nsIContent* aContent, DocAccessible* aDoc);
 
   // Accessible
   virtual void Description(nsString& aDescription);
   virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY,
--- a/accessible/html/HTMLSelectAccessible.h
+++ b/accessible/html/HTMLSelectAccessible.h
@@ -158,17 +158,17 @@ public:
 /**  Finally, the Combobox widgets                         */
 /** ------------------------------------------------------ */
 
 class HTMLComboboxListAccessible;
 
 /*
  * A class the represents the HTML Combobox widget.
  */
-class HTMLComboboxAccessible : public AccessibleWrap
+class HTMLComboboxAccessible MOZ_FINAL : public AccessibleWrap
 {
 public:
   enum { eAction_Click = 0 };
 
   HTMLComboboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
   virtual ~HTMLComboboxAccessible() {}
 
   // nsIAccessible
--- a/accessible/xul/XULFormControlAccessible.h
+++ b/accessible/xul/XULFormControlAccessible.h
@@ -105,17 +105,17 @@ public:
 
 private:
   bool DropmarkerOpen(bool aToggleOpen);
 };
 
 /**
  * Used for XUL groupbox element.
  */
-class XULGroupboxAccessible : public AccessibleWrap
+class XULGroupboxAccessible MOZ_FINAL : public AccessibleWrap
 {
 public:
   XULGroupboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
 
   // Accessible
   virtual mozilla::a11y::role NativeRole();
   virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
 
--- a/accessible/xul/XULTreeGridAccessible.h
+++ b/accessible/xul/XULTreeGridAccessible.h
@@ -67,17 +67,17 @@ protected:
     CreateTreeItemAccessible(int32_t aRow) const MOZ_OVERRIDE;
 };
 
 
 /**
  * Represents accessible for XUL tree item in the case when XUL tree has
  * multiple columns.
  */
-class XULTreeGridRowAccessible : public XULTreeItemAccessibleBase
+class XULTreeGridRowAccessible MOZ_FINAL : public XULTreeItemAccessibleBase
 {
 public:
   using Accessible::GetChildAt;
 
   XULTreeGridRowAccessible(nsIContent* aContent, DocAccessible* aDoc,
                            Accessible* aParent, nsITreeBoxObject* aTree,
                            nsITreeView* aTreeView, int32_t aRow);
 
--- a/caps/nsNullPrincipal.h
+++ b/caps/nsNullPrincipal.h
@@ -22,17 +22,17 @@ class nsIURI;
 
 #define NS_NULLPRINCIPAL_CID \
 { 0xa0bd8b42, 0xf6bf, 0x4fb9, \
   { 0x93, 0x42, 0x90, 0xbf, 0xc9, 0xb7, 0xa1, 0xab } }
 #define NS_NULLPRINCIPAL_CONTRACTID "@mozilla.org/nullprincipal;1"
 
 #define NS_NULLPRINCIPAL_SCHEME "moz-nullprincipal"
 
-class nsNullPrincipal : public nsJSPrincipals
+class nsNullPrincipal MOZ_FINAL : public nsJSPrincipals
 {
 public:
   nsNullPrincipal();
   
   // Our refcount is managed by nsJSPrincipals.  Use this macro to avoid an
   // extra refcount member.
 
   // FIXME: bug 327245 -- I sorta wish there were a clean way to share the
--- a/caps/nsPrincipal.h
+++ b/caps/nsPrincipal.h
@@ -39,17 +39,17 @@ protected:
 
 #ifdef DEBUG
   virtual void dumpImpl() = 0;
 #endif
 
   nsCOMPtr<nsIContentSecurityPolicy> mCSP;
 };
 
-class nsPrincipal : public nsBasePrincipal
+class nsPrincipal MOZ_FINAL : public nsBasePrincipal
 {
 public:
   NS_DECL_ISUPPORTS_INHERITED
   NS_DECL_NSISERIALIZABLE
   NS_IMETHOD Equals(nsIPrincipal* other, bool* _retval);
   NS_IMETHOD EqualsConsideringDomain(nsIPrincipal* other, bool* _retval);
   NS_IMETHOD GetHashValue(uint32_t* aHashValue);
   NS_IMETHOD GetURI(nsIURI** aURI);
--- a/caps/nsScriptSecurityManager.h
+++ b/caps/nsScriptSecurityManager.h
@@ -27,19 +27,19 @@ class ClassInfoData;
 
 /////////////////////////////
 // nsScriptSecurityManager //
 /////////////////////////////
 #define NS_SCRIPTSECURITYMANAGER_CID \
 { 0x7ee2a4c0, 0x4b93, 0x17d3, \
 { 0xba, 0x18, 0x00, 0x60, 0xb0, 0xf1, 0x99, 0xa2 }}
 
-class nsScriptSecurityManager : public nsIScriptSecurityManager,
-                                public nsIChannelEventSink,
-                                public nsIObserver
+class nsScriptSecurityManager MOZ_FINAL : public nsIScriptSecurityManager,
+                                          public nsIChannelEventSink,
+                                          public nsIObserver
 {
 public:
     static void Shutdown();
 
     NS_DEFINE_STATIC_CID_ACCESSOR(NS_SCRIPTSECURITYMANAGER_CID)
 
     NS_DECL_ISUPPORTS
     NS_DECL_NSISCRIPTSECURITYMANAGER
--- a/caps/nsSystemPrincipal.h
+++ b/caps/nsSystemPrincipal.h
@@ -12,17 +12,17 @@
 #include "nsJSPrincipals.h"
 
 #define NS_SYSTEMPRINCIPAL_CID \
 { 0x4a6212db, 0xaccb, 0x11d3, \
 { 0xb7, 0x65, 0x0, 0x60, 0xb0, 0xb6, 0xce, 0xcb }}
 #define NS_SYSTEMPRINCIPAL_CONTRACTID "@mozilla.org/systemprincipal;1"
 
 
-class nsSystemPrincipal : public nsJSPrincipals
+class nsSystemPrincipal MOZ_FINAL : public nsJSPrincipals
 {
 public:
     // Our refcount is managed by nsJSPrincipals.  Use this macro to avoid
     // an extra refcount member.
     NS_DECL_ISUPPORTS_INHERITED
     NS_DECL_NSIPRINCIPAL
     NS_DECL_NSISERIALIZABLE
 
--- a/content/base/public/nsNameSpaceManager.h
+++ b/content/base/public/nsNameSpaceManager.h
@@ -61,17 +61,17 @@ private:
  * consistent accross the app. NameSpace IDs are only consistent at runtime
  * ie: they are not guaranteed to be consistent accross app sessions.
  *
  * The nsNameSpaceManager needs to have a live reference for as long as
  * the NameSpace IDs are needed.
  *
  */
 
-class nsNameSpaceManager
+class nsNameSpaceManager MOZ_FINAL
 {
 public:
   virtual ~nsNameSpaceManager() {}
 
   virtual nsresult RegisterNameSpace(const nsAString& aURI,
                                      int32_t& aNameSpaceID);
 
   virtual nsresult GetNameSpaceURI(int32_t aNameSpaceID, nsAString& aURI);
--- a/content/base/src/WebSocket.h
+++ b/content/base/src/WebSocket.h
@@ -27,22 +27,22 @@
 #include "nsWrapperCache.h"
 
 #define DEFAULT_WS_SCHEME_PORT  80
 #define DEFAULT_WSS_SCHEME_PORT 443
 
 namespace mozilla {
 namespace dom {
 
-class WebSocket : public DOMEventTargetHelper,
-                  public nsIInterfaceRequestor,
-                  public nsIWebSocketListener,
-                  public nsIObserver,
-                  public nsSupportsWeakReference,
-                  public nsIRequest
+class WebSocket MOZ_FINAL : public DOMEventTargetHelper,
+                            public nsIInterfaceRequestor,
+                            public nsIWebSocketListener,
+                            public nsIObserver,
+                            public nsSupportsWeakReference,
+                            public nsIRequest
 {
 friend class CallDispatchConnectionCloseEvents;
 friend class nsAutoCloseWS;
 
 public:
   enum {
     CONNECTING = 0,
     OPEN       = 1,
--- a/content/base/src/nsXMLHttpRequest.h
+++ b/content/base/src/nsXMLHttpRequest.h
@@ -174,26 +174,26 @@ public:
 private:
   virtual ~nsXMLHttpRequestUpload() {}
 };
 
 class nsXMLHttpRequestXPCOMifier;
 
 // Make sure that any non-DOM interfaces added here are also added to
 // nsXMLHttpRequestXPCOMifier.
-class nsXMLHttpRequest : public nsXHREventTarget,
-                         public nsIXMLHttpRequest,
-                         public nsIJSXMLHttpRequest,
-                         public nsIStreamListener,
-                         public nsIChannelEventSink,
-                         public nsIProgressEventSink,
-                         public nsIInterfaceRequestor,
-                         public nsSupportsWeakReference,
-                         public nsITimerCallback,
-                         public nsISizeOfEventTarget
+class nsXMLHttpRequest MOZ_FINAL : public nsXHREventTarget,
+                                   public nsIXMLHttpRequest,
+                                   public nsIJSXMLHttpRequest,
+                                   public nsIStreamListener,
+                                   public nsIChannelEventSink,
+                                   public nsIProgressEventSink,
+                                   public nsIInterfaceRequestor,
+                                   public nsSupportsWeakReference,
+                                   public nsITimerCallback,
+                                   public nsISizeOfEventTarget
 {
   friend class nsXHRParseEndListener;
   friend class nsXMLHttpRequestXPCOMifier;
 
 public:
   nsXMLHttpRequest();
 
   virtual JSObject* WrapObject(JSContext *cx) MOZ_OVERRIDE
--- a/content/html/content/src/HTMLOptionsCollection.h
+++ b/content/html/content/src/HTMLOptionsCollection.h
@@ -24,19 +24,19 @@ namespace mozilla {
 namespace dom {
 
 class HTMLSelectElement;
 
 /**
  * The collection of options in the select (what you get back when you do
  * select.options in DOM)
  */
-class HTMLOptionsCollection : public nsIHTMLCollection
-                            , public nsIDOMHTMLOptionsCollection
-                            , public nsWrapperCache
+class HTMLOptionsCollection MOZ_FINAL : public nsIHTMLCollection
+                                      , public nsIDOMHTMLOptionsCollection
+                                      , public nsWrapperCache
 {
   typedef HTMLOptionElementOrHTMLOptGroupElement HTMLOptionOrOptGroupElement;
 public:
   HTMLOptionsCollection(HTMLSelectElement* aSelect);
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
 
   // nsWrapperCache
--- a/content/media/ogg/OggReader.h
+++ b/content/media/ogg/OggReader.h
@@ -40,17 +40,17 @@ class OggCodecStore
   private:
     // Maps Ogg serialnos to OggStreams.
     nsClassHashtable<nsUint32HashKey, OggCodecState> mCodecStates;
 
     // Protects the |mCodecStates| and the |mKnownStreams| members.
     Monitor mMonitor;
 };
 
-class OggReader : public MediaDecoderReader
+class OggReader MOZ_FINAL : public MediaDecoderReader
 {
 public:
   OggReader(AbstractMediaDecoder* aDecoder);
 
 protected:
   ~OggReader();
 
 public:
--- a/content/svg/content/src/SVGMotionSMILAnimationFunction.h
+++ b/content/svg/content/src/SVGMotionSMILAnimationFunction.h
@@ -26,17 +26,17 @@ class SVGMPathElement;
 }
 
 //----------------------------------------------------------------------
 // SVGMotionSMILAnimationFunction
 //
 // Subclass of nsSMILAnimationFunction to support a few extra features offered
 // by the <animateMotion> element.
 //
-class SVGMotionSMILAnimationFunction : public nsSMILAnimationFunction
+class SVGMotionSMILAnimationFunction MOZ_FINAL : public nsSMILAnimationFunction
 {
   typedef mozilla::gfx::Path Path;
 
 public:
   SVGMotionSMILAnimationFunction();
   virtual bool SetAttr(nsIAtom* aAttribute,
                        const nsAString& aValue,
                        nsAttrValue& aResult,
--- a/docshell/base/nsDocShell.h
+++ b/docshell/base/nsDocShell.h
@@ -118,34 +118,34 @@ typedef enum {
     eCharsetReloadRequested,
     eCharsetReloadStopOrigional
 } eCharsetReloadState;
 
 //*****************************************************************************
 //***    nsDocShell
 //*****************************************************************************
 
-class nsDocShell : public nsDocLoader,
-                   public nsIDocShell,
-                   public nsIWebNavigation,
-                   public nsIBaseWindow, 
-                   public nsIScrollable, 
-                   public nsITextScroll, 
-                   public nsIDocCharset, 
-                   public nsIContentViewerContainer,
-                   public nsIRefreshURI,
-                   public nsIWebProgressListener,
-                   public nsIWebPageDescriptor,
-                   public nsIAuthPromptProvider,
-                   public nsILoadContext,
-                   public nsIWebShellServices,
-                   public nsILinkHandler,
-                   public nsIClipboardCommands,
-                   public nsIDOMStorageManager,
-                   public mozilla::SupportsWeakPtr<nsDocShell>
+class nsDocShell MOZ_FINAL : public nsDocLoader,
+                             public nsIDocShell,
+                             public nsIWebNavigation,
+                             public nsIBaseWindow,
+                             public nsIScrollable,
+                             public nsITextScroll,
+                             public nsIDocCharset,
+                             public nsIContentViewerContainer,
+                             public nsIRefreshURI,
+                             public nsIWebProgressListener,
+                             public nsIWebPageDescriptor,
+                             public nsIAuthPromptProvider,
+                             public nsILoadContext,
+                             public nsIWebShellServices,
+                             public nsILinkHandler,
+                             public nsIClipboardCommands,
+                             public nsIDOMStorageManager,
+                             public mozilla::SupportsWeakPtr<nsDocShell>
 {
     friend class nsDSURIContentListener;
 
 public:
     MOZ_DECLARE_REFCOUNTED_TYPENAME(nsDocShell)
     // Object Management
     nsDocShell();
 
--- a/docshell/shistory/src/nsSHistory.h
+++ b/docshell/shistory/src/nsSHistory.h
@@ -22,20 +22,20 @@
 #include "prclist.h"
 
 class nsIDocShell;
 class nsSHEnumerator;
 class nsSHistoryObserver;
 class nsISHEntry;
 class nsISHTransaction;
 
-class nsSHistory: public PRCList,
-                  public nsISHistory,
-                  public nsISHistoryInternal,
-                  public nsIWebNavigation
+class nsSHistory MOZ_FINAL : public PRCList,
+                             public nsISHistory,
+                             public nsISHistoryInternal,
+                             public nsIWebNavigation
 {
 public:
   nsSHistory();
 
   NS_DECL_ISUPPORTS
   NS_DECL_NSISHISTORY
   NS_DECL_NSISHISTORYINTERNAL
   NS_DECL_NSIWEBNAVIGATION
--- a/dom/base/Navigator.h
+++ b/dom/base/Navigator.h
@@ -100,19 +100,19 @@ class TimeManager;
 } // namespace time
 
 namespace system {
 #ifdef MOZ_AUDIO_CHANNEL_MANAGER
 class AudioChannelManager;
 #endif
 } // namespace system
 
-class Navigator : public nsIDOMNavigator
-                , public nsIMozNavigatorNetwork
-                , public nsWrapperCache
+class Navigator MOZ_FINAL : public nsIDOMNavigator
+                          , public nsIMozNavigatorNetwork
+                          , public nsWrapperCache
 {
 public:
   Navigator(nsPIDOMWindow *aInnerWindow);
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(Navigator,
                                                          nsIDOMNavigator)
   NS_DECL_NSIDOMNAVIGATOR
--- a/dom/canvas/CanvasRenderingContext2D.h
+++ b/dom/canvas/CanvasRenderingContext2D.h
@@ -107,17 +107,17 @@ private:
 };
 
 struct CanvasBidiProcessor;
 class CanvasRenderingContext2DUserData;
 
 /**
  ** CanvasRenderingContext2D
  **/
-class CanvasRenderingContext2D :
+class CanvasRenderingContext2D MOZ_FINAL :
   public nsICanvasRenderingContextInternal,
   public nsWrapperCache
 {
 typedef HTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement
   HTMLImageOrCanvasOrVideoElement;
 
   virtual ~CanvasRenderingContext2D();
 
--- a/dom/indexedDB/IDBDatabase.h
+++ b/dom/indexedDB/IDBDatabase.h
@@ -43,18 +43,18 @@ class IDBFactory;
 class IDBIndex;
 class IDBObjectStore;
 class IDBTransaction;
 class IndexedDatabaseManager;
 class IndexedDBDatabaseChild;
 class IndexedDBDatabaseParent;
 struct ObjectStoreInfoGuts;
 
-class IDBDatabase : public IDBWrapperCache,
-                    public nsIOfflineStorage
+class IDBDatabase MOZ_FINAL : public IDBWrapperCache,
+                              public nsIOfflineStorage
 {
   friend class AsyncConnectionHelper;
   friend class IndexedDatabaseManager;
   friend class IndexedDBDatabaseParent;
   friend class IndexedDBDatabaseChild;
 
 public:
   NS_DECL_ISUPPORTS_INHERITED
--- a/dom/ipc/ContentParent.h
+++ b/dom/ipc/ContentParent.h
@@ -60,21 +60,21 @@ class Element;
 class TabParent;
 class PStorageParent;
 class ClonedMessageData;
 class MemoryReport;
 class TabContext;
 class PFileDescriptorSetParent;
 class ContentBridgeParent;
 
-class ContentParent : public PContentParent
-                    , public nsIContentParent
-                    , public nsIObserver
-                    , public nsIDOMGeoPositionCallback
-                    , public mozilla::LinkedListElement<ContentParent>
+class ContentParent MOZ_FINAL : public PContentParent
+                              , public nsIContentParent
+                              , public nsIObserver
+                              , public nsIDOMGeoPositionCallback
+                              , public mozilla::LinkedListElement<ContentParent>
 {
     typedef mozilla::ipc::GeckoChildProcessHost GeckoChildProcessHost;
     typedef mozilla::ipc::OptionalURIParams OptionalURIParams;
     typedef mozilla::ipc::TestShellParent TestShellParent;
     typedef mozilla::ipc::URIParams URIParams;
     typedef mozilla::dom::ClonedMessageData ClonedMessageData;
 
 public:
--- a/dom/ipc/TabChild.h
+++ b/dom/ipc/TabChild.h
@@ -221,30 +221,30 @@ protected:
     CSSSize mOldViewportSize;
     bool mContentDocumentIsDisplayed;
     nsRefPtr<TabChildGlobal> mTabChildGlobal;
     ScreenIntSize mInnerSize;
     mozilla::layers::FrameMetrics mLastRootMetrics;
     mozilla::layout::ScrollingBehavior mScrolling;
 };
 
-class TabChild : public TabChildBase,
-                 public PBrowserChild,
-                 public nsIWebBrowserChrome2,
-                 public nsIEmbeddingSiteWindow,
-                 public nsIWebBrowserChromeFocus,
-                 public nsIInterfaceRequestor,
-                 public nsIWindowProvider,
-                 public nsIDOMEventListener,
-                 public nsIWebProgressListener,
-                 public nsSupportsWeakReference,
-                 public nsITabChild,
-                 public nsIObserver,
-                 public TabContext,
-                 public nsITooltipListener
+class TabChild MOZ_FINAL : public TabChildBase,
+                           public PBrowserChild,
+                           public nsIWebBrowserChrome2,
+                           public nsIEmbeddingSiteWindow,
+                           public nsIWebBrowserChromeFocus,
+                           public nsIInterfaceRequestor,
+                           public nsIWindowProvider,
+                           public nsIDOMEventListener,
+                           public nsIWebProgressListener,
+                           public nsSupportsWeakReference,
+                           public nsITabChild,
+                           public nsIObserver,
+                           public TabContext,
+                           public nsITooltipListener
 {
     typedef mozilla::dom::ClonedMessageData ClonedMessageData;
     typedef mozilla::layout::RenderFrameChild RenderFrameChild;
     typedef mozilla::layout::ScrollingBehavior ScrollingBehavior;
     typedef mozilla::layers::ActiveElementManager ActiveElementManager;
 
 public:
     static std::map<uint64_t, nsRefPtr<TabChild> >& NestedTabChildMap();
--- a/dom/plugins/base/nsPluginInstanceOwner.h
+++ b/dom/plugins/base/nsPluginInstanceOwner.h
@@ -39,20 +39,20 @@ struct MozPluginParameter;
 class gfxXlibSurface;
 #ifdef MOZ_WIDGET_QT
 #include "gfxQtNativeRenderer.h"
 #else
 #include "gfxXlibNativeRenderer.h"
 #endif
 #endif
 
-class nsPluginInstanceOwner : public nsIPluginInstanceOwner,
-                              public nsIDOMEventListener,
-                              public nsIPrivacyTransitionObserver,
-                              public nsSupportsWeakReference
+class nsPluginInstanceOwner MOZ_FINAL : public nsIPluginInstanceOwner,
+                                        public nsIDOMEventListener,
+                                        public nsIPrivacyTransitionObserver,
+                                        public nsSupportsWeakReference
 {
 public:
   nsPluginInstanceOwner();
   
   NS_DECL_ISUPPORTS
   NS_DECL_NSIPLUGININSTANCEOWNER
   NS_DECL_NSIPRIVACYTRANSITIONOBSERVER
   
--- a/dom/src/geolocation/nsGeolocation.cpp
+++ b/dom/src/geolocation/nsGeolocation.cpp
@@ -49,17 +49,17 @@ class nsIPrincipal;
 
 // The settings key.
 #define GEO_SETINGS_ENABLED          "geolocation.enabled"
 
 using mozilla::unused;          // <snicker>
 using namespace mozilla;
 using namespace mozilla::dom;
 
-class nsGeolocationRequest
+class nsGeolocationRequest MOZ_FINAL
  : public nsIContentPermissionRequest
  , public nsITimerCallback
  , public nsIGeolocationUpdate
 {
  public:
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_NSICONTENTPERMISSIONREQUEST
   NS_DECL_NSITIMERCALLBACK
--- a/editor/composer/nsEditorSpellCheck.h
+++ b/editor/composer/nsEditorSpellCheck.h
@@ -22,17 +22,17 @@ class nsITextServicesFilter;
 #define NS_EDITORSPELLCHECK_CID                     \
 { /* {75656ad9-bd13-4c5d-939a-ec6351eea0cc} */        \
     0x75656ad9, 0xbd13, 0x4c5d,                       \
     { 0x93, 0x9a, 0xec, 0x63, 0x51, 0xee, 0xa0, 0xcc }\
 }
 
 class DictionaryFetcher;
 
-class nsEditorSpellCheck : public nsIEditorSpellCheck
+class nsEditorSpellCheck MOZ_FINAL : public nsIEditorSpellCheck
 {
   friend class DictionaryFetcher;
 
 public:
   nsEditorSpellCheck();
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_CYCLE_COLLECTION_CLASS(nsEditorSpellCheck)
--- a/editor/libeditor/nsHTMLEditor.h
+++ b/editor/libeditor/nsHTMLEditor.h
@@ -58,25 +58,25 @@ namespace widget {
 struct IMEState;
 } // namespace widget
 } // namespace mozilla
 
 /**
  * The HTML editor implementation.<br>
  * Use to edit HTML document represented as a DOM tree. 
  */
-class nsHTMLEditor : public nsPlaintextEditor,
-                     public nsIHTMLEditor,
-                     public nsIHTMLObjectResizer,
-                     public nsIHTMLAbsPosEditor,
-                     public nsITableEditor,
-                     public nsIHTMLInlineTableEditor,
-                     public nsIEditorStyleSheets,
-                     public nsICSSLoaderObserver,
-                     public nsStubMutationObserver
+class nsHTMLEditor MOZ_FINAL : public nsPlaintextEditor,
+                               public nsIHTMLEditor,
+                               public nsIHTMLObjectResizer,
+                               public nsIHTMLAbsPosEditor,
+                               public nsITableEditor,
+                               public nsIHTMLInlineTableEditor,
+                               public nsIEditorStyleSheets,
+                               public nsICSSLoaderObserver,
+                               public nsStubMutationObserver
 {
   typedef enum {eNoOp, eReplaceParent=1, eInsertParent=2} BlockTransformationType;
 
 public:
 
   enum ResizingRequestID
   {
     kX      = 0,
--- a/editor/txmgr/nsTransactionItem.h
+++ b/editor/txmgr/nsTransactionItem.h
@@ -11,17 +11,17 @@
 #include "nsCycleCollectionParticipant.h"
 #include "nsISupportsImpl.h"
 #include "nscore.h"
 
 class nsITransaction;
 class nsTransactionManager;
 class nsTransactionStack;
 
-class nsTransactionItem
+class nsTransactionItem MOZ_FINAL
 {
   nsCOMArray<nsISupports>  mData;
   nsCOMPtr<nsITransaction> mTransaction;
   nsTransactionStack      *mUndoStack;
   nsTransactionStack      *mRedoStack;
 
 public:
 
--- a/editor/txmgr/nsTransactionManager.h
+++ b/editor/txmgr/nsTransactionManager.h
@@ -18,18 +18,18 @@
 
 class nsITransaction;
 class nsITransactionListener;
 class nsTransactionItem;
 
 /** implementation of a transaction manager object.
  *
  */
-class nsTransactionManager : public nsITransactionManager
-                           , public nsSupportsWeakReference
+class nsTransactionManager MOZ_FINAL : public nsITransactionManager
+                                     , public nsSupportsWeakReference
 {
 private:
 
   int32_t                mMaxTransactionCount;
   nsTransactionStack     mDoStack;
   nsTransactionStack     mUndoStack;
   nsTransactionStack     mRedoStack;
   nsCOMArray<nsITransactionListener> mListeners;
--- a/embedding/browser/nsWebBrowser.h
+++ b/embedding/browser/nsWebBrowser.h
@@ -67,28 +67,28 @@ public:
     nsIID mID;
 };
 
 //  {cda5863a-aa9c-411e-be49-ea0d525ab4b5} - 
 #define NS_WEBBROWSER_CID \
 {0xcda5863a, 0xaa9c, 0x411e, { 0xbe, 0x49, 0xea, 0x0d, 0x52, 0x5a, 0xb4, 0xb5 }}
 
 
-class nsWebBrowser : public nsIWebBrowser,
-                     public nsIWebNavigation,
-                     public nsIWebBrowserSetup,
-                     public nsIDocShellTreeItem,
-                     public nsIBaseWindow,
-                     public nsIScrollable, 
-                     public nsITextScroll, 
-                     public nsIInterfaceRequestor,
-                     public nsIWebBrowserPersist,
-                     public nsIWebBrowserFocus,
-                     public nsIWebProgressListener,
-                     public nsIWebBrowserStream,
+class nsWebBrowser MOZ_FINAL : public nsIWebBrowser,
+                               public nsIWebNavigation,
+                               public nsIWebBrowserSetup,
+                               public nsIDocShellTreeItem,
+                               public nsIBaseWindow,
+                               public nsIScrollable, 
+                               public nsITextScroll, 
+                               public nsIInterfaceRequestor,
+                               public nsIWebBrowserPersist,
+                               public nsIWebBrowserFocus,
+                               public nsIWebProgressListener,
+                               public nsIWebBrowserStream,
                      public nsIWidgetListener,
                      public nsSupportsWeakReference
 {
 friend class nsDocShellTreeOwner;
 public:
     nsWebBrowser();
 
     NS_DECL_ISUPPORTS
--- a/gfx/gl/GLTextureImage.h
+++ b/gfx/gl/GLTextureImage.h
@@ -307,17 +307,17 @@ protected:
     nsIntPoint mUpdateOffset;
 };
 
 /**
  * A container class that complements many sub TextureImages into a big TextureImage.
  * Aims to behave just like the real thing.
  */
 
-class TiledTextureImage
+class TiledTextureImage MOZ_FINAL
     : public TextureImage
 {
 public:
     TiledTextureImage(GLContext* aGL,
                       gfx::IntSize aSize,
                       TextureImage::ContentType,
                       TextureImage::Flags aFlags = TextureImage::NoFlags,
                       TextureImage::ImageFormat aImageFormat = gfxImageFormat::Unknown);
--- a/gfx/gl/TextureImageEGL.h
+++ b/gfx/gl/TextureImageEGL.h
@@ -6,17 +6,17 @@
 #ifndef TEXTUREIMAGEEGL_H_
 #define TEXTUREIMAGEEGL_H_
 
 #include "GLTextureImage.h"
 
 namespace mozilla {
 namespace gl {
 
-class TextureImageEGL
+class TextureImageEGL MOZ_FINAL
     : public TextureImage
 {
 public:
     TextureImageEGL(GLuint aTexture,
                     const nsIntSize& aSize,
                     GLenum aWrapMode,
                     ContentType aContentType,
                     GLContext* aContext,
--- a/gfx/layers/ImageContainer.h
+++ b/gfx/layers/ImageContainer.h
@@ -860,18 +860,18 @@ protected:
   nsRefPtr<BufferRecycleBin> mRecycleBin;
 };
 
 /**
  * Currently, the data in a CairoImage surface is treated as being in the
  * device output color space. This class is very simple as all backends
  * have to know about how to deal with drawing a cairo image.
  */
-class CairoImage : public Image,
-                   public ISharedImage {
+class CairoImage MOZ_FINAL : public Image,
+                             public ISharedImage {
 public:
   struct Data {
     gfx::IntSize mSize;
     RefPtr<gfx::SourceSurface> mSourceSurface;
   };
 
   /**
    * This can only be called on the main thread. It may add a reference
--- a/gfx/layers/basic/BasicLayers.h
+++ b/gfx/layers/basic/BasicLayers.h
@@ -36,17 +36,17 @@ class ReadbackProcessor;
 /**
  * This is a cairo/Thebes-only, main-thread-only implementation of layers.
  * 
  * In each transaction, the client sets up the layer tree and then during
  * the drawing phase, each ThebesLayer is painted directly into the target
  * context (with appropriate clipping and Push/PopGroups performed
  * between layers).
  */
-class BasicLayerManager :
+class BasicLayerManager MOZ_FINAL :
     public LayerManager
 {
 public:
   enum BasicLayerManagerType {
     BLM_WIDGET,
     BLM_OFFSCREEN,
     BLM_INACTIVE
   };
--- a/gfx/layers/client/ClientLayerManager.h
+++ b/gfx/layers/client/ClientLayerManager.h
@@ -33,17 +33,17 @@ namespace layers {
 
 class ClientThebesLayer;
 class CompositorChild;
 class ImageLayer;
 class PLayerChild;
 class TextureClientPool;
 class SimpleTextureClientPool;
 
-class ClientLayerManager : public LayerManager
+class ClientLayerManager MOZ_FINAL : public LayerManager
 {
   typedef nsTArray<nsRefPtr<Layer> > LayerRefArray;
 
 public:
   explicit ClientLayerManager(nsIWidget* aWidget);
 
 protected:
   virtual ~ClientLayerManager();
--- a/gfx/layers/client/ContentClient.h
+++ b/gfx/layers/client/ContentClient.h
@@ -118,18 +118,18 @@ public:
   {}
 
   virtual void Updated(const nsIntRegion& aRegionToDraw,
                        const nsIntRegion& aVisibleRegion,
                        bool aDidSelfCopy) = 0;
 };
 
 // thin wrapper around RotatedContentBuffer, for on-mtc
-class ContentClientBasic : public ContentClient
-                         , protected RotatedContentBuffer
+class ContentClientBasic MOZ_FINAL : public ContentClient
+                                   , protected RotatedContentBuffer
 {
 public:
   ContentClientBasic();
 
   typedef RotatedContentBuffer::PaintState PaintState;
   typedef RotatedContentBuffer::ContentType ContentType;
 
   virtual void Clear() { RotatedContentBuffer::Clear(); }
--- a/gfx/layers/composite/LayerManagerComposite.h
+++ b/gfx/layers/composite/LayerManagerComposite.h
@@ -61,17 +61,17 @@ class LayerComposite;
 class RefLayerComposite;
 class SurfaceDescriptor;
 class ThebesLayerComposite;
 class TiledLayerComposer;
 class TextRenderer;
 class CompositingRenderTarget;
 struct FPSState;
 
-class LayerManagerComposite : public LayerManager
+class LayerManagerComposite MOZ_FINAL : public LayerManager
 {
   typedef mozilla::gfx::DrawTarget DrawTarget;
   typedef mozilla::gfx::IntSize IntSize;
   typedef mozilla::gfx::SurfaceFormat SurfaceFormat;
 
 public:
   explicit LayerManagerComposite(Compositor* aCompositor);
   ~LayerManagerComposite();
--- a/gfx/layers/ipc/CompositorParent.h
+++ b/gfx/layers/ipc/CompositorParent.h
@@ -82,18 +82,18 @@ private:
   base::Thread* const mCompositorThread;
 
   static base::Thread* CreateCompositorThread();
   static void DestroyCompositorThread(base::Thread* aCompositorThread);
 
   friend class CompositorParent;
 };
 
-class CompositorParent : public PCompositorParent,
-                         public ShadowLayersManager
+class CompositorParent MOZ_FINAL : public PCompositorParent,
+                                   public ShadowLayersManager
 {
   NS_INLINE_DECL_THREADSAFE_REFCOUNTING_WITH_MAIN_THREAD_DESTRUCTION(CompositorParent)
 
 public:
   explicit CompositorParent(nsIWidget* aWidget,
                             bool aUseExternalSurfaceSize = false,
                             int aSurfaceWidth = -1, int aSurfaceHeight = -1);
 
--- a/gfx/layers/ipc/ImageBridgeParent.h
+++ b/gfx/layers/ipc/ImageBridgeParent.h
@@ -32,18 +32,18 @@ class Shmem;
 
 namespace layers {
 
 /**
  * ImageBridgeParent is the manager Protocol of ImageContainerParent.
  * It's purpose is mainly to setup the IPDL connection. Most of the
  * interesting stuff is in ImageContainerParent.
  */
-class ImageBridgeParent : public PImageBridgeParent,
-                          public CompositableParentManager
+class ImageBridgeParent MOZ_FINAL : public PImageBridgeParent,
+                                    public CompositableParentManager
 {
 public:
   typedef InfallibleTArray<CompositableOperation> EditArray;
   typedef InfallibleTArray<EditReply> EditReplyArray;
   typedef InfallibleTArray<AsyncChildMessageData> AsyncChildMessageArray;
 
   ImageBridgeParent(MessageLoop* aLoop, Transport* aTransport, ProcessId aChildProcessId);
   ~ImageBridgeParent();
--- a/gfx/layers/opengl/TextureHostOGL.h
+++ b/gfx/layers/opengl/TextureHostOGL.h
@@ -202,19 +202,19 @@ protected:
  * A TextureSource backed by a TextureImage.
  *
  * Depending on the underlying TextureImage, may support texture tiling, so
  * make sure to check AsBigImageIterator() and use the texture accordingly.
  *
  * This TextureSource can be used without a TextureHost and manage it's own
  * GL texture(s).
  */
-class TextureImageTextureSourceOGL : public DataTextureSource
-                                   , public TextureSourceOGL
-                                   , public BigImageIterator
+class TextureImageTextureSourceOGL MOZ_FINAL : public DataTextureSource
+                                             , public TextureSourceOGL
+                                             , public BigImageIterator
 {
 public:
   explicit TextureImageTextureSourceOGL(gl::GLContext* aGL,
                                         TextureFlags aFlags = TextureFlags::DEFAULT)
     : mGL(aGL)
     , mFlags(aFlags)
     , mIterating(false)
   {}
--- a/gfx/src/gfxCrashReporterUtils.cpp
+++ b/gfx/src/gfxCrashReporterUtils.cpp
@@ -29,17 +29,17 @@
 #include "nsTArray.h"                   // for nsTArray
 #include "nsThreadUtils.h"              // for NS_DispatchToMainThread, etc
 #include "nscore.h"                     // for NS_IMETHOD, NS_IMETHODIMP, etc
 
 namespace mozilla {
 
 static nsTArray<nsCString> *gFeaturesAlreadyReported = nullptr;
 
-class ObserverToDestroyFeaturesAlreadyReported : public nsIObserver
+class ObserverToDestroyFeaturesAlreadyReported MOZ_FINAL : public nsIObserver
 {
 
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIOBSERVER
 
   ObserverToDestroyFeaturesAlreadyReported() {}
 private:
--- a/gfx/thebes/gfxXlibSurface.h
+++ b/gfx/thebes/gfxXlibSurface.h
@@ -12,17 +12,17 @@
 #include <X11/Xlib.h>
 
 #if defined(GL_PROVIDER_GLX)
 #include "GLXLibrary.h"
 #endif
 
 #include "nsSize.h"
 
-class gfxXlibSurface : public gfxASurface {
+class gfxXlibSurface MOZ_FINAL : public gfxASurface {
 public:
     // construct a wrapper around the specified drawable with dpy/visual.
     // Will use XGetGeometry to query the window/pixmap size.
     gfxXlibSurface(Display *dpy, Drawable drawable, Visual *visual);
 
     // construct a wrapper around the specified drawable with dpy/visual,
     // and known width/height.
     gfxXlibSurface(Display *dpy, Drawable drawable, Visual *visual, const gfxIntSize& size);
--- a/image/decoders/icon/nsIconURI.h
+++ b/image/decoders/icon/nsIconURI.h
@@ -14,17 +14,17 @@
 #define NS_MOZICONURI_CID                            \
 {                                                    \
     0x43a88e0e,                                      \
     0x2d37,                                          \
     0x11d5,                                          \
     { 0x99, 0x7, 0x0, 0x10, 0x83, 0x1, 0xe, 0x9b }   \
 }
 
-class nsMozIconURI : public nsIMozIconURI
+class nsMozIconURI MOZ_FINAL : public nsIMozIconURI
 {
 public:    
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_NSIURI
   NS_DECL_NSIMOZICONURI
 
   // nsMozIconURI
   nsMozIconURI();
--- a/image/src/RasterImage.h
+++ b/image/src/RasterImage.h
@@ -130,21 +130,21 @@ class Image;
 }
 
 namespace image {
 
 class ScaleRequest;
 class Decoder;
 class FrameAnimator;
 
-class RasterImage : public ImageResource
-                  , public nsIProperties
-                  , public SupportsWeakPtr<RasterImage>
+class RasterImage MOZ_FINAL : public ImageResource
+                            , public nsIProperties
+                            , public SupportsWeakPtr<RasterImage>
 #ifdef DEBUG
-                  , public imgIContainerDebug
+                            , public imgIContainerDebug
 #endif
 {
   // (no public constructor - use ImageFactory)
   virtual ~RasterImage();
 
 public:
   MOZ_DECLARE_REFCOUNTED_TYPENAME(RasterImage)
   NS_DECL_THREADSAFE_ISUPPORTS
--- a/image/src/SurfaceCache.cpp
+++ b/image/src/SurfaceCache.cpp
@@ -202,17 +202,17 @@ private:
 
 /*
  * SurfaceCacheImpl is responsible for determining which surfaces will be cached
  * and managing the surface cache data structures. Rather than interact with
  * SurfaceCacheImpl directly, client code interacts with SurfaceCache, which
  * maintains high-level invariants and encapsulates the details of the surface
  * cache's implementation.
  */
-class SurfaceCacheImpl : public nsIMemoryReporter
+class SurfaceCacheImpl MOZ_FINAL : public nsIMemoryReporter
 {
 public:
   NS_DECL_ISUPPORTS
 
   SurfaceCacheImpl(uint32_t aSurfaceCacheExpirationTimeMS,
                    uint32_t aSurfaceCacheSize)
     : mExpirationTracker(MOZ_THIS_IN_INITIALIZER_LIST(),
                          aSurfaceCacheExpirationTimeMS)
--- a/image/src/VectorImage.h
+++ b/image/src/VectorImage.h
@@ -21,18 +21,18 @@ class ImageContainer;
 namespace image {
 
 struct SVGDrawingParameters;
 class  SVGDocumentWrapper;
 class  SVGRootRenderingObserver;
 class  SVGLoadEventListener;
 class  SVGParseCompleteListener;
 
-class VectorImage : public ImageResource,
-                    public nsIStreamListener
+class VectorImage MOZ_FINAL : public ImageResource,
+                              public nsIStreamListener
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIREQUESTOBSERVER
   NS_DECL_NSISTREAMLISTENER
   NS_DECL_IMGICONTAINER
 
   // (no public constructor - use ImageFactory)
--- a/image/src/imgLoader.h
+++ b/image/src/imgLoader.h
@@ -200,21 +200,21 @@ public:
   const_iterator end() const;
 
 private:
   queueContainer mQueue;
   bool mDirty;
   uint32_t mSize;
 };
 
-class imgLoader : public imgILoader,
-                  public nsIContentSniffer,
-                  public imgICache,
-                  public nsSupportsWeakReference,
-                  public nsIObserver
+class imgLoader MOZ_FINAL : public imgILoader,
+                            public nsIContentSniffer,
+                            public imgICache,
+                            public nsSupportsWeakReference,
+                            public nsIObserver
 {
   virtual ~imgLoader();
 
 public:
   typedef mozilla::image::ImageURL ImageURL;
   typedef nsRefPtrHashtable<nsCStringHashKey, imgCacheEntry> imgCacheTable;
 
   NS_DECL_ISUPPORTS
--- a/image/src/imgRequest.h
+++ b/image/src/imgRequest.h
@@ -35,21 +35,21 @@ class nsIURI;
 
 namespace mozilla {
 namespace image {
 class Image;
 class ImageURL;
 } // namespace image
 } // namespace mozilla
 
-class imgRequest : public nsIStreamListener,
-                   public nsIThreadRetargetableStreamListener,
-                   public nsIChannelEventSink,
-                   public nsIInterfaceRequestor,
-                   public nsIAsyncVerifyRedirectCallback
+class imgRequest MOZ_FINAL : public nsIStreamListener,
+                             public nsIThreadRetargetableStreamListener,
+                             public nsIChannelEventSink,
+                             public nsIInterfaceRequestor,
+                             public nsIAsyncVerifyRedirectCallback
 {
   virtual ~imgRequest();
 
 public:
   typedef mozilla::image::ImageURL ImageURL;
   explicit imgRequest(imgLoader* aLoader);
 
   NS_DECL_THREADSAFE_ISUPPORTS
--- a/image/src/imgTools.h
+++ b/image/src/imgTools.h
@@ -9,17 +9,17 @@
 #define NS_IMGTOOLS_CID \
 { /* 3d8fa16d-c9e1-4b50-bdef-2c7ae249967a */         \
      0x3d8fa16d,                                     \
      0xc9e1,                                         \
      0x4b50,                                         \
     {0xbd, 0xef, 0x2c, 0x7a, 0xe2, 0x49, 0x96, 0x7a} \
 }
 
-class imgTools : public imgITools
+class imgTools MOZ_FINAL : public imgITools
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_IMGITOOLS
 
   imgTools();
 
 private:
--- a/js/xpconnect/src/XPCComponents.cpp
+++ b/js/xpconnect/src/XPCComponents.cpp
@@ -90,17 +90,17 @@ xpc::CheckAccessList(const char16_t *wid
     return nullptr;
 }
 
 /***************************************************************************/
 /***************************************************************************/
 /***************************************************************************/
 
 
-class nsXPCComponents_Interfaces :
+class nsXPCComponents_Interfaces MOZ_FINAL :
             public nsIXPCComponents_Interfaces,
             public nsIXPCScriptable,
             public nsIClassInfo
 {
 public:
     // all the interface method declarations...
     NS_DECL_ISUPPORTS
     NS_DECL_NSIXPCCOMPONENTS_INTERFACES
@@ -341,17 +341,17 @@ nsXPCComponents_Interfaces::NewResolve(n
     }
     return NS_OK;
 }
 
 /***************************************************************************/
 /***************************************************************************/
 /***************************************************************************/
 
-class nsXPCComponents_InterfacesByID :
+class nsXPCComponents_InterfacesByID MOZ_FINAL :
             public nsIXPCComponents_InterfacesByID,
             public nsIXPCScriptable,
             public nsIClassInfo
 {
 public:
     // all the interface method declarations...
     NS_DECL_ISUPPORTS
     NS_DECL_NSIXPCCOMPONENTS_INTERFACESBYID
@@ -598,17 +598,17 @@ nsXPCComponents_InterfacesByID::NewResol
 }
 
 /***************************************************************************/
 /***************************************************************************/
 /***************************************************************************/
 
 
 
-class nsXPCComponents_Classes :
+class nsXPCComponents_Classes MOZ_FINAL :
   public nsIXPCComponents_Classes,
   public nsIXPCScriptable,
   public nsIClassInfo
 {
 public:
     // all the interface method declarations...
     NS_DECL_ISUPPORTS
     NS_DECL_NSIXPCCOMPONENTS_CLASSES
@@ -839,17 +839,17 @@ nsXPCComponents_Classes::NewResolve(nsIX
     }
     return NS_OK;
 }
 
 /***************************************************************************/
 /***************************************************************************/
 /***************************************************************************/
 
-class nsXPCComponents_ClassesByID :
+class nsXPCComponents_ClassesByID MOZ_FINAL :
   public nsIXPCComponents_ClassesByID,
   public nsIXPCScriptable,
   public nsIClassInfo
 {
 public:
     // all the interface method declarations...
     NS_DECL_ISUPPORTS
     NS_DECL_NSIXPCCOMPONENTS_CLASSESBYID
@@ -1102,17 +1102,17 @@ nsXPCComponents_ClassesByID::NewResolve(
 }
 
 
 /***************************************************************************/
 
 // Currently the possible results do not change at runtime, so they are only
 // cached once (unlike ContractIDs, CLSIDs, and IIDs)
 
-class nsXPCComponents_Results :
+class nsXPCComponents_Results MOZ_FINAL :
   public nsIXPCComponents_Results,
   public nsIXPCScriptable,
   public nsIClassInfo
 {
 public:
     // all the interface method declarations...
     NS_DECL_ISUPPORTS
     NS_DECL_NSIXPCCOMPONENTS_RESULTS
@@ -1322,17 +1322,17 @@ nsXPCComponents_Results::NewResolve(nsIX
         }
     }
     return NS_OK;
 }
 
 /***************************************************************************/
 // JavaScript Constructor for nsIJSID objects (Components.ID)
 
-class nsXPCComponents_ID :
+class nsXPCComponents_ID MOZ_FINAL :
   public nsIXPCComponents_ID,
   public nsIXPCScriptable,
   public nsIClassInfo
 {
 public:
     // all the interface method declarations...
     NS_DECL_ISUPPORTS
     NS_DECL_NSIXPCCOMPONENTS_ID
@@ -1539,17 +1539,17 @@ nsXPCComponents_ID::HasInstance(nsIXPCon
     if (bp)
         *bp = JSValIsInterfaceOfType(cx, val, NS_GET_IID(nsIJSID));
     return NS_OK;
 }
 
 /***************************************************************************/
 // JavaScript Constructor for nsIXPCException objects (Components.Exception)
 
-class nsXPCComponents_Exception :
+class nsXPCComponents_Exception MOZ_FINAL :
   public nsIXPCComponents_Exception,
   public nsIXPCScriptable,
   public nsIClassInfo
 {
 public:
     // all the interface method declarations...
     NS_DECL_ISUPPORTS
     NS_DECL_NSIXPCCOMPONENTS_EXCEPTION
@@ -2185,17 +2185,17 @@ nsXPCConstructor::CallOrConstruct(nsIXPC
     }
 
     return NS_OK;
 }
 
 /*******************************************************/
 // JavaScript Constructor for nsIXPCConstructor objects (Components.Constructor)
 
-class nsXPCComponents_Constructor :
+class nsXPCComponents_Constructor MOZ_FINAL :
   public nsIXPCComponents_Constructor,
   public nsIXPCScriptable,
   public nsIClassInfo
 {
 public:
     // all the interface method declarations...
     NS_DECL_ISUPPORTS
     NS_DECL_NSIXPCCOMPONENTS_CONSTRUCTOR
@@ -2500,17 +2500,17 @@ nsXPCComponents_Constructor::HasInstance
                                          HandleValue val, bool *bp,
                                          bool *_retval)
 {
     if (bp)
         *bp = JSValIsInterfaceOfType(cx, val, NS_GET_IID(nsIXPCConstructor));
     return NS_OK;
 }
 
-class nsXPCComponents_Utils :
+class nsXPCComponents_Utils MOZ_FINAL :
             public nsIXPCComponents_Utils,
             public nsIXPCScriptable
 {
 public:
     // all the interface method declarations...
     NS_DECL_ISUPPORTS
     NS_DECL_NSIXPCSCRIPTABLE
     NS_DECL_NSIXPCCOMPONENTS_UTILS
--- a/layout/base/nsCaret.h
+++ b/layout/base/nsCaret.h
@@ -29,17 +29,17 @@ class nsRenderingContext;
 
 namespace mozilla {
 namespace dom {
 class Selection;
 }
 }
 
 //-----------------------------------------------------------------------------
-class nsCaret : public nsISelectionListener
+class nsCaret MOZ_FINAL : public nsISelectionListener
 {
   public:
     nsCaret();
 
   protected:
     virtual ~nsCaret();
 
   public:
--- a/layout/base/nsDisplayList.h
+++ b/layout/base/nsDisplayList.h
@@ -2331,17 +2331,17 @@ public:
                                              const ContainerLayerParameters& aContainerParameters) MOZ_OVERRIDE;
 
   NS_DISPLAY_DECL_NAME("ClearBackground", TYPE_CLEAR_BACKGROUND)
 };
 
 /**
  * The standard display item to paint the outer CSS box-shadows of a frame.
  */
-class nsDisplayBoxShadowOuter : public nsDisplayItem {
+class nsDisplayBoxShadowOuter MOZ_FINAL : public nsDisplayItem {
 public:
   nsDisplayBoxShadowOuter(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame)
     : nsDisplayItem(aBuilder, aFrame)
     , mOpacity(1.0) {
     MOZ_COUNT_CTOR(nsDisplayBoxShadowOuter);
     mBounds = GetBoundsInternal();
   }
 #ifdef NS_BUILD_REFCNT_LOGGING
--- a/layout/base/nsPresShell.h
+++ b/layout/base/nsPresShell.h
@@ -51,20 +51,20 @@ class nsAutoCauseReflowNotifier;
 namespace mozilla {
 class CSSStyleSheet;
 } // namespace mozilla
 
 // 250ms.  This is actually pref-controlled, but we use this value if we fail
 // to get the pref for any reason.
 #define PAINTLOCK_EVENT_DELAY 250
 
-class PresShell : public nsIPresShell,
-                  public nsStubDocumentObserver,
-                  public nsISelectionController, public nsIObserver,
-                  public nsSupportsWeakReference
+class PresShell MOZ_FINAL : public nsIPresShell,
+                            public nsStubDocumentObserver,
+                            public nsISelectionController, public nsIObserver,
+                            public nsSupportsWeakReference
 {
 public:
   PresShell();
 
   NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW
 
   // nsISupports
   NS_DECL_ISUPPORTS
--- a/layout/base/nsRefreshDriver.cpp
+++ b/layout/base/nsRefreshDriver.cpp
@@ -426,17 +426,17 @@ protected:
  * the timer is quiet and doesn't tick (until something is added to it again).
  *
  * When a timer is removed, there is a possibility of another timer
  * being skipped for one cycle.  We could avoid this by adjusting
  * mNextDriverIndex in RemoveRefreshDriver, but there's little need to
  * add that complexity.  All we want is for inactive drivers to tick
  * at some point, but we don't care too much about how often.
  */
-class InactiveRefreshDriverTimer :
+class InactiveRefreshDriverTimer MOZ_FINAL :
     public RefreshDriverTimer
 {
 public:
   InactiveRefreshDriverTimer(double aRate)
     : RefreshDriverTimer(aRate),
       mNextTickDuration(aRate),
       mDisableAfterMilliseconds(-1.0),
       mNextDriverIndex(0)
--- a/layout/forms/nsComboboxControlFrame.cpp
+++ b/layout/forms/nsComboboxControlFrame.cpp
@@ -355,17 +355,17 @@ nsComboboxControlFrame::ShowList(bool aS
     if (widget) {
       view->DestroyWidget();
     }
   }
 
   return weakFrame.IsAlive();
 }
 
-class nsResizeDropdownAtFinalPosition
+class nsResizeDropdownAtFinalPosition MOZ_FINAL
   : public nsIReflowCallback, public nsRunnable
 {
 public:
   nsResizeDropdownAtFinalPosition(nsComboboxControlFrame* aFrame)
     : mFrame(aFrame)
   {
     MOZ_COUNT_CTOR(nsResizeDropdownAtFinalPosition);
   }
--- a/layout/forms/nsComboboxControlFrame.h
+++ b/layout/forms/nsComboboxControlFrame.h
@@ -32,23 +32,23 @@
 #include "nsThreadUtils.h"
 
 class nsStyleContext;
 class nsIListControlFrame;
 class nsComboboxDisplayFrame;
 class nsIDOMEventListener;
 class nsIScrollableFrame;
 
-class nsComboboxControlFrame : public nsBlockFrame,
-                               public nsIFormControlFrame,
-                               public nsIComboboxControlFrame,
-                               public nsIAnonymousContentCreator,
-                               public nsISelectControlFrame,
-                               public nsIRollupListener,
-                               public nsIStatefulFrame
+class nsComboboxControlFrame MOZ_FINAL : public nsBlockFrame,
+                                         public nsIFormControlFrame,
+                                         public nsIComboboxControlFrame,
+                                         public nsIAnonymousContentCreator,
+                                         public nsISelectControlFrame,
+                                         public nsIRollupListener,
+                                         public nsIStatefulFrame
 {
 public:
   friend nsContainerFrame* NS_NewComboboxControlFrame(nsIPresShell* aPresShell,
                                                       nsStyleContext* aContext,
                                                       nsFrameState aFlags);
   friend class nsComboboxDisplayFrame;
 
   nsComboboxControlFrame(nsStyleContext* aContext);
--- a/layout/forms/nsListControlFrame.h
+++ b/layout/forms/nsListControlFrame.h
@@ -41,20 +41,20 @@ class HTMLOptionElement;
 class HTMLOptionsCollection;
 } // namespace dom
 } // namespace mozilla
 
 /**
  * Frame-based listbox.
  */
 
-class nsListControlFrame : public nsHTMLScrollFrame,
-                           public nsIFormControlFrame, 
-                           public nsIListControlFrame,
-                           public nsISelectControlFrame
+class nsListControlFrame MOZ_FINAL : public nsHTMLScrollFrame,
+                                     public nsIFormControlFrame,
+                                     public nsIListControlFrame,
+                                     public nsISelectControlFrame
 {
 public:
   friend nsContainerFrame* NS_NewListControlFrame(nsIPresShell* aPresShell,
                                                   nsStyleContext* aContext);
 
   NS_DECL_QUERYFRAME
   NS_DECL_FRAMEARENA_HELPERS
 
--- a/layout/forms/nsTextControlFrame.h
+++ b/layout/forms/nsTextControlFrame.h
@@ -19,20 +19,20 @@ class EditorInitializerEntryTracker;
 class nsTextEditorState;
 class nsIEditor;
 namespace mozilla {
 namespace dom {
 class Element;
 }
 }
 
-class nsTextControlFrame : public nsContainerFrame,
-                           public nsIAnonymousContentCreator,
-                           public nsITextControlFrame,
-                           public nsIStatefulFrame
+class nsTextControlFrame MOZ_FINAL : public nsContainerFrame,
+                                     public nsIAnonymousContentCreator,
+                                     public nsITextControlFrame,
+                                     public nsIStatefulFrame
 {
 public:
   NS_DECL_FRAMEARENA_HELPERS
 
   NS_DECLARE_FRAME_PROPERTY(ContentScrollPos, DestroyPoint)
 
   nsTextControlFrame(nsIPresShell* aShell, nsStyleContext* aContext);
   virtual ~nsTextControlFrame();
--- a/layout/generic/ScrollbarActivity.h
+++ b/layout/generic/ScrollbarActivity.h
@@ -50,18 +50,18 @@ namespace layout {
  * while they're being hovered / dragged. It also sets a sticky hover attribute
  * on the most recently hovered scrollbar.
  *
  * ScrollbarActivity falls into hibernation after the scrollbars have faded
  * out. It only starts acting after the next call to ActivityOccurred() /
  * ActivityStarted().
  */
 
-class ScrollbarActivity : public nsIDOMEventListener,
-                          public nsARefreshObserver {
+class ScrollbarActivity MOZ_FINAL : public nsIDOMEventListener,
+                                    public nsARefreshObserver {
 public:
   ScrollbarActivity(nsIScrollbarOwner* aScrollableFrame)
    : mScrollableFrame(aScrollableFrame)
    , mNestedActivityCounter(0)
    , mIsActive(false)
    , mIsFading(false)
    , mListeningForScrollbarEvents(false)
    , mListeningForScrollAreaEvents(false)
--- a/layout/generic/Selection.h
+++ b/layout/generic/Selection.h
@@ -41,19 +41,19 @@ struct RangeData
 // Note, the ownership of mozilla::dom::Selection depends on which way the
 // object is created. When nsFrameSelection has created Selection,
 // addreffing/releasing the Selection object is aggregated to nsFrameSelection.
 // Otherwise normal addref/release is used.  This ensures that nsFrameSelection
 // is never deleted before its Selections.
 namespace mozilla {
 namespace dom {
 
-class Selection : public nsISelectionPrivate,
-                  public nsWrapperCache,
-                  public nsSupportsWeakReference
+class Selection MOZ_FINAL : public nsISelectionPrivate,
+                            public nsWrapperCache,
+                            public nsSupportsWeakReference
 {
 protected:
   virtual ~Selection();
 
 public:
   Selection();
   explicit Selection(nsFrameSelection *aList);
 
--- a/layout/generic/nsBulletFrame.cpp
+++ b/layout/generic/nsBulletFrame.cpp
@@ -190,17 +190,17 @@ public:
   {
     nsBulletFrame* f = static_cast<nsBulletFrame*>(aItem->Frame());
     mOrdinal = f->GetOrdinal();
   }
 
   int32_t mOrdinal;
 };
 
-class nsDisplayBullet : public nsDisplayItem {
+class nsDisplayBullet MOZ_FINAL : public nsDisplayItem {
 public:
   nsDisplayBullet(nsDisplayListBuilder* aBuilder, nsBulletFrame* aFrame) :
     nsDisplayItem(aBuilder, aFrame) {
     MOZ_COUNT_CTOR(nsDisplayBullet);
   }
 #ifdef NS_BUILD_REFCNT_LOGGING
   virtual ~nsDisplayBullet() {
     MOZ_COUNT_DTOR(nsDisplayBullet);
--- a/layout/generic/nsBulletFrame.h
+++ b/layout/generic/nsBulletFrame.h
@@ -13,17 +13,17 @@
 
 #include "imgINotificationObserver.h"
 
 class imgIContainer;
 class imgRequestProxy;
 
 class nsBulletFrame;
 
-class nsBulletListener : public imgINotificationObserver
+class nsBulletListener MOZ_FINAL : public imgINotificationObserver
 {
 public:
   nsBulletListener();
 
   NS_DECL_ISUPPORTS
   NS_DECL_IMGINOTIFICATIONOBSERVER
 
   void SetFrame(nsBulletFrame *frame) { mFrame = frame; }
@@ -33,17 +33,17 @@ private:
 
   nsBulletFrame *mFrame;
 };
 
 /**
  * A simple class that manages the layout and rendering of html bullets.
  * This class also supports the CSS list-style properties.
  */
-class nsBulletFrame : public nsFrame {
+class nsBulletFrame MOZ_FINAL : public nsFrame {
 public:
   NS_DECL_FRAMEARENA_HELPERS
 #ifdef DEBUG
   NS_DECL_QUERYFRAME_TARGET(nsBulletFrame)
   NS_DECL_QUERYFRAME
 #endif
 
   nsBulletFrame(nsStyleContext* aContext)
--- a/layout/generic/nsCanvasFrame.h
+++ b/layout/generic/nsCanvasFrame.h
@@ -20,19 +20,19 @@ class nsRenderingContext;
 
 /**
  * Root frame class.
  *
  * The root frame is the parent frame for the document element's frame.
  * It only supports having a single child frame which must be an area
  * frame
  */
-class nsCanvasFrame : public nsContainerFrame,
-                      public nsIScrollPositionListener,
-                      public nsIAnonymousContentCreator
+class nsCanvasFrame MOZ_FINAL : public nsContainerFrame,
+                                public nsIScrollPositionListener,
+                                public nsIAnonymousContentCreator
 {
 public:
   nsCanvasFrame(nsStyleContext* aContext)
   : nsContainerFrame(aContext),
     mDoPaintFocus(false),
     mAddedScrollPositionListener(false) {}
 
   NS_DECL_QUERYFRAME_TARGET(nsCanvasFrame)
--- a/layout/generic/nsColumnSetFrame.h
+++ b/layout/generic/nsColumnSetFrame.h
@@ -4,17 +4,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /* rendering object for css3 multi-column layout */
 
 #include "mozilla/Attributes.h"
 #include "nsContainerFrame.h"
 #include "nsIFrameInlines.h" // for methods used by IS_TRUE_OVERFLOW_CONTAINER
 
-class nsColumnSetFrame : public nsContainerFrame {
+class nsColumnSetFrame MOZ_FINAL : public nsContainerFrame {
 public:
   NS_DECL_FRAMEARENA_HELPERS
 
   nsColumnSetFrame(nsStyleContext* aContext);
 
   virtual void Reflow(nsPresContext* aPresContext,
                       nsHTMLReflowMetrics& aDesiredSize,
                       const nsHTMLReflowState& aReflowState,
--- a/layout/generic/nsGfxScrollFrame.h
+++ b/layout/generic/nsGfxScrollFrame.h
@@ -762,20 +762,20 @@ private:
  * The scroll frame creates and manages the scrolling view
  *
  * It only supports having a single child frame that typically is an area
  * frame, but doesn't have to be. The child frame must have a view, though
  *
  * Scroll frames don't support incremental changes, i.e. you can't replace
  * or remove the scrolled frame
  */
-class nsXULScrollFrame : public nsBoxFrame,
-                         public nsIScrollableFrame,
-                         public nsIAnonymousContentCreator,
-                         public nsIStatefulFrame {
+class nsXULScrollFrame MOZ_FINAL : public nsBoxFrame,
+                                   public nsIScrollableFrame,
+                                   public nsIAnonymousContentCreator,
+                                   public nsIStatefulFrame {
 public:
   typedef mozilla::ScrollFrameHelper ScrollFrameHelper;
   typedef mozilla::CSSIntPoint CSSIntPoint;
 
   NS_DECL_QUERYFRAME
   NS_DECL_FRAMEARENA_HELPERS
 
   friend nsXULScrollFrame* NS_NewXULScrollFrame(nsIPresShell* aPresShell,
--- a/layout/generic/nsImageMap.h
+++ b/layout/generic/nsImageMap.h
@@ -16,18 +16,18 @@
 
 class Area;
 class nsRenderingContext;
 class nsImageFrame;
 class nsIFrame;
 class nsIContent;
 struct nsRect;
 
-class nsImageMap : public nsStubMutationObserver,
-                   public nsIDOMEventListener
+class nsImageMap MOZ_FINAL : public nsStubMutationObserver,
+                             public nsIDOMEventListener
 {
 public:
   nsImageMap();
 
   nsresult Init(nsImageFrame* aImageFrame, nsIContent* aMap);
 
   /**
    * Return the first area element (in content order) for the given aX,aY pixel
--- a/layout/generic/nsPageFrame.h
+++ b/layout/generic/nsPageFrame.h
@@ -7,17 +7,17 @@
 
 #include "mozilla/Attributes.h"
 #include "nsContainerFrame.h"
 #include "nsLeafFrame.h"
 
 class nsSharedPageData;
 
 // Page frame class used by the simple page sequence frame
-class nsPageFrame : public nsContainerFrame {
+class nsPageFrame MOZ_FINAL : public nsContainerFrame {
 
 public:
   NS_DECL_FRAMEARENA_HELPERS
 
   friend nsPageFrame* NS_NewPageFrame(nsIPresShell* aPresShell,
                                       nsStyleContext* aContext);
 
   virtual void Reflow(nsPresContext*      aPresContext,
--- a/layout/generic/nsSelection.cpp
+++ b/layout/generic/nsSelection.cpp
@@ -156,17 +156,17 @@ public:
     if (mSelection) mSelection->StartBatchChanges();
   }
   ~nsSelectionBatcher() 
   { 
     if (mSelection) mSelection->EndBatchChanges();
   }
 };
 
-class nsAutoScrollTimer : public nsITimerCallback
+class nsAutoScrollTimer MOZ_FINAL : public nsITimerCallback
 {
 public:
 
   NS_DECL_ISUPPORTS
 
   nsAutoScrollTimer()
   : mFrameSelection(0), mSelection(0), mPresContext(0), mPoint(0,0), mDelay(30)
   {
--- a/layout/generic/nsTextRunTransformations.h
+++ b/layout/generic/nsTextRunTransformations.h
@@ -74,17 +74,17 @@ protected:
   nsAutoPtr<nsTransformingTextRunFactory> mInnerTransformingTextRunFactory;
   bool                                    mAllUppercase;
 };
 
 /**
  * So that we can reshape as necessary, we store enough information
  * to fully rebuild the textrun contents.
  */
-class nsTransformedTextRun : public gfxTextRun {
+class nsTransformedTextRun MOZ_FINAL : public gfxTextRun {
 public:
   static nsTransformedTextRun *Create(const gfxTextRunFactory::Parameters* aParams,
                                       nsTransformingTextRunFactory* aFactory,
                                       gfxFontGroup* aFontGroup,
                                       const char16_t* aString, uint32_t aLength,
                                       const uint32_t aFlags, nsStyleContext** aStyles,
                                       bool aOwnsFactory);
 
--- a/layout/inspector/inCSSValueSearch.h
+++ b/layout/inspector/inCSSValueSearch.h
@@ -14,17 +14,17 @@
 #include "nsTArray.h"
 #include "nsCSSProps.h"
 
 class nsIDOMCSSStyleSheet;
 class nsIDOMCSSRuleList;
 class nsIDOMCSSStyleRule;
 class nsIURI;
 
-class inCSSValueSearch : public inICSSValueSearch
+class inCSSValueSearch MOZ_FINAL : public inICSSValueSearch
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_INISEARCHPROCESS
   NS_DECL_INICSSVALUESEARCH
 
   inCSSValueSearch();
 
--- a/layout/inspector/inDOMUtils.h
+++ b/layout/inspector/inDOMUtils.h
@@ -12,17 +12,17 @@ class nsStyleContext;
 class nsIAtom;
 
 namespace mozilla {
 namespace dom {
 class Element;
 } // namespace dom
 } // namespace mozilla
 
-class inDOMUtils : public inIDOMUtils
+class inDOMUtils MOZ_FINAL : public inIDOMUtils
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_INIDOMUTILS
 
   inDOMUtils();
 
 private:
--- a/layout/inspector/inFlasher.h
+++ b/layout/inspector/inFlasher.h
@@ -12,17 +12,17 @@
 class nsRenderingContext;
 
 #define BOUND_INNER 0
 #define BOUND_OUTER 1
 
 #define DIR_VERTICAL 0
 #define DIR_HORIZONTAL 1
 
-class inFlasher : public inIFlasher
+class inFlasher MOZ_FINAL : public inIFlasher
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_INIFLASHER
 
   inFlasher();
 
 protected:
--- a/layout/mathml/nsMathMLmfencedFrame.h
+++ b/layout/mathml/nsMathMLmfencedFrame.h
@@ -8,17 +8,17 @@
 
 #include "mozilla/Attributes.h"
 #include "nsMathMLContainerFrame.h"
 
 //
 // <mfenced> -- surround content with a pair of fences
 //
 
-class nsMathMLmfencedFrame : public nsMathMLContainerFrame {
+class nsMathMLmfencedFrame MOZ_FINAL : public nsMathMLContainerFrame {
 public:
   NS_DECL_FRAMEARENA_HELPERS
 
   friend nsIFrame* NS_NewMathMLmfencedFrame(nsIPresShell* aPresShell, nsStyleContext* aContext);
 
   virtual void
   SetAdditionalStyleContext(int32_t          aIndex, 
                             nsStyleContext*  aStyleContext) MOZ_OVERRIDE;
--- a/layout/style/CSSStyleSheet.cpp
+++ b/layout/style/CSSStyleSheet.cpp
@@ -45,17 +45,17 @@
 #include "nsComponentManagerUtils.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 
 // -------------------------------
 // Style Rule List for the DOM
 //
-class CSSRuleListImpl : public CSSRuleList
+class CSSRuleListImpl MOZ_FINAL : public CSSRuleList
 {
 public:
   CSSRuleListImpl(CSSStyleSheet *aStyleSheet);
 
   virtual CSSStyleSheet* GetParentObject() MOZ_OVERRIDE;
 
   virtual nsIDOMCSSRule*
   IndexedGetter(uint32_t aIndex, bool& aFound) MOZ_OVERRIDE;
--- a/layout/style/StyleRule.h
+++ b/layout/style/StyleRule.h
@@ -277,17 +277,17 @@ private:
 namespace mozilla {
 namespace css {
 
 class Declaration;
 class DOMCSSStyleRule;
 
 class StyleRule;
 
-class ImportantRule : public nsIStyleRule {
+class ImportantRule MOZ_FINAL : public nsIStyleRule {
 public:
   explicit ImportantRule(Declaration *aDeclaration);
 
   NS_DECL_ISUPPORTS
 
   // nsIStyleRule interface
   virtual void MapRuleInfoInto(nsRuleData* aRuleData) MOZ_OVERRIDE;
 #ifdef DEBUG
--- a/layout/style/nsCSSRules.h
+++ b/layout/style/nsCSSRules.h
@@ -179,17 +179,17 @@ protected:
   nsAutoPtr<URL> mURLs; // linked list of |struct URL| above.
 };
 
 } // namespace css
 } // namespace mozilla
 
 // A nsCSSFontFaceStyleDecl is always embedded in a nsCSSFontFaceRule.
 class nsCSSFontFaceRule;
-class nsCSSFontFaceStyleDecl : public nsICSSDeclaration
+class nsCSSFontFaceStyleDecl MOZ_FINAL : public nsICSSDeclaration
 {
 public:
   NS_DECL_ISUPPORTS_INHERITED
   NS_DECL_NSIDOMCSSSTYLEDECLARATION_HELPER
   NS_DECL_NSICSSDECLARATION
   virtual already_AddRefed<mozilla::dom::CSSValue>
   GetPropertyCSSValue(const nsAString& aProp, mozilla::ErrorResult& aRv)
     MOZ_OVERRIDE;
--- a/layout/svg/SVGTextFrame.h
+++ b/layout/svg/SVGTextFrame.h
@@ -233,17 +233,17 @@ struct SVGTextContextPaint : public gfxT
  * object.  The TextRenderedRunIterator class performs that splitting and
  * returns a TextRenderedRun for each bit of text to be painted separately.
  *
  * Each rendered run is painted by calling nsTextFrame::PaintText.  If the text
  * formatting is simple enough (solid fill, no stroking, etc.), PaintText will
  * itself do the painting.  Otherwise, a DrawPathCallback is passed to
  * PaintText so that we can fill the text geometry with SVG paint servers.
  */
-class SVGTextFrame : public SVGTextFrameBase
+class SVGTextFrame MOZ_FINAL : public SVGTextFrameBase
 {
   friend nsIFrame*
   NS_NewSVGTextFrame(nsIPresShell* aPresShell, nsStyleContext* aContext);
 
   friend class mozilla::CharIterator;
   friend class mozilla::GlyphMetricsUpdater;
   friend class mozilla::TextFrameIterator;
   friend class mozilla::TextNodeCorrespondenceRecorder;
--- a/layout/svg/nsSVGEffects.h
+++ b/layout/svg/nsSVGEffects.h
@@ -159,17 +159,17 @@ protected:
  * This class keeps track of one SVG reference filter in a filter chain.
  * e.g. url(#svg-filter-1)
  *
  * It fires invalidations when the SVG filter element's id changes or when
  * the SVG filter element's content changes.
  *
  * The nsSVGFilterProperty class manages a list of nsSVGFilterReferences.
  */
-class nsSVGFilterReference :
+class nsSVGFilterReference MOZ_FINAL :
   public nsSVGIDRenderingObserver, public nsISVGFilterReference {
 public:
   nsSVGFilterReference(nsIURI *aURI, nsIFrame *aFilteredFrame)
     : nsSVGIDRenderingObserver(aURI, aFilteredFrame, false) {}
 
   bool ReferencesValidResource() { return GetFilterFrame(); }
 
   /**
--- a/layout/svg/nsSVGOuterSVGFrame.h
+++ b/layout/svg/nsSVGOuterSVGFrame.h
@@ -13,18 +13,18 @@
 
 class nsSVGForeignObjectFrame;
 
 ////////////////////////////////////////////////////////////////////////
 // nsSVGOuterSVGFrame class
 
 typedef nsSVGDisplayContainerFrame nsSVGOuterSVGFrameBase;
 
-class nsSVGOuterSVGFrame : public nsSVGOuterSVGFrameBase,
-                           public nsISVGSVGFrame
+class nsSVGOuterSVGFrame MOZ_FINAL : public nsSVGOuterSVGFrameBase,
+                                     public nsISVGSVGFrame
 {
   friend nsContainerFrame*
   NS_NewSVGOuterSVGFrame(nsIPresShell* aPresShell, nsStyleContext* aContext);
 protected:
   nsSVGOuterSVGFrame(nsStyleContext* aContext);
 
 public:
   NS_DECL_QUERYFRAME
--- a/layout/tables/nsTableCellFrame.h
+++ b/layout/tables/nsTableCellFrame.h
@@ -282,17 +282,17 @@ inline void nsTableCellFrame::SetHasPctO
   if (aValue) {
     mState |= NS_TABLE_CELL_HAS_PCT_OVER_HEIGHT;
   } else {
     mState &= ~NS_TABLE_CELL_HAS_PCT_OVER_HEIGHT;
   }
 }
 
 // nsBCTableCellFrame
-class nsBCTableCellFrame : public nsTableCellFrame
+class nsBCTableCellFrame MOZ_FINAL : public nsTableCellFrame
 {
 public:
   NS_DECL_FRAMEARENA_HELPERS
 
   nsBCTableCellFrame(nsStyleContext* aContext);
 
   ~nsBCTableCellFrame();
 
--- a/layout/tables/nsTableColGroupFrame.h
+++ b/layout/tables/nsTableColGroupFrame.h
@@ -20,17 +20,17 @@ enum nsTableColGroupType {
 };
 
 /**
  * nsTableColGroupFrame
  * data structure to maintain information about a single table cell's frame
  *
  * @author  sclark
  */
-class nsTableColGroupFrame : public nsContainerFrame
+class nsTableColGroupFrame MOZ_FINAL : public nsContainerFrame
 {
 public:
   NS_DECL_FRAMEARENA_HELPERS
 
   // default constructor supplied by the compiler
 
   /** instantiate a new instance of nsTableRowFrame.
     * @param aPresShell the pres shell for this frame
--- a/layout/tables/nsTableRowGroupFrame.h
+++ b/layout/tables/nsTableRowGroupFrame.h
@@ -46,17 +46,17 @@ struct nsRowGroupReflowState {
  * nsTableRowGroupFrame is the frame that maps row groups 
  * (HTML tags THEAD, TFOOT, and TBODY). This class cannot be reused
  * outside of an nsTableFrame.  It assumes that its parent is an nsTableFrame, and 
  * its children are nsTableRowFrames.
  * 
  * @see nsTableFrame
  * @see nsTableRowFrame
  */
-class nsTableRowGroupFrame
+class nsTableRowGroupFrame MOZ_FINAL
   : public nsContainerFrame
   , public nsILineIterator
 {
 public:
   NS_DECL_QUERYFRAME_TARGET(nsTableRowGroupFrame)
   NS_DECL_QUERYFRAME
   NS_DECL_FRAMEARENA_HELPERS
 
--- a/layout/xul/grid/nsGridLayout2.h
+++ b/layout/xul/grid/nsGridLayout2.h
@@ -18,18 +18,18 @@ class nsGridRowGroupLayout;
 class nsGridRowLayout;
 class nsGridRow;
 class nsBoxLayoutState;
 class nsGridCell;
 
 /**
  * The nsBoxLayout implementation for a grid.
  */
-class nsGridLayout2 : public nsStackLayout, 
-                      public nsIGridPart
+class nsGridLayout2 MOZ_FINAL : public nsStackLayout, 
+                                public nsIGridPart
 {
 public:
 
   friend nsresult NS_NewGridLayout2(nsIPresShell* aPresShell, nsBoxLayout** aNewLayout);
 
   NS_DECL_ISUPPORTS_INHERITED
 
   NS_IMETHOD Layout(nsIFrame* aBox, nsBoxLayoutState& aBoxLayoutState) MOZ_OVERRIDE;
--- a/layout/xul/grid/nsGridRowLeafLayout.h
+++ b/layout/xul/grid/nsGridRowLeafLayout.h
@@ -17,17 +17,17 @@
 #include "nsGridRowLayout.h"
 #include "nsCOMPtr.h"
 
 /**
  * The nsBoxLayout implementation for nsGridRowLeafFrame.
  */
 // XXXldb This needs a better name that indicates that it's for any grid
 // row.
-class nsGridRowLeafLayout : public nsGridRowLayout
+class nsGridRowLeafLayout MOZ_FINAL : public nsGridRowLayout
 {
 public:
 
   friend already_AddRefed<nsBoxLayout> NS_NewGridRowLeafLayout();
 
   virtual nsSize GetPrefSize(nsIFrame* aBox, nsBoxLayoutState& aBoxLayoutState) MOZ_OVERRIDE;
   virtual nsSize GetMinSize(nsIFrame* aBox, nsBoxLayoutState& aBoxLayoutState) MOZ_OVERRIDE;
   virtual nsSize GetMaxSize(nsIFrame* aBox, nsBoxLayoutState& aBoxLayoutState) MOZ_OVERRIDE;
--- a/layout/xul/nsImageBoxFrame.h
+++ b/layout/xul/nsImageBoxFrame.h
@@ -14,35 +14,35 @@
 #include "imgINotificationObserver.h"
 #include "imgIOnloadBlocker.h"
 
 class imgRequestProxy;
 class nsImageBoxFrame;
 
 class nsDisplayXULImage;
 
-class nsImageBoxListener : public imgINotificationObserver,
-                           public imgIOnloadBlocker
+class nsImageBoxListener MOZ_FINAL : public imgINotificationObserver,
+                                     public imgIOnloadBlocker
 {
 public:
   nsImageBoxListener();
 
   NS_DECL_ISUPPORTS
   NS_DECL_IMGINOTIFICATIONOBSERVER
   NS_DECL_IMGIONLOADBLOCKER
 
   void SetFrame(nsImageBoxFrame *frame) { mFrame = frame; }
 
 private:
   virtual ~nsImageBoxListener();
 
   nsImageBoxFrame *mFrame;
 };
 
-class nsImageBoxFrame : public nsLeafBoxFrame
+class nsImageBoxFrame MOZ_FINAL : public nsLeafBoxFrame
 {
 public:
   typedef mozilla::layers::LayerManager LayerManager;
 
   friend class nsDisplayXULImage;
   NS_DECL_FRAMEARENA_HELPERS
 
   virtual nsSize GetPrefSize(nsBoxLayoutState& aBoxLayoutState) MOZ_OVERRIDE;
--- a/layout/xul/nsListBoxBodyFrame.cpp
+++ b/layout/xul/nsListBoxBodyFrame.cpp
@@ -59,17 +59,17 @@ using namespace mozilla::dom;
 // how long it takes to layout a single row initial value.
 // we will time this after we scroll a few rows.
 #define TIME_PER_ROW_INITAL  50000
 
 // if we decide we can't layout the rows in the amount of time. How long
 // do we wait before checking again?
 #define SMOOTH_INTERVAL 100
 
-class nsListScrollSmoother : public nsITimerCallback
+class nsListScrollSmoother MOZ_FINAL : public nsITimerCallback
 {
 private:
   virtual ~nsListScrollSmoother();
 
 public:
   NS_DECL_ISUPPORTS
 
   nsListScrollSmoother(nsListBoxBodyFrame* aOuter);
--- a/layout/xul/nsListBoxBodyFrame.h
+++ b/layout/xul/nsListBoxBodyFrame.h
@@ -16,19 +16,19 @@
 #include "nsThreadUtils.h"
 #include "nsPIBoxObject.h"
 
 class nsPresContext;
 class nsListScrollSmoother;
 nsIFrame* NS_NewListBoxBodyFrame(nsIPresShell* aPresShell,
                                  nsStyleContext* aContext);
 
-class nsListBoxBodyFrame : public nsBoxFrame,
-                           public nsIScrollbarMediator,
-                           public nsIReflowCallback
+class nsListBoxBodyFrame MOZ_FINAL : public nsBoxFrame,
+                                     public nsIScrollbarMediator,
+                                     public nsIReflowCallback
 {
   nsListBoxBodyFrame(nsIPresShell* aPresShell, nsStyleContext* aContext,
                      nsBoxLayout* aLayoutManager);
   virtual ~nsListBoxBodyFrame();
 
 public:
   NS_DECL_QUERYFRAME_TARGET(nsListBoxBodyFrame)
   NS_DECL_QUERYFRAME
--- a/layout/xul/nsListBoxObject.cpp
+++ b/layout/xul/nsListBoxObject.cpp
@@ -10,17 +10,17 @@
 #include "nsBindingManager.h"
 #include "nsIDOMElement.h"
 #include "nsIDOMNodeList.h"
 #include "nsGkAtoms.h"
 #include "nsIScrollableFrame.h"
 #include "nsListBoxBodyFrame.h"
 #include "ChildIterator.h"
 
-class nsListBoxObject : public nsPIListBoxObject, public nsBoxObject
+class nsListBoxObject MOZ_FINAL : public nsPIListBoxObject, public nsBoxObject
 {
 public:
   NS_DECL_ISUPPORTS_INHERITED
   NS_DECL_NSILISTBOXOBJECT
 
   // nsPIListBoxObject
   virtual nsListBoxBodyFrame* GetListBoxBody(bool aFlush) MOZ_OVERRIDE;
 
--- a/layout/xul/nsMenuBarFrame.h
+++ b/layout/xul/nsMenuBarFrame.h
@@ -17,17 +17,17 @@
 #include "nsMenuFrame.h"
 #include "nsMenuBarListener.h"
 #include "nsMenuParent.h"
 
 class nsIContent;
 
 nsIFrame* NS_NewMenuBarFrame(nsIPresShell* aPresShell, nsStyleContext* aContext);
 
-class nsMenuBarFrame : public nsBoxFrame, public nsMenuParent
+class nsMenuBarFrame MOZ_FINAL : public nsBoxFrame, public nsMenuParent
 {
 public:
   NS_DECL_QUERYFRAME_TARGET(nsMenuBarFrame)
   NS_DECL_QUERYFRAME
   NS_DECL_FRAMEARENA_HELPERS
 
   nsMenuBarFrame(nsIPresShell* aShell, nsStyleContext* aContext);
 
--- a/layout/xul/nsMenuBarListener.h
+++ b/layout/xul/nsMenuBarListener.h
@@ -14,17 +14,17 @@
 #undef KeyPress
 #endif
 
 class nsMenuBarFrame;
 class nsIDOMKeyEvent;
 
 /** editor Implementation of the DragListener interface
  */
-class nsMenuBarListener : public nsIDOMEventListener
+class nsMenuBarListener MOZ_FINAL : public nsIDOMEventListener
 {
 public:
   /** default constructor
    */
   nsMenuBarListener(nsMenuBarFrame* aMenuBar);
 
   static void InitializeStatics();
    
--- a/layout/xul/nsMenuFrame.h
+++ b/layout/xul/nsMenuFrame.h
@@ -67,17 +67,17 @@ public:
 
 private:
   ~nsMenuTimerMediator();
 
   // Pointer to the wrapped frame.
   nsMenuFrame* mFrame;
 };
 
-class nsMenuFrame : public nsBoxFrame
+class nsMenuFrame MOZ_FINAL : public nsBoxFrame
 {
 public:
   nsMenuFrame(nsIPresShell* aShell, nsStyleContext* aContext);
 
   NS_DECL_QUERYFRAME_TARGET(nsMenuFrame)
   NS_DECL_QUERYFRAME
   NS_DECL_FRAMEARENA_HELPERS
 
--- a/layout/xul/nsMenuPopupFrame.h
+++ b/layout/xul/nsMenuPopupFrame.h
@@ -143,17 +143,17 @@ public:
 protected:
   virtual ~nsXULPopupShownEvent() { }
 
 private:
   nsCOMPtr<nsIContent> mPopup;
   nsRefPtr<nsPresContext> mPresContext;
 };
 
-class nsMenuPopupFrame : public nsBoxFrame, public nsMenuParent
+class nsMenuPopupFrame MOZ_FINAL : public nsBoxFrame, public nsMenuParent
 {
 public:
   NS_DECL_QUERYFRAME_TARGET(nsMenuPopupFrame)
   NS_DECL_QUERYFRAME
   NS_DECL_FRAMEARENA_HELPERS
 
   nsMenuPopupFrame(nsIPresShell* aShell, nsStyleContext* aContext);
 
--- a/layout/xul/nsRepeatService.h
+++ b/layout/xul/nsRepeatService.h
@@ -17,17 +17,17 @@
 #ifdef XP_MACOSX
 #define REPEAT_DELAY        25
 #else
 #define REPEAT_DELAY        50
 #endif
 
 class nsITimer;
 
-class nsRepeatService : public nsITimerCallback
+class nsRepeatService MOZ_FINAL : public nsITimerCallback
 {
 public:
 
   typedef void (* Callback)(void* aData);
     
   NS_DECL_NSITIMERCALLBACK
 
   // Start dispatching timer events to the callback. There is no memory
--- a/layout/xul/nsScrollBoxObject.cpp
+++ b/layout/xul/nsScrollBoxObject.cpp
@@ -10,17 +10,18 @@
 #include "nsIContent.h"
 #include "nsIDOMElement.h"
 #include "nsPresContext.h"
 #include "nsBox.h"
 #include "nsIScrollableFrame.h"
 
 using namespace mozilla;
 
-class nsScrollBoxObject : public nsIScrollBoxObject, public nsBoxObject
+class nsScrollBoxObject MOZ_FINAL : public nsIScrollBoxObject,
+                                    public nsBoxObject
 {
 public:
   NS_DECL_ISUPPORTS_INHERITED
   NS_DECL_NSISCROLLBOXOBJECT
 
   nsScrollBoxObject();
 
   virtual nsIScrollableFrame* GetScrollFrame() {
--- a/layout/xul/nsSliderFrame.h
+++ b/layout/xul/nsSliderFrame.h
@@ -15,17 +15,17 @@
 #include "nsIDOMEventListener.h"
 
 class nsString;
 class nsITimer;
 class nsSliderFrame;
 
 nsIFrame* NS_NewSliderFrame(nsIPresShell* aPresShell, nsStyleContext* aContext);
 
-class nsSliderMediator : public nsIDOMEventListener
+class nsSliderMediator MOZ_FINAL : public nsIDOMEventListener
 {
 public:
 
   NS_DECL_ISUPPORTS
 
   nsSliderFrame* mSlider;
 
   nsSliderMediator(nsSliderFrame* aSlider) {  mSlider = aSlider; }
--- a/layout/xul/nsSplitterFrame.cpp
+++ b/layout/xul/nsSplitterFrame.cpp
@@ -45,17 +45,17 @@ public:
   nscoord max;
   nscoord current;
   nscoord changed;
   nsCOMPtr<nsIContent> childElem;
   int32_t flex;
   int32_t index;
 };
 
-class nsSplitterFrameInner : public nsIDOMEventListener
+class nsSplitterFrameInner MOZ_FINAL : public nsIDOMEventListener
 {
 protected:
   virtual ~nsSplitterFrameInner();
 
 public:
 
   NS_DECL_ISUPPORTS
   NS_DECL_NSIDOMEVENTLISTENER
--- a/netwerk/base/src/nsSocketTransportService2.h
+++ b/netwerk/base/src/nsSocketTransportService2.h
@@ -52,21 +52,21 @@ static const int32_t kDefaultTCPKeepCoun
 #else
                                               4;  // Specifiable in Linux.
 #endif
 }
 }
 
 //-----------------------------------------------------------------------------
 
-class nsSocketTransportService : public nsPISocketTransportService
-                               , public nsIEventTarget
-                               , public nsIThreadObserver
-                               , public nsIRunnable
-                               , public nsIObserver
+class nsSocketTransportService MOZ_FINAL : public nsPISocketTransportService
+                                         , public nsIEventTarget
+                                         , public nsIThreadObserver
+                                         , public nsIRunnable
+                                         , public nsIObserver
 {
     typedef mozilla::Mutex Mutex;
 
 public:
     NS_DECL_THREADSAFE_ISUPPORTS
     NS_DECL_NSPISOCKETTRANSPORTSERVICE
     NS_DECL_NSISOCKETTRANSPORTSERVICE
     NS_DECL_NSIEVENTTARGET
--- a/netwerk/cache/nsDiskCacheDeviceSQL.h
+++ b/netwerk/cache/nsDiskCacheDeviceSQL.h
@@ -57,18 +57,18 @@ public:
 private:
   ~nsOfflineCacheEvictionFunction() {}
 
   nsOfflineCacheDevice *mDevice;
   nsCOMArray<nsIFile> mItems;
 
 };
 
-class nsOfflineCacheDevice : public nsCacheDevice
-                           , public nsISupports
+class nsOfflineCacheDevice MOZ_FINAL : public nsCacheDevice
+                                     , public nsISupports
 {
 public:
   nsOfflineCacheDevice();
 
   NS_DECL_THREADSAFE_ISUPPORTS
 
   /**
    * nsCacheDevice methods
--- a/netwerk/cache2/CacheEntry.h
+++ b/netwerk/cache2/CacheEntry.h
@@ -42,19 +42,19 @@ namespace mozilla {
 namespace net {
 
 class CacheStorageService;
 class CacheStorage;
 class CacheFileOutputStream;
 class CacheOutputCloseListener;
 class CacheEntryHandle;
 
-class CacheEntry : public nsICacheEntry
-                 , public nsIRunnable
-                 , public CacheFileListener
+class CacheEntry MOZ_FINAL : public nsICacheEntry
+                           , public nsIRunnable
+                           , public CacheFileListener
 {
 public:
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_NSICACHEENTRY
   NS_DECL_NSIRUNNABLE
 
   CacheEntry(const nsACString& aStorageID, nsIURI* aURI, const nsACString& aEnhanceID,
              bool aUseDisk);
--- a/netwerk/protocol/http/HttpChannelChild.h
+++ b/netwerk/protocol/http/HttpChannelChild.h
@@ -28,27 +28,27 @@
 #include "nsIChildChannel.h"
 #include "nsIHttpChannelChild.h"
 #include "nsIDivertableChannel.h"
 #include "mozilla/net/DNS.h"
 
 namespace mozilla {
 namespace net {
 
-class HttpChannelChild : public PHttpChannelChild
-                       , public HttpBaseChannel
-                       , public HttpAsyncAborter<HttpChannelChild>
-                       , public nsICacheInfoChannel
-                       , public nsIProxiedChannel
-                       , public nsIApplicationCacheChannel
-                       , public nsIAsyncVerifyRedirectCallback
-                       , public nsIAssociatedContentSecurity
-                       , public nsIChildChannel
-                       , public nsIHttpChannelChild
-                       , public nsIDivertableChannel
+class HttpChannelChild MOZ_FINAL : public PHttpChannelChild
+                                 , public HttpBaseChannel
+                                 , public HttpAsyncAborter<HttpChannelChild>
+                                 , public nsICacheInfoChannel
+                                 , public nsIProxiedChannel
+                                 , public nsIApplicationCacheChannel
+                                 , public nsIAsyncVerifyRedirectCallback
+                                 , public nsIAssociatedContentSecurity
+                                 , public nsIChildChannel
+                                 , public nsIHttpChannelChild
+                                 , public nsIDivertableChannel
 {
   virtual ~HttpChannelChild();
 public:
   NS_DECL_ISUPPORTS_INHERITED
   NS_DECL_NSICACHEINFOCHANNEL
   NS_DECL_NSIPROXIEDCHANNEL
   NS_DECL_NSIAPPLICATIONCACHECONTAINER
   NS_DECL_NSIAPPLICATIONCACHECHANNEL
--- a/netwerk/protocol/http/nsHttpChannel.h
+++ b/netwerk/protocol/http/nsHttpChannel.h
@@ -32,30 +32,30 @@ class nsInputStreamPump;
 class nsPerformance;
 
 namespace mozilla { namespace net {
 
 //-----------------------------------------------------------------------------
 // nsHttpChannel
 //-----------------------------------------------------------------------------
 
-class nsHttpChannel : public HttpBaseChannel
-                    , public HttpAsyncAborter<nsHttpChannel>
-                    , public nsIStreamListener
-                    , public nsICachingChannel
-                    , public nsICacheEntryOpenCallback
-                    , public nsITransportEventSink
-                    , public nsIProtocolProxyCallback
-                    , public nsIHttpAuthenticableChannel
-                    , public nsIApplicationCacheChannel
-                    , public nsIAsyncVerifyRedirectCallback
-                    , public nsIThreadRetargetableRequest
-                    , public nsIThreadRetargetableStreamListener
-                    , public nsIDNSListener
-                    , public nsSupportsWeakReference
+class nsHttpChannel MOZ_FINAL : public HttpBaseChannel
+                              , public HttpAsyncAborter<nsHttpChannel>
+                              , public nsIStreamListener
+                              , public nsICachingChannel
+                              , public nsICacheEntryOpenCallback
+                              , public nsITransportEventSink
+                              , public nsIProtocolProxyCallback
+                              , public nsIHttpAuthenticableChannel
+                              , public nsIApplicationCacheChannel
+                              , public nsIAsyncVerifyRedirectCallback
+                              , public nsIThreadRetargetableRequest
+                              , public nsIThreadRetargetableStreamListener
+                              , public nsIDNSListener
+                              , public nsSupportsWeakReference
 {
 public:
     NS_DECL_ISUPPORTS_INHERITED
     NS_DECL_NSIREQUESTOBSERVER
     NS_DECL_NSISTREAMLISTENER
     NS_DECL_NSITHREADRETARGETABLESTREAMLISTENER
     NS_DECL_NSICACHEINFOCHANNEL
     NS_DECL_NSICACHINGCHANNEL
--- a/netwerk/protocol/http/nsHttpConnection.h
+++ b/netwerk/protocol/http/nsHttpConnection.h
@@ -30,23 +30,23 @@ class ASpdySession;
 
 //-----------------------------------------------------------------------------
 // nsHttpConnection - represents a connection to a HTTP server (or proxy)
 //
 // NOTE: this objects lives on the socket thread only.  it should not be
 // accessed from any other thread.
 //-----------------------------------------------------------------------------
 
-class nsHttpConnection : public nsAHttpSegmentReader
-                       , public nsAHttpSegmentWriter
-                       , public nsIInputStreamCallback
-                       , public nsIOutputStreamCallback
-                       , public nsITransportEventSink
-                       , public nsIInterfaceRequestor
-                       , public NudgeTunnelCallback
+class nsHttpConnection MOZ_FINAL : public nsAHttpSegmentReader
+                                 , public nsAHttpSegmentWriter
+                                 , public nsIInputStreamCallback
+                                 , public nsIOutputStreamCallback
+                                 , public nsITransportEventSink
+                                 , public nsIInterfaceRequestor
+                                 , public NudgeTunnelCallback
 {
     virtual ~nsHttpConnection();
 
 public:
     NS_DECL_THREADSAFE_ISUPPORTS
     NS_DECL_NSAHTTPSEGMENTREADER
     NS_DECL_NSAHTTPSEGMENTWRITER
     NS_DECL_NSIINPUTSTREAMCALLBACK
--- a/netwerk/protocol/http/nsHttpHandler.h
+++ b/netwerk/protocol/http/nsHttpHandler.h
@@ -38,20 +38,20 @@ class Tickler;
 class nsHttpConnection;
 class nsHttpConnectionInfo;
 class nsHttpTransaction;
 
 //-----------------------------------------------------------------------------
 // nsHttpHandler - protocol handler for HTTP and HTTPS
 //-----------------------------------------------------------------------------
 
-class nsHttpHandler : public nsIHttpProtocolHandler
-                    , public nsIObserver
-                    , public nsSupportsWeakReference
-                    , public nsISpeculativeConnect
+class nsHttpHandler MOZ_FINAL : public nsIHttpProtocolHandler
+                              , public nsIObserver
+                              , public nsSupportsWeakReference
+                              , public nsISpeculativeConnect
 {
 public:
     NS_DECL_THREADSAFE_ISUPPORTS
     NS_DECL_NSIPROTOCOLHANDLER
     NS_DECL_NSIPROXIEDPROTOCOLHANDLER
     NS_DECL_NSIHTTPPROTOCOLHANDLER
     NS_DECL_NSIOBSERVER
     NS_DECL_NSISPECULATIVECONNECT
--- a/netwerk/protocol/http/nsHttpPipeline.h
+++ b/netwerk/protocol/http/nsHttpPipeline.h
@@ -11,19 +11,19 @@
 #include "nsTArray.h"
 #include "nsCOMPtr.h"
 
 class nsIInputStream;
 class nsIOutputStream;
 
 namespace mozilla { namespace net {
 
-class nsHttpPipeline : public nsAHttpConnection
-                     , public nsAHttpTransaction
-                     , public nsAHttpSegmentReader
+class nsHttpPipeline MOZ_FINAL : public nsAHttpConnection
+                               , public nsAHttpTransaction
+                               , public nsAHttpSegmentReader
 {
 public:
     NS_DECL_THREADSAFE_ISUPPORTS
     NS_DECL_NSAHTTPCONNECTION(mConnection)
     NS_DECL_NSAHTTPTRANSACTION
     NS_DECL_NSAHTTPSEGMENTREADER
 
     nsHttpPipeline();
--- a/netwerk/protocol/http/nsHttpTransaction.h
+++ b/netwerk/protocol/http/nsHttpTransaction.h
@@ -34,20 +34,20 @@ class nsHttpChunkedDecoder;
 class nsHttpRequestHead;
 class nsHttpResponseHead;
 
 //-----------------------------------------------------------------------------
 // nsHttpTransaction represents a single HTTP transaction.  It is thread-safe,
 // intended to run on the socket thread.
 //-----------------------------------------------------------------------------
 
-class nsHttpTransaction : public nsAHttpTransaction
-                        , public ATokenBucketEvent
-                        , public nsIInputStreamCallback
-                        , public nsIOutputStreamCallback
+class nsHttpTransaction MOZ_FINAL : public nsAHttpTransaction
+                                  , public ATokenBucketEvent
+                                  , public nsIInputStreamCallback
+                                  , public nsIOutputStreamCallback
 {
 public:
     NS_DECL_THREADSAFE_ISUPPORTS
     NS_DECL_NSAHTTPTRANSACTION
     NS_DECL_NSIINPUTSTREAMCALLBACK
     NS_DECL_NSIOUTPUTSTREAMCALLBACK
 
     nsHttpTransaction();
--- a/parser/html/nsHtml5TreeOpExecutor.h
+++ b/parser/html/nsHtml5TreeOpExecutor.h
@@ -25,20 +25,20 @@
 
 class nsHtml5Parser;
 class nsHtml5TreeBuilder;
 class nsHtml5Tokenizer;
 class nsHtml5StreamParser;
 class nsIContent;
 class nsIDocument;
 
-class nsHtml5TreeOpExecutor : public nsHtml5DocumentBuilder,
-                              public nsIContentSink,
-                              public nsAHtml5TreeOpSink,
-                              public mozilla::LinkedListElement<nsHtml5TreeOpExecutor>
+class nsHtml5TreeOpExecutor MOZ_FINAL : public nsHtml5DocumentBuilder,
+                                        public nsIContentSink,
+                                        public nsAHtml5TreeOpSink,
+                                        public mozilla::LinkedListElement<nsHtml5TreeOpExecutor>
 {
   friend class nsHtml5FlushLoopGuard;
 
   public:
     NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW
     NS_DECL_ISUPPORTS_INHERITED
 
   private:
--- a/parser/htmlparser/src/nsParser.h
+++ b/parser/htmlparser/src/nsParser.h
@@ -57,19 +57,19 @@ class nsIDTD;
 class nsScanner;
 class nsIRunnable;
 
 #ifdef _MSC_VER
 #pragma warning( disable : 4275 )
 #endif
 
 
-class nsParser : public nsIParser,
-                 public nsIStreamListener,
-                 public nsSupportsWeakReference
+class nsParser MOZ_FINAL : public nsIParser,
+                           public nsIStreamListener,
+                           public nsSupportsWeakReference
 {
     /**
      * Destructor
      * @update  gess5/11/98
      */
     virtual ~nsParser();
 
   public:
--- a/security/manager/ssl/src/nsNSSCertificate.h
+++ b/security/manager/ssl/src/nsNSSCertificate.h
@@ -20,21 +20,21 @@
 #include "certt.h"
 
 namespace mozilla { namespace pkix { class DERArray; } }
 
 class nsAutoString;
 class nsINSSComponent;
 class nsIASN1Sequence;
 
-class nsNSSCertificate : public nsIX509Cert,
-                         public nsIIdentityInfo,
-                         public nsISerializable,
-                         public nsIClassInfo,
-                         public nsNSSShutDownObject
+class nsNSSCertificate MOZ_FINAL : public nsIX509Cert,
+                                   public nsIIdentityInfo,
+                                   public nsISerializable,
+                                   public nsIClassInfo,
+                                   public nsNSSShutDownObject
 {
 public:
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_NSIX509CERT
   NS_DECL_NSIIDENTITYINFO
   NS_DECL_NSISERIALIZABLE
   NS_DECL_NSICLASSINFO
 
--- a/security/manager/ssl/src/nsNSSComponent.h
+++ b/security/manager/ssl/src/nsNSSComponent.h
@@ -98,20 +98,20 @@ class NS_NO_VTABLE nsINSSComponent : pub
 };
 
 NS_DEFINE_STATIC_IID_ACCESSOR(nsINSSComponent, NS_INSSCOMPONENT_IID)
 
 class nsNSSShutDownList;
 class nsCertVerificationThread;
 
 // Implementation of the PSM component interface.
-class nsNSSComponent : public nsIEntropyCollector,
-                       public nsINSSComponent,
-                       public nsIObserver,
-                       public nsSupportsWeakReference
+class nsNSSComponent MOZ_FINAL : public nsIEntropyCollector,
+                                 public nsINSSComponent,
+                                 public nsIObserver,
+                                 public nsSupportsWeakReference
 {
   typedef mozilla::Mutex Mutex;
 
 public:
   NS_DEFINE_STATIC_CID_ACCESSOR( NS_NSSCOMPONENT_CID )
 
   nsNSSComponent();
 
--- a/toolkit/components/autocomplete/nsAutoCompleteController.h
+++ b/toolkit/components/autocomplete/nsAutoCompleteController.h
@@ -15,20 +15,20 @@
 #include "nsString.h"
 #include "nsITreeView.h"
 #include "nsITreeSelection.h"
 #include "nsITimer.h"
 #include "nsTArray.h"
 #include "nsCOMArray.h"
 #include "nsCycleCollectionParticipant.h"
 
-class nsAutoCompleteController : public nsIAutoCompleteController,
-                                 public nsIAutoCompleteObserver,
-                                 public nsITimerCallback,
-                                 public nsITreeView
+class nsAutoCompleteController MOZ_FINAL : public nsIAutoCompleteController,
+                                           public nsIAutoCompleteObserver,
+                                           public nsITimerCallback,
+                                           public nsITreeView
 {
 public:
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsAutoCompleteController,
                                            nsIAutoCompleteController)
   NS_DECL_NSIAUTOCOMPLETECONTROLLER
   NS_DECL_NSIAUTOCOMPLETEOBSERVER
   NS_DECL_NSITREEVIEW
--- a/toolkit/components/downloads/nsDownloadManager.h
+++ b/toolkit/components/downloads/nsDownloadManager.h
@@ -259,17 +259,17 @@ private:
   nsCOMPtr<mozIStorageStatement> mGetPrivateIdsForURIStatement;
   nsAutoPtr<mozStorageTransaction> mHistoryTransaction;
 
   static nsDownloadManager *gDownloadManagerService;
 
   friend class nsDownload;
 };
 
-class nsDownload : public nsIDownload
+class nsDownload MOZ_FINAL : public nsIDownload
 {
 public:
   NS_DECL_NSIWEBPROGRESSLISTENER
   NS_DECL_NSIWEBPROGRESSLISTENER2
   NS_DECL_NSITRANSFER
   NS_DECL_NSIDOWNLOAD
   NS_DECL_ISUPPORTS
 
--- a/widget/xpwidgets/GfxInfoX11.h
+++ b/widget/xpwidgets/GfxInfoX11.h
@@ -8,17 +8,17 @@
 #ifndef __GfxInfoX11_h__
 #define __GfxInfoX11_h__
 
 #include "GfxInfoBase.h"
 
 namespace mozilla {
 namespace widget {
 
-class GfxInfo : public GfxInfoBase
+class GfxInfo MOZ_FINAL : public GfxInfoBase
 {
 public:
 
   // We only declare the subset of nsIGfxInfo that we actually implement. The
   // rest is brought forward from GfxInfoBase.
   NS_IMETHOD GetD2DEnabled(bool *aD2DEnabled);
   NS_IMETHOD GetDWriteEnabled(bool *aDWriteEnabled);
   NS_IMETHOD GetDWriteVersion(nsAString & aDwriteVersion);
--- a/widget/xpwidgets/PuppetWidget.h
+++ b/widget/xpwidgets/PuppetWidget.h
@@ -32,17 +32,18 @@ namespace mozilla {
 namespace dom {
 class TabChild;
 }
 
 namespace widget {
 
 struct AutoCacheNativeKeyCommands;
 
-class PuppetWidget : public nsBaseWidget, public nsSupportsWeakReference
+class PuppetWidget MOZ_FINAL : 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.
   static const size_t kMaxDimension;
 
--- a/xpcom/base/nsCycleCollector.cpp
+++ b/xpcom/base/nsCycleCollector.cpp
@@ -2011,17 +2011,17 @@ nsCycleCollectorLoggerConstructor(nsISup
 
   return logger->QueryInterface(aIID, aInstancePtr);
 }
 
 ////////////////////////////////////////////////////////////////////////
 // Bacon & Rajan's |MarkRoots| routine.
 ////////////////////////////////////////////////////////////////////////
 
-class CCGraphBuilder : public nsCycleCollectionTraversalCallback,
+class CCGraphBuilder MOZ_FINAL : public nsCycleCollectionTraversalCallback,
   public nsCycleCollectionNoteRootCallback
 {
 private:
   CCGraph& mGraph;
   CycleCollectorResults& mResults;
   NodePool::Builder mNodeBuilder;
   EdgePool::Builder mEdgeBuilder;
   PtrInfo* mCurrPi;
--- a/xpcom/base/nsMemoryReporterManager.h
+++ b/xpcom/base/nsMemoryReporterManager.h
@@ -17,17 +17,17 @@
 class nsITimer;
 
 namespace mozilla {
 namespace dom {
 class MemoryReport;
 }
 }
 
-class nsMemoryReporterManager : public nsIMemoryReporterManager
+class nsMemoryReporterManager MOZ_FINAL : public nsIMemoryReporterManager
 {
   virtual ~nsMemoryReporterManager();
 
 public:
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_NSIMEMORYREPORTERMANAGER
 
   nsMemoryReporterManager();
--- a/xpcom/io/nsBinaryStream.h
+++ b/xpcom/io/nsBinaryStream.h
@@ -20,17 +20,17 @@
      0x4672,                                         \
     {0x84, 0x4e, 0x6e, 0x7d, 0xd8, 0x3b, 0xa4, 0x84} \
 }
 
 #define NS_BINARYOUTPUTSTREAM_CONTRACTID "@mozilla.org/binaryoutputstream;1"
 
 // Derive from nsIObjectOutputStream so this class can be used as a superclass
 // by nsObjectOutputStream.
-class nsBinaryOutputStream : public nsIObjectOutputStream
+class nsBinaryOutputStream MOZ_FINAL : public nsIObjectOutputStream
 {
 public:
   nsBinaryOutputStream()
   {
   }
 
 protected:
   // nsISupports methods
@@ -63,19 +63,17 @@ private:
    0xc521a612,                                     \
    0x2aad,                                         \
    0x46db,                                         \
   {0xb6, 0xab, 0x3b, 0x82, 0x1f, 0xb1, 0x50, 0xb1} \
 }
 
 #define NS_BINARYINPUTSTREAM_CONTRACTID "@mozilla.org/binaryinputstream;1"
 
-// Derive from nsIObjectInputStream so this class can be used as a superclass
-// by nsObjectInputStream.
-class nsBinaryInputStream : public nsIObjectInputStream
+class nsBinaryInputStream MOZ_FINAL : public nsIObjectInputStream
 {
 public:
   nsBinaryInputStream()
   {
   }
 
 protected:
   // nsISupports methods
--- a/xpfe/appshell/nsContentTreeOwner.h
+++ b/xpfe/appshell/nsContentTreeOwner.h
@@ -17,21 +17,21 @@
 #include "nsIInterfaceRequestor.h"
 #include "nsIInterfaceRequestorUtils.h"
 #include "nsIWebBrowserChrome3.h"
 #include "nsIWindowProvider.h"
 
 class nsXULWindow;
 class nsSiteWindow;
 
-class nsContentTreeOwner : public nsIDocShellTreeOwner,
-                           public nsIBaseWindow,
-                           public nsIInterfaceRequestor,
-                           public nsIWebBrowserChrome3,
-                           public nsIWindowProvider
+class nsContentTreeOwner MOZ_FINAL : public nsIDocShellTreeOwner,
+                                     public nsIBaseWindow,
+                                     public nsIInterfaceRequestor,
+                                     public nsIWebBrowserChrome3,
+                                     public nsIWindowProvider
 {
 friend class nsXULWindow;
 friend class nsSiteWindow;
 
 public:
    NS_DECL_ISUPPORTS
 
    NS_DECL_NSIBASEWINDOW
--- a/xpfe/components/directory/nsDirectoryViewer.h
+++ b/xpfe/components/directory/nsDirectoryViewer.h
@@ -29,22 +29,22 @@ public:
     // nsISupports interface
     NS_DECL_ISUPPORTS
     NS_DECL_NSIDOCUMENTLOADERFACTORY
 
 protected:
     virtual ~nsDirectoryViewerFactory();
 };
 
-class nsHTTPIndex : public nsIHTTPIndex,
-                    public nsIRDFDataSource,
-                    public nsIStreamListener,
-                    public nsIDirIndexListener,
-                    public nsIInterfaceRequestor,
-                    public nsIFTPEventSink
+class nsHTTPIndex MOZ_FINAL : public nsIHTTPIndex,
+                              public nsIRDFDataSource,
+                              public nsIStreamListener,
+                              public nsIDirIndexListener,
+                              public nsIInterfaceRequestor,
+                              public nsIFTPEventSink
 {
 private:
 
     // note: these are NOT statics due to the native of nsHTTPIndex
     // where it may or may not be treated as a singleton
 
     nsCOMPtr<nsIRDFResource>     kNC_Child;
     nsCOMPtr<nsIRDFResource>     kNC_Comment;