Commit f41f215c authored by Devlin Cronin's avatar Devlin Cronin Committed by Commit Bot

[Extensions] Introduce common client initialization

In order to extract apps-specific code from extensions, we'll need to
be able to add extra information to the extensions client from outside
extensions code. This will require having a centralized initialization
for the extensions client.

Introduce a single method, EnsureExtensionsClientInitialized(), which
constructs and sets the ChromeExtensionsClient. Remove the old way of
constructing the client, ChromeExtensionsClient::GetInstance(). Update
all callers to construct the client via the new method.

While we're at it, update the client to use base::NoDestructor instead
of LazyInstance.

Bug: 873937
Change-Id: I47147cd5f33ea44079c0a319626c57f3c5813af8
Reviewed-on: https://chromium-review.googlesource.com/1175459
Commit-Queue: Devlin <rdevlin.cronin@chromium.org>
Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#583217}
parent 220edbbe
...@@ -170,6 +170,7 @@ ...@@ -170,6 +170,7 @@
#include "chrome/browser/extensions/event_router_forwarder.h" #include "chrome/browser/extensions/event_router_forwarder.h"
#include "chrome/browser/media_galleries/media_file_system_registry.h" #include "chrome/browser/media_galleries/media_file_system_registry.h"
#include "chrome/browser/ui/apps/chrome_app_window_client.h" #include "chrome/browser/ui/apps/chrome_app_window_client.h"
#include "chrome/common/initialize_extensions_client.h"
#include "components/storage_monitor/storage_monitor.h" #include "components/storage_monitor/storage_monitor.h"
#include "extensions/common/extension_l10n_util.h" #include "extensions/common/extension_l10n_util.h"
#endif #endif
...@@ -258,8 +259,7 @@ void BrowserProcessImpl::Init() { ...@@ -258,8 +259,7 @@ void BrowserProcessImpl::Init() {
extension_event_router_forwarder_ = extension_event_router_forwarder_ =
base::MakeRefCounted<extensions::EventRouterForwarder>(); base::MakeRefCounted<extensions::EventRouterForwarder>();
extensions::ExtensionsClient::Set( EnsureExtensionsClientInitialized();
extensions::ChromeExtensionsClient::GetInstance());
extensions_browser_client_ = extensions_browser_client_ =
std::make_unique<extensions::ChromeExtensionsBrowserClient>(); std::make_unique<extensions::ChromeExtensionsBrowserClient>();
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/task/post_task.h" #include "base/task/post_task.h"
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/chrome_extensions_client.h" #include "chrome/common/initialize_extensions_client.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/common/service_manager_connection.h" #include "content/public/common/service_manager_connection.h"
#include "extensions/browser/extension_file_task_runner.h" #include "extensions/browser/extension_file_task_runner.h"
...@@ -35,7 +35,7 @@ void PrintPackExtensionMessage(const std::string& message) { ...@@ -35,7 +35,7 @@ void PrintPackExtensionMessage(const std::string& message) {
} // namespace } // namespace
StartupHelper::StartupHelper() : pack_job_succeeded_(false) { StartupHelper::StartupHelper() : pack_job_succeeded_(false) {
ExtensionsClient::Set(ChromeExtensionsClient::GetInstance()); EnsureExtensionsClientInitialized();
} }
void StartupHelper::OnPackSuccess( void StartupHelper::OnPackSuccess(
......
...@@ -369,6 +369,8 @@ static_library("common") { ...@@ -369,6 +369,8 @@ static_library("common") {
"extensions/sync_helper.h", "extensions/sync_helper.h",
"extensions/webstore_install_result.cc", "extensions/webstore_install_result.cc",
"extensions/webstore_install_result.h", "extensions/webstore_install_result.h",
"initialize_extensions_client.cc",
"initialize_extensions_client.h",
] ]
public_deps += [ public_deps += [
"//chrome/common/extensions:mojo_bindings", "//chrome/common/extensions:mojo_bindings",
......
...@@ -96,9 +96,6 @@ ChromeChannelForHistogram GetChromeChannelForHistogram( ...@@ -96,9 +96,6 @@ ChromeChannelForHistogram GetChromeChannelForHistogram(
} // namespace } // namespace
static base::LazyInstance<ChromeExtensionsClient>::Leaky g_client =
LAZY_INSTANCE_INITIALIZER;
ChromeExtensionsClient::ChromeExtensionsClient() {} ChromeExtensionsClient::ChromeExtensionsClient() {}
ChromeExtensionsClient::~ChromeExtensionsClient() { ChromeExtensionsClient::~ChromeExtensionsClient() {
...@@ -345,9 +342,4 @@ std::string ChromeExtensionsClient::GetUserAgent() const { ...@@ -345,9 +342,4 @@ std::string ChromeExtensionsClient::GetUserAgent() const {
return ::GetUserAgent(); return ::GetUserAgent();
} }
// static
ChromeExtensionsClient* ChromeExtensionsClient::GetInstance() {
return g_client.Pointer();
}
} // namespace extensions } // namespace extensions
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include <memory> #include <memory>
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/lazy_instance.h"
#include "base/macros.h" #include "base/macros.h"
#include "chrome/common/extensions/permissions/chrome_api_permissions.h" #include "chrome/common/extensions/permissions/chrome_api_permissions.h"
#include "chrome/common/extensions/permissions/chrome_permission_message_provider.h" #include "chrome/common/extensions/permissions/chrome_permission_message_provider.h"
...@@ -57,9 +56,6 @@ class ChromeExtensionsClient : public ExtensionsClient { ...@@ -57,9 +56,6 @@ class ChromeExtensionsClient : public ExtensionsClient {
bool ExtensionAPIEnabledInExtensionServiceWorkers() const override; bool ExtensionAPIEnabledInExtensionServiceWorkers() const override;
std::string GetUserAgent() const override; std::string GetUserAgent() const override;
// Get the LazyInstance for ChromeExtensionsClient.
static ChromeExtensionsClient* GetInstance();
private: private:
const ChromeAPIPermissions chrome_api_permissions_; const ChromeAPIPermissions chrome_api_permissions_;
const ExtensionsAPIPermissions extensions_api_permissions_; const ExtensionsAPIPermissions extensions_api_permissions_;
...@@ -74,8 +70,6 @@ class ChromeExtensionsClient : public ExtensionsClient { ...@@ -74,8 +70,6 @@ class ChromeExtensionsClient : public ExtensionsClient {
GURL webstore_base_url_; GURL webstore_base_url_;
GURL webstore_update_url_; GURL webstore_update_url_;
friend struct base::LazyInstanceTraitsBase<ChromeExtensionsClient>;
DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsClient); DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsClient);
}; };
......
// Copyright 2018 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 "chrome/common/initialize_extensions_client.h"
#include "base/no_destructor.h"
#include "chrome/common/extensions/chrome_extensions_client.h"
#include "extensions/common/extensions_client.h"
void EnsureExtensionsClientInitialized() {
static bool initialized = false;
static base::NoDestructor<extensions::ChromeExtensionsClient>
extensions_client;
if (!initialized) {
initialized = true;
extensions::ExtensionsClient::Set(extensions_client.get());
}
// ExtensionsClient::Set() will early-out if the client was already set, so
// this allows us to check that this was the only site setting it.
DCHECK_EQ(extensions_client.get(), extensions::ExtensionsClient::Get())
<< "ExtensionsClient should only be initialized through "
<< "EnsureExtensionsClientInitialized() when using "
<< "ChromeExtensionsClient.";
}
// Copyright 2018 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 CHROME_COMMON_INITIALIZE_EXTENSIONS_CLIENT_H_
#define CHROME_COMMON_INITIALIZE_EXTENSIONS_CLIENT_H_
#include "extensions/buildflags/buildflags.h"
#if !BUILDFLAG(ENABLE_EXTENSIONS)
#error "Extensions must be enabled"
#endif
// Initializes the single instance of the ExtensionsClient. Safe to call
// multiple times.
void EnsureExtensionsClientInitialized();
#endif // CHROME_COMMON_INITIALIZE_EXTENSIONS_CLIENT_H_
...@@ -157,7 +157,7 @@ ...@@ -157,7 +157,7 @@
#endif #endif
#if BUILDFLAG(ENABLE_EXTENSIONS) #if BUILDFLAG(ENABLE_EXTENSIONS)
#include "chrome/common/extensions/chrome_extensions_client.h" #include "chrome/common/initialize_extensions_client.h"
#include "chrome/renderer/extensions/chrome_extensions_renderer_client.h" #include "chrome/renderer/extensions/chrome_extensions_renderer_client.h"
#include "extensions/common/constants.h" #include "extensions/common/constants.h"
#include "extensions/common/extension_urls.h" #include "extensions/common/extension_urls.h"
...@@ -353,8 +353,7 @@ ChromeContentRendererClient::ChromeContentRendererClient() ...@@ -353,8 +353,7 @@ ChromeContentRendererClient::ChromeContentRendererClient()
: main_entry_time_(base::TimeTicks::Now()), : main_entry_time_(base::TimeTicks::Now()),
main_thread_profiler_(ThreadProfiler::CreateAndStartOnMainThread()) { main_thread_profiler_(ThreadProfiler::CreateAndStartOnMainThread()) {
#if BUILDFLAG(ENABLE_EXTENSIONS) #if BUILDFLAG(ENABLE_EXTENSIONS)
extensions::ExtensionsClient::Set( EnsureExtensionsClientInitialized();
extensions::ChromeExtensionsClient::GetInstance());
extensions::ExtensionsRendererClient::Set( extensions::ExtensionsRendererClient::Set(
ChromeExtensionsRendererClient::GetInstance()); ChromeExtensionsRendererClient::GetInstance());
#endif #endif
......
...@@ -35,8 +35,9 @@ ...@@ -35,8 +35,9 @@
#endif #endif
#if BUILDFLAG(ENABLE_EXTENSIONS) #if BUILDFLAG(ENABLE_EXTENSIONS)
#include "chrome/common/extensions/chrome_extensions_client.h" #include "chrome/common/initialize_extensions_client.h"
#include "extensions/common/extension_paths.h" #include "extensions/common/extension_paths.h"
#include "extensions/common/extensions_client.h"
#endif #endif
namespace { namespace {
...@@ -50,11 +51,6 @@ class ChromeUnitTestSuiteInitializer : public testing::EmptyTestEventListener { ...@@ -50,11 +51,6 @@ class ChromeUnitTestSuiteInitializer : public testing::EmptyTestEventListener {
void OnTestStart(const testing::TestInfo& test_info) override { void OnTestStart(const testing::TestInfo& test_info) override {
content_client_.reset(new ChromeContentClient); content_client_.reset(new ChromeContentClient);
content::SetContentClient(content_client_.get()); content::SetContentClient(content_client_.get());
#if BUILDFLAG(ENABLE_EXTENSIONS)
extensions::ExtensionsClient::Get()->InitializeWebStoreUrls(
base::CommandLine::ForCurrentProcess());
#endif
browser_content_client_.reset(new ChromeContentBrowserClient()); browser_content_client_.reset(new ChromeContentBrowserClient());
content::SetBrowserClientForTesting(browser_content_client_.get()); content::SetBrowserClientForTesting(browser_content_client_.get());
...@@ -135,8 +131,7 @@ void ChromeUnitTestSuite::InitializeProviders() { ...@@ -135,8 +131,7 @@ void ChromeUnitTestSuite::InitializeProviders() {
#if BUILDFLAG(ENABLE_EXTENSIONS) #if BUILDFLAG(ENABLE_EXTENSIONS)
extensions::RegisterPathProvider(); extensions::RegisterPathProvider();
extensions::ExtensionsClient::Set( EnsureExtensionsClientInitialized();
extensions::ChromeExtensionsClient::GetInstance());
#endif #endif
content::WebUIControllerFactory::RegisterFactory( content::WebUIControllerFactory::RegisterFactory(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment