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 @@
<html dir="$i18n{textdirection}" lang="$i18n{language}">
<head>
<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/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="stylesheet" href="chrome://resources/css/text_defaults_md.css">
<style>
......@@ -14,7 +18,7 @@
<dom-module id="nux-set-as-default">
<template>
<style>
<style include="paper-button-style">
:host {
align-items: center;
display: flex;
......@@ -24,11 +28,64 @@
.container {
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>
<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>
</template>
<script src="nux_set_as_default.js"></script>
......
......@@ -4,4 +4,48 @@
Polymer({
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 @@
cr.define('nux', function() {
/** @interface */
class NuxSetAsDefaultProxy {}
class NuxSetAsDefaultProxy {
setAsDefault() {}
}
/** @implements {NuxSetAsDefaultProxy} */
class NuxSetAsDefaultProxyImpl {}
class NuxSetAsDefaultProxyImpl {
/** @override */
setAsDefault() {
chrome.send('setAsDefaultBrowser');
}
}
cr.addSingletonGetter(NuxSetAsDefaultProxyImpl);
......
......@@ -1948,6 +1948,13 @@ jumbo_split_static_library("ui") {
"webui/welcome/welcome_handler.h",
"webui/welcome/welcome_ui.cc",
"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
......@@ -1957,7 +1964,6 @@ jumbo_split_static_library("ui") {
"//chrome/browser/ui/webui/welcome/nux:constants",
"//chrome/browser/ui/webui/welcome/nux:email_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)
std::make_unique<chromeos::settings::InternetHandler>(profile));
AddSettingsPageUIHandler(std::make_unique<TtsHandler>());
#else
AddSettingsPageUIHandler(std::make_unique<DefaultBrowserHandler>(web_ui));
AddSettingsPageUIHandler(std::make_unique<DefaultBrowserHandler>());
AddSettingsPageUIHandler(std::make_unique<ManageProfileHandler>(profile));
AddSettingsPageUIHandler(std::make_unique<SystemHandler>());
#endif
......
......@@ -30,9 +30,7 @@ bool DefaultBrowserIsDisabledByPolicy() {
} // namespace
DefaultBrowserHandler::DefaultBrowserHandler(content::WebUI* webui)
: weak_ptr_factory_(this) {
}
DefaultBrowserHandler::DefaultBrowserHandler() : weak_ptr_factory_(this) {}
DefaultBrowserHandler::~DefaultBrowserHandler() {}
......@@ -74,9 +72,8 @@ void DefaultBrowserHandler::RequestDefaultBrowserState(
void DefaultBrowserHandler::SetAsDefaultBrowser(const base::ListValue* args) {
CHECK(!DefaultBrowserIsDisabledByPolicy());
base::RecordAction(base::UserMetricsAction("Options_SetAsDefaultBrowser"));
UMA_HISTOGRAM_COUNTS_1M("Settings.StartSetAsDefault", true);
AllowJavascript();
RecordSetAsDefaultUMA();
default_browser_worker_->StartSetAsDefault();
......@@ -85,6 +82,11 @@ void DefaultBrowserHandler::SetAsDefaultBrowser(const base::ListValue* args) {
ResetDefaultBrowserPrompt(Profile::FromWebUI(web_ui()));
}
void DefaultBrowserHandler::RecordSetAsDefaultUMA() {
base::RecordAction(base::UserMetricsAction("Options_SetAsDefaultBrowser"));
UMA_HISTOGRAM_COUNTS("Settings.StartSetAsDefault", true);
}
void DefaultBrowserHandler::OnDefaultBrowserWorkerFinished(
shell_integration::DefaultWebClientState state) {
if (state == shell_integration::IS_DEFAULT) {
......
......@@ -27,7 +27,7 @@ namespace settings {
// settings code to change the default browser settings.
class DefaultBrowserHandler : public SettingsPageUIHandler {
public:
explicit DefaultBrowserHandler(content::WebUI* webui);
DefaultBrowserHandler();
~DefaultBrowserHandler() override;
// SettingsPageUIHandler implementation.
......@@ -35,6 +35,10 @@ class DefaultBrowserHandler : public SettingsPageUIHandler {
void OnJavascriptAllowed() override;
void OnJavascriptDisallowed() override;
protected:
// Subclasses should override this method.
virtual void RecordSetAsDefaultUMA();
private:
// Called from WebUI to request the current state.
void RequestDefaultBrowserState(const base::ListValue* args);
......
......@@ -4,94 +4,69 @@
import("//build/config/chrome_build.gni")
if (is_win && is_chrome_branded) {
static_library("set_as_default_feature") {
sources = [
"set_as_default_handler.cc",
"set_as_default_handler.h",
]
source_set("constants") {
sources = [
"constants.cc",
"constants.h",
]
public_deps = [
"//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",
]
}
public_deps = [
"//base",
]
}
static_library("email_feature") {
sources = [
"email_handler.cc",
"email_handler.h",
]
static_library("email_feature") {
sources = [
"email_handler.cc",
"email_handler.h",
]
public_deps = [
"//base",
"//net",
"//url",
]
public_deps = [
"//base",
"//net",
"//url",
]
deps = [
"//chrome/app:generated_resources",
"//chrome/browser:resources",
"//components/bookmarks/browser",
"//components/bookmarks/common",
"//components/favicon/core",
"//components/pref_registry",
"//components/prefs",
"//components/resources",
"//components/strings",
"//components/variations",
"//content/public/browser",
"//ui/base",
]
}
deps = [
"//chrome/app:generated_resources",
"//chrome/browser:resources",
"//components/bookmarks/browser",
"//components/bookmarks/common",
"//components/favicon/core",
"//components/pref_registry",
"//components/prefs",
"//components/resources",
"//components/strings",
"//components/variations",
"//content/public/browser",
"//ui/base",
]
}
static_library("google_apps_feature") {
sources = [
"google_apps_handler.cc",
"google_apps_handler.h",
]
static_library("google_apps_feature") {
sources = [
"google_apps_handler.cc",
"google_apps_handler.h",
]
public_deps = [
"//base",
"//net",
"//url",
]
public_deps = [
"//base",
"//net",
"//url",
]
deps = [
"//chrome/app:generated_resources",
"//chrome/browser:resources",
"//components/bookmarks/browser",
"//components/bookmarks/common",
"//components/favicon/core",
"//components/pref_registry",
"//components/prefs",
"//components/resources",
"//components/strings",
"//components/variations",
"//content/public/browser",
"//ui/base",
]
}
deps = [
"//chrome/app:generated_resources",
"//chrome/browser:resources",
"//components/bookmarks/browser",
"//components/bookmarks/common",
"//components/favicon/core",
"//components/pref_registry",
"//components/prefs",
"//components/resources",
"//components/strings",
"//components/variations",
"//content/public/browser",
"//ui/base",
]
}
......@@ -4,28 +4,24 @@
#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/histogram_macros.h"
#include "base/stl_util.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/grit/browser_resources.h"
#include "chrome/grit/generated_resources.h"
#include "components/grit/components_resources.h"
#include "components/grit/components_scaled_resources.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 "ui/base/resource/resource_bundle.h"
namespace nux {
SetAsDefaultHandler::SetAsDefaultHandler() {}
SetAsDefaultHandler::SetAsDefaultHandler()
: settings::DefaultBrowserHandler() {}
SetAsDefaultHandler::~SetAsDefaultHandler() {}
void SetAsDefaultHandler::RegisterMessages() {}
void SetAsDefaultHandler::RecordSetAsDefaultUMA() {
// TODO(scottchen): Add UMA tracking.
}
void SetAsDefaultHandler::AddSources(content::WebUIDataSource* html_source) {
// Localized strings.
......
......@@ -6,8 +6,7 @@
#define CHROME_BROWSER_UI_WEBUI_WELCOME_NUX_SET_AS_DEFAULT_HANDLER_H_
#include "base/macros.h"
#include "base/values.h"
#include "content/public/browser/web_ui_message_handler.h"
#include "chrome/browser/ui/webui/settings/settings_default_browser_handler.h"
namespace content {
class WebUIDataSource;
......@@ -15,17 +14,17 @@ class WebUIDataSource;
namespace nux {
class SetAsDefaultHandler : public content::WebUIMessageHandler {
class SetAsDefaultHandler : public settings::DefaultBrowserHandler {
public:
SetAsDefaultHandler();
~SetAsDefaultHandler() override;
// WebUIMessageHandler:
void RegisterMessages() override;
// Adds webui sources.
static void AddSources(content::WebUIDataSource* html_source);
protected:
void RecordSetAsDefaultUMA() override;
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