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
|
// 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.
#include "chrome/browser/transition_manager/full_browser_transition_manager.h"
#include "base/containers/contains.h"
#include "base/no_destructor.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_key.h"
FullBrowserTransitionManager::FullBrowserTransitionManager() = default;
FullBrowserTransitionManager::~FullBrowserTransitionManager() = default;
// static
FullBrowserTransitionManager* FullBrowserTransitionManager::Get() {
static base::NoDestructor<FullBrowserTransitionManager> instance;
return instance.get();
}
bool FullBrowserTransitionManager::RegisterCallbackOnProfileCreation(
SimpleFactoryKey* key,
OnProfileCreationCallback callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
auto iterator = simple_key_to_profile_.find(key);
if (iterator != simple_key_to_profile_.end()) {
// Profile has already been created, run the callback now.
std::move(callback).Run(iterator->second);
return true;
} else {
on_profile_creation_callbacks_[key].push_back(std::move(callback));
return false;
}
}
void FullBrowserTransitionManager::OnProfileCreated(Profile* profile) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
SimpleFactoryKey* key = profile->GetProfileKey();
DCHECK(!base::Contains(simple_key_to_profile_, key));
// Register the mapping so that it can be used if deferred callbacks are added
// later.
simple_key_to_profile_[key] = profile;
auto map_iterator = on_profile_creation_callbacks_.find(key);
if (map_iterator != on_profile_creation_callbacks_.end()) {
for (OnProfileCreationCallback& callback : map_iterator->second) {
std::move(callback).Run(profile);
}
map_iterator->second.clear();
}
}
void FullBrowserTransitionManager::OnProfileDestroyed(Profile* profile) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
SimpleFactoryKey* key = profile->GetProfileKey();
simple_key_to_profile_.erase(key);
on_profile_creation_callbacks_.erase(key);
}
|