Allow HTML parser token limits to be varied via field trial.
Once this patch lands, we'll be able to run a field trial by setting
the backgroundHtmlParserOutstandingTokenLimit and
backgroundHtmlParserPendingTokenLimit parameters.
BUG=497942
[email protected], [email protected], [email protected]
Review URL: https://codereview.chromium.org/1189923002
Cr-Commit-Position: refs/heads/master@{#335284}
diff --git a/chrome/browser/chrome_content_browser_client_unittest.cc b/chrome/browser/chrome_content_browser_client_unittest.cc
index 6b35cb94..9e98585cd 100644
--- a/chrome/browser/chrome_content_browser_client_unittest.cc
+++ b/chrome/browser/chrome_content_browser_client_unittest.cc
@@ -4,6 +4,8 @@
#include "chrome/browser/chrome_content_browser_client.h"
+#include <map>
+
#include "base/command_line.h"
#include "base/metrics/field_trial.h"
#include "base/strings/utf_string_conversions.h"
@@ -15,10 +17,12 @@
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/search_engines/template_url_service.h"
#include "components/variations/entropy_provider.h"
+#include "components/variations/variations_associated_data.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_switches.h"
+#include "content/public/test/test_browser_thread_bundle.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
@@ -143,6 +147,89 @@
#endif // ENABLE_WEBRTC
+class BlinkSettingsFieldTrialTest : public testing::Test {
+ public:
+ BlinkSettingsFieldTrialTest()
+ : trial_list_(NULL),
+ command_line_(base::CommandLine::NO_PROGRAM) {}
+
+ void SetUp() override {
+ command_line_.AppendSwitchASCII(
+ switches::kProcessType, switches::kRendererProcess);
+ }
+
+ void TearDown() override {
+ variations::testing::ClearAllVariationParams();
+ }
+
+ void CreateFieldTrial() {
+ base::FieldTrialList::CreateFieldTrial(kFieldTrialName, kGroupName);
+ }
+
+ void CreateFieldTrialWithParams() {
+ CreateFieldTrial();
+ std::map<std::string, std::string> params;
+ params.insert(std::make_pair("key1", "value1"));
+ params.insert(std::make_pair("key2", "value2"));
+ variations::AssociateVariationParams(kFieldTrialName, kGroupName, params);
+ }
+
+ void AppendContentBrowserClientSwitches() {
+ client_.AppendExtraCommandLineSwitches(&command_line_, kFakeChildProcessId);
+ }
+
+ const base::CommandLine& command_line() const {
+ return command_line_;
+ }
+
+ void AppendBlinkSettingsSwitch(const char* value) {
+ command_line_.AppendSwitchASCII(switches::kBlinkSettings, value);
+ }
+
+ private:
+ static const int kFakeChildProcessId = 1;
+ static const char kFieldTrialName[];
+ static const char kGroupName[];
+
+ ChromeContentBrowserClient client_;
+ base::FieldTrialList trial_list_;
+ base::CommandLine command_line_;
+
+ content::TestBrowserThreadBundle thread_bundle_;
+};
+
+const char BlinkSettingsFieldTrialTest::kFieldTrialName[] =
+ "BackgroundHtmlParserTokenLimits";
+const char BlinkSettingsFieldTrialTest::kGroupName[] = "FakeGroup";
+
+TEST_F(BlinkSettingsFieldTrialTest, NoFieldTrial) {
+ AppendContentBrowserClientSwitches();
+ EXPECT_FALSE(command_line().HasSwitch(switches::kBlinkSettings));
+}
+
+TEST_F(BlinkSettingsFieldTrialTest, FieldTrialWithoutParams) {
+ CreateFieldTrial();
+ AppendContentBrowserClientSwitches();
+ EXPECT_FALSE(command_line().HasSwitch(switches::kBlinkSettings));
+}
+
+TEST_F(BlinkSettingsFieldTrialTest, BlinkSettingsSwitchAlreadySpecified) {
+ AppendBlinkSettingsSwitch("foo");
+ CreateFieldTrialWithParams();
+ AppendContentBrowserClientSwitches();
+ EXPECT_TRUE(command_line().HasSwitch(switches::kBlinkSettings));
+ EXPECT_EQ("foo",
+ command_line().GetSwitchValueASCII(switches::kBlinkSettings));
+}
+
+TEST_F(BlinkSettingsFieldTrialTest, FieldTrialEnabled) {
+ CreateFieldTrialWithParams();
+ AppendContentBrowserClientSwitches();
+ EXPECT_TRUE(command_line().HasSwitch(switches::kBlinkSettings));
+ EXPECT_EQ("key1=value1,key2=value2",
+ command_line().GetSwitchValueASCII(switches::kBlinkSettings));
+}
+
} // namespace chrome
#if !defined(OS_IOS) && !defined(OS_ANDROID)