Commit 4ff5114e authored by Oliver Chang's avatar Oliver Chang Committed by Commit Bot

Add a tool for getting the accessible browser interfaces for a capability.

Bug: 942518
Change-Id: I2d0ab05864cf0e6d79b165732be90254bff21103
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1547720Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarAbhishek Arya <inferno@chromium.org>
Commit-Queue: Oliver Chang <ochang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#647136}
parent 38969ffb
......@@ -29,6 +29,7 @@ if (enable_ipc_fuzzer) {
testonly = true
deps = [
"//tools/ipc_fuzzer/fuzzer:ipc_fuzzer",
"//tools/ipc_fuzzer/get_accessible_interfaces:get_accessible_interfaces",
"//tools/ipc_fuzzer/message_dump:ipc_message_dump",
"//tools/ipc_fuzzer/message_replay:ipc_fuzzer_replay",
"//tools/ipc_fuzzer/message_tools:ipc_message_list",
......
include_rules = [
"+content/public/app",
"+chrome/app",
"+services/service_manager/public/cpp",
"+third_party/re2",
"+tools/ipc_fuzzer/message_lib",
]
executable("get_accessible_interfaces") {
sources = [
"get_accessible_interfaces.cc",
]
deps = [
"//base",
"//chrome/app:chrome_service_manifests",
"//content/public/app:service_manifests",
]
}
// 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/values.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 std::string& arg : args) {
PrintAccessibleInterfaces(manifest, arg);
}
return 0;
}
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