| // Copyright 2017 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_ALLOCATOR_ALLOCATOR_INTERCEPTION_MAC_H_ | 
 | #define BASE_ALLOCATOR_ALLOCATOR_INTERCEPTION_MAC_H_ | 
 |  | 
 | #include <stddef.h> | 
 |  | 
 | #include "base/base_export.h" | 
 | #include "third_party/apple_apsl/malloc.h" | 
 |  | 
 | namespace base { | 
 | namespace allocator { | 
 |  | 
 | struct MallocZoneFunctions; | 
 |  | 
 | // Saves the function pointers currently used by the default zone. | 
 | void StoreFunctionsForDefaultZone(); | 
 |  | 
 | // Same as StoreFunctionsForDefaultZone, but for all malloc zones. | 
 | void StoreFunctionsForAllZones(); | 
 |  | 
 | // For all malloc zones that have been stored, replace their functions with | 
 | // |functions|. | 
 | void ReplaceFunctionsForStoredZones(const MallocZoneFunctions* functions); | 
 |  | 
 | extern bool g_replaced_default_zone; | 
 |  | 
 | // Calls the original implementation of malloc/calloc prior to interception. | 
 | bool UncheckedMallocMac(size_t size, void** result); | 
 | bool UncheckedCallocMac(size_t num_items, size_t size, void** result); | 
 |  | 
 | // Intercepts calls to default and purgeable malloc zones. Intercepts Core | 
 | // Foundation and Objective-C allocations. | 
 | // Has no effect on the default malloc zone if the allocator shim already | 
 | // performs that interception. | 
 | BASE_EXPORT void InterceptAllocationsMac(); | 
 |  | 
 | // Updates all malloc zones to use their original functions. | 
 | // Also calls ClearAllMallocZonesForTesting. | 
 | BASE_EXPORT void UninterceptMallocZonesForTesting(); | 
 |  | 
 | // Periodically checks for, and shims new malloc zones. Stops checking after 1 | 
 | // minute. | 
 | BASE_EXPORT void PeriodicallyShimNewMallocZones(); | 
 |  | 
 | // Exposed for testing. | 
 | BASE_EXPORT void ShimNewMallocZones(); | 
 | BASE_EXPORT void ReplaceZoneFunctions(ChromeMallocZone* zone, | 
 |                                       const MallocZoneFunctions* functions); | 
 |  | 
 | }  // namespace allocator | 
 | }  // namespace base | 
 |  | 
 | #endif  // BASE_ALLOCATOR_ALLOCATOR_INTERCEPTION_MAC_H_ |