Chromium Code Reviews| 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/policy/cloud/device_management_service.h" | 5 #include "chrome/browser/policy/cloud/device_management_service.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| 11 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
| 12 #include "base/message_loop/message_loop_proxy.h" | 12 #include "base/message_loop/message_loop_proxy.h" |
| 13 #include "base/strings/stringprintf.h" | |
| 14 #include "base/sys_info.h" | |
| 15 #include "chromeos/system/statistics_provider.h" | |
| 13 #include "net/base/escape.h" | 16 #include "net/base/escape.h" |
| 14 #include "net/base/load_flags.h" | 17 #include "net/base/load_flags.h" |
| 15 #include "net/base/net_errors.h" | 18 #include "net/base/net_errors.h" |
| 16 #include "net/cookies/cookie_monster.h" | 19 #include "net/cookies/cookie_monster.h" |
| 17 #include "net/dns/host_resolver.h" | 20 #include "net/dns/host_resolver.h" |
| 18 #include "net/http/http_network_layer.h" | 21 #include "net/http/http_network_layer.h" |
| 19 #include "net/http/http_response_headers.h" | 22 #include "net/http/http_response_headers.h" |
| 20 #include "net/proxy/proxy_service.h" | 23 #include "net/proxy/proxy_service.h" |
| 21 #include "net/ssl/ssl_config_service_defaults.h" | 24 #include "net/ssl/ssl_config_service_defaults.h" |
| 22 #include "net/url_request/static_http_user_agent_settings.h" | 25 #include "net/url_request/static_http_user_agent_settings.h" |
| 23 #include "net/url_request/url_fetcher.h" | 26 #include "net/url_request/url_fetcher.h" |
| 24 #include "net/url_request/url_request_context.h" | 27 #include "net/url_request/url_request_context.h" |
| 25 #include "net/url_request/url_request_context_getter.h" | 28 #include "net/url_request/url_request_context_getter.h" |
| 26 #include "net/url_request/url_request_status.h" | 29 #include "net/url_request/url_request_status.h" |
| 27 #include "url/gurl.h" | 30 #include "url/gurl.h" |
| 28 | 31 |
| 32 #if defined(OS_CHROMEOS) | |
| 33 #include "chromeos/system/statistics_provider.h" | |
|
Joao da Silva
2013/10/02 10:06:26
Unfortunately this is a no-go. We are moving this
stevenjb
2013/10/02 16:59:49
Components *can* rely on /src/chromeos. I'll look
stevenjb
2013/10/03 01:17:23
https://codereview.chromium.org/25690003 is defini
| |
| 34 #endif | |
| 35 | |
| 29 namespace em = enterprise_management; | 36 namespace em = enterprise_management; |
| 30 | 37 |
| 31 namespace policy { | 38 namespace policy { |
| 32 | 39 |
| 33 namespace { | 40 namespace { |
| 34 | 41 |
| 35 const char kPostContentType[] = "application/protobuf"; | 42 const char kPostContentType[] = "application/protobuf"; |
| 36 | 43 |
| 37 const char kServiceTokenAuthHeader[] = "Authorization: GoogleLogin auth="; | 44 const char kServiceTokenAuthHeader[] = "Authorization: GoogleLogin auth="; |
| 38 const char kDMTokenAuthHeader[] = "Authorization: GoogleDMToken token="; | 45 const char kDMTokenAuthHeader[] = "Authorization: GoogleDMToken token="; |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 207 } | 214 } |
| 208 | 215 |
| 209 return context_.get(); | 216 return context_.get(); |
| 210 } | 217 } |
| 211 | 218 |
| 212 scoped_refptr<base::SingleThreadTaskRunner> | 219 scoped_refptr<base::SingleThreadTaskRunner> |
| 213 DeviceManagementRequestContextGetter::GetNetworkTaskRunner() const { | 220 DeviceManagementRequestContextGetter::GetNetworkTaskRunner() const { |
| 214 return base_context_getter_->GetNetworkTaskRunner(); | 221 return base_context_getter_->GetNetworkTaskRunner(); |
| 215 } | 222 } |
| 216 | 223 |
| 224 std::string GetPlatformParameter() { | |
| 225 std::string os_name = base::SysInfo::OperatingSystemName(); | |
| 226 std::string os_hardware = base::SysInfo::OperatingSystemArchitecture(); | |
| 227 | |
| 228 #if defined(OS_CHROMEOS) | |
| 229 std::string hwclass; | |
| 230 if (!chromeos::system::StatisticsProvider::GetInstance() | |
| 231 ->GetMachineStatistic(chromeos::system::kHardwareClassKey, &hwclass)) { | |
| 232 LOG(ERROR) << "Failed to get machine information"; | |
| 233 } | |
| 234 os_name += ",CrOS," + base::SysInfo::GetLsbReleaseBoard(); | |
| 235 os_hardware += "," + hwclass; | |
| 236 #endif | |
| 237 | |
| 238 std::string os_version("-"); | |
| 239 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) | |
| 240 int32 os_major_version = 0; | |
| 241 int32 os_minor_version = 0; | |
| 242 int32 os_bugfix_version = 0; | |
| 243 base::SysInfo::OperatingSystemVersionNumbers(&os_major_version, | |
| 244 &os_minor_version, | |
| 245 &os_bugfix_version); | |
| 246 os_version = base::StringPrintf("%d.%d.%d", | |
| 247 os_major_version, | |
| 248 os_minor_version, | |
| 249 os_bugfix_version); | |
| 250 #endif | |
| 251 | |
| 252 return base::StringPrintf( | |
| 253 "%s|%s|%s", os_name.c_str(), os_hardware.c_str(), os_version.c_str()); | |
| 254 } | |
| 255 | |
| 217 } // namespace | 256 } // namespace |
| 218 | 257 |
| 219 // Request job implementation used with DeviceManagementService. | 258 // Request job implementation used with DeviceManagementService. |
| 220 class DeviceManagementRequestJobImpl : public DeviceManagementRequestJob { | 259 class DeviceManagementRequestJobImpl : public DeviceManagementRequestJob { |
| 221 public: | 260 public: |
| 222 DeviceManagementRequestJobImpl(JobType type, | 261 DeviceManagementRequestJobImpl(JobType type, |
| 223 const std::string& agent_parameter, | 262 const std::string& agent_parameter, |
| 224 const std::string& platform_parameter, | 263 const std::string& platform_parameter, |
| 225 DeviceManagementService* service); | 264 DeviceManagementService* service); |
| 226 virtual ~DeviceManagementRequestJobImpl(); | 265 virtual ~DeviceManagementRequestJobImpl(); |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 477 const int DeviceManagementService::kURLFetcherID = 0xde71ce1d; | 516 const int DeviceManagementService::kURLFetcherID = 0xde71ce1d; |
| 478 | 517 |
| 479 DeviceManagementService::~DeviceManagementService() { | 518 DeviceManagementService::~DeviceManagementService() { |
| 480 // All running jobs should have been cancelled by now. | 519 // All running jobs should have been cancelled by now. |
| 481 DCHECK(pending_jobs_.empty()); | 520 DCHECK(pending_jobs_.empty()); |
| 482 DCHECK(queued_jobs_.empty()); | 521 DCHECK(queued_jobs_.empty()); |
| 483 } | 522 } |
| 484 | 523 |
| 485 DeviceManagementRequestJob* DeviceManagementService::CreateJob( | 524 DeviceManagementRequestJob* DeviceManagementService::CreateJob( |
| 486 DeviceManagementRequestJob::JobType type) { | 525 DeviceManagementRequestJob::JobType type) { |
| 526 if (platform_parameter_.empty()) | |
| 527 platform_parameter_ = GetPlatformParameter(); | |
| 487 return new DeviceManagementRequestJobImpl( | 528 return new DeviceManagementRequestJobImpl( |
| 488 type, agent_parameter_, platform_parameter_, this); | 529 type, agent_parameter_, platform_parameter_, this); |
| 489 } | 530 } |
| 490 | 531 |
| 491 void DeviceManagementService::ScheduleInitialization(int64 delay_milliseconds) { | 532 void DeviceManagementService::ScheduleInitialization(int64 delay_milliseconds) { |
| 492 if (initialized_) | 533 if (initialized_) |
| 493 return; | 534 return; |
| 494 base::MessageLoop::current()->PostDelayedTask( | 535 base::MessageLoop::current()->PostDelayedTask( |
| 495 FROM_HERE, | 536 FROM_HERE, |
| 496 base::Bind(&DeviceManagementService::Initialize, | 537 base::Bind(&DeviceManagementService::Initialize, |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 519 delete job->first; | 560 delete job->first; |
| 520 queued_jobs_.push_back(job->second); | 561 queued_jobs_.push_back(job->second); |
| 521 } | 562 } |
| 522 pending_jobs_.clear(); | 563 pending_jobs_.clear(); |
| 523 } | 564 } |
| 524 | 565 |
| 525 DeviceManagementService::DeviceManagementService( | 566 DeviceManagementService::DeviceManagementService( |
| 526 scoped_refptr<net::URLRequestContextGetter> request_context, | 567 scoped_refptr<net::URLRequestContextGetter> request_context, |
| 527 const std::string& server_url, | 568 const std::string& server_url, |
| 528 const std::string& user_agent, | 569 const std::string& user_agent, |
| 529 const std::string& agent_parameter, | 570 const std::string& agent_parameter) |
| 530 const std::string& platform_parameter) | |
| 531 : request_context_(request_context), | 571 : request_context_(request_context), |
| 532 server_url_(server_url), | 572 server_url_(server_url), |
| 533 user_agent_(user_agent), | 573 user_agent_(user_agent), |
| 534 agent_parameter_(agent_parameter), | 574 agent_parameter_(agent_parameter), |
| 535 platform_parameter_(platform_parameter), | |
| 536 initialized_(false), | 575 initialized_(false), |
| 537 weak_ptr_factory_(this) { | 576 weak_ptr_factory_(this) { |
| 538 } | 577 } |
| 539 | 578 |
| 540 void DeviceManagementService::StartJob(DeviceManagementRequestJobImpl* job) { | 579 void DeviceManagementService::StartJob(DeviceManagementRequestJobImpl* job) { |
| 541 net::URLFetcher* fetcher = net::URLFetcher::Create( | 580 net::URLFetcher* fetcher = net::URLFetcher::Create( |
| 542 kURLFetcherID, job->GetURL(server_url_), net::URLFetcher::POST, this); | 581 kURLFetcherID, job->GetURL(server_url_), net::URLFetcher::POST, this); |
| 543 fetcher->SetRequestContext(request_context_getter_.get()); | 582 fetcher->SetRequestContext(request_context_getter_.get()); |
| 544 job->ConfigureRequest(fetcher); | 583 job->ConfigureRequest(fetcher); |
| 545 pending_jobs_[fetcher] = job; | 584 pending_jobs_[fetcher] = job; |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 588 } | 627 } |
| 589 } | 628 } |
| 590 | 629 |
| 591 const JobQueue::iterator elem = | 630 const JobQueue::iterator elem = |
| 592 std::find(queued_jobs_.begin(), queued_jobs_.end(), job); | 631 std::find(queued_jobs_.begin(), queued_jobs_.end(), job); |
| 593 if (elem != queued_jobs_.end()) | 632 if (elem != queued_jobs_.end()) |
| 594 queued_jobs_.erase(elem); | 633 queued_jobs_.erase(elem); |
| 595 } | 634 } |
| 596 | 635 |
| 597 } // namespace policy | 636 } // namespace policy |
| OLD | NEW |