Transpile new-tab webui using webpack
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>;
|
||||
}
|
||||
|
||||
@@ -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";;
|
||||
|
||||
@@ -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
|
||||
@@ -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>
|
||||
|
||||
@@ -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}
|
||||
]
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
module.exports = {
|
||||
plugins: [
|
||||
]
|
||||
}
|
||||
@@ -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.
|
||||
Executable
+42
@@ -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())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user