
Originally the sandbox policies lived in //content, but with servicification this would create unwanted dependencies between //services and //content. Instead, create a new //sandbox/policy library to hold the sandbox integration code. This library can depend on the low-level //sandbox routines, but not nice versa. Tbr: ajgo@chromium.org (mechanical change rule) Bug: 1097376 Change-Id: I1ca9ac0015a625197f2d3aae104e8f7aa78dcfd9 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2272609 Commit-Queue: Robert Sesek <rsesek@chromium.org> Reviewed-by: Ken Rockot <rockot@google.com> Reviewed-by: Alex Gough <ajgo@chromium.org> Cr-Commit-Position: refs/heads/master@{#786385}
76 lines
2.4 KiB
C++
76 lines
2.4 KiB
C++
// 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 "content/utility/browser_exposed_utility_interfaces.h"
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <utility>
|
|
|
|
#include "base/bind.h"
|
|
#include "base/command_line.h"
|
|
#include "build/build_config.h"
|
|
#include "content/public/common/content_client.h"
|
|
#include "content/public/utility/content_utility_client.h"
|
|
#include "mojo/public/cpp/bindings/binder_map.h"
|
|
#include "mojo/public/cpp/bindings/pending_receiver.h"
|
|
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
|
|
#include "sandbox/policy/switches.h"
|
|
|
|
#if !defined(OS_ANDROID)
|
|
#include "content/public/common/resource_usage_reporter.mojom.h"
|
|
#include "services/proxy_resolver/proxy_resolver_v8.h" // nogncheck (bug 12345)
|
|
#endif
|
|
|
|
namespace content {
|
|
|
|
namespace {
|
|
|
|
#if !defined(OS_ANDROID)
|
|
class ResourceUsageReporterImpl : public mojom::ResourceUsageReporter {
|
|
public:
|
|
ResourceUsageReporterImpl() = default;
|
|
ResourceUsageReporterImpl(const ResourceUsageReporterImpl&) = delete;
|
|
~ResourceUsageReporterImpl() override = default;
|
|
|
|
ResourceUsageReporterImpl& operator=(const ResourceUsageReporterImpl&) =
|
|
delete;
|
|
|
|
private:
|
|
void GetUsageData(GetUsageDataCallback callback) override {
|
|
mojom::ResourceUsageDataPtr data = mojom::ResourceUsageData::New();
|
|
size_t total_heap_size =
|
|
proxy_resolver::ProxyResolverV8::GetTotalHeapSize();
|
|
if (total_heap_size) {
|
|
data->reports_v8_stats = true;
|
|
data->v8_bytes_allocated = total_heap_size;
|
|
data->v8_bytes_used = proxy_resolver::ProxyResolverV8::GetUsedHeapSize();
|
|
}
|
|
std::move(callback).Run(std::move(data));
|
|
}
|
|
};
|
|
|
|
void CreateResourceUsageReporter(
|
|
mojo::PendingReceiver<mojom::ResourceUsageReporter> receiver) {
|
|
mojo::MakeSelfOwnedReceiver(std::make_unique<ResourceUsageReporterImpl>(),
|
|
std::move(receiver));
|
|
}
|
|
#endif // !defined(OS_ANDROID)
|
|
|
|
} // namespace
|
|
|
|
void ExposeUtilityInterfacesToBrowser(mojo::BinderMap* binders) {
|
|
#if !defined(OS_ANDROID)
|
|
if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
|
|
sandbox::policy::switches::kNoneSandboxAndElevatedPrivileges)) {
|
|
binders->Add(base::BindRepeating(&CreateResourceUsageReporter),
|
|
base::ThreadTaskRunnerHandle::Get());
|
|
}
|
|
#endif // !defined(OS_ANDROID)
|
|
|
|
GetContentClient()->utility()->ExposeInterfacesToBrowser(binders);
|
|
}
|
|
|
|
} // namespace content
|