Transpile new-tab webui using webpack

This commit is contained in:
Brian R. Bondy
2018-01-18 14:12:31 -05:00
parent e359b9c5e1
commit 4e2ae000a0
17 changed files with 279 additions and 22 deletions
+40
View File
@@ -5,6 +5,39 @@
#include "brave/browser/brave_content_browser_client.h"
#include "brave/browser/brave_browser_main_extra_parts.h"
#include "brave/common/webui_url_constants.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/browser_url_handler.h"
namespace {
bool HandleNewTabURLRewrite(GURL* url,
content::BrowserContext* browser_context) {
if (!url->SchemeIs(content::kChromeUIScheme) ||
url->host() != chrome::kChromeUINewTabHost)
return false;
*url = GURL(kBraveNewTabUrl);
return true;
}
bool HandleNewTabURLReverseRewrite(GURL* url,
content::BrowserContext* browser_context) {
// Do nothing in incognito.
Profile* profile = Profile::FromBrowserContext(browser_context);
if (profile && profile->IsOffTheRecord())
return false;
if (url->spec() == kBraveNewTabUrl) {
*url = GURL(kBraveNewTabUrl);
return true;
}
return false;
}
}
BraveContentBrowserClient::BraveContentBrowserClient() {}
@@ -17,3 +50,10 @@ content::BrowserMainParts* BraveContentBrowserClient::CreateBrowserMainParts(
main_parts->AddParts(new BraveBrowserMainExtraParts());
return main_parts;
}
void BraveContentBrowserClient::BrowserURLHandlerCreated(content::BrowserURLHandler* handler) {
// Handler to rewrite chrome://newtab
handler->AddHandlerPair(&HandleNewTabURLRewrite,
&HandleNewTabURLReverseRewrite);
ChromeContentBrowserClient::BrowserURLHandlerCreated(handler);
}
+1
View File
@@ -15,6 +15,7 @@ class BraveContentBrowserClient : public ChromeContentBrowserClient {
// Overridden from ChromeContentBrowserClient:
content::BrowserMainParts* CreateBrowserMainParts(
const content::MainFunctionParams& parameters) override;
void BrowserURLHandlerCreated(content::BrowserURLHandler* handler) override;
private:
DISALLOW_COPY_AND_ASSIGN(BraveContentBrowserClient);
@@ -32,7 +32,7 @@ WebUIController* NewWebUI<BasicUI>(WebUI* web_ui, const GURL& url) {
if (host == kPaymentsHost) {
return new BasicUI(web_ui, url.host(), kPaymentsJS,
IDR_BRAVE_PAYMENTS_JS, IDR_BRAVE_PAYMENTS_HTML);
} else if (host == chrome::kChromeUINewTabHost) {
} else if (host == kBraveNewTabHost) {
return new BasicUI(web_ui, url.host(), kBraveNewTabJS,
IDR_BRAVE_NEW_TAB_JS, IDR_BRAVE_NEW_TAB_HTML);
} else if (host == chrome::kChromeUIWelcomeHost) {
@@ -48,7 +48,7 @@ WebUIController* NewWebUI<BasicUI>(WebUI* web_ui, const GURL& url) {
WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
const GURL& url) {
if (url.host_piece() == kPaymentsHost ||
url.host_piece() == chrome::kChromeUINewTabHost ||
url.host_piece() == kBraveNewTabHost||
url.host_piece() == chrome::kChromeUIWelcomeHost) {
return &NewWebUI<BasicUI>;
}
+2
View File
@@ -4,3 +4,5 @@ const char kPaymentsHost[] = "payments";
const char kPaymentsJS[] = "brave_payments.js";
const char kBraveNewTabJS[] = "brave_new_tab.js";
const char kWelcomeJS[] = "welcome.js";
const char kBraveNewTabHost[] = "bravenewtab";
const char kBraveNewTabUrl[] = "chrome://bravenewtab";;
+2
View File
@@ -5,6 +5,8 @@ extern const char kPaymentsHost[];
extern const char kPaymentsJS[];
extern const char kBraveNewTabJS[];
extern const char kWelcomeJS[];
extern const char kBraveNewTabHost[];
extern const char kBraveNewTabUrl[];
#endif // BRAVE_COMMON_URL_CONSTANTS_H_
@@ -5,8 +5,8 @@
<meta name="viewport" content="width=device-width">
<title>New Tab</title>
<link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
<script src="chrome://newtab/brave_new_tab.js"></script>
<body>
Brave New Tab
<div id="root"></div>
<script src="chrome://bravenewtab/brave_new_tab.js"></script>
</body>
</html>
@@ -1 +1,17 @@
import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import { createStore } from 'redux'
import reducers from './reducers'
import App from './components/app'
let store = createStore(reducers)
render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
)
console.log('brave_new_tab.js loaded')
@@ -0,0 +1,7 @@
import React from 'react'
const App = () => (
<div>New Tab!</div>
)
export default App
@@ -0,0 +1,8 @@
import { combineReducers } from 'redux'
import newTabReducer from './newTabReducer'
const combinedReducer = combineReducers({
newTabReducer
})
export default combinedReducer
@@ -0,0 +1,8 @@
const newTabReducer = (state = {}, action) => {
switch (action.type) {
default:
return state
}
}
export default newTabReducer
+33
View File
@@ -1,6 +1,34 @@
import("//printing/features/features.gni")
import("//tools/grit/grit_rule.gni")
action("transpile_web_uis") {
script = "//brave/script/transpile-web-ui.py"
inputs = [
"../brave_new_tab_ui/brave_new_tab.html",
"../brave_new_tab_ui/brave_new_tab.js",
"../brave_payments_ui/brave_payments.html",
"../welcome_ui/welcome.html",
"../welcome_ui/welcome.js"
]
outputs = [
"$target_out_dir/brave_new_tab.bundle.js",
"$target_out_dir/brave_payments.bundle.js",
"$target_out_dir/welcome.bundle.js"
]
gen_dir = rebase_path(root_gen_dir, "//")
args = [
"--target_gen_dir=$gen_dir"
]
if (is_official_build) {
args += [
"--production",
]
}
}
grit("brave_components_resources_grit") {
source = "brave_components_resources.grd"
@@ -9,6 +37,11 @@ grit("brave_components_resources_grit") {
"grit/brave_components_resources.h",
"brave_components_resources.pak",
]
deps = [ ":transpile_web_uis" ]
grit_flags = [
"-E",
"root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
]
output_dir = "$root_gen_dir/components"
resource_ids = "//brave/browser/resources/resource_ids"
}
@@ -13,11 +13,13 @@
<!-- WebUI resrouces -->
<include name="IDR_BRAVE_PAYMENTS_HTML" file="../brave_payments_ui/brave_payments.html" type="BINDATA" />
<include name="IDR_BRAVE_PAYMENTS_JS" file="../brave_payments_ui/brave_payments.js" type="BINDATA" />
<include name="IDR_BRAVE_PAYMENTS_JS" file="${root_gen_dir}/brave/brave_payments.bundle.js" type="BINDATA" use_base_dir="false" />
<include name="IDR_BRAVE_NEW_TAB_HTML" file="../brave_new_tab_ui/brave_new_tab.html" type="BINDATA" />
<include name="IDR_BRAVE_NEW_TAB_JS" file="../brave_new_tab_ui/brave_new_tab.js" type="BINDATA" />
<include name="IDR_BRAVE_NEW_TAB_JS" file="${root_gen_dir}/brave/brave_new_tab.bundle.js" type="BINDATA" use_base_dir="false" />
<include name="IDR_BRAVE_WELCOME_HTML" file="../welcome_ui/welcome.html" type="BINDATA" />
<include name="IDR_BRAVE_WELCOME_JS" file="../welcome_ui/welcome.js" type="BINDATA" />
<include name="IDR_BRAVE_WELCOME_JS" file="${root_gen_dir}/brave/welcome.bundle.js" type="BINDATA" use_base_dir="false" />
</includes>
</release>
</grit>
+51
View File
@@ -0,0 +1,51 @@
const path = require('path')
const webpack = require('webpack')
const postCSSConfig = require('./postcss.config')
module.exports = {
entry: {
brave_new_tab: path.join(__dirname, '../brave_new_tab_ui/brave_new_tab'),
welcome: path.join(__dirname, '../welcome_ui/welcome'),
brave_payments: path.join(__dirname, '../brave_payments_ui/brave_payments')
},
output: {
path: path.join(__dirname, '..', '..', '..', process.env.TARGET_GEN_DIR, 'brave'),
filename: '[name].bundle.js',
chunkFilename: '[id].chunk.js'
},
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.IgnorePlugin(/[^/]+\/[\S]+.dev$/),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('development')
}
})
],
resolve: {
extensions: ['.ts', '.tsx', '.js']
},
module: {
rules: [
{
test: /\.tsx?$/,
loader: 'awesome-typescript-loader'
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['react-optimize']
}
}, {
test: /\.css$/,
loaders: [
'style-loader',
'css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]',
{loader: 'postcss-loader', options: postCSSConfig}
]
}]
}
}
+4
View File
@@ -0,0 +1,4 @@
module.exports = {
plugins: [
]
}
+56
View File
@@ -0,0 +1,56 @@
const path = require('path')
const webpack = require('webpack')
const postCSSConfig = require('./postcss.config')
module.exports = {
entry: {
brave_new_tab: path.join(__dirname, '../brave_new_tab_ui/brave_new_tab'),
welcome: path.join(__dirname, '../welcome_ui/welcome'),
brave_payments: path.join(__dirname, '../brave_payments_ui/brave_payments')
},
output: {
path: path.join(__dirname, '..', '..', '..', process.env.TARGET_GEN_DIR, 'brave'),
filename: '[name].bundle.js',
chunkFilename: '[id].chunk.js'
},
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.IgnorePlugin(/[^/]+\/[\S]+.dev$/),
new webpack.optimize.UglifyJsPlugin({
comments: false,
compressor: {
warnings: false
}
}),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('production')
}
})
],
resolve: {
extensions: ['.ts', '.tsx', '.js']
},
module: {
rules: [
{
test: /\.tsx?$/,
loader: 'awesome-typescript-loader'
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['react-optimize']
}
}, {
test: /\.css$/,
loaders: [
'style-loader',
'css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]',
{loader: 'postcss-loader', options: postCSSConfig}
]
}]
}
}
@@ -1,15 +0,0 @@
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 7eb6ac81040172c0739e62b3140120099ca32ffb..ca5bd3cc71109c5968b963da3e431170ee307e2e 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -2673,10 +2673,6 @@ void ChromeContentBrowserClient::BrowserURLHandlerCreated(
// Handler to rewrite chrome://newtab on Android.
handler->AddHandlerPair(&chrome::android::HandleAndroidNativePageURL,
BrowserURLHandler::null_handler());
-#else
- // Handler to rewrite chrome://newtab for InstantExtended.
- handler->AddHandlerPair(&search::HandleNewTabURLRewrite,
- &search::HandleNewTabURLReverseRewrite);
#endif
// chrome: & friends.
+42
View File
@@ -0,0 +1,42 @@
import argparse
import os
import sys
from lib.util import execute_stdout, scoped_cwd
NPM = 'npm'
if sys.platform in ['win32', 'cygwin']:
NPM += '.cmd'
def main():
args = parse_args()
update_node_modules('.', args.production, args.target_gen_dir[0])
def parse_args():
parser = argparse.ArgumentParser(description='Transpile web-uis')
parser.add_argument('-p', '--production',
action='store_true',
help='Uses production config')
parser.add_argument('--target_gen_dir',
nargs=1)
return parser.parse_args()
def update_node_modules(dirname, production, target_gen_dir, env=None):
if env is None:
env = os.environ.copy()
if production:
args = [NPM, 'run', 'web-ui']
else:
args = [NPM, 'run', 'web-ui-dev']
env["TARGET_GEN_DIR"] = target_gen_dir
with scoped_cwd(dirname):
execute_stdout(args, env)
if __name__ == '__main__':
sys.exit(main())