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

Unified Diff: chrome/browser/ui/webui/options2/options_ui2.cc

Issue 8895023: Options2: Pull the trigger. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DIAF. Created 9 years 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/ui/webui/options2/options_ui2.cc
diff --git a/chrome/browser/ui/webui/options2/options_ui2.cc b/chrome/browser/ui/webui/options2/options_ui2.cc
new file mode 100644
index 0000000000000000000000000000000000000000..879361ac4bc83c08ad5ea4e9262f7ab39a2eef61
--- /dev/null
+++ b/chrome/browser/ui/webui/options2/options_ui2.cc
@@ -0,0 +1,368 @@
+// Copyright (c) 2011 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/ui/webui/options2/options_ui2.h"
+
+#include <algorithm>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/command_line.h"
+#include "base/memory/singleton.h"
+#include "base/message_loop.h"
+#include "base/string_piece.h"
+#include "base/string_util.h"
+#include "base/threading/thread.h"
+#include "base/time.h"
+#include "base/values.h"
+#include "chrome/browser/browser_about_handler.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/webui/options2/advanced_options_handler.h"
+#include "chrome/browser/ui/webui/options2/autofill_options_handler.h"
+#include "chrome/browser/ui/webui/options2/browser_options_handler.h"
+#include "chrome/browser/ui/webui/options2/clear_browser_data_handler.h"
+#include "chrome/browser/ui/webui/options2/content_settings_handler.h"
+#include "chrome/browser/ui/webui/options2/cookies_view_handler.h"
+#include "chrome/browser/ui/webui/options2/core_options_handler.h"
+#include "chrome/browser/ui/webui/options2/extension_settings_handler.h"
+#include "chrome/browser/ui/webui/options2/font_settings_handler.h"
+#include "chrome/browser/ui/webui/options2/handler_options_handler.h"
+#include "chrome/browser/ui/webui/options2/import_data_handler.h"
+#include "chrome/browser/ui/webui/options2/language_options_handler.h"
+#include "chrome/browser/ui/webui/options2/manage_profile_handler.h"
+#include "chrome/browser/ui/webui/options2/options_sync_setup_handler.h"
+#include "chrome/browser/ui/webui/options2/pack_extension_handler.h"
+#include "chrome/browser/ui/webui/options2/password_manager_handler.h"
+#include "chrome/browser/ui/webui/options2/personal_options_handler.h"
+#include "chrome/browser/ui/webui/options2/search_engine_manager_handler.h"
+#include "chrome/browser/ui/webui/options2/stop_syncing_handler.h"
+#include "chrome/browser/ui/webui/options2/web_intents_settings_handler.h"
+#include "chrome/browser/ui/webui/theme_source.h"
+#include "chrome/common/jstemplate_builder.h"
+#include "chrome/common/time_format.h"
+#include "chrome/common/url_constants.h"
+#include "content/browser/renderer_host/render_view_host.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "content/browser/tab_contents/tab_contents_delegate.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/notification_types.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+#include "grit/locale_settings.h"
+#include "grit/options2_resources.h"
+#include "grit/theme_resources.h"
+#include "grit/theme_resources_standard.h"
+#include "net/base/escape.h"
+#include "ui/base/resource/resource_bundle.h"
+
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/ui/webui/options2/chromeos/about_page_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/accounts_options_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/bluetooth_options_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/change_picture_options_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/core_chromeos_options_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/cros_language_options_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/internet_options_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/language_chewing_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/language_customize_modifier_keys_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/language_hangul_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/language_mozc_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/language_pinyin_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/proxy_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/stats_options_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/system_options_handler.h"
+#include "chrome/browser/ui/webui/options2/chromeos/user_image_source.h"
+#include "chrome/browser/ui/webui/options2/chromeos/virtual_keyboard_manager_handler.h"
+#endif
+
+#if defined(USE_NSS)
+#include "chrome/browser/ui/webui/options2/certificate_manager_handler.h"
+#endif
+
+static const char kLocalizedStringsFile[] = "strings.js";
+static const char kOptionsBundleJsFile[] = "options_bundle.js";
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Options2UIHTMLSource
+//
+////////////////////////////////////////////////////////////////////////////////
+
+class Options2UIHTMLSource : public ChromeURLDataManager::DataSource {
+ public:
+ // The constructor takes over ownership of |localized_strings|.
+ explicit Options2UIHTMLSource(DictionaryValue* localized_strings);
+ virtual ~Options2UIHTMLSource();
+
+ // Called when the network layer has requested a resource underneath
+ // the path we registered.
+ virtual void StartDataRequest(const std::string& path,
+ bool is_incognito,
+ int request_id);
+ virtual std::string GetMimeType(const std::string&) const;
+
+ private:
+ // Localized strings collection.
+ scoped_ptr<DictionaryValue> localized_strings_;
+
+ DISALLOW_COPY_AND_ASSIGN(Options2UIHTMLSource);
+};
+
+Options2UIHTMLSource::Options2UIHTMLSource(DictionaryValue* localized_strings)
+ : DataSource(chrome::kChromeUISettingsFrameHost, MessageLoop::current()) {
+ DCHECK(localized_strings);
+ localized_strings_.reset(localized_strings);
+}
+
+Options2UIHTMLSource::~Options2UIHTMLSource() {}
+
+void Options2UIHTMLSource::StartDataRequest(const std::string& path,
+ bool is_incognito,
+ int request_id) {
+ scoped_refptr<RefCountedMemory> response_bytes;
+ SetFontAndTextDirection(localized_strings_.get());
+
+ if (path == kLocalizedStringsFile) {
+ // Return dynamically-generated strings from memory.
+ std::string strings_js;
+ jstemplate_builder::AppendJsonJS(localized_strings_.get(), &strings_js);
+ response_bytes = base::RefCountedString::TakeString(&strings_js);
+ } else if (path == kOptionsBundleJsFile) {
+ // Return (and cache) the options javascript code.
+ response_bytes = ResourceBundle::GetSharedInstance().LoadDataResourceBytes(
+ IDR_OPTIONS2_BUNDLE_JS);
+ } else {
+ // Return (and cache) the main options html page as the default.
+ response_bytes = ResourceBundle::GetSharedInstance().LoadDataResourceBytes(
+ IDR_OPTIONS2_HTML);
+ }
+
+ SendResponse(request_id, response_bytes);
+}
+
+std::string Options2UIHTMLSource::GetMimeType(const std::string& path) const {
+ if (path == kLocalizedStringsFile || path == kOptionsBundleJsFile)
+ return "application/javascript";
+
+ return "text/html";
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// OptionsPage2UIHandler
+//
+////////////////////////////////////////////////////////////////////////////////
+
+OptionsPage2UIHandler::OptionsPage2UIHandler() {
+}
+
+OptionsPage2UIHandler::~OptionsPage2UIHandler() {
+}
+
+bool OptionsPage2UIHandler::IsEnabled() {
+ return true;
+}
+
+// static
+void OptionsPage2UIHandler::RegisterStrings(
+ DictionaryValue* localized_strings,
+ const OptionsStringResource* resources,
+ size_t length) {
+ for (size_t i = 0; i < length; ++i) {
+ localized_strings->SetString(
+ resources[i].name, l10n_util::GetStringUTF16(resources[i].id));
+ }
+}
+
+void OptionsPage2UIHandler::RegisterTitle(DictionaryValue* localized_strings,
+ const std::string& variable_name,
+ int title_id) {
+ localized_strings->SetString(variable_name,
+ l10n_util::GetStringUTF16(title_id));
+ localized_strings->SetString(variable_name + "TabTitle",
+ l10n_util::GetStringFUTF16(IDS_OPTIONS_TAB_TITLE,
+ l10n_util::GetStringUTF16(IDS_SETTINGS_TITLE),
+ l10n_util::GetStringUTF16(title_id)));
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Options2UI
+//
+////////////////////////////////////////////////////////////////////////////////
+
+Options2UI::Options2UI(TabContents* contents)
+ : ChromeWebUI(contents),
+ initialized_handlers_(false) {
+ DictionaryValue* localized_strings = new DictionaryValue();
+
+ CoreOptionsHandler* core_handler;
+#if defined(OS_CHROMEOS)
+ core_handler = new chromeos::CoreChromeOSOptionsHandler();
+#else
+ core_handler = new CoreOptionsHandler();
+#endif
+ core_handler->set_handlers_host(this);
+ AddOptionsPageUIHandler(localized_strings, core_handler);
+
+ AddOptionsPageUIHandler(localized_strings, new AdvancedOptionsHandler());
+ AddOptionsPageUIHandler(localized_strings, new AutofillOptionsHandler());
+ AddOptionsPageUIHandler(localized_strings, new BrowserOptionsHandler());
+ AddOptionsPageUIHandler(localized_strings, new ClearBrowserDataHandler());
+ AddOptionsPageUIHandler(localized_strings, new ContentSettingsHandler());
+ AddOptionsPageUIHandler(localized_strings, new CookiesViewHandler());
+ AddOptionsPageUIHandler(localized_strings, new ExtensionSettingsHandler());
+ AddOptionsPageUIHandler(localized_strings, new FontSettingsHandler());
+ AddOptionsPageUIHandler(localized_strings, new WebIntentsSettingsHandler());
+#if defined(OS_CHROMEOS)
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::CrosLanguageOptionsHandler());
+#else
+ AddOptionsPageUIHandler(localized_strings, new LanguageOptionsHandler());
+#endif
+ AddOptionsPageUIHandler(localized_strings, new ManageProfileHandler());
+ AddOptionsPageUIHandler(localized_strings, new PackExtensionHandler());
+ AddOptionsPageUIHandler(localized_strings, new PasswordManagerHandler());
+ AddOptionsPageUIHandler(localized_strings, new PersonalOptionsHandler());
+ AddOptionsPageUIHandler(localized_strings, new SearchEngineManagerHandler());
+ AddOptionsPageUIHandler(localized_strings, new ImportDataHandler());
+ AddOptionsPageUIHandler(localized_strings, new StopSyncingHandler());
+ AddOptionsPageUIHandler(localized_strings, new OptionsSyncSetupHandler(
+ g_browser_process->profile_manager()));
+#if defined(OS_CHROMEOS)
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::AboutPageHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::AccountsOptionsHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::BluetoothOptionsHandler());
+ AddOptionsPageUIHandler(localized_strings, new InternetOptionsHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::LanguageChewingHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::LanguageCustomizeModifierKeysHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::LanguageHangulHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::LanguageMozcHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::LanguagePinyinHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::VirtualKeyboardManagerHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::ProxyHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::ChangePictureOptionsHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::StatsOptionsHandler());
+ AddOptionsPageUIHandler(localized_strings, new SystemOptionsHandler());
+#endif
+#if defined(USE_NSS)
+ AddOptionsPageUIHandler(localized_strings, new CertificateManagerHandler());
+#endif
+ AddOptionsPageUIHandler(localized_strings, new HandlerOptionsHandler());
+
+ // |localized_strings| ownership is taken over by this constructor.
+ Options2UIHTMLSource* html_source =
+ new Options2UIHTMLSource(localized_strings);
+
+ // Set up the chrome://settings-frame/ source.
+ Profile* profile = Profile::FromBrowserContext(contents->browser_context());
+ profile->GetChromeURLDataManager()->AddDataSource(html_source);
+
+ // Set up the chrome://theme/ source.
+ ThemeSource* theme = new ThemeSource(profile);
+ profile->GetChromeURLDataManager()->AddDataSource(theme);
+
+#if defined(OS_CHROMEOS)
+ // Set up the chrome://userimage/ source.
+ chromeos::UserImageSource* user_image_source =
+ new chromeos::UserImageSource();
+ profile->GetChromeURLDataManager()->AddDataSource(user_image_source);
+#endif
+}
+
+Options2UI::~Options2UI() {
+ // Uninitialize all registered handlers. The base class owns them and it will
+ // eventually delete them. Skip over the generic handler.
+ for (std::vector<WebUIMessageHandler*>::iterator iter = handlers_.begin() + 1;
+ iter != handlers_.end();
+ ++iter) {
+ static_cast<OptionsPage2UIHandler*>(*iter)->Uninitialize();
+ }
+}
+
+// Override.
+void Options2UI::RenderViewCreated(RenderViewHost* render_view_host) {
+ SetCommandLineString(render_view_host);
+ ChromeWebUI::RenderViewCreated(render_view_host);
+}
+
+void Options2UI::RenderViewReused(RenderViewHost* render_view_host) {
+ SetCommandLineString(render_view_host);
+ ChromeWebUI::RenderViewReused(render_view_host);
+}
+
+void Options2UI::DidBecomeActiveForReusedRenderView() {
+ // When the renderer is re-used (e.g., for back/forward navigation within
+ // options), the handlers are torn down and rebuilt, so are no longer
+ // initialized, but the web page's DOM may remain intact, in which case onload
+ // won't fire to initilize the handlers. To make sure initialization always
+ // happens, call reinitializeCore (which is a no-op unless the DOM was already
+ // initialized).
+ CallJavascriptFunction("OptionsPage.reinitializeCore");
+
+ ChromeWebUI::DidBecomeActiveForReusedRenderView();
+}
+
+// static
+RefCountedMemory* Options2UI::GetFaviconResourceBytes() {
+ return ResourceBundle::GetSharedInstance().
+ LoadDataResourceBytes(IDR_SETTINGS_FAVICON);
+}
+
+void Options2UI::InitializeHandlers() {
+ DCHECK(!GetProfile()->IsOffTheRecord() || Profile::IsGuestSession());
+
+ // The reinitialize call from DidBecomeActiveForReusedRenderView end up being
+ // delivered after a new web page DOM has been brought up in an existing
+ // renderer (due to IPC delays), causing this method to be called twice. If
+ // that happens, ignore the second call.
+ if (initialized_handlers_)
+ return;
+ initialized_handlers_ = true;
+
+ std::vector<WebUIMessageHandler*>::iterator iter;
+ // Skip over the generic handler.
+ for (iter = handlers_.begin() + 1; iter != handlers_.end(); ++iter) {
+ (static_cast<OptionsPage2UIHandler*>(*iter))->Initialize();
+ }
+}
+
+void Options2UI::AddOptionsPageUIHandler(DictionaryValue* localized_strings,
+ OptionsPage2UIHandler* handler_raw) {
+ scoped_ptr<OptionsPage2UIHandler> handler(handler_raw);
+ DCHECK(handler.get());
+ // Add only if handler's service is enabled.
+ if (handler->IsEnabled()) {
+ handler->GetLocalizedValues(localized_strings);
+ // Add handler to the list and also pass the ownership.
+ AddMessageHandler(handler.release()->Attach(this));
+ }
+}
+
+void Options2UI::SetCommandLineString(RenderViewHost* render_view_host) {
+ std::string command_line_string;
+
+#if defined(OS_WIN)
+ command_line_string =
+ WideToASCII(CommandLine::ForCurrentProcess()->GetCommandLineString());
+#else
+ command_line_string =
+ CommandLine::ForCurrentProcess()->GetCommandLineString();
+#endif
+
+ render_view_host->SetWebUIProperty("commandLineString", command_line_string);
+}
« no previous file with comments | « chrome/browser/ui/webui/options2/options_ui2.h ('k') | chrome/browser/ui/webui/options2/options_ui_uitest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698