Home | History | Annotate | Download | only in spdy
      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 
     10 namespace net {
     11 
     12 base::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 
     28 bool 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