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 <stdio.h>
6
7#include "base/json/json_string_value_serializer.h"
8#include "base/logging.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/values.h"
11#include "net/tools/gdig/file_net_log.h"
12
13namespace net {
14
15FileNetLogObserver::FileNetLogObserver(FILE* destination)
16    : destination_(destination) {
17  DCHECK(destination != NULL);
18}
19
20FileNetLogObserver::~FileNetLogObserver() {
21}
22
23void FileNetLogObserver::OnAddEntry(const net::NetLog::Entry& entry) {
24  // Only BoundNetLogs without a NetLog should have an invalid source.
25  DCHECK(entry.source().IsValid());
26
27  const char* source = NetLog::SourceTypeToString(entry.source().type);
28  const char* type = NetLog::EventTypeToString(entry.type());
29
30  scoped_ptr<base::Value> param_value(entry.ParametersToValue());
31  std::string params;
32  if (param_value.get() != NULL) {
33    JSONStringValueSerializer serializer(&params);
34    bool ret = serializer.Serialize(*param_value);
35    DCHECK(ret);
36  }
37  base::Time now = base::Time::NowFromSystemTime();
38  base::AutoLock lock(lock_);
39  if (first_event_time_.is_null()) {
40    first_event_time_ = now;
41  }
42  base::TimeDelta elapsed_time = now - first_event_time_;
43  fprintf(destination_ , "%u\t%u\t%s\t%s\t%s\n",
44          static_cast<unsigned>(elapsed_time.InMilliseconds()),
45          entry.source().id, source, type, params.c_str());
46}
47
48}  // namespace net
49