Stop firing appinstalled when the user cancels a 3-dot menu install on desktop.

This CL addresses an issue where the appinstalled JavaScript event would
be fired if the user cancelled installing a PWA on desktop via the 3-dot
menu.

BUG=962845

Change-Id: Idae632bb4aefdff5d167aeb889076d8096e85c6e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1619522
Reviewed-by: Ben Wells <benwells@chromium.org>
Commit-Queue: Dominick Ng <dominickn@chromium.org>
Cr-Commit-Position: refs/heads/master@{#661660}
diff --git a/chrome/browser/extensions/tab_helper.cc b/chrome/browser/extensions/tab_helper.cc
index b05b6997..e54ff28 100644
--- a/chrome/browser/extensions/tab_helper.cc
+++ b/chrome/browser/extensions/tab_helper.cc
@@ -192,17 +192,18 @@
 void TabHelper::FinishCreateBookmarkApp(
     const Extension* extension,
     const WebApplicationInfo& web_app_info) {
-  // Send the 'appinstalled' event and ensure any beforeinstallpromptevent
-  // cannot trigger installation again.
-  if (banners::AppBannerManagerDesktop::IsEnabled() &&
+  const bool success = (extension != nullptr);
+
+  if (success && banners::AppBannerManagerDesktop::IsEnabled() &&
       web_app_info.open_as_window) {
+    // Send the 'appinstalled' event and ensure any beforeinstallpromptevent
+    // cannot trigger installation again.
     banners::AppBannerManagerDesktop::FromWebContents(web_contents())
         ->OnInstall(false /* is_native app */,
                     blink::kWebDisplayModeStandalone);
   }
   pending_web_app_action_ = NONE;
 
-  const bool success = !!extension;
   const ExtensionId app_id = extension ? extension->id() : ExtensionId();
   std::move(install_callback_).Run(app_id, success);
 }