blob: 8e9c3e2d6e6f6d665407b16d7ea7d3074801f452 [file] [log] [blame]
// Copyright 2017 The Fuchsia 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 "peridot/lib/fidl/scope.h"
#include "lib/fxl/logging.h"
namespace modular {
Scope::Scope(const component::ApplicationEnvironmentPtr& parent_env,
const std::string& label) {
InitScope(parent_env, label);
}
Scope::Scope(const Scope* const parent_scope, const std::string& label) {
FXL_DCHECK(parent_scope != nullptr);
InitScope(parent_scope->environment(), label);
}
component::ApplicationLauncher* Scope::GetLauncher() {
if (!env_launcher_) {
env_->GetApplicationLauncher(env_launcher_.NewRequest());
}
return env_launcher_.get();
}
void Scope::InitScope(const component::ApplicationEnvironmentPtr& parent_env,
const std::string& label) {
zx::channel h1, h2;
if (zx::channel::create(0, &h1, &h2) < 0)
return;
parent_env->GetDirectory(std::move(h1));
service_provider_bridge_.set_backing_dir(std::move(h2));
parent_env->CreateNestedEnvironment(
service_provider_bridge_.OpenAsDirectory(), env_.NewRequest(),
env_controller_.NewRequest(), label);
}
} // namespace modular