blob: dc1617e368ec9513fe39aa72de70d75b8fda8411 [file] [log] [blame]
// Copyright 2019 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 <iostream>
#include <string>
#include "base/at_exit.h"
#include "base/command_line.h"
#include "base/json/json_writer.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "build/build_config.h"
#include "chrome/app/chrome_content_browser_overlay_manifest.h"
#include "content/public/app/content_browser_manifest.h"
#include "services/service_manager/public/cpp/manifest.h"
base::ListValue GetInterfacesForCapability(
const service_manager::Manifest::ExposedCapabilityMap& exposed_capabilities,
const std::string& capability) {
auto it = exposed_capabilities.find(capability);
if (it == exposed_capabilities.end()) {
return base::ListValue();
}
base::ListValue interface_names;
for (const auto& interface_name : it->second) {
interface_names.GetList().emplace_back(base::Value(interface_name));
}
return interface_names;
}
void PrintAccessibleInterfaces(const service_manager::Manifest& manifest,
const std::string& capability) {
base::DictionaryValue interfaces;
base::ListValue exposed_capabilities =
GetInterfacesForCapability(manifest.exposed_capabilities, capability);
interfaces.SetKey("exposed_capabilities", std::move(exposed_capabilities));
for (const auto& entry : manifest.exposed_interface_filter_capabilities) {
base::ListValue interface_names =
GetInterfacesForCapability(entry.second, capability);
interfaces.SetPath({"exposed_interface_filter_capabilities", entry.first},
std::move(interface_names));
}
std::string output;
base::JSONWriter::WriteWithOptions(
interfaces, base::JSONWriter::OPTIONS_PRETTY_PRINT, &output);
std::cout << output;
}
int main(int argc, const char** argv) {
base::AtExitManager at_exit;
base::CommandLine::Init(argc, argv);
service_manager::Manifest manifest = content::GetContentBrowserManifest();
manifest.Amend(GetChromeContentBrowserOverlayManifest());
auto args = base::CommandLine::ForCurrentProcess()->GetArgs();
for (const base::CommandLine::StringType& arg : args) {
#if defined(OS_WIN)
PrintAccessibleInterfaces(manifest, base::UTF16ToASCII(arg));
#else
PrintAccessibleInterfaces(manifest, arg);
#endif
}
return 0;
}