|  | // Copyright 2012 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 "ios/net/http_protocol_logging.h" | 
|  |  | 
|  | #import <Foundation/Foundation.h> | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "base/strings/sys_string_conversions.h" | 
|  | #import "ios/net/url_scheme_util.h" | 
|  |  | 
|  | #if !defined(__has_feature) || !__has_feature(objc_arc) | 
|  | #error "This file requires ARC support." | 
|  | #endif | 
|  |  | 
|  | namespace { | 
|  | const unsigned int kMaxUrlLength = 100; | 
|  | } | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | void LogNSURLRequest(NSURLRequest* request) { | 
|  | DVLOG_IF(2, UrlHasDataScheme([request URL]) && | 
|  | [[[request URL] absoluteString] length] > kMaxUrlLength) | 
|  | << "Request (data scheme) " | 
|  | << base::SysNSStringToUTF8( | 
|  | [[[request URL] absoluteString] substringToIndex:kMaxUrlLength]) | 
|  | << " ..."; | 
|  |  | 
|  | DVLOG_IF(2, ![[[request URL] scheme] isEqualToString:@"data"] || | 
|  | [[[request URL] absoluteString] length] <= kMaxUrlLength) | 
|  | << "Request " | 
|  | << base::SysNSStringToUTF8([[request URL] description]); | 
|  |  | 
|  | DVLOG_IF(2, ![[request HTTPMethod] isEqualToString:@"GET"]) | 
|  | << base::SysNSStringToUTF8([request HTTPMethod]); | 
|  |  | 
|  | DVLOG_IF(2, [request allHTTPHeaderFields]) | 
|  | << base::SysNSStringToUTF8([[request allHTTPHeaderFields] description]); | 
|  |  | 
|  | DVLOG_IF(2, [request networkServiceType]) | 
|  | << "Service type: " << [request networkServiceType]; | 
|  |  | 
|  | DVLOG_IF(2, ![request HTTPShouldHandleCookies]) << "No cookies"; | 
|  |  | 
|  | DVLOG_IF(2, [request HTTPShouldUsePipelining]) << "Pipelining allowed"; | 
|  | } | 
|  |  | 
|  | void LogNSURLResponse(NSURLResponse* response) { | 
|  | DVLOG_IF(2, UrlHasDataScheme([response URL]) && | 
|  | [[[response URL] absoluteString] length] > kMaxUrlLength) | 
|  | << "Response (data scheme) " | 
|  | << base::SysNSStringToUTF8( | 
|  | [[[response URL] absoluteString] substringToIndex:kMaxUrlLength]); | 
|  |  | 
|  | DVLOG_IF(2, !UrlHasDataScheme([response URL]) || | 
|  | [[[response URL] absoluteString] length] <= kMaxUrlLength) | 
|  | << "Response " | 
|  | << base::SysNSStringToUTF8([[response URL] description]); | 
|  |  | 
|  | DVLOG_IF(2, [response isKindOfClass:[NSHTTPURLResponse class]] && | 
|  | [(NSHTTPURLResponse*)response allHeaderFields]) | 
|  | << base::SysNSStringToUTF8( | 
|  | [[(NSHTTPURLResponse*)response allHeaderFields] description]); | 
|  |  | 
|  | DVLOG_IF(2, [response expectedContentLength]) | 
|  | << "Length: " << [response expectedContentLength]; | 
|  |  | 
|  | DVLOG_IF(2, [response MIMEType]) | 
|  | << "MIMEType: " << base::SysNSStringToUTF8([response MIMEType]); | 
|  |  | 
|  | DVLOG_IF(2, [response isKindOfClass:[NSHTTPURLResponse class]]) | 
|  | << "Response code: " << [(NSHTTPURLResponse*)response statusCode]; | 
|  |  | 
|  | DVLOG_IF(2, [response textEncodingName]) | 
|  | << "Text encoding: " | 
|  | << base::SysNSStringToUTF8([response textEncodingName]); | 
|  | } | 
|  |  | 
|  | }  // namespace http_protocol_logging |