blob: 649f16f2376a26df82090b05fceedc679ebf4ac9 (
plain)
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
// Copyright 2014 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 COMPONENTS_KEYED_SERVICE_IOS_BROWSER_STATE_DEPENDENCY_MANAGER_H_
#define COMPONENTS_KEYED_SERVICE_IOS_BROWSER_STATE_DEPENDENCY_MANAGER_H_
#include "base/callback_forward.h"
#include "base/callback_list.h"
#include "base/macros.h"
#include "components/keyed_service/core/dependency_manager.h"
#include "components/keyed_service/core/keyed_service_export.h"
namespace base {
template <typename T>
struct DefaultSingletonTraits;
} // namespace base
namespace web {
class BrowserState;
}
namespace user_prefs {
class PrefRegistrySyncable;
}
// A singleton that listens for context destruction notifications and
// rebroadcasts them to each KeyedServiceBaseFactory in a safe order
// based on the stated dependencies by each service.
class KEYED_SERVICE_EXPORT BrowserStateDependencyManager
: public DependencyManager {
public:
static BrowserStateDependencyManager* GetInstance();
// Registers context-specific preferences for all services via |registry|.
// |context| should be the BrowserState containing |registry| and is used as
// a key to prevent multiple registrations on the same BrowserState in
// tests.
void RegisterBrowserStatePrefsForServices(
web::BrowserState* context,
user_prefs::PrefRegistrySyncable* registry);
// Called by each BrowserState to alert us of its creation. Service that
// want to be started when BrowserState is created should override the
// ServiceIsCreatedWithBrowserState() method in their factory. Preferences
// registration also happens during that method call.
void CreateBrowserStateServices(web::BrowserState* context);
// Similar to CreateBrowserStateServices(), except this is used for creating
// test BrowserStates - these contexts will not create services for any
// BrowserStateKeyedBaseFactories that return true from
// ServiceIsNULLWhileTesting().
void CreateBrowserStateServicesForTest(web::BrowserState* context);
// Called by each BrowserState to alert us that we should destroy services
// associated with it.
void DestroyBrowserStateServices(web::BrowserState* context);
#ifndef NDEBUG
// Debugging assertion called as part of GetServiceForBrowserState in debug
// mode. This will NOTREACHED() whenever the user is trying to access a stale
// BrowserState*.
void AssertBrowserStateWasntDestroyed(web::BrowserState* context);
// Marks |context| as live (i.e., not stale). This method can be called as a
// safeguard against |AssertBrowserStateWasntDestroyed()| checks going off
// due to |context| aliasing a BrowserState instance from a prior test
// (i.e., 0xWhatever might be created, be destroyed, and then a new
// BrowserState object might be created at 0xWhatever).
void MarkBrowserStateLiveForTesting(web::BrowserState* context);
#endif // NDEBUG
private:
friend struct base::DefaultSingletonTraits<BrowserStateDependencyManager>;
BrowserStateDependencyManager();
~BrowserStateDependencyManager() override;
// Helper function used by CreateBrowserStateServices[ForTest].
void DoCreateBrowserStateServices(web::BrowserState* context,
bool is_testing_context);
#ifndef NDEBUG
// DependencyManager:
void DumpContextDependencies(base::SupportsUserData* context) const final;
#endif // NDEBUG
DISALLOW_COPY_AND_ASSIGN(BrowserStateDependencyManager);
};
#endif // COMPONENTS_KEYED_SERVICE_IOS_BROWSER_STATE_DEPENDENCY_MANAGER_H_
|