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 |