mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-23 17:07:31 +09:00
121 lines
3 KiB
C++
121 lines
3 KiB
C++
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef BASE_REFCOUNTED_H_
|
|
#define BASE_REFCOUNTED_H_
|
|
|
|
namespace base {
|
|
|
|
template <typename T>
|
|
class RefCounted {
|
|
public:
|
|
RefCounted() {}
|
|
~RefCounted() {}
|
|
};
|
|
|
|
template <typename T>
|
|
class RefCountedThreadSafe {
|
|
public:
|
|
RefCountedThreadSafe() {}
|
|
~RefCountedThreadSafe() {}
|
|
};
|
|
|
|
} // namespace base
|
|
|
|
// Ignore classes whose inheritance tree ends in WebKit's RefCounted base
|
|
// class. Though prone to error, this pattern is very prevalent in WebKit
|
|
// code, so do not issue any warnings.
|
|
namespace WebKit {
|
|
|
|
template <typename T>
|
|
class RefCounted {
|
|
public:
|
|
RefCounted() {}
|
|
~RefCounted() {}
|
|
};
|
|
|
|
} // namespace WebKit
|
|
|
|
// Unsafe; should error.
|
|
class PublicRefCountedDtorInHeader
|
|
: public base::RefCounted<PublicRefCountedDtorInHeader> {
|
|
public:
|
|
PublicRefCountedDtorInHeader() {}
|
|
~PublicRefCountedDtorInHeader() {}
|
|
|
|
private:
|
|
friend class base::RefCounted<PublicRefCountedDtorInHeader>;
|
|
};
|
|
|
|
// Unsafe; should error.
|
|
class PublicRefCountedThreadSafeDtorInHeader
|
|
: public base::RefCountedThreadSafe<
|
|
PublicRefCountedThreadSafeDtorInHeader> {
|
|
public:
|
|
PublicRefCountedThreadSafeDtorInHeader() {}
|
|
~PublicRefCountedThreadSafeDtorInHeader() {}
|
|
|
|
private:
|
|
friend class base::RefCountedThreadSafe<
|
|
PublicRefCountedThreadSafeDtorInHeader>;
|
|
};
|
|
|
|
// Safe; should not have errors.
|
|
class ProtectedRefCountedDtorInHeader
|
|
: public base::RefCounted<ProtectedRefCountedDtorInHeader> {
|
|
public:
|
|
ProtectedRefCountedDtorInHeader() {}
|
|
|
|
protected:
|
|
~ProtectedRefCountedDtorInHeader() {}
|
|
|
|
private:
|
|
friend class base::RefCounted<ProtectedRefCountedDtorInHeader>;
|
|
};
|
|
|
|
// Safe; should not have errors.
|
|
class PrivateRefCountedDtorInHeader
|
|
: public base::RefCounted<PrivateRefCountedDtorInHeader> {
|
|
public:
|
|
PrivateRefCountedDtorInHeader() {}
|
|
|
|
private:
|
|
~PrivateRefCountedDtorInHeader() {}
|
|
friend class base::RefCounted<PrivateRefCountedDtorInHeader>;
|
|
};
|
|
|
|
// Unsafe; A grandchild class ends up exposing their parent and grandparent's
|
|
// destructors.
|
|
class DerivedProtectedToPublicInHeader
|
|
: public ProtectedRefCountedDtorInHeader {
|
|
public:
|
|
DerivedProtectedToPublicInHeader() {}
|
|
~DerivedProtectedToPublicInHeader() {}
|
|
};
|
|
|
|
// Unsafe; A grandchild ends up implicitly exposing their parent and
|
|
// grantparent's destructors.
|
|
class ImplicitDerivedProtectedToPublicInHeader
|
|
: public ProtectedRefCountedDtorInHeader {
|
|
public:
|
|
ImplicitDerivedProtectedToPublicInHeader() {}
|
|
};
|
|
|
|
// Unsafe-but-ignored; should not have errors.
|
|
class WebKitPublicDtorInHeader
|
|
: public WebKit::RefCounted<WebKitPublicDtorInHeader> {
|
|
public:
|
|
WebKitPublicDtorInHeader() {}
|
|
~WebKitPublicDtorInHeader() {}
|
|
};
|
|
|
|
// Unsafe-but-ignored; should not have errors.
|
|
class WebKitDerivedPublicDtorInHeader
|
|
: public WebKitPublicDtorInHeader {
|
|
public:
|
|
WebKitDerivedPublicDtorInHeader() {}
|
|
~WebKitDerivedPublicDtorInHeader() {}
|
|
};
|
|
|
|
#endif // BASE_REFCOUNTED_H_
|