• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/policy/core/common/cloud/policy_header_io_helper.h"
6 
7 #include "base/bind.h"
8 #include "base/location.h"
9 #include "base/sequenced_task_runner.h"
10 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
11 #include "net/url_request/url_request.h"
12 
13 namespace policy {
14 
PolicyHeaderIOHelper(const std::string & server_url,const std::string & initial_header_value,const scoped_refptr<base::SequencedTaskRunner> & task_runner)15 PolicyHeaderIOHelper::PolicyHeaderIOHelper(
16     const std::string& server_url,
17     const std::string& initial_header_value,
18     const scoped_refptr<base::SequencedTaskRunner>& task_runner)
19     : server_url_(server_url),
20       io_task_runner_(task_runner),
21       policy_header_(initial_header_value) {
22 }
23 
~PolicyHeaderIOHelper()24 PolicyHeaderIOHelper::~PolicyHeaderIOHelper() {
25 }
26 
27 // Sets any necessary policy headers on the passed request.
AddPolicyHeaders(const GURL & url,net::URLRequest * request) const28 void PolicyHeaderIOHelper::AddPolicyHeaders(const GURL& url,
29                                             net::URLRequest* request) const {
30   DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
31   if (!policy_header_.empty() &&
32       url.spec().compare(0, server_url_.size(), server_url_) == 0) {
33     request->SetExtraRequestHeaderByName(kChromePolicyHeader,
34                                          policy_header_,
35                                          true /* overwrite */);
36   }
37 }
38 
UpdateHeader(const std::string & new_header)39 void PolicyHeaderIOHelper::UpdateHeader(const std::string& new_header) {
40   // Post a task to the IO thread to modify this.
41   io_task_runner_->PostTask(
42       FROM_HERE,
43       base::Bind(&PolicyHeaderIOHelper::UpdateHeaderOnIOThread,
44                  base::Unretained(this), new_header));
45 }
46 
UpdateHeaderOnIOThread(const std::string & new_header)47 void PolicyHeaderIOHelper::UpdateHeaderOnIOThread(
48     const std::string& new_header) {
49   DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
50   policy_header_ = new_header;
51 }
52 
SetServerURLForTest(const std::string & server_url)53 void PolicyHeaderIOHelper::SetServerURLForTest(const std::string& server_url) {
54   io_task_runner_->PostTask(
55       FROM_HERE,
56       base::Bind(&PolicyHeaderIOHelper::SetServerURLOnIOThread,
57                  base::Unretained(this), server_url));
58 
59 }
60 
SetServerURLOnIOThread(const std::string & server_url)61 void PolicyHeaderIOHelper::SetServerURLOnIOThread(
62     const std::string& server_url) {
63   DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
64   server_url_ = server_url;
65 }
66 
67 }  // namespace policy
68