| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // This file defines specific implementation of BrowserDistribution class for | 5 // This file defines specific implementation of BrowserDistribution class for |
| 6 // Google Chrome. | 6 // Google Chrome. |
| 7 | 7 |
| 8 #include "chrome/installer/util/google_chrome_distribution.h" | 8 #include "chrome/installer/util/google_chrome_distribution.h" |
| 9 | 9 |
| 10 #include <windows.h> | 10 #include <windows.h> |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 | 293 |
| 294 bool GoogleChromeDistribution::BuildUninstallMetricsString( | 294 bool GoogleChromeDistribution::BuildUninstallMetricsString( |
| 295 const DictionaryValue* uninstall_metrics_dict, string16* metrics) { | 295 const DictionaryValue* uninstall_metrics_dict, string16* metrics) { |
| 296 DCHECK(NULL != metrics); | 296 DCHECK(NULL != metrics); |
| 297 bool has_values = false; | 297 bool has_values = false; |
| 298 | 298 |
| 299 for (DictionaryValue::Iterator iter(*uninstall_metrics_dict); !iter.IsAtEnd(); | 299 for (DictionaryValue::Iterator iter(*uninstall_metrics_dict); !iter.IsAtEnd(); |
| 300 iter.Advance()) { | 300 iter.Advance()) { |
| 301 has_values = true; | 301 has_values = true; |
| 302 metrics->append(L"&"); | 302 metrics->append(L"&"); |
| 303 metrics->append(UTF8ToWide(iter.key())); | 303 metrics->append(base::UTF8ToWide(iter.key())); |
| 304 metrics->append(L"="); | 304 metrics->append(L"="); |
| 305 | 305 |
| 306 std::string value; | 306 std::string value; |
| 307 iter.value().GetAsString(&value); | 307 iter.value().GetAsString(&value); |
| 308 metrics->append(UTF8ToWide(value)); | 308 metrics->append(base::UTF8ToWide(value)); |
| 309 } | 309 } |
| 310 | 310 |
| 311 return has_values; | 311 return has_values; |
| 312 } | 312 } |
| 313 | 313 |
| 314 bool GoogleChromeDistribution::ExtractUninstallMetricsFromFile( | 314 bool GoogleChromeDistribution::ExtractUninstallMetricsFromFile( |
| 315 const base::FilePath& file_path, | 315 const base::FilePath& file_path, |
| 316 string16* uninstall_metrics_string) { | 316 string16* uninstall_metrics_string) { |
| 317 JSONFileValueSerializer json_serializer(file_path); | 317 JSONFileValueSerializer json_serializer(file_path); |
| 318 | 318 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 version_number.major, version_number.minor, version_number.build); | 375 version_number.major, version_number.minor, version_number.build); |
| 376 | 376 |
| 377 base::FilePath iexplore; | 377 base::FilePath iexplore; |
| 378 if (!PathService::Get(base::DIR_PROGRAM_FILES, &iexplore)) | 378 if (!PathService::Get(base::DIR_PROGRAM_FILES, &iexplore)) |
| 379 return; | 379 return; |
| 380 | 380 |
| 381 iexplore = iexplore.AppendASCII("Internet Explorer"); | 381 iexplore = iexplore.AppendASCII("Internet Explorer"); |
| 382 iexplore = iexplore.AppendASCII("iexplore.exe"); | 382 iexplore = iexplore.AppendASCII("iexplore.exe"); |
| 383 | 383 |
| 384 string16 command = iexplore.value() + L" " + GetUninstallSurveyUrl() + | 384 string16 command = iexplore.value() + L" " + GetUninstallSurveyUrl() + |
| 385 L"&" + kVersionParam + L"=" + UTF8ToWide(version.GetString()) + L"&" + | 385 L"&" + kVersionParam + L"=" + |
| 386 base::UTF8ToWide(version.GetString()) + L"&" + |
| 386 kOSParam + L"=" + os_version; | 387 kOSParam + L"=" + os_version; |
| 387 | 388 |
| 388 string16 uninstall_metrics; | 389 string16 uninstall_metrics; |
| 389 if (ExtractUninstallMetricsFromFile(local_data_path, &uninstall_metrics)) { | 390 if (ExtractUninstallMetricsFromFile(local_data_path, &uninstall_metrics)) { |
| 390 // The user has opted into anonymous usage data collection, so append | 391 // The user has opted into anonymous usage data collection, so append |
| 391 // metrics and distribution data. | 392 // metrics and distribution data. |
| 392 command += uninstall_metrics; | 393 command += uninstall_metrics; |
| 393 if (!distribution_data.empty()) { | 394 if (!distribution_data.empty()) { |
| 394 command += L"&"; | 395 command += L"&"; |
| 395 command += distribution_data; | 396 command += distribution_data; |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 { { IDS_TRY_TOAST_HEADING3, kMakeDefault }, | 654 { { IDS_TRY_TOAST_HEADING3, kMakeDefault }, |
| 654 { 0, 0 }, | 655 { 0, 0 }, |
| 655 { 0, 0 }, | 656 { 0, 0 }, |
| 656 { 0, 0 } | 657 { 0, 0 } |
| 657 } | 658 } |
| 658 } | 659 } |
| 659 }; | 660 }; |
| 660 | 661 |
| 661 string16 locale; | 662 string16 locale; |
| 662 GoogleUpdateSettings::GetLanguage(&locale); | 663 GoogleUpdateSettings::GetLanguage(&locale); |
| 663 if (locale.empty() || (locale == ASCIIToWide("en"))) | 664 if (locale.empty() || (locale == base::ASCIIToWide("en"))) |
| 664 locale = ASCIIToWide("en-US"); | 665 locale = base::ASCIIToWide("en-US"); |
| 665 | 666 |
| 666 string16 brand; | 667 string16 brand; |
| 667 if (!GoogleUpdateSettings::GetBrand(&brand)) | 668 if (!GoogleUpdateSettings::GetBrand(&brand)) { |
| 668 brand = ASCIIToWide(""); // Could still be viable for catch-all rules. | 669 // Could still be viable for catch-all rules. |
| 670 brand = base::ASCIIToWide(""); |
| 671 } |
| 669 | 672 |
| 670 for (int i = 0; i < arraysize(kExperiments); ++i) { | 673 for (int i = 0; i < arraysize(kExperiments); ++i) { |
| 671 if (kExperiments[i].locale != locale && | 674 if (kExperiments[i].locale != locale && |
| 672 kExperiments[i].locale != ASCIIToWide("*")) | 675 kExperiments[i].locale != base::ASCIIToWide("*")) |
| 673 continue; | 676 continue; |
| 674 | 677 |
| 675 std::vector<string16> brand_codes; | 678 std::vector<string16> brand_codes; |
| 676 base::SplitString(kExperiments[i].brands, L',', &brand_codes); | 679 base::SplitString(kExperiments[i].brands, L',', &brand_codes); |
| 677 if (brand_codes.empty()) | 680 if (brand_codes.empty()) |
| 678 return false; | 681 return false; |
| 679 for (std::vector<string16>::iterator it = brand_codes.begin(); | 682 for (std::vector<string16>::iterator it = brand_codes.begin(); |
| 680 it != brand_codes.end(); ++it) { | 683 it != brand_codes.end(); ++it) { |
| 681 if (*it != brand && *it != L"*") | 684 if (*it != brand && *it != L"*") |
| 682 continue; | 685 continue; |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 801 VLOG(1) << "User drafted for toast experiment " << flavor; | 804 VLOG(1) << "User drafted for toast experiment " << flavor; |
| 802 SetClient(base_group + kToastExpBaseGroup, false); | 805 SetClient(base_group + kToastExpBaseGroup, false); |
| 803 // User level: The experiment needs to be performed in a different process | 806 // User level: The experiment needs to be performed in a different process |
| 804 // because google_update expects the upgrade process to be quick and nimble. | 807 // because google_update expects the upgrade process to be quick and nimble. |
| 805 // System level: We have already been relaunched, so we don't need to be | 808 // System level: We have already been relaunched, so we don't need to be |
| 806 // quick, but we relaunch to follow the exact same codepath. | 809 // quick, but we relaunch to follow the exact same codepath. |
| 807 CommandLine cmd_line(setup_path); | 810 CommandLine cmd_line(setup_path); |
| 808 cmd_line.AppendSwitchASCII(installer::switches::kInactiveUserToast, | 811 cmd_line.AppendSwitchASCII(installer::switches::kInactiveUserToast, |
| 809 base::IntToString(flavor)); | 812 base::IntToString(flavor)); |
| 810 cmd_line.AppendSwitchASCII(installer::switches::kExperimentGroup, | 813 cmd_line.AppendSwitchASCII(installer::switches::kExperimentGroup, |
| 811 WideToASCII(base_group)); | 814 base::WideToASCII(base_group)); |
| 812 LaunchSetup(&cmd_line, product, system_level); | 815 LaunchSetup(&cmd_line, product, system_level); |
| 813 } | 816 } |
| 814 | 817 |
| 815 // User qualifies for the experiment. To test, use --try-chrome-again=|flavor| | 818 // User qualifies for the experiment. To test, use --try-chrome-again=|flavor| |
| 816 // as a parameter to chrome.exe. | 819 // as a parameter to chrome.exe. |
| 817 void GoogleChromeDistribution::InactiveUserToastExperiment(int flavor, | 820 void GoogleChromeDistribution::InactiveUserToastExperiment(int flavor, |
| 818 const string16& experiment_group, | 821 const string16& experiment_group, |
| 819 const installer::Product& installation, | 822 const installer::Product& installation, |
| 820 const base::FilePath& application_path) { | 823 const base::FilePath& application_path) { |
| 821 // Add the 'welcome back' url for chrome to show. | 824 // Add the 'welcome back' url for chrome to show. |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 863 installer::switches::kSystemLevelToast); | 866 installer::switches::kSystemLevelToast); |
| 864 | 867 |
| 865 CommandLine cmd(InstallUtil::GetChromeUninstallCmd(system_level_toast, | 868 CommandLine cmd(InstallUtil::GetChromeUninstallCmd(system_level_toast, |
| 866 GetType())); | 869 GetType())); |
| 867 base::LaunchProcess(cmd, base::LaunchOptions(), NULL); | 870 base::LaunchProcess(cmd, base::LaunchOptions(), NULL); |
| 868 } | 871 } |
| 869 | 872 |
| 870 bool GoogleChromeDistribution::ShouldSetExperimentLabels() { | 873 bool GoogleChromeDistribution::ShouldSetExperimentLabels() { |
| 871 return true; | 874 return true; |
| 872 } | 875 } |
| OLD | NEW |