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

Side by Side Diff: chrome/browser/policy/browser_policy_connector.cc

Issue 10832222: Added a timezone policy and pyauto tests for it. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase and update policy id. Created 8 years, 4 months 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 unified diff | Download patch
OLDNEW
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/policy/browser_policy_connector.h" 5 #include "chrome/browser/policy/browser_policy_connector.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 28 matching lines...) Expand all
39 #if defined(OS_WIN) 39 #if defined(OS_WIN)
40 #include "chrome/browser/policy/policy_loader_win.h" 40 #include "chrome/browser/policy/policy_loader_win.h"
41 #elif defined(OS_MACOSX) 41 #elif defined(OS_MACOSX)
42 #include "chrome/browser/policy/policy_loader_mac.h" 42 #include "chrome/browser/policy/policy_loader_mac.h"
43 #include "chrome/browser/preferences_mac.h" 43 #include "chrome/browser/preferences_mac.h"
44 #elif defined(OS_POSIX) 44 #elif defined(OS_POSIX)
45 #include "chrome/browser/policy/config_dir_policy_loader.h" 45 #include "chrome/browser/policy/config_dir_policy_loader.h"
46 #endif 46 #endif
47 47
48 #if defined(OS_CHROMEOS) 48 #if defined(OS_CHROMEOS)
49 #include "base/utf_string_conversions.h"
49 #include "chrome/browser/chromeos/cros/cros_library.h" 50 #include "chrome/browser/chromeos/cros/cros_library.h"
50 #include "chrome/browser/chromeos/login/authenticator.h"
51 #include "chrome/browser/chromeos/login/user_manager.h" 51 #include "chrome/browser/chromeos/login/user_manager.h"
52 #include "chrome/browser/chromeos/settings/cros_settings.h"
53 #include "chrome/browser/chromeos/settings/cros_settings_provider.h"
52 #include "chrome/browser/chromeos/system/statistics_provider.h" 54 #include "chrome/browser/chromeos/system/statistics_provider.h"
55 #include "chrome/browser/chromeos/system/timezone_settings.h"
53 #include "chrome/browser/policy/app_pack_updater.h" 56 #include "chrome/browser/policy/app_pack_updater.h"
54 #include "chrome/browser/policy/cros_user_policy_cache.h" 57 #include "chrome/browser/policy/cros_user_policy_cache.h"
55 #include "chrome/browser/policy/device_policy_cache.h" 58 #include "chrome/browser/policy/device_policy_cache.h"
56 #include "chromeos/dbus/dbus_thread_manager.h" 59 #include "chromeos/dbus/dbus_thread_manager.h"
57 #endif 60 #endif
58 61
59 using content::BrowserThread; 62 using content::BrowserThread;
60 63
61 namespace policy { 64 namespace policy {
62 65
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 managed_cloud_provider_.reset(new CloudPolicyProvider( 153 managed_cloud_provider_.reset(new CloudPolicyProvider(
151 this, 154 this,
152 POLICY_LEVEL_MANDATORY)); 155 POLICY_LEVEL_MANDATORY));
153 recommended_cloud_provider_.reset(new CloudPolicyProvider( 156 recommended_cloud_provider_.reset(new CloudPolicyProvider(
154 this, 157 this,
155 POLICY_LEVEL_RECOMMENDED)); 158 POLICY_LEVEL_RECOMMENDED));
156 } 159 }
157 160
158 InitializeDevicePolicy(); 161 InitializeDevicePolicy();
159 162
160 // Create the AppPackUpdater to start updating the cache. It requires the 163 // Complete the initialization once the message loops are spinning.
161 // system request context, which isn't available yet; therefore it is
162 // created only once the loops are running.
163 MessageLoop::current()->PostTask( 164 MessageLoop::current()->PostTask(
164 FROM_HERE, 165 FROM_HERE,
165 base::Bind(base::IgnoreResult(&BrowserPolicyConnector::GetAppPackUpdater), 166 base::Bind(&BrowserPolicyConnector::CompleteInitialization,
166 weak_ptr_factory_.GetWeakPtr())); 167 weak_ptr_factory_.GetWeakPtr()));
167 #endif 168 #endif
168 } 169 }
169 170
170 scoped_ptr<UserCloudPolicyManager> 171 scoped_ptr<UserCloudPolicyManager>
171 BrowserPolicyConnector::CreateCloudPolicyManager(Profile* profile) { 172 BrowserPolicyConnector::CreateCloudPolicyManager(Profile* profile) {
172 scoped_ptr<UserCloudPolicyManager> manager; 173 scoped_ptr<UserCloudPolicyManager> manager;
173 const CommandLine* command_line = CommandLine::ForCurrentProcess(); 174 const CommandLine* command_line = CommandLine::ForCurrentProcess();
174 if (command_line->HasSwitch(switches::kEnableCloudPolicyService)) { 175 if (command_line->HasSwitch(switches::kEnableCloudPolicyService)) {
175 bool wait_for_policy_fetch = false; 176 bool wait_for_policy_fetch = false;
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 new DevicePolicyCache(device_data_store_.get(), 543 new DevicePolicyCache(device_data_store_.get(),
543 install_attributes_.get()); 544 install_attributes_.get());
544 545
545 managed_cloud_provider_->SetDevicePolicyCache(device_policy_cache); 546 managed_cloud_provider_->SetDevicePolicyCache(device_policy_cache);
546 recommended_cloud_provider_->SetDevicePolicyCache(device_policy_cache); 547 recommended_cloud_provider_->SetDevicePolicyCache(device_policy_cache);
547 548
548 device_cloud_policy_subsystem_.reset(new CloudPolicySubsystem( 549 device_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
549 device_data_store_.get(), 550 device_data_store_.get(),
550 device_policy_cache, 551 device_policy_cache,
551 GetDeviceManagementUrl())); 552 GetDeviceManagementUrl()));
552
553 // Initialize the subsystem once the message loops are spinning.
554 MessageLoop::current()->PostTask(
555 FROM_HERE,
556 base::Bind(&BrowserPolicyConnector::CompleteInitialization,
557 weak_ptr_factory_.GetWeakPtr()));
558 } 553 }
559 } 554 }
560 #endif 555 #endif
561 } 556 }
562 557
563 void BrowserPolicyConnector::CompleteInitialization() { 558 void BrowserPolicyConnector::CompleteInitialization() {
564 #if defined(OS_CHROMEOS) 559 #if defined(OS_CHROMEOS)
560
561 // Create the AppPackUpdater to start updating the cache. It requires the
562 // system request context, which isn't available in Init(); therefore it is
563 // created only once the loops are running.
564 GetAppPackUpdater();
565
565 if (device_cloud_policy_subsystem_.get()) { 566 if (device_cloud_policy_subsystem_.get()) {
566 // Read serial number and machine model. This must be done before we call 567 // Read serial number and machine model. This must be done before we call
567 // CompleteInitialization() below such that the serial number is available 568 // CompleteInitialization() below such that the serial number is available
568 // for re-submission in case we're doing serial number recovery. 569 // for re-submission in case we're doing serial number recovery.
569 if (device_data_store_->machine_id().empty() || 570 if (device_data_store_->machine_id().empty() ||
570 device_data_store_->machine_model().empty()) { 571 device_data_store_->machine_model().empty()) {
571 chromeos::system::StatisticsProvider* provider = 572 chromeos::system::StatisticsProvider* provider =
572 chromeos::system::StatisticsProvider::GetInstance(); 573 chromeos::system::StatisticsProvider::GetInstance();
573 574
574 std::string machine_model; 575 std::string machine_model;
575 if (!provider->GetMachineStatistic(kMachineInfoSystemHwqual, 576 if (!provider->GetMachineStatistic(kMachineInfoSystemHwqual,
576 &machine_model)) { 577 &machine_model)) {
577 LOG(ERROR) << "Failed to get machine model."; 578 LOG(ERROR) << "Failed to get machine model.";
578 } 579 }
579 580
580 std::string machine_id = GetSerialNumber(); 581 std::string machine_id = GetSerialNumber();
581 if (machine_id.empty()) 582 if (machine_id.empty())
582 LOG(ERROR) << "Failed to get machine serial number."; 583 LOG(ERROR) << "Failed to get machine serial number.";
583 584
584 device_data_store_->set_machine_id(machine_id); 585 device_data_store_->set_machine_id(machine_id);
585 device_data_store_->set_machine_model(machine_model); 586 device_data_store_->set_machine_model(machine_model);
586 } 587 }
587 588
588 device_cloud_policy_subsystem_->CompleteInitialization( 589 device_cloud_policy_subsystem_->CompleteInitialization(
589 prefs::kDevicePolicyRefreshRate, 590 prefs::kDevicePolicyRefreshRate,
590 kServiceInitializationStartupDelay); 591 kServiceInitializationStartupDelay);
591 } 592 }
592 device_data_store_->set_device_status_collector( 593
593 new DeviceStatusCollector( 594 if (device_data_store_.get()) {
594 g_browser_process->local_state(), 595 device_data_store_->set_device_status_collector(
595 chromeos::system::StatisticsProvider::GetInstance(), 596 new DeviceStatusCollector(
596 NULL)); 597 g_browser_process->local_state(),
598 chromeos::system::StatisticsProvider::GetInstance(),
599 NULL));
600 }
601
602 SetTimezoneIfPolicyAvailable();
597 #endif 603 #endif
598 } 604 }
599 605
606 void BrowserPolicyConnector::SetTimezoneIfPolicyAvailable() {
607 #if defined(OS_CHROMEOS)
608 typedef chromeos::CrosSettingsProvider Provider;
609 Provider::TrustedStatus result =
610 chromeos::CrosSettings::Get()->PrepareTrustedValues(
611 base::Bind(&BrowserPolicyConnector::SetTimezoneIfPolicyAvailable,
612 weak_ptr_factory_.GetWeakPtr()));
613
614 if (result != Provider::TRUSTED)
615 return;
616
617 std::string timezone;
618 if (chromeos::CrosSettings::Get()->GetString(
619 chromeos::kSystemTimezonePolicy, &timezone)) {
620 chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID(
621 UTF8ToUTF16(timezone));
622 }
623 #endif
624 }
625
600 // static 626 // static
601 ConfigurationPolicyProvider* BrowserPolicyConnector::CreatePlatformProvider() { 627 ConfigurationPolicyProvider* BrowserPolicyConnector::CreatePlatformProvider() {
602 #if defined(OS_WIN) 628 #if defined(OS_WIN)
603 const PolicyDefinitionList* policy_list = GetChromePolicyDefinitionList(); 629 const PolicyDefinitionList* policy_list = GetChromePolicyDefinitionList();
604 scoped_ptr<AsyncPolicyLoader> loader(new PolicyLoaderWin(policy_list)); 630 scoped_ptr<AsyncPolicyLoader> loader(new PolicyLoaderWin(policy_list));
605 return new AsyncPolicyProvider(loader.Pass()); 631 return new AsyncPolicyProvider(loader.Pass());
606 #elif defined(OS_MACOSX) 632 #elif defined(OS_MACOSX)
607 const PolicyDefinitionList* policy_list = GetChromePolicyDefinitionList(); 633 const PolicyDefinitionList* policy_list = GetChromePolicyDefinitionList();
608 scoped_ptr<AsyncPolicyLoader> loader( 634 scoped_ptr<AsyncPolicyLoader> loader(
609 new PolicyLoaderMac(policy_list, new MacPreferences())); 635 new PolicyLoaderMac(policy_list, new MacPreferences()));
610 return new AsyncPolicyProvider(loader.Pass()); 636 return new AsyncPolicyProvider(loader.Pass());
611 #elif defined(OS_POSIX) 637 #elif defined(OS_POSIX)
612 FilePath config_dir_path; 638 FilePath config_dir_path;
613 if (PathService::Get(chrome::DIR_POLICY_FILES, &config_dir_path)) { 639 if (PathService::Get(chrome::DIR_POLICY_FILES, &config_dir_path)) {
614 scoped_ptr<AsyncPolicyLoader> loader( 640 scoped_ptr<AsyncPolicyLoader> loader(
615 new ConfigDirPolicyLoader(config_dir_path, POLICY_SCOPE_MACHINE)); 641 new ConfigDirPolicyLoader(config_dir_path, POLICY_SCOPE_MACHINE));
616 return new AsyncPolicyProvider(loader.Pass()); 642 return new AsyncPolicyProvider(loader.Pass());
617 } else { 643 } else {
618 return NULL; 644 return NULL;
619 } 645 }
620 #else 646 #else
621 return NULL; 647 return NULL;
622 #endif 648 #endif
623 } 649 }
624 650
625 } // namespace policy 651 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/policy/browser_policy_connector.h ('k') | chrome/browser/policy/device_policy_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698