Use a tokenizer to parse the command line for applications.

This enables the use of spaces within arguments, as those can now
be quoted.

R=ppi@chromium.org, ppi, qsr

Review URL: https://codereview.chromium.org/1905353002 .
diff --git a/shell/command_line_util.cc b/shell/command_line_util.cc
index dfa2986..b128868 100644
--- a/shell/command_line_util.cc
+++ b/shell/command_line_util.cc
@@ -5,10 +5,12 @@
 #include "shell/command_line_util.h"
 
 #include <functional>
+#include <string>
+#include <vector>
 
 #include "base/command_line.h"
 #include "base/logging.h"
-#include "base/strings/string_split.h"
+#include "base/strings/string_tokenizer.h"
 #include "base/strings/utf_string_conversions.h"
 #include "shell/context.h"
 #include "shell/switches.h"
@@ -46,7 +48,12 @@
                       const std::string& app_url_and_args,
                       std::vector<std::string>* args) {
   // SplitString() returns empty strings for extra delimeter characters (' ').
-  base::SplitString(app_url_and_args, ' ', args);
+  base::StringTokenizer tokenizer =
+      base::StringTokenizer(app_url_and_args, " ");
+  tokenizer.set_quote_chars("'\"");
+  while (tokenizer.GetNext()) {
+    args->push_back(tokenizer.token());
+  }
   args->erase(std::remove_if(args->begin(), args->end(),
                              [](const std::string& a) { return a.empty(); }),
               args->end());
diff --git a/shell/command_line_util_unittest.cc b/shell/command_line_util_unittest.cc
index 58d7649..5fa63ad 100644
--- a/shell/command_line_util_unittest.cc
+++ b/shell/command_line_util_unittest.cc
@@ -39,6 +39,7 @@
   const char* NO_ARGUMENTS[] = {nullptr};
   const char* ONE_ARGUMENTS[] = {"1", nullptr};
   const char* TWO_ARGUMENTS[] = {"1", "two", nullptr};
+  const char* QUOTED_ARGUMENTS[] = {"'1 two'", nullptr};
   static const struct Expectation {
     const char* args;
     const char* url;
@@ -54,9 +55,9 @@
       {"http://example.com 1 ", "http://example.com", ONE_ARGUMENTS},
       {"http://example.com  1 ", "http://example.com", ONE_ARGUMENTS},
       {"http://example.com 1 two", "http://example.com", TWO_ARGUMENTS},
-      {"   http://example.com  1  two   ",
-       "http://example.com",
-       TWO_ARGUMENTS}};
+      {"   http://example.com  1  two   ", "http://example.com", TWO_ARGUMENTS},
+      {"http://example.com '1 two' ", "http://example.com", QUOTED_ARGUMENTS},
+  };
   Context context;
   context.SetCommandLineCWD(base::FilePath("/root"));
   for (auto& expectation : EXPECTATIONS) {