Clean up extension confirmation prompts and make them consistent between Views and Cocoa.

All string changes + screenshots:
https://docs.google.com/a/google.com/spreadsheets/d/1MVv3BjTtzNHTfUbsm4_fRBOSto7aE0E03IitDmvjg8k/edit?usp=sharing

XIB changes in ExtensionInstallPromptWebstoreData.xib:
Make the title NSTextField match the one in ExtensionInstallPrompt.xib (multi-line instead of eliding).

BUG=419403

Review URL: https://codereview.chromium.org/1056003004

Cr-Commit-Position: refs/heads/master@{#334371}
diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc
index cbc7a6e..433d7da 100644
--- a/chrome/browser/extensions/extension_install_prompt.cc
+++ b/chrome/browser/extensions/extension_install_prompt.cc
@@ -65,30 +65,17 @@
 }
 
 static const int kTitleIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = {
-    0,  // The regular install prompt depends on what's being installed.
-    IDS_EXTENSION_INLINE_INSTALL_PROMPT_TITLE,
     IDS_EXTENSION_INSTALL_PROMPT_TITLE,
+    IDS_EXTENSION_INSTALL_PROMPT_TITLE,
+    0,  // Heading for bundle installs depends on the bundle contents.
     IDS_EXTENSION_RE_ENABLE_PROMPT_TITLE,
     IDS_EXTENSION_PERMISSIONS_PROMPT_TITLE,
-    IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_TITLE,
+    0,  // External installs use different strings for extensions/apps/themes.
     IDS_EXTENSION_POST_INSTALL_PERMISSIONS_PROMPT_TITLE,
     IDS_EXTENSION_LAUNCH_APP_PROMPT_TITLE,
-    0,  // The remote install prompt depends on what's being installed.
-    0,  // The repair install prompt depends on what's being installed.
-    0,  // The delegated install prompt depends on what's being installed.
-};
-static const int kHeadingIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = {
-    IDS_EXTENSION_INSTALL_PROMPT_HEADING,
-    0,  // Inline installs use the extension name.
-    0,  // Heading for bundle installs depends on the bundle contents.
-    IDS_EXTENSION_RE_ENABLE_PROMPT_HEADING,
-    IDS_EXTENSION_PERMISSIONS_PROMPT_HEADING,
-    0,  // External installs use different strings for extensions/apps.
-    IDS_EXTENSION_POST_INSTALL_PERMISSIONS_PROMPT_HEADING,
-    IDS_EXTENSION_LAUNCH_APP_PROMPT_HEADING,
-    IDS_EXTENSION_REMOTE_INSTALL_PROMPT_HEADING,
-    IDS_EXTENSION_REPAIR_PROMPT_HEADING,
-    IDS_EXTENSION_INSTALL_PROMPT_HEADING,
+    IDS_EXTENSION_REMOTE_INSTALL_PROMPT_TITLE,
+    IDS_EXTENSION_REPAIR_PROMPT_TITLE,
+    IDS_EXTENSION_DELEGATED_INSTALL_PROMPT_TITLE,
 };
 static const int kButtons[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = {
     ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL,
@@ -97,6 +84,9 @@
     ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL,
     ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL,
     ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL,
+    // The "OK" button in the post install permissions dialog allows revoking
+    // file/device access, and is only shown if such permissions exist; see
+    // ShouldDisplayRevokeButton().
     ui::DIALOG_BUTTON_CANCEL,
     ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL,
     ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL,
@@ -104,30 +94,30 @@
     ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL,
 };
 static const int kAcceptButtonIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = {
-    IDS_EXTENSION_PROMPT_INSTALL_BUTTON,
-    IDS_EXTENSION_PROMPT_INSTALL_BUTTON,
+    0,  // Regular installs use different strings for extensions/apps/themes.
+    0,  // Inline installs as well.
     IDS_EXTENSION_PROMPT_INSTALL_BUTTON,
     IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON,
     IDS_EXTENSION_PROMPT_PERMISSIONS_BUTTON,
-    0,  // External installs use different strings for extensions/apps.
+    0,  // External installs use different strings for extensions/apps/themes.
     0,  // Different strings depending on the files and devices retained.
     IDS_EXTENSION_PROMPT_LAUNCH_BUTTON,
-    IDS_EXTENSION_PROMPT_REMOTE_INSTALL_BUTTON,
-    IDS_EXTENSION_PROMPT_REPAIR_BUTTON,
-    IDS_EXTENSION_PROMPT_PERMISSIONS_BUTTON,
+    0,  // Remote installs use different strings for extensions/apps.
+    0,  // Repairs use different strings for extensions/apps.
+    0,  // Delegated installs use different strings for extensions/apps/themes.
 };
 static const int kAbortButtonIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = {
-    0,  // These all use the platform's default cancel label.
-    0,
-    0,
-    0,
+    IDS_CANCEL,
+    IDS_CANCEL,
+    IDS_CANCEL,
+    IDS_CANCEL,
     IDS_EXTENSION_PROMPT_PERMISSIONS_ABORT_BUTTON,
     IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ABORT_BUTTON,
     IDS_CLOSE,
-    0,  // Platform dependent cancel button.
-    0,
-    0,
-    IDS_EXTENSION_PROMPT_PERMISSIONS_ABORT_BUTTON,
+    IDS_CANCEL,
+    IDS_CANCEL,
+    IDS_CANCEL,
+    IDS_CANCEL,
 };
 static const int
     kPermissionsHeaderIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = {
@@ -314,59 +304,23 @@
 }
 
 base::string16 ExtensionInstallPrompt::Prompt::GetDialogTitle() const {
-  int resource_id = kTitleIds[type_];
-
-  if (type_ == INSTALL_PROMPT) {
-    if (extension_->is_app())
-      resource_id = IDS_EXTENSION_INSTALL_APP_PROMPT_TITLE;
-    else if (extension_->is_theme())
-      resource_id = IDS_EXTENSION_INSTALL_THEME_PROMPT_TITLE;
-    else
-      resource_id = IDS_EXTENSION_INSTALL_EXTENSION_PROMPT_TITLE;
-  } else if (type_ == EXTERNAL_INSTALL_PROMPT) {
-    return l10n_util::GetStringFUTF16(
-        resource_id, base::UTF8ToUTF16(extension_->name()));
-  } else if (type_ == REMOTE_INSTALL_PROMPT) {
-    if (extension_->is_app())
-      resource_id = IDS_EXTENSION_REMOTE_INSTALL_APP_PROMPT_TITLE;
-    else
-      resource_id = IDS_EXTENSION_REMOTE_INSTALL_EXTENSION_PROMPT_TITLE;
-  } else if (type_ == REPAIR_PROMPT) {
-    if (extension_->is_app())
-      resource_id = IDS_EXTENSION_REPAIR_APP_PROMPT_TITLE;
-    else
-      resource_id = IDS_EXTENSION_REPAIR_EXTENSION_PROMPT_TITLE;
-  } else if (type_ == DELEGATED_PERMISSIONS_PROMPT) {
-    DCHECK(!delegated_username_.empty());
-    if (extension_->is_app())
-      resource_id = IDS_EXTENSION_DELEGATED_INSTALL_APP_PROMPT_TITLE;
-    else
-      resource_id = IDS_EXTENSION_DELEGATED_INSTALL_EXTENSION_PROMPT_TITLE;
-    return l10n_util::GetStringFUTF16(
-        resource_id, base::UTF8ToUTF16(delegated_username_));
-  }
-
-  return l10n_util::GetStringUTF16(resource_id);
-}
-
-base::string16 ExtensionInstallPrompt::Prompt::GetHeading() const {
-  if (type_ == INLINE_INSTALL_PROMPT) {
-    return base::UTF8ToUTF16(extension_->name());
-  } else if (type_ == BUNDLE_INSTALL_PROMPT) {
+  int id = kTitleIds[type_];
+  if (type_ == BUNDLE_INSTALL_PROMPT) {
     return bundle_->GetHeadingTextFor(BundleInstaller::Item::STATE_PENDING);
-  } else if (type_ == EXTERNAL_INSTALL_PROMPT) {
-    int resource_id = -1;
-    if (extension_->is_app())
-      resource_id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_HEADING_APP;
-    else if (extension_->is_theme())
-      resource_id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_HEADING_THEME;
-    else
-      resource_id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_HEADING_EXTENSION;
-    return l10n_util::GetStringUTF16(resource_id);
-  } else {
-    return l10n_util::GetStringFUTF16(
-        kHeadingIds[type_], base::UTF8ToUTF16(extension_->name()));
   }
+  if (type_ == DELEGATED_PERMISSIONS_PROMPT) {
+    return l10n_util::GetStringFUTF16(id, base::UTF8ToUTF16(extension_->name()),
+                                      base::UTF8ToUTF16(delegated_username_));
+  }
+  if (type_ == EXTERNAL_INSTALL_PROMPT) {
+    if (extension_->is_app())
+      id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_TITLE_APP;
+    else if (extension_->is_theme())
+      id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_TITLE_THEME;
+    else
+      id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_TITLE_EXTENSION;
+  }
+  return l10n_util::GetStringFUTF16(id, base::UTF8ToUTF16(extension_->name()));
 }
 
 int ExtensionInstallPrompt::Prompt::GetDialogButtons() const {
@@ -377,48 +331,50 @@
   return kButtons[type_];
 }
 
-bool ExtensionInstallPrompt::Prompt::HasAcceptButtonLabel() const {
-  if (type_ == POST_INSTALL_PERMISSIONS_PROMPT)
-    return ShouldDisplayRevokeButton();
-
-  if (kAcceptButtonIds[type_] == 0)
-    return false;
-
-  return true;
-}
-
 base::string16 ExtensionInstallPrompt::Prompt::GetAcceptButtonLabel() const {
-  if (type_ == EXTERNAL_INSTALL_PROMPT) {
-    int id = -1;
+  int id = kAcceptButtonIds[type_];
+
+  if (type_ == INSTALL_PROMPT || type_ == INLINE_INSTALL_PROMPT ||
+      type_ == DELEGATED_PERMISSIONS_PROMPT) {
+    if (extension_->is_app())
+      id = IDS_EXTENSION_INSTALL_PROMPT_ACCEPT_BUTTON_APP;
+    else if (extension_->is_theme())
+      id = IDS_EXTENSION_INSTALL_PROMPT_ACCEPT_BUTTON_THEME;
+    else
+      id = IDS_EXTENSION_INSTALL_PROMPT_ACCEPT_BUTTON_EXTENSION;
+  } else if (type_ == EXTERNAL_INSTALL_PROMPT) {
     if (extension_->is_app())
       id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ACCEPT_BUTTON_APP;
     else if (extension_->is_theme())
       id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ACCEPT_BUTTON_THEME;
     else
       id = IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ACCEPT_BUTTON_EXTENSION;
-    return l10n_util::GetStringUTF16(id);
   } else if (type_ == POST_INSTALL_PERMISSIONS_PROMPT) {
-    int id = -1;
     if (GetRetainedFileCount() && GetRetainedDeviceCount()) {
       id =
           IDS_EXTENSION_PROMPT_PERMISSIONS_CLEAR_RETAINED_FILES_AND_DEVICES_BUTTON;
     } else if (GetRetainedFileCount()) {
       id = IDS_EXTENSION_PROMPT_PERMISSIONS_CLEAR_RETAINED_FILES_BUTTON;
-    } else {
-      DCHECK_LT(0U, GetRetainedDeviceCount());
+    } else if (GetRetainedDeviceCount()) {
       id = IDS_EXTENSION_PROMPT_PERMISSIONS_CLEAR_RETAINED_DEVICES_BUTTON;
     }
-    return l10n_util::GetStringUTF16(id);
+    // If there are neither retained files nor devices, leave id 0 so there
+    // will be no "accept" button.
+  } else if (type_ == REMOTE_INSTALL_PROMPT) {
+    if (extension_->is_app())
+      id = IDS_EXTENSION_PROMPT_REMOTE_INSTALL_BUTTON_APP;
+    else
+      id = IDS_EXTENSION_PROMPT_REMOTE_INSTALL_BUTTON_EXTENSION;
+  } else if (type_ == REPAIR_PROMPT) {
+    if (extension_->is_app())
+      id = IDS_EXTENSION_PROMPT_REPAIR_BUTTON_APP;
+    else
+      id = IDS_EXTENSION_PROMPT_REPAIR_BUTTON_EXTENSION;
   }
-  return l10n_util::GetStringUTF16(kAcceptButtonIds[type_]);
-}
-
-bool ExtensionInstallPrompt::Prompt::HasAbortButtonLabel() const {
-  return kAbortButtonIds[type_] > 0;
+  return id ? l10n_util::GetStringUTF16(id) : base::string16();
 }
 
 base::string16 ExtensionInstallPrompt::Prompt::GetAbortButtonLabel() const {
-  CHECK(HasAbortButtonLabel());
   return l10n_util::GetStringUTF16(kAbortButtonIds[type_]);
 }