- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / extension_error_ui.cc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/extensions/extension_error_ui.h"
6
7 #include "base/logging.h"
8 #include "base/strings/string16.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/extensions/extension_service.h"
11 #include "chrome/browser/ui/global_error/global_error.h"
12 #include "grit/chromium_strings.h"
13 #include "grit/generated_resources.h"
14 #include "ui/base/l10n/l10n_util.h"
15
16 using extensions::ExtensionIdSet;
17
18 ExtensionErrorUI::ExtensionErrorUI(ExtensionService* extension_service)
19     : extension_service_(extension_service),
20       external_extension_ids_(new ExtensionIdSet),
21       blacklisted_extension_ids_(new ExtensionIdSet) {
22   DCHECK(extension_service_);
23 }
24
25 ExtensionErrorUI::~ExtensionErrorUI() {
26 }
27
28 void ExtensionErrorUI::AddExternalExtension(const std::string& id) {
29   external_extension_ids_->insert(id);
30 }
31
32 void ExtensionErrorUI::AddBlacklistedExtension(const std::string& id) {
33   blacklisted_extension_ids_->insert(id);
34 }
35
36 string16 ExtensionErrorUI::GenerateMessageSection(
37     const ExtensionIdSet* extensions,
38     int extension_template_message_id,
39     int app_template_message_id) {
40   CHECK(extensions);
41   CHECK(extension_template_message_id);
42   CHECK(app_template_message_id);
43   string16 message;
44
45   for (ExtensionIdSet::const_iterator iter = extensions->begin();
46        iter != extensions->end(); ++iter) {
47     const extensions::Extension* e =
48         extension_service_->GetInstalledExtension(*iter);
49     message += l10n_util::GetStringFUTF16(
50         e->is_app() ? app_template_message_id : extension_template_message_id,
51         UTF8ToUTF16(e->name())) + char16('\n');
52   }
53   return message;
54 }
55
56 string16 ExtensionErrorUI::GenerateMessage() {
57   return GenerateMessageSection(external_extension_ids_.get(),
58                                 IDS_EXTENSION_ALERT_ITEM_EXTERNAL,
59                                 IDS_APP_ALERT_ITEM_EXTERNAL) +
60          GenerateMessageSection(blacklisted_extension_ids_.get(),
61                                 IDS_EXTENSION_ALERT_ITEM_BLACKLISTED,
62                                 IDS_APP_ALERT_ITEM_BLACKLISTED);
63 }
64
65 std::vector<string16> ExtensionErrorUI::GetBubbleViewMessages() {
66   if (message_.empty()) {
67     message_ = GenerateMessage();
68     if (message_[message_.size()-1] == '\n')
69       message_.resize(message_.size()-1);
70   }
71   return std::vector<string16>(1, message_);
72 }
73
74 string16 ExtensionErrorUI::GetBubbleViewTitle() {
75   return l10n_util::GetStringUTF16(IDS_EXTENSION_ALERT_TITLE);
76 }
77
78 string16 ExtensionErrorUI::GetBubbleViewAcceptButtonLabel() {
79   return l10n_util::GetStringUTF16(IDS_EXTENSION_ALERT_ITEM_OK);
80 }
81
82 string16 ExtensionErrorUI::GetBubbleViewCancelButtonLabel() {
83   return l10n_util::GetStringUTF16(IDS_EXTENSION_ALERT_ITEM_DETAILS);
84 }
85
86 void ExtensionErrorUI::BubbleViewDidClose() {
87   // This call deletes ExtensionErrorUI object referenced by this.
88   extension_service_->HandleExtensionAlertClosed();
89 }
90
91 void ExtensionErrorUI::BubbleViewAcceptButtonPressed() {
92   extension_service_->HandleExtensionAlertAccept();
93 }
94
95 void ExtensionErrorUI::BubbleViewCancelButtonPressed() {
96   extension_service_->HandleExtensionAlertDetails();
97 }