12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // Copyright 2021 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.
- #include "extensions/browser/process_util.h"
- #include "base/check.h"
- #include "content/public/browser/browser_context.h"
- #include "extensions/browser/extension_host.h"
- #include "extensions/browser/extension_util.h"
- #include "extensions/browser/extensions_browser_client.h"
- #include "extensions/browser/process_manager.h"
- #include "extensions/common/extension.h"
- #include "extensions/common/manifest_handlers/background_info.h"
- #include "extensions/common/manifest_handlers/incognito_info.h"
- namespace extensions {
- namespace process_util {
- PersistentBackgroundPageState GetPersistentBackgroundPageState(
- const Extension& extension,
- content::BrowserContext* browser_context) {
- // If the extension doesn't have a persistent background page, it can never
- // be ready.
- if (!BackgroundInfo::HasPersistentBackgroundPage(&extension))
- return PersistentBackgroundPageState::kInvalid;
- content::BrowserContext* browser_context_to_use = browser_context;
- if (browser_context->IsOffTheRecord()) {
- // Sanity checks: First check that the extension supports running in
- // incognito, according to its manifest.
- DCHECK(IncognitoInfo::IsIncognitoAllowed(&extension))
- << "Can't use an incognito browser context for an extension that "
- "doesn't suppport incognito!";
- // Then, check that the user enabled the extension in incognito.
- DCHECK(util::IsIncognitoEnabled(extension.id(), browser_context))
- << "Can't use an incognito browser context for an extension that isn't "
- "allowed to run in incognito!";
- // If the extension runs in spanning mode, the background page will be
- // associated with the on-the-record context.
- if (!IncognitoInfo::IsSplitMode(&extension)) {
- browser_context_to_use =
- ExtensionsBrowserClient::Get()->GetOriginalContext(browser_context);
- }
- }
- ProcessManager* process_manager = ProcessManager::Get(browser_context_to_use);
- DCHECK(process_manager);
- ExtensionHost* background_host =
- process_manager->GetBackgroundHostForExtension(extension.id());
- if (!background_host || !background_host->document_element_available())
- return PersistentBackgroundPageState::kNotReady;
- return PersistentBackgroundPageState::kReady;
- }
- } // namespace process_util
- } // namespace extensions
|