| Index: content/browser/tracing/background_tracing_manager_browsertest.cc | 
| diff --git a/content/browser/tracing/background_tracing_manager_browsertest.cc b/content/browser/tracing/background_tracing_manager_browsertest.cc | 
| index 1618a7d0dac10816cd6bb38abf3e273e0dbe6291..44d82e78a058e70a65a90dbfa9289eb88b2a5628 100644 | 
| --- a/content/browser/tracing/background_tracing_manager_browsertest.cc | 
| +++ b/content/browser/tracing/background_tracing_manager_browsertest.cc | 
| @@ -3,11 +3,13 @@ | 
| // found in the LICENSE file. | 
|  | 
| #include "base/bind.h" | 
| +#include "base/command_line.h" | 
| #include "base/metrics/histogram_macros.h" | 
| #include "base/strings/pattern.h" | 
| #include "base/trace_event/trace_event.h" | 
| #include "content/browser/tracing/background_tracing_manager_impl.h" | 
| #include "content/browser/tracing/background_tracing_rule.h" | 
| +#include "content/public/common/content_switches.h" | 
| #include "content/public/test/content_browser_test.h" | 
| #include "content/public/test/content_browser_test_utils.h" | 
| #include "content/public/test/test_utils.h" | 
| @@ -415,6 +417,94 @@ IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, | 
| } | 
| } | 
|  | 
| +// This tests that toggling Blink scenarios in the config alters the | 
| +// command-line. | 
| +IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, | 
| +                       ToggleBlinkScenarios) { | 
| +  { | 
| +    SetupBackgroundTracingManager(); | 
| + | 
| +    base::RunLoop run_loop; | 
| +    BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper( | 
| +        run_loop.QuitClosure()); | 
| + | 
| +    base::DictionaryValue dict; | 
| +    dict.SetString("mode", "PREEMPTIVE_TRACING_MODE"); | 
| +    dict.SetString("category", "BENCHMARK"); | 
| + | 
| +    scoped_ptr<base::ListValue> rules_list(new base::ListValue()); | 
| +    { | 
| +      scoped_ptr<base::DictionaryValue> rules_dict(new base::DictionaryValue()); | 
| +      rules_dict->SetString("rule", "MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED"); | 
| +      rules_dict->SetString("trigger_name", "test2"); | 
| +      rules_list->Append(rules_dict.Pass()); | 
| +    } | 
| + | 
| +    dict.Set("configs", rules_list.Pass()); | 
| +    dict.SetString("enable_blink_features", "FasterWeb1,FasterWeb2"); | 
| +    dict.SetString("disable_blink_features", "SlowerWeb1,SlowerWeb2"); | 
| +    scoped_ptr<BackgroundTracingConfig> config( | 
| +        BackgroundTracingConfigImpl::FromDict(&dict)); | 
| +    EXPECT_TRUE(config); | 
| + | 
| +    bool scenario_activated = | 
| +        BackgroundTracingManager::GetInstance()->SetActiveScenario( | 
| +            config.Pass(), upload_config_wrapper.get_receive_callback(), | 
| +            BackgroundTracingManager::NO_DATA_FILTERING); | 
| + | 
| +    EXPECT_TRUE(scenario_activated); | 
| + | 
| +    base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 
| +    EXPECT_TRUE(command_line); | 
| + | 
| +    EXPECT_EQ(command_line->GetSwitchValueASCII(switches::kEnableBlinkFeatures), | 
| +              "FasterWeb1,FasterWeb2"); | 
| +    EXPECT_EQ( | 
| +        command_line->GetSwitchValueASCII(switches::kDisableBlinkFeatures), | 
| +        "SlowerWeb1,SlowerWeb2"); | 
| +  } | 
| +} | 
| + | 
| +// This tests that toggling Blink scenarios in a scenario won't activate | 
| +// if there's already Blink features toggled by something else (about://flags) | 
| +IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, | 
| +                       ToggleBlinkScenariosNotOverridingSwitches) { | 
| +  SetupBackgroundTracingManager(); | 
| + | 
| +  base::RunLoop run_loop; | 
| +  BackgroundTracingManagerUploadConfigWrapper upload_config_wrapper( | 
| +      run_loop.QuitClosure()); | 
| + | 
| +  base::DictionaryValue dict; | 
| +  dict.SetString("mode", "PREEMPTIVE_TRACING_MODE"); | 
| +  dict.SetString("category", "BENCHMARK"); | 
| + | 
| +  scoped_ptr<base::ListValue> rules_list(new base::ListValue()); | 
| +  { | 
| +    scoped_ptr<base::DictionaryValue> rules_dict(new base::DictionaryValue()); | 
| +    rules_dict->SetString("rule", "MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED"); | 
| +    rules_dict->SetString("trigger_name", "test2"); | 
| +    rules_list->Append(rules_dict.Pass()); | 
| +  } | 
| + | 
| +  dict.Set("configs", rules_list.Pass()); | 
| +  dict.SetString("enable_blink_features", "FasterWeb1,FasterWeb2"); | 
| +  dict.SetString("disable_blink_features", "SlowerWeb1,SlowerWeb2"); | 
| +  scoped_ptr<BackgroundTracingConfig> config( | 
| +      BackgroundTracingConfigImpl::FromDict(&dict)); | 
| +  EXPECT_TRUE(config); | 
| + | 
| +  base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 
| +      switches::kEnableBlinkFeatures, "FooFeature"); | 
| + | 
| +  bool scenario_activated = | 
| +      BackgroundTracingManager::GetInstance()->SetActiveScenario( | 
| +          config.Pass(), upload_config_wrapper.get_receive_callback(), | 
| +          BackgroundTracingManager::NO_DATA_FILTERING); | 
| + | 
| +  EXPECT_FALSE(scenario_activated); | 
| +} | 
| + | 
| // This tests that delayed histogram triggers triggers work as expected | 
| // with preemptive scenarios. | 
| IN_PROC_BROWSER_TEST_F(BackgroundTracingManagerBrowserTest, | 
|  |