chromium/components/keyed_service/core/keyed_service.h

// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_KEYED_SERVICE_CORE_KEYED_SERVICE_H_
#define COMPONENTS_KEYED_SERVICE_CORE_KEYED_SERVICE_H_

#include "components/keyed_service/core/keyed_service_export.h"

// Interface for keyed services that support two-phase destruction order.
//
// Two-phase shutdown allows keyed services to have a first pass shutdown phase
// where they drop references. Not all services will need this, so there's a
// default implementation. Only once every service has been given a chance to
// drop references are services deleted. In a service's destructor the service
// should *not* request other services from their factories via the relevant
// Context object (e.g., Profile), as the association between that Context
// object and its keyed services is dropped after the shutdown phase.
// Shutdown of KeyedServices is generally initiated by the embedder's
// destruction of Profile (or analogous object).
// CAVEAT: Not all embedders destroy the Profiles (or Profile analogs) as part
// of embedder shutdown, so it is not guaranteed that the keyed service shutdown
// process will run at shutdown of a given embedder.
class KEYED_SERVICE_EXPORT KeyedService {};

#endif  // COMPONENTS_KEYED_SERVICE_CORE_KEYED_SERVICE_H_