Commit 104147fd authored by Hector Carmona's avatar Hector Carmona Committed by Commit Bot

Navi: Get list of Google apps from browser.

Bug: 889222
Change-Id: I666bb92178d2e5236143656f9b96180df8fd133c
Reviewed-on: https://chromium-review.googlesource.com/c/1266202
Commit-Queue: Hector Carmona <hcarmona@chromium.org>
Reviewed-by: default avatarDemetrios Papadopoulos <dpapad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#599834}
parent fd1b4095
...@@ -12,13 +12,16 @@ js_type_check("closure_compile") { ...@@ -12,13 +12,16 @@ js_type_check("closure_compile") {
} }
js_library("nux_email") { js_library("nux_email") {
deps = [] deps = [
"../shared:nux_types",
]
} }
js_library("email_chooser") { js_library("email_chooser") {
deps = [ deps = [
":nux_email_proxy", ":nux_email_proxy",
"//third_party/polymer/v1_0/components-chromium/iron-a11y-announcer:iron-a11y-announcer-extracted", "//third_party/polymer/v1_0/components-chromium/iron-a11y-announcer:iron-a11y-announcer-extracted",
"//ui/webui/resources/js:cr",
"//ui/webui/resources/js:i18n_behavior", "//ui/webui/resources/js:i18n_behavior",
] ]
} }
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<link rel="import" href="chrome://resources/cr_elements/icons.html"> <link rel="import" href="chrome://resources/cr_elements/icons.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
<link rel="import" href="chrome://resources/cr_elements/paper_button_style_css.html"> <link rel="import" href="chrome://resources/cr_elements/paper_button_style_css.html">
<link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="chrome://resources/html/i18n_behavior.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-a11y-announcer/iron-a11y-announcer.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-a11y-announcer/iron-a11y-announcer.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
...@@ -45,7 +46,7 @@ ...@@ -45,7 +46,7 @@
} }
</style> </style>
<template is="dom-repeat" items="[[emailList]]"> <template is="dom-repeat" items="[[emailList_]]">
<button active$="[[getSelected_(item, selectedEmailProvider_)]]" <button active$="[[getSelected_(item, selectedEmailProvider_)]]"
on-click="onEmailClick_" on-pointerdown="onEmailPointerDown_" on-click="onEmailClick_" on-pointerdown="onEmailPointerDown_"
on-keyup="onEmailKeyUp_" class="option"> on-keyup="onEmailKeyUp_" class="option">
......
...@@ -2,17 +2,15 @@ ...@@ -2,17 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
/** cr.exportPath('nuxEmail');
* @const
*/
var nuxEmail = nuxEmail || {};
/** /**
* @typedef {?{ * @typedef {{
* name: string, * id: number,
* icon: string, * name: string,
* url: string, * icon: string,
* bookmarkId: (string|undefined), * url: string,
* bookmarkId: (string|undefined),
* }} * }}
*/ */
nuxEmail.EmailProviderModel; nuxEmail.EmailProviderModel;
...@@ -23,7 +21,11 @@ Polymer({ ...@@ -23,7 +21,11 @@ Polymer({
behaviors: [I18nBehavior], behaviors: [I18nBehavior],
properties: { properties: {
emailList: Array, /**
* @type {!Array<!nux.BookmarkListItem>}
* @private
*/
emailList_: Array,
/** @private */ /** @private */
bookmarkBarWasShown_: { bookmarkBarWasShown_: {
...@@ -34,7 +36,7 @@ Polymer({ ...@@ -34,7 +36,7 @@ Polymer({
/** @private */ /** @private */
finalized_: Boolean, finalized_: Boolean,
/** @private {nuxEmail.EmailProviderModel} */ /** @private {?nuxEmail.EmailProviderModel} */
selectedEmailProvider_: { selectedEmailProvider_: {
type: Object, type: Object,
value: () => null, value: () => null,
...@@ -57,7 +59,9 @@ Polymer({ ...@@ -57,7 +59,9 @@ Polymer({
this.browserProxy_ = nux.NuxEmailProxyImpl.getInstance(); this.browserProxy_ = nux.NuxEmailProxyImpl.getInstance();
this.browserProxy_.recordPageInitialized(); this.browserProxy_.recordPageInitialized();
this.emailList = this.browserProxy_.getEmailList(); this.browserProxy_.getEmailList().then(list => {
this.emailList_ = list;
});
window.addEventListener('beforeunload', () => { window.addEventListener('beforeunload', () => {
// Only need to clean up if user didn't interact with the buttons. // Only need to clean up if user didn't interact with the buttons.
...@@ -110,11 +114,11 @@ Polymer({ ...@@ -110,11 +114,11 @@ Polymer({
}, },
/** /**
* @param {nuxEmail.EmailProviderModel=} emailProvider * @param {nuxEmail.EmailProviderModel=} opt_emailProvider
* @private * @private
*/ */
revertBookmark_: function(emailProvider) { revertBookmark_: function(opt_emailProvider) {
emailProvider = emailProvider || this.selectedEmailProvider_; let emailProvider = opt_emailProvider || this.selectedEmailProvider_;
if (emailProvider && emailProvider.bookmarkId) if (emailProvider && emailProvider.bookmarkId)
this.browserProxy_.removeBookmark(emailProvider.bookmarkId); this.browserProxy_.removeBookmark(emailProvider.bookmarkId);
...@@ -182,4 +186,4 @@ Polymer({ ...@@ -182,4 +186,4 @@ Polymer({
if (this.$$('.action-button').disabled) if (this.$$('.action-button').disabled)
this.browserProxy_.recordClickedDisabledButton(); this.browserProxy_.recordClickedDisabledButton();
}, },
}); });
\ No newline at end of file
<link rel="import" href="chrome://resources/html/cr.html"> <link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="../shared/i18n_setup.html"> <link rel="import" href="chrome://welcome/shared/i18n_setup.html">
<script src="nux_email_proxy.js"></script> <script src="nux_email_proxy.js"></script>
\ No newline at end of file
...@@ -61,7 +61,10 @@ cr.define('nux', function() { ...@@ -61,7 +61,10 @@ cr.define('nux', function() {
/** @param {boolean} show */ /** @param {boolean} show */
toggleBookmarkBar(show) {} toggleBookmarkBar(show) {}
/** @return {!Array<Object>} Array of email providers. */ /**
* Returns a promise for an array of email providers.
* @return {!Promise<!Array<!nux.BookmarkListItem>>}
*/
getEmailList() {} getEmailList() {}
recordPageInitialized() {} recordPageInitialized() {}
...@@ -111,17 +114,7 @@ cr.define('nux', function() { ...@@ -111,17 +114,7 @@ cr.define('nux', function() {
/** @override */ /** @override */
getEmailList() { getEmailList() {
let emailCount = loadTimeData.getInteger('email_count'); return cr.sendWithPromise('getEmailList');
let emailList = [];
for (let i = 0; i < emailCount; ++i) {
emailList.push({
id: loadTimeData.getValue(`email_id_${i}`),
name: loadTimeData.getString(`email_name_${i}`),
icon: loadTimeData.getString(`email_name_${i}`).toLowerCase(),
url: loadTimeData.getString(`email_url_${i}`)
});
}
return emailList;
} }
/** @override */ /** @override */
......
...@@ -12,13 +12,16 @@ js_type_check("closure_compile") { ...@@ -12,13 +12,16 @@ js_type_check("closure_compile") {
} }
js_library("apps_chooser") { js_library("apps_chooser") {
deps = [] deps = [
"//ui/webui/resources/js:cr",
]
} }
js_library("nux_google_apps") { js_library("nux_google_apps") {
deps = [ deps = [
":apps_chooser", ":apps_chooser",
":nux_google_apps_proxy", ":nux_google_apps_proxy",
"../shared:nux_types",
] ]
} }
......
...@@ -2,8 +2,10 @@ ...@@ -2,8 +2,10 @@
<link rel="import" href="chrome://resources/cr_elements/icons.html"> <link rel="import" href="chrome://resources/cr_elements/icons.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
<link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html">
<link rel="import" href="chrome://welcome/apps/nux_google_apps_proxy.html">
<link rel="import" href="chrome://welcome/shared/chooser_shared_css.html"> <link rel="import" href="chrome://welcome/shared/chooser_shared_css.html">
<dom-module id="apps-chooser"> <dom-module id="apps-chooser">
...@@ -39,14 +41,14 @@ ...@@ -39,14 +41,14 @@
url(chrome://welcome/apps/news_2x.png) 2x); url(chrome://welcome/apps/news_2x.png) 2x);
} }
.chrome-store { .web-store {
content: -webkit-image-set( content: -webkit-image-set(
url(chrome://welcome/apps/chrome_store_1x.png) 1x, url(chrome://welcome/apps/chrome_store_1x.png) 1x,
url(chrome://welcome/apps/chrome_store_2x.png) 2x); url(chrome://welcome/apps/chrome_store_2x.png) 2x);
} }
</style> </style>
<template is="dom-repeat" items="[[appList]]"> <template is="dom-repeat" items="[[appList_]]">
<button active$="[[item.selected]]" <button active$="[[item.selected]]"
on-click="onAppClick_" on-pointerdown="onAppPointerDown_" on-click="onAppClick_" on-pointerdown="onAppPointerDown_"
on-keyup="onAppKeyUp_" class="option"> on-keyup="onAppKeyUp_" class="option">
...@@ -59,4 +61,4 @@ ...@@ -59,4 +61,4 @@
</template> </template>
</template> </template>
<script src="apps_chooser.js"></script> <script src="apps_chooser.js"></script>
</dom-module> </dom-module>
\ No newline at end of file
...@@ -2,64 +2,35 @@ ...@@ -2,64 +2,35 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
cr.exportPath('nuxGoogleApps');
/** /**
* @const * @typedef {{
* id: number,
* name: string,
* icon: string,
* url: string,
* selected: boolean,
* }}
*/ */
var nuxGoogleApps = nuxGoogleApps || {}; nuxGoogleApps.AppItem;
/** /**
* @typedef {{ * @typedef {{
* item: !{ * item: !nuxGoogleApps.AppItem,
* name: string,
* icon: string,
* selected: boolean,
* },
* set: function(string, boolean):void * set: function(string, boolean):void
* }} * }}
*/ */
nuxGoogleApps.AppsArrayModel; nuxGoogleApps.AppItemModel;
Polymer({ Polymer({
is: 'apps-chooser', is: 'apps-chooser',
properties: { properties: {
// TODO(hcarmona): Get this list dynamically. /**
appList: { * @type {!Array<!nuxGoogleApps.AppItem>}
type: Array, * @private
value: function() { */
return [ appList_: Array,
{
name: 'Gmail',
icon: 'gmail',
selected: true,
},
{
name: 'YouTube',
icon: 'youtube',
selected: true,
},
{
name: 'Maps',
icon: 'maps',
selected: true,
},
{
name: 'Translate',
icon: 'translate',
selected: true,
},
{
name: 'News',
icon: 'news',
selected: true,
},
{
name: 'Web Store',
icon: 'chrome-store',
selected: true,
},
];
},
},
hasAppsSelected: { hasAppsSelected: {
type: Boolean, type: Boolean,
...@@ -68,17 +39,27 @@ Polymer({ ...@@ -68,17 +39,27 @@ Polymer({
} }
}, },
/** @override */
ready() {
nux.NuxGoogleAppsProxyImpl.getInstance().getGoogleAppsList().then(list => {
this.appList_ = list.map(app => {
app.selected = true; // default all items selected.
return app;
});
});
},
/** /**
* Returns an array of booleans for each selected app. * Returns an array of booleans for each selected app.
* @return {Array<boolean>} * @return {!Array<boolean>}
*/ */
getSelectedAppList() { getSelectedAppList() {
return this.appList.map(a => a.selected); return this.appList_.map(a => a.selected);
}, },
/** /**
* Handle toggling the apps selected. * Handle toggling the apps selected.
* @param {!{model: !nuxGoogleApps.AppsArrayModel}} e * @param {!{model: !nuxGoogleApps.AppItemModel}} e
* @private * @private
*/ */
onAppClick_: function(e) { onAppClick_: function(e) {
...@@ -107,6 +88,6 @@ Polymer({ ...@@ -107,6 +88,6 @@ Polymer({
* @private * @private
*/ */
computeHasAppsSelected_: function() { computeHasAppsSelected_: function() {
return this.appList.some(a => a.selected); return this.appList_.some(a => a.selected);
}, },
}); });
<link rel="import" href="chrome://resources/html/cr.html"> <link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="chrome://welcome/shared/i18n_setup.html">
<script src="nux_google_apps_proxy.js"></script> <script src="nux_google_apps_proxy.js"></script>
\ No newline at end of file
...@@ -10,6 +10,12 @@ cr.define('nux', function() { ...@@ -10,6 +10,12 @@ cr.define('nux', function() {
* @param {!Array<boolean>} selectedApps * @param {!Array<boolean>} selectedApps
*/ */
addGoogleApps(selectedApps) {} addGoogleApps(selectedApps) {}
/**
* Returns a promise for an array of Google apps.
* @return {!Promise<!Array<!nux.BookmarkListItem>>}
*/
getGoogleAppsList() {}
} }
/** @implements {nux.NuxGoogleAppsProxy} */ /** @implements {nux.NuxGoogleAppsProxy} */
...@@ -18,6 +24,11 @@ cr.define('nux', function() { ...@@ -18,6 +24,11 @@ cr.define('nux', function() {
addGoogleApps(selectedApps) { addGoogleApps(selectedApps) {
chrome.send('addGoogleApps', selectedApps); chrome.send('addGoogleApps', selectedApps);
} }
/** @override */
getGoogleAppsList() {
return cr.sendWithPromise('getGoogleAppsList');
}
} }
cr.addSingletonGetter(NuxGoogleAppsProxyImpl); cr.addSingletonGetter(NuxGoogleAppsProxyImpl);
......
# Copyright 2018 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//third_party/closure_compiler/compile_js.gni")
js_type_check("closure_compile") {
deps = [
":nux_types",
]
}
js_library("nux_types") {
deps = [
"//ui/webui/resources/js:cr",
]
}
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.exportPath('nux');
/**
* @typedef {{
* id: number,
* name: string,
* icon: string,
* url: string,
* }}
*/
nux.BookmarkListItem;
\ No newline at end of file
...@@ -15,6 +15,18 @@ source_set("constants") { ...@@ -15,6 +15,18 @@ source_set("constants") {
] ]
} }
static_library("bookmark_item") {
sources = [
"bookmark_item.cc",
"bookmark_item.h",
]
deps = [
"//base",
"//content/public/browser",
]
}
static_library("email_feature") { static_library("email_feature") {
sources = [ sources = [
"email_handler.cc", "email_handler.cc",
...@@ -28,6 +40,7 @@ static_library("email_feature") { ...@@ -28,6 +40,7 @@ static_library("email_feature") {
] ]
deps = [ deps = [
":bookmark_item",
"//chrome/app:generated_resources", "//chrome/app:generated_resources",
"//chrome/browser:resources", "//chrome/browser:resources",
"//components/bookmarks/browser", "//components/bookmarks/browser",
...@@ -56,6 +69,7 @@ static_library("google_apps_feature") { ...@@ -56,6 +69,7 @@ static_library("google_apps_feature") {
] ]
deps = [ deps = [
":bookmark_item",
"//chrome/app:generated_resources", "//chrome/app:generated_resources",
"//chrome/browser:resources", "//chrome/browser:resources",
"//components/bookmarks/browser", "//components/bookmarks/browser",
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webui/welcome/nux/bookmark_item.h"
#include "base/strings/string16.h"
#include "base/values.h"
namespace nux {
base::ListValue bookmarkItemsToListValue(const BookmarkItem items[],
size_t count) {
base::ListValue list_value;
for (size_t i = 0; i < count; ++i) {
std::unique_ptr<base::DictionaryValue> element =
std::make_unique<base::DictionaryValue>();
element->SetInteger("id", static_cast<int>(items[i].id));
element->SetString("name", items[i].name);
element->SetString("icon", items[i].webui_icon);
element->SetString("url", items[i].url);
list_value.Append(std::move(element));
}
return list_value;
}
} // namespace nux
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_WEBUI_WELCOME_NUX_BOOKMARK_ITEM_H_
#define CHROME_BROWSER_UI_WEBUI_WELCOME_NUX_BOOKMARK_ITEM_H_
#include <stddef.h>
namespace base {
class ListValue;
} // namespace base
namespace nux {
struct BookmarkItem {
const int id;
const char* name;
const char* webui_icon;
const char* url;
const int icon; // Corresponds with resource ID, used for bookmark cache.
};
base::ListValue bookmarkItemsToListValue(const BookmarkItem items[],
size_t count);
} // namespace nux
#endif // CHROME_BROWSER_UI_WEBUI_WELCOME_NUX_BOOKMARK_ITEM_H_
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/browser/ui/webui/welcome/nux/bookmark_item.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/bookmarks/common/bookmark_pref_names.h" #include "components/bookmarks/common/bookmark_pref_names.h"
...@@ -35,29 +36,22 @@ enum class EmailProviders { ...@@ -35,29 +36,22 @@ enum class EmailProviders {
kCount, kCount,
}; };
struct EmailProviderType {
const EmailProviders id;
const char* name; // Icon in WebUI should use name to match CSS.
const char* url;
const int icon; // Corresponds with resource ID, used for bookmark cache.
};
const char* kEmailInteractionHistogram = const char* kEmailInteractionHistogram =
"FirstRun.NewUserExperience.EmailInteraction"; "FirstRun.NewUserExperience.EmailInteraction";
// Strings in costants not translated because this is an experiment. // Strings in costants not translated because this is an experiment.
// Translate before wide release. // Translate before wide release.
// TODO(hcarmona): populate with icon ids. const BookmarkItem kEmail[] = {
const EmailProviderType kEmail[] = { {static_cast<int>(EmailProviders::kGmail), "Gmail", "gmail",
{EmailProviders::kGmail, "Gmail",
"https://accounts.google.com/b/0/AddMailService", IDR_NUX_EMAIL_GMAIL_1X}, "https://accounts.google.com/b/0/AddMailService", IDR_NUX_EMAIL_GMAIL_1X},
{EmailProviders::kYahoo, "Yahoo", "https://mail.yahoo.com", {static_cast<int>(EmailProviders::kYahoo), "Yahoo", "yahoo",
IDR_NUX_EMAIL_YAHOO_1X}, "https://mail.yahoo.com", IDR_NUX_EMAIL_YAHOO_1X},
{EmailProviders::kOutlook, "Outlook", "https://login.live.com/login.srf?", {static_cast<int>(EmailProviders::kOutlook), "Outlook", "outlook",
IDR_NUX_EMAIL_OUTLOOK_1X}, "https://login.live.com/login.srf?", IDR_NUX_EMAIL_OUTLOOK_1X},
{EmailProviders::kAol, "AOL", "https://mail.aol.com", IDR_NUX_EMAIL_AOL_1X}, {static_cast<int>(EmailProviders::kAol), "AOL", "aol",
{EmailProviders::kiCloud, "iCloud", "https://www.icloud.com/mail", "https://mail.aol.com", IDR_NUX_EMAIL_AOL_1X},
IDR_NUX_EMAIL_ICLOUD_1X}, {static_cast<int>(EmailProviders::kiCloud), "iCloud", "icloud",
"https://www.icloud.com/mail", IDR_NUX_EMAIL_ICLOUD_1X},
}; };
constexpr const int kEmailIconSize = 48; // Pixels. constexpr const int kEmailIconSize = 48; // Pixels.
...@@ -80,15 +74,18 @@ void EmailHandler::RegisterMessages() { ...@@ -80,15 +74,18 @@ void EmailHandler::RegisterMessages() {
"toggleBookmarkBar", "toggleBookmarkBar",
base::BindRepeating(&EmailHandler::HandleToggleBookmarkBar, base::BindRepeating(&EmailHandler::HandleToggleBookmarkBar,
base::Unretained(this))); base::Unretained(this)));
web_ui()->RegisterMessageCallback(
"getEmailList", base::BindRepeating(&EmailHandler::HandleGetEmailList,
base::Unretained(this)));
} }
void EmailHandler::HandleCacheEmailIcon(const base::ListValue* args) { void EmailHandler::HandleCacheEmailIcon(const base::ListValue* args) {
int emailId; int emailId;
args->GetInteger(0, &emailId); args->GetInteger(0, &emailId);
const EmailProviderType* selectedEmail = NULL; const BookmarkItem* selectedEmail = NULL;
for (size_t i = 0; i < base::size(kEmail); i++) { for (size_t i = 0; i < base::size(kEmail); i++) {
if ((int)kEmail[i].id == emailId) { if (static_cast<int>(kEmail[i].id) == emailId) {
selectedEmail = &kEmail[i]; selectedEmail = &kEmail[i];
break; break;
} }
...@@ -112,6 +109,15 @@ void EmailHandler::HandleToggleBookmarkBar(const base::ListValue* args) { ...@@ -112,6 +109,15 @@ void EmailHandler::HandleToggleBookmarkBar(const base::ListValue* args) {
prefs_->SetBoolean(bookmarks::prefs::kShowBookmarkBar, show); prefs_->SetBoolean(bookmarks::prefs::kShowBookmarkBar, show);
} }
void EmailHandler::HandleGetEmailList(const base::ListValue* args) {
AllowJavascript();
CHECK_EQ(1U, args->GetSize());
const base::Value* callback_id;
CHECK(args->Get(0, &callback_id));
ResolveJavascriptCallback(
*callback_id, bookmarkItemsToListValue(kEmail, base::size(kEmail)));
}
void EmailHandler::AddSources(content::WebUIDataSource* html_source, void EmailHandler::AddSources(content::WebUIDataSource* html_source,
PrefService* prefs) { PrefService* prefs) {
// Localized strings. // Localized strings.
...@@ -155,12 +161,6 @@ void EmailHandler::AddSources(content::WebUIDataSource* html_source, ...@@ -155,12 +161,6 @@ void EmailHandler::AddSources(content::WebUIDataSource* html_source,
html_source->AddResourcePath("email/yahoo_2x.png", IDR_NUX_EMAIL_YAHOO_2X); html_source->AddResourcePath("email/yahoo_2x.png", IDR_NUX_EMAIL_YAHOO_2X);
// Add constants to loadtime data // Add constants to loadtime data
for (size_t i = 0; i < (size_t)EmailProviders::kCount; ++i) {
html_source->AddInteger("email_id_" + std::to_string(i), (int)kEmail[i].id);
html_source->AddString("email_name_" + std::to_string(i), kEmail[i].name);
html_source->AddString("email_url_" + std::to_string(i), kEmail[i].url);
}
html_source->AddInteger("email_count", (int)EmailProviders::kCount);
html_source->AddBoolean( html_source->AddBoolean(
"bookmark_bar_shown", "bookmark_bar_shown",
prefs->GetBoolean(bookmarks::prefs::kShowBookmarkBar)); prefs->GetBoolean(bookmarks::prefs::kShowBookmarkBar));
......
...@@ -43,6 +43,7 @@ class EmailHandler : public content::WebUIMessageHandler { ...@@ -43,6 +43,7 @@ class EmailHandler : public content::WebUIMessageHandler {
// Callbacks for JS APIs. // Callbacks for JS APIs.
void HandleCacheEmailIcon(const base::ListValue* args); void HandleCacheEmailIcon(const base::ListValue* args);
void HandleToggleBookmarkBar(const base::ListValue* args); void HandleToggleBookmarkBar(const base::ListValue* args);
void HandleGetEmailList(const base::ListValue* args);
// Adds webui sources. // Adds webui sources.
static void AddSources(content::WebUIDataSource* html_source, static void AddSources(content::WebUIDataSource* html_source,
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#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/stl_util.h"
#include "chrome/browser/ui/webui/welcome/nux/bookmark_item.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/bookmarks/common/bookmark_pref_names.h" #include "components/bookmarks/common/bookmark_pref_names.h"
...@@ -26,7 +27,7 @@ namespace nux { ...@@ -26,7 +27,7 @@ namespace nux {
// These values are persisted to logs. Entries should not be renumbered and // These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused. // numeric values should never be reused.
enum class GoogleApps { enum class GoogleApps {
kGmail = 0, kGmailDoNotUse = 0, // Deprecated.
kYouTube = 1, kYouTube = 1,
kMaps = 2, kMaps = 2,
kTranslate = 3, kTranslate = 3,
...@@ -39,31 +40,21 @@ const char* kGoogleAppsInteractionHistogram = ...@@ -39,31 +40,21 @@ const char* kGoogleAppsInteractionHistogram =
"FirstRun.NewUserExperience.GoogleAppsInteraction"; "FirstRun.NewUserExperience.GoogleAppsInteraction";
// Strings in costants not translated because this is an experiment. // Strings in costants not translated because this is an experiment.
// Translate before wide release. // TODO(hcarmona): Translate before wide release.
const BookmarkItem kGoogleApps[] = {
constexpr const char* kGoogleAppNames[] = { {static_cast<int>(GoogleApps::kYouTube), "YouTube", "youtube",
"Gmail", "YouTube", "Maps", "Translate", "News", "Chrome Web Store", "https://youtube.com", IDR_NUX_GOOGLE_APPS_YOUTUBE_1X},
}; {static_cast<int>(GoogleApps::kMaps), "Maps", "maps",
"https://maps.google.com", IDR_NUX_GOOGLE_APPS_MAPS_1X},
constexpr const char* kGoogleAppUrls[] = { {static_cast<int>(GoogleApps::kTranslate), "Translate", "translate",
"https://gmail.com", "https://youtube.com", "https://translate.google.com", IDR_NUX_GOOGLE_APPS_TRANSLATE_1X},
"https://maps.google.com", "https://translate.google.com", {static_cast<int>(GoogleApps::kNews), "News", "news",
"https://news.google.com", "https://chrome.google.com/webstore", "https://news.google.com", IDR_NUX_GOOGLE_APPS_NEWS_1X},
{static_cast<int>(GoogleApps::kChromeWebStore), "Web Store", "web-store",
"https://chrome.google.com/webstore", IDR_NUX_GOOGLE_APPS_CHROME_STORE_1X},
}; };
constexpr const int kGoogleAppIconSize = 48; // Pixels. constexpr const int kGoogleAppIconSize = 48; // Pixels.
constexpr const int kGoogleAppIcons[] = {
IDR_NUX_EMAIL_GMAIL_1X, IDR_NUX_GOOGLE_APPS_YOUTUBE_1X,
IDR_NUX_GOOGLE_APPS_MAPS_1X, IDR_NUX_GOOGLE_APPS_TRANSLATE_1X,
IDR_NUX_GOOGLE_APPS_NEWS_1X, IDR_NUX_GOOGLE_APPS_CHROME_STORE_1X,
};
static_assert(base::size(kGoogleAppNames) == base::size(kGoogleAppUrls),
"names and urls must match");
static_assert(base::size(kGoogleAppNames) == (size_t)GoogleApps::kCount,
"names and histograms must match");
static_assert(base::size(kGoogleAppNames) == base::size(kGoogleAppIcons),
"names and icons must match");
GoogleAppsHandler::GoogleAppsHandler(PrefService* prefs, GoogleAppsHandler::GoogleAppsHandler(PrefService* prefs,
favicon::FaviconService* favicon_service) favicon::FaviconService* favicon_service)
...@@ -81,6 +72,11 @@ void GoogleAppsHandler::RegisterMessages() { ...@@ -81,6 +72,11 @@ void GoogleAppsHandler::RegisterMessages() {
"addGoogleApps", "addGoogleApps",
base::BindRepeating(&GoogleAppsHandler::HandleAddGoogleApps, base::BindRepeating(&GoogleAppsHandler::HandleAddGoogleApps,
base::Unretained(this))); base::Unretained(this)));
web_ui()->RegisterMessageCallback(
"getGoogleAppsList",
base::BindRepeating(&GoogleAppsHandler::HandleGetGoogleAppsList,
base::Unretained(this)));
} }
void GoogleAppsHandler::HandleRejectGoogleApps(const base::ListValue* args) { void GoogleAppsHandler::HandleRejectGoogleApps(const base::ListValue* args) {
...@@ -91,14 +87,14 @@ void GoogleAppsHandler::HandleRejectGoogleApps(const base::ListValue* args) { ...@@ -91,14 +87,14 @@ void GoogleAppsHandler::HandleRejectGoogleApps(const base::ListValue* args) {
void GoogleAppsHandler::HandleAddGoogleApps(const base::ListValue* args) { void GoogleAppsHandler::HandleAddGoogleApps(const base::ListValue* args) {
// Add bookmarks for all selected apps. // Add bookmarks for all selected apps.
for (size_t i = 0; i < (size_t)GoogleApps::kCount; ++i) { for (size_t i = 0; i < base::size(kGoogleApps); ++i) {
bool selected = false; bool selected = false;
CHECK(args->GetBoolean(i, &selected)); CHECK(args->GetBoolean(i, &selected));
if (selected) { if (selected) {
UMA_HISTOGRAM_ENUMERATION( UMA_HISTOGRAM_ENUMERATION(
"FirstRun.NewUserExperience.GoogleAppsSelection", (GoogleApps)i, "FirstRun.NewUserExperience.GoogleAppsSelection",
GoogleApps::kCount); (GoogleApps)kGoogleApps[i].id, GoogleApps::kCount);
GURL app_url = GURL(kGoogleAppUrls[i]); GURL app_url = GURL(kGoogleApps[i].url);
// TODO(hcarmona): Add bookmark from JS. // TODO(hcarmona): Add bookmark from JS.
// Preload the favicon cache with Chrome-bundled images. Otherwise, the // Preload the favicon cache with Chrome-bundled images. Otherwise, the
...@@ -107,7 +103,7 @@ void GoogleAppsHandler::HandleAddGoogleApps(const base::ListValue* args) { ...@@ -107,7 +103,7 @@ void GoogleAppsHandler::HandleAddGoogleApps(const base::ListValue* args) {
favicon_service_->MergeFavicon( favicon_service_->MergeFavicon(
app_url, app_url, favicon_base::IconType::kFavicon, app_url, app_url, favicon_base::IconType::kFavicon,
ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes( ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes(
kGoogleAppIcons[i]), kGoogleApps[i].icon),
gfx::Size(kGoogleAppIconSize, kGoogleAppIconSize)); gfx::Size(kGoogleAppIconSize, kGoogleAppIconSize));
} }
} }
...@@ -120,7 +116,18 @@ void GoogleAppsHandler::HandleAddGoogleApps(const base::ListValue* args) { ...@@ -120,7 +116,18 @@ void GoogleAppsHandler::HandleAddGoogleApps(const base::ListValue* args) {
GoogleAppsInteraction::kCount); GoogleAppsInteraction::kCount);
} }
void GoogleAppsHandler::AddSources(content::WebUIDataSource* html_source) { void GoogleAppsHandler::HandleGetGoogleAppsList(const base::ListValue* args) {
AllowJavascript();
CHECK_EQ(1U, args->GetSize());
const base::Value* callback_id;
CHECK(args->Get(0, &callback_id));
ResolveJavascriptCallback(
*callback_id,
bookmarkItemsToListValue(kGoogleApps, base::size(kGoogleApps)));
}
void GoogleAppsHandler::AddSources(content::WebUIDataSource* html_source,
PrefService* prefs) {
// Localized strings. // Localized strings.
html_source->AddLocalizedString("noThanks", IDS_NO_THANKS); html_source->AddLocalizedString("noThanks", IDS_NO_THANKS);
html_source->AddLocalizedString("getStarted", html_source->AddLocalizedString("getStarted",
...@@ -170,6 +177,12 @@ void GoogleAppsHandler::AddSources(content::WebUIDataSource* html_source) { ...@@ -170,6 +177,12 @@ void GoogleAppsHandler::AddSources(content::WebUIDataSource* html_source) {
IDR_NUX_GOOGLE_APPS_YOUTUBE_1X); IDR_NUX_GOOGLE_APPS_YOUTUBE_1X);
html_source->AddResourcePath("apps/youtube_2x.png", html_source->AddResourcePath("apps/youtube_2x.png",
IDR_NUX_GOOGLE_APPS_YOUTUBE_2X); IDR_NUX_GOOGLE_APPS_YOUTUBE_2X);
// Add constants to loadtime data
html_source->AddBoolean(
"bookmark_bar_shown",
prefs->GetBoolean(bookmarks::prefs::kShowBookmarkBar));
html_source->SetJsonPath("strings.js");
} }
} // namespace nux } // namespace nux
...@@ -44,9 +44,11 @@ class GoogleAppsHandler : public content::WebUIMessageHandler { ...@@ -44,9 +44,11 @@ class GoogleAppsHandler : public content::WebUIMessageHandler {
// Callbacks for JS APIs. // Callbacks for JS APIs.
void HandleRejectGoogleApps(const base::ListValue* args); void HandleRejectGoogleApps(const base::ListValue* args);
void HandleAddGoogleApps(const base::ListValue* args); void HandleAddGoogleApps(const base::ListValue* args);
void HandleGetGoogleAppsList(const base::ListValue* args);
// Adds webui sources. // Adds webui sources.
static void AddSources(content::WebUIDataSource* html_source); static void AddSources(content::WebUIDataSource* html_source,
PrefService* prefs);
private: private:
// Weak reference. // Weak reference.
......
...@@ -111,7 +111,7 @@ WelcomeUI::WelcomeUI(content::WebUI* web_ui, const GURL& url) ...@@ -111,7 +111,7 @@ WelcomeUI::WelcomeUI(content::WebUI* web_ui, const GURL& url)
web_ui->AddMessageHandler(std::make_unique<nux::GoogleAppsHandler>( web_ui->AddMessageHandler(std::make_unique<nux::GoogleAppsHandler>(
profile->GetPrefs(), FaviconServiceFactory::GetForProfile( profile->GetPrefs(), FaviconServiceFactory::GetForProfile(
profile, ServiceAccessType::EXPLICIT_ACCESS))); profile, ServiceAccessType::EXPLICIT_ACCESS)));
nux::GoogleAppsHandler::AddSources(html_source); nux::GoogleAppsHandler::AddSources(html_source, profile->GetPrefs());
// Add set-as-default onboarding module. // Add set-as-default onboarding module.
web_ui->AddMessageHandler(std::make_unique<nux::SetAsDefaultHandler>()); web_ui->AddMessageHandler(std::make_unique<nux::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