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
|
// Copyright 2025 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/extension_registry_test_helper.h"
#include "base/run_loop.h"
#include "content/public/browser/browser_context.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/service_worker/service_worker_test_utils.h"
namespace extensions {
ExtensionRegistryTestHelper::ExtensionRegistryTestHelper(
const char* extension_id,
content::BrowserContext* context)
: extension_id_(extension_id), context_(context) {
scoped_observation_.Observe(extensions::ExtensionRegistry::Get(context_));
}
ExtensionRegistryTestHelper::~ExtensionRegistryTestHelper() = default;
std::optional<int> ExtensionRegistryTestHelper::WaitForManifestVersion() {
if (manifest_version_) {
return manifest_version_;
}
base::RunLoop waiter;
manifest_quit_ = waiter.QuitClosure();
waiter.Run();
return manifest_version_;
}
void ExtensionRegistryTestHelper::WaitForServiceWorkerStart() {
// TestServiceWorkerTaskQueueObserver is designed such that all three events
// must be waited for, in order, as any event will trigger the end of the
// waiter. In order to know whether a worker started, we must be sure we
// received an "OnActiveExtension" event and a "WorkerContextInitialized"
// event first. Failures will also trigger any of these waiters to return. If
// a timeout occurs in a test waiting for this function, it might be because a
// failure triggered the stop of a waiter and no subsequent events are
// received.
started_observer_.WaitForOnActivateExtension(extension_id_);
started_observer_.WaitForWorkerContextInitialized(extension_id_);
started_observer_.WaitForWorkerStarted(extension_id_);
}
void ExtensionRegistryTestHelper::OnExtensionLoaded(
content::BrowserContext* context,
const extensions::Extension* extension) {
if (context == context_ && extension->id() == extension_id_) {
manifest_version_ = extension->manifest_version();
if (manifest_quit_) {
std::move(manifest_quit_).Run();
}
}
}
} // namespace extensions
|