1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
// Copyright 2019 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_SIMPLE_KEY_MAP_H_
#define COMPONENTS_KEYED_SERVICE_CORE_SIMPLE_KEY_MAP_H_
#include <map>
#include "base/memory/raw_ptr.h"
#include "base/no_destructor.h"
#include "components/keyed_service/core/keyed_service_export.h"
namespace content {
class BrowserContext;
} // namespace content
class SimpleFactoryKey;
// Stores a mapping from BrowserContexts to SimpleFactoryKeys.
//
// Use this class to get the SimpleFactoryKey that is associated with a given
// BrowserContext, when the BrowserContext is available and a
// SimpleKeyedServiceFactory for that BrowserContext is needed. For example,
// inside BuildServiceInstanceFor() in a BrowserContextKeyedServiceFactory that
// depends on a SimpleKeyedServiceFactory.
//
// This mapping is not stored as a member in BrowserContext because
// SimpleFactoryKeys are not a content layer concept, but a components level
// concept.
class KEYED_SERVICE_EXPORT SimpleKeyMap {
public:
static SimpleKeyMap* GetInstance();
SimpleKeyMap(const SimpleKeyMap&) = delete;
SimpleKeyMap& operator=(const SimpleKeyMap&) = delete;
// When |browser_context| creates or takes ownership of a SimpleFactoryKey
// |key|, it should register this association in this map.
void Associate(content::BrowserContext* browser_context,
SimpleFactoryKey* key);
// When |browser_context| is destroyed or loses ownership of a
// SimpleFactoryKey, it should erase its association from this map.
void Dissociate(content::BrowserContext* browser_context);
// Gets the SimpleFactoryKey associated with |browser_context|.
SimpleFactoryKey* GetForBrowserContext(
content::BrowserContext* browser_context);
private:
friend class base::NoDestructor<SimpleKeyMap>;
SimpleKeyMap();
~SimpleKeyMap();
std::map<raw_ptr<content::BrowserContext>,
raw_ptr<SimpleFactoryKey, CtnExperimental>>
mapping_;
};
#endif // COMPONENTS_KEYED_SERVICE_CORE_SIMPLE_KEY_MAP_H_
|