| 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/ui/webui/policy_ui.h" | 5 #include "chrome/browser/ui/webui/policy_ui.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 #include "chrome/common/time_format.h" | 33 #include "chrome/common/time_format.h" |
| 34 #include "chrome/common/url_constants.h" | 34 #include "chrome/common/url_constants.h" |
| 35 #include "content/public/browser/web_contents.h" | 35 #include "content/public/browser/web_contents.h" |
| 36 #include "content/public/browser/web_ui.h" | 36 #include "content/public/browser/web_ui.h" |
| 37 #include "grit/browser_resources.h" | 37 #include "grit/browser_resources.h" |
| 38 #include "grit/generated_resources.h" | 38 #include "grit/generated_resources.h" |
| 39 #include "ui/base/l10n/l10n_util.h" | 39 #include "ui/base/l10n/l10n_util.h" |
| 40 | 40 |
| 41 #if defined(OS_CHROMEOS) | 41 #if defined(OS_CHROMEOS) |
| 42 #include "chrome/browser/chromeos/login/user_manager.h" | 42 #include "chrome/browser/chromeos/login/user_manager.h" |
| 43 #include "chrome/browser/policy/cloud_policy_cache_base.h" | |
| 44 #include "chrome/browser/policy/cloud_policy_data_store.h" | |
| 45 #include "chrome/browser/policy/device_cloud_policy_manager_chromeos.h" | 43 #include "chrome/browser/policy/device_cloud_policy_manager_chromeos.h" |
| 46 #include "chrome/browser/policy/device_local_account_policy_service.h" | 44 #include "chrome/browser/policy/device_local_account_policy_service.h" |
| 47 #include "chrome/browser/policy/user_cloud_policy_manager_chromeos.h" | 45 #include "chrome/browser/policy/user_cloud_policy_manager_chromeos.h" |
| 48 #else | 46 #else |
| 49 #include "chrome/browser/policy/user_cloud_policy_manager.h" | 47 #include "chrome/browser/policy/user_cloud_policy_manager.h" |
| 50 #include "chrome/browser/policy/user_cloud_policy_manager_factory.h" | 48 #include "chrome/browser/policy/user_cloud_policy_manager_factory.h" |
| 51 #endif | 49 #endif |
| 52 | 50 |
| 53 namespace em = enterprise_management; | 51 namespace em = enterprise_management; |
| 54 | 52 |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 interval = refresh_scheduler->refresh_delay(); | 271 interval = refresh_scheduler->refresh_delay(); |
| 274 status_dict->SetString( | 272 status_dict->SetString( |
| 275 "fetchInterval", | 273 "fetchInterval", |
| 276 TimeFormat::TimeRemainingShort( | 274 TimeFormat::TimeRemainingShort( |
| 277 base::TimeDelta::FromMilliseconds(interval))); | 275 base::TimeDelta::FromMilliseconds(interval))); |
| 278 | 276 |
| 279 return store->is_managed(); | 277 return store->is_managed(); |
| 280 } | 278 } |
| 281 | 279 |
| 282 #if defined(OS_CHROMEOS) | 280 #if defined(OS_CHROMEOS) |
| 283 // A cloud policy status provider implementation that reads status data from a | |
| 284 // CloudPolicySubsystem and observes it to forward changes to the status change | |
| 285 // callback. | |
| 286 // TODO(mnissler): Remove this once the legacy cloud policy code gets retired | |
| 287 // (http://crbug.com/108928). | |
| 288 class CloudPolicySubsystemStatusProvider | |
| 289 : public CloudPolicyStatusProvider, | |
| 290 public policy::CloudPolicySubsystem::Observer { | |
| 291 public: | |
| 292 CloudPolicySubsystemStatusProvider(policy::CloudPolicySubsystem* subsystem, | |
| 293 const std::string& refresh_pref) | |
| 294 : subsystem_(subsystem), | |
| 295 registrar_(subsystem, this), | |
| 296 refresh_pref_(refresh_pref) {} | |
| 297 virtual ~CloudPolicySubsystemStatusProvider() {} | |
| 298 | |
| 299 // CloudPolicyStatusProvider: | |
| 300 virtual bool GetStatus(base::DictionaryValue* status_dict) OVERRIDE; | |
| 301 | |
| 302 // policy::CloudPolicySubsystem::Observer: | |
| 303 virtual void OnPolicyStateChanged( | |
| 304 policy::CloudPolicySubsystem::PolicySubsystemState state, | |
| 305 policy::CloudPolicySubsystem::ErrorDetails error_details) OVERRIDE { | |
| 306 NotifyStatusChange(); | |
| 307 } | |
| 308 | |
| 309 private: | |
| 310 // The subsystem supplying status information. | |
| 311 policy::CloudPolicySubsystem* subsystem_; | |
| 312 | |
| 313 // Manages the observer registration with |subsystem_|. | |
| 314 policy::CloudPolicySubsystem::ObserverRegistrar registrar_; | |
| 315 | |
| 316 // The refresh interval is read from this pref key in | |
| 317 // g_browser_process->local_state(). | |
| 318 const std::string refresh_pref_; | |
| 319 | |
| 320 DISALLOW_COPY_AND_ASSIGN(CloudPolicySubsystemStatusProvider); | |
| 321 }; | |
| 322 | |
| 323 bool CloudPolicySubsystemStatusProvider::GetStatus( | |
| 324 base::DictionaryValue* status_dict) { | |
| 325 static const int kStatusErrorMap[] = { | |
| 326 IDS_POLICY_STATUS_OK, | |
| 327 IDS_POLICY_STATUS_NETWORK_ERROR, | |
| 328 IDS_POLICY_STATUS_NETWORK_ERROR, // this is also a network error. | |
| 329 IDS_POLICY_STATUS_DMTOKEN_ERROR, | |
| 330 IDS_POLICY_STATUS_LOCAL_ERROR, | |
| 331 IDS_POLICY_STATUS_SIGNATURE_ERROR, | |
| 332 IDS_POLICY_STATUS_SERIAL_ERROR, | |
| 333 }; | |
| 334 policy::CloudPolicySubsystem::ErrorDetails error_details = | |
| 335 subsystem_->error_details(); | |
| 336 DCHECK(static_cast<size_t>(error_details) < arraysize(kStatusErrorMap)); | |
| 337 status_dict->SetString( | |
| 338 "statusMessage", | |
| 339 l10n_util::GetStringUTF16(kStatusErrorMap[error_details])); | |
| 340 | |
| 341 string16 time_since_last_fetch; | |
| 342 base::Time last_refresh_time = | |
| 343 subsystem_->GetCloudPolicyCacheBase()->last_policy_refresh_time(); | |
| 344 if (last_refresh_time.is_null()) { | |
| 345 time_since_last_fetch = | |
| 346 l10n_util::GetStringUTF16(IDS_POLICY_NEVER_FETCHED); | |
| 347 } else { | |
| 348 base::Time now = base::Time::NowFromSystemTime(); | |
| 349 time_since_last_fetch = TimeFormat::TimeElapsed(now - last_refresh_time); | |
| 350 } | |
| 351 status_dict->SetString("timeSinceLastFetch", time_since_last_fetch); | |
| 352 | |
| 353 policy::CloudPolicyDataStore* data_store = subsystem_->data_store(); | |
| 354 status_dict->SetString( | |
| 355 "clientId", | |
| 356 data_store ? ASCIIToUTF16(data_store->device_id()) : string16()); | |
| 357 status_dict->SetString( | |
| 358 "user", | |
| 359 data_store ? UTF8ToUTF16(data_store->user_name()) : string16()); | |
| 360 | |
| 361 PrefService* prefs = g_browser_process->local_state(); | |
| 362 status_dict->SetString("fetchInterval", | |
| 363 TimeFormat::TimeRemainingShort( | |
| 364 base::TimeDelta::FromMilliseconds( | |
| 365 prefs->GetInteger(refresh_pref_.c_str())))); | |
| 366 | |
| 367 return subsystem_->state() != policy::CloudPolicySubsystem::UNMANAGED; | |
| 368 } | |
| 369 | |
| 370 // A cloud policy status provider that reads policy status from the policy core | 281 // A cloud policy status provider that reads policy status from the policy core |
| 371 // associated with the device-local account specified by |account_id| at | 282 // associated with the device-local account specified by |account_id| at |
| 372 // construction time. The indirection via account ID and | 283 // construction time. The indirection via account ID and |
| 373 // DeviceLocalAccountPolicyService is necessary because the device-local account | 284 // DeviceLocalAccountPolicyService is necessary because the device-local account |
| 374 // may go away any time behind the scenes, at which point the status message | 285 // may go away any time behind the scenes, at which point the status message |
| 375 // text will indicate CloudPolicyStore::STATUS_BAD_STATE. | 286 // text will indicate CloudPolicyStore::STATUS_BAD_STATE. |
| 376 class DeviceLocalAccountPolicyStatusProvider | 287 class DeviceLocalAccountPolicyStatusProvider |
| 377 : public CloudPolicyStatusProvider, | 288 : public CloudPolicyStatusProvider, |
| 378 public policy::DeviceLocalAccountPolicyService::Observer { | 289 public policy::DeviceLocalAccountPolicyService::Observer { |
| 379 public: | 290 public: |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 PolicyUIHandler::~PolicyUIHandler() { | 346 PolicyUIHandler::~PolicyUIHandler() { |
| 436 GetPolicyService()->RemoveObserver(policy::POLICY_DOMAIN_CHROME, this); | 347 GetPolicyService()->RemoveObserver(policy::POLICY_DOMAIN_CHROME, this); |
| 437 } | 348 } |
| 438 | 349 |
| 439 void PolicyUIHandler::RegisterMessages() { | 350 void PolicyUIHandler::RegisterMessages() { |
| 440 #if defined(OS_CHROMEOS) | 351 #if defined(OS_CHROMEOS) |
| 441 policy::BrowserPolicyConnector* connector = | 352 policy::BrowserPolicyConnector* connector = |
| 442 g_browser_process->browser_policy_connector(); | 353 g_browser_process->browser_policy_connector(); |
| 443 if (connector->IsEnterpriseManaged()) { | 354 if (connector->IsEnterpriseManaged()) { |
| 444 enterprise_domain_ = UTF8ToUTF16(connector->GetEnterpriseDomain()); | 355 enterprise_domain_ = UTF8ToUTF16(connector->GetEnterpriseDomain()); |
| 445 policy::DeviceCloudPolicyManagerChromeOS* device_policy_manager = | 356 device_status_provider_.reset( |
| 446 connector->GetDeviceCloudPolicyManager(); | 357 new CloudPolicyCoreStatusProvider( |
| 447 policy::CloudPolicySubsystem* device_subsystem = | 358 connector->GetDeviceCloudPolicyManager()->core())); |
| 448 connector->device_cloud_policy_subsystem(); | |
| 449 if (device_policy_manager) { | |
| 450 device_status_provider_.reset( | |
| 451 new CloudPolicyCoreStatusProvider(device_policy_manager->core())); | |
| 452 } else if (device_subsystem) { | |
| 453 device_status_provider_.reset( | |
| 454 new CloudPolicySubsystemStatusProvider( | |
| 455 device_subsystem, prefs::kDevicePolicyRefreshRate)); | |
| 456 } | |
| 457 } | 359 } |
| 458 | 360 |
| 459 chromeos::UserManager* user_manager = chromeos::UserManager::Get(); | 361 chromeos::UserManager* user_manager = chromeos::UserManager::Get(); |
| 460 policy::CloudPolicyManager* user_cloud_policy_manager = | |
| 461 connector->GetUserCloudPolicyManager(); | |
| 462 policy::CloudPolicySubsystem* user_subsystem = | |
| 463 connector->user_cloud_policy_subsystem(); | |
| 464 if (user_manager->IsLoggedInAsPublicAccount()) { | 362 if (user_manager->IsLoggedInAsPublicAccount()) { |
| 465 policy::DeviceLocalAccountPolicyService* local_account_service = | 363 policy::DeviceLocalAccountPolicyService* local_account_service = |
| 466 connector->GetDeviceLocalAccountPolicyService(); | 364 connector->GetDeviceLocalAccountPolicyService(); |
| 467 if (local_account_service) { | 365 if (local_account_service) { |
| 468 user_status_provider_.reset( | 366 user_status_provider_.reset( |
| 469 new DeviceLocalAccountPolicyStatusProvider( | 367 new DeviceLocalAccountPolicyStatusProvider( |
| 470 user_manager->GetLoggedInUser()->email(), local_account_service)); | 368 user_manager->GetLoggedInUser()->email(), local_account_service)); |
| 471 } | 369 } |
| 472 } else if (user_cloud_policy_manager) { | 370 } else { |
| 473 user_status_provider_.reset( | 371 user_status_provider_.reset( |
| 474 new CloudPolicyCoreStatusProvider(user_cloud_policy_manager->core())); | 372 new CloudPolicyCoreStatusProvider( |
| 475 } else if (user_subsystem) { | 373 connector->GetUserCloudPolicyManager()->core())); |
| 476 user_status_provider_.reset( | |
| 477 new CloudPolicySubsystemStatusProvider( | |
| 478 user_subsystem, prefs::kUserPolicyRefreshRate)); | |
| 479 } | 374 } |
| 480 #else | 375 #else |
| 481 policy::CloudPolicyManager* user_cloud_policy_manager = | 376 policy::CloudPolicyManager* user_cloud_policy_manager = |
| 482 policy::UserCloudPolicyManagerFactory::GetForProfile( | 377 policy::UserCloudPolicyManagerFactory::GetForProfile( |
| 483 Profile::FromWebUI(web_ui())); | 378 Profile::FromWebUI(web_ui())); |
| 484 if (user_cloud_policy_manager) { | 379 if (user_cloud_policy_manager) { |
| 485 user_status_provider_.reset( | 380 user_status_provider_.reset( |
| 486 new CloudPolicyCoreStatusProvider(user_cloud_policy_manager->core())); | 381 new CloudPolicyCoreStatusProvider(user_cloud_policy_manager->core())); |
| 487 } | 382 } |
| 488 #endif | 383 #endif |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 639 PolicyUI::PolicyUI(content::WebUI* web_ui) : WebUIController(web_ui) { | 534 PolicyUI::PolicyUI(content::WebUI* web_ui) : WebUIController(web_ui) { |
| 640 web_ui->AddMessageHandler(new PolicyUIHandler); | 535 web_ui->AddMessageHandler(new PolicyUIHandler); |
| 641 | 536 |
| 642 // Set up the chrome://policy/ source. | 537 // Set up the chrome://policy/ source. |
| 643 Profile* profile = Profile::FromWebUI(web_ui); | 538 Profile* profile = Profile::FromWebUI(web_ui); |
| 644 ChromeURLDataManager::AddWebUIDataSource(profile, CreatePolicyUIHTMLSource()); | 539 ChromeURLDataManager::AddWebUIDataSource(profile, CreatePolicyUIHTMLSource()); |
| 645 } | 540 } |
| 646 | 541 |
| 647 PolicyUI::~PolicyUI() { | 542 PolicyUI::~PolicyUI() { |
| 648 } | 543 } |
| OLD | NEW |