1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/ui/webui/options/chromeos/stats_options_handler.h" 6 7 #include "base/basictypes.h" 8 #include "base/callback.h" 9 #include "base/utf_string_conversions.h" 10 #include "base/values.h" 11 #include "chrome/browser/chromeos/cros_settings_names.h" 12 #include "chrome/browser/chromeos/login/user_manager.h" 13 #include "chrome/browser/chromeos/metrics_cros_settings_provider.h" 14 #include "chrome/browser/metrics/user_metrics.h" 15 16 namespace chromeos { 17 18 StatsOptionsHandler::StatsOptionsHandler() 19 : CrosOptionsPageUIHandler(new MetricsCrosSettingsProvider()) { 20 } 21 22 // OptionsPageUIHandler implementation. 23 void StatsOptionsHandler::GetLocalizedValues( 24 DictionaryValue* localized_strings) { 25 } 26 void StatsOptionsHandler::Initialize() { 27 SetupMetricsReportingCheckbox(false); 28 } 29 30 // WebUIMessageHandler implementation. 31 void StatsOptionsHandler::RegisterMessages() { 32 web_ui_->RegisterMessageCallback( 33 "metricsReportingCheckboxAction", 34 NewCallback(this, &StatsOptionsHandler::HandleMetricsReportingCheckbox)); 35 } 36 37 MetricsCrosSettingsProvider* StatsOptionsHandler::provider() const { 38 return static_cast<MetricsCrosSettingsProvider*>(settings_provider_.get()); 39 } 40 41 void StatsOptionsHandler::HandleMetricsReportingCheckbox( 42 const ListValue* args) { 43 #if defined(GOOGLE_CHROME_BUILD) 44 const std::string checked_str = UTF16ToUTF8(ExtractStringValue(args)); 45 const bool enabled = (checked_str == "true"); 46 UserMetricsRecordAction( 47 enabled ? 48 UserMetricsAction("Options_MetricsReportingCheckbox_Enable") : 49 UserMetricsAction("Options_MetricsReportingCheckbox_Disable")); 50 const bool is_enabled = MetricsCrosSettingsProvider::GetMetricsStatus(); 51 SetupMetricsReportingCheckbox(enabled == is_enabled); 52 #endif 53 } 54 55 void StatsOptionsHandler::SetupMetricsReportingCheckbox(bool user_changed) { 56 #if defined(GOOGLE_CHROME_BUILD) 57 FundamentalValue checked(MetricsCrosSettingsProvider::GetMetricsStatus()); 58 FundamentalValue disabled(!UserManager::Get()->current_user_is_owner()); 59 FundamentalValue user_has_changed(user_changed); 60 web_ui_->CallJavascriptFunction( 61 "options.AdvancedOptions.SetMetricsReportingCheckboxState", checked, 62 disabled, user_has_changed); 63 #endif 64 } 65 66 } // namespace chromeos 67