Index: chrome/browser/dom_ui/conflicts_ui.cc |
=================================================================== |
--- chrome/browser/dom_ui/conflicts_ui.cc (revision 0) |
+++ chrome/browser/dom_ui/conflicts_ui.cc (revision 0) |
@@ -0,0 +1,213 @@ |
+// Copyright (c) 2010 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/dom_ui/conflicts_ui.h" |
+ |
+#if defined(OS_WIN) |
+ |
+#include <string> |
+ |
+#include "app/l10n_util.h" |
+#include "app/resource_bundle.h" |
+#include "base/string_number_conversions.h" |
+#include "base/utf_string_conversions.h" |
+#include "base/values.h" |
+#include "chrome/browser/dom_ui/chrome_url_data_manager.h" |
+#include "chrome/browser/enumerate_modules_model_win.h" |
+#include "chrome/common/jstemplate_builder.h" |
+#include "chrome/common/notification_observer.h" |
+#include "chrome/common/notification_registrar.h" |
+#include "chrome/common/notification_service.h" |
+#include "chrome/common/url_constants.h" |
+#include "grit/browser_resources.h" |
+#include "grit/chromium_strings.h" |
+#include "grit/generated_resources.h" |
+#include "grit/theme_resources.h" |
+ |
+namespace { |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// |
+// ConflictsUIHTMLSource |
+// |
+//////////////////////////////////////////////////////////////////////////////// |
+ |
+class ConflictsUIHTMLSource : public ChromeURLDataManager::DataSource { |
+ public: |
+ ConflictsUIHTMLSource() |
+ : DataSource(chrome::kChromeUIConflictsHost, MessageLoop::current()) {} |
+ |
+ // Called when the network layer has requested a resource underneath |
+ // the path we registered. |
+ virtual void StartDataRequest(const std::string& path, |
+ bool is_off_the_record, |
+ int request_id); |
+ |
+ virtual std::string GetMimeType(const std::string&) const { |
+ return "text/html"; |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ConflictsUIHTMLSource); |
+}; |
+ |
+void ConflictsUIHTMLSource::StartDataRequest(const std::string& path, |
+ bool is_off_the_record, |
+ int request_id) { |
+ // Strings used in the JsTemplate file. |
+ DictionaryValue localized_strings; |
+ localized_strings.SetString("modulesLongTitle", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_CHECK_PAGE_TITLE_LONG)); |
+ localized_strings.SetString("modulesBlurb", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_EXPLANATION_TEXT)); |
+ localized_strings.SetString("moduleSuspectedBad", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_CHECK_WARNING_SUSPECTED)); |
+ localized_strings.SetString("moduleConfirmedBad", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_CHECK_WARNING_CONFIRMED)); |
+ localized_strings.SetString("helpCenterLink", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_HELP_CENTER_LINK)); |
+ localized_strings.SetString("investigatingText", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_CHECK_INVESTIGATING)); |
+ localized_strings.SetString("modulesNoneLoaded", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_NO_MODULES_LOADED)); |
+ localized_strings.SetString("headerSoftware", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_HEADER_SOFTWARE)); |
+ localized_strings.SetString("headerSignedBy", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_HEADER_SIGNED_BY)); |
+ localized_strings.SetString("headerLocation", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_HEADER_LOCATION)); |
+ localized_strings.SetString("headerWarning", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_HEADER_WARNING)); |
+ localized_strings.SetString("headerHelpTip", |
+ l10n_util::GetStringUTF16(IDS_CONFLICTS_HEADER_HELP_TIP)); |
+ |
+ ChromeURLDataManager::DataSource::SetFontAndTextDirection(&localized_strings); |
+ |
+ static const base::StringPiece flags_html( |
+ ResourceBundle::GetSharedInstance().GetRawDataResource( |
+ IDR_ABOUT_CONFLICTS_HTML)); |
+ std::string full_html(flags_html.data(), flags_html.size()); |
+ jstemplate_builder::AppendJsonHtml(&localized_strings, &full_html); |
+ jstemplate_builder::AppendI18nTemplateSourceHtml(&full_html); |
+ jstemplate_builder::AppendI18nTemplateProcessHtml(&full_html); |
+ jstemplate_builder::AppendJsTemplateSourceHtml(&full_html); |
+ |
+ scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes); |
+ html_bytes->data.resize(full_html.size()); |
+ std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin()); |
+ |
+ SendResponse(request_id, html_bytes); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// |
+// ConflictsDOMHandler |
+// |
+//////////////////////////////////////////////////////////////////////////////// |
+ |
+// The handler for Javascript messages for the about:flags page. |
+class ConflictsDOMHandler : public DOMMessageHandler, |
+ public NotificationObserver { |
+ public: |
+ ConflictsDOMHandler() {} |
+ virtual ~ConflictsDOMHandler() {} |
+ |
+ // DOMMessageHandler implementation. |
+ virtual void RegisterMessages(); |
+ |
+ // Callback for the "requestModuleList" message. |
+ void HandleRequestModuleList(const ListValue* args); |
+ |
+ private: |
+ void SendModuleList(); |
+ |
+ void Observe(NotificationType type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details); |
+ |
+ NotificationRegistrar registrar_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ConflictsDOMHandler); |
+}; |
+ |
+void ConflictsDOMHandler::RegisterMessages() { |
+ dom_ui_->RegisterMessageCallback("requestModuleList", |
+ NewCallback(this, &ConflictsDOMHandler::HandleRequestModuleList)); |
+} |
+ |
+void ConflictsDOMHandler::HandleRequestModuleList(const ListValue* args) { |
+ // This request is handled asynchronously. See Observe for when we reply back. |
+ registrar_.Add(this, NotificationType::MODULE_LIST_ENUMERATED, |
+ NotificationService::AllSources()); |
+ EnumerateModulesModel::GetSingleton()->ScanNow(); |
+} |
+ |
+void ConflictsDOMHandler::SendModuleList() { |
+ EnumerateModulesModel* loaded_modules = EnumerateModulesModel::GetSingleton(); |
+ ListValue* list = loaded_modules->GetModuleList(); |
+ DictionaryValue results; |
+ results.Set("moduleList", list); |
+ |
+ // Add the section title and the total count for bad modules found. |
+ int confirmed_bad = loaded_modules->confirmed_bad_modules_detected(); |
+ int suspected_bad = loaded_modules->suspected_bad_modules_detected(); |
+ string16 table_title; |
+ if (!confirmed_bad && !suspected_bad) { |
+ table_title += l10n_util::GetStringFUTF16( |
+ IDS_CONFLICTS_CHECK_PAGE_TABLE_TITLE_SUFFIX_ONE, |
+ base::IntToString16(list->GetSize())); |
+ } else { |
+ table_title += l10n_util::GetStringFUTF16( |
+ IDS_CONFLICTS_CHECK_PAGE_TABLE_TITLE_SUFFIX_TWO, |
+ base::IntToString16(list->GetSize()), |
+ base::IntToString16(confirmed_bad), |
+ base::IntToString16(suspected_bad)); |
+ } |
+ results.SetString("modulesTableTitle", table_title); |
+ |
+ dom_ui_->CallJavascriptFunction(L"returnModuleList", results); |
+} |
+ |
+void ConflictsDOMHandler::Observe(NotificationType type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details) { |
+ switch (type.value) { |
+ case NotificationType::MODULE_LIST_ENUMERATED: |
+ SendModuleList(); |
+ registrar_.RemoveAll(); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ break; |
+ } |
+} |
+ |
+} // namespace |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+// |
+// ConflictsUI |
+// |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
+ConflictsUI::ConflictsUI(TabContents* contents) : DOMUI(contents) { |
+ AddMessageHandler((new ConflictsDOMHandler())->Attach(this)); |
+ |
+ ConflictsUIHTMLSource* html_source = new ConflictsUIHTMLSource(); |
+ |
+ // Set up the about:conflicts source. |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ NewRunnableMethod(Singleton<ChromeURLDataManager>::get(), |
+ &ChromeURLDataManager::AddDataSource, |
+ make_scoped_refptr(html_source))); |
+} |
+ |
+// static |
+RefCountedMemory* ConflictsUI::GetFaviconResourceBytes() { |
+ return ResourceBundle::GetSharedInstance(). |
+ LoadDataResourceBytes(IDR_CONFLICTS); |
+} |
+ |
+#endif |
Property changes on: chrome\browser\dom_ui\conflicts_ui.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |