19c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// Copyright (c) 2012 The Chromium Authors. All rights reserved.
29c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// Use of this source code is governed by a BSD-style license that can be
39c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar// found in the LICENSE file.
49c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
59c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "net/disk_cache/net_log_parameters.h"
69c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
79c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "base/bind.h"
89c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "base/logging.h"
99c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "base/strings/string_number_conversions.h"
109c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "base/values.h"
119c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "net/base/net_errors.h"
129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar#include "net/disk_cache/disk_cache.h"
139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
1440f1265ebd42ece3e7f7917319b56012e8e2bce2Daniel Dunbarnamespace {
15b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
169c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarbase::Value* NetLogEntryCreationCallback(
179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    const disk_cache::Entry* entry,
189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    bool created,
199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    net::NetLog::LogLevel /* log_level */) {
209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  base::DictionaryValue* dict = new base::DictionaryValue();
21df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor  dict->SetString("key", entry->GetKey());
22df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor  dict->SetBoolean("created", created);
2302633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar  return dict;
24f395528158379e7ea9f6ff4bbb791abadca15aabDaniel Dunbar}
2502633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbar
2602633b541b04ad5ffc1c70f4c2feeeb13e607057Daniel Dunbarbase::Value* NetLogReadWriteDataCallback(
27985b825eea7387be10478de0430815ed6a673326Daniel Dunbar    int index,
289c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    int offset,
29985b825eea7387be10478de0430815ed6a673326Daniel Dunbar    int buf_len,
30df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor    bool truncate,
31df91ef3d6c55692a0236f67b6c6b134a3bf84098Douglas Gregor    net::NetLog::LogLevel /* log_level */) {
32c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar  base::DictionaryValue* dict = new base::DictionaryValue();
33c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar  dict->SetInteger("index", index);
34c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar  dict->SetInteger("offset", offset);
35c21c485b4fb58ef5d55cf3e523263dd824a2ace4Daniel Dunbar  dict->SetInteger("buf_len", buf_len);
369c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  if (truncate)
3731b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar    dict->SetBoolean("truncate", truncate);
389c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  return dict;
399c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar}
409c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
419c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarbase::Value* NetLogReadWriteCompleteCallback(
4247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    int bytes_copied,
4347ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    net::NetLog::LogLevel /* log_level */) {
44871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar  DCHECK_NE(bytes_copied, net::ERR_IO_PENDING);
451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  base::DictionaryValue* dict = new base::DictionaryValue();
461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  if (bytes_copied < 0) {
471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    dict->SetInteger("net_error", bytes_copied);
4847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar  } else {
499c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    dict->SetInteger("bytes_copied", bytes_copied);
509c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  }
5131b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  return dict;
5231b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar}
53b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
549c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarbase::Value* NetLogSparseOperationCallback(
55b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    int64 offset,
5647ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    int buff_len,
5747ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar    net::NetLog::LogLevel /* log_level */) {
58871adcf4e41285e3f4c3b62eaa1b2e05b60b92daDaniel Dunbar  base::DictionaryValue* dict = new base::DictionaryValue();
591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  // Values can only be created with at most 32-bit integers.  Using a string
601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  // instead circumvents that restriction.
611eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  dict->SetString("offset", base::Int64ToString(offset));
6247ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar  dict->SetInteger("buff_len", buff_len);
63b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  return dict;
64b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar}
65b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
66b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbarbase::Value* NetLogSparseReadWriteCallback(
679c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    const net::NetLog::Source& source,
689c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    int child_len,
691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    net::NetLog::LogLevel /* log_level */) {
70b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  base::DictionaryValue* dict = new base::DictionaryValue();
719c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  source.AddToEventParameters(dict);
72b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  dict->SetInteger("child_len", child_len);
73b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  return dict;
74b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar}
75b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
76b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbarbase::Value* NetLogGetAvailableRangeResultCallback(
77b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    int64 start,
78b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    int result,
79b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    net::NetLog::LogLevel /* log_level */) {
80b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  base::DictionaryValue* dict = new base::DictionaryValue();
81b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar  if (result > 0) {
82b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    dict->SetInteger("length", result);
83b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    dict->SetString("start",  base::Int64ToString(start));
849c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  } else {
859c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    dict->SetInteger("net_error", result);
869c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  }
879c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  return dict;
8847ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar}
89b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
909c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar}  // namespace
919c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
92b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbarnamespace disk_cache {
939c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
94b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbarnet::NetLog::ParametersCallback CreateNetLogEntryCreationCallback(
959c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    const Entry* entry,
969c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    bool created) {
979c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  DCHECK(entry);
989c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  return base::Bind(&NetLogEntryCreationCallback, entry, created);
9947ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbar}
100b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
1019c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnet::NetLog::ParametersCallback CreateNetLogReadWriteDataCallback(
1029c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    int index,
103b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    int offset,
1049c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    int buf_len,
105b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    bool truncate) {
1069c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  return base::Bind(&NetLogReadWriteDataCallback,
1079c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar                    index, offset, buf_len, truncate);
1089c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar}
1099c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
11047ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbarnet::NetLog::ParametersCallback CreateNetLogReadWriteCompleteCallback(
111b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    int bytes_copied) {
1129c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  return base::Bind(&NetLogReadWriteCompleteCallback, bytes_copied);
1139c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar}
114b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar
1159c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbarnet::NetLog::ParametersCallback CreateNetLogSparseOperationCallback(
116b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    int64 offset,
1179c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    int buff_len) {
1189c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar  return base::Bind(&NetLogSparseOperationCallback, offset, buff_len);
1199c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar}
1209c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar
12147ac7d27c44bd64a7d0fc03d4babc196cf2b8230Daniel Dunbarnet::NetLog::ParametersCallback CreateNetLogSparseReadWriteCallback(
122b488c1dac8e53206f07103d794a62a3f5012c0f4Daniel Dunbar    const net::NetLog::Source& source,
1239c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar    int child_len) {
12431b1e5437e7435879fc044afb77ff27096008e72Daniel Dunbar  return base::Bind(&NetLogSparseReadWriteCallback, source, child_len);
1259c073ff462eb75ccbb1c4446e21c148f3fc618e1Daniel Dunbar}
126ff7488dc9a766f94daf54d81b03ab9160d0bfd88Daniel Dunbar
127fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbarnet::NetLog::ParametersCallback CreateNetLogGetAvailableRangeResultCallback(
128fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    int64 start,
129fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar    int result) {
130fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar  return base::Bind(&NetLogGetAvailableRangeResultCallback, start, result);
131fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar}
132fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar
133fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar}  // namespace disk_cache
134fbefe6bd6f62a3361813498dc672ab0d6c0d4fd1Daniel Dunbar