// Copyright 2014 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 NET_BASE_NET_LOG_UTIL_H_
#define NET_BASE_NET_LOG_UTIL_H_

#include <set>

#include "base/memory/scoped_ptr.h"
#include "net/base/net_export.h"
#include "net/base/net_log.h"

namespace base {
class DictionaryValue;
class Value;
}

namespace net {

class URLRequestContext;

// A set of flags that can be OR'd together to request specific information
// about the current state of the URLRequestContext.  See GetNetInfo, below.
enum NetInfoSource {
#define NET_INFO_SOURCE(label, string, value) NET_INFO_ ## label = value,
#include "net/base/net_info_source_list.h"
#undef NET_INFO_SOURCE
  NET_INFO_ALL_SOURCES = -1,
};

// Utility methods for creating NetLog dumps.

// Create a dictionary containing a legend for net/ constants.
NET_EXPORT scoped_ptr<base::DictionaryValue> GetNetConstants();

// Retrieves a dictionary containing information about the current state of
// |context|.  |info_sources| is a set of NetInfoSources OR'd together,
// indicating just what information is being requested.  Each NetInfoSource adds
// one top-level entry to the returned dictionary.
//
// May only be called on |context|'s thread.
NET_EXPORT scoped_ptr<base::DictionaryValue> GetNetInfo(
    URLRequestContext* context, int info_sources);

// Takes in a set of contexts and a NetLog::Observer, and passes in
// NetLog::Entries to the observer for certain NetLog::Sources with pending
// events.  This allows requests that were ongoing when logging was started to
// have an initial event that has some information.  This is particularly useful
// for hung requests.  Note that these calls are not protected by the NetLog's
// lock, so this should generally be invoked before the observer starts watching
// the NetLog.
//
// All members of |contexts| must be using the same NetLog, and live on the
// current thread.
//
// Currently only creates events for URLRequests.
//
// The reason for not returning a list of NetLog::Entries is that entries don't
// own most of their data, so it's simplest just to pass them in to the observer
// directly while their data is on the stack.
NET_EXPORT void CreateNetLogEntriesForActiveObjects(
    const std::set<URLRequestContext*>& contexts,
    NetLog::ThreadSafeObserver* observer);

}  // namespace net

#endif  // NET_BASE_NET_LOG_UTIL_H_
