// Copyright (c) 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 "content/browser/histogram_message_filter.h" #include "base/command_line.h" #include "base/metrics/histogram.h" #include "base/metrics/statistics_recorder.h" #include "content/browser/histogram_controller.h" #include "content/browser/tcmalloc_internals_request_job.h" #include "content/common/child_process_messages.h" #include "content/public/common/content_switches.h" namespace content { HistogramMessageFilter::HistogramMessageFilter() : BrowserMessageFilter(ChildProcessMsgStart) {} bool HistogramMessageFilter::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(HistogramMessageFilter, message) IPC_MESSAGE_HANDLER(ChildProcessHostMsg_ChildHistogramData, OnChildHistogramData) IPC_MESSAGE_HANDLER(ChildProcessHostMsg_GetBrowserHistogram, OnGetBrowserHistogram) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; } HistogramMessageFilter::~HistogramMessageFilter() {} void HistogramMessageFilter::OnChildHistogramData( int sequence_number, const std::vector& pickled_histograms) { HistogramController::GetInstance()->OnHistogramDataCollected( sequence_number, pickled_histograms); } void HistogramMessageFilter::OnGetBrowserHistogram( const std::string& name, std::string* histogram_json) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); // Security: Only allow access to browser histograms when running in the // context of a test. bool using_stats_collection_controller = base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kStatsCollectionController); if (!using_stats_collection_controller) { LOG(ERROR) << "Attempt at reading browser histogram without specifying " << "--" << switches::kStatsCollectionController << " switch."; return; } base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram(name); if (!histogram) { *histogram_json = "{}"; } else { histogram->WriteJSON(histogram_json); } } } // namespace content