Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(291)

Side by Side Diff: chrome/browser/ui/webui/settings/metrics_reporting_handler.cc

Issue 2233443002: MD Settings: implement metrics reporting checkbox on desktop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@desktop-uma
Patch Set: remove 2 using Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 #if defined(GOOGLE_CHROME_BUILD) && !defined(OS_CHROMEOS)
6
7 #include "chrome/browser/ui/webui/settings/metrics_reporting_handler.h"
8
9 #include "base/bind.h"
10 #include "base/bind_helpers.h"
11 #include "base/values.h"
12 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
14 #include "chrome/browser/metrics/metrics_reporting_state.h"
15 #include "components/metrics/metrics_pref_names.h"
16 #include "components/prefs/pref_service.h"
17 #include "content/public/browser/web_ui.h"
18 #include "policy/policy_constants.h"
19
20 namespace settings {
21
22 MetricsReportingHandler::MetricsReportingHandler() {}
23 MetricsReportingHandler::~MetricsReportingHandler() {}
24
25 void MetricsReportingHandler::RegisterMessages() {
26 web_ui()->RegisterMessageCallback("getMetricsReporting",
27 base::Bind(&MetricsReportingHandler::HandleGetMetricsReporting,
28 base::Unretained(this)));
29 web_ui()->RegisterMessageCallback("setMetricsReportingEnabled",
30 base::Bind(&MetricsReportingHandler::HandleSetMetricsReportingEnabled,
31 base::Unretained(this)));
32 }
33
34 void MetricsReportingHandler::OnJavascriptAllowed() {
35 pref_member_.reset(new BooleanPrefMember);
36 pref_member_->Init(metrics::prefs::kMetricsReportingEnabled,
37 g_browser_process->local_state(),
38 base::Bind(&MetricsReportingHandler::OnPrefChanged,
39 base::Unretained(this)));
40
41 policy_registrar_.reset(new policy::PolicyChangeRegistrar(
42 g_browser_process->policy_service(),
43 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())));
44 policy_registrar_->Observe(policy::key::kMetricsReportingEnabled,
45 base::Bind(&MetricsReportingHandler::OnPolicyChanged,
46 base::Unretained(this)));
47 }
48
49 void MetricsReportingHandler::OnJavascriptDisallowed() {
50 pref_member_.reset();
51 policy_registrar_.reset();
52 }
53
54 void MetricsReportingHandler::HandleGetMetricsReporting(
55 const base::ListValue* args) {
56 AllowJavascript();
57 const base::Value* callback_id;
58 CHECK(args->Get(0, &callback_id));
59 ResolveJavascriptCallback(*callback_id, *CreateMetricsReportingDict());
60 }
61
62 std::unique_ptr<base::DictionaryValue>
63 MetricsReportingHandler::CreateMetricsReportingDict() {
64 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
65 dict->SetBoolean("enabled",
66 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled());
67 dict->SetBoolean("managed", IsMetricsReportingPolicyManaged());
68 return dict;
69 }
70
71 void MetricsReportingHandler::HandleSetMetricsReportingEnabled(
72 const base::ListValue* args) {
73 if (IsMetricsReportingPolicyManaged()) {
74 NOTREACHED();
75 // NOTE: ChangeMetricsReportingState() already checks whether metrics
76 // reporting is managed by policy. Also, the UI really shouldn't be able to
77 // send this message when managed. However, in this specific case, there's a
78 // sane, graceful fallback so we might as well do that.
79 SendMetricsReportingChange();
80 return;
81 }
82
83 bool enabled;
84 CHECK(args->GetBoolean(0, &enabled));
85 ChangeMetricsReportingState(enabled);
86 }
87
88 void MetricsReportingHandler::OnPolicyChanged(const base::Value* previous,
89 const base::Value* current) {
90 SendMetricsReportingChange();
91 }
92
93 void MetricsReportingHandler::OnPrefChanged(const std::string& pref_name) {
94 DCHECK_EQ(metrics::prefs::kMetricsReportingEnabled, pref_name);
95 SendMetricsReportingChange();
96 }
97
98 void MetricsReportingHandler::SendMetricsReportingChange() {
99 CallJavascriptFunction(
100 "cr.webUIListenerCallback",
101 base::StringValue("metrics-reporting-change"),
102 *CreateMetricsReportingDict());
103 }
104
105 } // namespace settings
106
107 #endif // defined(GOOGLE_CHROME_BUILD) && !defined(OS_CHROMEOS)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698