Commit 3fb4216e authored by Anastasiia N's avatar Anastasiia N Committed by Commit Bot

Add session_type field to LacrosInitParams

Pass session_type to lacros-chrome and use it in Profile::IsGuestSession
and profiles::IsPublicSession.

Change-Id: I998ffa0015a354d587e071152e047cba53549c18
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2424252Reviewed-by: default avatarDavid Roger <droger@chromium.org>
Reviewed-by: default avatarKush Sinha <sinhak@chromium.org>
Reviewed-by: default avatarJorge Lucangeli Obes <jorgelo@chromium.org>
Reviewed-by: default avatarJames Cook <jamescook@chromium.org>
Commit-Queue: Anastasiia N <anastasiian@chromium.org>
Cr-Commit-Position: refs/heads/master@{#811711}
parent f9a6f317
...@@ -959,6 +959,8 @@ source_set("chromeos") { ...@@ -959,6 +959,8 @@ source_set("chromeos") {
"crosapi/browser_manager.h", "crosapi/browser_manager.h",
"crosapi/browser_util.cc", "crosapi/browser_util.cc",
"crosapi/browser_util.h", "crosapi/browser_util.h",
"crosapi/environment_provider.cc",
"crosapi/environment_provider.h",
"crosapi/feedback_ash.cc", "crosapi/feedback_ash.cc",
"crosapi/feedback_ash.h", "crosapi/feedback_ash.h",
"crosapi/keystore_service_ash.cc", "crosapi/keystore_service_ash.cc",
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <memory>
#include <string> #include <string>
#include <utility> #include <utility>
#include <vector> #include <vector>
...@@ -30,6 +31,7 @@ ...@@ -30,6 +31,7 @@
#include "chrome/browser/chromeos/crosapi/ash_chrome_service_impl.h" #include "chrome/browser/chromeos/crosapi/ash_chrome_service_impl.h"
#include "chrome/browser/chromeos/crosapi/browser_loader.h" #include "chrome/browser/chromeos/crosapi/browser_loader.h"
#include "chrome/browser/chromeos/crosapi/browser_util.h" #include "chrome/browser/chromeos/crosapi/browser_util.h"
#include "chrome/browser/chromeos/crosapi/environment_provider.h"
#include "chrome/browser/chromeos/crosapi/test_mojo_connection_manager.h" #include "chrome/browser/chromeos/crosapi/test_mojo_connection_manager.h"
#include "chrome/browser/component_updater/cros_component_manager.h" #include "chrome/browser/component_updater/cros_component_manager.h"
#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_manager.h"
...@@ -139,7 +141,8 @@ BrowserManager* BrowserManager::Get() { ...@@ -139,7 +141,8 @@ BrowserManager* BrowserManager::Get() {
BrowserManager::BrowserManager( BrowserManager::BrowserManager(
scoped_refptr<component_updater::CrOSComponentManager> manager) scoped_refptr<component_updater::CrOSComponentManager> manager)
: component_manager_(manager) { : component_manager_(manager),
environment_provider_(std::make_unique<EnvironmentProvider>()) {
DCHECK(!g_instance); DCHECK(!g_instance);
g_instance = this; g_instance = this;
...@@ -296,7 +299,7 @@ void BrowserManager::StartWithLogFile(base::ScopedFD logfd) { ...@@ -296,7 +299,7 @@ void BrowserManager::StartWithLogFile(base::ScopedFD logfd) {
// TODO(crbug.com/1124490): Support multiple mojo connections from lacros. // TODO(crbug.com/1124490): Support multiple mojo connections from lacros.
lacros_chrome_service_ = browser_util::SendMojoInvitationToLacrosChrome( lacros_chrome_service_ = browser_util::SendMojoInvitationToLacrosChrome(
channel.TakeLocalEndpoint(), environment_provider_.get(), channel.TakeLocalEndpoint(),
base::BindOnce(&BrowserManager::OnMojoDisconnected, base::BindOnce(&BrowserManager::OnMojoDisconnected,
weak_factory_.GetWeakPtr()), weak_factory_.GetWeakPtr()),
base::BindOnce(&BrowserManager::OnAshChromeServiceReceiverReceived, base::BindOnce(&BrowserManager::OnAshChromeServiceReceiverReceived,
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "base/memory/scoped_refptr.h" #include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/process/process.h" #include "base/process/process.h"
#include "chrome/browser/chromeos/crosapi/environment_provider.h"
#include "chromeos/crosapi/mojom/crosapi.mojom.h" #include "chromeos/crosapi/mojom/crosapi.mojom.h"
#include "components/session_manager/core/session_manager_observer.h" #include "components/session_manager/core/session_manager_observer.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
...@@ -166,6 +167,9 @@ class BrowserManager : public session_manager::SessionManagerObserver { ...@@ -166,6 +167,9 @@ class BrowserManager : public session_manager::SessionManagerObserver {
// '--lacros-mojo-socket-for-testing' is present in the command line. // '--lacros-mojo-socket-for-testing' is present in the command line.
std::unique_ptr<TestMojoConnectionManager> test_mojo_connection_manager_; std::unique_ptr<TestMojoConnectionManager> test_mojo_connection_manager_;
// Used to pass ash-chrome specific flags/configurations to lacros-chrome.
std::unique_ptr<EnvironmentProvider> environment_provider_;
base::WeakPtrFactory<BrowserManager> weak_factory_{this}; base::WeakPtrFactory<BrowserManager> weak_factory_{this};
}; };
......
...@@ -54,13 +54,16 @@ bool IsUserTypeAllowed(const User* user) { ...@@ -54,13 +54,16 @@ bool IsUserTypeAllowed(const User* user) {
} }
} }
mojom::LacrosInitParamsPtr GetLacrosInitParams() { mojom::LacrosInitParamsPtr GetLacrosInitParams(
EnvironmentProvider* environment_provider) {
auto params = mojom::LacrosInitParams::New(); auto params = mojom::LacrosInitParams::New();
params->ash_chrome_service_version = params->ash_chrome_service_version =
crosapi::mojom::AshChromeService::Version_; crosapi::mojom::AshChromeService::Version_;
params->ash_metrics_enabled_has_value = true; params->ash_metrics_enabled_has_value = true;
params->ash_metrics_enabled = g_browser_process->local_state()->GetBoolean( params->ash_metrics_enabled = g_browser_process->local_state()->GetBoolean(
metrics::prefs::kMetricsReportingEnabled); metrics::prefs::kMetricsReportingEnabled);
params->session_type = environment_provider->GetSessionType();
return params; return params;
} }
...@@ -120,6 +123,7 @@ bool IsLacrosWindow(const aura::Window* window) { ...@@ -120,6 +123,7 @@ bool IsLacrosWindow(const aura::Window* window) {
mojo::Remote<crosapi::mojom::LacrosChromeService> mojo::Remote<crosapi::mojom::LacrosChromeService>
SendMojoInvitationToLacrosChrome( SendMojoInvitationToLacrosChrome(
EnvironmentProvider* environment_provider,
mojo::PlatformChannelEndpoint local_endpoint, mojo::PlatformChannelEndpoint local_endpoint,
base::OnceClosure mojo_disconnected_callback, base::OnceClosure mojo_disconnected_callback,
base::OnceCallback< base::OnceCallback<
...@@ -132,7 +136,7 @@ SendMojoInvitationToLacrosChrome( ...@@ -132,7 +136,7 @@ SendMojoInvitationToLacrosChrome(
invitation.AttachMessagePipe(0 /* token */), /*version=*/0)); invitation.AttachMessagePipe(0 /* token */), /*version=*/0));
lacros_chrome_service.set_disconnect_handler( lacros_chrome_service.set_disconnect_handler(
std::move(mojo_disconnected_callback)); std::move(mojo_disconnected_callback));
lacros_chrome_service->Init(GetLacrosInitParams()); lacros_chrome_service->Init(GetLacrosInitParams(environment_provider));
lacros_chrome_service->RequestAshChromeServiceReceiver( lacros_chrome_service->RequestAshChromeServiceReceiver(
std::move(ash_chrome_service_callback)); std::move(ash_chrome_service_callback));
mojo::OutgoingInvitation::Send(std::move(invitation), mojo::OutgoingInvitation::Send(std::move(invitation),
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define CHROME_BROWSER_CHROMEOS_CROSAPI_BROWSER_UTIL_H_ #define CHROME_BROWSER_CHROMEOS_CROSAPI_BROWSER_UTIL_H_
#include "base/callback_forward.h" #include "base/callback_forward.h"
#include "chrome/browser/chromeos/crosapi/environment_provider.h"
#include "chromeos/crosapi/mojom/crosapi.mojom.h" #include "chromeos/crosapi/mojom/crosapi.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
...@@ -57,6 +58,7 @@ bool IsLacrosWindow(const aura::Window* window); ...@@ -57,6 +58,7 @@ bool IsLacrosWindow(const aura::Window* window);
// available already when lacros-chrome accepts the invitation. // available already when lacros-chrome accepts the invitation.
mojo::Remote<crosapi::mojom::LacrosChromeService> mojo::Remote<crosapi::mojom::LacrosChromeService>
SendMojoInvitationToLacrosChrome( SendMojoInvitationToLacrosChrome(
::crosapi::EnvironmentProvider* environment_provider,
mojo::PlatformChannelEndpoint local_endpoint, mojo::PlatformChannelEndpoint local_endpoint,
base::OnceClosure mojo_disconnected_callback, base::OnceClosure mojo_disconnected_callback,
base::OnceCallback< base::OnceCallback<
......
// Copyright 2020 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/chromeos/crosapi/environment_provider.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profiles_state.h"
#include "components/user_manager/user.h"
#include "components/user_manager/user_manager.h"
crosapi::EnvironmentProvider::EnvironmentProvider() = default;
crosapi::EnvironmentProvider::~EnvironmentProvider() = default;
crosapi::mojom::SessionType crosapi::EnvironmentProvider::GetSessionType() {
const user_manager::User* const user =
user_manager::UserManager::Get()->GetActiveUser();
const Profile* const profile =
chromeos::ProfileHelper::Get()->GetProfileByUser(user);
if (profile->IsGuestSession()) {
return crosapi::mojom::SessionType::kGuestSession;
}
if (profiles::IsPublicSession()) {
return crosapi::mojom::SessionType::kPublicSession;
}
return crosapi::mojom::SessionType::kRegularSession;
}
// Copyright 2020 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_CHROMEOS_CROSAPI_ENVIRONMENT_PROVIDER_H_
#define CHROME_BROWSER_CHROMEOS_CROSAPI_ENVIRONMENT_PROVIDER_H_
#include "chromeos/crosapi/mojom/crosapi.mojom.h"
namespace crosapi {
// Provides ash-chrome specific flags/configurations (like session type).
class EnvironmentProvider {
public:
EnvironmentProvider();
EnvironmentProvider(const EnvironmentProvider&) = delete;
EnvironmentProvider& operator=(const EnvironmentProvider&) = delete;
virtual ~EnvironmentProvider();
// Virtual for tests.
virtual crosapi::mojom::SessionType GetSessionType();
};
} // namespace crosapi
#endif // CHROME_BROWSER_CHROMEOS_CROSAPI_ENVIRONMENT_PROVIDER_H_
...@@ -24,6 +24,12 @@ namespace crosapi { ...@@ -24,6 +24,12 @@ namespace crosapi {
namespace { namespace {
class FakeEnvironmentProvider : public EnvironmentProvider {
crosapi::mojom::SessionType GetSessionType() override {
return crosapi::mojom::SessionType::kRegularSession;
}
};
// TODO(crbug.com/1124494): Refactor the code to share with ARC. // TODO(crbug.com/1124494): Refactor the code to share with ARC.
base::ScopedFD CreateSocketForTesting(const base::FilePath& socket_path) { base::ScopedFD CreateSocketForTesting(const base::FilePath& socket_path) {
auto endpoint = mojo::NamedPlatformChannel({socket_path.value()}); auto endpoint = mojo::NamedPlatformChannel({socket_path.value()});
...@@ -45,7 +51,8 @@ base::ScopedFD CreateSocketForTesting(const base::FilePath& socket_path) { ...@@ -45,7 +51,8 @@ base::ScopedFD CreateSocketForTesting(const base::FilePath& socket_path) {
} // namespace } // namespace
TestMojoConnectionManager::TestMojoConnectionManager( TestMojoConnectionManager::TestMojoConnectionManager(
const base::FilePath& socket_path) { const base::FilePath& socket_path)
: environment_provider_(std::make_unique<FakeEnvironmentProvider>()) {
base::ThreadPool::PostTaskAndReplyWithResult( base::ThreadPool::PostTaskAndReplyWithResult(
FROM_HERE, {base::MayBlock()}, FROM_HERE, {base::MayBlock()},
base::BindOnce(&CreateSocketForTesting, socket_path), base::BindOnce(&CreateSocketForTesting, socket_path),
...@@ -79,7 +86,7 @@ void TestMojoConnectionManager::OnTestingSocketAvailable() { ...@@ -79,7 +86,7 @@ void TestMojoConnectionManager::OnTestingSocketAvailable() {
// TODO(crbug.com/1124490): Support multiple mojo connections from lacros. // TODO(crbug.com/1124490): Support multiple mojo connections from lacros.
mojo::PlatformChannel channel; mojo::PlatformChannel channel;
lacros_chrome_service_ = browser_util::SendMojoInvitationToLacrosChrome( lacros_chrome_service_ = browser_util::SendMojoInvitationToLacrosChrome(
channel.TakeLocalEndpoint(), environment_provider_.get(), channel.TakeLocalEndpoint(),
base::BindOnce(&TestMojoConnectionManager::OnMojoDisconnected, base::BindOnce(&TestMojoConnectionManager::OnMojoDisconnected,
weak_factory_.GetWeakPtr()), weak_factory_.GetWeakPtr()),
base::BindOnce( base::BindOnce(
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/files/scoped_file.h" #include "base/files/scoped_file.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "chrome/browser/chromeos/crosapi/environment_provider.h"
#include "chromeos/crosapi/mojom/crosapi.mojom.h" #include "chromeos/crosapi/mojom/crosapi.mojom.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
...@@ -76,6 +77,9 @@ class TestMojoConnectionManager { ...@@ -76,6 +77,9 @@ class TestMojoConnectionManager {
std::unique_ptr<base::FileDescriptorWatcher::Controller> std::unique_ptr<base::FileDescriptorWatcher::Controller>
testing_socket_watcher_; testing_socket_watcher_;
// Used to pass ash-chrome specific flags/configurations to lacros-chrome.
std::unique_ptr<EnvironmentProvider> environment_provider_;
base::WeakPtrFactory<TestMojoConnectionManager> weak_factory_{this}; base::WeakPtrFactory<TestMojoConnectionManager> weak_factory_{this};
}; };
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/path_service.h" #include "base/path_service.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h"
#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/net/profile_network_context_service.h" #include "chrome/browser/net/profile_network_context_service.h"
...@@ -64,6 +65,10 @@ ...@@ -64,6 +65,10 @@
#include "extensions/browser/pref_names.h" #include "extensions/browser/pref_names.h"
#endif #endif
#if BUILDFLAG(IS_LACROS)
#include "chromeos/lacros/lacros_chrome_service_impl.h"
#endif
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
#include <set> #include <set>
...@@ -376,8 +381,17 @@ bool Profile::IsGuestSession() const { ...@@ -376,8 +381,17 @@ bool Profile::IsGuestSession() const {
chromeos::switches::kGuestSession); chromeos::switches::kGuestSession);
return is_guest_session; return is_guest_session;
#else #else
#if BUILDFLAG(IS_LACROS)
DCHECK(chromeos::LacrosChromeServiceImpl::Get());
if (chromeos::LacrosChromeServiceImpl::Get()->init_params()->session_type !=
crosapi::mojom::SessionType::kUnknown) {
return chromeos::LacrosChromeServiceImpl::Get()
->init_params()
->session_type == crosapi::mojom::SessionType::kGuestSession;
}
#endif // BUILDFLAG(IS_LACROS)
return is_guest_profile_; return is_guest_profile_;
#endif #endif // defined(OS_CHROMEOS)
} }
bool Profile::IsSystemProfile() const { bool Profile::IsSystemProfile() const {
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/files/file_path.h" #include "base/files/file_path.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -40,6 +41,10 @@ ...@@ -40,6 +41,10 @@
#include "components/signin/public/base/signin_pref_names.h" #include "components/signin/public/base/signin_pref_names.h"
#endif #endif
#if BUILDFLAG(IS_LACROS)
#include "chromeos/lacros/lacros_chrome_service_impl.h"
#endif
namespace profiles { namespace profiles {
bool IsMultipleProfilesEnabled() { bool IsMultipleProfilesEnabled() {
...@@ -262,6 +267,11 @@ bool IsPublicSession() { ...@@ -262,6 +267,11 @@ bool IsPublicSession() {
if (chromeos::LoginState::IsInitialized()) { if (chromeos::LoginState::IsInitialized()) {
return chromeos::LoginState::Get()->IsPublicSessionUser(); return chromeos::LoginState::Get()->IsPublicSessionUser();
} }
#elif BUILDFLAG(IS_LACROS)
DCHECK(chromeos::LacrosChromeServiceImpl::Get());
return chromeos::LacrosChromeServiceImpl::Get()
->init_params()
->session_type == crosapi::mojom::SessionType::kPublicSession;
#endif #endif
return false; return false;
} }
......
...@@ -62,6 +62,14 @@ interface AshChromeService { ...@@ -62,6 +62,14 @@ interface AshChromeService {
[MinVersion=3] OnLacrosStartup@6(LacrosInfo lacros_info); [MinVersion=3] OnLacrosStartup@6(LacrosInfo lacros_info);
}; };
[Stable, Extensible]
enum SessionType {
kUnknown,
kRegularSession,
kGuestSession,
kPublicSession
};
// LacrosInitParams is a set of parameters for initialization of lacros-chrome, // LacrosInitParams is a set of parameters for initialization of lacros-chrome,
// which is passed from ash-chrome to lacros-chrome. Since ash-chrome and // which is passed from ash-chrome to lacros-chrome. Since ash-chrome and
// lacros-chrome may have different versions, lacros-chrome must handle this // lacros-chrome may have different versions, lacros-chrome must handle this
...@@ -96,6 +104,10 @@ struct LacrosInitParams { ...@@ -96,6 +104,10 @@ struct LacrosInitParams {
// consent via settings. // consent via settings.
[MinVersion=2] [MinVersion=2]
bool ash_metrics_enabled@2; bool ash_metrics_enabled@2;
// Type of the ash-chrome session.
[MinVersion=3]
SessionType session_type@3;
}; };
// LacrosChromeService defines the APIs that live in lacros-chrome and // LacrosChromeService defines the APIs that live in lacros-chrome and
......
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