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

Side by Side Diff: chrome/browser/ui/webui/set_as_default_browser_ui.cc

Issue 10837258: Added UMA histograms' logging to Win8 SetAsDefault dialog (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed a typo (review). Created 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "chrome/browser/ui/webui/set_as_default_browser_ui.h" 5 #include "chrome/browser/ui/webui/set_as_default_browser_ui.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/metrics/histogram.h"
9 #include "base/path_service.h" 10 #include "base/path_service.h"
10 #include "chrome/browser/first_run/first_run.h" 11 #include "chrome/browser/first_run/first_run.h"
11 #include "chrome/browser/prefs/pref_service.h" 12 #include "chrome/browser/prefs/pref_service.h"
12 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/shell_integration.h" 14 #include "chrome/browser/shell_integration.h"
14 #include "chrome/browser/ui/browser.h" 15 #include "chrome/browser/ui/browser.h"
15 #include "chrome/browser/ui/browser_dialogs.h" 16 #include "chrome/browser/ui/browser_dialogs.h"
16 #include "chrome/browser/ui/browser_finder.h" 17 #include "chrome/browser/ui/browser_finder.h"
17 #include "chrome/browser/ui/browser_list.h" 18 #include "chrome/browser/ui/browser_list.h"
18 #include "chrome/browser/ui/browser_tabstrip.h" 19 #include "chrome/browser/ui/browser_tabstrip.h"
(...skipping 17 matching lines...) Expand all
36 #include "ui/base/l10n/l10n_util.h" 37 #include "ui/base/l10n/l10n_util.h"
37 #include "ui/gfx/font.h" 38 #include "ui/gfx/font.h"
38 #include "ui/web_dialogs/web_dialog_delegate.h" 39 #include "ui/web_dialogs/web_dialog_delegate.h"
39 40
40 using content::BrowserThread; 41 using content::BrowserThread;
41 using content::WebContents; 42 using content::WebContents;
42 using content::WebUIMessageHandler; 43 using content::WebUIMessageHandler;
43 44
44 namespace { 45 namespace {
45 46
47 const char kSetAsDefaultBrowserHistogram[] = "DefaultBrowser.InteractionResult";
48
49 // The enum permits registering in UMA the three possible outcomes.
50 // ACCEPTED: user pressed Next and made Chrome default.
51 // DECLINED: user simply closed the dialog without making Chrome default.
52 // REGRETTED: user pressed Next but then elected a different default browser.
53 enum MakeChromeDefaultResult {
54 MAKE_CHROME_DEFAULT_ACCEPTED,
55 MAKE_CHROME_DEFAULT_DECLINED,
56 MAKE_CHROME_DEFAULT_REGRETTED,
57 MAKE_CHROME_DEFAULT_MAX
58 };
59
46 ChromeWebUIDataSource* CreateSetAsDefaultBrowserUIHTMLSource() { 60 ChromeWebUIDataSource* CreateSetAsDefaultBrowserUIHTMLSource() {
47 ChromeWebUIDataSource* data_source = new ChromeWebUIDataSource( 61 ChromeWebUIDataSource* data_source = new ChromeWebUIDataSource(
48 chrome::kChromeUIMetroFlowHost); 62 chrome::kChromeUIMetroFlowHost);
49 data_source->AddLocalizedString("page-title", IDS_METRO_FLOW_TAB_TITLE); 63 data_source->AddLocalizedString("page-title", IDS_METRO_FLOW_TAB_TITLE);
50 data_source->AddLocalizedString("flowTitle", IDS_METRO_FLOW_TITLE_SHORT); 64 data_source->AddLocalizedString("flowTitle", IDS_METRO_FLOW_TITLE_SHORT);
51 data_source->AddLocalizedString("flowDescription", 65 data_source->AddLocalizedString("flowDescription",
52 IDS_METRO_FLOW_DESCRIPTION); 66 IDS_METRO_FLOW_DESCRIPTION);
53 data_source->AddLocalizedString("flowNext", 67 data_source->AddLocalizedString("flowNext",
54 IDS_METRO_FLOW_SET_DEFAULT); 68 IDS_METRO_FLOW_SET_DEFAULT);
55 data_source->AddLocalizedString("chromeLogoString", 69 data_source->AddLocalizedString("chromeLogoString",
56 IDS_METRO_FLOW_LOGO_STRING_ALT); 70 IDS_METRO_FLOW_LOGO_STRING_ALT);
57 data_source->set_json_path("strings.js"); 71 data_source->set_json_path("strings.js");
58 data_source->add_resource_path("set_as_default_browser.js", 72 data_source->add_resource_path("set_as_default_browser.js",
59 IDR_SET_AS_DEFAULT_BROWSER_JS); 73 IDR_SET_AS_DEFAULT_BROWSER_JS);
60 data_source->set_default_resource(IDR_SET_AS_DEFAULT_BROWSER_HTML); 74 data_source->set_default_resource(IDR_SET_AS_DEFAULT_BROWSER_HTML);
61 return data_source; 75 return data_source;
62 } 76 }
63 77
64 // A simple class serving as a delegate for passing down the result of the 78 // A simple class serving as a delegate for passing down the result of the
65 // interaction. 79 // interaction.
66 class ResponseDelegate { 80 class ResponseDelegate {
67 public: 81 public:
68 virtual void SetChromeShutdownRequired(bool shutdown_chrome) = 0; 82 virtual void SetChromeShutdownRequired(bool shutdown_chrome) = 0;
83 virtual void SetDialogInteractionResult(MakeChromeDefaultResult result) = 0;
69 84
70 protected: 85 protected:
71 virtual ~ResponseDelegate() { } 86 virtual ~ResponseDelegate() { }
72 }; 87 };
73 88
74 // Event handler for SetAsDefaultBrowserUI. Capable of setting Chrome as the 89 // Event handler for SetAsDefaultBrowserUI. Capable of setting Chrome as the
75 // default browser on button click, closing itself and triggering Chrome 90 // default browser on button click, closing itself and triggering Chrome
76 // restart. 91 // restart.
77 class SetAsDefaultBrowserHandler 92 class SetAsDefaultBrowserHandler
78 : public WebUIMessageHandler, 93 : public WebUIMessageHandler,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 ShellIntegration::DefaultWebClientUIState state) { 149 ShellIntegration::DefaultWebClientUIState state) {
135 // The callback is expected to be invoked once the procedure has completed. 150 // The callback is expected to be invoked once the procedure has completed.
136 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
137 if (!set_default_returned_) 152 if (!set_default_returned_)
138 return; 153 return;
139 154
140 if (state == ShellIntegration::STATE_NOT_DEFAULT && set_default_result_) { 155 if (state == ShellIntegration::STATE_NOT_DEFAULT && set_default_result_) {
141 // The operation concluded, but Chrome is still not the default. 156 // The operation concluded, but Chrome is still not the default.
142 // If the call has succeeded, this suggests user has decided not to make 157 // If the call has succeeded, this suggests user has decided not to make
143 // chrome the default. We fold this UI and move on. 158 // chrome the default. We fold this UI and move on.
159 if (response_delegate_) {
160 response_delegate_->SetDialogInteractionResult(
161 MAKE_CHROME_DEFAULT_REGRETTED);
162 }
163
144 ConcludeInteraction(false); 164 ConcludeInteraction(false);
145 } else if (state == ShellIntegration::STATE_IS_DEFAULT) { 165 } else if (state == ShellIntegration::STATE_IS_DEFAULT) {
166 if (response_delegate_) {
167 response_delegate_->SetDialogInteractionResult(
168 MAKE_CHROME_DEFAULT_ACCEPTED);
169 }
170
146 if (!Profile::FromWebUI(web_ui())->GetPrefs()->GetBoolean( 171 if (!Profile::FromWebUI(web_ui())->GetPrefs()->GetBoolean(
147 prefs::kSuppressSwitchToMetroModeOnSetDefault)) { 172 prefs::kSuppressSwitchToMetroModeOnSetDefault)) {
148 BrowserThread::PostTask( 173 BrowserThread::PostTask(
149 BrowserThread::FILE, FROM_HERE, 174 BrowserThread::FILE, FROM_HERE,
150 base::Bind(&SetAsDefaultBrowserHandler::ActivateMetroChrome, 175 base::Bind(&SetAsDefaultBrowserHandler::ActivateMetroChrome,
151 base::Unretained(this))); 176 base::Unretained(this)));
152 } else { 177 } else {
153 ConcludeInteraction(false); 178 ConcludeInteraction(false);
154 } 179 }
155 } 180 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 virtual std::string GetDialogArgs() const OVERRIDE; 252 virtual std::string GetDialogArgs() const OVERRIDE;
228 virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE; 253 virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE;
229 virtual void OnCloseContents(WebContents* source, 254 virtual void OnCloseContents(WebContents* source,
230 bool* out_close_dialog) OVERRIDE; 255 bool* out_close_dialog) OVERRIDE;
231 virtual bool ShouldShowDialogTitle() const OVERRIDE; 256 virtual bool ShouldShowDialogTitle() const OVERRIDE;
232 virtual bool HandleContextMenu( 257 virtual bool HandleContextMenu(
233 const content::ContextMenuParams& params) OVERRIDE; 258 const content::ContextMenuParams& params) OVERRIDE;
234 259
235 // Overridden from ResponseDelegate: 260 // Overridden from ResponseDelegate:
236 virtual void SetChromeShutdownRequired(bool shutdown_chrome); 261 virtual void SetChromeShutdownRequired(bool shutdown_chrome);
262 virtual void SetDialogInteractionResult(MakeChromeDefaultResult result);
237 263
238 private: 264 private:
239 Profile* profile_; 265 Profile* profile_;
240 Browser* browser_; 266 Browser* browser_;
241 mutable bool owns_handler_; 267 mutable bool owns_handler_;
242 SetAsDefaultBrowserHandler* handler_; 268 SetAsDefaultBrowserHandler* handler_;
269 MakeChromeDefaultResult dialog_interation_result_;
243 bool response_is_close_chrome_; 270 bool response_is_close_chrome_;
244 271
245 DISALLOW_COPY_AND_ASSIGN(SetAsDefaultBrowserDialogImpl); 272 DISALLOW_COPY_AND_ASSIGN(SetAsDefaultBrowserDialogImpl);
246 }; 273 };
247 274
248 SetAsDefaultBrowserDialogImpl::SetAsDefaultBrowserDialogImpl(Profile* profile, 275 SetAsDefaultBrowserDialogImpl::SetAsDefaultBrowserDialogImpl(Profile* profile,
249 Browser* browser) 276 Browser* browser)
250 : profile_(profile), 277 : profile_(profile),
251 browser_(browser), 278 browser_(browser),
252 owns_handler_(true), 279 owns_handler_(true),
253 handler_(new SetAsDefaultBrowserHandler(this)), 280 handler_(new SetAsDefaultBrowserHandler(this)),
281 dialog_interation_result_(MAKE_CHROME_DEFAULT_DECLINED),
254 response_is_close_chrome_(false) { 282 response_is_close_chrome_(false) {
255 } 283 }
256 284
257 SetAsDefaultBrowserDialogImpl::~SetAsDefaultBrowserDialogImpl() { 285 SetAsDefaultBrowserDialogImpl::~SetAsDefaultBrowserDialogImpl() {
258 if (owns_handler_) 286 if (owns_handler_)
259 delete handler_; 287 delete handler_;
260 } 288 }
261 289
262 void SetAsDefaultBrowserDialogImpl::ShowDialog() { 290 void SetAsDefaultBrowserDialogImpl::ShowDialog() {
263 chrome::ShowWebDialog(browser_->window()->GetNativeWindow(), 291 chrome::ShowWebDialog(browser_->window()->GetNativeWindow(),
(...skipping 29 matching lines...) Expand all
293 IDS_METRO_FLOW_WIDTH_CHARS, IDS_METRO_FLOW_HEIGHT_LINES, 321 IDS_METRO_FLOW_WIDTH_CHARS, IDS_METRO_FLOW_HEIGHT_LINES,
294 approximate_web_font); 322 approximate_web_font);
295 } 323 }
296 324
297 std::string SetAsDefaultBrowserDialogImpl::GetDialogArgs() const { 325 std::string SetAsDefaultBrowserDialogImpl::GetDialogArgs() const {
298 return "[]"; 326 return "[]";
299 } 327 }
300 328
301 void SetAsDefaultBrowserDialogImpl::OnDialogClosed( 329 void SetAsDefaultBrowserDialogImpl::OnDialogClosed(
302 const std::string& json_retval) { 330 const std::string& json_retval) {
331 // Register the user's response in UMA.
332 UMA_HISTOGRAM_ENUMERATION(kSetAsDefaultBrowserHistogram,
333 dialog_interation_result_,
334 MAKE_CHROME_DEFAULT_MAX);
335
303 if (response_is_close_chrome_) { 336 if (response_is_close_chrome_) {
304 // If Metro Chrome has been activated, we should close this process. 337 // If Metro Chrome has been activated, we should close this process.
305 // We are restarting as metro now. 338 // We are restarting as metro now.
306 BrowserList::CloseAllBrowsersWithProfile(profile_); 339 BrowserList::CloseAllBrowsersWithProfile(profile_);
307 } else { 340 } else {
308 // This will be false if the user closed the dialog without doing anything 341 // This will be false if the user closed the dialog without doing anything
309 // or if operation failed for any reason (including invocation under a 342 // or if operation failed for any reason (including invocation under a
310 // Windows version earlier than 8). 343 // Windows version earlier than 8).
311 // In such case we just carry on with a normal chrome session. However, for 344 // In such case we just carry on with a normal chrome session. However, for
312 // the purpose of surfacing this dialog the actual browser window had to 345 // the purpose of surfacing this dialog the actual browser window had to
(...skipping 20 matching lines...) Expand all
333 bool SetAsDefaultBrowserDialogImpl::HandleContextMenu( 366 bool SetAsDefaultBrowserDialogImpl::HandleContextMenu(
334 const content::ContextMenuParams& params) { 367 const content::ContextMenuParams& params) {
335 return true; 368 return true;
336 } 369 }
337 370
338 void SetAsDefaultBrowserDialogImpl::SetChromeShutdownRequired( 371 void SetAsDefaultBrowserDialogImpl::SetChromeShutdownRequired(
339 bool shutdown_chrome) { 372 bool shutdown_chrome) {
340 response_is_close_chrome_ = shutdown_chrome; 373 response_is_close_chrome_ = shutdown_chrome;
341 } 374 }
342 375
376 void SetAsDefaultBrowserDialogImpl::SetDialogInteractionResult(
377 MakeChromeDefaultResult result) {
378 dialog_interation_result_ = result;
379 }
380
343 } // namespace 381 } // namespace
344 382
345 SetAsDefaultBrowserUI::SetAsDefaultBrowserUI(content::WebUI* web_ui) 383 SetAsDefaultBrowserUI::SetAsDefaultBrowserUI(content::WebUI* web_ui)
346 : ui::WebDialogUI(web_ui) { 384 : ui::WebDialogUI(web_ui) {
347 ChromeURLDataManager::AddDataSource(Profile::FromWebUI(web_ui), 385 ChromeURLDataManager::AddDataSource(Profile::FromWebUI(web_ui),
348 CreateSetAsDefaultBrowserUIHTMLSource()); 386 CreateSetAsDefaultBrowserUIHTMLSource());
349 } 387 }
350 388
351 // static 389 // static
352 void SetAsDefaultBrowserUI::Show(Profile* profile, Browser* browser) { 390 void SetAsDefaultBrowserUI::Show(Profile* profile, Browser* browser) {
353 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 391 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
354 SetAsDefaultBrowserDialogImpl* dialog = 392 SetAsDefaultBrowserDialogImpl* dialog =
355 new SetAsDefaultBrowserDialogImpl(profile, browser); 393 new SetAsDefaultBrowserDialogImpl(profile, browser);
356 dialog->ShowDialog(); 394 dialog->ShowDialog();
357 } 395 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698