1// Copyright (c) 2012 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 "net/spdy/spdy_header_block.h"
6
7#include "base/values.h"
8#include "net/http/http_log_util.h"
9
10namespace net {
11
12base::Value* SpdyHeaderBlockNetLogCallback(
13    const SpdyHeaderBlock* headers,
14    NetLog::LogLevel log_level) {
15  base::DictionaryValue* dict = new base::DictionaryValue();
16  base::DictionaryValue* headers_dict = new base::DictionaryValue();
17  for (SpdyHeaderBlock::const_iterator it = headers->begin();
18       it != headers->end(); ++it) {
19    headers_dict->SetWithoutPathExpansion(
20        it->first,
21        new base::StringValue(
22            ElideHeaderValueForNetLog(log_level, it->first, it->second)));
23  }
24  dict->Set("headers", headers_dict);
25  return dict;
26}
27
28bool SpdyHeaderBlockFromNetLogParam(
29    const base::Value* event_param,
30    SpdyHeaderBlock* headers) {
31  headers->clear();
32
33  const base::DictionaryValue* dict = NULL;
34  const base::DictionaryValue* header_dict = NULL;
35
36  if (!event_param ||
37      !event_param->GetAsDictionary(&dict) ||
38      !dict->GetDictionary("headers", &header_dict)) {
39    return false;
40  }
41
42  for (base::DictionaryValue::Iterator it(*header_dict); !it.IsAtEnd();
43       it.Advance()) {
44    if (!it.value().GetAsString(&(*headers)[it.key()])) {
45      headers->clear();
46      return false;
47    }
48  }
49  return true;
50}
51
52}  // namespace net
53