Commit ba1aa6e7 authored by Yusuke Sato's avatar Yusuke Sato Committed by Chromium LUCI CQ

arc: Expand prop files outside Chromium

This CL depends on
https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2611416

BUG=chromium:1163122
TEST=tast run arc.Boot[.vm]

Change-Id: I84a2f6c3a818877abba54cce15106a670386b1e9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2613917
Commit-Queue: Yusuke Sato <yusukes@chromium.org>
Reviewed-by: default avatarYury Khmel <khmel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#846234}
parent c9a9009e
...@@ -62,7 +62,6 @@ ...@@ -62,7 +62,6 @@
#include "components/arc/metrics/stability_metrics_manager.h" #include "components/arc/metrics/stability_metrics_manager.h"
#include "components/arc/session/arc_data_remover.h" #include "components/arc/session/arc_data_remover.h"
#include "components/arc/session/arc_instance_mode.h" #include "components/arc/session/arc_instance_mode.h"
#include "components/arc/session/arc_property_util.h"
#include "components/arc/session/arc_session.h" #include "components/arc/session/arc_session.h"
#include "components/arc/session/arc_session_runner.h" #include "components/arc/session/arc_session_runner.h"
#include "components/arc/session/arc_supervision_transition.h" #include "components/arc/session/arc_supervision_transition.h"
...@@ -90,11 +89,12 @@ bool g_enable_arc_terms_of_service_oobe_negotiator_in_tests = false; ...@@ -90,11 +89,12 @@ bool g_enable_arc_terms_of_service_oobe_negotiator_in_tests = false;
base::Optional<bool> g_enable_check_android_management_in_tests; base::Optional<bool> g_enable_check_android_management_in_tests;
constexpr const char kPropertyFilesPathVm[] = "/usr/share/arcvm/properties";
constexpr const char kPropertyFilesPath[] = "/usr/share/arc/properties";
constexpr const char kArcSaltPath[] = "/var/lib/misc/arc_salt"; constexpr const char kArcSaltPath[] = "/var/lib/misc/arc_salt";
constexpr const size_t kArcSaltFileSize = 16; constexpr const size_t kArcSaltFileSize = 16;
constexpr const char kArcPrepareHostGeneratedDirJobName[] =
"arc_2dprepare_2dhost_2dgenerated_2ddir";
// Generates a unique, 20-character hex string from |chromeos_user| and // Generates a unique, 20-character hex string from |chromeos_user| and
// |salt| which can be used as Android's ro.boot.serialno and ro.serialno // |salt| which can be used as Android's ro.boot.serialno and ro.serialno
// properties. Note that Android treats serialno in a case-insensitive manner. // properties. Note that Android treats serialno in a case-insensitive manner.
...@@ -413,25 +413,10 @@ ArcSupportHost::Error GetSupportHostError(const ArcProvisioningResult& result) { ...@@ -413,25 +413,10 @@ ArcSupportHost::Error GetSupportHostError(const ArcProvisioningResult& result) {
return ArcSupportHost::Error::SIGN_IN_UNKNOWN_ERROR; return ArcSupportHost::Error::SIGN_IN_UNKNOWN_ERROR;
} }
ArcSessionManager::ExpansionResult ExpandPropertyFilesAndReadSaltInternal( ArcSessionManager::ExpansionResult ReadSaltInternal() {
const base::FilePath& source_path, DCHECK(arc::IsArcVmEnabled());
const base::FilePath& dest_path,
bool single_file,
bool add_native_bridge_64bit_support) {
if (!arc::ExpandPropertyFiles(source_path, dest_path, single_file,
add_native_bridge_64bit_support)) {
return ArcSessionManager::ExpansionResult{{}, false};
}
if (!arc::IsArcVmEnabled())
return ArcSessionManager::ExpansionResult{{}, true};
// For ARCVM, the first stage fstab file needs to be generated.
if (!arc::GenerateFirstStageFstab(dest_path,
dest_path.DirName().Append("fstab"))) {
return ArcSessionManager::ExpansionResult{{}, false};
}
// Finally, for ARCVM, read |kArcSaltPath| if that exists. // For ARCVM, read |kArcSaltPath| if that exists.
std::string salt; std::string salt;
if (!ReadSaltOnDisk(base::FilePath(kArcSaltPath), &salt)) if (!ReadSaltOnDisk(base::FilePath(kArcSaltPath), &salt))
return ArcSessionManager::ExpansionResult{{}, false}; return ArcSessionManager::ExpansionResult{{}, false};
...@@ -503,12 +488,8 @@ ArcSessionManager::ArcSessionManager( ...@@ -503,12 +488,8 @@ ArcSessionManager::ArcSessionManager(
: arc_session_runner_(std::move(arc_session_runner)), : arc_session_runner_(std::move(arc_session_runner)),
adb_sideloading_availability_delegate_( adb_sideloading_availability_delegate_(
std::move(adb_sideloading_availability_delegate)), std::move(adb_sideloading_availability_delegate)),
attempt_user_exit_callback_(base::BindRepeating(chrome::AttemptUserExit)), attempt_user_exit_callback_(
property_files_source_dir_(base::FilePath( base::BindRepeating(chrome::AttemptUserExit)) {
IsArcVmEnabled() ? kPropertyFilesPathVm : kPropertyFilesPath)),
property_files_dest_dir_(
base::FilePath(IsArcVmEnabled() ? kGeneratedPropertyFilesPathVm
: kGeneratedPropertyFilesPath)) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK(!g_arc_session_manager); DCHECK(!g_arc_session_manager);
g_arc_session_manager = this; g_arc_session_manager = this;
...@@ -1639,13 +1620,36 @@ void ArcSessionManager::ExpandPropertyFilesAndReadSalt() { ...@@ -1639,13 +1620,36 @@ void ArcSessionManager::ExpandPropertyFilesAndReadSalt() {
add_native_bridge_64bit_support = local_pref_service->GetBoolean( add_native_bridge_64bit_support = local_pref_service->GetBoolean(
prefs::kNativeBridge64BitSupportExperimentEnabled); prefs::kNativeBridge64BitSupportExperimentEnabled);
} }
std::deque<JobDesc> jobs = {
JobDesc{kArcPrepareHostGeneratedDirJobName,
UpstartOperation::JOB_START,
{std::string("IS_ARCVM=") + (is_arcvm ? "1" : "0"),
std::string("ADD_NATIVE_BRIDGE_64BIT_SUPPORT=") +
(add_native_bridge_64bit_support ? "1" : "0")}},
};
ConfigureUpstartJobs(std::move(jobs),
base::BindOnce(&ArcSessionManager::OnExpandPropertyFiles,
weak_ptr_factory_.GetWeakPtr()));
}
void ArcSessionManager::OnExpandPropertyFiles(bool result) {
if (!result) {
LOG(ERROR) << "Failed to expand property files";
OnExpandPropertyFilesAndReadSalt(
ArcSessionManager::ExpansionResult{{}, false});
return;
}
if (!arc::IsArcVmEnabled()) {
OnExpandPropertyFilesAndReadSalt(
ArcSessionManager::ExpansionResult{{}, true});
return;
}
base::ThreadPool::PostTaskAndReplyWithResult( base::ThreadPool::PostTaskAndReplyWithResult(
FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE}, FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
base::BindOnce(&ExpandPropertyFilesAndReadSaltInternal, base::BindOnce(&ReadSaltInternal),
property_files_source_dir_,
is_arcvm ? property_files_dest_dir_.Append("combined.prop")
: property_files_dest_dir_,
/*single_file=*/is_arcvm, add_native_bridge_64bit_support),
base::BindOnce(&ArcSessionManager::OnExpandPropertyFilesAndReadSalt, base::BindOnce(&ArcSessionManager::OnExpandPropertyFilesAndReadSalt,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
} }
......
...@@ -285,16 +285,6 @@ class ArcSessionManager : public ArcSessionRunner::Observer, ...@@ -285,16 +285,6 @@ class ArcSessionManager : public ArcSessionRunner::Observer,
property_files_expansion_result_.reset(); property_files_expansion_result_.reset();
} }
void set_property_files_source_dir_for_testing(
const base::FilePath& property_files_source_dir) {
property_files_source_dir_ = property_files_source_dir;
}
void set_property_files_dest_dir_for_testing(
const base::FilePath& property_files_dest_dir) {
property_files_dest_dir_ = property_files_dest_dir;
}
// chromeos::ConciergeClient::VmObserver overrides. // chromeos::ConciergeClient::VmObserver overrides.
void OnVmStarted( void OnVmStarted(
const vm_tools::concierge::VmStartedSignal& vm_signal) override; const vm_tools::concierge::VmStartedSignal& vm_signal) override;
...@@ -394,6 +384,9 @@ class ArcSessionManager : public ArcSessionRunner::Observer, ...@@ -394,6 +384,9 @@ class ArcSessionManager : public ArcSessionRunner::Observer,
// chromeos::SessionManagerClient::Observer: // chromeos::SessionManagerClient::Observer:
void EmitLoginPromptVisibleCalled() override; void EmitLoginPromptVisibleCalled() override;
// Called when the first part of ExpandPropertyFilesAndReadSalt is done.
void OnExpandPropertyFiles(bool result);
// Called when ExpandPropertyFilesAndReadSalt is done. // Called when ExpandPropertyFilesAndReadSalt is done.
void OnExpandPropertyFilesAndReadSalt(ExpansionResult result); void OnExpandPropertyFilesAndReadSalt(ExpansionResult result);
...@@ -445,8 +438,6 @@ class ArcSessionManager : public ArcSessionRunner::Observer, ...@@ -445,8 +438,6 @@ class ArcSessionManager : public ArcSessionRunner::Observer,
base::Optional<std::string> arc_salt_on_disk_; base::Optional<std::string> arc_salt_on_disk_;
base::Optional<bool> property_files_expansion_result_; base::Optional<bool> property_files_expansion_result_;
base::FilePath property_files_source_dir_;
base::FilePath property_files_dest_dir_;
base::Optional<vm_tools::concierge::VmInfo> vm_info_; base::Optional<vm_tools::concierge::VmInfo> vm_info_;
......
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