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