Commit 88b3c6d0 authored by Karandeep Bhatia's avatar Karandeep Bhatia Committed by Commit Bot

Extensions: Prevent link failures due to vpn_service.

VpnServiceFactory::GetInstance() and
VpnServiceFactory::GetForBrowserContext() are declared at the extensions
layer but only defined by its embedders (chrome and shell). This is
incorrect since it means any targets depending on extensions without
defining these methods will fail to link. Prevent this by providing an
implementation at the extensions/ layer and removing the embedder
implementations.

BUG=981112

Change-Id: Ic6af1b8e95b7bf569fd5791031facd8e30f52ba1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2557222
Commit-Queue: Karan Bhatia <karandeepb@chromium.org>
Reviewed-by: default avatarMaksim Ivanov <emaxx@chromium.org>
Reviewed-by: default avatarDavid Bertoni <dbertoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#831073}
parent 25087abf
......@@ -1002,7 +1002,6 @@ static_library("extensions") {
"api/terminal/terminal_private_api.h",
"api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc",
"api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.h",
"api/vpn_provider/vpn_service_factory.cc",
"chrome_kiosk_delegate_chromeos.cc",
"clipboard_extension_helper_chromeos.cc",
"clipboard_extension_helper_chromeos.h",
......
......@@ -16,10 +16,17 @@ source_set("vpn_provider") {
"vpn_provider_api.h",
"vpn_service.cc",
"vpn_service.h",
"vpn_service_factory.cc",
"vpn_service_factory.h",
]
deps = [ "//extensions/common/api" ]
deps = [
"//base",
"//chromeos/dbus",
"//chromeos/login/login_state",
"//chromeos/network",
"//extensions/common/api",
]
public_deps = [ "//extensions/browser:browser_sources" ]
}
......@@ -5,14 +5,14 @@
#include "extensions/browser/api/vpn_provider/vpn_service_factory.h"
#include "base/memory/singleton.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/profiles/profile.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/login/login_state/login_state.h"
#include "chromeos/network/network_handler.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "extensions/browser/api/vpn_provider/vpn_service.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extensions_browser_client.h"
namespace chromeos {
......@@ -31,11 +31,9 @@ VpnServiceFactory* VpnServiceFactory::GetInstance() {
VpnServiceFactory::VpnServiceFactory()
: BrowserContextKeyedServiceFactory(
"VpnService",
BrowserContextDependencyManager::GetInstance()) {
}
BrowserContextDependencyManager::GetInstance()) {}
VpnServiceFactory::~VpnServiceFactory() {
}
VpnServiceFactory::~VpnServiceFactory() = default;
bool VpnServiceFactory::ServiceIsCreatedWithBrowserContext() const {
return true;
......@@ -47,15 +45,17 @@ bool VpnServiceFactory::ServiceIsNULLWhileTesting() const {
KeyedService* VpnServiceFactory::BuildServiceInstanceFor(
content::BrowserContext* context) const {
if (!chromeos::ProfileHelper::IsPrimaryProfile(
Profile::FromBrowserContext(context))) {
std::string context_user_hash =
extensions::ExtensionsBrowserClient::Get()->GetUserIdHashFromContext(
context);
if (!LoginState::IsInitialized() ||
context_user_hash != LoginState::Get()->primary_user_hash()) {
return nullptr;
}
return new VpnService(
context,
chromeos::ProfileHelper::GetUserIdHashFromProfile(
Profile::FromBrowserContext(context)),
extensions::ExtensionRegistry::Get(context),
context, context_user_hash, extensions::ExtensionRegistry::Get(context),
extensions::EventRouter::Get(context),
DBusThreadManager::Get()->GetShillThirdPartyVpnDriverClient(),
NetworkHandler::Get()->network_configuration_handler(),
......
......@@ -226,7 +226,6 @@ source_set("app_shell_lib") {
if (is_chromeos_ash) {
sources += [
"browser/api/vpn_provider/vpn_service_factory.cc",
"browser/shell_screen.cc",
"browser/shell_screen.h",
]
......
# Metadata information for this directory.
#
# For more information on DIR_METADATA files, see:
# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md
#
# For the schema of this file, see Metadata message:
# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto
monorail {
component: "Enterprise"
}
\ No newline at end of file
bartfab@chromium.org
emaxx@chromium.org
// Copyright 2014 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/api/vpn_provider/vpn_service_factory.h"
#include "base/memory/singleton.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/network/network_handler.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "extensions/browser/api/vpn_provider/vpn_service.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_registry.h"
namespace chromeos {
// This file is a dummy stub for use in appshell.
// static
VpnService* VpnServiceFactory::GetForBrowserContext(
content::BrowserContext* context) {
return static_cast<VpnService*>(
GetInstance()->GetServiceForBrowserContext(context, true));
}
// static
VpnServiceFactory* VpnServiceFactory::GetInstance() {
return base::Singleton<VpnServiceFactory>::get();
}
VpnServiceFactory::VpnServiceFactory()
: BrowserContextKeyedServiceFactory(
"VpnService",
BrowserContextDependencyManager::GetInstance()) {
}
VpnServiceFactory::~VpnServiceFactory() {
}
bool VpnServiceFactory::ServiceIsCreatedWithBrowserContext() const {
return true;
}
bool VpnServiceFactory::ServiceIsNULLWhileTesting() const {
return true;
}
KeyedService* VpnServiceFactory::BuildServiceInstanceFor(
content::BrowserContext* context) const {
return new VpnService(
context, "testuser", extensions::ExtensionRegistry::Get(context),
extensions::EventRouter::Get(context),
DBusThreadManager::Get()->GetShillThirdPartyVpnDriverClient(),
NetworkHandler::Get()->network_configuration_handler(),
NetworkHandler::Get()->network_profile_handler(),
NetworkHandler::Get()->network_state_handler());
}
} // namespace chromeos
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