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); | |
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
| |
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 |