NUX Google Apps - Initial WebUI

Add WebUI at chrome://welcome/apps.
WebUI is only shown when NuxGoogleApps feature is enabled.

Bug: 832938
Cq-Include-Trybots: luci.chromium.try:closure_compilation
Change-Id: I46721ac4474a4335d9c0dfdb977e09622ae0ac1c
Reviewed-on: https://chromium-review.googlesource.com/1066503
Commit-Queue: Hector Carmona <[email protected]>
Reviewed-by: Jochen Eisinger <[email protected]>
Reviewed-by: Steven Bennetts <[email protected]>
Reviewed-by: Demetrios Papadopoulos <[email protected]>
Cr-Commit-Position: refs/heads/master@{#569424}
diff --git a/components/components_strings.grd b/components/components_strings.grd
index 4ee9c7b..96710cf 100644
--- a/components/components_strings.grd
+++ b/components/components_strings.grd
@@ -197,6 +197,7 @@
       <part file="history_strings.grdp" />
       <part file="login_dialog_strings.grdp" />
       <part file="new_or_sad_tab_strings.grdp" />
+      <part file="nux_google_apps_strings.grdp" />
       <part file="ntp_snippets_strings.grdp" />
       <part file="omnibox_strings.grdp" />
       <part file="page_info_strings.grdp" />
diff --git a/components/nux_google_apps/BUILD.gn b/components/nux_google_apps/BUILD.gn
new file mode 100644
index 0000000..20286ee
--- /dev/null
+++ b/components/nux_google_apps/BUILD.gn
@@ -0,0 +1,39 @@
+# 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("//build/buildflag_header.gni")
+import("//components/nux_google_apps/features.gni")
+
+# Always required.
+buildflag_header("buildflags") {
+  header = "buildflags.h"
+  flags = [ "ENABLE_NUX_GOOGLE_APPS=$enable_nux_google_apps" ]
+}
+
+if (enable_nux_google_apps) {
+  static_library("nux_google_apps_feature") {
+    sources = [
+      "constants.cc",
+      "constants.h",
+      "webui.cc",
+      "webui.h",
+    ]
+
+    public_deps = [
+      "//base",
+      "//net",
+      "//url",
+    ]
+
+    deps = [
+      "//components/pref_registry",
+      "//components/prefs",
+      "//components/resources",
+      "//components/strings",
+      "//components/variations",
+      "//content/public/browser",
+      "//ui/base",
+    ]
+  }
+}
diff --git a/components/nux_google_apps/DEPS b/components/nux_google_apps/DEPS
new file mode 100644
index 0000000..1a6893c
--- /dev/null
+++ b/components/nux_google_apps/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  "+components/grit",
+  "+components/strings/grit/components_strings.h",
+  "+content/public/browser",
+]
diff --git a/components/nux_google_apps/OWNERS b/components/nux_google_apps/OWNERS
new file mode 100644
index 0000000..08ee1a9
--- /dev/null
+++ b/components/nux_google_apps/OWNERS
@@ -0,0 +1 @@
[email protected]
diff --git a/components/nux_google_apps/README b/components/nux_google_apps/README
new file mode 100644
index 0000000..4218a87
--- /dev/null
+++ b/components/nux_google_apps/README
@@ -0,0 +1,5 @@
+New User Experience Experiment (NUX). Code here will enable new users to
+bookmark popular Google Apps as part of the first run steps.
+
+Feature is initially Windows Only. After collecting stats, we will determine
+how useful it is for users, this data will help decide next steps for component.
diff --git a/components/nux_google_apps/constants.cc b/components/nux_google_apps/constants.cc
new file mode 100644
index 0000000..92d842b
--- /dev/null
+++ b/components/nux_google_apps/constants.cc
@@ -0,0 +1,14 @@
+// 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 "components/nux_google_apps/constants.h"
+
+#include "base/feature_list.h"
+
+namespace nux_google_apps {
+
+extern const base::Feature kNuxGoogleAppsFeature{
+    "NuxGoogleApps", base::FEATURE_DISABLED_BY_DEFAULT};
+
+}  // namespace nux_google_apps
diff --git a/components/nux_google_apps/constants.h b/components/nux_google_apps/constants.h
new file mode 100644
index 0000000..b4a683b
--- /dev/null
+++ b/components/nux_google_apps/constants.h
@@ -0,0 +1,18 @@
+// 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 COMPONENTS_NUX_GOOGLE_APPS_CONSTANTS_H_
+#define COMPONENTS_NUX_GOOGLE_APPS_CONSTANTS_H_
+
+namespace base {
+struct Feature;
+}  // namespace base
+
+namespace nux_google_apps {
+
+extern const base::Feature kNuxGoogleAppsFeature;
+
+}  // namespace nux_google_apps
+
+#endif  // COMPONENTS_NUX_GOOGLE_APPS_CONSTANTS_H_
diff --git a/components/nux_google_apps/features.gni b/components/nux_google_apps/features.gni
new file mode 100644
index 0000000..6896e1e
--- /dev/null
+++ b/components/nux_google_apps/features.gni
@@ -0,0 +1,10 @@
+# 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("//build/config/features.gni")
+
+declare_args() {
+  # Only supported on windows.
+  enable_nux_google_apps = is_win
+}
diff --git a/components/nux_google_apps/resources/BUILD.gn b/components/nux_google_apps/resources/BUILD.gn
new file mode 100644
index 0000000..aa232167
--- /dev/null
+++ b/components/nux_google_apps/resources/BUILD.gn
@@ -0,0 +1,22 @@
+# 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 = [
+    ":apps_chooser",
+    ":nux_google_apps",
+  ]
+}
+
+js_library("apps_chooser") {
+  deps = []
+}
+
+js_library("nux_google_apps") {
+  deps = [
+    ":apps_chooser",
+  ]
+}
diff --git a/components/nux_google_apps/resources/apps_chooser.html b/components/nux_google_apps/resources/apps_chooser.html
new file mode 100644
index 0000000..437954a
--- /dev/null
+++ b/components/nux_google_apps/resources/apps_chooser.html
@@ -0,0 +1,103 @@
+<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/shared_vars_css.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">
+
+<dom-module id="apps-chooser">
+  <template>
+    <style>
+      :host {
+        display: flex;
+        flex-direction: column;
+      }
+
+      .app-icon {
+        -webkit-margin-end: 16px;
+        -webkit-margin-start: 4px;
+      }
+
+      iron-icon {
+        -webkit-margin-end: 48px;
+      }
+
+      [active] iron-icon[icon="cr:check"] {
+        --iron-icon-fill-color: var(--google-blue-600);
+        opacity: unset;
+      }
+
+      iron-icon[icon="cr:check"] {
+        opacity: 0;
+      }
+
+      .gmail {
+        content: -webkit-image-set(
+            url(chrome://welcome/apps/gmail_1x.png) 1x,
+            url(chrome://welcome/apps/gmail_2x.png) 2x);
+      }
+
+      .youtube {
+        content: -webkit-image-set(
+            url(chrome://welcome/apps/youtube_1x.png) 1x,
+            url(chrome://welcome/apps/youtube_2x.png) 2x);
+      }
+
+      .maps {
+        content: -webkit-image-set(
+            url(chrome://welcome/apps/maps_1x.png) 1x,
+            url(chrome://welcome/apps/maps_2x.png) 2x);
+      }
+
+      .translate {
+        content: -webkit-image-set(
+            url(chrome://welcome/apps/translate_1x.png) 1x,
+            url(chrome://welcome/apps/translate_2x.png) 2x);
+      }
+
+      .news {
+        content: -webkit-image-set(
+            url(chrome://welcome/apps/news_1x.png) 1x,
+            url(chrome://welcome/apps/news_2x.png) 2x);
+      }
+
+      .chrome_store {
+        content: -webkit-image-set(
+            url(chrome://welcome/apps/chrome_store_1x.png) 1x,
+            url(chrome://welcome/apps/chrome_store_2x.png) 2x);
+      }
+
+      paper-button:first-of-type {
+        border-top: unset;
+      }
+
+      paper-button {
+        border-radius: 0;
+        border-top: var(--cr-section_-_border-top);
+        display: flex;
+        margin: 0;
+        padding: 12px 0;
+        text-transform: unset;
+      }
+
+      paper-button:not([raised]).keyboard-focus {
+        outline-width: unset;
+        font-weight: unset;
+      }
+
+      .app-name {
+        flex: 1;
+      }
+    </style>
+
+    <template is="dom-repeat" items="[[appList]]">
+      <paper-button toggles noink
+          active$="[[item.selected]]" on-click="onAppClick_">
+        <div class$="[[item.icon]] app-icon"></div>
+        <div class="app-name">[[item.name]]</div>
+        <iron-icon icon="cr:check"></iron-icon>
+      </paper-button>
+    </template>
+  </template>
+  <script src="apps_chooser.js"></script>
+</dom-module>
diff --git a/components/nux_google_apps/resources/apps_chooser.js b/components/nux_google_apps/resources/apps_chooser.js
new file mode 100644
index 0000000..cac520c
--- /dev/null
+++ b/components/nux_google_apps/resources/apps_chooser.js
@@ -0,0 +1,73 @@
+// 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.
+
+/**
+ * @const
+ */
+var nux_google_apps = nux_google_apps || {};
+
+/**
+ * @typedef {{
+ *   item: !{
+ *     name: string,
+ *     icon: string,
+ *     selected: boolean,
+ *   },
+ *   set: function(string, boolean):void
+ * }}
+ */
+nux_google_apps.AppsArrayModel;
+
+Polymer({
+  is: 'apps-chooser',
+  properties: {
+    // TODO(hcarmona): Get this list dynamically.
+    appList: {
+      type: Array,
+      value: function() {
+        return [
+          {
+            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: 'Chrome Web Store',
+            icon: 'chrome_store',
+            selected: true,
+          },
+        ];
+      },
+    },
+  },
+
+  /**
+   * Handle toggling the apps selected.
+   * @param {!{model: !nux_google_apps.AppsArrayModel}} e
+   * @private
+   */
+  onAppClick_: function(e) {
+    e.model.set('item.selected', !e.model.item.selected);
+  },
+});
diff --git a/components/nux_google_apps/resources/chrome_store_24dp_1x.png b/components/nux_google_apps/resources/chrome_store_24dp_1x.png
new file mode 100644
index 0000000..9ffad9e
--- /dev/null
+++ b/components/nux_google_apps/resources/chrome_store_24dp_1x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/chrome_store_24dp_2x.png b/components/nux_google_apps/resources/chrome_store_24dp_2x.png
new file mode 100644
index 0000000..4307c07
--- /dev/null
+++ b/components/nux_google_apps/resources/chrome_store_24dp_2x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/gmail_24dp_1x.png b/components/nux_google_apps/resources/gmail_24dp_1x.png
new file mode 100644
index 0000000..220e974
--- /dev/null
+++ b/components/nux_google_apps/resources/gmail_24dp_1x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/gmail_24dp_2x.png b/components/nux_google_apps/resources/gmail_24dp_2x.png
new file mode 100644
index 0000000..2ab3dbd
--- /dev/null
+++ b/components/nux_google_apps/resources/gmail_24dp_2x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/maps_24dp_1x.png b/components/nux_google_apps/resources/maps_24dp_1x.png
new file mode 100644
index 0000000..110bff3
--- /dev/null
+++ b/components/nux_google_apps/resources/maps_24dp_1x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/maps_24dp_2x.png b/components/nux_google_apps/resources/maps_24dp_2x.png
new file mode 100644
index 0000000..041a617
--- /dev/null
+++ b/components/nux_google_apps/resources/maps_24dp_2x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/news_24dp_1x.png b/components/nux_google_apps/resources/news_24dp_1x.png
new file mode 100644
index 0000000..6842ad5
--- /dev/null
+++ b/components/nux_google_apps/resources/news_24dp_1x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/news_24dp_2x.png b/components/nux_google_apps/resources/news_24dp_2x.png
new file mode 100644
index 0000000..4c3598b2
--- /dev/null
+++ b/components/nux_google_apps/resources/news_24dp_2x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/nux_google_apps.html b/components/nux_google_apps/resources/nux_google_apps.html
new file mode 100644
index 0000000..74a77f0f
--- /dev/null
+++ b/components/nux_google_apps/resources/nux_google_apps.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>$i18n{headerText}</title>
+
+<link rel="import" href="chrome://resources/html/polymer.html">
+
+<link rel="import" href="chrome://resources/cr_elements/paper_button_style_css.html">
+<link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html">
+<link rel="import" href="chrome://welcome/apps/apps_chooser.html">
+
+<dom-module id="nux-google-apps">
+  <template>
+    <style include="paper-button-style">
+      body {
+        margin: 0;
+      }
+
+      .apps-ask {
+        margin-left: auto;
+        margin-right: auto;
+        margin-top: 116px;
+        max-width: 568px;
+      }
+
+      .chrome-logo {
+        content: -webkit-image-set(
+            url('chrome://welcome/logo.png') 1x,
+            url('chrome://welcome/logo2x.png') 2x);
+        height: 40px;
+        margin-bottom: 36px;
+        width: 40px;
+      }
+
+      h1 {
+        color: #202124;
+        font-size: 28px;
+        opacity: .8;
+        margin-bottom: 16px;
+      }
+
+      .description {
+        color: #5f6368;
+        font-size: 16px;
+        margin-bottom: 24px;
+      }
+
+      apps-chooser {
+        color: #202124;
+        font-size: 14px;
+        margin-bottom: 48px;
+      }
+
+      paper-button {
+        font-size: 14px;
+      }
+
+      .button-bar {
+        display: flex;
+        justify-content: space-between;
+      }
+    </style>
+
+    <div class="apps-ask">
+      <div class="chrome-logo"></div>
+      <h1>$i18n{headerText}</h1>
+      <div class="description">$i18n{nuxDescription}</div>
+
+      <apps-chooser></apps-chooser>
+
+      <div class="button-bar">
+        <paper-button>$i18n{noThanks}</paper-button>
+        <paper-button class="action-button">$i18n{getStarted}</paper-button>
+      </div>
+    </div>
+  </template>
+  <script src="apps/nux_google_apps.js"></script>
+</dom-module>
+
+<nux-google-apps></nux-google-apps>
+<link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
+
+</html>
diff --git a/components/nux_google_apps/resources/nux_google_apps.js b/components/nux_google_apps/resources/nux_google_apps.js
new file mode 100644
index 0000000..9f7a8ea
--- /dev/null
+++ b/components/nux_google_apps/resources/nux_google_apps.js
@@ -0,0 +1,7 @@
+// 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.
+
+Polymer({
+  is: 'nux-google-apps',
+});
diff --git a/components/nux_google_apps/resources/translate_24dp_1x.png b/components/nux_google_apps/resources/translate_24dp_1x.png
new file mode 100644
index 0000000..023417f
--- /dev/null
+++ b/components/nux_google_apps/resources/translate_24dp_1x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/translate_24dp_2x.png b/components/nux_google_apps/resources/translate_24dp_2x.png
new file mode 100644
index 0000000..a03417c
--- /dev/null
+++ b/components/nux_google_apps/resources/translate_24dp_2x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/youtube_24dp_1x.png b/components/nux_google_apps/resources/youtube_24dp_1x.png
new file mode 100644
index 0000000..5a346af
--- /dev/null
+++ b/components/nux_google_apps/resources/youtube_24dp_1x.png
Binary files differ
diff --git a/components/nux_google_apps/resources/youtube_24dp_2x.png b/components/nux_google_apps/resources/youtube_24dp_2x.png
new file mode 100644
index 0000000..4d407117
--- /dev/null
+++ b/components/nux_google_apps/resources/youtube_24dp_2x.png
Binary files differ
diff --git a/components/nux_google_apps/webui.cc b/components/nux_google_apps/webui.cc
new file mode 100644
index 0000000..425c242
--- /dev/null
+++ b/components/nux_google_apps/webui.cc
@@ -0,0 +1,57 @@
+// 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 "components/nux_google_apps/webui.h"
+
+#include "base/metrics/field_trial_params.h"
+#include "components/grit/components_resources.h"
+#include "components/grit/components_scaled_resources.h"
+#include "components/nux_google_apps/constants.h"
+#include "components/strings/grit/components_strings.h"
+#include "content/public/browser/web_ui_data_source.h"
+
+namespace nux_google_apps {
+
+void AddSources(content::WebUIDataSource* html_source) {
+  // Localized strings.
+  html_source->AddLocalizedString("noThanks", IDS_NO_THANKS);
+  html_source->AddLocalizedString("getStarted",
+                                  IDS_NUX_GOOGLE_APPS_GET_STARTED);
+  html_source->AddLocalizedString("nuxDescription",
+                                  IDS_NUX_GOOGLE_APPS_DESCRIPTION);
+
+  // Add required resources.
+  html_source->AddResourcePath("apps", IDR_NUX_GOOGLE_APPS_HTML);
+  html_source->AddResourcePath("apps/nux_google_apps.js",
+                               IDR_NUX_GOOGLE_APPS_JS);
+
+  html_source->AddResourcePath("apps/apps_chooser.html",
+                               IDR_NUX_GOOGLE_APPS_CHOOSER_HTML);
+  html_source->AddResourcePath("apps/apps_chooser.js",
+                               IDR_NUX_GOOGLE_APPS_CHOOSER_JS);
+
+  // Add icons
+  html_source->AddResourcePath("apps/chrome_store_1x.png",
+                               IDR_NUX_GOOGLE_APPS_CHROME_STORE_1X);
+  html_source->AddResourcePath("apps/chrome_store_2x.png",
+                               IDR_NUX_GOOGLE_APPS_CHROME_STORE_2X);
+  html_source->AddResourcePath("apps/gmail_1x.png",
+                               IDR_NUX_GOOGLE_APPS_GMAIL_1X);
+  html_source->AddResourcePath("apps/gmail_2x.png",
+                               IDR_NUX_GOOGLE_APPS_GMAIL_2X);
+  html_source->AddResourcePath("apps/maps_1x.png", IDR_NUX_GOOGLE_APPS_MAPS_1X);
+  html_source->AddResourcePath("apps/maps_2x.png", IDR_NUX_GOOGLE_APPS_MAPS_2X);
+  html_source->AddResourcePath("apps/news_1x.png", IDR_NUX_GOOGLE_APPS_NEWS_1X);
+  html_source->AddResourcePath("apps/news_2x.png", IDR_NUX_GOOGLE_APPS_NEWS_2X);
+  html_source->AddResourcePath("apps/translate_1x.png",
+                               IDR_NUX_GOOGLE_APPS_TRANSLATE_1X);
+  html_source->AddResourcePath("apps/translate_2x.png",
+                               IDR_NUX_GOOGLE_APPS_TRANSLATE_2X);
+  html_source->AddResourcePath("apps/youtube_1x.png",
+                               IDR_NUX_GOOGLE_APPS_YOUTUBE_1X);
+  html_source->AddResourcePath("apps/youtube_2x.png",
+                               IDR_NUX_GOOGLE_APPS_YOUTUBE_2X);
+}
+
+}  // namespace nux_google_apps
diff --git a/components/nux_google_apps/webui.h b/components/nux_google_apps/webui.h
new file mode 100644
index 0000000..e9c752a1
--- /dev/null
+++ b/components/nux_google_apps/webui.h
@@ -0,0 +1,17 @@
+// 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 COMPONENTS_NUX_GOOGLE_APPS_WEBUI_H_
+#define COMPONENTS_NUX_GOOGLE_APPS_WEBUI_H_
+
+#include "base/macros.h"
+#include "content/public/browser/web_ui_data_source.h"
+
+namespace nux_google_apps {
+
+void AddSources(content::WebUIDataSource* html_source);
+
+}  // namespace nux_google_apps
+
+#endif  // COMPONENTS_NUX_GOOGLE_APPS_WEBUI_H_
diff --git a/components/nux_google_apps_strings.grdp b/components/nux_google_apps_strings.grdp
new file mode 100644
index 0000000..a3610ce
--- /dev/null
+++ b/components/nux_google_apps_strings.grdp
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+  <message name="IDS_NUX_GOOGLE_APPS_GET_STARTED" desc="Message for a confirmation button that will add the selected apps from a list.">
+    Get started
+  </message>
+  <message name="IDS_NUX_GOOGLE_APPS_DESCRIPTION" desc="Description of what selecting apps and pressing 'Get started' will do.">
+    Get quick access to your favorite Google Apps
+  </message>
+</grit-part>
diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn
index b240ad23..55bf8ddf 100644
--- a/components/resources/BUILD.gn
+++ b/components/resources/BUILD.gn
@@ -2,6 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//components/nux_google_apps/features.gni")
 import("//printing/buildflags/buildflags.gni")
 import("//tools/grit/grit_rule.gni")
 import("//third_party/brotli/brotli.gni")
@@ -32,6 +33,7 @@
   defines = [
     "enable_basic_printing=$enable_basic_printing",
     "enable_print_preview=$enable_print_preview",
+    "enable_nux_google_apps=$enable_nux_google_apps",
   ]
 
   deps = [
diff --git a/components/resources/components_resources.grd b/components/resources/components_resources.grd
index 4623e36e..803a4ce 100644
--- a/components/resources/components_resources.grd
+++ b/components/resources/components_resources.grd
@@ -16,6 +16,9 @@
       <part file="net_log_resources.grdp" />
       <part file="neterror_resources.grdp" />
       <part file="ntp_tiles_resources.grdp" />
+      <if expr="enable_nux_google_apps">
+        <part file="nux_google_apps.grdp" />
+      </if>
       <part file="offline_pages_resources.grdp" />
       <part file="password_manager_internals_resources.grdp" />
       <part file="printing_resources.grdp" />
diff --git a/components/resources/nux_google_apps.grdp b/components/resources/nux_google_apps.grdp
new file mode 100644
index 0000000..0218fa6
--- /dev/null
+++ b/components/resources/nux_google_apps.grdp
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+  <include name="IDR_NUX_GOOGLE_APPS_HTML" file="../nux_google_apps/resources/nux_google_apps.html" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_JS" file="../nux_google_apps/resources/nux_google_apps.js" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_CHOOSER_HTML" file="../nux_google_apps/resources/apps_chooser.html" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_CHOOSER_JS" file="../nux_google_apps/resources/apps_chooser.js" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_CHROME_STORE_1X" file="../nux_google_apps/resources/chrome_store_24dp_1x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_CHROME_STORE_2X" file="../nux_google_apps/resources/chrome_store_24dp_2x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_GMAIL_1X" file="../nux_google_apps/resources/gmail_24dp_1x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_GMAIL_2X" file="../nux_google_apps/resources/gmail_24dp_2x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_MAPS_1X" file="../nux_google_apps/resources/maps_24dp_1x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_MAPS_2X" file="../nux_google_apps/resources/maps_24dp_2x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_NEWS_1X" file="../nux_google_apps/resources/news_24dp_1x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_NEWS_2X" file="../nux_google_apps/resources/news_24dp_2x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_TRANSLATE_1X" file="../nux_google_apps/resources/translate_24dp_1x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_TRANSLATE_2X" file="../nux_google_apps/resources/translate_24dp_2x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_YOUTUBE_1X" file="../nux_google_apps/resources/youtube_24dp_1x.png" type="BINDATA" />
+  <include name="IDR_NUX_GOOGLE_APPS_YOUTUBE_2X" file="../nux_google_apps/resources/youtube_24dp_2x.png" type="BINDATA" />
+</grit-part>