Commit 4861f459 authored by Nicolas Ouellet-Payeur's avatar Nicolas Ouellet-Payeur Committed by Commit Bot

[BrowserSwitcher] Add BrowserSwitcherService{,Factory}

BrowserSwitcherService is a per-BrowserContext class that manages
resources that should be shared between tabs in the same BrowserContext:
for now, the sitelist and browser launcher objects.

The BrowserSwitcherServiceFactory lets us easily create only one
BrowserSwitcherService per BrowserContext.

Bug: 876803
Change-Id: I6eb4c235143cfe38a077141b62e9332ed0f30a05
Reviewed-on: https://chromium-review.googlesource.com/1206698Reviewed-by: default avatarJulian Pastarmov <pastarmovj@chromium.org>
Commit-Queue: Nicolas Ouellet-Payeur <nicolaso@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589922}
parent 41eb3228
......@@ -3148,6 +3148,10 @@ jumbo_split_static_library("browser") {
"browser_switcher/alternative_browser_launcher.h",
"browser_switcher/browser_switcher_prefs.cc",
"browser_switcher/browser_switcher_prefs.h",
"browser_switcher/browser_switcher_service.cc",
"browser_switcher/browser_switcher_service.h",
"browser_switcher/browser_switcher_service_factory.cc",
"browser_switcher/browser_switcher_service_factory.h",
"browser_switcher/browser_switcher_sitelist.cc",
"browser_switcher/browser_switcher_sitelist.h",
"downgrade/user_data_downgrade.cc",
......
// 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/browser/browser_switcher/browser_switcher_service.h"
#include "chrome/browser/browser_switcher/alternative_browser_launcher.h"
#include "chrome/browser/browser_switcher/browser_switcher_sitelist.h"
#include "chrome/browser/profiles/profile.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/browser_context.h"
namespace browser_switcher {
BrowserSwitcherService::BrowserSwitcherService(PrefService* prefs)
: launcher_(nullptr), sitelist_(nullptr), prefs_(prefs) {
DCHECK(prefs_);
}
BrowserSwitcherService::~BrowserSwitcherService() {}
AlternativeBrowserLauncher* BrowserSwitcherService::launcher() {
if (!launcher_)
launcher_ = std::make_unique<AlternativeBrowserLauncher>(prefs_);
return launcher_.get();
}
BrowserSwitcherSitelist* BrowserSwitcherService::sitelist() {
if (!sitelist_)
sitelist_ = std::make_unique<BrowserSwitcherSitelist>(prefs_);
return sitelist_.get();
}
} // namespace browser_switcher
// 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_BROWSER_BROWSER_SWITCHER_BROWSER_SWITCHER_SERVICE_H_
#define CHROME_BROWSER_BROWSER_SWITCHER_BROWSER_SWITCHER_SERVICE_H_
#include "base/macros.h"
#include "components/keyed_service/core/keyed_service.h"
#include <memory>
class PrefService;
namespace browser_switcher {
class AlternativeBrowserLauncher;
class BrowserSwitcherSitelist;
// Manages resources that can be accessed from a |BrowserSwitcherTabHelper|.
class BrowserSwitcherService : public KeyedService {
public:
explicit BrowserSwitcherService(PrefService* prefs);
~BrowserSwitcherService() override;
AlternativeBrowserLauncher* launcher();
BrowserSwitcherSitelist* sitelist();
private:
std::unique_ptr<AlternativeBrowserLauncher> launcher_;
std::unique_ptr<BrowserSwitcherSitelist> sitelist_;
PrefService* const prefs_;
DISALLOW_IMPLICIT_CONSTRUCTORS(BrowserSwitcherService);
};
} // namespace browser_switcher
#endif // CHROME_BROWSER_BROWSER_SWITCHER_BROWSER_SWITCHER_SERVICE_H_
// 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/browser/browser_switcher/browser_switcher_service_factory.h"
#include "chrome/browser/browser_switcher/browser_switcher_service.h"
#include "chrome/browser/profiles/incognito_helpers.h"
#include "chrome/browser/profiles/profile.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/browser_context.h"
namespace browser_switcher {
// static
BrowserSwitcherServiceFactory* BrowserSwitcherServiceFactory::GetInstance() {
return base::Singleton<BrowserSwitcherServiceFactory>::get();
}
// static
BrowserSwitcherService* BrowserSwitcherServiceFactory::GetForBrowserContext(
content::BrowserContext* browser_context) {
return static_cast<BrowserSwitcherService*>(
GetInstance()->GetServiceForBrowserContext(browser_context, true));
}
BrowserSwitcherServiceFactory::BrowserSwitcherServiceFactory()
: BrowserContextKeyedServiceFactory(
"BrowserSwitcherServiceFactory",
BrowserContextDependencyManager::GetInstance()) {}
BrowserSwitcherServiceFactory::~BrowserSwitcherServiceFactory() {}
KeyedService* BrowserSwitcherServiceFactory::BuildServiceInstanceFor(
content::BrowserContext* context) const {
return new BrowserSwitcherService(
Profile::FromBrowserContext(context)->GetPrefs());
}
content::BrowserContext* BrowserSwitcherServiceFactory::GetBrowserContextToUse(
content::BrowserContext* context) const {
// Use the original profile's BrowserSwitcherService, even in Incognito mode.
return chrome::GetBrowserContextRedirectedInIncognito(context);
}
} // namespace browser_switcher
// 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_BROWSER_BROWSER_SWITCHER_BROWSER_SWITCHER_SERVICE_FACTORY_H_
#define CHROME_BROWSER_BROWSER_SWITCHER_BROWSER_SWITCHER_SERVICE_FACTORY_H_
#include "base/macros.h"
#include "base/memory/singleton.h"
#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
namespace content {
class BrowserContext;
} // namespace content
namespace browser_switcher {
class BrowserSwitcherService;
// Creates a |BrowserSwitcherService| for a BrowserContext.
class BrowserSwitcherServiceFactory : public BrowserContextKeyedServiceFactory {
public:
static BrowserSwitcherServiceFactory* GetInstance();
static BrowserSwitcherService* GetForBrowserContext(
content::BrowserContext* browser_context);
private:
friend struct base::DefaultSingletonTraits<BrowserSwitcherServiceFactory>;
BrowserSwitcherServiceFactory();
~BrowserSwitcherServiceFactory() override;
// BrowserContextKeyedServiceFactory overrides.
KeyedService* BuildServiceInstanceFor(
content::BrowserContext* context) const override;
content::BrowserContext* GetBrowserContextToUse(
content::BrowserContext* context) const override;
DISALLOW_COPY_AND_ASSIGN(BrowserSwitcherServiceFactory);
};
} // namespace browser_switcher
#endif // CHROME_BROWSER_BROWSER_SWITCHER_BROWSER_SWITCHER_SERVICE_FACTORY_H_
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