| Index: net/base/mime_sniffer.cc
|
| ===================================================================
|
| --- net/base/mime_sniffer.cc (revision 80220)
|
| +++ net/base/mime_sniffer.cc (working copy)
|
| @@ -209,9 +209,9 @@
|
| MAGIC_HTML_TAG("p") // Mozilla
|
| };
|
|
|
| -static scoped_refptr<base::Histogram> UMASnifferHistogramGet(const char* name,
|
| - int array_size) {
|
| - scoped_refptr<base::Histogram> counter =
|
| +static base::Histogram* UMASnifferHistogramGet(const char* name,
|
| + int array_size) {
|
| + base::Histogram* counter =
|
| base::LinearHistogram::FactoryGet(name, 1, array_size - 1, array_size,
|
| base::Histogram::kUmaTargetedHistogramFlag);
|
| return counter;
|
| @@ -308,13 +308,14 @@
|
| if (!IsAsciiWhitespace(*pos))
|
| break;
|
| }
|
| - scoped_refptr<base::Histogram> counter =
|
| - UMASnifferHistogramGet("mime_sniffer.kSniffableTags2",
|
| - arraysize(kSniffableTags));
|
| + static base::Histogram* counter(NULL);
|
| + if (!counter)
|
| + counter = UMASnifferHistogramGet("mime_sniffer.kSniffableTags2",
|
| + arraysize(kSniffableTags));
|
| // |pos| now points to first non-whitespace character (or at end).
|
| return CheckForMagicNumbers(pos, end - pos,
|
| kSniffableTags, arraysize(kSniffableTags),
|
| - counter.get(), result);
|
| + counter, result);
|
| }
|
|
|
| // Returns true and sets result if the content matches any of kMagicNumbers.
|
| @@ -326,12 +327,13 @@
|
| *have_enough_content &= TruncateSize(kBytesRequiredForMagic, &size);
|
|
|
| // Check our big table of Magic Numbers
|
| - scoped_refptr<base::Histogram> counter =
|
| - UMASnifferHistogramGet("mime_sniffer.kMagicNumbers2",
|
| - arraysize(kMagicNumbers));
|
| + static base::Histogram* counter(NULL);
|
| + if (!counter)
|
| + counter = UMASnifferHistogramGet("mime_sniffer.kMagicNumbers2",
|
| + arraysize(kMagicNumbers));
|
| return CheckForMagicNumbers(content, size,
|
| kMagicNumbers, arraysize(kMagicNumbers),
|
| - counter.get(), result);
|
| + counter, result);
|
| }
|
|
|
| // Byte order marks
|
| @@ -367,9 +369,10 @@
|
| // We want to skip XML processing instructions (of the form "<?xml ...")
|
| // and stop at the first "plain" tag, then make a decision on the mime-type
|
| // based on the name (or possibly attributes) of that tag.
|
| - scoped_refptr<base::Histogram> counter =
|
| - UMASnifferHistogramGet("mime_sniffer.kMagicXML2",
|
| - arraysize(kMagicXML));
|
| + static base::Histogram* counter(NULL);
|
| + if (!counter)
|
| + counter = UMASnifferHistogramGet("mime_sniffer.kMagicXML2",
|
| + arraysize(kMagicXML));
|
| const int kMaxTagIterations = 5;
|
| for (int i = 0; i < kMaxTagIterations && pos < end; ++i) {
|
| pos = reinterpret_cast<const char*>(memchr(pos, '<', end - pos));
|
| @@ -389,7 +392,7 @@
|
|
|
| if (CheckForMagicNumbers(pos, end - pos,
|
| kMagicXML, arraysize(kMagicXML),
|
| - counter.get(), result))
|
| + counter, result))
|
| return true;
|
|
|
| // TODO(evanm): handle RSS 1.0, which is an RDF format and more difficult
|
| @@ -451,13 +454,14 @@
|
| const bool is_truncated = TruncateSize(kMaxBytesToSniff, &size);
|
|
|
| // First, we look for a BOM.
|
| - scoped_refptr<base::Histogram> counter =
|
| - UMASnifferHistogramGet("mime_sniffer.kByteOrderMark2",
|
| - arraysize(kByteOrderMark));
|
| + static base::Histogram* counter(NULL);
|
| + if (!counter)
|
| + counter = UMASnifferHistogramGet("mime_sniffer.kByteOrderMark2",
|
| + arraysize(kByteOrderMark));
|
| std::string unused;
|
| if (CheckForMagicNumbers(content, size,
|
| kByteOrderMark, arraysize(kByteOrderMark),
|
| - counter.get(), &unused)) {
|
| + counter, &unused)) {
|
| // If there is BOM, we think the buffer is not binary.
|
| result->assign("text/plain");
|
| return false;
|
| @@ -493,9 +497,10 @@
|
| // Firefox rejects a mime type if it is exactly */*
|
| "*/*",
|
| };
|
| - scoped_refptr<base::Histogram> counter =
|
| - UMASnifferHistogramGet("mime_sniffer.kUnknownMimeTypes2",
|
| - arraysize(kUnknownMimeTypes) + 1);
|
| + static base::Histogram* counter(NULL);
|
| + if (!counter)
|
| + counter = UMASnifferHistogramGet("mime_sniffer.kUnknownMimeTypes2",
|
| + arraysize(kUnknownMimeTypes) + 1);
|
| for (size_t i = 0; i < arraysize(kUnknownMimeTypes); ++i) {
|
| if (mime_type == kUnknownMimeTypes[i]) {
|
| counter->Add(i);
|
| @@ -519,8 +524,9 @@
|
| const std::string& type_hint,
|
| bool* have_enough_content,
|
| std::string* result) {
|
| - scoped_refptr<base::Histogram> counter =
|
| - UMASnifferHistogramGet("mime_sniffer.kSniffCRX", 3);
|
| + static base::Histogram* counter(NULL);
|
| + if (!counter)
|
| + counter = UMASnifferHistogramGet("mime_sniffer.kSniffCRX", 3);
|
|
|
| // Technically, the crx magic number is just Cr24, but the bytes after that
|
| // are a version number which changes infrequently. Including it in the
|
| @@ -557,8 +563,10 @@
|
| }
|
|
|
| bool ShouldSniffMimeType(const GURL& url, const std::string& mime_type) {
|
| - scoped_refptr<base::Histogram> should_sniff_counter =
|
| - UMASnifferHistogramGet("mime_sniffer.ShouldSniffMimeType2", 3);
|
| + static base::Histogram* should_sniff_counter(NULL);
|
| + if (!should_sniff_counter)
|
| + should_sniff_counter =
|
| + UMASnifferHistogramGet("mime_sniffer.ShouldSniffMimeType2", 3);
|
| // We are willing to sniff the mime type for HTTP, HTTPS, and FTP
|
| bool sniffable_scheme = url.is_empty() ||
|
| url.SchemeIs("http") ||
|
| @@ -582,9 +590,10 @@
|
| "text/xml",
|
| "application/xml",
|
| };
|
| - scoped_refptr<base::Histogram> counter =
|
| - UMASnifferHistogramGet("mime_sniffer.kSniffableTypes2",
|
| - arraysize(kSniffableTypes) + 1);
|
| + static base::Histogram* counter(NULL);
|
| + if (!counter)
|
| + counter = UMASnifferHistogramGet("mime_sniffer.kSniffableTypes2",
|
| + arraysize(kSniffableTypes) + 1);
|
| for (size_t i = 0; i < arraysize(kSniffableTypes); ++i) {
|
| if (mime_type == kSniffableTypes[i]) {
|
| counter->Add(i);
|
|
|