diff options
author | gunsch <gunsch@chromium.org> | 2014-08-29 15:28:44 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-08-29 22:38:22 +0000 |
commit | 79597a807f9225fa87a7b1810b11444cf2622fde (patch) | |
tree | e8a73d2dbe5ec1159bff3a60b1452c520a392b52 /chromecast | |
parent | 695d3e36e0735a5848562a3a4bb50a9c081ab2bd (diff) | |
download | chromium_src-79597a807f9225fa87a7b1810b11444cf2622fde.zip chromium_src-79597a807f9225fa87a7b1810b11444cf2622fde.tar.gz chromium_src-79597a807f9225fa87a7b1810b11444cf2622fde.tar.bz2 |
Chromecast fix: MetricsStateManager segfaults if callbacks are empty.
R=lcwu@chromium.org,asvitkine@chromium.org
BUG=None
Review URL: https://codereview.chromium.org/522853002
Cr-Commit-Position: refs/heads/master@{#292691}
Diffstat (limited to 'chromecast')
-rw-r--r-- | chromecast/chromecast.gyp | 16 | ||||
-rw-r--r-- | chromecast/metrics/cast_metrics_service_client.cc | 18 | ||||
-rw-r--r-- | chromecast/metrics/cast_metrics_service_client_unittest.cc | 42 |
3 files changed, 73 insertions, 3 deletions
diff --git a/chromecast/chromecast.gyp b/chromecast/chromecast.gyp index 5b7ffe4..6824379 100644 --- a/chromecast/chromecast.gyp +++ b/chromecast/chromecast.gyp @@ -45,6 +45,7 @@ 'target_name': 'cast_metrics', 'type': '<(component)', 'dependencies': [ + 'cast_common', '../components/components.gyp:component_metrics_proto', '../components/components.gyp:metrics', '../components/components.gyp:metrics_net', @@ -69,6 +70,21 @@ ], }, { + 'target_name': 'cast_metrics_unittests', + 'type': '<(gtest_target_type)', + 'dependencies': [ + 'cast_metrics', + '../base/base.gyp:base_prefs_test_support', + '../base/base.gyp:run_all_unittests', + '../base/base.gyp:test_support_base', + '../components/components.gyp:component_metrics_proto', + '../testing/gtest.gyp:gtest', + ], + 'sources': [ + 'metrics/cast_metrics_service_client_unittest.cc', + ], + }, # end of target 'cast_metrics_unittests' + { 'target_name': 'cast_service', 'type': '<(component)', 'dependencies': [ diff --git a/chromecast/metrics/cast_metrics_service_client.cc b/chromecast/metrics/cast_metrics_service_client.cc index 80e80ea..c90becf 100644 --- a/chromecast/metrics/cast_metrics_service_client.cc +++ b/chromecast/metrics/cast_metrics_service_client.cc @@ -7,6 +7,7 @@ #include "base/i18n/rtl.h" #include "chromecast/common/chromecast_config.h" #include "chromecast/metrics/platform_metrics_providers.h" +#include "components/metrics/client_info.h" #include "components/metrics/metrics_provider.h" #include "components/metrics/metrics_service.h" #include "components/metrics/metrics_state_manager.h" @@ -15,6 +16,17 @@ namespace chromecast { namespace metrics { +namespace { + +void StoreClientInfo(const ::metrics::ClientInfo& client_info) { +} + +scoped_ptr<::metrics::ClientInfo> LoadClientInfo() { + return scoped_ptr<::metrics::ClientInfo>(); +} + +} // namespace + // static CastMetricsServiceClient* CastMetricsServiceClient::Create( PrefService* pref_service, @@ -92,12 +104,12 @@ CastMetricsServiceClient::CastMetricsServiceClient( pref_service, base::Bind(&CastMetricsServiceClient::IsReportingEnabled, base::Unretained(this)), - ::metrics::MetricsStateManager::StoreClientInfoCallback(), - ::metrics::MetricsStateManager::LoadClientInfoCallback())), + base::Bind(&StoreClientInfo), + base::Bind(&LoadClientInfo))), metrics_service_(new ::metrics::MetricsService( metrics_state_manager_.get(), this, - ChromecastConfig::GetInstance()->pref_service())), + pref_service)), request_context_(request_context) { // Always create a client id as it may also be used by crash reporting, // (indirectly) included in feedback, and can be queried during setup. diff --git a/chromecast/metrics/cast_metrics_service_client_unittest.cc b/chromecast/metrics/cast_metrics_service_client_unittest.cc new file mode 100644 index 0000000..55e59b0 --- /dev/null +++ b/chromecast/metrics/cast_metrics_service_client_unittest.cc @@ -0,0 +1,42 @@ +// Copyright 2014 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 "chromecast/metrics/cast_metrics_service_client.h" + +#include "base/macros.h" +#include "base/memory/scoped_ptr.h" +#include "base/message_loop/message_loop.h" +#include "base/prefs/testing_pref_service.h" +#include "components/metrics/metrics_service.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace chromecast { + +class CastMetricsTest : public testing::Test { + public: + CastMetricsTest() {} + virtual ~CastMetricsTest() {} + + protected: + virtual void SetUp() OVERRIDE { + message_loop_.reset(new base::MessageLoop()); + prefs_.reset(new TestingPrefServiceSimple()); + ::metrics::MetricsService::RegisterPrefs(prefs_->registry()); + } + + TestingPrefServiceSimple* prefs() { return prefs_.get(); } + + private: + scoped_ptr<base::MessageLoop> message_loop_; + scoped_ptr<TestingPrefServiceSimple> prefs_; + + DISALLOW_COPY_AND_ASSIGN(CastMetricsTest); +}; + +TEST_F(CastMetricsTest, CreateMetricsServiceClient) { + // Create and expect this to not crash. + metrics::CastMetricsServiceClient::Create(prefs(), NULL); +} + +} // namespace chromecast |