OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/chromeos/settings/cros_settings.h" | 5 #include "chrome/browser/chromeos/settings/cros_settings.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "content/public/browser/notification_types.h" | 21 #include "content/public/browser/notification_types.h" |
22 #include "google_apis/gaia/gaia_auth_util.h" | 22 #include "google_apis/gaia/gaia_auth_util.h" |
23 | 23 |
24 namespace chromeos { | 24 namespace chromeos { |
25 | 25 |
26 static CrosSettings* g_cros_settings = NULL; | 26 static CrosSettings* g_cros_settings = NULL; |
27 | 27 |
28 // static | 28 // static |
29 void CrosSettings::Initialize() { | 29 void CrosSettings::Initialize() { |
30 CHECK(!g_cros_settings); | 30 CHECK(!g_cros_settings); |
31 g_cros_settings = new CrosSettings(); | 31 g_cros_settings = new CrosSettings(DeviceSettingsService::Get()); |
32 } | 32 } |
33 | 33 |
34 // static | 34 // static |
35 bool CrosSettings::IsInitialized() { | 35 bool CrosSettings::IsInitialized() { |
36 return g_cros_settings; | 36 return g_cros_settings; |
37 } | 37 } |
38 | 38 |
39 // static | 39 // static |
40 void CrosSettings::Shutdown() { | 40 void CrosSettings::Shutdown() { |
41 DCHECK(g_cros_settings); | 41 DCHECK(g_cros_settings); |
42 delete g_cros_settings; | 42 delete g_cros_settings; |
43 g_cros_settings = NULL; | 43 g_cros_settings = NULL; |
44 } | 44 } |
45 | 45 |
46 // static | 46 // static |
47 CrosSettings* CrosSettings::Get() { | 47 CrosSettings* CrosSettings::Get() { |
48 CHECK(g_cros_settings); | 48 CHECK(g_cros_settings); |
49 return g_cros_settings; | 49 return g_cros_settings; |
50 } | 50 } |
51 | 51 |
| 52 CrosSettings::CrosSettings(DeviceSettingsService* device_settings_service) { |
| 53 CrosSettingsProvider::NotifyObserversCallback notify_cb( |
| 54 base::Bind(&CrosSettings::FireObservers, |
| 55 // This is safe since |this| is never deleted. |
| 56 base::Unretained(this))); |
| 57 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 58 switches::kStubCrosSettings)) { |
| 59 AddSettingsProvider(new StubCrosSettingsProvider(notify_cb)); |
| 60 } else { |
| 61 AddSettingsProvider( |
| 62 new DeviceSettingsProvider(notify_cb, device_settings_service)); |
| 63 } |
| 64 // System settings are not mocked currently. |
| 65 AddSettingsProvider(new SystemSettingsProvider(notify_cb)); |
| 66 } |
| 67 |
| 68 CrosSettings::~CrosSettings() { |
| 69 STLDeleteElements(&providers_); |
| 70 STLDeleteValues(&settings_observers_); |
| 71 } |
| 72 |
52 bool CrosSettings::IsCrosSettings(const std::string& path) { | 73 bool CrosSettings::IsCrosSettings(const std::string& path) { |
53 return StartsWithASCII(path, kCrosSettingsPrefix, true); | 74 return StartsWithASCII(path, kCrosSettingsPrefix, true); |
54 } | 75 } |
55 | 76 |
56 void CrosSettings::Set(const std::string& path, const base::Value& in_value) { | 77 void CrosSettings::Set(const std::string& path, const base::Value& in_value) { |
57 DCHECK(CalledOnValidThread()); | 78 DCHECK(CalledOnValidThread()); |
58 CrosSettingsProvider* provider; | 79 CrosSettingsProvider* provider; |
59 provider = GetProvider(path); | 80 provider = GetProvider(path); |
60 if (provider) | 81 if (provider) |
61 provider->Set(path, in_value); | 82 provider->Set(path, in_value); |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 | 312 |
292 CrosSettingsProvider* CrosSettings::GetProvider( | 313 CrosSettingsProvider* CrosSettings::GetProvider( |
293 const std::string& path) const { | 314 const std::string& path) const { |
294 for (size_t i = 0; i < providers_.size(); ++i) { | 315 for (size_t i = 0; i < providers_.size(); ++i) { |
295 if (providers_[i]->HandlesSetting(path)) | 316 if (providers_[i]->HandlesSetting(path)) |
296 return providers_[i]; | 317 return providers_[i]; |
297 } | 318 } |
298 return NULL; | 319 return NULL; |
299 } | 320 } |
300 | 321 |
301 CrosSettings::CrosSettings() { | |
302 CrosSettingsProvider::NotifyObserversCallback notify_cb( | |
303 base::Bind(&CrosSettings::FireObservers, | |
304 // This is safe since |this| is never deleted. | |
305 base::Unretained(this))); | |
306 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
307 switches::kStubCrosSettings)) { | |
308 AddSettingsProvider(new StubCrosSettingsProvider(notify_cb)); | |
309 } else { | |
310 AddSettingsProvider( | |
311 new DeviceSettingsProvider(notify_cb, DeviceSettingsService::Get())); | |
312 } | |
313 // System settings are not mocked currently. | |
314 AddSettingsProvider(new SystemSettingsProvider(notify_cb)); | |
315 } | |
316 | |
317 CrosSettings::~CrosSettings() { | |
318 STLDeleteElements(&providers_); | |
319 STLDeleteValues(&settings_observers_); | |
320 } | |
321 | |
322 void CrosSettings::FireObservers(const std::string& path) { | 322 void CrosSettings::FireObservers(const std::string& path) { |
323 DCHECK(CalledOnValidThread()); | 323 DCHECK(CalledOnValidThread()); |
324 SettingsObserverMap::iterator observer_iterator = | 324 SettingsObserverMap::iterator observer_iterator = |
325 settings_observers_.find(path); | 325 settings_observers_.find(path); |
326 if (observer_iterator == settings_observers_.end()) | 326 if (observer_iterator == settings_observers_.end()) |
327 return; | 327 return; |
328 | 328 |
329 NotificationObserverList::Iterator it(*(observer_iterator->second)); | 329 NotificationObserverList::Iterator it(*(observer_iterator->second)); |
330 content::NotificationObserver* observer; | 330 content::NotificationObserver* observer; |
331 while ((observer = it.GetNext()) != NULL) { | 331 while ((observer = it.GetNext()) != NULL) { |
332 observer->Observe(chrome::NOTIFICATION_SYSTEM_SETTING_CHANGED, | 332 observer->Observe(chrome::NOTIFICATION_SYSTEM_SETTING_CHANGED, |
333 content::Source<CrosSettings>(this), | 333 content::Source<CrosSettings>(this), |
334 content::Details<const std::string>(&path)); | 334 content::Details<const std::string>(&path)); |
335 } | 335 } |
336 } | 336 } |
337 | 337 |
338 ScopedTestCrosSettings::ScopedTestCrosSettings() { | 338 ScopedTestCrosSettings::ScopedTestCrosSettings() { |
339 CrosSettings::Initialize(); | 339 CrosSettings::Initialize(); |
340 } | 340 } |
341 | 341 |
342 ScopedTestCrosSettings::~ScopedTestCrosSettings() { | 342 ScopedTestCrosSettings::~ScopedTestCrosSettings() { |
343 CrosSettings::Shutdown(); | 343 CrosSettings::Shutdown(); |
344 } | 344 } |
345 | 345 |
346 } // namespace chromeos | 346 } // namespace chromeos |
OLD | NEW |