Fix WebAppInitializer when sshd.listenAddress=off and host key doesn't exist

This is the same fix as 91205ae8761fddeb7d0a854c572064cef6476bd4 but for
the WebAppInitializer.

Change-Id: Ib9af4a91ea52ee6e894c6cc857a0aaaff642e9b1
diff --git a/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java b/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
index e13e05a..32fac33 100644
--- a/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
+++ b/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
@@ -51,6 +51,8 @@
 import com.google.gerrit.server.schema.DatabaseModule;
 import com.google.gerrit.server.schema.SchemaModule;
 import com.google.gerrit.server.schema.SchemaVersionCheck;
+import com.google.gerrit.server.ssh.NoSshModule;
+import com.google.gerrit.server.ssh.SshAddressesModule;
 import com.google.gerrit.solr.SolrIndexModule;
 import com.google.gerrit.sshd.SshHostKeyModule;
 import com.google.gerrit.sshd.SshKeyCacheImpl;
@@ -143,12 +145,16 @@
 
       cfgInjector = createCfgInjector();
       sysInjector = createSysInjector();
-      sshInjector = createSshInjector();
+      if (!sshdOff()) {
+        sshInjector = createSshInjector();
+      }
       webInjector = createWebInjector();
 
       PluginGuiceEnvironment env = sysInjector.getInstance(PluginGuiceEnvironment.class);
       env.setCfgInjector(cfgInjector);
-      env.setSshInjector(sshInjector);
+      if (sshInjector != null) {
+        env.setSshInjector(sshInjector);
+      }
       env.setHttpInjector(webInjector);
 
       // Push the Provider<HttpServletRequest> down into the canonical
@@ -169,11 +175,18 @@
       manager.add(dbInjector);
       manager.add(cfgInjector);
       manager.add(sysInjector);
-      manager.add(sshInjector);
+      if (sshInjector != null) {
+        manager.add(sshInjector);
+      }
       manager.add(webInjector);
     }
   }
 
+  private boolean sshdOff() {
+    Config cfg = cfgInjector.getInstance(Key.get(Config.class, GerritServerConfig.class));
+    return new SshAddressesModule().getListenAddresses(cfg).isEmpty();
+  }
+
   private Injector createDbInjector() {
     final List<Module> modules = new ArrayList<Module>();
     if (sitePath != null) {
@@ -300,8 +313,12 @@
     modules.add(RequestContextFilter.module());
     modules.add(AllRequestFilter.module());
     modules.add(sysInjector.getInstance(GitOverHttpModule.class));
-    modules.add(sshInjector.getInstance(WebModule.class));
-    modules.add(sshInjector.getInstance(WebSshGlueModule.class));
+    modules.add(sysInjector.getInstance(WebModule.class));
+    if (sshInjector != null) {
+      modules.add(sshInjector.getInstance(WebSshGlueModule.class));
+    } else {
+      modules.add(new NoSshModule());
+    }
     modules.add(CacheBasedWebSession.module());
     modules.add(HttpContactStoreConnection.module());
     modules.add(new HttpPluginModule());