extension_error_ui.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_error_ui.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string16.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/utf_string_conversions.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/global_error/global_error.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/chromium_strings.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::ExtensionIdSet; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionErrorUI::ExtensionErrorUI(ExtensionService* extension_service) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : extension_service_(extension_service), 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) external_extension_ids_(new ExtensionIdSet), 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklisted_extension_ids_(new ExtensionIdSet), 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orphaned_extension_ids_(new ExtensionIdSet) { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(extension_service_); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionErrorUI::~ExtensionErrorUI() { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionErrorUI::AddExternalExtension(const std::string& id) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) external_extension_ids_->insert(id); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionErrorUI::AddBlacklistedExtension(const std::string& id) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) blacklisted_extension_ids_->insert(id); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionErrorUI::AddOrphanedExtension(const std::string& id) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orphaned_extension_ids_->insert(id); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 ExtensionErrorUI::GenerateMessageSection( 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ExtensionIdSet* extensions, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int extension_template_message_id, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int app_template_message_id) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(extensions); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(extension_template_message_id); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(app_template_message_id); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 message; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ExtensionIdSet::const_iterator iter = extensions->begin(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != extensions->end(); ++iter) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* e = extension_service_->GetExtensionById(*iter, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message += l10n_util::GetStringFUTF16( 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) e->is_app() ? app_template_message_id : extension_template_message_id, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UTF8ToUTF16(e->name())) + char16('\n'); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 ExtensionErrorUI::GenerateMessage() { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GenerateMessageSection(external_extension_ids_.get(), 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_EXTENSION_ALERT_ITEM_EXTERNAL, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_APP_ALERT_ITEM_EXTERNAL) + 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GenerateMessageSection(blacklisted_extension_ids_.get(), 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_EXTENSION_ALERT_ITEM_BLACKLISTED, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_APP_ALERT_ITEM_BLACKLISTED) + 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GenerateMessageSection(orphaned_extension_ids_.get(), 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_EXTENSION_ALERT_ITEM_ORPHANED, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_APP_ALERT_ITEM_ORPHANED); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 ExtensionErrorUI::GetBubbleViewMessage() { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (message_.empty()) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_ = GenerateMessage(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (message_[message_.size()-1] == '\n') 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_.resize(message_.size()-1); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return message_; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 ExtensionErrorUI::GetBubbleViewTitle() { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_EXTENSION_ALERT_TITLE); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 ExtensionErrorUI::GetBubbleViewAcceptButtonLabel() { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_EXTENSION_ALERT_ITEM_OK); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 ExtensionErrorUI::GetBubbleViewCancelButtonLabel() { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_EXTENSION_ALERT_ITEM_DETAILS); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionErrorUI::BubbleViewDidClose() { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This call deletes ExtensionErrorUI object referenced by this. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_service_->HandleExtensionAlertClosed(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionErrorUI::BubbleViewAcceptButtonPressed() { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_service_->HandleExtensionAlertAccept(); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionErrorUI::BubbleViewCancelButtonPressed() { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_service_->HandleExtensionAlertDetails(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 106