Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Unified Diff: chrome/test/base/mojo_test_connector.cc

Issue 2295433003: Changes around how browser_tests are launched for mash (Closed)
Patch Set: make manifest chromeos specific Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/base/mojo_test_connector.h ('k') | mash/package/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/base/mojo_test_connector.cc
diff --git a/chrome/test/base/mojo_test_connector.cc b/chrome/test/base/mojo_test_connector.cc
index e6428fbb1b4cab478a1eb98fb962f447b1eabd2f..32f6b8c07811a010fd023edaa4845c1251cf9c2c 100644
--- a/chrome/test/base/mojo_test_connector.cc
+++ b/chrome/test/base/mojo_test_connector.cc
@@ -34,45 +34,9 @@ using shell::mojom::ServicePtr;
namespace {
-const char kTestRunnerName[] = "mojo:test-runner";
+const char kTestRunnerName[] = "exe:mash_browser_tests";
const char kTestName[] = "exe:chrome";
-// Returns the Dictionary value of |parent| under the specified key, creating
-// and adding as necessary.
-base::DictionaryValue* EnsureDictionary(base::DictionaryValue* parent,
- const char* key) {
- base::DictionaryValue* dictionary = nullptr;
- if (parent->GetDictionary(key, &dictionary))
- return dictionary;
-
- std::unique_ptr<base::DictionaryValue> owned_dictionary(
- new base::DictionaryValue);
- dictionary = owned_dictionary.get();
- parent->Set(key, std::move(owned_dictionary));
- return dictionary;
-}
-
-// This builds a permissive catalog with the addition of the 'instance_name'
-// permission.
-std::unique_ptr<shell::TestCatalogStore> BuildTestCatalogStore() {
- std::unique_ptr<base::ListValue> apps(new base::ListValue);
- std::unique_ptr<base::DictionaryValue> test_app_config =
- shell::BuildPermissiveSerializedAppInfo(kTestRunnerName, "test");
- base::DictionaryValue* capabilities =
- EnsureDictionary(test_app_config.get(), catalog::Store::kCapabilitiesKey);
- base::DictionaryValue* required_capabilities =
- EnsureDictionary(capabilities, catalog::Store::kCapabilities_RequiredKey);
- std::unique_ptr<base::ListValue> required_shell_classes(new base::ListValue);
- required_shell_classes->AppendString("instance_name");
- required_shell_classes->AppendString("client_process");
- std::unique_ptr<base::DictionaryValue> shell_caps(new base::DictionaryValue);
- shell_caps->Set(catalog::Store::kCapabilities_ClassesKey,
- std::move(required_shell_classes));
- required_capabilities->Set("mojo:shell", std::move(shell_caps));
- apps->Append(std::move(test_app_config));
- return base::WrapUnique(new shell::TestCatalogStore(std::move(apps)));
-}
-
// BackgroundTestState maintains all the state necessary to bind the test to
// mojo. This class is only used on the thread created by BackgroundShell.
class BackgroundTestState {
@@ -220,20 +184,67 @@ class MojoTestState : public content::TestState {
DISALLOW_COPY_AND_ASSIGN(MojoTestState);
};
+// The name in the manifest results in getting exe:mash_browser_tests used,
+// remap that to browser_tests.
+void RemoveMashFromBrowserTests(base::CommandLine* command_line) {
+ base::FilePath exe_path(command_line->GetProgram());
+#if defined(OS_WIN)
+ exe_path = exe_path.DirName().Append(FILE_PATH_LITERAL("browser_tests.exe"));
+#else
+ exe_path = exe_path.DirName().Append(FILE_PATH_LITERAL("browser_tests"));
+#endif
+ command_line->SetProgram(exe_path);
+}
+
} // namespace
+// NativeRunnerDelegate that makes exe:mash_browser_tests to exe:browser_tests,
+// and removes '--run-in-mash'.
+class MojoTestConnector::NativeRunnerDelegateImpl
+ : public shell::NativeRunnerDelegate {
+ public:
+ NativeRunnerDelegateImpl() {}
+ ~NativeRunnerDelegateImpl() override {}
+
+ private:
+ // shell::NativeRunnerDelegate:
+ void AdjustCommandLineArgumentsForTarget(
+ const shell::Identity& target,
+ base::CommandLine* command_line) override {
+ if (target.name() != "exe:chrome") {
+ if (target.name() == "exe:mash_browser_tests")
+ RemoveMashFromBrowserTests(command_line);
+ command_line->AppendSwitch(MojoTestConnector::kMashApp);
+ return;
+ }
+
+ base::CommandLine::StringVector argv(command_line->argv());
+ auto iter =
+ std::find(argv.begin(), argv.end(), FILE_PATH_LITERAL("--run-in-mash"));
+ if (iter != argv.end())
+ argv.erase(iter);
+ *command_line = base::CommandLine(argv);
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(NativeRunnerDelegateImpl);
+};
+
// static
const char MojoTestConnector::kTestSwitch[] = "is_test";
+// static
+const char MojoTestConnector::kMashApp[] = "mash-app";
MojoTestConnector::MojoTestConnector() {}
shell::mojom::ServiceRequest MojoTestConnector::Init() {
+ native_runner_delegate_ = base::MakeUnique<NativeRunnerDelegateImpl>();
+
std::unique_ptr<shell::BackgroundShell::InitParams> init_params(
new shell::BackgroundShell::InitParams);
- init_params->catalog_store = BuildTestCatalogStore();
// When running in single_process mode chrome initializes the edk.
init_params->init_edk = !base::CommandLine::ForCurrentProcess()->HasSwitch(
content::kSingleProcessTestsFlag);
+ init_params->native_runner_delegate = native_runner_delegate_.get();
background_shell_.Init(std::move(init_params));
return background_shell_.CreateServiceRequest(kTestRunnerName);
}
« no previous file with comments | « chrome/test/base/mojo_test_connector.h ('k') | mash/package/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698