[cmx][fuchsia-pkg] Parse deprecated-bare-package-url
TESTED=Added deprecated-bare-package-url to token_manager.cmx, observed
that it is being parsed. Observed that warnings are still thrown but
nothing fails.
CF-156 #comment
Change-Id: I09bc5c8c0e495c4d5229464a2a41f62353a9d633
diff --git a/bin/appmgr/realm.cc b/bin/appmgr/realm.cc
index 10d75c4..15450af 100644
--- a/bin/appmgr/realm.cc
+++ b/bin/appmgr/realm.cc
@@ -618,10 +618,15 @@
CmxMetadata cmx;
std::string cmx_path;
FuchsiaPkgUrl fp;
+ bool is_fuchsia_pkg_url = false;
if (fp.Parse(package->resolved_url.get())) {
if (!fp.resource_path().empty()) {
// If the url has a resource, assume that's the cmx.
cmx_path = fp.resource_path();
+
+ // The URL is fuchsia-pkg iff it has a resource.
+ // TODO(CF-156): Remove this logic once all URLs are fuchsia-pkg.
+ is_fuchsia_pkg_url = true;
} else {
// It's possible the url does not have a resource, in which case either
// the cmx exists at meta/<package_name.cmx> or it does not exist.
@@ -656,6 +661,17 @@
return;
}
+ // TODO(CF-156): Remove this logic once all URLs are fuchsia-pkg.
+ if (!is_fuchsia_pkg_url) {
+ // TODO(CF-156): If !cmx.deprecated_bare_package_url(), fail the component.
+ FXL_LOG(WARNING)
+ << "Component " << fp.GetDefaultComponentName()
+ << " was launched without using fuchsia-pkg URLs! Use "
+ << package->resolved_url << "#" << fp.GetDefaultComponentCmxPath()
+ << " instead. See https://fuchsia.googlesource.com/docs/+/master/"
+ << "glossary.md#fuchsia_pkg-url for more information.";
+ }
+
RuntimeMetadata runtime;
std::string runtime_parse_error;
// If meta/*.cmx has runtime data, get it.
diff --git a/lib/cmx/cmx.cc b/lib/cmx/cmx.cc
index c27d597..ab92eff 100644
--- a/lib/cmx/cmx.cc
+++ b/lib/cmx/cmx.cc
@@ -18,6 +18,8 @@
constexpr char kSandbox[] = "sandbox";
constexpr char kProgram[] = "program";
+// TODO(CF-156): Remove this logic once all URLs are fuchsia-pkg.
+constexpr char kDeprecatedBarePackageUrl[] = "deprecated-bare-package-url";
CmxMetadata::CmxMetadata() = default;
CmxMetadata::~CmxMetadata() = default;
@@ -33,6 +35,7 @@
json_parser->ReportError("File is not a JSON object.");
return false;
}
+ ParseDeprecatedBarePackageUrl(document, json_parser);
ParseSandboxMetadata(document, json_parser);
runtime_meta_.ParseFromDocument(document, json_parser);
ParseProgramMetadata(document, json_parser);
@@ -40,6 +43,19 @@
return !json_parser->HasError();
}
+void CmxMetadata::ParseDeprecatedBarePackageUrl(
+ const rapidjson::Document& document, json::JSONParser* json_parser) {
+ auto package_url = document.FindMember(kDeprecatedBarePackageUrl);
+ if (package_url == document.MemberEnd()) {
+ deprecated_bare_package_url_ = false;
+ } else if (!package_url->value.IsBool()) {
+ deprecated_bare_package_url_ = false;
+ json_parser->ReportError("'deprecated-bare-package-url' is not a bool.");
+ } else {
+ deprecated_bare_package_url_ = package_url->value.GetBool();
+ }
+}
+
const rapidjson::Value& CmxMetadata::GetFacet(const std::string& key) {
return facet_parser_.GetSection(key);
}
diff --git a/lib/cmx/cmx.h b/lib/cmx/cmx.h
index 289c556..577995e 100644
--- a/lib/cmx/cmx.h
+++ b/lib/cmx/cmx.h
@@ -35,6 +35,10 @@
const RuntimeMetadata& runtime_meta() { return runtime_meta_; }
const ProgramMetadata& program_meta() { return program_meta_; }
+ // True iff cmx has the deprecated-bare-package-url set to true.
+ // TODO(CF-156): Remove this logic once all URLs are fuchsia-pkg.
+ bool deprecated_bare_package_url() { return deprecated_bare_package_url_; }
+
private:
static std::string GetCmxPathFromPath(const std::regex& regex,
const std::string& path);
@@ -43,10 +47,17 @@
void ParseProgramMetadata(const rapidjson::Document& document,
json::JSONParser* json_parser);
+ // TODO(CF-156): Remove this logic once all URLs are fuchsia-pkg.
+ void ParseDeprecatedBarePackageUrl(const rapidjson::Document& document,
+ json::JSONParser* json_parser);
+
SandboxMetadata sandbox_meta_;
RuntimeMetadata runtime_meta_;
ProgramMetadata program_meta_;
CmxFacetParser facet_parser_;
+
+ // TODO(CF-156): Remove this logic once all URLs are fuchsia-pkg.
+ bool deprecated_bare_package_url_;
};
} // namespace component
diff --git a/lib/cmx/cmx_unittest.cc b/lib/cmx/cmx_unittest.cc
index 4f234e3..3d788bb 100644
--- a/lib/cmx/cmx_unittest.cc
+++ b/lib/cmx/cmx_unittest.cc
@@ -55,6 +55,7 @@
"services": [ "fuchsia.MyService" ]
},
"runner": "dart_runner",
+ "deprecated-bare-package-url": true,
"facets": {
"some_key": "some_value"
},
@@ -75,6 +76,8 @@
EXPECT_FALSE(cmx.runtime_meta().IsNull());
EXPECT_EQ(cmx.runtime_meta().runner(), "dart_runner");
+ EXPECT_TRUE(cmx.deprecated_bare_package_url());
+
const auto& some_value = cmx.GetFacet("some_key");
ASSERT_TRUE(some_value.IsString());
EXPECT_EQ("some_value", std::string(some_value.GetString()));
diff --git a/lib/loader/package_loader.cc b/lib/loader/package_loader.cc
index 0cfee4d..c0b9eb8 100644
--- a/lib/loader/package_loader.cc
+++ b/lib/loader/package_loader.cc
@@ -48,16 +48,6 @@
}
package.resolved_url = fuchsia_url.ToString();
- // TODO(CF-156): Remove support for non fuchsia-pkg URLs, and get rid of this.
- if (!FuchsiaPkgUrl::IsFuchsiaPkgScheme(url)) {
- FXL_LOG(WARNING)
- << "Component " << url
- << " was launched without using fuchsia-pkg URLs! Use "
- << package.resolved_url << "#"
- << fuchsia_url.GetDefaultComponentCmxPath()
- << " instead. See https://fuchsia.googlesource.com/docs/+/master/"
- << "glossary.md#fuchsia_pkg-url for more information.";
- }
fxl::UniqueFD package_dir(
open(fuchsia_url.pkgfs_dir_path().c_str(), O_DIRECTORY | O_RDONLY));