Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1988)

Unified Diff: chrome/browser/dom_ui/conflicts_ui.cc

Issue 4524002: First cut of the about:conflicts page, listing all DLLs loaded in the Chrome ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698