前言
在68.0.3440.84上,准备加一个webui.
webui的意思是内建的url, 不是远程的url.
官方文档有2个:
https://chromium.googlesource.com/chromium/src/+/master/docs/webui_in_components.md
https://www.chromium.org/developers/webui
按照官方的说法,这2种方法都能加webui.
比较起来,第一种好些,可以将加入的实现文件归在一起,好维护。
先按照第一种方法做实验,不成功。对照报错信息看, 是ui_0.lib报错。说定义的实现类找不到,那明显是实现文件没编进工程引起的。或者新加入的实现,编译后的obj, 没包进ui_0.lib. 估计是编进components的obj, 不在ui_0.lib的引用中。但是实现文件的编译,都是靠Build.gn手工配出来的,第一次玩,也不可能深究工程配置。看官方文档说的就那么几步(说的好轻松),再找不到详细说法了,放弃第一种方法。
按照第二种方法做的时候,靠谱点。报错信息只是说定义的资源ID找不到。对照已有的webui实现,对照了一下。发现资源ID定义的地方和文档上描述的不同,还发现头文件没包。调整后,这种方法编译过了。输入内建url后,可以输出实验的本地web页面。
还有2个问题,还没有实验。等有时间时,继续实验.
- 官方的内建url只能是chrome://xx, 如果换成my_url://xx, 不走新建webui的流程,要跟下,看看在哪跑掉的。
- 官方文档,在内建url显示后,还可以用c++和js交互,还可以弹出新的web-ui. 时间不够了,等后续再做实验。
git可以在本地提交,还挺好用的。
用autoninjia编译工程, 配合Everything找文件蛮方便,等工程都编译过了,再进vs2017修改实现.
实验
新建 Z:\chromium\src\chrome\browser\resources\hello_world.html
<!DOCTYPE HTML>
<html i18n-values="dir:textdirection">
<head>
<meta charset="utf-8">
<title i18n-content="helloWorldTitle"></title>
<link rel="stylesheet" href="hello_world.css">
<script src="chrome://resources/js/cr.js"></script>
<script src="chrome://resources/js/load_time_data.js"></script>
<script src="chrome://resources/js/util.js"></script>
<script src="strings.js"></script>
<script src="hello_world.js"></script>
</head>
<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
<h1 i18n-content="helloWorldTitle"></h1>
<p id="welcome-message"></p>
<script src="chrome://resources/js/i18n_template.js"></script>
</body>
</html>
新建Z:\chromium\src\chrome\browser\resources\hello_world.css
p {
white-space: pre-wrap;
}
新建Z:\chromium\src\chrome\browser\resources\hello_world.js
cr.define('hello_world', function() {
'use strict';
/**
* Be polite and insert translated hello world strings for the user on loading.
*/
function initialize() {
$('welcome-message').textContent = loadTimeData.getStringF('welcomeMessage',
loadTimeData.getString('userName'));
}
// Return an object with all of the exports.
return {
initialize: initialize,
};
});
document.addEventListener('DOMContentLoaded', hello_world.initialize);
编辑Z:\chromium\src\chrome\browser\browser_resources.grd
加入resources\hello_world.*
<?xml version="1.0" encoding="UTF-8"?>
<grit latest_public_release="0" current_release="1" output_all_resource_defines="false">
<outputs>
<output filename="grit/browser_resources.h" type="rc_header">
<emit emit_type='prepend'></emit>
</output>
<output filename="browser_resources.pak" type="data_package" />
</outputs>
<release seq="1">
<structures>
<if expr="chromeos">
<structure name="IDR_FIRST_RUN_HTML" file="resources\chromeos\first_run\first_run.html" flattenhtml="true" type="chrome_html"/>
<structure name="IDR_FIRST_RUN_JS" file="resources\chromeos\first_run\first_run.js" flattenhtml="true" type="chrome_html" />
</if>
<if expr="not is_android">
<structure name="IDR_INCOGNITO_TAB_HTML" file="resources\ntp4\incognito_tab.html" flattenhtml="true" type="chrome_html" />
<structure name="IDR_GUEST_TAB_HTML" file="resources\ntp4\guest_tab.html" flattenhtml="true" type="chrome_html" />
</if>
<if expr="chromeos">
<structure name="IDR_LOCK_HTML" file="resources\chromeos\login\lock.html" flattenhtml="true" type="chrome_html" variables="OOBE=lock" expand_variables="true"/>
<structure name="IDR_LOCK_JS" file="resources\chromeos\login\lock.js" flattenhtml="true" type="chrome_html" variables="OOBE=lock" expand_variables="true" />
<structure name="IDR_MD_LOCK_HTML" file="resources\chromeos\login\md_lock.html" flattenhtml="true" type="chrome_html" variables="OOBE=md_lock" expand_variables="true"/>
<structure name="IDR_MD_LOCK_JS" file="resources\chromeos\login\md_lock.js" flattenhtml="true" type="chrome_html" />
<structure name="IDR_LOGIN_HTML" file="resources\chromeos\login\login.html" flattenhtml="true" type="chrome_html" variables="OOBE=login" expand_variables="true"/>
<structure name="IDR_LOGIN_JS" file="resources\chromeos\login\login.js" flattenhtml="true" type="chrome_html" />
<structure name="IDR_MD_LOGIN_HTML" file="resources\chromeos\login\md_login.html" flattenhtml="true" type="chrome_html" variables="OOBE=md_login" expand_variables="true"/>
<structure name="IDR_MD_LOGIN_JS" file="resources\chromeos\login\md_login.js" flattenhtml="true" type="chrome_html" />
</if>
<if expr="not is_android">
<structure name="IDR_NEW_INCOGNITO_TAB_THEME_CSS" file="resources\ntp4\new_incognito_tab_theme.css" flattenhtml="true" type="chrome_html" />
<structure name="IDR_NEW_TAB_4_HTML" file="resources\ntp4\new_tab.html" flattenhtml="true" type="chrome_html" />
<structure name="IDR_NEW_TAB_4_THEME_CSS" file="resources\ntp4\new_tab_theme.css" flattenhtml="true" type="chrome_html" />
</if>
<if expr="chromeos">
<structure name="IDR_OOBE_HTML" file="resources\chromeos\login\oobe.html" flattenhtml="true" type="chrome_html" variables="OOBE=oobe" expand_variables="true"/>
<structure name="IDR_OOBE_JS" file="resources\chromeos\login\oobe.js" flattenhtml="true" type="chrome_html" />
<structure name="IDR_OOBE_ENROLLMENT_HTML" file="resources\chromeos\login\oobe_screen_oauth_enrollment.html" flattenhtml="true" type="chrome_html" />
<structure name="IDR_OOBE_ENROLLMENT_CSS" file="resources\chromeos\login\oobe_screen_oauth_enrollment.css" flattenhtml="true" type="chrome_html" />
<structure name="IDR_OOBE_ENROLLMENT_JS" file="resources\chromeos\login\oobe_screen_oauth_enrollment.js" flattenhtml="true" type="chrome_html" />
<structure name="IDR_KEYBOARD_UTILS_JS" file="resources\chromeos\keyboard\keyboard_utils.js" flattenhtml="true" type="chrome_html" />
<structure name="IDR_CUSTOM_ELEMENTS_OOBE_HTML" file="resources\chromeos\login\custom_elements_oobe.html" flattenhtml="true" type="chrome_html" />
<structure name="IDR_CUSTOM_ELEMENTS_OOBE_JS" file="resources\chromeos\login\custom_elements_oobe.js" flattenhtml="true" type="chrome_html" />
<structure name="IDR_CUSTOM_ELEMENTS_LOCK_HTML" file="resources\chromeos\login\custom_elements_lock.html" flattenhtml="true" type="chrome_html" />
<structure name="IDR_CUSTOM_ELEMENTS_LOCK_JS" file="resources\chromeos\login\custom_elements_lock.js" flattenhtml="true" type="chrome_html" />
<structure name="IDR_CUSTOM_ELEMENTS_USER_POD_HTML" file="resources\chromeos\login\custom_elements_user_pod.html" flattenhtml="true" type="chrome_html" />
<structure name="IDR_CUSTOM_ELEMENTS_LOGIN_HTML" file="resources\chromeos\login\custom_elements_login.html" flattenhtml="true" type="chrome_html" />
<structure name="IDR_CUSTOM_ELEMENTS_LOGIN_JS" file="resources\chromeos\login\custom_elements_login.js" flattenhtml="true" type="chrome_html" />
<structure name="IDR_ASSISTANT_OPTIN_HTML" file="resources\chromeos\assistant_optin\assistant_optin.html" flattenhtml="true" allowexternalscript="true" type="chrome_html" />
<structure name="IDR_ASSISTANT_OPTIN_JS" file="resources\chromeos\assistant_optin\assistant_optin.js" flattenhtml="true" allowexternalscript="true" type="chrome_html" />
</if>
<structure name="IDR_SIGNIN_SHARED_CSS_HTML" file="resources\signin\signin_shared_css.html" preprocess="true" allowexternalscript="true" type="chrome_html" />
<if expr="not is_android and not chromeos">
<structure name="IDR_WELCOME_CSS" file="resources\welcome\welcome.css" type="chrome_html" preprocess="true"/>
<structure name="IDR_WELCOME_HTML" file="resources\welcome\welcome.html" type="chrome_html" preprocess="true"/>
<structure name="IDR_WELCOME_JS" file="resources\welcome\welcome.js" type="chrome_html" preprocess="true"/>
<structure name="IDR_DICE_WELCOME_CSS" file="resources\welcome\dice_welcome\welcome.css" type="chrome_html" preprocess="true"/>
<structure name="IDR_DICE_WELCOME_HTML" file="resources\welcome\dice_welcome\welcome.html" type="chrome_html" preprocess="true"/>
<structure name="IDR_DICE_WELCOME_BROWSER_PROXY_HTML" file="resources\welcome\dice_welcome\welcome_browser_proxy.html" type="chrome_html" preprocess="true"/>
<structure name="IDR_DICE_WELCOME_BROWSER_PROXY_JS" file="resources\welcome\dice_welcome\welcome_browser_proxy.js" type="chrome_html" preprocess="true"/>
<structure name="IDR_DICE_WELCOME_APP_HTML" file="resources\welcome\dice_welcome\welcome_app.html" type="chrome_html" preprocess="true"/>
<structure name="IDR_DICE_WELCOME_APP_JS" file="resources\welcome\dice_welcome\welcome_app.js" type="chrome_html" preprocess="true"/>
</if>
<if expr="is_win">
<structure name="IDR_WELCOME_WIN10_CSS" file="resources\welcome\welcome_win10.css" type="chrome_html" />
<structure name="IDR_WELCOME_WIN10_HTML" file="resources\welcome\welcome_win10.html" type="chrome_html" />
<structure name="IDR_WELCOME_WIN10_JS" file="resources\welcome\welcome_win10.js" type="chrome_html" />
</if>
</structures>
<includes>
<include name="IDR_HELLO_WORLD_HTML" file="resources\hello_world.html" type="BINDATA" />
<include name="IDR_HELLO_WORLD_CSS" file="resources\hello_world.css" type="BINDATA" />
<include name="IDR_HELLO_WORLD_JS" file="resources\hello_world.js" type="BINDATA" />
...
编辑Z:\chromium\src\chrome\common\webui_url_constants.h
这步和官方文档不一样了, 我比对其他web-ui找出来的。
也不确定,这里不一样会不会编译不过。因为中间出现了许多次错误,如果要验证,等将前置实验都做完了,做正式实验时,才能确定这里是不是可以按照官方文档来。
// Copyright 2017 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.
// Contains constants for WebUI UI/Host/SubPage constants. Anything else go in
// chrome/common/url_constants.h.
#ifndef CHROME_COMMON_WEBUI_URL_CONSTANTS_H_
#define CHROME_COMMON_WEBUI_URL_CONSTANTS_H_
#include <stddef.h>
#include "build/build_config.h"
#include "chrome/common/buildflags.h"
#include "content/public/common/url_constants.h"
#include "media/media_buildflags.h"
#include "printing/buildflags/buildflags.h"
namespace chrome {
// chrome: components (without schemes) and URLs (including schemes).
// e.g. kChromeUIFooHost = "foo" and kChromeUIFooURL = "chrome://foo/"
// Not all components have corresponding URLs and vice versa. Only add as
// needed.
// Please keep in alphabetical order, with OS/feature specific sections below.
extern const char kChromeUIHelloWorldURL[];
extern const char kChromeUIHelloWorldHost[];
...
编辑Z:\chromium\src\chrome\common\webui_url_constants.cc
这步和官方文档不一样了, 我比对其他web-ui找出来的。
// Copyright 2017 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/common/webui_url_constants.h"
#include "base/macros.h"
#include "components/nacl/common/buildflags.h"
#include "components/safe_browsing/web_ui/constants.h"
#include "extensions/buildflags/buildflags.h"
namespace chrome {
// Please keep this file in the same order as the header.
// Note: Add hosts to |kChromePaths| in browser_about_handler.cc to be listed by
// chrome://chrome-urls (about:about) and the built-in AutocompleteProvider.
const char kChromeUIHelloWorldURL[] = "chrome://my_page/";
const char kChromeUIHelloWorldHost[] = "my_page";
const char kChromeUIAboutHost[] = "about";
...
编辑Z:\chromium\src\chrome\app\generated_resources.grd
<?xml version="1.0" encoding="utf-8"?>
<!--
This file contains definitions of resources that will be translated for each
locale. The variables is_win, is_macosx, is_linux, and is_posix are available
for making strings OS specific. Other platform defines such as use_titlecase
are declared in build/common.gypi.
-->
<grit base_dir="." latest_public_release="0" current_release="1"
output_all_resource_defines="false" source_lang_id="en" enc_check="möl">
<outputs>
<output filename="grit/generated_resources.h" type="rc_header">
<emit emit_type='prepend'></emit>
</output>
<output filename="generated_resources_am.pak" type="data_package" lang="am" />
<output filename="generated_resources_ar.pak" type="data_package" lang="ar" />
<output filename="generated_resources_bg.pak" type="data_package" lang="bg" />
<output filename="generated_resources_bn.pak" type="data_package" lang="bn" />
<output filename="generated_resources_ca.pak" type="data_package" lang="ca" />
<output filename="generated_resources_cs.pak" type="data_package" lang="cs" />
<output filename="generated_resources_da.pak" type="data_package" lang="da" />
<output filename="generated_resources_de.pak" type="data_package" lang="de" />
<output filename="generated_resources_el.pak" type="data_package" lang="el" />
<output filename="generated_resources_en-GB.pak" type="data_package" lang="en-GB" />
<output filename="generated_resources_en-US.pak" type="data_package" lang="en" />
<output filename="generated_resources_es.pak" type="data_package" lang="es" />
<output filename="generated_resources_es-419.pak" type="data_package" lang="es-419" />
<output filename="generated_resources_et.pak" type="data_package" lang="et" />
<output filename="generated_resources_fa.pak" type="data_package" lang="fa" />
<output filename="generated_resources_fake-bidi.pak" type="data_package" lang="fake-bidi" />
<output filename="generated_resources_fi.pak" type="data_package" lang="fi" />
<output filename="generated_resources_fil.pak" type="data_package" lang="fil" />
<output filename="generated_resources_fr.pak" type="data_package" lang="fr" />
<output filename="generated_resources_gu.pak" type="data_package" lang="gu" />
<output filename="generated_resources_he.pak" type="data_package" lang="he" />
<output filename="generated_resources_hi.pak" type="data_package" lang="hi" />
<output filename="generated_resources_hr.pak" type="data_package" lang="hr" />
<output filename="generated_resources_hu.pak" type="data_package" lang="hu" />
<output filename="generated_resources_id.pak" type="data_package" lang="id" />
<output filename="generated_resources_it.pak" type="data_package" lang="it" />
<output filename="generated_resources_ja.pak" type="data_package" lang="ja" />
<output filename="generated_resources_kn.pak" type="data_package" lang="kn" />
<output filename="generated_resources_ko.pak" type="data_package" lang="ko" />
<output filename="generated_resources_lt.pak" type="data_package" lang="lt" />
<output filename="generated_resources_lv.pak" type="data_package" lang="lv" />
<output filename="generated_resources_ml.pak" type="data_package" lang="ml" />
<output filename="generated_resources_mr.pak" type="data_package" lang="mr" />
<output filename="generated_resources_ms.pak" type="data_package" lang="ms" />
<output filename="generated_resources_nl.pak" type="data_package" lang="nl" />
<!-- The translation console uses 'no' for Norwegian Bokmål. It should
be 'nb'. -->
<output filename="generated_resources_nb.pak" type="data_package" lang="no" />
<output filename="generated_resources_pl.pak" type="data_package" lang="pl" />
<output filename="generated_resources_pt-BR.pak" type="data_package" lang="pt-BR" />
<output filename="generated_resources_pt-PT.pak" type="data_package" lang="pt-PT" />
<output filename="generated_resources_ro.pak" type="data_package" lang="ro" />
<output filename="generated_resources_ru.pak" type="data_package" lang="ru" />
<output filename="generated_resources_sk.pak" type="data_package" lang="sk" />
<output filename="generated_resources_sl.pak" type="data_package" lang="sl" />
<output filename="generated_resources_sr.pak" type="data_package" lang="sr" />
<output filename="generated_resources_sv.pak" type="data_package" lang="sv" />
<output filename="generated_resources_sw.pak" type="data_package" lang="sw" />
<output filename="generated_resources_ta.pak" type="data_package" lang="ta" />
<output filename="generated_resources_te.pak" type="data_package" lang="te" />
<output filename="generated_resources_th.pak" type="data_package" lang="th" />
<output filename="generated_resources_tr.pak" type="data_package" lang="tr" />
<output filename="generated_resources_uk.pak" type="data_package" lang="uk" />
<output filename="generated_resources_vi.pak" type="data_package" lang="vi" />
<output filename="generated_resources_zh-CN.pak" type="data_package" lang="zh-CN" />
<output filename="generated_resources_zh-TW.pak" type="data_package" lang="zh-TW" />
<!-- On Android, output some strings into Android's xml string format.
These strings are tagged with formatter_data="android_java" -->
<if expr="is_android">
<output filename="java/res/values-am/generated_resources.xml" lang="am" type="android" context="android_java" />
<output filename="java/res/values-ar/generated_resources.xml" lang="ar" type="android" context="android_java" />
<output filename="java/res/values-bg/generated_resources.xml" lang="bg" type="android" context="android_java" />
<output filename="java/res/values-ca/generated_resources.xml" lang="ca" type="android" context="android_java" />
<output filename="java/res/values-cs/generated_resources.xml" lang="cs" type="android" context="android_java" />
<output filename="java/res/values-da/generated_resources.xml" lang="da" type="android" context="android_java" />
<output filename="java/res/values-de/generated_resources.xml" lang="de" type="android" context="android_java" />
<output filename="java/res/values-el/generated_resources.xml" lang="el" type="android" context="android_java" />
<output filename="java/res/values/generated_resources.xml" lang="en" type="android" context="android_java" />
<output filename="java/res/values-en-rGB/generated_resources.xml" lang="en-GB" type="android" context="android_java" />
<output filename="java/res/values-es/generated_resources.xml" lang="es" type="android" context="android_java" />
<output filename="java/res/values-es-rUS/generated_resources.xml" lang="es-419" type="android" context="android_java" />
<output filename="java/res/values-fa/generated_resources.xml" lang="fa" type="android" context="android_java" />
<output filename="java/res/values-fi/generated_resources.xml" lang="fi" type="android" context="android_java" />
<output filename="java/res/values-tl/generated_resources.xml" lang="fil" type="android" context="android_java" />
<output filename="java/res/values-fr/generated_resources.xml" lang="fr" type="android" context="android_java" />
<output filename="java/res/values-hi/generated_resources.xml" lang="hi" type="android" context="android_java" />
<output filename="java/res/values-hr/generated_resources.xml" lang="hr" type="android" context="android_java" />
<output filename="java/res/values-hu/generated_resources.xml" lang="hu" type="android" context="android_java" />
<output filename="java/res/values-in/generated_resources.xml" lang="id" type="android" context="android_java" />
<output filename="java/res/values-it/generated_resources.xml" lang="it" type="android" context="android_java" />
<output filename="java/res/values-iw/generated_resources.xml" lang="he" type="android" context="android_java" />
<output filename="java/res/values-ja/generated_resources.xml" lang="ja" type="android" context="android_java" />
<output filename="java/res/values-ko/generated_resources.xml" lang="ko" type="android" context="android_java" />
<output filename="java/res/values-lt/generated_resources.xml" lang="lt" type="android" context="android_java" />
<output filename="java/res/values-lv/generated_resources.xml" lang="lv" type="android" context="android_java" />
<output filename="java/res/values-nl/generated_resources.xml" lang="nl" type="android" context="android_java" />
<output filename="java/res/values-nb/generated_resources.xml" lang="no" type="android" context="android_java" />
<output filename="java/res/values-pl/generated_resources.xml" lang="pl" type="android" context="android_java" />
<output filename="java/res/values-pt-rBR/generated_resources.xml" lang="pt-BR" type="android" context="android_java" />
<output filename="java/res/values-pt-rPT/generated_resources.xml" lang="pt-PT" type="android" context="android_java" />
<output filename="java/res/values-ro/generated_resources.xml" lang="ro" type="android" context="android_java" />
<output filename="java/res/values-ru/generated_resources.xml" lang="ru" type="android" context="android_java" />
<output filename="java/res/values-sk/generated_resources.xml" lang="sk" type="android" context="android_java" />
<output filename="java/res/values-sl/generated_resources.xml" lang="sl" type="android" context="android_java" />
<output filename="java/res/values-sr/generated_resources.xml" lang="sr" type="android" context="android_java" />
<output filename="java/res/values-sv/generated_resources.xml" lang="sv" type="android" context="android_java" />
<output filename="java/res/values-sw/generated_resources.xml" lang="sw" type="android" context="android_java" />
<output filename="java/res/values-th/generated_resources.xml" lang="th" type="android" context="android_java" />
<output filename="java/res/values-tr/generated_resources.xml" lang="tr" type="android" context="android_java" />
<output filename="java/res/values-uk/generated_resources.xml" lang="uk" type="android" context="android_java" />
<output filename="java/res/values-vi/generated_resources.xml" lang="vi" type="android" context="android_java" />
<output filename="java/res/values-zh-rCN/generated_resources.xml" lang="zh-CN" type="android" context="android_java" />
<output filename="java/res/values-zh-rTW/generated_resources.xml" lang="zh-TW" type="android" context="android_java" />
</if>
</outputs>
<translations>
<file path="resources/generated_resources_am.xtb" lang="am" />
<file path="resources/generated_resources_ar.xtb" lang="ar" />
<file path="resources/generated_resources_bg.xtb" lang="bg" />
<file path="resources/generated_resources_bn.xtb" lang="bn" />
<file path="resources/generated_resources_ca.xtb" lang="ca" />
<file path="resources/generated_resources_cs.xtb" lang="cs" />
<file path="resources/generated_resources_da.xtb" lang="da" />
<file path="resources/generated_resources_de.xtb" lang="de" />
<file path="resources/generated_resources_el.xtb" lang="el" />
<file path="resources/generated_resources_en-GB.xtb" lang="en-GB" />
<file path="resources/generated_resources_es.xtb" lang="es" />
<file path="resources/generated_resources_es-419.xtb" lang="es-419" />
<file path="resources/generated_resources_et.xtb" lang="et" />
<file path="resources/generated_resources_fa.xtb" lang="fa" />
<file path="resources/generated_resources_fi.xtb" lang="fi" />
<file path="resources/generated_resources_fil.xtb" lang="fil" />
<file path="resources/generated_resources_fr.xtb" lang="fr" />
<file path="resources/generated_resources_gu.xtb" lang="gu" />
<file path="resources/generated_resources_hi.xtb" lang="hi" />
<file path="resources/generated_resources_hr.xtb" lang="hr" />
<file path="resources/generated_resources_hu.xtb" lang="hu" />
<file path="resources/generated_resources_id.xtb" lang="id" />
<file path="resources/generated_resources_it.xtb" lang="it" />
<!-- The translation console uses 'iw' for Hebrew, but we use 'he'. -->
<file path="resources/generated_resources_iw.xtb" lang="he" />
<file path="resources/generated_resources_ja.xtb" lang="ja" />
<file path="resources/generated_resources_kn.xtb" lang="kn" />
<file path="resources/generated_resources_ko.xtb" lang="ko" />
<file path="resources/generated_resources_lt.xtb" lang="lt" />
<file path="resources/generated_resources_lv.xtb" lang="lv" />
<file path="resources/generated_resources_ml.xtb" lang="ml" />
<file path="resources/generated_resources_mr.xtb" lang="mr" />
<file path="resources/generated_resources_ms.xtb" lang="ms" />
<file path="resources/generated_resources_nl.xtb" lang="nl" />
<file path="resources/generated_resources_no.xtb" lang="no" />
<file path="resources/generated_resources_pl.xtb" lang="pl" />
<file path="resources/generated_resources_pt-BR.xtb" lang="pt-BR" />
<file path="resources/generated_resources_pt-PT.xtb" lang="pt-PT" />
<file path="resources/generated_resources_ro.xtb" lang="ro" />
<file path="resources/generated_resources_ru.xtb" lang="ru" />
<file path="resources/generated_resources_sk.xtb" lang="sk" />
<file path="resources/generated_resources_sl.xtb" lang="sl" />
<file path="resources/generated_resources_sr.xtb" lang="sr" />
<file path="resources/generated_resources_sv.xtb" lang="sv" />
<file path="resources/generated_resources_sw.xtb" lang="sw" />
<file path="resources/generated_resources_ta.xtb" lang="ta" />
<file path="resources/generated_resources_te.xtb" lang="te" />
<file path="resources/generated_resources_th.xtb" lang="th" />
<file path="resources/generated_resources_tr.xtb" lang="tr" />
<file path="resources/generated_resources_uk.xtb" lang="uk" />
<file path="resources/generated_resources_vi.xtb" lang="vi" />
<file path="resources/generated_resources_zh-CN.xtb" lang="zh-CN" />
<file path="resources/generated_resources_zh-TW.xtb" lang="zh-TW" />
</translations>
<release seq="1" allow_pseudo="false">
<messages fallback_to_english="true">
<!-- Bookmarks specific strings -->
<part file="bookmarks_strings.grdp" />
<!-- Chrome-OS-specific strings -->
<if expr="chromeos">
<part file="chromeos_strings.grdp" />
</if>
<!-- Media Router specific strings -->
<part file="media_router_strings.grdp" />
<!-- Settings specific strings -->
<if expr="not is_android">
<part file="settings_strings.grdp" />
</if>
<!-- MD Extensions specific strings -->
<if expr="enable_extensions">
<part file="md_extensions_strings.grdp" />
</if>
<!-- Printing specific strings -->
<if expr="enable_printing">
<part file="printing_strings.grdp" />
</if>
<!-- TODO add all of your "string table" messages here. Remember to
change nontranslateable parts of the messages into placeholders (using the
<ph> element). You can also use the 'grit add' tool to help you identify
nontranslateable parts and create placeholders for them. -->
<message name="IDS_HELLO_WORLD_TITLE" desc="A happy message saying hello to the world">
Hello World!
</message>
<message name="IDS_HELLO_WORLD_WELCOME_TEXT" desc="Message welcoming the user to the hello world page">
Welcome to this fancy Hello World page <ph name="WELCOME_NAME">$1<ex>Chromium User</ex></ph>!
</message>
...
新建Z:\chromium\src\chrome\browser\ui\webui\hello_world_ui.h
// @file Z:\chromium\src\components\hello_world\hello_world_ui.h
#ifndef COMPONENTS_HELLO_WORLD_HELLO_WORLD_UI_H_
#define COMPONENTS_HELLO_WORLD_HELLO_WORLD_UI_H_
#pragma once
#include "base/macros.h"
#include "content/public/browser/web_ui_controller.h"
// The WebUI for chrome://hello-world
class HelloWorldUI : public content::WebUIController {
public:
explicit HelloWorldUI(content::WebUI* web_ui);
~HelloWorldUI() override;
private:
DISALLOW_COPY_AND_ASSIGN(HelloWorldUI);
};
#endif // COMPONENTS_HELLO_WORLD_HELLO_WORLD_UI_H_
新建Z:\chromium\src\chrome\browser\ui\webui\hello_world_ui.cc
// @file Z:\chromium\src\chrome\browser\ui\webui\hello_world_ui.cc
// #include "chrome\grit\browser_resources.h"
// #include "chrome/browser/ui/webui/hello_world_ui.h"
// #include "components/grit/components_resources.h"
// #include "components/grit/components_scaled_resources.h"
// #include "chrome/common/webui_url_constants.h"
// #include "components/strings/grit/components_strings.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
// ok
#include "chrome/browser/ui/webui/hello_world_ui.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/browser_resources.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/web_ui_data_source.h"
HelloWorldUI::HelloWorldUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
// Set up the chrome://hello-world source.
content::WebUIDataSource* html_source =
content::WebUIDataSource::Create(chrome::kChromeUIHelloWorldHost);
// Localized strings.
html_source->AddLocalizedString("helloWorldTitle", IDS_HELLO_WORLD_TITLE);
html_source->AddLocalizedString("welcomeMessage", IDS_HELLO_WORLD_WELCOME_TEXT);
// As a demonstration of passing a variable for JS to use we pass in the name "Bob".
html_source->AddString("userName", "Bob");
html_source->SetJsonPath("strings.js");
// Add required resources.
html_source->AddResourcePath("hello_world.css", IDR_HELLO_WORLD_CSS);
html_source->AddResourcePath("hello_world.js", IDR_HELLO_WORLD_JS);
html_source->SetDefaultResource(IDR_HELLO_WORLD_HTML);
content::BrowserContext* browser_context =
web_ui->GetWebContents()->GetBrowserContext();
content::WebUIDataSource::Add(browser_context, html_source);
}
HelloWorldUI::~HelloWorldUI() {
}
/*
HelloWorldUI::HelloWorldUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
// Set up the chrome://hello-world source.
content::WebUIDataSource* html_source =
content::WebUIDataSource::Create(chrome::kChromeUIHelloWorldHost);
// Localized strings.
html_source->AddLocalizedString("helloWorldTitle", IDS_HELLO_WORLD_TITLE);
html_source->AddLocalizedString("welcomeMessage", IDS_HELLO_WORLD_WELCOME_TEXT);
// As a demonstration of passing a variable for JS to use we pass in the name "Bob".
html_source->AddString("userName", "Bob");
html_source->SetJsonPath("strings.js");
// Add required resources.
html_source->AddResourcePath("hello_world.css", IDR_HELLO_WORLD_CSS);
html_source->AddResourcePath("hello_world.js", IDR_HELLO_WORLD_JS);
html_source->SetDefaultResource(IDR_HELLO_WORLD_HTML);
Profile* profile = Profile::FromWebUI(web_ui);
content::WebUIDataSource::Add(profile, html_source);
}
HelloWorldUI::~HelloWorldUI() {
}
*/
编辑Z:\chromium\src\chrome\browser\ui\BUILD.gn
# Copyright 2014 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/chromecast_build.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/crypto.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//build/split_static_library.gni")
import("//chrome/common/features.gni")
import("//chromeos/assistant/assistant.gni")
import("//components/nacl/features.gni")
import("//components/offline_pages/buildflags/features.gni")
import("//components/signin/features.gni")
import("//extensions/buildflags/buildflags.gni")
import("//ppapi/buildflags/buildflags.gni")
import("//printing/buildflags/buildflags.gni")
import("//rlz/buildflags/buildflags.gni")
import("//ui/base/ui_features.gni")
import("//ui/views/features.gni")
config("ui_warnings") {
if (is_clang) {
# TODO(thakis): Remove this once http://crbug.com/383820 is figured out
cflags = [ "-Wno-nonnull" ]
}
}
# Use a static library here because many test binaries depend on this but don't
# require many files from it. This makes linking more efficient.
split_static_library("ui") {
# Split into multiple static libraries on Windows builds. We have hit size
# limits on Windows official builds and on goma builds when symbol_level = 2
# is selected. Always splitting on Windows builds is simpler than trying to
# perfectly calculate the scenarios where it is required.
if (is_win) {
split_count = 5
} else {
split_count = 1
}
# The cocoa browser (ie, primary ui) sources. These are in a separate
# variable temporarily to ease the work on https://crbug.com/804950 and
# https://crbug.com/802257.
# TODO(ellyjones): Remove this variable once 804950 and 802257 are fixed.
if (is_mac) {
cocoa_browser_sources = [
"cocoa/animatable_image.h",
"cocoa/animatable_image.mm",
"cocoa/animatable_view.h",
"cocoa/animatable_view.mm",
"cocoa/app_menu/app_menu_button_cell.h",
"cocoa/app_menu/app_menu_button_cell.mm",
"cocoa/app_menu/app_menu_controller.h",
"cocoa/app_menu/app_menu_controller.mm",
"cocoa/app_menu/menu_tracked_button.h",
"cocoa/app_menu/menu_tracked_button.mm",
"cocoa/app_menu/menu_tracked_root_view.h",
"cocoa/app_menu/menu_tracked_root_view.mm",
"cocoa/app_menu/recent_tabs_menu_model_delegate.h",
"cocoa/app_menu/recent_tabs_menu_model_delegate.mm",
"cocoa/apps/chrome_app_window_client_views_cocoa.mm",
"cocoa/apps/native_app_window_cocoa.h",
"cocoa/apps/native_app_window_cocoa.mm",
"cocoa/autofill/autofill_bubble_controller.h",
"cocoa/autofill/autofill_bubble_controller.mm",
"cocoa/autofill/autofill_dialog_constants.h",
"cocoa/autofill/autofill_popup_base_view_cocoa.h",
"cocoa/autofill/autofill_popup_base_view_cocoa.mm",
"cocoa/autofill/autofill_popup_view_bridge.h",
"cocoa/autofill/autofill_popup_view_bridge.mm",
"cocoa/autofill/autofill_popup_view_cocoa.h",
"cocoa/autofill/autofill_popup_view_cocoa.mm",
"cocoa/autofill/autofill_tooltip_controller.h",
"cocoa/autofill/autofill_tooltip_controller.mm",
"cocoa/autofill/credit_card_autofill_touch_bar_controller.h",
"cocoa/autofill/credit_card_autofill_touch_bar_controller.mm",
"cocoa/autofill/password_generation_popup_view_bridge.h",
"cocoa/autofill/password_generation_popup_view_bridge.mm",
"cocoa/autofill/password_generation_popup_view_cocoa.h",
"cocoa/autofill/password_generation_popup_view_cocoa.mm",
"cocoa/autofill/save_card_bubble_view_views.h",
"cocoa/autofill/save_card_bubble_view_views.mm",
"cocoa/background_gradient_view.h",
"cocoa/background_gradient_view.mm",
"cocoa/base_bubble_controller.h",
"cocoa/base_bubble_controller.mm",
"cocoa/bookmarks/bookmark_all_tabs_controller.h",
"cocoa/bookmarks/bookmark_all_tabs_controller.mm",
"cocoa/bookmarks/bookmark_bar_bridge.h",
"cocoa/bookmarks/bookmark_bar_bridge.mm",
"cocoa/bookmarks/bookmark_bar_constants.h",
"cocoa/bookmarks/bookmark_bar_controller.h",
"cocoa/bookmarks/bookmark_bar_controller.mm",
"cocoa/bookmarks/bookmark_bar_folder_button_cell.h",
"cocoa/bookmarks/bookmark_bar_folder_button_cell.mm",
"cocoa/bookmarks/bookmark_bar_folder_controller.h",
"cocoa/bookmarks/bookmark_bar_folder_controller.mm",
"cocoa/bookmarks/bookmark_bar_folder_hover_state.h",
"cocoa/bookmarks/bookmark_bar_folder_hover_state.mm",
"cocoa/bookmarks/bookmark_bar_folder_view.h",
"cocoa/bookmarks/bookmark_bar_folder_view.mm",
"cocoa/bookmarks/bookmark_bar_folder_window.h",
"cocoa/bookmarks/bookmark_bar_folder_window.mm",
"cocoa/bookmarks/bookmark_bar_state.h",
"cocoa/bookmarks/bookmark_bar_toolbar_view.h",
"cocoa/bookmarks/bookmark_bar_toolbar_view.mm",
"cocoa/bookmarks/bookmark_bar_view_cocoa.h",
"cocoa/bookmarks/bookmark_bar_view_cocoa.mm",
"cocoa/bookmarks/bookmark_bubble_controller.h",
"cocoa/bookmarks/bookmark_bubble_controller.mm",
"cocoa/bookmarks/bookmark_bubble_observer_cocoa.h",
"cocoa/bookmarks/bookmark_bubble_observer_cocoa.mm",
"cocoa/bookmarks/bookmark_button.h",
"cocoa/bookmarks/bookmark_button.mm",
"cocoa/bookmarks/bookmark_button_cell.h",
"cocoa/bookmarks/bookmark_button_cell.mm",
"cocoa/bookmarks/bookmark_context_menu_cocoa_controller.h",
"cocoa/bookmarks/bookmark_context_menu_cocoa_controller.mm",
"cocoa/bookmarks/bookmark_drag_drop_cocoa.mm",
"cocoa/bookmarks/bookmark_editor_base_controller.h",
"cocoa/bookmarks/bookmark_editor_base_controller.mm",
"cocoa/bookmarks/bookmark_editor_controller.h",
"cocoa/bookmarks/bookmark_editor_controller.mm",
"cocoa/bookmarks/bookmark_folder_target.h",
"cocoa/bookmarks/bookmark_folder_target.mm",
"cocoa/bookmarks/bookmark_model_observer_for_cocoa.h",
"cocoa/bookmarks/bookmark_model_observer_for_cocoa.mm",
"cocoa/bookmarks/bookmark_name_folder_controller.h",
"cocoa/bookmarks/bookmark_name_folder_controller.mm",
"cocoa/bookmarks/bookmark_tree_browser_cell.h",
"cocoa/bookmarks/bookmark_tree_browser_cell.mm",
"cocoa/browser/exclusive_access_controller_views.h",
"cocoa/browser/exclusive_access_controller_views.mm",
"cocoa/browser/zoom_bubble_controller.h",
"cocoa/browser/zoom_bubble_controller.mm",
"cocoa/browser_dialogs_views_mac.cc",
"cocoa/browser_dialogs_views_mac.h",
"cocoa/browser_window_cocoa.h",
"cocoa/browser_window_cocoa.mm",
"cocoa/browser_window_cocoa_views_mac.mm",
"cocoa/browser_window_controller.h",
"cocoa/browser_window_controller.mm",
"cocoa/browser_window_controller_private.h",
"cocoa/browser_window_controller_private.mm",
"cocoa/browser_window_factory_cocoa.mm",
"cocoa/browser_window_fullscreen_transition.h",
"cocoa/browser_window_fullscreen_transition.mm",
"cocoa/browser_window_layout.h",
"cocoa/browser_window_layout.mm",
"cocoa/browser_window_touch_bar.h",
"cocoa/browser_window_touch_bar.mm",
"cocoa/browser_window_utils.h",
"cocoa/browser_window_utils.mm",
"cocoa/bubble_anchor_helper.h",
"cocoa/bubble_anchor_helper.mm",
"cocoa/bubble_anchor_helper_views.h",
"cocoa/bubble_anchor_helper_views.mm",
"cocoa/bubble_anchor_util_views_mac.mm",
"cocoa/bubble_combobox.h",
"cocoa/bubble_combobox.mm",
"cocoa/bubble_sync_promo_controller.h",
"cocoa/bubble_sync_promo_controller.mm",
"cocoa/bubble_view.h",
"cocoa/bubble_view.mm",
"cocoa/certificate_viewer_mac_cocoa.h",
"cocoa/certificate_viewer_mac_cocoa.mm",
"cocoa/chrome_browser_window.h",
"cocoa/chrome_browser_window.mm",
"cocoa/chrome_event_processing_window.h",
"cocoa/chrome_event_processing_window.mm",
"cocoa/clickhold_button_cell.h",
"cocoa/clickhold_button_cell.mm",
"cocoa/constrained_web_dialog_delegate_mac.mm",
"cocoa/constrained_window/constrained_window_alert.h",
"cocoa/constrained_window/constrained_window_alert.mm",
"cocoa/constrained_window/constrained_window_button.h",
"cocoa/constrained_window/constrained_window_button.mm",
"cocoa/constrained_window/constrained_window_control_utils.h",
"cocoa/constrained_window/constrained_window_control_utils.mm",
"cocoa/constrained_window/constrained_window_custom_sheet.h",
"cocoa/constrained_window/constrained_window_custom_sheet.mm",
"cocoa/constrained_window/constrained_window_custom_window.h",
"cocoa/constrained_window/constrained_window_custom_window.mm",
"cocoa/constrained_window/constrained_window_mac.h",
"cocoa/constrained_window/constrained_window_mac.mm",
"cocoa/constrained_window/constrained_window_sheet.h",
"cocoa/constrained_window/constrained_window_sheet_controller.h",
"cocoa/constrained_window/constrained_window_sheet_controller.mm",
"cocoa/constrained_window/constrained_window_sheet_info.h",
"cocoa/constrained_window/constrained_window_sheet_info.mm",
"cocoa/constrained_window/constrained_window_web_dialog_sheet.h",
"cocoa/constrained_window/constrained_window_web_dialog_sheet.mm",
"cocoa/content_settings/blocked_plugin_bubble_controller.h",
"cocoa/content_settings/blocked_plugin_bubble_controller.mm",
"cocoa/content_settings/collected_cookies_mac.h",
"cocoa/content_settings/collected_cookies_mac.mm",
"cocoa/content_settings/content_setting_bubble_cocoa.h",
"cocoa/content_settings/content_setting_bubble_cocoa.mm",
"cocoa/content_settings/cookie_details.h",
"cocoa/content_settings/cookie_details.mm",
"cocoa/content_settings/cookie_details_view_controller.h",
"cocoa/content_settings/cookie_details_view_controller.mm",
"cocoa/content_settings/cookie_tree_node.h",
"cocoa/content_settings/cookie_tree_node.mm",
"cocoa/content_settings/cookies_tree_controller_bridge.h",
"cocoa/content_settings/cookies_tree_controller_bridge.mm",
"cocoa/create_native_web_modal_manager_cocoa.mm",
"cocoa/dev_tools_controller.h",
"cocoa/dev_tools_controller.mm",
"cocoa/device_chooser_content_view_cocoa.h",
"cocoa/device_chooser_content_view_cocoa.mm",
"cocoa/dialog_text_field_editor.h",
"cocoa/dialog_text_field_editor.mm",
"cocoa/download/background_theme.h",
"cocoa/download/background_theme.mm",
"cocoa/download/download_danger_prompt_impl.cc",
"cocoa/download/download_item_button.h",
"cocoa/download/download_item_button.mm",
"cocoa/download/download_item_cell.h",
"cocoa/download/download_item_cell.mm",
"cocoa/download/download_item_controller.h",
"cocoa/download/download_item_controller.mm",
"cocoa/download/download_item_mac.h",
"cocoa/download/download_item_mac.mm",
"cocoa/download/download_item_view_protocol.h",
"cocoa/download/download_shelf_context_menu_controller.h",
"cocoa/download/download_shelf_context_menu_controller.mm",
"cocoa/download/download_shelf_controller.h",
"cocoa/download/download_shelf_controller.mm",
"cocoa/download/download_shelf_mac.h",
"cocoa/download/download_shelf_mac.mm",
"cocoa/download/download_shelf_view_cocoa.h",
"cocoa/download/download_shelf_view_cocoa.mm",
"cocoa/download/download_show_all_button.h",
"cocoa/download/download_show_all_button.mm",
"cocoa/download/download_show_all_cell.h",
"cocoa/download/download_show_all_cell.mm",
"cocoa/download/download_started_animation_mac.mm",
"cocoa/download/md_download_item_progress_indicator.h",
"cocoa/download/md_download_item_progress_indicator.mm",
"cocoa/download/md_download_item_view.h",
"cocoa/download/md_download_item_view.mm",
"cocoa/download/md_download_item_view_testing.h",
"cocoa/drag_util.h",
"cocoa/drag_util.mm",
"cocoa/draggable_button.h",
"cocoa/draggable_button.mm",
"cocoa/draggable_button_mixin.h",
"cocoa/draggable_button_mixin.mm",
"cocoa/extensions/browser_action_button.h",
"cocoa/extensions/browser_action_button.mm",
"cocoa/extensions/browser_actions_container_view.h",
"cocoa/extensions/browser_actions_container_view.mm",
"cocoa/extensions/browser_actions_controller.h",
"cocoa/extensions/browser_actions_controller.mm",
"cocoa/extensions/chooser_dialog_cocoa.h",
"cocoa/extensions/chooser_dialog_cocoa.mm",
"cocoa/extensions/chooser_dialog_cocoa_controller.h",
"cocoa/extensions/chooser_dialog_cocoa_controller.mm",
"cocoa/extensions/extension_action_platform_delegate_cocoa.h",
"cocoa/extensions/extension_action_platform_delegate_cocoa.mm",
"cocoa/extensions/extension_install_dialog_controller.h",
"cocoa/extensions/extension_install_dialog_controller.mm",
"cocoa/extensions/extension_install_view_controller.h",
"cocoa/extensions/extension_install_view_controller.mm",
"cocoa/extensions/extension_installed_bubble_controller.h",
"cocoa/extensions/extension_installed_bubble_controller.mm",
"cocoa/extensions/extension_keybinding_registry_cocoa.h",
"cocoa/extensions/extension_keybinding_registry_cocoa.mm",
"cocoa/extensions/extension_popup_controller.h",
"cocoa/extensions/extension_popup_controller.mm",
"cocoa/extensions/extension_popup_views_mac.h",
"cocoa/extensions/extension_popup_views_mac.mm",
"cocoa/extensions/extension_uninstall_dialog_cocoa.mm",
"cocoa/extensions/extension_view_mac.h",
"cocoa/extensions/extension_view_mac.mm",
"cocoa/extensions/media_galleries_dialog_cocoa.h",
"cocoa/extensions/media_galleries_dialog_cocoa.mm",
"cocoa/extensions/media_gallery_list_entry_view.h",
"cocoa/extensions/media_gallery_list_entry_view.mm",
"cocoa/extensions/toolbar_actions_bar_bubble_mac.h",
"cocoa/extensions/toolbar_actions_bar_bubble_mac.mm",
"cocoa/extensions/toolbar_actions_bar_bubble_views_presenter.h",
"cocoa/extensions/toolbar_actions_bar_bubble_views_presenter.mm",
"cocoa/extensions/windowed_install_dialog_controller.h",
"cocoa/extensions/windowed_install_dialog_controller.mm",
"cocoa/external_protocol_dialog.h",
"cocoa/external_protocol_dialog_cocoa.mm",
"cocoa/external_protocol_dialog_views_mac.mm",
"cocoa/fast_resize_view.h",
"cocoa/fast_resize_view.mm",
"cocoa/find_bar/find_bar_bridge.h",
"cocoa/find_bar/find_bar_bridge.mm",
"cocoa/find_bar/find_bar_cocoa_controller.h",
"cocoa/find_bar/find_bar_cocoa_controller.mm",
"cocoa/find_bar/find_bar_text_field.h",
"cocoa/find_bar/find_bar_text_field.mm",
"cocoa/find_bar/find_bar_text_field_cell.h",
"cocoa/find_bar/find_bar_text_field_cell.mm",
"cocoa/find_bar/find_bar_view_cocoa.h",
"cocoa/find_bar/find_bar_view_cocoa.mm",
"cocoa/floating_bar_backing_view.h",
"cocoa/floating_bar_backing_view.mm",
"cocoa/framed_browser_window.h",
"cocoa/framed_browser_window.mm",
"cocoa/fullscreen/fullscreen_menubar_tracker.h",
"cocoa/fullscreen/fullscreen_menubar_tracker.mm",
"cocoa/fullscreen/fullscreen_toolbar_animation_controller.h",
"cocoa/fullscreen/fullscreen_toolbar_animation_controller.mm",
"cocoa/fullscreen/fullscreen_toolbar_controller.h",
"cocoa/fullscreen/fullscreen_toolbar_controller.mm",
"cocoa/fullscreen/fullscreen_toolbar_mouse_tracker.h",
"cocoa/fullscreen/fullscreen_toolbar_mouse_tracker.mm",
"cocoa/fullscreen/fullscreen_toolbar_visibility_lock_controller.h",
"cocoa/fullscreen/fullscreen_toolbar_visibility_lock_controller.mm",
"cocoa/fullscreen/immersive_fullscreen_controller.h",
"cocoa/fullscreen/immersive_fullscreen_controller.mm",
"cocoa/fullscreen_placeholder_view.h",
"cocoa/fullscreen_placeholder_view.mm",
"cocoa/fullscreen_window.h",
"cocoa/fullscreen_window.mm",
"cocoa/global_error_bubble_controller.h",
"cocoa/global_error_bubble_controller.mm",
"cocoa/global_error_bubble_controller_views.mm",
"cocoa/gradient_button_cell.h",
"cocoa/gradient_button_cell.mm",
"cocoa/harmony_button.h",
"cocoa/harmony_button.mm",
"cocoa/has_weak_browser_pointer.h",
"cocoa/hover_close_button.h",
"cocoa/hover_close_button.mm",
"cocoa/hung_renderer_controller.h",
"cocoa/hung_renderer_controller.mm",
"cocoa/image_button_cell.h",
"cocoa/image_button_cell.mm",
"cocoa/importer/import_lock_dialog_cocoa.mm",
"cocoa/info_bubble_view.h",
"cocoa/info_bubble_view.mm",
"cocoa/info_bubble_window.h",
"cocoa/info_bubble_window.mm",
"cocoa/infobars/after_translate_infobar_controller.h",
"cocoa/infobars/after_translate_infobar_controller.mm",
"cocoa/infobars/alternate_nav_infobar_controller.h",
"cocoa/infobars/alternate_nav_infobar_controller.mm",
"cocoa/infobars/before_translate_infobar_controller.h",
"cocoa/infobars/before_translate_infobar_controller.mm",
"cocoa/infobars/confirm_infobar_controller.h",
"cocoa/infobars/confirm_infobar_controller.mm",
"cocoa/infobars/infobar_background_view.h",
"cocoa/infobars/infobar_background_view.mm",
"cocoa/infobars/infobar_cocoa.h",
"cocoa/infobars/infobar_cocoa.mm",
"cocoa/infobars/infobar_container_cocoa.h",
"cocoa/infobars/infobar_container_cocoa.mm",
"cocoa/infobars/infobar_container_controller.h",
"cocoa/infobars/infobar_container_controller.mm",
"cocoa/infobars/infobar_controller.h",
"cocoa/infobars/infobar_controller.mm",
"cocoa/infobars/infobar_utilities.h",
"cocoa/infobars/infobar_utilities.mm",
"cocoa/infobars/translate_infobar_base.h",
"cocoa/infobars/translate_infobar_base.mm",
"cocoa/infobars/translate_message_infobar_controller.h",
"cocoa/infobars/translate_message_infobar_controller.mm",
"cocoa/javascript_app_modal_dialog_cocoa.h",
"cocoa/javascript_app_modal_dialog_cocoa.mm",
"cocoa/location_bar/autocomplete_text_field.h",
"cocoa/location_bar/autocomplete_text_field.mm",
"cocoa/location_bar/autocomplete_text_field_cell.h",
"cocoa/location_bar/autocomplete_text_field_cell.mm",
"cocoa/location_bar/autocomplete_text_field_editor.h",
"cocoa/location_bar/autocomplete_text_field_editor.mm",
"cocoa/location_bar/bubble_decoration.h",
"cocoa/location_bar/bubble_decoration.mm",
"cocoa/location_bar/content_setting_decoration.h",
"cocoa/location_bar/content_setting_decoration.mm",
"cocoa/location_bar/image_decoration.h",
"cocoa/location_bar/image_decoration.mm",
"cocoa/location_bar/keyword_hint_decoration.h",
"cocoa/location_bar/keyword_hint_decoration.mm",
"cocoa/location_bar/location_bar_decoration.h",
"cocoa/location_bar/location_bar_decoration.mm",
"cocoa/location_bar/location_bar_view_mac.h",
"cocoa/location_bar/location_bar_view_mac.mm",
"cocoa/location_bar/manage_passwords_decoration.h",
"cocoa/location_bar/manage_passwords_decoration.mm",
"cocoa/location_bar/page_info_bubble_decoration.h",
"cocoa/location_bar/page_info_bubble_decoration.mm",
"cocoa/location_bar/save_credit_card_decoration.h",
"cocoa/location_bar/save_credit_card_decoration.mm",
"cocoa/location_bar/selected_keyword_decoration.h",
"cocoa/location_bar/selected_keyword_decoration.mm",
"cocoa/location_bar/star_decoration.h",
"cocoa/location_bar/star_decoration.mm",
"cocoa/location_bar/translate_decoration.h",
"cocoa/location_bar/translate_decoration.mm",
"cocoa/location_bar/zoom_decoration.h",
"cocoa/location_bar/zoom_decoration.mm",
"cocoa/login_handler_cocoa.h",
"cocoa/login_handler_cocoa.mm",
"cocoa/main_menu_item.h",
"cocoa/menu_button.h",
"cocoa/menu_button.mm",
"cocoa/multi_key_equivalent_button.h",
"cocoa/multi_key_equivalent_button.mm",
"cocoa/new_tab_button.h",
"cocoa/new_tab_button_cocoa.mm",
"cocoa/nsview_additions.h",
"cocoa/nsview_additions.mm",
"cocoa/omnibox/omnibox_popup_cell.h",
"cocoa/omnibox/omnibox_popup_cell.mm",
"cocoa/omnibox/omnibox_popup_matrix.h",
"cocoa/omnibox/omnibox_popup_matrix.mm",
"cocoa/omnibox/omnibox_popup_separator_view.h",
"cocoa/omnibox/omnibox_popup_separator_view.mm",
"cocoa/omnibox/omnibox_popup_view_mac.h",
"cocoa/omnibox/omnibox_popup_view_mac.mm",
"cocoa/omnibox/omnibox_view_mac.h",
"cocoa/omnibox/omnibox_view_mac.mm",
"cocoa/omnibox_decoration_bubble_controller.h",
"cocoa/omnibox_decoration_bubble_controller.mm",
"cocoa/one_click_signin_dialog_controller.h",
"cocoa/one_click_signin_dialog_controller.mm",
"cocoa/one_click_signin_view_controller.h",
"cocoa/one_click_signin_view_controller.mm",
"cocoa/page_info/page_info_bubble_controller.h",
"cocoa/page_info/page_info_bubble_controller.mm",
"cocoa/page_info/page_info_utils_cocoa.h",
"cocoa/page_info/page_info_utils_cocoa.mm",
"cocoa/page_info/permission_selector_button.h",
"cocoa/page_info/permission_selector_button.mm",
"cocoa/page_info/split_block_button.h",
"cocoa/page_info/split_block_button.mm",
"cocoa/password_reuse_warning_dialog_cocoa.h",
"cocoa/password_reuse_warning_dialog_cocoa.mm",
"cocoa/password_reuse_warning_view_controller.h",
"cocoa/password_reuse_warning_view_controller.mm",
"cocoa/permission_bubble/chooser_bubble_ui_cocoa.h",
"cocoa/permission_bubble/chooser_bubble_ui_cocoa.mm",
"cocoa/permission_bubble/chooser_bubble_ui_views_mac.mm",
"cocoa/permission_bubble/permission_prompt_impl_views_mac.mm",
"cocoa/profiles/avatar_base_controller.h",
"cocoa/profiles/avatar_base_controller.mm",
"cocoa/profiles/avatar_button.h",
"cocoa/profiles/avatar_button_cocoa.mm",
"cocoa/profiles/avatar_button_controller.h",
"cocoa/profiles/avatar_button_controller.mm",
"cocoa/profiles/avatar_icon_controller.h",
"cocoa/profiles/avatar_icon_controller.mm",
"cocoa/profiles/profile_chooser_bridge_views.h",
"cocoa/profiles/profile_chooser_bridge_views.mm",
"cocoa/profiles/profile_signin_confirmation_dialog_cocoa.h",
"cocoa/profiles/profile_signin_confirmation_dialog_cocoa.mm",
"cocoa/profiles/profile_signin_confirmation_view_controller.h",
"cocoa/profiles/profile_signin_confirmation_view_controller.mm",
"cocoa/profiles/signin_view_controller_delegate_mac.h",
"cocoa/profiles/signin_view_controller_delegate_mac.mm",
"cocoa/profiles/user_manager_mac.h",
"cocoa/profiles/user_manager_mac.mm",
"cocoa/rect_path_utils.h",
"cocoa/rect_path_utils.mm",
"cocoa/restart_browser.h",
"cocoa/restart_browser.mm",
"cocoa/screen_capture_notification_ui_cocoa.h",
"cocoa/screen_capture_notification_ui_cocoa.mm",
"cocoa/separate_fullscreen_window.h",
"cocoa/separate_fullscreen_window.mm",
"cocoa/simple_message_box_bridge_views.mm",
"cocoa/simple_message_box_cocoa.h",
"cocoa/simple_message_box_cocoa.mm",
"cocoa/single_web_contents_dialog_manager_cocoa.h",
"cocoa/single_web_contents_dialog_manager_cocoa.mm",
"cocoa/spinner_view.h",
"cocoa/spinner_view.mm",
"cocoa/ssl_client_certificate_selector_cocoa.h",
"cocoa/ssl_client_certificate_selector_cocoa.mm",
"cocoa/status_bubble_mac.h",
"cocoa/status_bubble_mac.mm",
"cocoa/styled_text_field.h",
"cocoa/styled_text_field.mm",
"cocoa/styled_text_field_cell.h",
"cocoa/styled_text_field_cell.mm",
"cocoa/subresource_filter/subresource_filter_bubble_controller.h",
"cocoa/subresource_filter/subresource_filter_bubble_controller.mm",
"cocoa/tab_contents/favicon_util_mac.h",
"cocoa/tab_contents/favicon_util_mac.mm",
"cocoa/tab_contents/overlayable_contents_controller.h",
"cocoa/tab_contents/overlayable_contents_controller.mm",
"cocoa/tab_contents/sad_tab_mac.mm",
"cocoa/tab_contents/sad_tab_view_cocoa.h",
"cocoa/tab_contents/sad_tab_view_cocoa.mm",
"cocoa/tab_contents/tab_contents_controller.h",
"cocoa/tab_contents/tab_contents_controller.mm",
"cocoa/tab_dialogs_cocoa.h",
"cocoa/tab_dialogs_cocoa.mm",
"cocoa/tab_dialogs_views_mac.h",
"cocoa/tab_dialogs_views_mac.mm",
"cocoa/tab_modal_confirm_dialog_mac.h",
"cocoa/tab_modal_confirm_dialog_mac.mm",
"cocoa/tabbed_browser_window.h",
"cocoa/tabbed_browser_window.mm",
"cocoa/tabs/alert_indicator_button_cocoa.h",
"cocoa/tabs/alert_indicator_button_cocoa.mm",
"cocoa/tabs/tab_controller.h",
"cocoa/tabs/tab_controller.mm",
"cocoa/tabs/tab_controller_target.h",
"cocoa/tabs/tab_favicon_view.h",
"cocoa/tabs/tab_favicon_view.mm",
"cocoa/tabs/tab_spinner_view.h",
"cocoa/tabs/tab_spinner_view.mm",
"cocoa/tabs/tab_strip_background_view.h",
"cocoa/tabs/tab_strip_background_view.mm",
"cocoa/tabs/tab_strip_controller.h",
"cocoa/tabs/tab_strip_controller.mm",
"cocoa/tabs/tab_strip_drag_controller.h",
"cocoa/tabs/tab_strip_drag_controller.mm",
"cocoa/tabs/tab_strip_model_observer_bridge.h",
"cocoa/tabs/tab_strip_model_observer_bridge.mm",
"cocoa/tabs/tab_strip_view.h",
"cocoa/tabs/tab_strip_view.mm",
"cocoa/tabs/tab_view.h",
"cocoa/tabs/tab_view.mm",
"cocoa/tabs/tab_window_controller.h",
"cocoa/tabs/tab_window_controller.mm",
"cocoa/themed_window.h",
"cocoa/themed_window.mm",
"cocoa/toolbar/app_toolbar_button.h",
"cocoa/toolbar/app_toolbar_button.mm",
"cocoa/toolbar/app_toolbar_button_cell.h",
"cocoa/toolbar/app_toolbar_button_cell.mm",
"cocoa/toolbar/back_forward_menu_controller.h",
"cocoa/toolbar/back_forward_menu_controller.mm",
"cocoa/toolbar/media_router_action_platform_delegate_cocoa.h",
"cocoa/toolbar/media_router_action_platform_delegate_cocoa.mm",
"cocoa/toolbar/reload_button_cocoa.h",
"cocoa/toolbar/reload_button_cocoa.mm",
"cocoa/toolbar/toolbar_button_cocoa.h",
"cocoa/toolbar/toolbar_button_cocoa.mm",
"cocoa/toolbar/toolbar_controller.h",
"cocoa/toolbar/toolbar_controller.mm",
"cocoa/toolbar/toolbar_view_cocoa.h",
"cocoa/toolbar/toolbar_view_cocoa.mm",
"cocoa/translate/translate_bubble_bridge_views.h",
"cocoa/translate/translate_bubble_bridge_views.mm",
"cocoa/translate/translate_bubble_controller.h",
"cocoa/translate/translate_bubble_controller.mm",
"cocoa/url_drop_target.h",
"cocoa/url_drop_target.mm",
"cocoa/vertical_gradient_view.h",
"cocoa/vertical_gradient_view.mm",
"cocoa/view_id_util.h",
"cocoa/view_id_util.mm",
"cocoa/view_resizer.h",
"cocoa/web_contents_modal_dialog_manager_views_mac.h",
"cocoa/web_contents_modal_dialog_manager_views_mac.mm",
"cocoa/web_textfield_touch_bar_controller.h",
"cocoa/web_textfield_touch_bar_controller.mm",
# TODO(estade): this class should be deleted in favor of a combobox model.
# See crbug.com/590850
"content_settings/content_setting_media_menu_model.cc",
"content_settings/content_setting_media_menu_model.h",
"javascript_dialogs/javascript_dialog_cocoa.h",
"javascript_dialogs/javascript_dialog_cocoa.mm",
"javascript_dialogs/javascript_dialog_mac.cc",
"proximity_auth/proximity_auth_error_bubble_stub.cc",
"startup/session_crashed_infobar_delegate.cc",
"startup/session_crashed_infobar_delegate.h",
]
}
sources = [
"accelerator_utils.h",
"app_list/app_list_util.cc",
"app_list/app_list_util.h",
# All other browser/ui/app_list files go under enable_app_list below.
"webui/hello_world_ui.cc",
"webui/hello_world_ui.h",
...
编辑Z:\chromium\src\chrome\browser\ui\webui\chrome_web_ui_controller_factory.cc
// Copyright (c) 2012 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/chrome_web_ui_controller_factory.h"
#include <stddef.h>
#include <vector>
#include "base/bind.h"
#include "base/feature_list.h"
#include "base/location.h"
#include "base/threading/thread_task_runner_handle.h"
#include "build/build_config.h"
#include "chrome/browser/about_flags.h"
#include "chrome/browser/devtools/devtools_ui_bindings.h"
#include "chrome/browser/dom_distiller/dom_distiller_service_factory.h"
#include "chrome/browser/engagement/site_engagement_service.h"
#include "chrome/browser/media/media_engagement_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/search/suggestions/suggestions_ui.h"
#include "chrome/browser/ui/history_ui.h"
#include "chrome/browser/ui/webui/about_ui.h"
#include "chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.h"
#include "chrome/browser/ui/webui/components_ui.h"
#include "chrome/browser/ui/webui/constrained_web_dialog_ui.h"
#include "chrome/browser/ui/webui/crashes_ui.h"
#include "chrome/browser/ui/webui/device_log_ui.h"
#include "chrome/browser/ui/webui/domain_reliability_internals_ui.h"
#include "chrome/browser/ui/webui/download_internals/download_internals_ui.h"
#include "chrome/browser/ui/webui/engagement/site_engagement_ui.h"
#include "chrome/browser/ui/webui/flags_ui.h"
#include "chrome/browser/ui/webui/flash_ui.h"
#include "chrome/browser/ui/webui/gcm_internals_ui.h"
#include "chrome/browser/ui/webui/identity_internals_ui.h"
#include "chrome/browser/ui/webui/interstitials/interstitial_ui.h"
#include "chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h"
#include "chrome/browser/ui/webui/invalidations_ui.h"
#include "chrome/browser/ui/webui/local_state/local_state_ui.h"
#include "chrome/browser/ui/webui/log_web_ui_url.h"
#include "chrome/browser/ui/webui/media/media_engagement_ui.h"
#include "chrome/browser/ui/webui/media/webrtc_logs_ui.h"
#include "chrome/browser/ui/webui/memory_internals_ui.h"
#include "chrome/browser/ui/webui/net_export_ui.h"
#include "chrome/browser/ui/webui/net_internals/net_internals_ui.h"
#include "chrome/browser/ui/webui/ntp_tiles_internals_ui.h"
#include "chrome/browser/ui/webui/omnibox/omnibox_ui.h"
#include "chrome/browser/ui/webui/password_manager_internals/password_manager_internals_ui.h"
#include "chrome/browser/ui/webui/policy_tool_ui.h"
#include "chrome/browser/ui/webui/policy_ui.h"
#include "chrome/browser/ui/webui/predictors/predictors_ui.h"
#include "chrome/browser/ui/webui/quota_internals/quota_internals_ui.h"
#include "chrome/browser/ui/webui/settings/md_settings_ui.h"
#include "chrome/browser/ui/webui/settings_utils.h"
#include "chrome/browser/ui/webui/signin_internals_ui.h"
#include "chrome/browser/ui/webui/supervised_user_internals_ui.h"
#include "chrome/browser/ui/webui/sync_internals_ui.h"
#include "chrome/browser/ui/webui/task_scheduler_internals/task_scheduler_internals_ui.h"
#include "chrome/browser/ui/webui/translate_internals/translate_internals_ui.h"
#include "chrome/browser/ui/webui/usb_internals/usb_internals_ui.h"
#include "chrome/browser/ui/webui/user_actions/user_actions_ui.h"
#include "chrome/browser/ui/webui/version_ui.h"
#include "chrome/common/buildflags.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "components/dom_distiller/core/dom_distiller_constants.h"
#include "components/dom_distiller/core/dom_distiller_features.h"
#include "components/dom_distiller/core/dom_distiller_service.h"
#include "components/dom_distiller/core/url_constants.h"
#include "components/dom_distiller/webui/dom_distiller_ui.h"
#include "components/favicon/core/favicon_service.h"
#include "components/favicon_base/favicon_util.h"
#include "components/favicon_base/select_favicon_frames.h"
#include "components/history/core/browser/history_types.h"
#include "components/nacl/common/buildflags.h"
#include "components/prefs/pref_service.h"
#include "components/safe_browsing/web_ui/constants.h"
#include "components/safe_browsing/web_ui/safe_browsing_ui.h"
#include "chrome/browser/ui/webui/hello_world_ui.h"
// #include "components/hello_world/constants.h"
#include "components/security_interstitials/content/connection_help_ui.h"
#include "components/security_interstitials/content/urls.h"
#include "components/signin/core/browser/profile_management_switches.h"
#include "components/signin/core/browser/signin_buildflags.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "content/public/common/content_client.h"
#include "content/public/common/url_utils.h"
#include "extensions/buildflags/buildflags.h"
#include "media/media_buildflags.h"
#include "ppapi/buildflags/buildflags.h"
#include "printing/buildflags/buildflags.h"
#include "ui/gfx/favicon_size.h"
#include "ui/web_dialogs/web_dialog_ui.h"
#include "url/gurl.h"
#if BUILDFLAG(ENABLE_NACL)
#include "chrome/browser/ui/webui/nacl_ui.h"
#endif
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
#include "chrome/browser/ui/webui/print_preview/print_preview_ui.h"
#endif
#if !defined(OS_ANDROID)
#include "chrome/browser/media/router/media_router_feature.h"
#include "chrome/browser/ui/webui/media_router/media_router_internals_ui.h"
#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
#endif
#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
#include "chrome/browser/ui/webui/cast/cast_ui.h"
#endif
#if defined(OS_ANDROID)
#include "chrome/browser/ui/webui/offline/offline_internals_ui.h"
#include "chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.h"
#include "chrome/browser/ui/webui/webapks_ui.h"
#else
#include "chrome/browser/ui/webui/devtools_ui.h"
#include "chrome/browser/ui/webui/inspect_ui.h"
#include "chrome/browser/ui/webui/md_bookmarks/md_bookmarks_ui.h"
#include "chrome/browser/ui/webui/md_downloads/md_downloads_ui.h"
#include "chrome/browser/ui/webui/md_history_ui.h"
#include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
#include "chrome/browser/ui/webui/page_not_available_for_guest/page_not_available_for_guest_ui.h"
#include "chrome/browser/ui/webui/sync_file_system_internals/sync_file_system_internals_ui.h"
#include "chrome/browser/ui/webui/system_info_ui.h"
#endif
#if defined(OS_CHROMEOS)
#include "base/sys_info.h"
#include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.h"
#include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_factory.h"
#include "chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.h"
#include "chrome/browser/ui/webui/chromeos/bluetooth_pairing_dialog.h"
#include "chrome/browser/ui/webui/chromeos/certificate_manager_dialog_ui.h"
#include "chrome/browser/ui/webui/chromeos/cryptohome_ui.h"
#include "chrome/browser/ui/webui/chromeos/drive_internals_ui.h"
#include "chrome/browser/ui/webui/chromeos/first_run/first_run_ui.h"
#include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h"
#include "chrome/browser/ui/webui/chromeos/internet_detail_dialog.h"
#include "chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/browser/ui/webui/chromeos/mobile_setup_ui.h"
#include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h"
#include "chrome/browser/ui/webui/chromeos/network_ui.h"
#include "chrome/browser/ui/webui/chromeos/power_ui.h"
#include "chrome/browser/ui/webui/chromeos/set_time_ui.h"
#include "chrome/browser/ui/webui/chromeos/slow_trace_ui.h"
#include "chrome/browser/ui/webui/chromeos/slow_ui.h"
#include "chrome/browser/ui/webui/chromeos/sys_internals/sys_internals_ui.h"
#include "chromeos/components/proximity_auth/webui/proximity_auth_ui.h"
#include "chromeos/components/proximity_auth/webui/url_constants.h"
#endif
#if defined(OS_CHROMEOS) && !defined(OFFICIAL_BUILD)
#include "chrome/browser/ui/webui/chromeos/emulator/device_emulator_ui.h"
#endif
#if !defined(OS_CHROMEOS)
#include "chrome/browser/ui/webui/app_launcher_page_ui.h"
#endif
#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
#include "chrome/browser/ui/sync/sync_promo_ui.h"
#include "chrome/browser/ui/webui/signin/inline_login_ui.h"
#include "chrome/browser/ui/webui/signin/md_user_manager_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/sync_confirmation_ui.h"
#include "chrome/browser/ui/webui/welcome_ui.h"
#endif
#if defined(OS_WIN)
#include "chrome/browser/ui/webui/conflicts_ui.h"
#include "chrome/browser/ui/webui/set_as_default_browser_ui_win.h"
#include "chrome/browser/ui/webui/welcome_win10_ui.h"
#endif
#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
#include "chrome/browser/ui/webui/discards/discards_ui.h"
#endif
#if defined(OS_LINUX) || defined(OS_ANDROID)
#include "chrome/browser/ui/webui/sandbox_internals_ui.h"
#endif
#if defined(USE_NSS_CERTS) && defined(USE_AURA)
#include "chrome/browser/ui/webui/certificate_viewer_ui.h"
#endif
#if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
#include "chrome/browser/ui/webui/local_discovery/local_discovery_ui.h"
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "chrome/browser/extensions/extension_web_ui.h"
#include "chrome/browser/ui/webui/extensions/extensions_ui.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/extensions/extension_constants.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/common/constants.h"
#include "extensions/common/extension.h"
#include "extensions/common/feature_switch.h"
#include "extensions/common/manifest.h"
#endif
#if defined(SAFE_BROWSING_DB_LOCAL)
#include "chrome/browser/safe_browsing/chrome_password_protection_service.h"
#include "chrome/browser/ui/webui/reset_password/reset_password_ui.h"
#include "components/safe_browsing/features.h"
#endif
using content::WebUI;
using content::WebUIController;
using ui::WebDialogUI;
namespace {
// A function for creating a new WebUI. The caller owns the return value, which
// may be NULL (for example, if the URL refers to an non-existent extension).
typedef WebUIController* (*WebUIFactoryFunction)(WebUI* web_ui,
const GURL& url);
// Template for defining WebUIFactoryFunction.
template<class T>
WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) {
return new T(web_ui);
}
#if !defined(OS_ANDROID)
template <>
WebUIController* NewWebUI<PageNotAvailableForGuestUI>(WebUI* web_ui,
const GURL& url) {
return new PageNotAvailableForGuestUI(web_ui, url.host());
}
#endif
// Special case for older about: handlers.
template<>
WebUIController* NewWebUI<AboutUI>(WebUI* web_ui, const GURL& url) {
return new AboutUI(web_ui, url.host());
}
#if defined(OS_CHROMEOS)
template<>
WebUIController* NewWebUI<chromeos::OobeUI>(WebUI* web_ui, const GURL& url) {
return new chromeos::OobeUI(web_ui, url);
}
// Special case for chrome://proximity_auth.
template <>
WebUIController* NewWebUI<proximity_auth::ProximityAuthUI>(WebUI* web_ui,
const GURL& url) {
content::BrowserContext* browser_context =
web_ui->GetWebContents()->GetBrowserContext();
return new proximity_auth::ProximityAuthUI(
web_ui,
chromeos::EasyUnlockServiceFactory::GetForBrowserContext(browser_context)
->proximity_auth_client());
}
#endif
// Special cases for DOM distiller.
template<>
WebUIController* NewWebUI<dom_distiller::DomDistillerUi>(WebUI* web_ui,
const GURL& url) {
// The DomDistillerUi can not depend on components/dom_distiller/content,
// so inject the correct DomDistillerService from chrome/.
content::BrowserContext* browser_context =
web_ui->GetWebContents()->GetBrowserContext();
dom_distiller::DomDistillerService* service =
dom_distiller::DomDistillerServiceFactory::GetForBrowserContext(
browser_context);
return new dom_distiller::DomDistillerUi(
web_ui, service, dom_distiller::kDomDistillerScheme);
}
#if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
template <>
WebUIController* NewWebUI<WelcomeUI>(WebUI* web_ui, const GURL& url) {
return new WelcomeUI(web_ui, url);
}
#endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
#if defined(OS_WIN)
template <>
WebUIController* NewWebUI<WelcomeWin10UI>(WebUI* web_ui, const GURL& url) {
return new WelcomeWin10UI(web_ui, url);
}
#endif // defined(OS_WIN)
bool IsAboutUI(const GURL& url) {
return (url.host_piece() == chrome::kChromeUIChromeURLsHost ||
url.host_piece() == chrome::kChromeUICreditsHost ||
url.host_piece() == chrome::kChromeUIDNSHost
#if !defined(OS_ANDROID)
|| url.host_piece() == chrome::kChromeUITermsHost
#endif
#if defined(OS_LINUX) || defined(OS_OPENBSD)
|| url.host_piece() == chrome::kChromeUILinuxProxyConfigHost
#endif
#if defined(OS_CHROMEOS)
|| url.host_piece() == chrome::kChromeUIOSCreditsHost
#endif
); // NOLINT
}
// Returns a function that can be used to create the right type of WebUI for a
// tab, based on its URL. Returns NULL if the URL doesn't have WebUI associated
// with it.
WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
Profile* profile,
const GURL& url) {
// This will get called a lot to check all URLs, so do a quick check of other
// schemes to filter out most URLs.
if (!url.SchemeIs(content::kChromeDevToolsScheme) &&
!url.SchemeIs(content::kChromeUIScheme)) {
return NULL;
}
// @todo ls
if (url.host() == chrome::kChromeUIHelloWorldHost) {
return &NewWebUI<HelloWorldUI>;
}
重新生成工程文件
Z:\chromium\src>gn gen --ide=vs out\Default_68_0_3440_84
重新编译工程
这步是编译过的,如果编译不过,对照官方文档和已有的web-ui实现,比对下区别.
官方文档很少有不对的时候,深深怀疑自己哪里搞错了。
也可能是做实验时间太长了,大脑短路了。
Z:\chromium\src>autoninja -C out\Default_68_0_3440_84 chrome
实验运行新加入的web_ui的效果