blob: 425c7e513bf7abcfea9dfb86cb2df2ebb326c516 [file] [log] [blame] [edit]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/browser/state_store_test_observer.h"
#include "base/containers/contains.h"
#include "content/public/browser/browser_thread.h"
#include "extensions/browser/extension_system.h"
#include "extensions/common/extension_id.h"
namespace extensions {
StateStoreTestObserver::StateStoreTestObserver(content::BrowserContext* context)
: state_store_(ExtensionSystem::Get(context)->state_store()) {
observed_.Observe(state_store_.get());
}
StateStoreTestObserver::~StateStoreTestObserver() = default;
void StateStoreTestObserver::WaitForExtensionAndKey(
const ExtensionId& extension_id,
const std::string& key) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
waiting_for_map_key_ = std::make_pair(extension_id, key);
// If the key has already been reported, flush the state store.
if (base::Contains(ids_and_keys_with_writes_, waiting_for_map_key_)) {
state_store_->FlushForTesting(run_loop_.QuitWhenIdleClosure());
}
run_loop_.Run();
}
void StateStoreTestObserver::WillSetExtensionValue(
const ExtensionId& extension_id,
const std::string& key) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
auto map_key = std::make_pair(extension_id, key);
// If the key matches, flush the state store. Otherwise, add it to the
// map.
if (map_key == waiting_for_map_key_) {
state_store_->FlushForTesting(run_loop_.QuitWhenIdleClosure());
} else {
ids_and_keys_with_writes_.emplace(std::move(map_key));
}
}
} // namespace extensions