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/spdy/spdy_http_utils.h" 9 10 namespace net { 11 SpdyHeaderBlockNetLogCallback(const SpdyHeaderBlock * headers,NetLog::LogLevel)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 ShouldShowHttpHeaderValue(it->first) ? it->second : "[elided]")); 23 } 24 dict->Set("headers", headers_dict); 25 return dict; 26 } 27 SpdyHeaderBlockFromNetLogParam(const base::Value * event_param,SpdyHeaderBlock * headers)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