Commit 4d636ba6 authored by David Roger's avatar David Roger Committed by Commit Bot

[signin] Add files for profile customization UI

This CL adds files and plumbing for the UI bubble for profile
customization.

The bubble is behind an experimental flag. The actual content of the
bubble will be implemented in javascript in a follow up CL, in this CL
there is only a title and a button that does nothing:
https://screenshot.googleplex.com/3JhvoT3kTgXMQ4Y.png

Bug: 1130945
Change-Id: I1fab6184a69b3e86a474e9bb896e64f2f79dcbab
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2431567Reviewed-by: default avatarMonica Basta <msalama@chromium.org>
Commit-Queue: David Roger <droger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#813126}
parent ca338e5c
...@@ -675,6 +675,14 @@ ...@@ -675,6 +675,14 @@
</if> </if>
<if expr="not chromeos and not is_android"> <if expr="not chromeos and not is_android">
<!-- Profile customization bubble -->
<message name="IDS_PROFILE_CUSTOMIZATION_DONE_BUTTON_LABEL" desc="Text for the Done button on the profile customization bubble">
Done
</message>
<message name="IDS_PROFILE_CUSTOMIZATION_PICK_THEME_TITLE" desc="Title of the section of the profile customization bubble where the user can select a theme color for the profile">
Pick a theme color
</message>
<!-- Profile Picker --> <!-- Profile Picker -->
<message name="IDS_PROFILE_PICKER_ADD_SPACE_BUTTON" desc="Text for the add space button on the profile picker main view"> <message name="IDS_PROFILE_PICKER_ADD_SPACE_BUTTON" desc="Text for the add space button on the profile picker main view">
Add Add
......
1b7fd92091f037fb66ce7d607fe3eae4ed922691
\ No newline at end of file
1b7fd92091f037fb66ce7d607fe3eae4ed922691
\ No newline at end of file
...@@ -337,6 +337,8 @@ ...@@ -337,6 +337,8 @@
<include name="IDR_ERROR_DIALOG_JS" file="resources\user_manager\error_dialog.js" type="BINDATA" /> <include name="IDR_ERROR_DIALOG_JS" file="resources\user_manager\error_dialog.js" type="BINDATA" />
<include name="IDR_PROFILE_BROWSER_PROXY_HTML" file="resources\user_manager\profile_browser_proxy.html" type="BINDATA" /> <include name="IDR_PROFILE_BROWSER_PROXY_HTML" file="resources\user_manager\profile_browser_proxy.html" type="BINDATA" />
<include name="IDR_PROFILE_BROWSER_PROXY_JS" file="resources\user_manager\profile_browser_proxy.js" type="BINDATA" /> <include name="IDR_PROFILE_BROWSER_PROXY_JS" file="resources\user_manager\profile_browser_proxy.js" type="BINDATA" />
<include name="IDR_PROFILE_CUSTOMIZATION_HTML" file="resources\signin\profile_customization\profile_customization.html" type="BINDATA" />
<include name="IDR_PROFILE_CUSTOMIZATION_APP_JS" file="${root_gen_dir}\chrome\browser\resources\signin\profile_customization\profile_customization_app.js" use_base_dir="false" type="BINDATA" />
<include name="IDR_USER_MANAGER_HTML" file="resources\user_manager\user_manager.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> <include name="IDR_USER_MANAGER_HTML" file="resources\user_manager\user_manager.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
<include name="IDR_USER_MANAGER_JS" file="resources\user_manager\user_manager.js" flattenhtml="true" type="BINDATA" /> <include name="IDR_USER_MANAGER_JS" file="resources\user_manager\user_manager.js" flattenhtml="true" type="BINDATA" />
<include name="IDR_USER_MANAGER_PAGES_HTML" file="resources\user_manager\user_manager_pages.html" type="BINDATA" /> <include name="IDR_USER_MANAGER_PAGES_HTML" file="resources\user_manager\user_manager_pages.html" type="BINDATA" />
......
...@@ -9,6 +9,7 @@ group("closure_compile") { ...@@ -9,6 +9,7 @@ group("closure_compile") {
if (!is_chromeos) { if (!is_chromeos) {
deps += [ deps += [
"dice_web_signin_intercept:closure_compile", "dice_web_signin_intercept:closure_compile",
"profile_customization:closure_compile",
"profile_picker:closure_compile", "profile_picker:closure_compile",
"signin_email_confirmation:closure_compile", "signin_email_confirmation:closure_compile",
"signin_error:closure_compile", "signin_error:closure_compile",
...@@ -25,6 +26,7 @@ group("web_components") { ...@@ -25,6 +26,7 @@ group("web_components") {
if (!is_chromeos) { if (!is_chromeos) {
public_deps += [ public_deps += [
"dice_web_signin_intercept:web_components", "dice_web_signin_intercept:web_components",
"profile_customization:web_components",
"signin_email_confirmation:web_components", "signin_email_confirmation:web_components",
"signin_error:web_components", "signin_error:web_components",
"signin_reauth:web_components", "signin_reauth:web_components",
......
# Copyright 2020 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")
import("//tools/polymer/html_to_js.gni")
js_type_check("closure_compile") {
is_polymer3 = true
deps = [ ":profile_customization_app" ]
}
js_library("profile_customization_app") {
deps = [
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
]
}
html_to_js("web_components") {
js_files = [ "profile_customization_app.js" ]
}
file://components/signin/OWNERS
# COMPONENT: Services>SignIn
<!doctype html>
<html dir="$i18n{textdirection}" lang="$i18n{language}">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="chrome://resources/css/md_colors.css">
<link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
<style>
body {
height: 100vh;
margin: 0;
width: 100vw;
}
@media (prefers-color-scheme: dark) {
body {
background-color: var(--md-background-color);
}
}
</style>
</head>
<body>
<profile-customization-app></profile-customization-app>
<script type="module" src="profile_customization_app.js"></script>
</body>
</html>
<div>$i18n{profileCustomizationPickThemeTitle}</div>
<cr-button on-click="onDone_" autofocus>
$i18n{profileCustomizationDoneLabel}
</cr-button>
// Copyright 2020 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 'chrome://resources/cr_elements/cr_button/cr_button.m.js';
import './strings.m.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
Polymer({
is: 'profile-customization-app',
_template: html`{__html_template__}`,
/** @private */
onDone_() {
// TODO: call native to close the bubble
},
});
...@@ -2866,6 +2866,8 @@ static_library("ui") { ...@@ -2866,6 +2866,8 @@ static_library("ui") {
"signin/dice_web_signin_interceptor_delegate.h", "signin/dice_web_signin_interceptor_delegate.h",
"views/profiles/dice_web_signin_interception_bubble_view.cc", "views/profiles/dice_web_signin_interception_bubble_view.cc",
"views/profiles/dice_web_signin_interception_bubble_view.h", "views/profiles/dice_web_signin_interception_bubble_view.h",
"views/profiles/profile_customization_bubble_view.cc",
"views/profiles/profile_customization_bubble_view.h",
"webui/signin/dice_turn_sync_on_helper.cc", "webui/signin/dice_turn_sync_on_helper.cc",
"webui/signin/dice_turn_sync_on_helper.h", "webui/signin/dice_turn_sync_on_helper.h",
"webui/signin/dice_turn_sync_on_helper_delegate_impl.cc", "webui/signin/dice_turn_sync_on_helper_delegate_impl.cc",
...@@ -2874,6 +2876,10 @@ static_library("ui") { ...@@ -2874,6 +2876,10 @@ static_library("ui") {
"webui/signin/dice_web_signin_intercept_handler.h", "webui/signin/dice_web_signin_intercept_handler.h",
"webui/signin/dice_web_signin_intercept_ui.cc", "webui/signin/dice_web_signin_intercept_ui.cc",
"webui/signin/dice_web_signin_intercept_ui.h", "webui/signin/dice_web_signin_intercept_ui.h",
"webui/signin/profile_customization_handler.cc",
"webui/signin/profile_customization_handler.h",
"webui/signin/profile_customization_ui.cc",
"webui/signin/profile_customization_ui.h",
] ]
} }
} }
......
...@@ -28,6 +28,5 @@ void DiceWebSigninInterceptorDelegate::ShowSigninInterceptionBubble( ...@@ -28,6 +28,5 @@ void DiceWebSigninInterceptorDelegate::ShowSigninInterceptionBubble(
void DiceWebSigninInterceptorDelegate::ShowProfileCustomizationBubble( void DiceWebSigninInterceptorDelegate::ShowProfileCustomizationBubble(
Browser* browser) { Browser* browser) {
// TODO(https://crbug.com/1130945): implement the customization bubble. ShowProfileCustomizationBubbleInternal(browser);
NOTIMPLEMENTED();
} }
...@@ -34,6 +34,9 @@ class DiceWebSigninInterceptorDelegate ...@@ -34,6 +34,9 @@ class DiceWebSigninInterceptorDelegate
Browser* browser, Browser* browser,
const BubbleParameters& bubble_parameters, const BubbleParameters& bubble_parameters,
base::OnceCallback<void(bool)> callback); base::OnceCallback<void(bool)> callback);
// Implemented in profile_customization_bubble_view.cc
void ShowProfileCustomizationBubbleInternal(Browser* browser);
}; };
#endif // CHROME_BROWSER_UI_SIGNIN_DICE_WEB_SIGNIN_INTERCEPTOR_DELEGATE_H_ #endif // CHROME_BROWSER_UI_SIGNIN_DICE_WEB_SIGNIN_INTERCEPTOR_DELEGATE_H_
// Copyright 2020 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/views/profiles/profile_customization_bubble_view.h"
#include "base/feature_list.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/signin/dice_web_signin_interceptor_delegate.h"
#include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/frame/toolbar_button_provider.h"
#include "chrome/browser/ui/views/profiles/avatar_toolbar_button.h"
#include "chrome/common/webui_url_constants.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "ui/views/bubble/bubble_border.h"
#include "ui/views/controls/webview/webview.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/widget/widget.h"
#include "url/gurl.h"
namespace {
constexpr int kCustomizationBubbleHeight = 452;
constexpr int kCustomizationBubbleWidth = 290;
} // namespace
ProfileCustomizationBubbleView::~ProfileCustomizationBubbleView() = default;
// static
void ProfileCustomizationBubbleView::CreateBubble(Profile* profile,
views::View* anchor_view) {
// The widget is owned by the views system.
views::Widget* widget = views::BubbleDialogDelegateView::CreateBubble(
new ProfileCustomizationBubbleView(profile, anchor_view));
// TODO(droger): Delay showing the bubble until the web view is loaded.
widget->Show();
}
ProfileCustomizationBubbleView::ProfileCustomizationBubbleView(
Profile* profile,
views::View* anchor_view)
: views::BubbleDialogDelegateView(anchor_view,
views::BubbleBorder::TOP_RIGHT) {
// Create the web view in the native bubble.
std::unique_ptr<views::WebView> web_view =
std::make_unique<views::WebView>(profile);
web_view->LoadInitialURL(GURL(chrome::kChromeUIProfileCustomizationURL));
web_view->SetPreferredSize(
gfx::Size(kCustomizationBubbleWidth, kCustomizationBubbleHeight));
AddChildView(std::move(web_view));
set_margins(gfx::Insets());
SetButtons(ui::DIALOG_BUTTON_NONE); // Buttons are implemented in WebUI.
SetLayoutManager(std::make_unique<views::FillLayout>());
}
void DiceWebSigninInterceptorDelegate::ShowProfileCustomizationBubbleInternal(
Browser* browser) {
DCHECK(browser);
if (!base::FeatureList::IsEnabled(features::kProfilesUIRevamp))
return;
views::View* anchor_view = BrowserView::GetBrowserViewForBrowser(browser)
->toolbar_button_provider()
->GetAvatarToolbarButton();
DCHECK(anchor_view);
ProfileCustomizationBubbleView::CreateBubble(browser->profile(), anchor_view);
}
// Copyright 2020 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_VIEWS_PROFILES_PROFILE_CUSTOMIZATION_BUBBLE_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_PROFILES_PROFILE_CUSTOMIZATION_BUBBLE_VIEW_H_
#include "ui/views/bubble/bubble_dialog_delegate_view.h"
namespace views {
class View;
} // namespace views
class Profile;
// This bubble is implemented as a WebUI page rendered inside a native bubble.
class ProfileCustomizationBubbleView : public views::BubbleDialogDelegateView {
public:
~ProfileCustomizationBubbleView() override;
ProfileCustomizationBubbleView(const ProfileCustomizationBubbleView& other) =
delete;
ProfileCustomizationBubbleView& operator=(
const ProfileCustomizationBubbleView& other) = delete;
static void CreateBubble(Profile* profile, views::View* anchor_view);
private:
ProfileCustomizationBubbleView(Profile* profile, views::View* anchor_view);
};
#endif // CHROME_BROWSER_UI_VIEWS_PROFILES_PROFILE_CUSTOMIZATION_BUBBLE_VIEW_H_
...@@ -233,6 +233,7 @@ ...@@ -233,6 +233,7 @@
#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
#include "chrome/browser/ui/sync/sync_promo_ui.h" #include "chrome/browser/ui/sync/sync_promo_ui.h"
#include "chrome/browser/ui/webui/browser_switch/browser_switch_ui.h" #include "chrome/browser/ui/webui/browser_switch/browser_switch_ui.h"
#include "chrome/browser/ui/webui/signin/profile_customization_ui.h"
#include "chrome/browser/ui/webui/signin/profile_picker_ui.h" #include "chrome/browser/ui/webui/signin/profile_picker_ui.h"
#include "chrome/browser/ui/webui/signin/signin_email_confirmation_ui.h" #include "chrome/browser/ui/webui/signin/signin_email_confirmation_ui.h"
#include "chrome/browser/ui/webui/signin/signin_error_ui.h" #include "chrome/browser/ui/webui/signin/signin_error_ui.h"
...@@ -785,9 +786,10 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, ...@@ -785,9 +786,10 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
} }
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
if (url.host_piece() == chrome::kChromeUIProfilePickerHost) { if (url.host_piece() == chrome::kChromeUIProfileCustomizationHost)
return &NewWebUI<ProfileCustomizationUI>;
if (url.host_piece() == chrome::kChromeUIProfilePickerHost)
return &NewWebUI<ProfilePickerUI>; return &NewWebUI<ProfilePickerUI>;
}
if (url.host_piece() == chrome::kChromeUIMdUserManagerHost) if (url.host_piece() == chrome::kChromeUIMdUserManagerHost)
return &NewWebUI<UserManagerUI>; return &NewWebUI<UserManagerUI>;
if (url.host_piece() == chrome::kChromeUISigninErrorHost && if (url.host_piece() == chrome::kChromeUISigninErrorHost &&
......
// Copyright 2020 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/signin/profile_customization_handler.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "content/public/browser/web_ui.h"
ProfileCustomizationHandler::ProfileCustomizationHandler() = default;
ProfileCustomizationHandler::~ProfileCustomizationHandler() = default;
void ProfileCustomizationHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback(
"done", base::BindRepeating(&ProfileCustomizationHandler::HandleDone,
base::Unretained(this)));
}
void ProfileCustomizationHandler::HandleDone(const base::ListValue* args) {
// TODO: close the bubble
}
// Copyright 2020 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_SIGNIN_PROFILE_CUSTOMIZATION_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_SIGNIN_PROFILE_CUSTOMIZATION_HANDLER_H_
#include "content/public/browser/web_ui_message_handler.h"
namespace base {
class ListValue;
}
// WebUI message handler for the profile customization bubble.
class ProfileCustomizationHandler : public content::WebUIMessageHandler {
public:
ProfileCustomizationHandler();
~ProfileCustomizationHandler() override;
ProfileCustomizationHandler(const ProfileCustomizationHandler&) = delete;
ProfileCustomizationHandler& operator=(const ProfileCustomizationHandler&) =
delete;
// content::WebUIMessageHandler:
void RegisterMessages() override;
private:
void HandleDone(const base::ListValue* args);
};
#endif // CHROME_BROWSER_UI_WEBUI_SIGNIN_PROFILE_CUSTOMIZATION_HANDLER_H_
// Copyright 2020 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/signin/profile_customization_ui.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/signin/profile_customization_handler.h"
#include "chrome/browser/ui/webui/webui_util.h"
#include "chrome/common/webui_url_constants.h"
#include "chrome/grit/browser_resources.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#include "services/network/public/mojom/content_security_policy.mojom.h"
#include "ui/base/webui/web_ui_util.h"
#include "ui/resources/grit/webui_resources.h"
ProfileCustomizationUI::ProfileCustomizationUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
content::WebUIDataSource* source = content::WebUIDataSource::Create(
chrome::kChromeUIProfileCustomizationHost);
source->SetDefaultResource(IDR_PROFILE_CUSTOMIZATION_HTML);
source->AddResourcePath("profile_customization_app.js",
IDR_PROFILE_CUSTOMIZATION_APP_JS);
// Localized strings.
source->UseStringsJs();
source->EnableReplaceI18nInJS();
static constexpr webui::LocalizedString kLocalizedStrings[] = {
{"profileCustomizationDoneLabel",
IDS_PROFILE_CUSTOMIZATION_DONE_BUTTON_LABEL},
{"profileCustomizationPickThemeTitle",
IDS_PROFILE_CUSTOMIZATION_PICK_THEME_TITLE},
};
webui::AddLocalizedStringsBulk(source, kLocalizedStrings);
// Resources for testing.
source->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::ScriptSrc,
"script-src chrome://resources chrome://test 'self';");
source->DisableTrustedTypesCSP();
source->AddResourcePath("test_loader.js", IDR_WEBUI_JS_TEST_LOADER);
source->AddResourcePath("test_loader.html", IDR_WEBUI_HTML_TEST_LOADER);
content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source);
web_ui->AddMessageHandler(std::make_unique<ProfileCustomizationHandler>());
}
ProfileCustomizationUI::~ProfileCustomizationUI() = default;
// Copyright 2020 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_SIGNIN_PROFILE_CUSTOMIZATION_UI_H_
#define CHROME_BROWSER_UI_WEBUI_SIGNIN_PROFILE_CUSTOMIZATION_UI_H_
#include "content/public/browser/web_ui_controller.h"
namespace content {
class WebUI;
}
class ProfileCustomizationUI : public content::WebUIController {
public:
explicit ProfileCustomizationUI(content::WebUI* web_ui);
~ProfileCustomizationUI() override;
ProfileCustomizationUI(const ProfileCustomizationUI&) = delete;
ProfileCustomizationUI& operator=(const ProfileCustomizationUI&) = delete;
};
#endif // CHROME_BROWSER_UI_WEBUI_SIGNIN_PROFILE_CUSTOMIZATION_UI_H_
...@@ -344,11 +344,6 @@ const char kChromeUIDiscardsHost[] = "discards"; ...@@ -344,11 +344,6 @@ const char kChromeUIDiscardsHost[] = "discards";
const char kChromeUIDiscardsURL[] = "chrome://discards/"; const char kChromeUIDiscardsURL[] = "chrome://discards/";
const char kChromeUIHatsHost[] = "hats"; const char kChromeUIHatsHost[] = "hats";
const char kChromeUIHatsURL[] = "chrome://hats/"; const char kChromeUIHatsURL[] = "chrome://hats/";
#if !defined(OS_CHROMEOS)
const char kChromeUIProfilePickerHost[] = "profile-picker";
const char kChromeUIProfilePickerUrl[] = "chrome://profile-picker/";
const char kChromeUIProfilePickerStartupQuery[] = "startup";
#endif
#endif #endif
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
...@@ -369,6 +364,12 @@ const char kChromeUISandboxHost[] = "sandbox"; ...@@ -369,6 +364,12 @@ const char kChromeUISandboxHost[] = "sandbox";
(defined(OS_LINUX) && !defined(OS_CHROMEOS)) (defined(OS_LINUX) && !defined(OS_CHROMEOS))
const char kChromeUIBrowserSwitchHost[] = "browser-switch"; const char kChromeUIBrowserSwitchHost[] = "browser-switch";
const char kChromeUIBrowserSwitchURL[] = "chrome://browser-switch/"; const char kChromeUIBrowserSwitchURL[] = "chrome://browser-switch/";
const char kChromeUIProfileCustomizationHost[] = "profile-customization";
const char kChromeUIProfileCustomizationURL[] =
"chrome://profile-customization";
const char kChromeUIProfilePickerHost[] = "profile-picker";
const char kChromeUIProfilePickerUrl[] = "chrome://profile-picker/";
const char kChromeUIProfilePickerStartupQuery[] = "startup";
#endif #endif
#if ((defined(OS_LINUX) || defined(OS_CHROMEOS)) && defined(TOOLKIT_VIEWS)) || \ #if ((defined(OS_LINUX) || defined(OS_CHROMEOS)) && defined(TOOLKIT_VIEWS)) || \
......
...@@ -297,9 +297,6 @@ extern const char kChromeUIDiscardsHost[]; ...@@ -297,9 +297,6 @@ extern const char kChromeUIDiscardsHost[];
extern const char kChromeUIDiscardsURL[]; extern const char kChromeUIDiscardsURL[];
extern const char kChromeUIHatsHost[]; extern const char kChromeUIHatsHost[];
extern const char kChromeUIHatsURL[]; extern const char kChromeUIHatsURL[];
extern const char kChromeUIProfilePickerHost[];
extern const char kChromeUIProfilePickerUrl[];
extern const char kChromeUIProfilePickerStartupQuery[];
#endif #endif
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
...@@ -320,6 +317,11 @@ extern const char kChromeUISandboxHost[]; ...@@ -320,6 +317,11 @@ extern const char kChromeUISandboxHost[];
(defined(OS_LINUX) && !defined(OS_CHROMEOS)) (defined(OS_LINUX) && !defined(OS_CHROMEOS))
extern const char kChromeUIBrowserSwitchHost[]; extern const char kChromeUIBrowserSwitchHost[];
extern const char kChromeUIBrowserSwitchURL[]; extern const char kChromeUIBrowserSwitchURL[];
extern const char kChromeUIProfileCustomizationHost[];
extern const char kChromeUIProfileCustomizationURL[];
extern const char kChromeUIProfilePickerHost[];
extern const char kChromeUIProfilePickerUrl[];
extern const char kChromeUIProfilePickerStartupQuery[];
#endif #endif
#if ((defined(OS_LINUX) || defined(OS_CHROMEOS)) && defined(TOOLKIT_VIEWS)) || \ #if ((defined(OS_LINUX) || defined(OS_CHROMEOS)) && defined(TOOLKIT_VIEWS)) || \
......
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