| // Copyright 2015 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. | 
 |  | 
 | #ifndef CONTENT_BROWSER_TRACING_BACKGROUND_TRACING_CONFIG_IMPL_H_ | 
 | #define CONTENT_BROWSER_TRACING_BACKGROUND_TRACING_CONFIG_IMPL_H_ | 
 |  | 
 | #include <memory> | 
 | #include <vector> | 
 |  | 
 | #include "base/gtest_prod_util.h" | 
 | #include "base/macros.h" | 
 | #include "content/common/content_export.h" | 
 | #include "content/public/browser/background_tracing_config.h" | 
 |  | 
 | namespace content { | 
 | class BackgroundTracingRule; | 
 |  | 
 | class CONTENT_EXPORT BackgroundTracingConfigImpl | 
 |     : public BackgroundTracingConfig { | 
 |  public: | 
 |   explicit BackgroundTracingConfigImpl(TracingMode tracing_mode); | 
 |  | 
 |   ~BackgroundTracingConfigImpl() override; | 
 |  | 
 |   // From BackgroundTracingConfig | 
 |   void IntoDict(base::DictionaryValue* dict) const override; | 
 |  | 
 |   enum CategoryPreset { | 
 |     CATEGORY_PRESET_UNSET, | 
 |     BENCHMARK, | 
 |     BENCHMARK_DEEP, | 
 |     BENCHMARK_GPU, | 
 |     BENCHMARK_IPC, | 
 |     BENCHMARK_STARTUP, | 
 |     BENCHMARK_BLINK_GC, | 
 |     BENCHMARK_MEMORY_HEAVY, | 
 |     BENCHMARK_MEMORY_LIGHT, | 
 |     BENCHMARK_EXECUTION_METRIC, | 
 |     BENCHMARK_NAVIGATION, | 
 |     BLINK_STYLE | 
 |   }; | 
 |  | 
 |   CategoryPreset category_preset() const { return category_preset_; } | 
 |   void set_category_preset(CategoryPreset category_preset) { | 
 |     category_preset_ = category_preset; | 
 |   } | 
 |  | 
 |   const std::vector<std::unique_ptr<BackgroundTracingRule>>& rules() const { | 
 |     return rules_; | 
 |   } | 
 |   const std::string& scenario_name() const { return scenario_name_; } | 
 |   const std::string& enable_blink_features() const { | 
 |     return enable_blink_features_; | 
 |   } | 
 |   const std::string& disable_blink_features() const { | 
 |     return disable_blink_features_; | 
 |   } | 
 |  | 
 |   void AddPreemptiveRule(const base::DictionaryValue* dict); | 
 |   void AddReactiveRule( | 
 |       const base::DictionaryValue* dict, | 
 |       BackgroundTracingConfigImpl::CategoryPreset category_preset); | 
 |  | 
 |   static std::unique_ptr<BackgroundTracingConfigImpl> PreemptiveFromDict( | 
 |       const base::DictionaryValue* dict); | 
 |   static std::unique_ptr<BackgroundTracingConfigImpl> ReactiveFromDict( | 
 |       const base::DictionaryValue* dict); | 
 |  | 
 |   static std::unique_ptr<BackgroundTracingConfigImpl> FromDict( | 
 |       const base::DictionaryValue* dict); | 
 |  | 
 |   static std::string CategoryPresetToString( | 
 |       BackgroundTracingConfigImpl::CategoryPreset category_preset); | 
 |   static bool StringToCategoryPreset( | 
 |       const std::string& category_preset_string, | 
 |       BackgroundTracingConfigImpl::CategoryPreset* category_preset); | 
 |  | 
 |  private: | 
 |   FRIEND_TEST_ALL_PREFIXES(BackgroundTracingConfigTest, | 
 |                            ValidPreemptiveConfigToString); | 
 |  | 
 |   CategoryPreset category_preset_; | 
 |   std::vector<std::unique_ptr<BackgroundTracingRule>> rules_; | 
 |   std::string scenario_name_; | 
 |   std::string enable_blink_features_; | 
 |   std::string disable_blink_features_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(BackgroundTracingConfigImpl); | 
 | }; | 
 |  | 
 | }  // namespace content | 
 |  | 
 | #endif  // CONTENT_BROWSER_TRACING_BACKGROUND_TRACING_CONFIG_IMPL_H_ |