blob: 345b9ccb67ff449753b449c99ad57419093d3296 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_POLICY_CORE_BROWSER_POLICY_HEADER_IO_HELPER_H_
#define COMPONENTS_POLICY_CORE_BROWSER_POLICY_HEADER_IO_HELPER_H_
#include <string>
#include "base/memory/ref_counted.h"
#include "base/sequenced_task_runner.h"
#include "components/policy/policy_export.h"
namespace net {
class URLRequest;
}
namespace policy {
// Helper class that lives on the I/O thread and adds policy headers to
// outgoing requests. Instances of this class are created by
// PolicyHeaderService on the UI thread, and that class is responsible for
// notifying this class via UpdateHeaderFromUI() when the header changes.
// Ownership is transferred to ProfileIOData, and this object is run and
// destroyed on the I/O thread.
class POLICY_EXPORT PolicyHeaderIOHelper {
public:
PolicyHeaderIOHelper(
const std::string& server_url,
const std::string& initial_header_value,
const scoped_refptr<base::SequencedTaskRunner>& task_runner);
~PolicyHeaderIOHelper();
// Sets any necessary policy headers on the passed request. Should be invoked
// only from the I/O thread.
void AddPolicyHeaders(net::URLRequest* request) const;
// API invoked when the header changes. Can be called from any thread - calls
// are marshalled via the TaskRunner to run on the appropriate thread.
// If |new_header| is the empty string, no header will be added to
// outgoing requests.
void UpdateHeader(const std::string& new_header);
private:
// API invoked via the TaskRunner to update the header.
void UpdateHeaderOnIOThread(const std::string& new_header);
// The URL we should add policy headers to.
std::string server_url_;
// The task runner assocated with the I/O thread that runs this object.
scoped_refptr<base::SequencedTaskRunner> io_task_runner_;
// The current policy header value.
std::string policy_header_;
DISALLOW_COPY_AND_ASSIGN(PolicyHeaderIOHelper);
};
} // namespace policy
#endif // COMPONENTS_POLICY_CORE_BROWSER_POLICY_HEADER_IO_HELPER_H_