Commit 5b1d0a1f authored by Scott Chen's avatar Scott Chen Committed by Commit Bot

NUX Default: add set-as-default functionality

This adds the back-end functionality of setting default for the NUX
set-default module, by subclassing a very similar handler from Settings.

There will be follow-up CLs to match front-end with mock.

Bug: 874122
Change-Id: I2e54ed7846e036cf48f4d6b22f2a7b867d65baa6
Reviewed-on: https://chromium-review.googlesource.com/1222914
Commit-Queue: Scott Chen <scottchen@chromium.org>
Reviewed-by: default avatarHector Carmona <hcarmona@chromium.org>
Reviewed-by: default avatarDemetrios Papadopoulos <dpapad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#595694}
parent 73afe6fe
...@@ -2,8 +2,12 @@ ...@@ -2,8 +2,12 @@
<html dir="$i18n{textdirection}" lang="$i18n{language}"> <html dir="$i18n{textdirection}" lang="$i18n{language}">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>TODO_TITLE</title> <title>$i18n{headerText}</title>
<link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/cr_elements/icons.html">
<link rel="import" href="chrome://resources/cr_elements/paper_button_style_css.html">
<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html">
<link rel="import" href="nux_set_as_default_proxy.html"> <link rel="import" href="nux_set_as_default_proxy.html">
<link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css"> <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
<style> <style>
...@@ -14,7 +18,7 @@ ...@@ -14,7 +18,7 @@
<dom-module id="nux-set-as-default"> <dom-module id="nux-set-as-default">
<template> <template>
<style> <style include="paper-button-style">
:host { :host {
align-items: center; align-items: center;
display: flex; display: flex;
...@@ -24,11 +28,64 @@ ...@@ -24,11 +28,64 @@
.container { .container {
text-align: center; text-align: center;
width: 800; width: 800px;
}
.logo {
margin-bottom: 16px;
/* TODO(scottchen): placeholder; replace when asset is available. */
width: 32px;
height: 32px;
display: inline-block;
background: red;
}
h1 {
color: #202124;
font-weight: 500;
font-size: 1.5rem;
line-height: 2.5rem;
margin: 0;
}
h2 {
color: #202124;
font-weight: unset;
font-size: 1.25rem;
line-height: 1.875rem;
margin: 0;
margin-top: 16px;
margin-bottom: 48px;
}
img {
/* TODO(scottchen): placeholder; replace when asset is available. */
width: 454px;
height: 186px;
display: inline-block;
background: red;
}
.button-bar {
display: flex;
margin-top: 64px;
justify-content: space-between;
} }
</style> </style>
<div class="container"> <div class="container">
hi <div class="logo"></div>
<h1>TODO_HEADER</h1>
<h2>TODO_SUBHEADER</h2>
<!-- TODO(scottchen): WIP behind feature flag, add src later. -->
<img>
<div class="button-bar">
<paper-button on-click="onDeclineClick_">
TODO_NO_THANKS
</paper-button>
<paper-button class="action-button" on-click="onSetDefaultClick_">
TODO_SET_AS_DEFAULT
</paper-button>
</div>
</div> </div>
</template> </template>
<script src="nux_set_as_default.js"></script> <script src="nux_set_as_default.js"></script>
......
...@@ -4,4 +4,48 @@ ...@@ -4,4 +4,48 @@
Polymer({ Polymer({
is: 'nux-set-as-default', is: 'nux-set-as-default',
behaviors: [WebUIListenerBehavior],
/** @private {nux.NuxSetAsDefaultProxy} */
browserProxy_: null,
/** @override */
attached: function() {
this.browserProxy_ = nux.NuxSetAsDefaultProxyImpl.getInstance();
this.addWebUIListener(
'browser-default-state-changed',
this.onDefaultBrowserChange_.bind(this));
},
/** @private */
onDeclineClick_: function() {
// TODO(scottchen): Add UMA collection here.
this.finished_();
},
/** @private */
onSetDefaultClick_: function() {
this.browserProxy_.setAsDefault();
},
/**
* Automatically navigate to the next onboarding step once default changed.
* @param {boolean} isDefault
* @private
*/
onDefaultBrowserChange_: function(isDefault) {
// TODO(scottchen): Add UMA collection here.
if (isDefault)
this.finished_();
},
/** @private */
finished_: function() {
// TODO(scottchen): use navigation behavior to go to next step once this
// module is integrated with onboarding-welcome's welcome-app.
},
}); });
...@@ -4,10 +4,17 @@ ...@@ -4,10 +4,17 @@
cr.define('nux', function() { cr.define('nux', function() {
/** @interface */ /** @interface */
class NuxSetAsDefaultProxy {} class NuxSetAsDefaultProxy {
setAsDefault() {}
}
/** @implements {NuxSetAsDefaultProxy} */ /** @implements {NuxSetAsDefaultProxy} */
class NuxSetAsDefaultProxyImpl {} class NuxSetAsDefaultProxyImpl {
/** @override */
setAsDefault() {
chrome.send('setAsDefaultBrowser');
}
}
cr.addSingletonGetter(NuxSetAsDefaultProxyImpl); cr.addSingletonGetter(NuxSetAsDefaultProxyImpl);
......
...@@ -1948,6 +1948,13 @@ jumbo_split_static_library("ui") { ...@@ -1948,6 +1948,13 @@ jumbo_split_static_library("ui") {
"webui/welcome/welcome_handler.h", "webui/welcome/welcome_handler.h",
"webui/welcome/welcome_ui.cc", "webui/welcome/welcome_ui.cc",
"webui/welcome/welcome_ui.h", "webui/welcome/welcome_ui.h",
# TODO(scottchen): nux/set_as_default_handler is here because it depends
# on settings_default_browser_handler, but that deps currently can't
# be added in nux/BUILD.gn due to circular dependency.
# Should move back to nux/BUILD.gn once settings's build config is in
# a shareable location (e.g. ui/webui/settings/BUILD.gn).
"webui/welcome/nux/set_as_default_handler.cc",
"webui/welcome/nux/set_as_default_handler.h",
] ]
# TODO(scottchen): Remove if-check once nux files are non-exclusive # TODO(scottchen): Remove if-check once nux files are non-exclusive
...@@ -1957,7 +1964,6 @@ jumbo_split_static_library("ui") { ...@@ -1957,7 +1964,6 @@ jumbo_split_static_library("ui") {
"//chrome/browser/ui/webui/welcome/nux:constants", "//chrome/browser/ui/webui/welcome/nux:constants",
"//chrome/browser/ui/webui/welcome/nux:email_feature", "//chrome/browser/ui/webui/welcome/nux:email_feature",
"//chrome/browser/ui/webui/welcome/nux:google_apps_feature", "//chrome/browser/ui/webui/welcome/nux:google_apps_feature",
"//chrome/browser/ui/webui/welcome/nux:set_as_default_feature",
] ]
} }
......
...@@ -244,7 +244,7 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui) ...@@ -244,7 +244,7 @@ MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
std::make_unique<chromeos::settings::InternetHandler>(profile)); std::make_unique<chromeos::settings::InternetHandler>(profile));
AddSettingsPageUIHandler(std::make_unique<TtsHandler>()); AddSettingsPageUIHandler(std::make_unique<TtsHandler>());
#else #else
AddSettingsPageUIHandler(std::make_unique<DefaultBrowserHandler>(web_ui)); AddSettingsPageUIHandler(std::make_unique<DefaultBrowserHandler>());
AddSettingsPageUIHandler(std::make_unique<ManageProfileHandler>(profile)); AddSettingsPageUIHandler(std::make_unique<ManageProfileHandler>(profile));
AddSettingsPageUIHandler(std::make_unique<SystemHandler>()); AddSettingsPageUIHandler(std::make_unique<SystemHandler>());
#endif #endif
......
...@@ -30,9 +30,7 @@ bool DefaultBrowserIsDisabledByPolicy() { ...@@ -30,9 +30,7 @@ bool DefaultBrowserIsDisabledByPolicy() {
} // namespace } // namespace
DefaultBrowserHandler::DefaultBrowserHandler(content::WebUI* webui) DefaultBrowserHandler::DefaultBrowserHandler() : weak_ptr_factory_(this) {}
: weak_ptr_factory_(this) {
}
DefaultBrowserHandler::~DefaultBrowserHandler() {} DefaultBrowserHandler::~DefaultBrowserHandler() {}
...@@ -74,9 +72,8 @@ void DefaultBrowserHandler::RequestDefaultBrowserState( ...@@ -74,9 +72,8 @@ void DefaultBrowserHandler::RequestDefaultBrowserState(
void DefaultBrowserHandler::SetAsDefaultBrowser(const base::ListValue* args) { void DefaultBrowserHandler::SetAsDefaultBrowser(const base::ListValue* args) {
CHECK(!DefaultBrowserIsDisabledByPolicy()); CHECK(!DefaultBrowserIsDisabledByPolicy());
AllowJavascript();
base::RecordAction(base::UserMetricsAction("Options_SetAsDefaultBrowser")); RecordSetAsDefaultUMA();
UMA_HISTOGRAM_COUNTS_1M("Settings.StartSetAsDefault", true);
default_browser_worker_->StartSetAsDefault(); default_browser_worker_->StartSetAsDefault();
...@@ -85,6 +82,11 @@ void DefaultBrowserHandler::SetAsDefaultBrowser(const base::ListValue* args) { ...@@ -85,6 +82,11 @@ void DefaultBrowserHandler::SetAsDefaultBrowser(const base::ListValue* args) {
ResetDefaultBrowserPrompt(Profile::FromWebUI(web_ui())); ResetDefaultBrowserPrompt(Profile::FromWebUI(web_ui()));
} }
void DefaultBrowserHandler::RecordSetAsDefaultUMA() {
base::RecordAction(base::UserMetricsAction("Options_SetAsDefaultBrowser"));
UMA_HISTOGRAM_COUNTS("Settings.StartSetAsDefault", true);
}
void DefaultBrowserHandler::OnDefaultBrowserWorkerFinished( void DefaultBrowserHandler::OnDefaultBrowserWorkerFinished(
shell_integration::DefaultWebClientState state) { shell_integration::DefaultWebClientState state) {
if (state == shell_integration::IS_DEFAULT) { if (state == shell_integration::IS_DEFAULT) {
......
...@@ -27,7 +27,7 @@ namespace settings { ...@@ -27,7 +27,7 @@ namespace settings {
// settings code to change the default browser settings. // settings code to change the default browser settings.
class DefaultBrowserHandler : public SettingsPageUIHandler { class DefaultBrowserHandler : public SettingsPageUIHandler {
public: public:
explicit DefaultBrowserHandler(content::WebUI* webui); DefaultBrowserHandler();
~DefaultBrowserHandler() override; ~DefaultBrowserHandler() override;
// SettingsPageUIHandler implementation. // SettingsPageUIHandler implementation.
...@@ -35,6 +35,10 @@ class DefaultBrowserHandler : public SettingsPageUIHandler { ...@@ -35,6 +35,10 @@ class DefaultBrowserHandler : public SettingsPageUIHandler {
void OnJavascriptAllowed() override; void OnJavascriptAllowed() override;
void OnJavascriptDisallowed() override; void OnJavascriptDisallowed() override;
protected:
// Subclasses should override this method.
virtual void RecordSetAsDefaultUMA();
private: private:
// Called from WebUI to request the current state. // Called from WebUI to request the current state.
void RequestDefaultBrowserState(const base::ListValue* args); void RequestDefaultBrowserState(const base::ListValue* args);
......
...@@ -4,94 +4,69 @@ ...@@ -4,94 +4,69 @@
import("//build/config/chrome_build.gni") import("//build/config/chrome_build.gni")
if (is_win && is_chrome_branded) { source_set("constants") {
static_library("set_as_default_feature") { sources = [
sources = [ "constants.cc",
"set_as_default_handler.cc", "constants.h",
"set_as_default_handler.h", ]
]
public_deps = [ public_deps = [
"//base", "//base",
"//net", ]
"//url", }
]
deps = [
"//chrome/app:generated_resources",
"//chrome/browser:resources",
"//components/resources",
"//components/strings",
"//components/variations",
"//content/public/browser",
"//ui/base",
]
}
source_set("constants") {
sources = [
"constants.cc",
"constants.h",
]
public_deps = [
"//base",
]
}
static_library("email_feature") { static_library("email_feature") {
sources = [ sources = [
"email_handler.cc", "email_handler.cc",
"email_handler.h", "email_handler.h",
] ]
public_deps = [ public_deps = [
"//base", "//base",
"//net", "//net",
"//url", "//url",
] ]
deps = [ deps = [
"//chrome/app:generated_resources", "//chrome/app:generated_resources",
"//chrome/browser:resources", "//chrome/browser:resources",
"//components/bookmarks/browser", "//components/bookmarks/browser",
"//components/bookmarks/common", "//components/bookmarks/common",
"//components/favicon/core", "//components/favicon/core",
"//components/pref_registry", "//components/pref_registry",
"//components/prefs", "//components/prefs",
"//components/resources", "//components/resources",
"//components/strings", "//components/strings",
"//components/variations", "//components/variations",
"//content/public/browser", "//content/public/browser",
"//ui/base", "//ui/base",
] ]
} }
static_library("google_apps_feature") { static_library("google_apps_feature") {
sources = [ sources = [
"google_apps_handler.cc", "google_apps_handler.cc",
"google_apps_handler.h", "google_apps_handler.h",
] ]
public_deps = [ public_deps = [
"//base", "//base",
"//net", "//net",
"//url", "//url",
] ]
deps = [ deps = [
"//chrome/app:generated_resources", "//chrome/app:generated_resources",
"//chrome/browser:resources", "//chrome/browser:resources",
"//components/bookmarks/browser", "//components/bookmarks/browser",
"//components/bookmarks/common", "//components/bookmarks/common",
"//components/favicon/core", "//components/favicon/core",
"//components/pref_registry", "//components/pref_registry",
"//components/prefs", "//components/prefs",
"//components/resources", "//components/resources",
"//components/strings", "//components/strings",
"//components/variations", "//components/variations",
"//content/public/browser", "//content/public/browser",
"//ui/base", "//ui/base",
] ]
}
} }
...@@ -4,28 +4,24 @@ ...@@ -4,28 +4,24 @@
#include "chrome/browser/ui/webui/welcome/nux/set_as_default_handler.h" #include "chrome/browser/ui/webui/welcome/nux/set_as_default_handler.h"
#include "base/bind.h"
#include "base/metrics/field_trial_params.h" #include "base/metrics/field_trial_params.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/stl_util.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/grit/browser_resources.h" #include "chrome/grit/browser_resources.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
#include "components/grit/components_resources.h" #include "components/grit/components_resources.h"
#include "components/grit/components_scaled_resources.h"
#include "components/strings/grit/components_strings.h" #include "components/strings/grit/components_strings.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_data_source.h"
#include "ui/base/resource/resource_bundle.h"
namespace nux { namespace nux {
SetAsDefaultHandler::SetAsDefaultHandler() {} SetAsDefaultHandler::SetAsDefaultHandler()
: settings::DefaultBrowserHandler() {}
SetAsDefaultHandler::~SetAsDefaultHandler() {} SetAsDefaultHandler::~SetAsDefaultHandler() {}
void SetAsDefaultHandler::RegisterMessages() {} void SetAsDefaultHandler::RecordSetAsDefaultUMA() {
// TODO(scottchen): Add UMA tracking.
}
void SetAsDefaultHandler::AddSources(content::WebUIDataSource* html_source) { void SetAsDefaultHandler::AddSources(content::WebUIDataSource* html_source) {
// Localized strings. // Localized strings.
......
...@@ -6,8 +6,7 @@ ...@@ -6,8 +6,7 @@
#define CHROME_BROWSER_UI_WEBUI_WELCOME_NUX_SET_AS_DEFAULT_HANDLER_H_ #define CHROME_BROWSER_UI_WEBUI_WELCOME_NUX_SET_AS_DEFAULT_HANDLER_H_
#include "base/macros.h" #include "base/macros.h"
#include "base/values.h" #include "chrome/browser/ui/webui/settings/settings_default_browser_handler.h"
#include "content/public/browser/web_ui_message_handler.h"
namespace content { namespace content {
class WebUIDataSource; class WebUIDataSource;
...@@ -15,17 +14,17 @@ class WebUIDataSource; ...@@ -15,17 +14,17 @@ class WebUIDataSource;
namespace nux { namespace nux {
class SetAsDefaultHandler : public content::WebUIMessageHandler { class SetAsDefaultHandler : public settings::DefaultBrowserHandler {
public: public:
SetAsDefaultHandler(); SetAsDefaultHandler();
~SetAsDefaultHandler() override; ~SetAsDefaultHandler() override;
// WebUIMessageHandler:
void RegisterMessages() override;
// Adds webui sources. // Adds webui sources.
static void AddSources(content::WebUIDataSource* html_source); static void AddSources(content::WebUIDataSource* html_source);
protected:
void RecordSetAsDefaultUMA() override;
DISALLOW_COPY_AND_ASSIGN(SetAsDefaultHandler); DISALLOW_COPY_AND_ASSIGN(SetAsDefaultHandler);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment