// Copyright 2018 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.

#include "services/network/throttling/scoped_throttling_token.h"

#include "base/memory/ptr_util.h"
#include "base/unguessable_token.h"
#include "services/network/throttling/throttling_controller.h"

namespace network {

// static
std::unique_ptr<ScopedThrottlingToken> ScopedThrottlingToken::MaybeCreate(
    uint32_t net_log_source_id,
    const base::Optional<base::UnguessableToken>& throttling_profile_id) {
  if (!throttling_profile_id)
    return nullptr;
  if (!ThrottlingController::HasInterceptor(*throttling_profile_id))
    return nullptr;
  return base::WrapUnique(
      new ScopedThrottlingToken(net_log_source_id, *throttling_profile_id));
}

ScopedThrottlingToken::ScopedThrottlingToken(
    uint32_t net_log_source_id,
    const base::UnguessableToken& throttling_profile_id)
    : net_log_source_id_(net_log_source_id) {
  ThrottlingController::RegisterProfileIDForNetLogSource(net_log_source_id,
                                                         throttling_profile_id);
}

ScopedThrottlingToken::~ScopedThrottlingToken() {
  ThrottlingController::UnregisterNetLogSource(net_log_source_id_);
}

}  // namespace network
