OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/dom_ui/browser_options_handler.h" | 5 #include "chrome/browser/dom_ui/browser_options_handler.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/scoped_ptr.h" | 9 #include "base/scoped_ptr.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
11 #include "base/utf_string_conversions.h" | 11 #include "base/utf_string_conversions.h" |
12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "chrome/browser/custom_home_pages_table_model.h" |
13 #include "chrome/browser/profile.h" | 14 #include "chrome/browser/profile.h" |
| 15 #include "chrome/browser/session_startup_pref.h" |
14 #include "chrome/installer/util/browser_distribution.h" | 16 #include "chrome/installer/util/browser_distribution.h" |
15 #include "grit/chromium_strings.h" | 17 #include "grit/chromium_strings.h" |
16 #include "grit/generated_resources.h" | 18 #include "grit/generated_resources.h" |
17 | 19 |
18 BrowserOptionsHandler::BrowserOptionsHandler() | 20 BrowserOptionsHandler::BrowserOptionsHandler() |
19 : template_url_model_(NULL) { | 21 : template_url_model_(NULL), startup_custom_pages_table_model_(NULL) { |
20 #if !defined(OS_MACOSX) | 22 #if !defined(OS_MACOSX) |
21 default_browser_worker_ = new ShellIntegration::DefaultBrowserWorker(this); | 23 default_browser_worker_ = new ShellIntegration::DefaultBrowserWorker(this); |
22 #endif | 24 #endif |
23 } | 25 } |
24 | 26 |
25 BrowserOptionsHandler::~BrowserOptionsHandler() { | 27 BrowserOptionsHandler::~BrowserOptionsHandler() { |
26 if (default_browser_worker_.get()) | 28 if (default_browser_worker_.get()) |
27 default_browser_worker_->ObserverDestroyed(); | 29 default_browser_worker_->ObserverDestroyed(); |
28 if (template_url_model_) | 30 if (template_url_model_) |
29 template_url_model_->RemoveObserver(this); | 31 template_url_model_->RemoveObserver(this); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 l10n_util::GetString(IDS_PRODUCT_NAME))); | 70 l10n_util::GetString(IDS_PRODUCT_NAME))); |
69 } | 71 } |
70 | 72 |
71 void BrowserOptionsHandler::RegisterMessages() { | 73 void BrowserOptionsHandler::RegisterMessages() { |
72 dom_ui_->RegisterMessageCallback( | 74 dom_ui_->RegisterMessageCallback( |
73 "becomeDefaultBrowser", | 75 "becomeDefaultBrowser", |
74 NewCallback(this, &BrowserOptionsHandler::BecomeDefaultBrowser)); | 76 NewCallback(this, &BrowserOptionsHandler::BecomeDefaultBrowser)); |
75 dom_ui_->RegisterMessageCallback( | 77 dom_ui_->RegisterMessageCallback( |
76 "setDefaultSearchEngine", | 78 "setDefaultSearchEngine", |
77 NewCallback(this, &BrowserOptionsHandler::SetDefaultSearchEngine)); | 79 NewCallback(this, &BrowserOptionsHandler::SetDefaultSearchEngine)); |
| 80 dom_ui_->RegisterMessageCallback( |
| 81 "removeStartupPages", |
| 82 NewCallback(this, &BrowserOptionsHandler::RemoveStartupPages)); |
| 83 dom_ui_->RegisterMessageCallback( |
| 84 "setStartupPagesToCurrentPages", |
| 85 NewCallback(this, &BrowserOptionsHandler::SetStartupPagesToCurrentPages)); |
78 } | 86 } |
79 | 87 |
80 void BrowserOptionsHandler::Initialize() { | 88 void BrowserOptionsHandler::Initialize() { |
81 UpdateDefaultBrowserState(); | 89 UpdateDefaultBrowserState(); |
82 | 90 UpdateStartupPages(); |
83 template_url_model_ = dom_ui_->GetProfile()->GetTemplateURLModel(); | 91 UpdateSearchEngines(); |
84 if (template_url_model_) { | |
85 template_url_model_->Load(); | |
86 template_url_model_->AddObserver(this); | |
87 OnTemplateURLModelChanged(); | |
88 } | |
89 } | 92 } |
90 | 93 |
91 void BrowserOptionsHandler::UpdateDefaultBrowserState() { | 94 void BrowserOptionsHandler::UpdateDefaultBrowserState() { |
92 #if defined(OS_WIN) | 95 #if defined(OS_WIN) |
93 // Check for side-by-side first. | 96 // Check for side-by-side first. |
94 if (!BrowserDistribution::GetDistribution()->CanSetAsDefault()) { | 97 if (!BrowserDistribution::GetDistribution()->CanSetAsDefault()) { |
95 SetDefaultBrowserUIString(IDS_OPTIONS_DEFAULTBROWSER_SXS); | 98 SetDefaultBrowserUIString(IDS_OPTIONS_DEFAULTBROWSER_SXS); |
96 return; | 99 return; |
97 } | 100 } |
98 #endif | 101 #endif |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 } | 207 } |
205 int selected_index = StringToInt(string_value); | 208 int selected_index = StringToInt(string_value); |
206 | 209 |
207 std::vector<const TemplateURL*> model_urls = | 210 std::vector<const TemplateURL*> model_urls = |
208 template_url_model_->GetTemplateURLs(); | 211 template_url_model_->GetTemplateURLs(); |
209 if (selected_index >= 0 && | 212 if (selected_index >= 0 && |
210 selected_index < static_cast<int>(model_urls.size())) | 213 selected_index < static_cast<int>(model_urls.size())) |
211 template_url_model_->SetDefaultSearchProvider(model_urls[selected_index]); | 214 template_url_model_->SetDefaultSearchProvider(model_urls[selected_index]); |
212 } | 215 } |
213 | 216 |
| 217 void BrowserOptionsHandler::UpdateSearchEngines() { |
| 218 template_url_model_ = dom_ui_->GetProfile()->GetTemplateURLModel(); |
| 219 if (template_url_model_) { |
| 220 template_url_model_->Load(); |
| 221 template_url_model_->AddObserver(this); |
| 222 OnTemplateURLModelChanged(); |
| 223 } |
| 224 } |
| 225 |
| 226 void BrowserOptionsHandler::UpdateStartupPages() { |
| 227 Profile* profile = dom_ui_->GetProfile(); |
| 228 startup_custom_pages_table_model_.reset( |
| 229 new CustomHomePagesTableModel(profile)); |
| 230 startup_custom_pages_table_model_->SetObserver(this); |
| 231 |
| 232 const SessionStartupPref startup_pref = |
| 233 SessionStartupPref::GetStartupPref(profile->GetPrefs()); |
| 234 startup_custom_pages_table_model_->SetURLs(startup_pref.urls); |
| 235 } |
| 236 |
| 237 void BrowserOptionsHandler::OnModelChanged() { |
| 238 // TODO(stuartmorgan): Add support for showing favicons. |
| 239 ListValue startup_pages; |
| 240 int page_count = startup_custom_pages_table_model_->RowCount(); |
| 241 for (int i = 0; i < page_count; ++i) { |
| 242 DictionaryValue* entry = new DictionaryValue(); |
| 243 entry->SetString(L"title", |
| 244 startup_custom_pages_table_model_->GetText(i, 0)); |
| 245 entry->SetString(L"tooltip", |
| 246 startup_custom_pages_table_model_->GetTooltip(i)); |
| 247 startup_pages.Append(entry); |
| 248 } |
| 249 |
| 250 dom_ui_->CallJavascriptFunction(L"BrowserOptions.updateStartupPages", |
| 251 startup_pages); |
| 252 } |
| 253 |
| 254 void BrowserOptionsHandler::OnItemsChanged(int start, int length) { |
| 255 OnModelChanged(); |
| 256 } |
| 257 |
| 258 void BrowserOptionsHandler::OnItemsAdded(int start, int length) { |
| 259 OnModelChanged(); |
| 260 } |
| 261 |
| 262 void BrowserOptionsHandler::OnItemsRemoved(int start, int length) { |
| 263 OnModelChanged(); |
| 264 } |
| 265 |
| 266 void BrowserOptionsHandler::SetStartupPagesToCurrentPages(const Value* value) { |
| 267 startup_custom_pages_table_model_->SetToCurrentlyOpenPages(); |
| 268 SaveStartupPagesPref(); |
| 269 } |
| 270 |
| 271 void BrowserOptionsHandler::RemoveStartupPages(const Value* value) { |
| 272 if (!value || !value->IsType(Value::TYPE_LIST)) { |
| 273 NOTREACHED(); |
| 274 return; |
| 275 } |
| 276 const ListValue* param_values = static_cast<const ListValue*>(value); |
| 277 for (int i = param_values->GetSize() - 1; i >= 0; --i) { |
| 278 std::string string_value; |
| 279 if (!param_values->GetString(i, &string_value)) { |
| 280 NOTREACHED(); |
| 281 return; |
| 282 } |
| 283 int selected_index = StringToInt(string_value); |
| 284 if (selected_index < 0 || |
| 285 selected_index >= startup_custom_pages_table_model_->RowCount()) { |
| 286 NOTREACHED(); |
| 287 return; |
| 288 } |
| 289 startup_custom_pages_table_model_->Remove(selected_index); |
| 290 } |
| 291 |
| 292 SaveStartupPagesPref(); |
| 293 } |
| 294 |
| 295 void BrowserOptionsHandler::SaveStartupPagesPref() { |
| 296 PrefService* prefs = dom_ui_->GetProfile()->GetPrefs(); |
| 297 |
| 298 SessionStartupPref pref = SessionStartupPref::GetStartupPref(prefs); |
| 299 pref.urls = startup_custom_pages_table_model_->GetURLs(); |
| 300 |
| 301 SessionStartupPref::SetStartupPref(prefs, pref); |
| 302 } |
OLD | NEW |