| Index: chrome/browser/extensions/extension_global_error.cc | 
| diff --git a/chrome/browser/extensions/extension_global_error.cc b/chrome/browser/extensions/extension_global_error.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..fb610c77eb1445ee3205bba3a46589ff746b349b | 
| --- /dev/null | 
| +++ b/chrome/browser/extensions/extension_global_error.cc | 
| @@ -0,0 +1,145 @@ | 
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#include "chrome/browser/extensions/extension_global_error.h" | 
| + | 
| +#include "base/logging.h" | 
| +#include "base/string16.h" | 
| +#include "base/utf_string_conversions.h" | 
| +#include "chrome/browser/extensions/extension_service.h" | 
| +#include "chrome/browser/ui/global_error.h" | 
| +#include "grit/generated_resources.h" | 
| +#include "ui/base/l10n/l10n_util.h" | 
| + | 
| +ExtensionGlobalError::ExtensionGlobalError( | 
| +      base::WeakPtr<ExtensionService> extension_service) | 
| +    : extension_service_(extension_service), | 
| +      external_extension_ids_(new ExtensionIdSet), | 
| +      blacklisted_extension_ids_(new ExtensionIdSet), | 
| +      orphaned_extension_ids_(new ExtensionIdSet) { | 
| +} | 
| + | 
| +ExtensionGlobalError::~ExtensionGlobalError() { | 
| +} | 
| + | 
| +void ExtensionGlobalError::AddExternalExtension(const std::string& id) { | 
| +  external_extension_ids_->insert(id); | 
| +} | 
| + | 
| +void ExtensionGlobalError::AddBlacklistedExtension(const std::string& id) { | 
| +  blacklisted_extension_ids_->insert(id); | 
| +} | 
| + | 
| +void ExtensionGlobalError::AddOrphanedExtension(const std::string& id) { | 
| +  orphaned_extension_ids_->insert(id); | 
| +} | 
| + | 
| +void ExtensionGlobalError::set_accept_callback( | 
| +    ExtensionGlobalErrorCallback callback) { | 
| +  accept_callback_ = callback; | 
| +} | 
| + | 
| +void ExtensionGlobalError::set_cancel_callback( | 
| +    ExtensionGlobalErrorCallback callback) { | 
| +  cancel_callback_ = callback; | 
| +} | 
| + | 
| +void ExtensionGlobalError::set_closed_callback( | 
| +    ExtensionGlobalErrorCallback callback) { | 
| +  cancel_callback_ = callback; | 
| +} | 
| + | 
| +bool ExtensionGlobalError::HasBadge() { | 
| +  return false; | 
| +} | 
| + | 
| +bool ExtensionGlobalError::HasMenuItem() { | 
| +  return false; | 
| +} | 
| + | 
| +int ExtensionGlobalError::MenuItemCommandID() { | 
| +  NOTREACHED(); | 
| +  return 0; | 
| +} | 
| + | 
| +string16 ExtensionGlobalError::MenuItemLabel() { | 
| +  NOTREACHED(); | 
| +  return NULL; | 
| +} | 
| + | 
| +void ExtensionGlobalError::ExecuteMenuItem(Browser* browser) { | 
| +  NOTREACHED(); | 
| +} | 
| + | 
| +bool ExtensionGlobalError::HasBubbleView() { | 
| +  return true; | 
| +} | 
| + | 
| +string16 ExtensionGlobalError::GetBubbleViewTitle() { | 
| +  return l10n_util::GetStringUTF16(IDS_EXTENSION_NOTIFICATION_TITLE); | 
| +} | 
| + | 
| +string16 ExtensionGlobalError::GenerateMessageSection( | 
| +    const ExtensionIdSet* extensions, | 
| +    int template_message_id) { | 
| +  CHECK(extensions); | 
| +  CHECK(template_message_id); | 
| +  string16 message; | 
| + | 
| +  for (ExtensionIdSet::const_iterator iter = extensions->begin(); | 
| +       iter != extensions->end(); ++iter) { | 
| +    const Extension* e = extension_service_->GetExtensionById(*iter, true); | 
| +    message += l10n_util::GetStringFUTF16(template_message_id, | 
| +                                          string16(ASCIIToUTF16(e->name()))); | 
| +  } | 
| +  return message; | 
| +} | 
| + | 
| +string16 ExtensionGlobalError::GenerateMessage() { | 
| +  if (extension_service_.get()) { | 
| +    return l10n_util::GetStringFUTF16( | 
| +        IDS_EXTENSION_NOTIFICATION_BODY_TEMPLATE, | 
| +        GenerateMessageSection(external_extension_ids_.get(), | 
| +                               IDS_EXTENSION_NOTIFICATION_ITEM_EXTERNAL) + | 
| +        GenerateMessageSection(blacklisted_extension_ids_.get(), | 
| +                               IDS_EXTENSION_NOTIFICATION_ITEM_EXTERNAL) + | 
| +        GenerateMessageSection(orphaned_extension_ids_.get(), | 
| +                               IDS_EXTENSION_NOTIFICATION_ITEM_EXTERNAL)); | 
| +  } else { | 
| +    return string16(); | 
| +  } | 
| +} | 
| + | 
| +string16 ExtensionGlobalError::GetBubbleViewMessage() { | 
| +  if (message_.empty()) { | 
| +    message_ = GenerateMessage(); | 
| +  } | 
| +  return message_; | 
| +} | 
| + | 
| +string16 ExtensionGlobalError::GetBubbleViewAcceptButtonLabel() { | 
| +  return l10n_util::GetStringUTF16(IDS_EXTENSION_NOTIFICATION_ITEM_OK); | 
| +} | 
| + | 
| +string16 ExtensionGlobalError::GetBubbleViewCancelButtonLabel() { | 
| +  return l10n_util::GetStringUTF16(IDS_EXTENSION_NOTIFICATION_ITEM_DETAILS); | 
| +} | 
| + | 
| +void ExtensionGlobalError::BubbleViewDidClose() { | 
| +  if (!closed_callback_.is_null()) { | 
| +    closed_callback_.Run(*this); | 
| +  } | 
| +} | 
| + | 
| +void ExtensionGlobalError::BubbleViewAcceptButtonPressed() { | 
| +  if (!accept_callback_.is_null()) { | 
| +    accept_callback_.Run(*this); | 
| +  } | 
| +} | 
| + | 
| +void ExtensionGlobalError::BubbleViewCancelButtonPressed() { | 
| +  if (!cancel_callback_.is_null()) { | 
| +    cancel_callback_.Run(*this); | 
| +  } | 
| +} | 
|  |