Gn: Add support to generate Visual Studio 2017 solutions.

- Add a new command line vs2017 to generate 2017 solutions
- Keep 2015 as the default.
- Update the toolset version.

BUG=683729

Review-Url: https://codereview.chromium.org/2738823002
Cr-Original-Commit-Position: refs/heads/master@{#456443}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: c20ee868a144b9f01eaeae39bba8e9921dee2635
diff --git a/tools/gn/command_gen.cc b/tools/gn/command_gen.cc
index 26fc729..194cace 100644
--- a/tools/gn/command_gen.cc
+++ b/tools/gn/command_gen.cc
@@ -36,6 +36,7 @@
 const char kSwitchIdeValueVs[] = "vs";
 const char kSwitchIdeValueVs2013[] = "vs2013";
 const char kSwitchIdeValueVs2015[] = "vs2015";
+const char kSwitchIdeValueVs2017[] = "vs2017";
 const char kSwitchIdeValueXcode[] = "xcode";
 const char kSwitchIdeValueJson[] = "json";
 const char kSwitchNinjaExtraArgs[] = "ninja-extra-args";
@@ -193,10 +194,13 @@
     }
     return res;
   } else if (ide == kSwitchIdeValueVs || ide == kSwitchIdeValueVs2013 ||
-             ide == kSwitchIdeValueVs2015) {
-    VisualStudioWriter::Version version =
-        ide == kSwitchIdeValueVs2013 ? VisualStudioWriter::Version::Vs2013
-                                     : VisualStudioWriter::Version::Vs2015;
+             ide == kSwitchIdeValueVs2015 || ide == kSwitchIdeValueVs2017) {
+    VisualStudioWriter::Version version = VisualStudioWriter::Version::Vs2015;
+    if (ide == kSwitchIdeValueVs2013)
+      version = VisualStudioWriter::Version::Vs2013;
+    else if (ide == kSwitchIdeValueVs2017)
+      version = VisualStudioWriter::Version::Vs2017;
+
     std::string sln_name;
     if (command_line->HasSwitch(kSwitchSln))
       sln_name = command_line->GetSwitchValueASCII(kSwitchSln);
@@ -293,6 +297,7 @@
              (default Visual Studio version: 2015)
       "vs2013" - Visual Studio 2013 project/solution files.
       "vs2015" - Visual Studio 2015 project/solution files.
+      "vs2017" - Visual Studio 2017 project/solution files.
       "xcode" - Xcode workspace/solution files.
       "qtcreator" - QtCreator project files.
       "json" - JSON file containing target information
diff --git a/tools/gn/visual_studio_writer.cc b/tools/gn/visual_studio_writer.cc
index 6e0b1bd..8a8cf52 100644
--- a/tools/gn/visual_studio_writer.cc
+++ b/tools/gn/visual_studio_writer.cc
@@ -71,10 +71,13 @@
 
 const char kToolsetVersionVs2013[] = "v120";               // Visual Studio 2013
 const char kToolsetVersionVs2015[] = "v140";               // Visual Studio 2015
+const char kToolsetVersionVs2017[] = "v141";               // Visual Studio 2017
 const char kProjectVersionVs2013[] = "12.0";               // Visual Studio 2013
 const char kProjectVersionVs2015[] = "14.0";               // Visual Studio 2015
+const char kProjectVersionVs2017[] = "15.0";               // Visual Studio 2015
 const char kVersionStringVs2013[] = "Visual Studio 2013";  // Visual Studio 2013
 const char kVersionStringVs2015[] = "Visual Studio 2015";  // Visual Studio 2015
+const char kVersionStringVs2017[] = "Visual Studio 2017";  // Visual Studio 2017
 const char kWindowsKitsVersion[] = "10";                   // Windows 10 SDK
 const char kWindowsKitsIncludeVersion[] = "10.0.14393.0";  // Windows 10 SDK
 
@@ -273,6 +276,11 @@
       toolset_version_ = kToolsetVersionVs2015;
       version_string_ = kVersionStringVs2015;
       break;
+    case Version::Vs2017:
+      project_version_ = kProjectVersionVs2017;
+      toolset_version_ = kToolsetVersionVs2017;
+      version_string_ = kVersionStringVs2017;
+      break;
     default:
       NOTREACHED() << "Not a valid Visual Studio Version: " << version;
   }
diff --git a/tools/gn/visual_studio_writer.h b/tools/gn/visual_studio_writer.h
index 639be09..1793573 100644
--- a/tools/gn/visual_studio_writer.h
+++ b/tools/gn/visual_studio_writer.h
@@ -28,7 +28,8 @@
  public:
   enum Version {
     Vs2013 = 1,  // Visual Studio 2013
-    Vs2015       // Visual Studio 2015
+    Vs2015,      // Visual Studio 2015
+    Vs2017       // Visual Studio 2017
   };
 
   // Writes Visual Studio project and solution files. |sln_name| is the optional