Home | History | Annotate | Download | only in cloud
      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 
     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 
     24 PolicyHeaderIOHelper::~PolicyHeaderIOHelper() {
     25 }
     26 
     27 // Sets any necessary policy headers on the passed request.
     28 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 
     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 
     47 void PolicyHeaderIOHelper::UpdateHeaderOnIOThread(
     48     const std::string& new_header) {
     49   DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
     50   policy_header_ = new_header;
     51 }
     52 
     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 
     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