summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-08 22:49:40 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-08 22:49:40 +0000
commit5976c2db7a0101e5d9796cec4fbe5c23c4013e68 (patch)
tree6063d0eab1ad8ca549c694eac3984297423a9ee8 /chrome/browser/chromeos
parent01638de5a849f18e3796564f33af771b037dbb32 (diff)
downloadchromium_src-5976c2db7a0101e5d9796cec4fbe5c23c4013e68.zip
chromium_src-5976c2db7a0101e5d9796cec4fbe5c23c4013e68.tar.gz
chromium_src-5976c2db7a0101e5d9796cec4fbe5c23c4013e68.tar.bz2
fix for memory leak and illegal access. (found in valgrind test)
* name, values for callback seems to be on stack. i changed const char* to string so that it can copy, and also expect_eq can print string when failed. BUG=None TEST=Run unit_tests on valgrind. Review URL: http://codereview.chromium.org/470006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34099 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos')
-rw-r--r--chrome/browser/chromeos/external_metrics.h2
-rw-r--r--chrome/browser/chromeos/external_metrics_unittest.cc18
2 files changed, 12 insertions, 8 deletions
diff --git a/chrome/browser/chromeos/external_metrics.h b/chrome/browser/chromeos/external_metrics.h
index 2721939..55774cf 100644
--- a/chrome/browser/chromeos/external_metrics.h
+++ b/chrome/browser/chromeos/external_metrics.h
@@ -7,6 +7,7 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
+#include "base/scoped_ptr.h"
#include "base/task.h"
#include "testing/gtest/include/gtest/gtest_prod.h" // For FRIEND_TEST
@@ -23,6 +24,7 @@ namespace chromeos {
class ExternalMetrics : public base::RefCountedThreadSafe<ExternalMetrics> {
FRIEND_TEST(ExternalMetricsTest, ParseExternalMetricsFile);
friend class base::RefCountedThreadSafe<ExternalMetrics>;
+ friend class scoped_ptr<ExternalMetrics>;
public:
ExternalMetrics() {}
diff --git a/chrome/browser/chromeos/external_metrics_unittest.cc b/chrome/browser/chromeos/external_metrics_unittest.cc
index b484736..3e72188 100644
--- a/chrome/browser/chromeos/external_metrics_unittest.cc
+++ b/chrome/browser/chromeos/external_metrics_unittest.cc
@@ -6,6 +6,7 @@
#include <sys/file.h>
#include "base/basictypes.h"
+#include "base/scoped_ptr.h"
#include "chrome/browser/chromeos/external_metrics.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -28,19 +29,19 @@ static void SendMessage(const char* path, const char* name, const char* value) {
close(fd);
}
-const char* received_name = NULL;
-const char* received_value = NULL;
-int received_count = 0;
+static scoped_ptr<std::string> received_name;
+static scoped_ptr<std::string> received_value;
+static int received_count = 0;
static void ReceiveMessage(const char* name, const char* value) {
- received_name = name;
- received_value = value;
+ received_name.reset(new std::string(name));
+ received_value.reset(new std::string(value));
received_count++;
}
static void CheckMessage(const char* name, const char* value, int count) {
- EXPECT_EQ(0, strcmp(received_name, name));
- EXPECT_EQ(0, strcmp(received_value, value));
+ EXPECT_EQ(*received_name.get(), name);
+ EXPECT_EQ(*received_value.get(), value);
EXPECT_EQ(received_count, count);
}
@@ -57,7 +58,8 @@ TEST(ExternalMetricsTest, ParseExternalMetricsFile) {
int32 i;
const char* path = "/tmp/.chromeos-metrics";
- chromeos::ExternalMetrics* external_metrics = new chromeos::ExternalMetrics();
+ scoped_ptr<chromeos::ExternalMetrics>
+ external_metrics(new chromeos::ExternalMetrics());
external_metrics->SetRecorder(&ReceiveMessage);
EXPECT_TRUE(unlink(path) == 0 || errno == ENOENT);