123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- // Copyright 2022 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 "android_webview/browser/tracing/aw_background_tracing_metrics_provider.h"
- #include <utility>
- #include "base/bind.h"
- #include "components/tracing/common/trace_startup_config.h"
- #include "content/public/browser/background_tracing_config.h"
- #include "content/public/browser/background_tracing_manager.h"
- #include "content/public/browser/content_browser_client.h"
- #include "content/public/common/content_client.h"
- #include "content/public/test/browser_task_environment.h"
- #include "testing/gtest/include/gtest/gtest.h"
- #include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h"
- #include "third_party/metrics_proto/trace_log.pb.h"
- namespace tracing {
- namespace {
- const char kDummyTrace[] = "Trace bytes as serialized proto";
- } // namespace
- class AwBackgroundTracingMetricsProviderTest : public testing::Test {
- public:
- AwBackgroundTracingMetricsProviderTest() {
- content::SetContentClient(&content_client_);
- content::SetBrowserClientForTesting(&browser_client_);
- }
- ~AwBackgroundTracingMetricsProviderTest() override {
- content::SetBrowserClientForTesting(nullptr);
- content::SetContentClient(nullptr);
- }
- void SetUp() override {
- base::Value::Dict dict;
- ;
- dict.Set("mode", "REACTIVE_TRACING_MODE");
- dict.Set("custom_categories",
- tracing::TraceStartupConfig::kDefaultStartupCategories);
- base::Value::List rules_list;
- {
- base::Value::Dict rules_dict;
- rules_dict.Set("rule", "MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED");
- rules_dict.Set("trigger_name", "test");
- rules_list.Append(std::move(rules_dict));
- }
- dict.Set("configs", std::move(rules_list));
- std::unique_ptr<content::BackgroundTracingConfig> config(
- content::BackgroundTracingConfig::FromDict(std::move(dict)));
- ASSERT_TRUE(config);
- ASSERT_TRUE(
- content::BackgroundTracingManager::GetInstance().SetActiveScenario(
- std::move(config),
- content::BackgroundTracingManager::ANONYMIZE_DATA));
- }
- private:
- content::BrowserTaskEnvironment task_environment_;
- content::ContentClient content_client_;
- content::ContentBrowserClient browser_client_;
- };
- TEST_F(AwBackgroundTracingMetricsProviderTest, NoTraceData) {
- AwBackgroundTracingMetricsProvider provider;
- ASSERT_FALSE(provider.HasIndependentMetrics());
- }
- TEST_F(AwBackgroundTracingMetricsProviderTest, UploadsTraceLog) {
- AwBackgroundTracingMetricsProvider provider;
- EXPECT_FALSE(provider.HasIndependentMetrics());
- content::BackgroundTracingManager::GetInstance().SetTraceToUploadForTesting(
- std::make_unique<std::string>(kDummyTrace));
- EXPECT_TRUE(provider.HasIndependentMetrics());
- metrics::ChromeUserMetricsExtension uma_proto;
- uma_proto.set_client_id(100);
- uma_proto.set_session_id(15);
- provider.ProvideIndependentMetrics(
- base::BindOnce([](bool success) { EXPECT_TRUE(success); }), &uma_proto,
- /* snapshot_manager=*/nullptr);
- EXPECT_EQ(100u, uma_proto.client_id());
- EXPECT_EQ(15, uma_proto.session_id());
- ASSERT_EQ(1, uma_proto.trace_log_size());
- EXPECT_EQ(kDummyTrace, uma_proto.trace_log(0).raw_data());
- EXPECT_FALSE(provider.HasIndependentMetrics());
- }
- TEST_F(AwBackgroundTracingMetricsProviderTest, ClearsAppPackageName) {
- AwBackgroundTracingMetricsProvider provider;
- EXPECT_FALSE(provider.HasIndependentMetrics());
- content::BackgroundTracingManager::GetInstance().SetTraceToUploadForTesting(
- std::make_unique<std::string>(kDummyTrace));
- EXPECT_TRUE(provider.HasIndependentMetrics());
- metrics::ChromeUserMetricsExtension uma_proto;
- uma_proto.mutable_system_profile()->set_app_package_name("my_app");
- provider.ProvideIndependentMetrics(
- base::BindOnce([](bool success) { EXPECT_TRUE(success); }), &uma_proto,
- /* snapshot_manager=*/nullptr);
- EXPECT_TRUE(uma_proto.system_profile().app_package_name().empty());
- ASSERT_EQ(1, uma_proto.trace_log_size());
- EXPECT_EQ(kDummyTrace, uma_proto.trace_log(0).raw_data());
- EXPECT_FALSE(provider.HasIndependentMetrics());
- }
- TEST_F(AwBackgroundTracingMetricsProviderTest, HandlesMissingTrace) {
- AwBackgroundTracingMetricsProvider provider;
- EXPECT_FALSE(provider.HasIndependentMetrics());
- content::BackgroundTracingManager::GetInstance().SetTraceToUploadForTesting(
- std::make_unique<std::string>(kDummyTrace));
- EXPECT_TRUE(provider.HasIndependentMetrics());
- content::BackgroundTracingManager::GetInstance().SetTraceToUploadForTesting(
- nullptr);
- metrics::ChromeUserMetricsExtension uma_proto;
- uma_proto.set_client_id(100);
- uma_proto.set_session_id(15);
- provider.ProvideIndependentMetrics(
- base::BindOnce([](bool success) { EXPECT_FALSE(success); }), &uma_proto,
- /* snapshot_manager=*/nullptr);
- EXPECT_EQ(100u, uma_proto.client_id());
- EXPECT_EQ(15, uma_proto.session_id());
- EXPECT_EQ(0, uma_proto.trace_log_size());
- EXPECT_FALSE(provider.HasIndependentMetrics());
- }
- } // namespace tracing
|