Index: chrome/browser/dom_ui/browser_options_handler.cc |
diff --git a/chrome/browser/dom_ui/browser_options_handler.cc b/chrome/browser/dom_ui/browser_options_handler.cc |
index 58d002d8e3bace62778771be0a18504cb8bbf36a..fda680273b4a95bc6e5f8fba07b491f48937cf94 100644 |
--- a/chrome/browser/dom_ui/browser_options_handler.cc |
+++ b/chrome/browser/dom_ui/browser_options_handler.cc |
@@ -10,13 +10,15 @@ |
#include "base/string_util.h" |
#include "base/utf_string_conversions.h" |
#include "base/values.h" |
+#include "chrome/browser/custom_home_pages_table_model.h" |
#include "chrome/browser/profile.h" |
+#include "chrome/browser/session_startup_pref.h" |
#include "chrome/installer/util/browser_distribution.h" |
#include "grit/chromium_strings.h" |
#include "grit/generated_resources.h" |
BrowserOptionsHandler::BrowserOptionsHandler() |
- : template_url_model_(NULL) { |
+ : template_url_model_(NULL), startup_custom_pages_table_model_(NULL) { |
#if !defined(OS_MACOSX) |
default_browser_worker_ = new ShellIntegration::DefaultBrowserWorker(this); |
#endif |
@@ -75,17 +77,18 @@ void BrowserOptionsHandler::RegisterMessages() { |
dom_ui_->RegisterMessageCallback( |
"setDefaultSearchEngine", |
NewCallback(this, &BrowserOptionsHandler::SetDefaultSearchEngine)); |
+ dom_ui_->RegisterMessageCallback( |
+ "removeStartupPages", |
+ NewCallback(this, &BrowserOptionsHandler::RemoveStartupPages)); |
+ dom_ui_->RegisterMessageCallback( |
+ "setStartupPagesToCurrentPages", |
+ NewCallback(this, &BrowserOptionsHandler::SetStartupPagesToCurrentPages)); |
} |
void BrowserOptionsHandler::Initialize() { |
UpdateDefaultBrowserState(); |
- |
- template_url_model_ = dom_ui_->GetProfile()->GetTemplateURLModel(); |
- if (template_url_model_) { |
- template_url_model_->Load(); |
- template_url_model_->AddObserver(this); |
- OnTemplateURLModelChanged(); |
- } |
+ UpdateStartupPages(); |
+ UpdateSearchEngines(); |
} |
void BrowserOptionsHandler::UpdateDefaultBrowserState() { |
@@ -211,3 +214,89 @@ void BrowserOptionsHandler::SetDefaultSearchEngine(const Value* value) { |
template_url_model_->SetDefaultSearchProvider(model_urls[selected_index]); |
} |
+void BrowserOptionsHandler::UpdateSearchEngines() { |
+ template_url_model_ = dom_ui_->GetProfile()->GetTemplateURLModel(); |
+ if (template_url_model_) { |
+ template_url_model_->Load(); |
+ template_url_model_->AddObserver(this); |
+ OnTemplateURLModelChanged(); |
+ } |
+} |
+ |
+void BrowserOptionsHandler::UpdateStartupPages() { |
+ Profile* profile = dom_ui_->GetProfile(); |
+ startup_custom_pages_table_model_.reset( |
+ new CustomHomePagesTableModel(profile)); |
+ startup_custom_pages_table_model_->SetObserver(this); |
zel
2010/07/27 18:05:05
Where do you unregister this observer? Should this
stuartmorgan
2010/07/27 18:18:26
BrowserOptionsHandler owns the table model, so the
zel
2010/07/27 18:20:44
Fair enough... as long as CustomHomePagesTableMode
|
+ |
+ const SessionStartupPref startup_pref = |
+ SessionStartupPref::GetStartupPref(profile->GetPrefs()); |
+ startup_custom_pages_table_model_->SetURLs(startup_pref.urls); |
+} |
+ |
+void BrowserOptionsHandler::OnModelChanged() { |
+ // TODO(stuartmorgan): Add support for showing favicons. |
+ ListValue startup_pages; |
+ int page_count = startup_custom_pages_table_model_->RowCount(); |
+ for (int i = 0; i < page_count; ++i) { |
+ DictionaryValue* entry = new DictionaryValue(); |
+ entry->SetString(L"title", |
+ startup_custom_pages_table_model_->GetText(i, 0)); |
+ entry->SetString(L"tooltip", |
+ startup_custom_pages_table_model_->GetTooltip(i)); |
+ startup_pages.Append(entry); |
+ } |
+ |
+ dom_ui_->CallJavascriptFunction(L"BrowserOptions.updateStartupPages", |
+ startup_pages); |
+} |
+ |
+void BrowserOptionsHandler::OnItemsChanged(int start, int length) { |
+ OnModelChanged(); |
+} |
+ |
+void BrowserOptionsHandler::OnItemsAdded(int start, int length) { |
+ OnModelChanged(); |
+} |
+ |
+void BrowserOptionsHandler::OnItemsRemoved(int start, int length) { |
+ OnModelChanged(); |
+} |
+ |
+void BrowserOptionsHandler::SetStartupPagesToCurrentPages(const Value* value) { |
+ startup_custom_pages_table_model_->SetToCurrentlyOpenPages(); |
+ SaveStartupPagesPref(); |
+} |
+ |
+void BrowserOptionsHandler::RemoveStartupPages(const Value* value) { |
+ if (!value || !value->IsType(Value::TYPE_LIST)) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ const ListValue* param_values = static_cast<const ListValue*>(value); |
+ for (int i = param_values->GetSize() - 1; i >= 0; --i) { |
+ std::string string_value; |
+ if (!param_values->GetString(i, &string_value)) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ int selected_index = StringToInt(string_value); |
+ if (selected_index < 0 || |
+ selected_index >= startup_custom_pages_table_model_->RowCount()) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ startup_custom_pages_table_model_->Remove(selected_index); |
+ } |
+ |
+ SaveStartupPagesPref(); |
+} |
+ |
+void BrowserOptionsHandler::SaveStartupPagesPref() { |
+ PrefService* prefs = dom_ui_->GetProfile()->GetPrefs(); |
+ |
+ SessionStartupPref pref = SessionStartupPref::GetStartupPref(prefs); |
+ pref.urls = startup_custom_pages_table_model_->GetURLs(); |
+ |
+ SessionStartupPref::SetStartupPref(prefs, pref); |
+} |