| Index: chrome/browser/extensions/extension_disabled_ui.cc
 | 
| diff --git a/chrome/browser/extensions/extension_disabled_ui.cc b/chrome/browser/extensions/extension_disabled_ui.cc
 | 
| index ece2144a677674b42c38b75b017a167c1bc1add8..09bfaf68f6ad6190b66a2039a5aa8bd590c9e93f 100644
 | 
| --- a/chrome/browser/extensions/extension_disabled_ui.cc
 | 
| +++ b/chrome/browser/extensions/extension_disabled_ui.cc
 | 
| @@ -142,6 +142,7 @@ class ExtensionDisabledGlobalError : public GlobalErrorWithStandardBubble,
 | 
|   public:
 | 
|    ExtensionDisabledGlobalError(ExtensionService* service,
 | 
|                                 const Extension* extension,
 | 
| +                               bool is_remote_install,
 | 
|                                 const gfx::Image& icon);
 | 
|    virtual ~ExtensionDisabledGlobalError();
 | 
|  
 | 
| @@ -172,6 +173,7 @@ class ExtensionDisabledGlobalError : public GlobalErrorWithStandardBubble,
 | 
|   private:
 | 
|    ExtensionService* service_;
 | 
|    const Extension* extension_;
 | 
| +  bool is_remote_install_;
 | 
|    gfx::Image icon_;
 | 
|  
 | 
|    // How the user responded to the error; used for metrics.
 | 
| @@ -195,9 +197,11 @@ class ExtensionDisabledGlobalError : public GlobalErrorWithStandardBubble,
 | 
|  ExtensionDisabledGlobalError::ExtensionDisabledGlobalError(
 | 
|      ExtensionService* service,
 | 
|      const Extension* extension,
 | 
| +    bool is_remote_install,
 | 
|      const gfx::Image& icon)
 | 
|      : service_(service),
 | 
|        extension_(extension),
 | 
| +      is_remote_install_(is_remote_install),
 | 
|        icon_(icon),
 | 
|        user_response_(IGNORED),
 | 
|        menu_command_id_(GetMenuCommandID()) {
 | 
| @@ -219,9 +223,15 @@ ExtensionDisabledGlobalError::ExtensionDisabledGlobalError(
 | 
|  
 | 
|  ExtensionDisabledGlobalError::~ExtensionDisabledGlobalError() {
 | 
|    ReleaseMenuCommandID(menu_command_id_);
 | 
| -  UMA_HISTOGRAM_ENUMERATION("Extensions.DisabledUIUserResponse",
 | 
| -                            user_response_,
 | 
| -                            EXTENSION_DISABLED_UI_BUCKET_BOUNDARY);
 | 
| +  if (is_remote_install_) {
 | 
| +    UMA_HISTOGRAM_ENUMERATION("Extensions.DisabledUIUserResponseRemoteInstall",
 | 
| +                              user_response_,
 | 
| +                              EXTENSION_DISABLED_UI_BUCKET_BOUNDARY);
 | 
| +  } else {
 | 
| +    UMA_HISTOGRAM_ENUMERATION("Extensions.DisabledUIUserResponse",
 | 
| +                              user_response_,
 | 
| +                              EXTENSION_DISABLED_UI_BUCKET_BOUNDARY);
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  GlobalError::Severity ExtensionDisabledGlobalError::GetSeverity() {
 | 
| @@ -237,8 +247,14 @@ int ExtensionDisabledGlobalError::MenuItemCommandID() {
 | 
|  }
 | 
|  
 | 
|  base::string16 ExtensionDisabledGlobalError::MenuItemLabel() {
 | 
| -  return l10n_util::GetStringFUTF16(IDS_EXTENSION_DISABLED_ERROR_TITLE,
 | 
| -                                    base::UTF8ToUTF16(extension_->name()));
 | 
| +  if (is_remote_install_) {
 | 
| +    return l10n_util::GetStringFUTF16(
 | 
| +        IDS_EXTENSION_DISABLED_REMOTE_INSTALL_ERROR_TITLE,
 | 
| +        base::UTF8ToUTF16(extension_->name()));
 | 
| +  } else {
 | 
| +    return l10n_util::GetStringFUTF16(IDS_EXTENSION_DISABLED_ERROR_TITLE,
 | 
| +                                      base::UTF8ToUTF16(extension_->name()));
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  void ExtensionDisabledGlobalError::ExecuteMenuItem(Browser* browser) {
 | 
| @@ -250,22 +266,39 @@ gfx::Image ExtensionDisabledGlobalError::GetBubbleViewIcon() {
 | 
|  }
 | 
|  
 | 
|  base::string16 ExtensionDisabledGlobalError::GetBubbleViewTitle() {
 | 
| -  return l10n_util::GetStringFUTF16(IDS_EXTENSION_DISABLED_ERROR_TITLE,
 | 
| -                                    base::UTF8ToUTF16(extension_->name()));
 | 
| +  if (is_remote_install_) {
 | 
| +    return l10n_util::GetStringFUTF16(
 | 
| +        IDS_EXTENSION_DISABLED_REMOTE_INSTALL_ERROR_TITLE,
 | 
| +        base::UTF8ToUTF16(extension_->name()));
 | 
| +  } else {
 | 
| +    return l10n_util::GetStringFUTF16(IDS_EXTENSION_DISABLED_ERROR_TITLE,
 | 
| +                                      base::UTF8ToUTF16(extension_->name()));
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  std::vector<base::string16>
 | 
|  ExtensionDisabledGlobalError::GetBubbleViewMessages() {
 | 
|    std::vector<base::string16> messages;
 | 
| -  messages.push_back(l10n_util::GetStringFUTF16(
 | 
| -      extension_->is_app() ?
 | 
| -      IDS_APP_DISABLED_ERROR_LABEL : IDS_EXTENSION_DISABLED_ERROR_LABEL,
 | 
| -      base::UTF8ToUTF16(extension_->name())));
 | 
| -  messages.push_back(l10n_util::GetStringUTF16(
 | 
| -      IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO));
 | 
|    std::vector<base::string16> permission_warnings =
 | 
|        extensions::PermissionMessageProvider::Get()->GetWarningMessages(
 | 
|            extension_->GetActivePermissions(), extension_->GetType());
 | 
| +  if (is_remote_install_) {
 | 
| +    messages.push_back(l10n_util::GetStringFUTF16(
 | 
| +        extension_->is_app()
 | 
| +            ? IDS_APP_DISABLED_REMOTE_INSTALL_ERROR_LABEL
 | 
| +            : IDS_EXTENSION_DISABLED_REMOTE_INSTALL_ERROR_LABEL,
 | 
| +        base::UTF8ToUTF16(extension_->name())));
 | 
| +    if (!permission_warnings.empty())
 | 
| +      messages.push_back(
 | 
| +          l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO));
 | 
| +  } else {
 | 
| +    messages.push_back(l10n_util::GetStringFUTF16(
 | 
| +        extension_->is_app() ? IDS_APP_DISABLED_ERROR_LABEL
 | 
| +                             : IDS_EXTENSION_DISABLED_ERROR_LABEL,
 | 
| +        base::UTF8ToUTF16(extension_->name())));
 | 
| +    messages.push_back(l10n_util::GetStringUTF16(
 | 
| +        IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO));
 | 
| +  }
 | 
|    for (size_t i = 0; i < permission_warnings.size(); ++i) {
 | 
|      messages.push_back(l10n_util::GetStringFUTF16(
 | 
|          IDS_EXTENSION_PERMISSION_LINE, permission_warnings[i]));
 | 
| @@ -274,7 +307,12 @@ ExtensionDisabledGlobalError::GetBubbleViewMessages() {
 | 
|  }
 | 
|  
 | 
|  base::string16 ExtensionDisabledGlobalError::GetBubbleViewAcceptButtonLabel() {
 | 
| -  return l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON);
 | 
| +  if (is_remote_install_) {
 | 
| +    return l10n_util::GetStringUTF16(
 | 
| +        IDS_EXTENSION_PROMPT_REMOTE_INSTALL_BUTTON);
 | 
| +  } else {
 | 
| +    return l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON);
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  base::string16 ExtensionDisabledGlobalError::GetBubbleViewCancelButtonLabel() {
 | 
| @@ -339,19 +377,21 @@ namespace extensions {
 | 
|  
 | 
|  void AddExtensionDisabledErrorWithIcon(base::WeakPtr<ExtensionService> service,
 | 
|                                         const std::string& extension_id,
 | 
| +                                       bool is_remote_install,
 | 
|                                         const gfx::Image& icon) {
 | 
|    if (!service.get())
 | 
|      return;
 | 
|    const Extension* extension = service->GetInstalledExtension(extension_id);
 | 
|    if (extension) {
 | 
|      GlobalErrorServiceFactory::GetForProfile(service->profile())
 | 
| -        ->AddGlobalError(
 | 
| -              new ExtensionDisabledGlobalError(service.get(), extension, icon));
 | 
| +        ->AddGlobalError(new ExtensionDisabledGlobalError(
 | 
| +            service.get(), extension, is_remote_install, icon));
 | 
|    }
 | 
|  }
 | 
|  
 | 
|  void AddExtensionDisabledError(ExtensionService* service,
 | 
| -                               const Extension* extension) {
 | 
| +                               const Extension* extension,
 | 
| +                               bool is_remote_install) {
 | 
|    // Do not display notifications for ephemeral apps that have been disabled.
 | 
|    // Instead, a prompt will be shown the next time the app is launched.
 | 
|    if (extension->is_ephemeral())
 | 
| @@ -360,10 +400,14 @@ void AddExtensionDisabledError(ExtensionService* service,
 | 
|    extensions::ExtensionResource image = extensions::IconsInfo::GetIconResource(
 | 
|        extension, kIconSize, ExtensionIconSet::MATCH_BIGGER);
 | 
|    gfx::Size size(kIconSize, kIconSize);
 | 
| -  ImageLoader::Get(service->profile())->LoadImageAsync(
 | 
| -      extension, image, size,
 | 
| -      base::Bind(&AddExtensionDisabledErrorWithIcon,
 | 
| -                 service->AsWeakPtr(), extension->id()));
 | 
| +  ImageLoader::Get(service->profile())
 | 
| +      ->LoadImageAsync(extension,
 | 
| +                       image,
 | 
| +                       size,
 | 
| +                       base::Bind(&AddExtensionDisabledErrorWithIcon,
 | 
| +                                  service->AsWeakPtr(),
 | 
| +                                  extension->id(),
 | 
| +                                  is_remote_install));
 | 
|  }
 | 
|  
 | 
|  void ShowExtensionDisabledDialog(ExtensionService* service,
 | 
| 
 |