Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / extensions / extension_error_handler.cc
1 // Copyright 2013 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/ui/webui/extensions/extension_error_handler.h"
6
7 #include "base/bind.h"
8 #include "base/strings/string16.h"
9 #include "base/threading/sequenced_worker_pool.h"
10 #include "base/values.h"
11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/ui/webui/extensions/extension_error_ui_util.h"
13 #include "chrome/grit/generated_resources.h"
14 #include "content/public/browser/web_ui.h"
15 #include "content/public/browser/web_ui_data_source.h"
16 #include "extensions/common/extension.h"
17 #include "ui/base/l10n/l10n_util.h"
18
19 namespace extensions {
20
21 ExtensionErrorHandler::ExtensionErrorHandler(Profile* profile)
22     : profile_(profile),
23       weak_ptr_factory_(this) {
24 }
25
26 ExtensionErrorHandler::~ExtensionErrorHandler() {
27 }
28
29 void ExtensionErrorHandler::GetLocalizedValues(
30     content::WebUIDataSource* source) {
31   source->AddString(
32       "extensionErrorsShowMore",
33       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ERRORS_SHOW_MORE));
34   source->AddString(
35       "extensionErrorsShowFewer",
36       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ERRORS_SHOW_FEWER));
37   source->AddString(
38       "extensionErrorViewDetails",
39       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ERROR_VIEW_DETAILS));
40   source->AddString(
41       "extensionErrorViewManifest",
42       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ERROR_VIEW_MANIFEST));
43   source->AddString("extensionErrorOverlayDone",
44                     l10n_util::GetStringUTF16(IDS_DONE));
45   source->AddString(
46       "extensionErrorOverlayContextUrl",
47       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ERROR_CONTEXT));
48   source->AddString(
49       "extensionErrorOverlayStackTrace",
50       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ERROR_STACK_TRACE));
51   source->AddString(
52       "extensionErrorOverlayAnonymousFunction",
53       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ERROR_ANONYMOUS_FUNCTION));
54   source->AddString(
55       "extensionErrorOverlayLaunchDevtools",
56       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ERROR_LAUNCH_DEVTOOLS));
57   source->AddString(
58       "extensionErrorOverlayContextUnknown",
59       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ERROR_CONTEXT_UNKNOWN));
60   source->AddString(
61       "extensionErrorOverlayNoCodeToDisplay",
62       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ERROR_NO_CODE_TO_DISPLAY));
63 }
64
65 void ExtensionErrorHandler::RegisterMessages() {
66   web_ui()->RegisterMessageCallback(
67       "extensionErrorRequestFileSource",
68       base::Bind(&ExtensionErrorHandler::HandleRequestFileSource,
69                  weak_ptr_factory_.GetWeakPtr()));
70   web_ui()->RegisterMessageCallback(
71       "extensionErrorOpenDevTools",
72       base::Bind(&ExtensionErrorHandler::HandleOpenDevTools,
73                  weak_ptr_factory_.GetWeakPtr()));
74 }
75
76 void ExtensionErrorHandler::HandleRequestFileSource(
77     const base::ListValue* args) {
78   // There should only be one argument, a dictionary. Use this instead of a list
79   // because it's more descriptive, harder to accidentally break with minor
80   // modifications, and supports optional arguments more easily.
81   CHECK_EQ(1u, args->GetSize());
82
83   const base::DictionaryValue* dict = NULL;
84
85   // Three required arguments: extension_id, path_suffix, and error_message.
86   std::string extension_id;
87   base::FilePath::StringType path_suffix_string;
88   base::string16 error_message;
89
90   if (!args->GetDictionary(0, &dict)) {
91     NOTREACHED();
92     return;
93   }
94
95   error_ui_util::HandleRequestFileSource(
96       dict,
97       Profile::FromWebUI(web_ui()),
98       base::Bind(&ExtensionErrorHandler::OnFileSourceHandled,
99                  weak_ptr_factory_.GetWeakPtr()));
100 }
101
102 void ExtensionErrorHandler::OnFileSourceHandled(
103     const base::DictionaryValue& source) {
104   web_ui()->CallJavascriptFunction(
105       "extensions.ExtensionErrorOverlay.requestFileSourceResponse", source);
106 }
107
108 void ExtensionErrorHandler::HandleOpenDevTools(const base::ListValue* args) {
109   CHECK_EQ(1U, args->GetSize());
110   const base::DictionaryValue* dict = NULL;
111
112   if (!args->GetDictionary(0, &dict)) {
113     NOTREACHED();
114     return;
115   }
116
117   error_ui_util::HandleOpenDevTools(dict);
118 }
119
120 }  // namespace extensions