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

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: merge + closure 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 #include "chrome/browser/ui/webui/settings/metrics_reporting_handler.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/values.h"
10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
12 #include "chrome/browser/metrics/metrics_reporting_state.h"
13 #include "components/metrics/metrics_pref_names.h"
14 #include "components/prefs/pref_service.h"
15 #include "content/public/browser/web_ui.h"
16 #include "policy/policy_constants.h"
17
18 namespace settings {
19
20 MetricsReportingHandler::MetricsReportingHandler() {}
21 MetricsReportingHandler::~MetricsReportingHandler() {}
22
23 void MetricsReportingHandler::RegisterMessages() {
24 web_ui()->RegisterMessageCallback("getMetricsReporting",
25 base::Bind(&MetricsReportingHandler::HandleGetMetricsReporting,
26 base::Unretained(this)));
27 web_ui()->RegisterMessageCallback("setMetricsReportingEnabled",
28 base::Bind(&MetricsReportingHandler::HandleSetMetricsReportingEnabled,
29 base::Unretained(this)));
30 }
31
32 void MetricsReportingHandler::OnJavascriptAllowed() {
33 pref_member_.reset(new BooleanPrefMember);
34 pref_member_->Init(metrics::prefs::kMetricsReportingEnabled,
35 g_browser_process->local_state(),
36 base::Bind(&MetricsReportingHandler::OnPrefChanged,
37 base::Unretained(this)));
38
39 policy_registrar_.reset(new policy::PolicyChangeRegistrar(
40 g_browser_process->policy_service(),
41 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())));
42 policy_registrar_->Observe(policy::key::kMetricsReportingEnabled,
43 base::Bind(&MetricsReportingHandler::OnPolicyChanged,
44 base::Unretained(this)));
45 }
46
47 void MetricsReportingHandler::OnJavascriptDisallowed() {
48 pref_member_.reset();
49 policy_registrar_.reset();
50 }
51
52 void MetricsReportingHandler::HandleGetMetricsReporting(
53 const base::ListValue* args) {
54 AllowJavascript();
55 const base::Value* callback_id;
56 CHECK(args->Get(0, &callback_id));
57 ResolveJavascriptCallback(*callback_id, *CreateMetricsReportingDict());
58 }
59
60 std::unique_ptr<base::DictionaryValue>
61 MetricsReportingHandler::CreateMetricsReportingDict() {
62 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
63 dict->SetBoolean("enabled",
64 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled());
65 dict->SetBoolean("managed", IsMetricsReportingPolicyManaged());
66 return dict;
67 }
68
69 void MetricsReportingHandler::HandleSetMetricsReportingEnabled(
70 const base::ListValue* args) {
71 if (IsMetricsReportingPolicyManaged()) {
72 NOTREACHED();
73 // NOTE: ChangeMetricsReportingState() already checks whether metrics
74 // reporting is managed by policy. Also, the UI really shouldn't be able to
75 // send this message when managed. However, in this specific case, there's a
76 // sane, graceful fallback so we might as well do that.
77 SendMetricsReportingChange();
78 return;
79 }
80
81 bool enabled;
82 CHECK(args->GetBoolean(0, &enabled));
83 ChangeMetricsReportingState(enabled);
84 }
85
86 void MetricsReportingHandler::OnPolicyChanged(const base::Value* previous,
87 const base::Value* current) {
88 SendMetricsReportingChange();
89 }
90
91 void MetricsReportingHandler::OnPrefChanged(const std::string& pref_name) {
92 DCHECK_EQ(metrics::prefs::kMetricsReportingEnabled, pref_name);
93 SendMetricsReportingChange();
94 }
95
96 void MetricsReportingHandler::SendMetricsReportingChange() {
97 CallJavascriptFunction(
98 "cr.webUIListenerCallback",
99 base::StringValue("metrics-reporting-change"),
100 *CreateMetricsReportingDict());
101 }
102
103 } // namespace settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698