bug 1146027 - more final r=froydnj
authorTrevor Saunders <tbsaunde@tbsaunde.org>
Sat, 21 Mar 2015 14:35:18 -0400
changeset 265756 129094fb7ce9dad99a22a096fd104a1958300e79
parent 265755 8ae8156e09569481842093c54eb4371925c0dd62
child 265757 063b559e525d0cbf43be0efb0ec4bcac3d9055b2
push id830
push userraliiev@mozilla.com
push dateFri, 19 Jun 2015 19:24:37 +0000
treeherdermozilla-release@932614382a68 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersfroydnj
bugs1146027
milestone39.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
bug 1146027 - more final r=froydnj
dom/base/ShadowRoot.h
dom/base/nsDOMAttributeMap.h
dom/base/nsDOMDataChannel.h
dom/base/nsDOMFileReader.h
dom/base/nsGlobalWindow.h
dom/base/nsHTMLContentSerializer.h
dom/base/nsWindowRoot.h
dom/html/HTMLTableElement.cpp
dom/ipc/ContentChild.h
dom/ipc/TabParent.h
dom/svg/SVGFEImageElement.h
embedding/components/commandhandler/nsControllerCommandTable.h
gfx/2d/DrawTargetCairo.h
gfx/layers/ipc/LayerTransactionParent.h
gfx/layers/ipc/ShadowLayers.h
layout/style/Loader.cpp
layout/style/nsDOMCSSRect.h
modules/libpref/nsPrefBranch.h
netwerk/base/BackgroundFileSaver.h
netwerk/base/Dashboard.h
netwerk/base/TLSServerSocket.h
netwerk/base/nsBufferedStreams.h
netwerk/cache2/CacheFile.h
netwerk/dns/DNSRequestChild.h
netwerk/dns/nsIDNService.h
netwerk/protocol/about/nsAboutCache.h
netwerk/protocol/ftp/FTPChannelChild.h
netwerk/protocol/ftp/nsFTPChannel.h
netwerk/protocol/http/HttpChannelParent.h
netwerk/protocol/http/HttpChannelParentListener.h
netwerk/protocol/http/nsHttpConnectionMgr.h
netwerk/protocol/websocket/WebSocketChannelChild.h
netwerk/protocol/wyciwyg/WyciwygChannelChild.h
netwerk/protocol/wyciwyg/nsWyciwygChannel.h
xpcom/io/nsPipe3.cpp
xpcom/threads/ThreadStackHelper.cpp
--- a/dom/base/ShadowRoot.h
+++ b/dom/base/ShadowRoot.h
@@ -23,18 +23,18 @@ class nsTagNameMapEntry;
 namespace mozilla {
 namespace dom {
 
 class Element;
 class HTMLContentElement;
 class HTMLShadowElement;
 class ShadowRootStyleSheetList;
 
-class ShadowRoot : public DocumentFragment,
-                   public nsStubMutationObserver
+class ShadowRoot final : public DocumentFragment,
+                         public nsStubMutationObserver
 {
   friend class ShadowRootStyleSheetList;
 public:
   NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ShadowRoot,
                                            DocumentFragment)
   NS_DECL_ISUPPORTS_INHERITED
 
   NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED
--- a/dom/base/nsDOMAttributeMap.h
+++ b/dom/base/nsDOMAttributeMap.h
@@ -76,18 +76,18 @@ public:
     }
   enum { ALLOW_MEMMOVE = true };
 
 private:
   nsAttrKey mKey;
 };
 
 // Helper class that implements the nsIDOMMozNamedAttrMap interface.
-class nsDOMAttributeMap : public nsIDOMMozNamedAttrMap
-                        , public nsWrapperCache
+class nsDOMAttributeMap final : public nsIDOMMozNamedAttrMap
+                              , public nsWrapperCache
 {
 public:
   typedef mozilla::dom::Attr Attr;
   typedef mozilla::dom::Element Element;
   typedef mozilla::ErrorResult ErrorResult;
 
   explicit nsDOMAttributeMap(Element *aContent);
 
--- a/dom/base/nsDOMDataChannel.h
+++ b/dom/base/nsDOMDataChannel.h
@@ -19,19 +19,19 @@
 namespace mozilla {
 namespace dom {
 class File;
 }
 
 class DataChannel;
 };
 
-class nsDOMDataChannel : public mozilla::DOMEventTargetHelper,
-                         public nsIDOMDataChannel,
-                         public mozilla::DataChannelListener
+class nsDOMDataChannel final : public mozilla::DOMEventTargetHelper,
+                               public nsIDOMDataChannel,
+                               public mozilla::DataChannelListener
 {
 public:
   nsDOMDataChannel(already_AddRefed<mozilla::DataChannel>& aDataChannel,
                    nsPIDOMWindow* aWindow);
 
   nsresult Init(nsPIDOMWindow* aDOMWindow);
 
   NS_DECL_ISUPPORTS_INHERITED
--- a/dom/base/nsDOMFileReader.h
+++ b/dom/base/nsDOMFileReader.h
@@ -25,20 +25,20 @@
 #include "FileIOObject.h"
 
 namespace mozilla {
 namespace dom {
 class File;
 }
 }
 
-class nsDOMFileReader : public mozilla::dom::FileIOObject,
-                        public nsIDOMFileReader,
-                        public nsIInterfaceRequestor,
-                        public nsSupportsWeakReference
+class nsDOMFileReader final : public mozilla::dom::FileIOObject,
+                              public nsIDOMFileReader,
+                              public nsIInterfaceRequestor,
+                              public nsSupportsWeakReference
 {
   typedef mozilla::ErrorResult ErrorResult;
   typedef mozilla::dom::GlobalObject GlobalObject;
   typedef mozilla::dom::File File;
 public:
   nsDOMFileReader();
 
   NS_DECL_ISUPPORTS_INHERITED
--- a/dom/base/nsGlobalWindow.h
+++ b/dom/base/nsGlobalWindow.h
@@ -262,17 +262,17 @@ CreateVoidVariant()
 // length 1, and then passed back to the newly-created dialog.
 //
 // However, we need to track both the caller-passed value as well as the
 // caller's, so that we can do an origin check (even for primitives) when the
 // value is accessed. This class encapsulates that magic.
 //
 // We also use the same machinery for |returnValue|, which needs similar origin
 // checks.
-class DialogValueHolder : public nsISupports
+class DialogValueHolder final : public nsISupports
 {
 public:
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_CYCLE_COLLECTION_CLASS(DialogValueHolder)
 
   DialogValueHolder(nsIPrincipal* aSubject, nsIVariant* aValue)
     : mOrigin(aSubject)
     , mValue(aValue) {}
--- a/dom/base/nsHTMLContentSerializer.h
+++ b/dom/base/nsHTMLContentSerializer.h
@@ -15,17 +15,17 @@
 #include "mozilla/Attributes.h"
 #include "nsXHTMLContentSerializer.h"
 #include "nsIEntityConverter.h"
 #include "nsString.h"
 
 class nsIContent;
 class nsIAtom;
 
-class nsHTMLContentSerializer : public nsXHTMLContentSerializer {
+class nsHTMLContentSerializer final : public nsXHTMLContentSerializer {
  public:
   nsHTMLContentSerializer();
   virtual ~nsHTMLContentSerializer();
 
   NS_IMETHOD AppendElementStart(mozilla::dom::Element* aElement,
                                 mozilla::dom::Element* aOriginalElement,
                                 nsAString& aStr) override;
 
--- a/dom/base/nsWindowRoot.h
+++ b/dom/base/nsWindowRoot.h
@@ -21,17 +21,17 @@ class EventChainPreVisitor;
 #include "mozilla/EventListenerManager.h"
 #include "nsIDOMEventTarget.h"
 #include "nsPIWindowRoot.h"
 #include "nsCycleCollectionParticipant.h"
 #include "nsAutoPtr.h"
 #include "nsTHashtable.h"
 #include "nsHashKeys.h"
 
-class nsWindowRoot : public nsPIWindowRoot
+class nsWindowRoot final : public nsPIWindowRoot
 {
 public:
   explicit nsWindowRoot(nsPIDOMWindow* aWindow);
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_NSIDOMEVENTTARGET
 
   virtual mozilla::EventListenerManager*
--- a/dom/html/HTMLTableElement.cpp
+++ b/dom/html/HTMLTableElement.cpp
@@ -18,18 +18,18 @@ NS_IMPL_NS_NEW_HTML_ELEMENT(Table)
 namespace mozilla {
 namespace dom {
 
 /* ------------------------------ TableRowsCollection -------------------------------- */
 /**
  * This class provides a late-bound collection of rows in a table.
  * mParent is NOT ref-counted to avoid circular references
  */
-class TableRowsCollection : public nsIHTMLCollection,
-                            public nsWrapperCache
+class TableRowsCollection final : public nsIHTMLCollection,
+                                  public nsWrapperCache
 {
 public:
   explicit TableRowsCollection(HTMLTableElement* aParent);
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_NSIDOMHTMLCOLLECTION
 
   virtual Element* GetElementAt(uint32_t aIndex) override;
--- a/dom/ipc/ContentChild.h
+++ b/dom/ipc/ContentChild.h
@@ -47,18 +47,18 @@ namespace dom {
 
 class AlertObserver;
 class PrefObserver;
 class ConsoleListener;
 class PStorageChild;
 class ClonedMessageData;
 class TabChild;
 
-class ContentChild : public PContentChild
-                   , public nsIContentChild
+class ContentChild final : public PContentChild
+                         , public nsIContentChild
 {
     typedef mozilla::dom::ClonedMessageData ClonedMessageData;
     typedef mozilla::ipc::OptionalURIParams OptionalURIParams;
     typedef mozilla::ipc::PFileDescriptorSetChild PFileDescriptorSetChild;
     typedef mozilla::ipc::URIParams URIParams;
 
 public:
     ContentChild();
--- a/dom/ipc/TabParent.h
+++ b/dom/ipc/TabParent.h
@@ -53,22 +53,22 @@ struct IMENotification;
 
 namespace dom {
 
 class ClonedMessageData;
 class nsIContentParent;
 class Element;
 struct StructuredCloneData;
 
-class TabParent : public PBrowserParent 
-                , public nsITabParent 
-                , public nsIAuthPromptProvider
-                , public nsISecureBrowserUI
-                , public nsSupportsWeakReference
-                , public TabContext
+class TabParent final : public PBrowserParent
+                      , public nsITabParent
+                      , public nsIAuthPromptProvider
+                      , public nsISecureBrowserUI
+                      , public nsSupportsWeakReference
+                      , public TabContext
 {
     typedef mozilla::dom::ClonedMessageData ClonedMessageData;
 
     virtual ~TabParent();
 
 public:
     // nsITabParent
     NS_DECL_NSITABPARENT
--- a/dom/svg/SVGFEImageElement.h
+++ b/dom/svg/SVGFEImageElement.h
@@ -14,18 +14,18 @@ class SVGFEImageFrame;
 nsresult NS_NewSVGFEImageElement(nsIContent **aResult,
                                  already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
 
 namespace mozilla {
 namespace dom {
 
 typedef nsSVGFE SVGFEImageElementBase;
 
-class SVGFEImageElement : public SVGFEImageElementBase,
-                          public nsImageLoadingContent
+class SVGFEImageElement final : public SVGFEImageElementBase,
+                                public nsImageLoadingContent
 {
   friend class ::SVGFEImageFrame;
 
 protected:
   friend nsresult (::NS_NewSVGFEImageElement(nsIContent **aResult,
                                              already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo));
   explicit SVGFEImageElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
   virtual ~SVGFEImageElement();
--- a/embedding/components/commandhandler/nsControllerCommandTable.h
+++ b/embedding/components/commandhandler/nsControllerCommandTable.h
@@ -8,18 +8,18 @@
 
 
 #include "nsIControllerCommandTable.h"
 #include "nsWeakReference.h"
 #include "nsInterfaceHashtable.h"
 
 class nsIControllerCommand;
 
-class  nsControllerCommandTable : public nsIControllerCommandTable,
-                                  public nsSupportsWeakReference
+class  nsControllerCommandTable final : public nsIControllerCommandTable,
+                                        public nsSupportsWeakReference
 {
 public:
 
                   nsControllerCommandTable();
 
   NS_DECL_ISUPPORTS
 
   NS_DECL_NSICONTROLLERCOMMANDTABLE
--- a/gfx/2d/DrawTargetCairo.h
+++ b/gfx/2d/DrawTargetCairo.h
@@ -44,17 +44,17 @@ class GradientStopsCairo : public Gradie
 
     virtual BackendType GetBackendType() const { return BackendType::CAIRO; }
 
   private:
     std::vector<GradientStop> mStops;
     ExtendMode mExtendMode;
 };
 
-class DrawTargetCairo : public DrawTarget
+class DrawTargetCairo final : public DrawTarget
 {
 public:
   MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(DrawTargetCairo, override)
   friend class BorrowedCairoContext;
 
   DrawTargetCairo();
   virtual ~DrawTargetCairo();
 
--- a/gfx/layers/ipc/LayerTransactionParent.h
+++ b/gfx/layers/ipc/LayerTransactionParent.h
@@ -30,18 +30,18 @@ class RenderFrameParent;
 namespace layers {
 
 class Layer;
 class LayerManagerComposite;
 class ShadowLayerParent;
 class CompositableParent;
 class ShadowLayersManager;
 
-class LayerTransactionParent : public PLayerTransactionParent,
-                               public CompositableParentManager
+class LayerTransactionParent final : public PLayerTransactionParent,
+                                     public CompositableParentManager
 {
   typedef mozilla::layout::RenderFrameParent RenderFrameParent;
   typedef InfallibleTArray<Edit> EditArray;
   typedef InfallibleTArray<EditReply> EditReplyArray;
   typedef InfallibleTArray<AsyncChildMessageData> AsyncChildMessageArray;
   typedef InfallibleTArray<PluginWindowData> PluginsArray;
 
 public:
--- a/gfx/layers/ipc/ShadowLayers.h
+++ b/gfx/layers/ipc/ShadowLayers.h
@@ -126,17 +126,17 @@ class Transaction;
  * Layer transactions maintain the shape of the shadow layer tree, and
  * synchronize the texture data held by compositables. Layer transactions
  * are always between the content thread and the compositor thread.
  * Compositable transactions are subset of a layer transaction with which only
  * compositables and textures can be manipulated, and does not always originate
  * from the content thread. (See CompositableForwarder.h and ImageBridgeChild.h)
  */
 
-class ShadowLayerForwarder : public CompositableForwarder
+class ShadowLayerForwarder final : public CompositableForwarder
 {
   friend class ClientLayerManager;
 
 public:
   virtual ~ShadowLayerForwarder();
 
   /**
    * Setup the IPDL actor for aCompositable to be part of layers
--- a/layout/style/Loader.cpp
+++ b/layout/style/Loader.cpp
@@ -97,19 +97,19 @@ using namespace mozilla::dom;
 
 namespace mozilla {
 namespace css {
 
 /*********************************************
  * Data needed to properly load a stylesheet *
  *********************************************/
 
-class SheetLoadData : public nsIRunnable,
-                      public nsIUnicharStreamLoaderObserver,
-                      public nsIThreadObserver
+class SheetLoadData final : public nsIRunnable,
+                            public nsIUnicharStreamLoaderObserver,
+                            public nsIThreadObserver
 {
 protected:
   virtual ~SheetLoadData(void);
 
 public:
   // Data for loading a sheet linked from a document
   SheetLoadData(Loader* aLoader,
                 const nsSubstring& aTitle,
--- a/layout/style/nsDOMCSSRect.h
+++ b/layout/style/nsDOMCSSRect.h
@@ -11,18 +11,18 @@
 #include "mozilla/Attributes.h"
 #include "nsIDOMRect.h"
 #include "nsAutoPtr.h"
 #include "nsCycleCollectionParticipant.h"
 #include "nsWrapperCache.h"
 
 class nsROCSSPrimitiveValue;
 
-class nsDOMCSSRect : public nsIDOMRect,
-                     public nsWrapperCache
+class nsDOMCSSRect final : public nsIDOMRect,
+                           public nsWrapperCache
 {
 public:
   nsDOMCSSRect(nsROCSSPrimitiveValue* aTop,
                nsROCSSPrimitiveValue* aRight,
                nsROCSSPrimitiveValue* aBottom,
                nsROCSSPrimitiveValue* aLeft);
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
--- a/modules/libpref/nsPrefBranch.h
+++ b/modules/libpref/nsPrefBranch.h
@@ -170,19 +170,19 @@ class PrefCallback : public PLDHashEntry
     nsISupports          *mCanonical;
 
     bool IsWeak() const
     {
       return !!mWeakRef;
     }
 };
 
-class nsPrefBranch : public nsIPrefBranchInternal,
-                     public nsIObserver,
-                     public nsSupportsWeakReference
+class nsPrefBranch final : public nsIPrefBranchInternal,
+                           public nsIObserver,
+                           public nsSupportsWeakReference
 {
   friend class mozilla::PreferenceServiceReporter;
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIPREFBRANCH
   NS_DECL_NSIPREFBRANCH2
   NS_DECL_NSIOBSERVER
 
@@ -223,18 +223,18 @@ private:
   nsCString             mPrefRoot;
   bool                  mIsDefault;
 
   bool                  mFreeingObserverList;
   nsClassHashtable<PrefCallback, PrefCallback> mObservers;
 };
 
 
-class nsPrefLocalizedString : public nsIPrefLocalizedString,
-                              public nsISupportsString
+class nsPrefLocalizedString final : public nsIPrefLocalizedString,
+                                    public nsISupportsString
 {
 public:
   nsPrefLocalizedString();
 
   NS_DECL_ISUPPORTS
   NS_FORWARD_NSISUPPORTSSTRING(mUnicodeString->)
   NS_FORWARD_NSISUPPORTSPRIMITIVE(mUnicodeString->)
 
--- a/netwerk/base/BackgroundFileSaver.h
+++ b/netwerk/base/BackgroundFileSaver.h
@@ -333,18 +333,18 @@ private:
    */
   nsCOMPtr<nsIOutputStreamCallback> mAsyncWaitCallback;
 };
 
 ////////////////////////////////////////////////////////////////////////////////
 //// BackgroundFileSaverStreamListener. This class is instantiated by
 // nsExternalHelperAppService, DownloadCore.jsm, and possibly others.
 
-class BackgroundFileSaverStreamListener : public BackgroundFileSaver
-                                        , public nsIStreamListener
+class BackgroundFileSaverStreamListener final : public BackgroundFileSaver
+                                              , public nsIStreamListener
 {
 public:
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_NSIREQUESTOBSERVER
   NS_DECL_NSISTREAMLISTENER
 
   BackgroundFileSaverStreamListener();
 
--- a/netwerk/base/Dashboard.h
+++ b/netwerk/base/Dashboard.h
@@ -22,17 +22,17 @@ namespace mozilla {
 namespace net {
 
 class SocketData;
 class HttpData;
 class DnsData;
 class WebSocketRequest;
 class ConnectionData;
 
-class Dashboard
+class Dashboard final
     : public nsIDashboard
     , public nsIDashboardEventNotifier
 {
 public:
     NS_DECL_THREADSAFE_ISUPPORTS
     NS_DECL_NSIDASHBOARD
     NS_DECL_NSIDASHBOARDEVENTNOTIFIER
 
--- a/netwerk/base/TLSServerSocket.h
+++ b/netwerk/base/TLSServerSocket.h
@@ -11,18 +11,18 @@
 #include "nsServerSocket.h"
 #include "nsString.h"
 #include "mozilla/Mutex.h"
 #include "seccomon.h"
 
 namespace mozilla {
 namespace net {
 
-class TLSServerSocket : public nsServerSocket
-                      , public nsITLSServerSocket
+class TLSServerSocket final : public nsServerSocket
+                            , public nsITLSServerSocket
 {
 public:
   NS_DECL_ISUPPORTS_INHERITED
   NS_FORWARD_NSISERVERSOCKET(nsServerSocket::)
   NS_DECL_NSITLSSERVERSOCKET
 
   // Override methods from nsServerSocket
   virtual void CreateClientTransport(PRFileDesc* clientFD,
--- a/netwerk/base/nsBufferedStreams.h
+++ b/netwerk/base/nsBufferedStreams.h
@@ -83,20 +83,20 @@ protected:
     virtual ~nsBufferedInputStream() {}
 
     NS_IMETHOD Fill() override;
     NS_IMETHOD Flush() override { return NS_OK; } // no-op for input streams
 };
 
 ////////////////////////////////////////////////////////////////////////////////
 
-class nsBufferedOutputStream : public nsBufferedStream, 
-                               public nsISafeOutputStream,
-                               public nsIBufferedOutputStream,
-                               public nsIStreamBufferAccess
+class nsBufferedOutputStream final : public nsBufferedStream,
+                                     public nsISafeOutputStream,
+                                     public nsIBufferedOutputStream,
+                                     public nsIStreamBufferAccess
 {
 public:
     NS_DECL_ISUPPORTS_INHERITED
     NS_DECL_NSIOUTPUTSTREAM
     NS_DECL_NSISAFEOUTPUTSTREAM
     NS_DECL_NSIBUFFEREDOUTPUTSTREAM
     NS_DECL_NSISTREAMBUFFERACCESS
 
--- a/netwerk/cache2/CacheFile.h
+++ b/netwerk/cache2/CacheFile.h
@@ -39,19 +39,19 @@ public:
 
   NS_IMETHOD OnFileReady(nsresult aResult, bool aIsNew) = 0;
   NS_IMETHOD OnFileDoomed(nsresult aResult) = 0;
 };
 
 NS_DEFINE_STATIC_IID_ACCESSOR(CacheFileListener, CACHEFILELISTENER_IID)
 
 
-class CacheFile : public CacheFileChunkListener
-                , public CacheFileIOListener
-                , public CacheFileMetadataListener
+class CacheFile final : public CacheFileChunkListener
+                      , public CacheFileIOListener
+                      , public CacheFileMetadataListener
 {
 public:
   NS_DECL_THREADSAFE_ISUPPORTS
 
   CacheFile();
 
   nsresult Init(const nsACString &aKey,
                 bool aCreateNew,
--- a/netwerk/dns/DNSRequestChild.h
+++ b/netwerk/dns/DNSRequestChild.h
@@ -11,17 +11,17 @@
 #include "nsICancelable.h"
 #include "nsIDNSRecord.h"
 #include "nsIDNSListener.h"
 #include "nsIEventTarget.h"
 
 namespace mozilla {
 namespace net {
 
-class DNSRequestChild
+class DNSRequestChild final
   : public PDNSRequestChild
   , public nsICancelable
 {
 public:
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_NSICANCELABLE
 
   DNSRequestChild(const nsCString& aHost, const uint32_t& aFlags,
--- a/netwerk/dns/nsIDNService.h
+++ b/netwerk/dns/nsIDNService.h
@@ -17,19 +17,19 @@
 class nsIPrefBranch;
 
 //-----------------------------------------------------------------------------
 // nsIDNService
 //-----------------------------------------------------------------------------
 
 #define kACEPrefixLen 4 
 
-class nsIDNService : public nsIIDNService,
-                     public nsIObserver,
-                     public nsSupportsWeakReference
+class nsIDNService final : public nsIIDNService,
+                           public nsIObserver,
+                           public nsSupportsWeakReference
 {
 public:
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_NSIIDNSERVICE
   NS_DECL_NSIOBSERVER
 
   nsIDNService();
 
--- a/netwerk/protocol/about/nsAboutCache.h
+++ b/netwerk/protocol/about/nsAboutCache.h
@@ -12,18 +12,18 @@
 
 #include "nsString.h"
 #include "nsIOutputStream.h"
 #include "nsILoadContextInfo.h"
 
 #include "nsCOMPtr.h"
 #include "nsTArray.h"
 
-class nsAboutCache : public nsIAboutModule 
-                   , public nsICacheStorageVisitor
+class nsAboutCache final : public nsIAboutModule
+                         , public nsICacheStorageVisitor
 {
 public:
     NS_DECL_ISUPPORTS
     NS_DECL_NSIABOUTMODULE
     NS_DECL_NSICACHESTORAGEVISITOR
 
     nsAboutCache() {}
 
--- a/netwerk/protocol/ftp/FTPChannelChild.h
+++ b/netwerk/protocol/ftp/FTPChannelChild.h
@@ -24,24 +24,24 @@
 namespace mozilla {
 namespace net {
 
 // This class inherits logic from nsBaseChannel that is not needed for an
 // e10s child channel, but it works.  At some point we could slice up
 // nsBaseChannel and have a new class that has only the common logic for
 // nsFTPChannel/FTPChannelChild.
 
-class FTPChannelChild : public PFTPChannelChild
-                      , public nsBaseChannel
-                      , public nsIFTPChannel
-                      , public nsIUploadChannel
-                      , public nsIResumableChannel
-                      , public nsIProxiedChannel
-                      , public nsIChildChannel
-                      , public nsIDivertableChannel
+class FTPChannelChild final : public PFTPChannelChild
+                            , public nsBaseChannel
+                            , public nsIFTPChannel
+                            , public nsIUploadChannel
+                            , public nsIResumableChannel
+                            , public nsIProxiedChannel
+                            , public nsIChildChannel
+                            , public nsIDivertableChannel
 {
 public:
   typedef ::nsIStreamListener nsIStreamListener;
 
   NS_DECL_ISUPPORTS_INHERITED
   NS_DECL_NSIFTPCHANNEL
   NS_DECL_NSIUPLOADCHANNEL
   NS_DECL_NSIRESUMABLECHANNEL
--- a/netwerk/protocol/ftp/nsFTPChannel.h
+++ b/netwerk/protocol/ftp/nsFTPChannel.h
@@ -15,22 +15,22 @@
 #include "nsIForcePendingChannel.h"
 #include "nsIUploadChannel.h"
 #include "nsIProxyInfo.h"
 #include "nsIProxiedChannel.h"
 #include "nsIResumableChannel.h"
 
 class nsIURI;
 
-class nsFtpChannel : public nsBaseChannel,
-                     public nsIFTPChannel,
-                     public nsIUploadChannel,
-                     public nsIResumableChannel,
-                     public nsIProxiedChannel,
-                     public nsIForcePendingChannel
+class nsFtpChannel final : public nsBaseChannel,
+                           public nsIFTPChannel,
+                           public nsIUploadChannel,
+                           public nsIResumableChannel,
+                           public nsIProxiedChannel,
+                           public           nsIForcePendingChannel
 {
 public:
     NS_DECL_ISUPPORTS_INHERITED
     NS_DECL_NSIUPLOADCHANNEL
     NS_DECL_NSIRESUMABLECHANNEL
     NS_DECL_NSIPROXIEDCHANNEL
 
     nsFtpChannel(nsIURI *uri, nsIProxyInfo *pi)
--- a/netwerk/protocol/http/HttpChannelParent.h
+++ b/netwerk/protocol/http/HttpChannelParent.h
@@ -30,23 +30,23 @@ namespace dom{
 class TabParent;
 class PBrowserOrId;
 }
 
 namespace net {
 
 class HttpChannelParentListener;
 
-class HttpChannelParent : public PHttpChannelParent
-                        , public nsIParentRedirectingChannel
-                        , public nsIProgressEventSink
-                        , public nsIInterfaceRequestor
-                        , public ADivertableParentChannel
-                        , public nsIAuthPromptProvider
-                        , public DisconnectableParent
+class HttpChannelParent final : public PHttpChannelParent
+                              , public nsIParentRedirectingChannel
+                              , public nsIProgressEventSink
+                              , public nsIInterfaceRequestor
+                              , public ADivertableParentChannel
+                              , public nsIAuthPromptProvider
+                              , public DisconnectableParent
 {
   virtual ~HttpChannelParent();
 
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIREQUESTOBSERVER
   NS_DECL_NSISTREAMLISTENER
   NS_DECL_NSIPARENTCHANNEL
--- a/netwerk/protocol/http/HttpChannelParentListener.h
+++ b/netwerk/protocol/http/HttpChannelParentListener.h
@@ -14,20 +14,20 @@
 
 class nsIParentChannel;
 
 namespace mozilla {
 namespace net {
 
 class HttpChannelParent;
 
-class HttpChannelParentListener : public nsIInterfaceRequestor
-                                 , public nsIChannelEventSink
-                                 , public nsIRedirectResultListener
-                                 , public nsIStreamListener
+class HttpChannelParentListener final : public nsIInterfaceRequestor
+                                      , public nsIChannelEventSink
+                                      , public nsIRedirectResultListener
+                                      , public nsIStreamListener
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIINTERFACEREQUESTOR
   NS_DECL_NSICHANNELEVENTSINK
   NS_DECL_NSIREDIRECTRESULTLISTENER
   NS_DECL_NSIREQUESTOBSERVER
   NS_DECL_NSISTREAMLISTENER
--- a/netwerk/protocol/http/nsHttpConnectionMgr.h
+++ b/netwerk/protocol/http/nsHttpConnectionMgr.h
@@ -26,18 +26,18 @@ class nsIHttpUpgradeListener;
 namespace mozilla {
 namespace net {
 class EventTokenBucket;
 class NullHttpTransaction;
 struct HttpRetParams;
 
 //-----------------------------------------------------------------------------
 
-class nsHttpConnectionMgr : public nsIObserver
-                          , public AltSvcCache
+class nsHttpConnectionMgr final : public nsIObserver
+                                , public AltSvcCache
 {
 public:
     NS_DECL_THREADSAFE_ISUPPORTS
     NS_DECL_NSIOBSERVER
 
     // parameter names
     enum nsParamName {
         MAX_CONNECTIONS,
--- a/netwerk/protocol/websocket/WebSocketChannelChild.h
+++ b/netwerk/protocol/websocket/WebSocketChannelChild.h
@@ -12,18 +12,18 @@
 #include "nsString.h"
 
 namespace mozilla {
 namespace net {
 
 class ChannelEvent;
 class ChannelEventQueue;
 
-class WebSocketChannelChild : public BaseWebSocketChannel,
-                              public PWebSocketChild
+class WebSocketChannelChild final : public BaseWebSocketChannel,
+                                    public PWebSocketChild
 {
  public:
   explicit WebSocketChannelChild(bool aSecure);
 
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_NSITHREADRETARGETABLEREQUEST
 
   // nsIWebSocketChannel methods BaseWebSocketChannel didn't implement for us
--- a/netwerk/protocol/wyciwyg/WyciwygChannelChild.h
+++ b/netwerk/protocol/wyciwyg/WyciwygChannelChild.h
@@ -31,19 +31,19 @@ enum WyciwygChannelChildState {
 
   // States when writing to the cache
   WCC_ONWRITE,
   WCC_ONCLOSED
 };
 
 
 // Header file contents
-class WyciwygChannelChild : public PWyciwygChannelChild
-                          , public nsIWyciwygChannel
-                          , public PrivateBrowsingChannel<WyciwygChannelChild>
+class WyciwygChannelChild final : public PWyciwygChannelChild
+                                , public nsIWyciwygChannel
+                                , public PrivateBrowsingChannel<WyciwygChannelChild>
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIREQUEST
   NS_DECL_NSICHANNEL
   NS_DECL_NSIWYCIWYGCHANNEL
 
   WyciwygChannelChild();
--- a/netwerk/protocol/wyciwyg/nsWyciwygChannel.h
+++ b/netwerk/protocol/wyciwyg/nsWyciwygChannel.h
@@ -24,20 +24,20 @@ class nsILoadGroup;
 class nsIOutputStream;
 class nsIProgressEventSink;
 class nsIURI;
 
 extern PRLogModuleInfo * gWyciwygLog;
 
 //-----------------------------------------------------------------------------
 
-class nsWyciwygChannel: public nsIWyciwygChannel,
-                        public nsIStreamListener,
-                        public nsICacheEntryOpenCallback,
-                        public mozilla::net::PrivateBrowsingChannel<nsWyciwygChannel>
+class nsWyciwygChannel final: public nsIWyciwygChannel,
+                              public nsIStreamListener,
+                              public nsICacheEntryOpenCallback,
+                              public mozilla::net::PrivateBrowsingChannel<nsWyciwygChannel>
 {
 public:
     NS_DECL_THREADSAFE_ISUPPORTS
     NS_DECL_NSIREQUEST
     NS_DECL_NSICHANNEL
     NS_DECL_NSIWYCIWYGCHANNEL
     NS_DECL_NSIREQUESTOBSERVER
     NS_DECL_NSISTREAMLISTENER
--- a/xpcom/io/nsPipe3.cpp
+++ b/xpcom/io/nsPipe3.cpp
@@ -134,17 +134,17 @@ struct nsPipeReadState
   // but that drain has been delayed due to an active read.  When the read
   // completes, this flag indicate the drain should then be performed.
   bool     mNeedDrain;
 };
 
 //-----------------------------------------------------------------------------
 
 // an input end of a pipe (maintained as a list of refs within the pipe)
-class nsPipeInputStream
+class nsPipeInputStream final
   : public nsIAsyncInputStream
   , public nsISeekableStream
   , public nsISearchableInputStream
   , public nsICloneableInputStream
   , public nsIClassInfo
 {
 public:
   NS_DECL_THREADSAFE_ISUPPORTS
--- a/xpcom/threads/ThreadStackHelper.cpp
+++ b/xpcom/threads/ThreadStackHelper.cpp
@@ -331,17 +331,17 @@ public:
   }
 
   virtual const CodeModules* Copy() const
   {
     MOZ_CRASH("Not implemented");
   }
 };
 
-class ThreadStackHelper::ThreadContext
+class ThreadStackHelper::ThreadContext final
   : public google_breakpad::MemoryRegion
 {
 public:
 #if defined(MOZ_THREADSTACKHELPER_X86)
   typedef MDRawContextX86 Context;
 #elif defined(MOZ_THREADSTACKHELPER_X64)
   typedef MDRawContextAMD64 Context;
 #elif defined(MOZ_THREADSTACKHELPER_ARM)