Commit e5e6253c authored by apavlov@chromium.org's avatar apavlov@chromium.org

DevTools: Get rid of module initializers in the source tree

The _module.js files are currently used only at build-time in the
release mode and at run-time when starting workers.
We have all the required module info in module.json files,
and workers can be loaded in the debug mode through a blob containing
concatenated scripts for the worker, loaded via sync XHRs.
This patch also gets rid of common/modules.js: module descriptors
are now inlined into Runtime.js.

R=pfeldman, vsevik
BUG=391566

Review URL: https://codereview.chromium.org/472903003

git-svn-id: svn://svn.chromium.org/blink/trunk@180452 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent e49aedca
......@@ -81,22 +81,22 @@ action("generate_devtools_grd") {
input_pages = [
"$root_out_dir/resources/inspector/devtools.html",
"$root_out_dir/resources/inspector/inspector.css",
"$root_out_dir/resources/inspector/audits/_module.js",
"$root_out_dir/resources/inspector/console/_module.js",
"$root_out_dir/resources/inspector/devices/_module.js",
"$root_out_dir/resources/inspector/elements/_module.js",
"$root_out_dir/resources/inspector/extensions/_module.js",
"$root_out_dir/resources/inspector/heap_snapshot_worker/_module.js",
"$root_out_dir/resources/inspector/layers/_module.js",
"$root_out_dir/resources/inspector/audits.js",
"$root_out_dir/resources/inspector/console.js",
"$root_out_dir/resources/inspector/devices.js",
"$root_out_dir/resources/inspector/elements.js",
"$root_out_dir/resources/inspector/extensions.js",
"$root_out_dir/resources/inspector/heap_snapshot_worker.js",
"$root_out_dir/resources/inspector/layers.js",
"$root_out_dir/resources/inspector/main/Main.js",
"$root_out_dir/resources/inspector/network/_module.js",
"$root_out_dir/resources/inspector/profiler/_module.js",
"$root_out_dir/resources/inspector/resources/_module.js",
"$root_out_dir/resources/inspector/script_formatter_worker/_module.js",
"$root_out_dir/resources/inspector/source_frame/_module.js",
"$root_out_dir/resources/inspector/sources/_module.js",
"$root_out_dir/resources/inspector/temp_storage_shared_worker/_module.js",
"$root_out_dir/resources/inspector/timeline/_module.js",
"$root_out_dir/resources/inspector/network.js",
"$root_out_dir/resources/inspector/profiler.js",
"$root_out_dir/resources/inspector/resources.js",
"$root_out_dir/resources/inspector/script_formatter_worker.js",
"$root_out_dir/resources/inspector/source_frame.js",
"$root_out_dir/resources/inspector/sources.js",
"$root_out_dir/resources/inspector/temp_storage_shared_worker.js",
"$root_out_dir/resources/inspector/timeline.js",
"$root_out_dir/resources/inspector/devtools_extension_api.js",
] + gypi_values.devtools_standalone_files + gypi_values.devtools_cm_css_files
......@@ -179,21 +179,21 @@ action("frontend_protocol_sources") {
]
}
# Runs the inline_js_imports script.
# Runs the concatenate_module_scripts script.
# module_name: (String) The JS module name to process.
# imported_files: (List of strings) The list of files the input depends on.
template("inline_js_imports") {
template("concatenate_module_scripts") {
assert(defined(invoker.module_name), target_name)
assert(defined(invoker.imported_files), target_name)
action(target_name) {
script = "scripts/inline_js_imports.py"
script = "scripts/concatenate_module_scripts.py"
module_name = invoker.module_name
input = "front_end/" + module_name + "/_module.js"
input = "front_end/" + module_name + "/module.json"
inputs = [ input ] + invoker.imported_files
output = "$root_out_dir/resources/inspector/" + module_name + "/_module.js"
output = "$root_out_dir/resources/inspector/" + module_name + ".js"
outputs = [ output ]
args = [
......@@ -203,12 +203,12 @@ template("inline_js_imports") {
}
}
inline_js_imports("build_audits_module") {
concatenate_module_scripts("build_audits_module") {
module_name = "audits"
imported_files = gypi_values.devtools_audits_js_files
}
inline_js_imports("build_console_module") {
concatenate_module_scripts("build_console_module") {
module_name = "console"
imported_files = gypi_values.devtools_console_js_files
}
......@@ -218,9 +218,9 @@ action("build_core_module") {
input_page = "front_end/inspector.html"
inputs = [
input_page,
blink_devtools_output_dir + "Runtime.js",
blink_devtools_output_dir + "InspectorBackendCommands.js",
blink_devtools_output_dir + "SupportedCSSProperties.js",
blink_devtools_output_dir + "common/modules.js",
] + devtools_core_js_files
search_path = [
......@@ -245,78 +245,78 @@ action("build_core_module") {
]
}
inline_js_imports("build_devices_module") {
concatenate_module_scripts("build_devices_module") {
module_name = "devices"
imported_files = gypi_values.devtools_devices_js_files
}
inline_js_imports("build_documentation_module") {
concatenate_module_scripts("build_documentation_module") {
module_name = "documentation"
imported_files = gypi_values.devtools_documentation_js_files
}
inline_js_imports("build_elements_module") {
concatenate_module_scripts("build_elements_module") {
module_name = "elements"
imported_files = gypi_values.devtools_elements_js_files
}
inline_js_imports("build_extensions_module") {
concatenate_module_scripts("build_extensions_module") {
module_name = "extensions"
imported_files = devtools_extensions_js_files
}
inline_js_imports("build_heap_snapshot_worker_module") {
concatenate_module_scripts("build_heap_snapshot_worker_module") {
module_name = "heap_snapshot_worker"
imported_files = gypi_values.devtools_heap_snapshot_worker_js_files
}
inline_js_imports("build_layers_module") {
concatenate_module_scripts("build_layers_module") {
module_name = "layers"
imported_files = gypi_values.devtools_layers_js_files
}
inline_js_imports("build_network_module") {
concatenate_module_scripts("build_network_module") {
module_name = "network"
imported_files = gypi_values.devtools_network_js_files
}
inline_js_imports("build_profiler_module") {
concatenate_module_scripts("build_profiler_module") {
module_name = "profiler"
imported_files = gypi_values.devtools_profiler_js_files
}
inline_js_imports("build_resources_module") {
concatenate_module_scripts("build_resources_module") {
module_name = "resources"
imported_files = gypi_values.devtools_resources_js_files
}
inline_js_imports("build_script_formatter_worker_module") {
concatenate_module_scripts("build_script_formatter_worker_module") {
module_name = "script_formatter_worker"
imported_files = gypi_values.devtools_uglify_files
}
inline_js_imports("build_settings_module") {
concatenate_module_scripts("build_settings_module") {
module_name = "settings"
imported_files = gypi_values.devtools_settings_js_files
}
inline_js_imports("build_source_frame_module") {
concatenate_module_scripts("build_source_frame_module") {
module_name = "source_frame"
imported_files = gypi_values.devtools_source_frame_js_files +
gypi_values.devtools_cm_js_files
}
inline_js_imports("build_sources_module") {
concatenate_module_scripts("build_sources_module") {
module_name = "sources"
imported_files = gypi_values.devtools_sources_js_files
}
inline_js_imports("build_temp_storage_shared_worker_module") {
concatenate_module_scripts("build_temp_storage_shared_worker_module") {
module_name = "temp_storage_shared_worker"
imported_files = gypi_values.devtools_temp_storage_shared_worker_js_files
}
inline_js_imports("build_timeline_module") {
concatenate_module_scripts("build_timeline_module") {
module_name = "timeline"
imported_files = gypi_values.devtools_timeline_js_files
}
......@@ -324,9 +324,9 @@ inline_js_imports("build_timeline_module") {
action("concatenated_module_descriptors") {
script = "scripts/concatenate_module_descriptors.py"
input = "front_end/common/modules.js"
input = "front_end/Runtime.js"
inputs = [ input ] + gypi_values.devtools_module_json_files
outputs = [ blink_devtools_output_dir + "common/modules.js" ]
outputs = [ blink_devtools_output_dir + "Runtime.js" ]
args = rebase_path([ input ] + outputs + gypi_values.devtools_module_json_files, root_build_dir)
}
......
......@@ -47,7 +47,6 @@
],
'devtools_core_base_files': [
'front_end/inspector.html',
'front_end/Runtime.js',
'front_end/Tests.js',
'front_end/TestController.js',
'front_end/dialog.css',
......@@ -69,7 +68,6 @@
'front_end/common/Geometry.js',
'front_end/common/Lock.js',
'front_end/common/ModuleExtensionInterfaces.js',
'front_end/common/modules.js',
'front_end/common/NotificationService.js',
'front_end/common/Object.js',
'front_end/common/ParsedURL.js',
......@@ -258,14 +256,17 @@
'front_end/documentation/module.json',
'front_end/elements/module.json',
'front_end/extensions/module.json',
'front_end/heap_snapshot_worker/module.json',
'front_end/layers/module.json',
'front_end/main/module.json',
'front_end/network/module.json',
'front_end/profiler/module.json',
'front_end/resources/module.json',
'front_end/script_formatter_worker/module.json',
'front_end/settings/module.json',
'front_end/source_frame/module.json',
'front_end/sources/module.json',
'front_end/temp_storage_shared_worker/module.json',
'front_end/timeline/module.json',
],
'all_devtools_files': [
......@@ -315,7 +316,6 @@
# Lazy-loaded modules.
'devtools_audits_js_files': [
'front_end/audits/_module.js',
'front_end/audits/AuditCategories.js',
'front_end/audits/AuditCategory.js',
'front_end/audits/AuditController.js',
......@@ -326,17 +326,14 @@
'front_end/audits/AuditsPanel.js',
],
'devtools_console_js_files': [
'front_end/console/_module.js',
'front_end/console/ConsolePanel.js',
'front_end/console/ConsoleView.js',
'front_end/console/ConsoleViewMessage.js',
],
'devtools_devices_js_files': [
'front_end/devices/_module.js',
'front_end/devices/DevicesView.js',
],
'devtools_documentation_js_files': [
'front_end/documentation/_module.js',
'front_end/documentation/CSSArticle.js',
'front_end/documentation/DocumentationURLProvider.js',
'front_end/documentation/DocumentationView.js',
......@@ -344,7 +341,6 @@
'front_end/documentation/WikiParser.js',
],
'devtools_elements_js_files': [
'front_end/elements/_module.js',
'front_end/elements/DOMSyntaxHighlighter.js',
'front_end/elements/ElementsPanel.js',
'front_end/elements/ElementsTreeOutline.js',
......@@ -356,7 +352,6 @@
'front_end/elements/StylesSidebarPane.js',
],
'devtools_extensions_js_files': [
'front_end/extensions/_module.js',
'front_end/extensions/ExtensionAuditCategory.js',
'front_end/extensions/ExtensionPanel.js',
'front_end/extensions/ExtensionRegistryStub.js',
......@@ -368,7 +363,6 @@
'front_end/common/TextUtils.js',
'front_end/common/UIString.js',
'front_end/common/utilities.js',
'front_end/heap_snapshot_worker/_module.js',
'front_end/heap_snapshot_worker/AllocationProfile.js',
'front_end/heap_snapshot_worker/HeapSnapshot.js',
'front_end/heap_snapshot_worker/HeapSnapshotLoader.js',
......@@ -378,14 +372,12 @@
'front_end/profiler/HeapSnapshotCommon.js',
],
'devtools_layers_js_files': [
'front_end/layers/_module.js',
'front_end/layers/LayerDetailsView.js',
'front_end/layers/LayerPaintProfilerView.js',
'front_end/layers/LayersPanel.js',
'front_end/layers/LayerTreeOutline.js',
],
'devtools_network_js_files': [
'front_end/network/_module.js',
'front_end/network/HAREntry.js',
'front_end/network/NetworkItemView.js',
'front_end/network/NetworkPanel.js',
......@@ -400,7 +392,6 @@
'front_end/network/ResourceWebSocketFrameView.js',
],
'devtools_profiler_js_files': [
'front_end/profiler/_module.js',
'front_end/profiler/CanvasProfileView.js',
'front_end/profiler/CanvasReplayStateView.js',
'front_end/profiler/CPUProfileBottomUpDataGrid.js',
......@@ -418,7 +409,6 @@
'front_end/profiler/ProfileTypeRegistry.js',
],
'devtools_resources_js_files': [
'front_end/resources/_module.js',
'front_end/resources/ApplicationCacheItemsView.js',
'front_end/resources/CookieItemsView.js',
'front_end/resources/DatabaseQueryView.js',
......@@ -432,19 +422,16 @@
],
'devtools_script_formatter_worker_js_files': [
'front_end/common/utilities.js',
'front_end/script_formatter_worker/_module.js',
'front_end/script_formatter_worker/CSSFormatter.js',
'front_end/script_formatter_worker/JavaScriptFormatter.js',
'front_end/script_formatter_worker/ScriptFormatterWorker.js',
],
'devtools_settings_js_files': [
'front_end/settings/_module.js',
'front_end/settings/EditFileSystemDialog.js',
'front_end/settings/FrameworkBlackboxDialog.js',
'front_end/settings/SettingsScreen.js',
],
'devtools_source_frame_js_files': [
'front_end/source_frame/_module.js',
'front_end/source_frame/CodeMirrorTextEditor.js',
'front_end/source_frame/CodeMirrorUtils.js',
'front_end/source_frame/FontView.js',
......@@ -454,7 +441,6 @@
'front_end/source_frame/SourceFrame.js',
],
'devtools_sources_js_files': [
'front_end/sources/_module.js',
'front_end/sources/AddSourceMapURLDialog.js',
'front_end/sources/AdvancedSearchView.js',
'front_end/sources/BreakpointsSidebarPane.js',
......@@ -486,11 +472,9 @@
'front_end/sources/WorkersSidebarPane.js',
],
'devtools_temp_storage_shared_worker_js_files': [
'front_end/temp_storage_shared_worker/_module.js',
'front_end/temp_storage_shared_worker/TempStorageSharedWorker.js',
],
'devtools_timeline_js_files': [
'front_end/timeline/_module.js',
'front_end/timeline/CountersGraph.js',
'front_end/timeline/Layers3DView.js',
'front_end/timeline/MemoryCountersGraph.js',
......
......@@ -28,7 +28,9 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
var _importedScripts = {};
// This gets all concatenated module descriptors in the release mode.
var allDescriptors = [];
var _loadedScripts = {};
/**
* @param {string} url
......@@ -81,25 +83,16 @@ function normalizePath(path)
}
/**
* This function behavior depends on the "debug_devtools" flag value.
* - In debug mode it loads scripts synchronously via xhr request.
* - In release mode every occurrence of "importScript" in the js files
* that have been whitelisted in the build system gets replaced with
* the script source code on the compilation phase.
* The build system will throw an exception if it finds an importScript() call
* in other files.
*
* To load scripts lazily in release mode call "loadScript" function.
* @param {string} scriptName
*/
function importScript(scriptName)
function loadScript(scriptName)
{
var sourceURL = self._importScriptPathPrefix + scriptName;
var schemaIndex = sourceURL.indexOf("://") + 3;
sourceURL = sourceURL.substring(0, schemaIndex) + normalizePath(sourceURL.substring(schemaIndex));
if (_importedScripts[sourceURL])
if (_loadedScripts[sourceURL])
return;
_importedScripts[sourceURL] = true;
_loadedScripts[sourceURL] = true;
var scriptSource = loadResource(sourceURL);
if (!scriptSource)
throw "empty response arrived for script '" + sourceURL + "'";
......@@ -117,13 +110,10 @@ function importScript(scriptName)
self._importScriptPathPrefix = baseUrl.substring(0, baseUrl.lastIndexOf("/") + 1);
})();
var loadScript = importScript;
/**
* @constructor
* @param {!Array.<!Runtime.ModuleDescriptor>} descriptors
*/
var Runtime = function(descriptors)
var Runtime = function()
{
/**
* @type {!Array.<!Runtime.Module>}
......@@ -147,8 +137,16 @@ var Runtime = function(descriptors)
* @type {!Object.<string, !Runtime.ModuleDescriptor>}
*/
this._descriptorsMap = {};
for (var i = 0; i < descriptors.length; ++i)
this._descriptorsMap[descriptors[i]["name"]] = descriptors[i];
for (var i = 0; i < allDescriptors.length; ++i)
this._descriptorsMap[allDescriptors[i]["name"]] = allDescriptors[i];
}
/**
* @return {boolean}
*/
Runtime.isReleaseMode = function()
{
return !!allDescriptors.length;
}
/**
......@@ -157,7 +155,47 @@ var Runtime = function(descriptors)
*/
Runtime.startWorker = function(moduleName)
{
return new Worker(moduleName + "/_module.js");
if (Runtime.isReleaseMode())
return new Worker(moduleName + ".js");
var content = loadResource(moduleName + "/module.json");
if (!content)
throw new Error("Worker is not defined: " + moduleName + " " + new Error().stack);
var message = [];
var scripts = JSON.parse(content)["scripts"];
for (var i = 0; i < scripts.length; ++i) {
var url = self._importScriptPathPrefix + moduleName + "/" + scripts[i];
var parts = url.split("://");
url = parts.length === 1 ? url : parts[0] + "://" + normalizePath(parts[1]);
message.push({
source: loadResource(moduleName + "/" + scripts[i]),
url: url
});
}
/**
* @suppress {checkTypes}
*/
var loader = function() {
self.onmessage = function(event) {
self.onmessage = null;
var scripts = event.data;
for (var i = 0; i < scripts.length; ++i) {
var source = scripts[i]["source"];
self.eval(source + "\n//# sourceURL=" + scripts[i]["url"]);
}
};
};
var blob = new Blob(["(" + loader.toString() + ")()\n//# sourceURL=" + moduleName], { type: "text/javascript" });
var workerURL = window.URL.createObjectURL(blob);
try {
var worker = new Worker(workerURL);
worker.postMessage(message);
return worker;
} finally {
window.URL.revokeObjectURL(workerURL);
}
}
Runtime.prototype = {
......@@ -478,8 +516,15 @@ Runtime.Module.prototype = {
var dependencies = this._descriptor.dependencies;
for (var i = 0; dependencies && i < dependencies.length; ++i)
this._manager.loadModule(dependencies[i]);
if (this._descriptor.scripts)
loadScript(this._name + "/_module.js");
if (this._descriptor.scripts) {
if (Runtime.isReleaseMode()) {
loadScript(this._name + ".js");
} else {
var scripts = this._descriptor.scripts;
for (var i = 0; i < scripts.length; ++i)
loadScript(this._name + "/" + scripts[i]);
}
}
this._isLoading = false;
this._loaded = true;
}
......
// 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.
importScript("AuditsPanel.js");
importScript("AuditCategory.js");
importScript("AuditCategories.js");
importScript("AuditController.js");
importScript("AuditFormatters.js");
importScript("AuditLauncherView.js");
importScript("AuditResultView.js");
importScript("AuditRules.js");
// 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.
importScript("ConsoleViewMessage.js");
importScript("ConsoleView.js");
importScript("ConsolePanel.js");
// 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.
importScript("DevicesView.js");
\ No newline at end of file
// 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.
importScript("WikiParser.js");
importScript("JSArticle.js");
importScript("CSSArticle.js");
importScript("DocumentationURLProvider.js");
importScript("DocumentationView.js");
......@@ -6,6 +6,7 @@
"className": "WebInspector.DocumentationView.ContextMenuProvider"
}
],
"dependencies": ["source_frame"],
"scripts": [
"WikiParser.js",
"JSArticle.js",
......
// 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.
importScript("Spectrum.js");
importScript("DOMSyntaxHighlighter.js");
importScript("ElementsTreeOutline.js");
importScript("EventListenersSidebarPane.js");
importScript("MetricsSidebarPane.js");
importScript("PlatformFontsSidebarPane.js");
importScript("PropertiesSidebarPane.js");
importScript("StylesSidebarPane.js");
importScript("ElementsPanel.js");
// 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.
importScript("ExtensionAPI.js");
importScript("ExtensionRegistryStub.js");
importScript("ExtensionAuditCategory.js");
importScript("ExtensionServer.js");
importScript("ExtensionPanel.js");
importScript("ExtensionView.js");
\ No newline at end of file
// 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.
importScripts("../common/utilities.js");
importScripts("../common/WebInspector.js");
importScripts("../common/UIString.js");
importScripts("../common/TextUtils.js");
importScripts("../profiler/HeapSnapshotCommon.js");
importScripts("AllocationProfile.js");
importScripts("HeapSnapshot.js");
importScripts("HeapSnapshotLoader.js");
importScripts("HeapSnapshotWorkerDispatcher.js");
importScripts("JSHeapSnapshot.js");
importScripts("HeapSnapshotWorker.js");
{
"scripts": [
"../common/utilities.js",
"../common/WebInspector.js",
"../common/UIString.js",
"../common/TextUtils.js",
"../profiler/HeapSnapshotCommon.js",
"AllocationProfile.js",
"HeapSnapshot.js",
"HeapSnapshotLoader.js",
"HeapSnapshotWorkerDispatcher.js",
"JSHeapSnapshot.js",
"HeapSnapshotWorker.js"
]
}
......@@ -33,7 +33,6 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<link rel="stylesheet" type="text/css" href="inspector.css">
<script type="text/javascript" src="Runtime.js"></script>
<script type="text/javascript" src="common/utilities.js"></script>
<script type="text/javascript" src="common/modules.js"></script>
<script type="text/javascript" src="common/WebInspector.js"></script>
<script type="text/javascript" src="common/Object.js"></script>
<script type="text/javascript" src="common/NotificationService.js"></script>
......
// 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.
importScript("LayerTreeOutline.js");
importScript("LayerDetailsView.js");
importScript("LayerPaintProfilerView.js");
importScript("LayersPanel.js");
......@@ -181,7 +181,7 @@ WebInspector.Main.prototype = {
_createModuleManager: function()
{
console.timeStamp("Main._createModuleManager");
self.runtime = new Runtime(allDescriptors);
self.runtime = new Runtime();
// FIXME: define html-per-app, make configuration a part of the app.
var configuration = ["main", "elements", "network", "sources", "timeline", "profiler", "resources", "audits", "console", "source_frame", "extensions", "settings"];
......
// 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.
importScript("Main.js");
\ No newline at end of file
// 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.
importScript("HAREntry.js");
importScript("RequestView.js");
importScript("NetworkItemView.js");
importScript("RequestCookiesView.js");
importScript("RequestHeadersView.js");
importScript("RequestHTMLView.js");
importScript("RequestJSONView.js");
importScript("RequestPreviewView.js");
importScript("RequestResponseView.js");
importScript("RequestTimingView.js");
importScript("ResourceWebSocketFrameView.js");
importScript("NetworkPanel.js");
// 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.
importScript("ProfilesPanel.js");
importScript("CPUProfileDataGrid.js");
importScript("CPUProfileBottomUpDataGrid.js");
importScript("CPUProfileTopDownDataGrid.js");
importScript("CPUProfileFlameChart.js");
importScript("CPUProfileView.js");
importScript("HeapSnapshotCommon.js");
importScript("HeapSnapshotProxy.js");
importScript("HeapSnapshotDataGrids.js");
importScript("HeapSnapshotGridNodes.js");
importScript("HeapSnapshotView.js");
importScript("ProfileLauncherView.js");
importScript("CanvasProfileView.js");
importScript("CanvasReplayStateView.js");
importScript("ProfileTypeRegistry.js");
// 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.
importScript("ApplicationCacheItemsView.js");
importScript("CookieItemsView.js");
importScript("DOMStorageItemsView.js");
importScript("DatabaseQueryView.js");
importScript("DatabaseTableView.js");
importScript("DirectoryContentView.js");
importScript("IndexedDBViews.js");
importScript("FileContentView.js");
importScript("FileSystemView.js");
importScript("ResourcesPanel.js");
\ No newline at end of file
// 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.
importScripts("../common/utilities.js");
importScripts("../common/WebInspector.js");
importScripts("../cm/headlesscodemirror.js");
importScripts("../cm/css.js");
importScripts("../cm/javascript.js");
importScripts("../cm/xml.js");
importScripts("../cm/htmlmixed.js");
importScripts("ScriptFormatterWorker.js");
importScripts("../UglifyJS/parse-js.js");
importScripts("JavaScriptFormatter.js");
importScripts("CSSFormatter.js");
{
"scripts": [
"../common/utilities.js",
"../common/WebInspector.js",
"../cm/headlesscodemirror.js",
"../cm/css.js",
"../cm/javascript.js",
"../cm/xml.js",
"../cm/htmlmixed.js",
"ScriptFormatterWorker.js",
"../UglifyJS/parse-js.js",
"JavaScriptFormatter.js",
"CSSFormatter.js"
]
}
// 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.
importScript("EditFileSystemDialog.js");
importScript("FrameworkBlackboxDialog.js");
importScript("SettingsScreen.js");
// 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.
importScript("../cm/codemirror.js");
importScript("../cm/css.js");
importScript("../cm/javascript.js");
importScript("../cm/xml.js");
importScript("../cm/htmlmixed.js");
importScript("../cm/matchbrackets.js");
importScript("../cm/closebrackets.js");
importScript("../cm/markselection.js");
importScript("../cm/comment.js");
importScript("../cm/overlay.js");
importScript("../cm/htmlembedded.js");
importScript("../cm/clike.js");
importScript("../cm/coffeescript.js");
importScript("../cm/php.js");
importScript("../cm/python.js");
importScript("../cm/shell.js");
importScript("CodeMirrorUtils.js");
importScript("CodeMirrorTextEditor.js");
importScript("SourceFrame.js");
importScript("GoToLineDialog.js");
importScript("ResourceView.js");
importScript("FontView.js");
importScript("ImageView.js");
// 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.
importScript("jsdifflib.js")
importScript("Placard.js");
importScript("AddSourceMapURLDialog.js");
importScript("BreakpointsSidebarPane.js");
importScript("CallStackSidebarPane.js");
importScript("SimpleHistoryManager.js");
importScript("EditingLocationHistoryManager.js");
importScript("FilePathScoreFunction.js");
importScript("FilteredItemSelectionDialog.js");
importScript("UISourceCodeFrame.js");
importScript("JavaScriptSourceFrame.js");
importScript("CSSSourceFrame.js");
importScript("NavigatorView.js");
importScript("RevisionHistoryView.js");
importScript("ScopeChainSidebarPane.js");
importScript("SourcesNavigator.js");
importScript("StyleSheetOutlineDialog.js");
importScript("TabbedEditorContainer.js");
importScript("WatchExpressionsSidebarPane.js");
importScript("WorkersSidebarPane.js");
importScript("ThreadsSidebarPane.js");
importScript("ScriptFormatterEditorAction.js");
importScript("InplaceFormatterEditorAction.js");
importScript("ScriptFormatter.js");
importScript("SourcesView.js");
// Search results pane
importScript("AdvancedSearchView.js");
importScript("FileBasedSearchResultsPane.js");
importScript("SourcesSearchScope.js");
importScript("SourcesPanel.js");
......@@ -200,6 +200,7 @@
"TabbedEditorContainer.js",
"WatchExpressionsSidebarPane.js",
"WorkersSidebarPane.js",
"ThreadsSidebarPane.js",
"ScriptFormatterEditorAction.js",
"InplaceFormatterEditorAction.js",
"ScriptFormatter.js",
......
// 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.
importScript("TempStorageSharedWorker.js");
\ No newline at end of file
// 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.
importScript("CountersGraph.js");
importScript("Layers3DView.js");
importScript("MemoryCountersGraph.js");
importScript("TimelineModel.js");
importScript("TimelineModelImpl.js");
importScript("TimelineJSProfile.js");
importScript("TimelineOverviewPane.js");
importScript("TimelinePresentationModel.js");
importScript("TracingTimelineModel.js");
importScript("TimelineFrameModel.js");
importScript("TimelineEventOverview.js");
importScript("TimelineFrameOverview.js");
importScript("TimelineMemoryOverview.js");
importScript("TimelinePowerGraph.js");
importScript("TimelinePowerOverview.js");
importScript("TimelineFlameChart.js");
importScript("TimelineUIUtils.js");
importScript("TimelineUIUtilsImpl.js");
importScript("TimelineView.js");
importScript("TimelineLayersView.js");
importScript("TimelinePaintProfilerView.js");
importScript("TracingTimelineUIUtils.js");
importScript("TransformController.js");
importScript("PaintProfilerView.js");
importScript("TimelinePanel.js");
......@@ -87,7 +87,6 @@ invalid_type_regex = re.compile(r"@(?:" + type_checked_jsdoc_tags_or + r")\s*\{.
invalid_type_designator_regex = re.compile(r"@(?:" + type_checked_jsdoc_tags_or + r")\s*.*(?<![{: ])([?!])=?\}")
importscript_regex = re.compile(r"importScript\(\s*[\"']")
error_warning_regex = re.compile(r"(?:WARNING|ERROR)")
errors_found = False
......@@ -101,26 +100,6 @@ def hasErrors(output):
return re.search(error_warning_regex, output) != None
def verify_importScript_usage():
errors_found = False
for module in modules:
for file_name in module["sources"]:
if path.basename(file_name) == module_initializer_name:
log_error("Module initializer (%s) may not be listed among module's scripts; found in '%s'" % (module_initializer_name, module["name"]))
errors_found = True
continue
try:
with open(path.join(devtools_frontend_path, file_name), "r") as sourceFile:
source = sourceFile.read()
if re.search(importscript_regex, source):
log_error("importScript() call only allowed in module initializers (%s); found in %s" % (module_initializer_name, file_name))
errors_found = True
except:
log_error("Failed to access %s" % file_name)
raise
return errors_found
def dump_all_checked_files():
files = {}
for module in modules:
......@@ -185,9 +164,6 @@ def check_java_path():
check_java_path()
print "Verifying 'importScript' function usage..."
errors_found |= verify_importScript_usage()
modules_dir = tempfile.mkdtemp()
common_closure_args = " --summary_detail_level 3 --jscomp_error visibility --compilation_level SIMPLE_OPTIMIZATIONS --warning_level VERBOSE --language_in ECMASCRIPT5 --accept_const_keyword --module_output_path_prefix %s/" % modules_dir
......
......@@ -4,10 +4,12 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Inlines all module.json files into modules.js."""
"""Inlines all module.json files into "var allDescriptors" in Runtime.js."""
from os import path
import errno
import os
import re
import shutil
import sys
try:
......@@ -45,9 +47,11 @@ def main(argv):
output_filename = argv[2]
module_jsons = argv[3:]
output_contents = re.sub('var allDescriptors = \[\];', 'var allDescriptors = %s;' % build_modules(module_jsons).replace("\\", "\\\\"), read_file(input_filename), 1)
if (path.exists(output_filename)):
os.remove(output_filename)
with open(output_filename, 'w') as output_file:
output_file.write('var allDescriptors=%s;' % build_modules(module_jsons))
output_file.write(output_contents)
if __name__ == '__main__':
sys.exit(main(sys.argv))
#!/usr/bin/env python
#
# 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.
"""
Concatenates module scripts based on the module.json descriptor.
Optionally, minifies the result using rjsmin.
"""
from cStringIO import StringIO
from os import path
import os
import re
import sys
try:
import simplejson as json
except ImportError:
import json
rjsmin_path = path.abspath(path.join(
path.dirname(__file__),
'..',
'..',
'build',
'scripts'))
sys.path.append(rjsmin_path)
import rjsmin
def read_file(filename):
with open(path.normpath(filename), 'rt') as file:
return file.read()
def write_file(filename, content):
# This is here to avoid overwriting source tree files due to hard links.
if path.exists(filename):
os.remove(filename)
with open(filename, 'wt') as file:
file.write(content)
def concatenate_scripts(file_names, module_dir, output_dir, output):
for file_name in file_names:
output.write('/* %s */\n' % file_name)
file_path = path.join(module_dir, file_name)
# This allows to also concatenate generated files found in output_dir.
if not path.isfile(file_path):
file_path = path.join(output_dir, path.basename(module_dir), file_name)
output.write(read_file(file_path))
output.write(';')
def main(argv):
if len(argv) < 3:
print('Usage: %s module_json output_file no_minify' % argv[0])
return 1
module_json_file_name = argv[1]
output_file_name = argv[2]
no_minify = len(argv) > 3 and argv[3]
module_dir = path.dirname(module_json_file_name)
output = StringIO()
descriptor = None
try:
descriptor = json.loads(read_file(module_json_file_name))
except:
print 'ERROR: Failed to load JSON from ' + module_json_file_name
raise
# pylint: disable=E1103
scripts = descriptor.get('scripts')
assert(scripts)
output_root_dir = path.join(path.dirname(output_file_name), '..')
concatenate_scripts(scripts, module_dir, output_root_dir, output)
output_script = output.getvalue()
output.close()
write_file(output_file_name, output_script if no_minify else rjsmin.jsmin(output_script))
if __name__ == '__main__':
sys.exit(main(sys.argv))
......@@ -3,7 +3,6 @@
"name": "common",
"dependencies": [],
"sources": [
"common/modules.js",
"common/Color.js",
"common/Geometry.js",
"common/Console.js",
......
#!/usr/bin/env python
#
# Copyright (C) 2011 Google Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# This script replaces calls to importScripts with script sources
# in input script file and dumps result into output script file.
import os.path
import re
import sys
rjsmin_path = os.path.abspath(os.path.join(
os.path.dirname(__file__),
"..",
"..",
"build",
"scripts"))
sys.path.append(rjsmin_path)
import rjsmin
def main(argv):
if len(argv) < 3:
print('usage: %s input_file output_file no_minify' % argv[0])
return 1
input_file_name = argv[1]
output_file_name = argv[2]
no_minify = len(argv) > 3 and argv[3]
imports_dir = os.path.dirname(input_file_name)
input_file = open(input_file_name, 'r')
input_script = input_file.read()
input_file.close()
def replace(match):
import_file_name = match.group(1)
full_path = os.path.join(imports_dir, import_file_name)
if not os.access(full_path, os.F_OK):
raise Exception('File %s referenced in %s not found on any source paths, '
'check source tree for consistency' %
(import_file_name, input_file_name))
import_file = open(full_path, 'r')
import_script = import_file.read()
import_file.close()
return import_script
output_script = re.sub(r'importScripts?\([\'"]([^\'"]+)[\'"]\)', replace, input_script)
if re.search("importScripts?\(\"", output_script):
raise Exception('Unresolved "importScript" statements found in "%s". '
'Make sure you call "importScript" in module initializers only.' %
(output_file_name))
if os.path.exists(output_file_name):
os.remove(output_file_name)
output_file = open(output_file_name, 'w')
if not no_minify:
output_script = rjsmin.jsmin(output_script)
output_file.write(output_script)
output_file.close()
# Touch output file directory to make sure that Xcode will copy
# modified resource files.
if sys.platform == 'darwin':
output_dir_name = os.path.dirname(output_file_name)
os.utime(output_dir_name, None)
if __name__ == '__main__':
sys.exit(main(sys.argv))
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment