|  | // 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_ |