- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / options / reset_profile_settings_handler.cc
1 // Copyright 2013 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/reset_profile_settings_handler.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9 #include "base/metrics/histogram.h"
10 #include "base/prefs/pref_service.h"
11 #include "base/strings/string16.h"
12 #include "base/values.h"
13 #include "chrome/browser/google/google_util.h"
14 #include "chrome/browser/profile_resetter/brandcode_config_fetcher.h"
15 #include "chrome/browser/profile_resetter/brandcoded_default_settings.h"
16 #include "chrome/browser/profile_resetter/profile_resetter.h"
17 #include "chrome/browser/profile_resetter/resettable_settings_snapshot.h"
18 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/common/pref_names.h"
20 #include "chrome/common/url_constants.h"
21 #include "content/public/browser/user_metrics.h"
22 #include "content/public/browser/web_ui.h"
23 #include "grit/generated_resources.h"
24 #include "ui/base/l10n/l10n_util.h"
25
26 namespace options {
27
28 ResetProfileSettingsHandler::ResetProfileSettingsHandler() {
29   google_util::GetBrand(&brandcode_);
30 }
31
32 ResetProfileSettingsHandler::~ResetProfileSettingsHandler() {
33 }
34
35 void ResetProfileSettingsHandler::InitializeHandler() {
36   Profile* profile = Profile::FromWebUI(web_ui());
37   resetter_.reset(new ProfileResetter(profile));
38 }
39
40 void ResetProfileSettingsHandler::InitializePage() {
41   web_ui()->CallJavascriptFunction(
42       "ResetProfileSettingsOverlay.setResettingState",
43       base::FundamentalValue(resetter_->IsActive()));
44 }
45
46 void ResetProfileSettingsHandler::GetLocalizedValues(
47     DictionaryValue* localized_strings) {
48   DCHECK(localized_strings);
49
50   static OptionsStringResource resources[] = {
51     { "resetProfileSettingsCommit", IDS_RESET_PROFILE_SETTINGS_COMMIT_BUTTON },
52     { "resetProfileSettingsExplanation",
53         IDS_RESET_PROFILE_SETTINGS_EXPLANATION},
54     { "resetProfileSettingsFeedback", IDS_RESET_PROFILE_SETTINGS_FEEDBACK }
55   };
56
57   RegisterStrings(localized_strings, resources, arraysize(resources));
58   RegisterTitle(localized_strings, "resetProfileSettingsOverlay",
59                 IDS_RESET_PROFILE_SETTINGS_TITLE);
60   localized_strings->SetString(
61       "resetProfileSettingsLearnMoreUrl",
62       chrome::kResetProfileSettingsLearnMoreURL);
63 }
64
65 void ResetProfileSettingsHandler::RegisterMessages() {
66   // Setup handlers specific to this panel.
67   web_ui()->RegisterMessageCallback("performResetProfileSettings",
68       base::Bind(&ResetProfileSettingsHandler::HandleResetProfileSettings,
69                  base::Unretained(this)));
70   web_ui()->RegisterMessageCallback("onShowResetProfileDialog",
71       base::Bind(&ResetProfileSettingsHandler::OnShowResetProfileDialog,
72                  base::Unretained(this)));
73 }
74
75 void ResetProfileSettingsHandler::HandleResetProfileSettings(
76     const ListValue* value) {
77   bool send_settings = false;
78   if (!value->GetBoolean(0, &send_settings))
79     NOTREACHED();
80
81   DCHECK(brandcode_.empty() || config_fetcher_);
82   if (config_fetcher_ && config_fetcher_->IsActive()) {
83     // Reset once the prefs are fetched.
84     config_fetcher_->SetCallback(
85         base::Bind(&ResetProfileSettingsHandler::ResetProfile,
86                    Unretained(this),
87                    send_settings));
88   } else {
89     ResetProfile(send_settings);
90   }
91 }
92
93 void ResetProfileSettingsHandler::OnResetProfileSettingsDone() {
94   web_ui()->CallJavascriptFunction("ResetProfileSettingsOverlay.doneResetting");
95   if (setting_snapshot_) {
96     Profile* profile = Profile::FromWebUI(web_ui());
97     ResettableSettingsSnapshot current_snapshot(profile);
98     int difference = setting_snapshot_->FindDifferentFields(current_snapshot);
99     if (difference) {
100       setting_snapshot_->Subtract(current_snapshot);
101       std::string report = SerializeSettingsReport(*setting_snapshot_,
102                                                    difference);
103       SendSettingsFeedback(report, profile, PROFILE_RESET_WEBUI);
104     }
105     setting_snapshot_.reset();
106   }
107 }
108
109 void ResetProfileSettingsHandler::OnShowResetProfileDialog(const ListValue*) {
110   DictionaryValue flashInfo;
111   flashInfo.Set("feedbackInfo", GetReadableFeedback(
112       Profile::FromWebUI(web_ui())));
113   web_ui()->CallJavascriptFunction(
114       "ResetProfileSettingsOverlay.setFeedbackInfo",
115       flashInfo);
116
117   if (brandcode_.empty())
118     return;
119   config_fetcher_.reset(new BrandcodeConfigFetcher(
120       base::Bind(&ResetProfileSettingsHandler::OnSettingsFetched,
121                  Unretained(this)),
122       GURL("https://tools.google.com/service/update2"),
123       brandcode_));
124 }
125
126 void ResetProfileSettingsHandler::OnSettingsFetched() {
127   DCHECK(config_fetcher_);
128   DCHECK(!config_fetcher_->IsActive());
129   // The master prefs is fetched. We are waiting for user pressing 'Reset'.
130 }
131
132 void ResetProfileSettingsHandler::ResetProfile(bool send_settings) {
133   DCHECK(resetter_);
134   DCHECK(!resetter_->IsActive());
135
136   scoped_ptr<BrandcodedDefaultSettings> default_settings;
137   if (config_fetcher_) {
138     DCHECK(!config_fetcher_->IsActive());
139     default_settings = config_fetcher_->GetSettings();
140     config_fetcher_.reset();
141   } else {
142     DCHECK(brandcode_.empty());
143   }
144
145   // If failed to fetch BrandcodedDefaultSettings or this is an organic
146   // installation, use default settings.
147   if (!default_settings)
148     default_settings.reset(new BrandcodedDefaultSettings);
149   // Save current settings if required.
150   setting_snapshot_.reset(send_settings ?
151       new ResettableSettingsSnapshot(Profile::FromWebUI(web_ui())) : NULL);
152   resetter_->Reset(
153       ProfileResetter::ALL,
154       default_settings.Pass(),
155       base::Bind(&ResetProfileSettingsHandler::OnResetProfileSettingsDone,
156                  AsWeakPtr()));
157   content::RecordAction(content::UserMetricsAction("ResetProfile"));
158   UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings);
159 }
160
161 }  // namespace options