1bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/installer/util/google_update_settings.h"
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/file_util.h"
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/path_service.h"
9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/string_util.h"
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/chrome_paths.h"
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace google_update {
13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenstd::string posix_guid;
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// File name used in the user data dir to indicate consent.
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenstatic const char kConsentToSendStats[] = "Consent To Send Stats";
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// static
20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenbool GoogleUpdateSettings::GetCollectStatsConsent() {
21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  FilePath consent_file;
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  PathService::Get(chrome::DIR_USER_DATA, &consent_file);
23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  consent_file = consent_file.Append(kConsentToSendStats);
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  std::string tmp_guid;
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool consented = file_util::ReadFileToString(consent_file, &tmp_guid);
26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  if (consented)
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    google_update::posix_guid.assign(tmp_guid);
28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  return consented;
29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// static
32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenbool GoogleUpdateSettings::SetCollectStatsConsent(bool consented) {
33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  FilePath consent_dir;
34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  PathService::Get(chrome::DIR_USER_DATA, &consent_dir);
35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  if (!file_util::DirectoryExists(consent_dir))
36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return false;
37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  FilePath consent_file = consent_dir.AppendASCII(kConsentToSendStats);
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  if (consented) {
40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    if ((!file_util::PathExists(consent_file)) ||
41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen        (file_util::PathExists(consent_file) &&
42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         !google_update::posix_guid.empty())) {
43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      const char* c_str = google_update::posix_guid.c_str();
44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      int size = google_update::posix_guid.size();
45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      return file_util::WriteFile(consent_file, c_str, size) == size;
46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    }
47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  } else {
48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    google_update::posix_guid.clear();
49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return file_util::Delete(consent_file, false);
50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  }
51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  return true;
52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenbool GoogleUpdateSettings::SetMetricsId(const std::wstring& client_id) {
55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Make sure that user has consented to send crashes.
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  FilePath consent_dir;
57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  PathService::Get(chrome::DIR_USER_DATA, &consent_dir);
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  if (!file_util::DirectoryExists(consent_dir) ||
59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      !GoogleUpdateSettings::GetCollectStatsConsent())
60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    return false;
61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Since user has consented, write the metrics id to the file.
63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  google_update::posix_guid = WideToASCII(client_id);
64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  return GoogleUpdateSettings::SetCollectStatsConsent(true);
65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// GetLastRunTime and SetLastRunTime are not implemented for posix. Their
68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// current return values signal failure which the caller is designed to
69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// handle.
70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// static
72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenint GoogleUpdateSettings::GetLastRunTime() {
73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  return -1;
74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// static
77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenbool GoogleUpdateSettings::SetLastRunTime() {
78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  return false;
79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
80