Merge from Chromium at DEPS revision 251904

This commit was generated by merge_to_master.py.

Change-Id: I8ca36eee41eba7e9a56d6728a9d19e5883d7058c
diff --git a/Source/devtools/PRESUBMIT.py b/Source/devtools/PRESUBMIT.py
new file mode 100644
index 0000000..88aca79
--- /dev/null
+++ b/Source/devtools/PRESUBMIT.py
@@ -0,0 +1,117 @@
+# Copyright (C) 2014 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.
+
+"""DevTools JSDoc validator presubmit script
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details about the presubmit API built into gcl.
+"""
+
+import os
+import re
+import sys
+
+
+def _CompileDevtoolsFrontend(input_api, output_api):
+    if not input_api.platform.startswith('linux'):
+        return []
+    local_paths = [f.LocalPath() for f in input_api.AffectedFiles()]
+    if (any("devtools/front_end" in path for path in local_paths) or
+        any("InjectedScriptSource.js" in path for path in local_paths) or
+        any("InjectedScriptCanvasModuleSource.js" in path for path in local_paths)):
+        lint_path = input_api.os_path.join(input_api.PresubmitLocalPath(),
+            "scripts", "compile_frontend.py")
+        out, _ = input_api.subprocess.Popen(
+            [input_api.python_executable, lint_path],
+            stdout=input_api.subprocess.PIPE,
+            stderr=input_api.subprocess.STDOUT).communicate()
+        if "WARNING" in out or "ERROR" in out:
+            return [output_api.PresubmitError(out)]
+    return []
+
+
+def _CheckConvertSVGToPNGHashes(input_api, output_api):
+    if not input_api.platform.startswith('linux'):
+        return []
+
+    original_sys_path = sys.path
+    try:
+        sys.path = sys.path + [input_api.os_path.join(input_api.PresubmitLocalPath(), 'scripts')]
+        import devtools_file_hashes
+    finally:
+        sys.path = original_sys_path
+
+    absolute_local_paths = [af.AbsoluteLocalPath() for af in input_api.AffectedFiles(include_deletes=False)]
+    image_source_file_paths = [path for path in absolute_local_paths if "devtools/front_end/Images/src" in path and path.endswith(".svg")]
+    image_sources_path = input_api.os_path.join(input_api.PresubmitLocalPath(), "front_end", "Images", "src")
+    hashes_file_name = "svg2png.hashes"
+    hashes_file_path = image_sources_path + "/" + hashes_file_name
+    invalid_hash_file_paths = devtools_file_hashes.files_with_invalid_hashes(hashes_file_path, image_source_file_paths)
+    if len(invalid_hash_file_paths) == 0:
+        return []
+    invalid_hash_file_names = [re.sub(".*/", "", file_path) for file_path in invalid_hash_file_paths]
+    file_paths_str = ", ".join(invalid_hash_file_names)
+    error_message = "The following SVG files should be converted to PNG using convert_svg_images_png.py script before uploading: \n  - %s" % file_paths_str
+    return [output_api.PresubmitError(error_message)]
+
+
+def _CheckOptimizePNGHashes(input_api, output_api):
+    if not input_api.platform.startswith('linux'):
+        return []
+
+    original_sys_path = sys.path
+    try:
+        sys.path = sys.path + [input_api.os_path.join(input_api.PresubmitLocalPath(), 'scripts')]
+        import devtools_file_hashes
+    finally:
+        sys.path = original_sys_path
+
+    absolute_local_paths = [af.AbsoluteLocalPath() for af in input_api.AffectedFiles(include_deletes=False)]
+    image_source_file_paths = [path for path in absolute_local_paths if "devtools/front_end/Images/src" in path and path.endswith(".svg")]
+    image_sources_path = input_api.os_path.join(input_api.PresubmitLocalPath(), "front_end", "Images", "src")
+    hashes_file_name = "optimize_png.hashes"
+    hashes_file_path = image_sources_path + "/" + hashes_file_name
+    invalid_hash_file_paths = devtools_file_hashes.files_with_invalid_hashes(hashes_file_path, image_source_file_paths)
+    if len(invalid_hash_file_paths) == 0:
+        return []
+    invalid_hash_file_names = [re.sub(".*/", "", file_path) for file_path in invalid_hash_file_paths]
+    file_paths_str = ", ".join(invalid_hash_file_names)
+    error_message = "The following PNG files should be optimized using optimize_png_images.py script before uploading: \n  - %s" % file_paths_str
+    return [output_api.PresubmitError(error_message)]
+
+
+def CheckChangeOnUpload(input_api, output_api):
+    results = []
+    results.extend(_CompileDevtoolsFrontend(input_api, output_api))
+    results.extend(_CheckConvertSVGToPNGHashes(input_api, output_api))
+    results.extend(_CheckOptimizePNGHashes(input_api, output_api))
+    return results
+
+
+def CheckChangeOnCommit(input_api, output_api):
+    return []
diff --git a/Source/devtools/concatenated_devtools_audits_js.target.darwin-arm.mk b/Source/devtools/concatenated_devtools_audits_js.target.darwin-arm.mk
index 995fa69..b4cfee3 100644
--- a/Source/devtools/concatenated_devtools_audits_js.target.darwin-arm.mk
+++ b/Source/devtools/concatenated_devtools_audits_js.target.darwin-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_audits_js_target_concatenate_devtools_audits_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/AuditsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_audits_js.target.darwin-mips.mk b/Source/devtools/concatenated_devtools_audits_js.target.darwin-mips.mk
index 995fa69..b4cfee3 100644
--- a/Source/devtools/concatenated_devtools_audits_js.target.darwin-mips.mk
+++ b/Source/devtools/concatenated_devtools_audits_js.target.darwin-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_audits_js_target_concatenate_devtools_audits_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/AuditsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_audits_js.target.darwin-x86.mk b/Source/devtools/concatenated_devtools_audits_js.target.darwin-x86.mk
index 995fa69..b4cfee3 100644
--- a/Source/devtools/concatenated_devtools_audits_js.target.darwin-x86.mk
+++ b/Source/devtools/concatenated_devtools_audits_js.target.darwin-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_audits_js_target_concatenate_devtools_audits_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/AuditsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_audits_js.target.linux-arm.mk b/Source/devtools/concatenated_devtools_audits_js.target.linux-arm.mk
index 995fa69..b4cfee3 100644
--- a/Source/devtools/concatenated_devtools_audits_js.target.linux-arm.mk
+++ b/Source/devtools/concatenated_devtools_audits_js.target.linux-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_audits_js_target_concatenate_devtools_audits_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/AuditsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_audits_js.target.linux-mips.mk b/Source/devtools/concatenated_devtools_audits_js.target.linux-mips.mk
index 995fa69..b4cfee3 100644
--- a/Source/devtools/concatenated_devtools_audits_js.target.linux-mips.mk
+++ b/Source/devtools/concatenated_devtools_audits_js.target.linux-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_audits_js_target_concatenate_devtools_audits_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/AuditsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_audits_js.target.linux-x86.mk b/Source/devtools/concatenated_devtools_audits_js.target.linux-x86.mk
index 995fa69..b4cfee3 100644
--- a/Source/devtools/concatenated_devtools_audits_js.target.linux-x86.mk
+++ b/Source/devtools/concatenated_devtools_audits_js.target.linux-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_audits_js_target_concatenate_devtools_audits_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/AuditsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_css.target.darwin-arm.mk b/Source/devtools/concatenated_devtools_css.target.darwin-arm.mk
index 2d2528f..3c1d427 100644
--- a/Source/devtools/concatenated_devtools_css.target.darwin-arm.mk
+++ b/Source/devtools/concatenated_devtools_css.target.darwin-arm.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_concatenate_devtools_css ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_css_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css"
 
@@ -61,11 +61,6 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-$(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
-	@echo Copying: $@
-	$(hide) mkdir -p $(dir $@)
-	$(hide) $(ACP) -rpf $< $@
-
 $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
 	@echo Copying: $@
 	$(hide) mkdir -p $(dir $@)
@@ -206,7 +201,7 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
+third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
 
 GYP_GENERATED_OUTPUTS := \
 	$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css \
diff --git a/Source/devtools/concatenated_devtools_css.target.darwin-mips.mk b/Source/devtools/concatenated_devtools_css.target.darwin-mips.mk
index 2d2528f..3c1d427 100644
--- a/Source/devtools/concatenated_devtools_css.target.darwin-mips.mk
+++ b/Source/devtools/concatenated_devtools_css.target.darwin-mips.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_concatenate_devtools_css ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_css_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css"
 
@@ -61,11 +61,6 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-$(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
-	@echo Copying: $@
-	$(hide) mkdir -p $(dir $@)
-	$(hide) $(ACP) -rpf $< $@
-
 $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
 	@echo Copying: $@
 	$(hide) mkdir -p $(dir $@)
@@ -206,7 +201,7 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
+third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
 
 GYP_GENERATED_OUTPUTS := \
 	$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css \
diff --git a/Source/devtools/concatenated_devtools_css.target.darwin-x86.mk b/Source/devtools/concatenated_devtools_css.target.darwin-x86.mk
index 2d2528f..3c1d427 100644
--- a/Source/devtools/concatenated_devtools_css.target.darwin-x86.mk
+++ b/Source/devtools/concatenated_devtools_css.target.darwin-x86.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_concatenate_devtools_css ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_css_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css"
 
@@ -61,11 +61,6 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-$(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
-	@echo Copying: $@
-	$(hide) mkdir -p $(dir $@)
-	$(hide) $(ACP) -rpf $< $@
-
 $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
 	@echo Copying: $@
 	$(hide) mkdir -p $(dir $@)
@@ -206,7 +201,7 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
+third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
 
 GYP_GENERATED_OUTPUTS := \
 	$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css \
diff --git a/Source/devtools/concatenated_devtools_css.target.linux-arm.mk b/Source/devtools/concatenated_devtools_css.target.linux-arm.mk
index 2d2528f..3c1d427 100644
--- a/Source/devtools/concatenated_devtools_css.target.linux-arm.mk
+++ b/Source/devtools/concatenated_devtools_css.target.linux-arm.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_concatenate_devtools_css ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_css_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css"
 
@@ -61,11 +61,6 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-$(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
-	@echo Copying: $@
-	$(hide) mkdir -p $(dir $@)
-	$(hide) $(ACP) -rpf $< $@
-
 $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
 	@echo Copying: $@
 	$(hide) mkdir -p $(dir $@)
@@ -206,7 +201,7 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
+third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
 
 GYP_GENERATED_OUTPUTS := \
 	$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css \
diff --git a/Source/devtools/concatenated_devtools_css.target.linux-mips.mk b/Source/devtools/concatenated_devtools_css.target.linux-mips.mk
index 2d2528f..3c1d427 100644
--- a/Source/devtools/concatenated_devtools_css.target.linux-mips.mk
+++ b/Source/devtools/concatenated_devtools_css.target.linux-mips.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_concatenate_devtools_css ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_css_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css"
 
@@ -61,11 +61,6 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-$(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
-	@echo Copying: $@
-	$(hide) mkdir -p $(dir $@)
-	$(hide) $(ACP) -rpf $< $@
-
 $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
 	@echo Copying: $@
 	$(hide) mkdir -p $(dir $@)
@@ -206,7 +201,7 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
+third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
 
 GYP_GENERATED_OUTPUTS := \
 	$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css \
diff --git a/Source/devtools/concatenated_devtools_css.target.linux-x86.mk b/Source/devtools/concatenated_devtools_css.target.linux-x86.mk
index 2d2528f..3c1d427 100644
--- a/Source/devtools/concatenated_devtools_css.target.linux-x86.mk
+++ b/Source/devtools/concatenated_devtools_css.target.linux-x86.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_css_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_concatenate_devtools_css ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_css_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css"
 
@@ -61,11 +61,6 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-$(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
-	@echo Copying: $@
-	$(hide) mkdir -p $(dir $@)
-	$(hide) $(ACP) -rpf $< $@
-
 $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(GYP_TARGET_DEPENDENCIES) | $(ACP)
 	@echo Copying: $@
 	$(hide) mkdir -p $(dir $@)
@@ -206,7 +201,7 @@
 	$(hide) mkdir -p $(dir $@)
 	$(hide) $(ACP) -rpf $< $@
 
-third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/cssNamedFlows.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
+third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_css_target_copies = $(gyp_shared_intermediate_dir)/resources/inspector/accelerometer.css $(gyp_shared_intermediate_dir)/resources/inspector/auditsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/breadcrumbList.css $(gyp_shared_intermediate_dir)/resources/inspector/breakpointsList.css $(gyp_shared_intermediate_dir)/resources/inspector/buildSystemOnly.js $(gyp_shared_intermediate_dir)/resources/inspector/cmdevtools.css $(gyp_shared_intermediate_dir)/resources/inspector/codemirror.css $(gyp_shared_intermediate_dir)/resources/inspector/dataGrid.css $(gyp_shared_intermediate_dir)/resources/inspector/elementsPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/filter.css $(gyp_shared_intermediate_dir)/resources/inspector/filteredItemSelectionDialog.css $(gyp_shared_intermediate_dir)/resources/inspector/flameChart.css $(gyp_shared_intermediate_dir)/resources/inspector/heapProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/helpScreen.css $(gyp_shared_intermediate_dir)/resources/inspector/indexedDBViews.css $(gyp_shared_intermediate_dir)/resources/inspector/inspectorCommon.css $(gyp_shared_intermediate_dir)/resources/inspector/navigatorView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkLogView.css $(gyp_shared_intermediate_dir)/resources/inspector/networkPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/overrides.css $(gyp_shared_intermediate_dir)/resources/inspector/panelEnablerView.css $(gyp_shared_intermediate_dir)/resources/inspector/profilesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/resourceView.css $(gyp_shared_intermediate_dir)/resources/inspector/resourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/revisionHistory.css $(gyp_shared_intermediate_dir)/resources/inspector/screencastView.css $(gyp_shared_intermediate_dir)/resources/inspector/sidebarPane.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesPanel.css $(gyp_shared_intermediate_dir)/resources/inspector/sourcesView.css $(gyp_shared_intermediate_dir)/resources/inspector/spectrum.css $(gyp_shared_intermediate_dir)/resources/inspector/splitView.css $(gyp_shared_intermediate_dir)/resources/inspector/textPrompt.css $(gyp_shared_intermediate_dir)/resources/inspector/timelinePanel.css $(gyp_shared_intermediate_dir)/resources/inspector/canvasProfiler.css $(gyp_shared_intermediate_dir)/resources/inspector/layersPanel.css
 
 GYP_GENERATED_OUTPUTS := \
 	$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css \
diff --git a/Source/devtools/concatenated_devtools_elements_js.target.darwin-arm.mk b/Source/devtools/concatenated_devtools_elements_js.target.darwin-arm.mk
index 0b97f5a..03dfebb 100644
--- a/Source/devtools/concatenated_devtools_elements_js.target.darwin-arm.mk
+++ b/Source/devtools/concatenated_devtools_elements_js.target.darwin-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_elements_js_target_concatenate_devtools_elements_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ElementsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_elements_js.target.darwin-mips.mk b/Source/devtools/concatenated_devtools_elements_js.target.darwin-mips.mk
index 0b97f5a..03dfebb 100644
--- a/Source/devtools/concatenated_devtools_elements_js.target.darwin-mips.mk
+++ b/Source/devtools/concatenated_devtools_elements_js.target.darwin-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_elements_js_target_concatenate_devtools_elements_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ElementsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_elements_js.target.darwin-x86.mk b/Source/devtools/concatenated_devtools_elements_js.target.darwin-x86.mk
index 0b97f5a..03dfebb 100644
--- a/Source/devtools/concatenated_devtools_elements_js.target.darwin-x86.mk
+++ b/Source/devtools/concatenated_devtools_elements_js.target.darwin-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_elements_js_target_concatenate_devtools_elements_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ElementsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_elements_js.target.linux-arm.mk b/Source/devtools/concatenated_devtools_elements_js.target.linux-arm.mk
index 0b97f5a..03dfebb 100644
--- a/Source/devtools/concatenated_devtools_elements_js.target.linux-arm.mk
+++ b/Source/devtools/concatenated_devtools_elements_js.target.linux-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_elements_js_target_concatenate_devtools_elements_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ElementsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_elements_js.target.linux-mips.mk b/Source/devtools/concatenated_devtools_elements_js.target.linux-mips.mk
index 0b97f5a..03dfebb 100644
--- a/Source/devtools/concatenated_devtools_elements_js.target.linux-mips.mk
+++ b/Source/devtools/concatenated_devtools_elements_js.target.linux-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_elements_js_target_concatenate_devtools_elements_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ElementsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_elements_js.target.linux-x86.mk b/Source/devtools/concatenated_devtools_elements_js.target.linux-x86.mk
index 0b97f5a..03dfebb 100644
--- a/Source/devtools/concatenated_devtools_elements_js.target.linux-x86.mk
+++ b/Source/devtools/concatenated_devtools_elements_js.target.linux-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_elements_js_target_concatenate_devtools_elements_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ElementsPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_extensions_js.target.darwin-arm.mk b/Source/devtools/concatenated_devtools_extensions_js.target.darwin-arm.mk
new file mode 100644
index 0000000..8aedfd6
--- /dev/null
+++ b/Source/devtools/concatenated_devtools_extensions_js.target.darwin-arm.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+LOCAL_MODULE_STEM := concatenated_devtools_extensions_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_devtools_extensions_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_extensions_js_target_concatenate_devtools_extensions_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ExtensionServer.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_devtools_extensions_js
+concatenated_devtools_extensions_js: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_devtools_extensions_js.target.darwin-mips.mk b/Source/devtools/concatenated_devtools_extensions_js.target.darwin-mips.mk
new file mode 100644
index 0000000..8aedfd6
--- /dev/null
+++ b/Source/devtools/concatenated_devtools_extensions_js.target.darwin-mips.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+LOCAL_MODULE_STEM := concatenated_devtools_extensions_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_devtools_extensions_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_extensions_js_target_concatenate_devtools_extensions_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ExtensionServer.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_devtools_extensions_js
+concatenated_devtools_extensions_js: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_devtools_extensions_js.target.darwin-x86.mk b/Source/devtools/concatenated_devtools_extensions_js.target.darwin-x86.mk
new file mode 100644
index 0000000..8aedfd6
--- /dev/null
+++ b/Source/devtools/concatenated_devtools_extensions_js.target.darwin-x86.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+LOCAL_MODULE_STEM := concatenated_devtools_extensions_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_devtools_extensions_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_extensions_js_target_concatenate_devtools_extensions_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ExtensionServer.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_devtools_extensions_js
+concatenated_devtools_extensions_js: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_devtools_extensions_js.target.linux-arm.mk b/Source/devtools/concatenated_devtools_extensions_js.target.linux-arm.mk
new file mode 100644
index 0000000..8aedfd6
--- /dev/null
+++ b/Source/devtools/concatenated_devtools_extensions_js.target.linux-arm.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+LOCAL_MODULE_STEM := concatenated_devtools_extensions_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_devtools_extensions_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_extensions_js_target_concatenate_devtools_extensions_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ExtensionServer.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_devtools_extensions_js
+concatenated_devtools_extensions_js: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_devtools_extensions_js.target.linux-mips.mk b/Source/devtools/concatenated_devtools_extensions_js.target.linux-mips.mk
new file mode 100644
index 0000000..8aedfd6
--- /dev/null
+++ b/Source/devtools/concatenated_devtools_extensions_js.target.linux-mips.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+LOCAL_MODULE_STEM := concatenated_devtools_extensions_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_devtools_extensions_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_extensions_js_target_concatenate_devtools_extensions_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ExtensionServer.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_devtools_extensions_js
+concatenated_devtools_extensions_js: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_devtools_extensions_js.target.linux-x86.mk b/Source/devtools/concatenated_devtools_extensions_js.target.linux-x86.mk
new file mode 100644
index 0000000..8aedfd6
--- /dev/null
+++ b/Source/devtools/concatenated_devtools_extensions_js.target.linux-x86.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+LOCAL_MODULE_STEM := concatenated_devtools_extensions_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_devtools_extensions_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_extensions_js_target_concatenate_devtools_extensions_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ExtensionServer.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_devtools_extensions_js
+concatenated_devtools_extensions_js: third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_devtools_js.target.darwin-arm.mk b/Source/devtools/concatenated_devtools_js.target.darwin-arm.mk
index 3b07f49..fdef8ce 100644
--- a/Source/devtools/concatenated_devtools_js.target.darwin-arm.mk
+++ b/Source/devtools/concatenated_devtools_js.target.darwin-arm.mk
@@ -13,6 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_devtools_html_gyp)/devtools_html.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_supported_css_properties_gyp)/supported_css_properties.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp)/frontend_protocol_sources.stamp
 
 ### Rules for action "concatenate_devtools_js":
@@ -20,7 +21,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_js_target_concatenate_devtools_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_js_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/blink" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js"
 
diff --git a/Source/devtools/concatenated_devtools_js.target.darwin-mips.mk b/Source/devtools/concatenated_devtools_js.target.darwin-mips.mk
index 3b07f49..fdef8ce 100644
--- a/Source/devtools/concatenated_devtools_js.target.darwin-mips.mk
+++ b/Source/devtools/concatenated_devtools_js.target.darwin-mips.mk
@@ -13,6 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_devtools_html_gyp)/devtools_html.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_supported_css_properties_gyp)/supported_css_properties.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp)/frontend_protocol_sources.stamp
 
 ### Rules for action "concatenate_devtools_js":
@@ -20,7 +21,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_js_target_concatenate_devtools_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_js_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/blink" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js"
 
diff --git a/Source/devtools/concatenated_devtools_js.target.darwin-x86.mk b/Source/devtools/concatenated_devtools_js.target.darwin-x86.mk
index 3b07f49..fdef8ce 100644
--- a/Source/devtools/concatenated_devtools_js.target.darwin-x86.mk
+++ b/Source/devtools/concatenated_devtools_js.target.darwin-x86.mk
@@ -13,6 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_devtools_html_gyp)/devtools_html.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_supported_css_properties_gyp)/supported_css_properties.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp)/frontend_protocol_sources.stamp
 
 ### Rules for action "concatenate_devtools_js":
@@ -20,7 +21,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_js_target_concatenate_devtools_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_js_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/blink" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js"
 
diff --git a/Source/devtools/concatenated_devtools_js.target.linux-arm.mk b/Source/devtools/concatenated_devtools_js.target.linux-arm.mk
index 3b07f49..fdef8ce 100644
--- a/Source/devtools/concatenated_devtools_js.target.linux-arm.mk
+++ b/Source/devtools/concatenated_devtools_js.target.linux-arm.mk
@@ -13,6 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_devtools_html_gyp)/devtools_html.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_supported_css_properties_gyp)/supported_css_properties.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp)/frontend_protocol_sources.stamp
 
 ### Rules for action "concatenate_devtools_js":
@@ -20,7 +21,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_js_target_concatenate_devtools_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_js_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/blink" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js"
 
diff --git a/Source/devtools/concatenated_devtools_js.target.linux-mips.mk b/Source/devtools/concatenated_devtools_js.target.linux-mips.mk
index 3b07f49..fdef8ce 100644
--- a/Source/devtools/concatenated_devtools_js.target.linux-mips.mk
+++ b/Source/devtools/concatenated_devtools_js.target.linux-mips.mk
@@ -13,6 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_devtools_html_gyp)/devtools_html.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_supported_css_properties_gyp)/supported_css_properties.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp)/frontend_protocol_sources.stamp
 
 ### Rules for action "concatenate_devtools_js":
@@ -20,7 +21,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_js_target_concatenate_devtools_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_js_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/blink" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js"
 
diff --git a/Source/devtools/concatenated_devtools_js.target.linux-x86.mk b/Source/devtools/concatenated_devtools_js.target.linux-x86.mk
index 3b07f49..fdef8ce 100644
--- a/Source/devtools/concatenated_devtools_js.target.linux-x86.mk
+++ b/Source/devtools/concatenated_devtools_js.target.linux-x86.mk
@@ -13,6 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_devtools_html_gyp)/devtools_html.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_supported_css_properties_gyp)/supported_css_properties.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp)/frontend_protocol_sources.stamp
 
 ### Rules for action "concatenate_devtools_js":
@@ -20,7 +21,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMCountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatterWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanelDescriptor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowCollectionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSNamedFlowView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/concatenate_js_files.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.html $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AdvancedSearchController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Checkbox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Color.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompilerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CompletionDictionary.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleMessage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsolePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ConsoleView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContentProviders.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookieParser.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CookiesTable.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CountersGraph.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfilerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSMetadata.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSStyleSheetMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Database.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DataGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DebuggerScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Tests.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Dialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMExtension.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMPresentationUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DefaultScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DockController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Drawer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditFileSystemDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EmptyView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServerProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemProjectDelegate.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilterBar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FontView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Geometry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/GoToLineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HAREntry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HandlerRegistry.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HelpScreenUntilReload.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ImageView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InplaceEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectElementModeController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorBackend.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorFrontendHostStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/InspectorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystem.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IsolatedFileSystemManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/jsdifflib.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/KeyboardShortcut.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Linkifier.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LiveEditSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ModuleManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NativeBreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkLog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkRequest.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkUISourceCodeProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NotificationService.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Object.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPopoverHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ObjectPropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesSupport.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverviewGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfiler.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Panel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ParsedURL.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Placard.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Platform.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Popover.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PresentationConsoleMessageHelper.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Progress.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProgressIndicator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSection.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RemoteObject.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Resource.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceScriptMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceType.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RuntimeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SASSSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScreencastView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Script.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptFormatter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScriptSnippetModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SearchableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Section.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Settings.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SettingsUI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShortcutsScreen.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ShowMoreDataGridNode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarOverlay.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SidebarTreeElement.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleWorkspaceProvider.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SnippetStorage.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SoftContextMenu.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMap.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Spectrum.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SplitView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StackView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StatusBarButton.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSourceMapping.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SuggestBox.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempFile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TestController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextRange.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextPrompt.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineGrid.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TracingAgent.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/treeoutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCode.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UserMetrics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/View.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ViewportControl.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkerFrontendManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Workspace.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkspaceController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ZoomManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspector.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/tabbedPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorSyntaxHighlight.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/modules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/popover.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMSyntaxHighlighter.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsTreeOutline.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ElementsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EventListenersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MetricsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/OverridesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PlatformFontsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PropertiesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RenderingOptionsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StylesSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionRegistryStub.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionServer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ApplicationCacheItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DOMStorageItemsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseQueryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DatabaseTableView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DirectoryContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileContentView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FileSystemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/IndexedDBViews.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkItemView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestCookiesView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHeadersView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestHTMLView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestJSONView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestPreviewView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestResponseView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestTimingView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RequestView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ResourceWebSocketFrameView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NetworkPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategories.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditCategory.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditFormatters.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditResultView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditRules.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AuditsPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorTextEditor.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CodeMirrorUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(gyp_shared_intermediate_dir)/blink/InspectorBackendCommands.js $(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_js_target_concatenate_devtools_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/concatenate_js_files.py front_end/inspector.html front_end "$(gyp_shared_intermediate_dir)/blink" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js"
 
diff --git a/Source/devtools/concatenated_devtools_layers_js.target.darwin-arm.mk b/Source/devtools/concatenated_devtools_layers_js.target.darwin-arm.mk
index c46a63e..de8c318 100644
--- a/Source/devtools/concatenated_devtools_layers_js.target.darwin-arm.mk
+++ b/Source/devtools/concatenated_devtools_layers_js.target.darwin-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_layers_js_target_concatenate_devtools_layers_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/LayersPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_layers_js.target.darwin-mips.mk b/Source/devtools/concatenated_devtools_layers_js.target.darwin-mips.mk
index c46a63e..de8c318 100644
--- a/Source/devtools/concatenated_devtools_layers_js.target.darwin-mips.mk
+++ b/Source/devtools/concatenated_devtools_layers_js.target.darwin-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_layers_js_target_concatenate_devtools_layers_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/LayersPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_layers_js.target.darwin-x86.mk b/Source/devtools/concatenated_devtools_layers_js.target.darwin-x86.mk
index c46a63e..de8c318 100644
--- a/Source/devtools/concatenated_devtools_layers_js.target.darwin-x86.mk
+++ b/Source/devtools/concatenated_devtools_layers_js.target.darwin-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_layers_js_target_concatenate_devtools_layers_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/LayersPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_layers_js.target.linux-arm.mk b/Source/devtools/concatenated_devtools_layers_js.target.linux-arm.mk
index c46a63e..de8c318 100644
--- a/Source/devtools/concatenated_devtools_layers_js.target.linux-arm.mk
+++ b/Source/devtools/concatenated_devtools_layers_js.target.linux-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_layers_js_target_concatenate_devtools_layers_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/LayersPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_layers_js.target.linux-mips.mk b/Source/devtools/concatenated_devtools_layers_js.target.linux-mips.mk
index c46a63e..de8c318 100644
--- a/Source/devtools/concatenated_devtools_layers_js.target.linux-mips.mk
+++ b/Source/devtools/concatenated_devtools_layers_js.target.linux-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_layers_js_target_concatenate_devtools_layers_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/LayersPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_layers_js.target.linux-x86.mk b/Source/devtools/concatenated_devtools_layers_js.target.linux-x86.mk
index c46a63e..de8c318 100644
--- a/Source/devtools/concatenated_devtools_layers_js.target.linux-x86.mk
+++ b/Source/devtools/concatenated_devtools_layers_js.target.linux-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayersPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTreeModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Layers3DView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/LayerDetailsView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PaintProfilerView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_layers_js_target_concatenate_devtools_layers_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/LayersPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_profiles_js.target.darwin-arm.mk b/Source/devtools/concatenated_devtools_profiles_js.target.darwin-arm.mk
index c21923d..08ea458 100644
--- a/Source/devtools/concatenated_devtools_profiles_js.target.darwin-arm.mk
+++ b/Source/devtools/concatenated_devtools_profiles_js.target.darwin-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_profiles_js_target_concatenate_devtools_profiles_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ProfilesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_profiles_js.target.darwin-mips.mk b/Source/devtools/concatenated_devtools_profiles_js.target.darwin-mips.mk
index c21923d..08ea458 100644
--- a/Source/devtools/concatenated_devtools_profiles_js.target.darwin-mips.mk
+++ b/Source/devtools/concatenated_devtools_profiles_js.target.darwin-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_profiles_js_target_concatenate_devtools_profiles_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ProfilesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_profiles_js.target.darwin-x86.mk b/Source/devtools/concatenated_devtools_profiles_js.target.darwin-x86.mk
index c21923d..08ea458 100644
--- a/Source/devtools/concatenated_devtools_profiles_js.target.darwin-x86.mk
+++ b/Source/devtools/concatenated_devtools_profiles_js.target.darwin-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_profiles_js_target_concatenate_devtools_profiles_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ProfilesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_profiles_js.target.linux-arm.mk b/Source/devtools/concatenated_devtools_profiles_js.target.linux-arm.mk
index c21923d..08ea458 100644
--- a/Source/devtools/concatenated_devtools_profiles_js.target.linux-arm.mk
+++ b/Source/devtools/concatenated_devtools_profiles_js.target.linux-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_profiles_js_target_concatenate_devtools_profiles_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ProfilesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_profiles_js.target.linux-mips.mk b/Source/devtools/concatenated_devtools_profiles_js.target.linux-mips.mk
index c21923d..08ea458 100644
--- a/Source/devtools/concatenated_devtools_profiles_js.target.linux-mips.mk
+++ b/Source/devtools/concatenated_devtools_profiles_js.target.linux-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_profiles_js_target_concatenate_devtools_profiles_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ProfilesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_profiles_js.target.linux-x86.mk b/Source/devtools/concatenated_devtools_profiles_js.target.linux-x86.mk
index c21923d..08ea458 100644
--- a/Source/devtools/concatenated_devtools_profiles_js.target.linux-x86.mk
+++ b/Source/devtools/concatenated_devtools_profiles_js.target.linux-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BottomUpProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CPUProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotDataGrids.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotGridNodes.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotProxy.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfilesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ProfileLauncherView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TopDownProfileDataGridTree.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasProfileView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CanvasReplayStateView.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_profiles_js_target_concatenate_devtools_profiles_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/ProfilesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_scripts_js.target.darwin-arm.mk b/Source/devtools/concatenated_devtools_scripts_js.target.darwin-arm.mk
index 108d7c9..186f418 100644
--- a/Source/devtools/concatenated_devtools_scripts_js.target.darwin-arm.mk
+++ b/Source/devtools/concatenated_devtools_scripts_js.target.darwin-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_scripts_js_target_concatenate_devtools_scripts_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/SourcesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_scripts_js.target.darwin-mips.mk b/Source/devtools/concatenated_devtools_scripts_js.target.darwin-mips.mk
index 108d7c9..186f418 100644
--- a/Source/devtools/concatenated_devtools_scripts_js.target.darwin-mips.mk
+++ b/Source/devtools/concatenated_devtools_scripts_js.target.darwin-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_scripts_js_target_concatenate_devtools_scripts_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/SourcesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_scripts_js.target.darwin-x86.mk b/Source/devtools/concatenated_devtools_scripts_js.target.darwin-x86.mk
index 108d7c9..186f418 100644
--- a/Source/devtools/concatenated_devtools_scripts_js.target.darwin-x86.mk
+++ b/Source/devtools/concatenated_devtools_scripts_js.target.darwin-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_scripts_js_target_concatenate_devtools_scripts_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/SourcesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_scripts_js.target.linux-arm.mk b/Source/devtools/concatenated_devtools_scripts_js.target.linux-arm.mk
index 108d7c9..186f418 100644
--- a/Source/devtools/concatenated_devtools_scripts_js.target.linux-arm.mk
+++ b/Source/devtools/concatenated_devtools_scripts_js.target.linux-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_scripts_js_target_concatenate_devtools_scripts_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/SourcesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_scripts_js.target.linux-mips.mk b/Source/devtools/concatenated_devtools_scripts_js.target.linux-mips.mk
index 108d7c9..186f418 100644
--- a/Source/devtools/concatenated_devtools_scripts_js.target.linux-mips.mk
+++ b/Source/devtools/concatenated_devtools_scripts_js.target.linux-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_scripts_js_target_concatenate_devtools_scripts_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/SourcesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_scripts_js.target.linux-x86.mk b/Source/devtools/concatenated_devtools_scripts_js.target.linux-x86.mk
index 108d7c9..186f418 100644
--- a/Source/devtools/concatenated_devtools_scripts_js.target.linux-x86.mk
+++ b/Source/devtools/concatenated_devtools_scripts_js.target.linux-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorOverlayController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/BreakpointsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CSSSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/CallStackSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/EditingLocationHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilePathScoreFunction.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/FilteredItemSelectionDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JavaScriptSourceFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/NavigatorView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/RevisionHistoryView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ScopeChainSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SimpleHistoryManager.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesNavigator.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesPanel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/SourcesSearchScope.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/StyleSheetOutlineDialog.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TabbedEditorContainer.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UISourceCodeFrame.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WatchExpressionsSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/WorkersSidebarPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ThreadsToolbar.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_scripts_js_target_concatenate_devtools_scripts_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/SourcesPanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_timeline_js.target.darwin-arm.mk b/Source/devtools/concatenated_devtools_timeline_js.target.darwin-arm.mk
index 1ccc58b..e1fa217 100644
--- a/Source/devtools/concatenated_devtools_timeline_js.target.darwin-arm.mk
+++ b/Source/devtools/concatenated_devtools_timeline_js.target.darwin-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_timeline_js_target_concatenate_devtools_timeline_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TimelinePanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_timeline_js.target.darwin-mips.mk b/Source/devtools/concatenated_devtools_timeline_js.target.darwin-mips.mk
index 1ccc58b..e1fa217 100644
--- a/Source/devtools/concatenated_devtools_timeline_js.target.darwin-mips.mk
+++ b/Source/devtools/concatenated_devtools_timeline_js.target.darwin-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_timeline_js_target_concatenate_devtools_timeline_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TimelinePanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_timeline_js.target.darwin-x86.mk b/Source/devtools/concatenated_devtools_timeline_js.target.darwin-x86.mk
index 1ccc58b..e1fa217 100644
--- a/Source/devtools/concatenated_devtools_timeline_js.target.darwin-x86.mk
+++ b/Source/devtools/concatenated_devtools_timeline_js.target.darwin-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_timeline_js_target_concatenate_devtools_timeline_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TimelinePanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_timeline_js.target.linux-arm.mk b/Source/devtools/concatenated_devtools_timeline_js.target.linux-arm.mk
index 1ccc58b..e1fa217 100644
--- a/Source/devtools/concatenated_devtools_timeline_js.target.linux-arm.mk
+++ b/Source/devtools/concatenated_devtools_timeline_js.target.linux-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_timeline_js_target_concatenate_devtools_timeline_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TimelinePanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_timeline_js.target.linux-mips.mk b/Source/devtools/concatenated_devtools_timeline_js.target.linux-mips.mk
index 1ccc58b..e1fa217 100644
--- a/Source/devtools/concatenated_devtools_timeline_js.target.linux-mips.mk
+++ b/Source/devtools/concatenated_devtools_timeline_js.target.linux-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_timeline_js_target_concatenate_devtools_timeline_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TimelinePanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js"
 
diff --git a/Source/devtools/concatenated_devtools_timeline_js.target.linux-x86.mk b/Source/devtools/concatenated_devtools_timeline_js.target.linux-x86.mk
index 1ccc58b..e1fa217 100644
--- a/Source/devtools/concatenated_devtools_timeline_js.target.linux-x86.mk
+++ b/Source/devtools/concatenated_devtools_timeline_js.target.linux-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameController.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/MemoryStatistics.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/PieChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePresentationModel.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineOverviewPane.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineEventOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFlameChart.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineFrameOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineMemoryOverview.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelineView.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TimelinePanel.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_devtools_timeline_js_target_concatenate_devtools_timeline_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TimelinePanel.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js"
 
diff --git a/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-arm.mk b/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-arm.mk
index 29bc1b8..0b7391e 100644
--- a/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-arm.mk
+++ b/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_heap_snapshot_worker_js_target_concatenate_heap_snapshot_worker_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/HeapSnapshotWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js"
 
diff --git a/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-mips.mk b/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-mips.mk
index 29bc1b8..0b7391e 100644
--- a/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-mips.mk
+++ b/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_heap_snapshot_worker_js_target_concatenate_heap_snapshot_worker_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/HeapSnapshotWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js"
 
diff --git a/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-x86.mk b/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-x86.mk
index 29bc1b8..0b7391e 100644
--- a/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-x86.mk
+++ b/Source/devtools/concatenated_heap_snapshot_worker_js.target.darwin-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_heap_snapshot_worker_js_target_concatenate_heap_snapshot_worker_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/HeapSnapshotWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js"
 
diff --git a/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-arm.mk b/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-arm.mk
index 29bc1b8..0b7391e 100644
--- a/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-arm.mk
+++ b/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-arm.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_heap_snapshot_worker_js_target_concatenate_heap_snapshot_worker_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/HeapSnapshotWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js"
 
diff --git a/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-mips.mk b/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-mips.mk
index 29bc1b8..0b7391e 100644
--- a/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-mips.mk
+++ b/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-mips.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_heap_snapshot_worker_js_target_concatenate_heap_snapshot_worker_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/HeapSnapshotWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js"
 
diff --git a/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-x86.mk b/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-x86.mk
index 29bc1b8..0b7391e 100644
--- a/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-x86.mk
+++ b/Source/devtools/concatenated_heap_snapshot_worker_js.target.linux-x86.mk
@@ -18,7 +18,7 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorker.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/AllocationProfile.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotCommon.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotLoader.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/JSHeapSnapshot.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TextUtils.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/UIString.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/utilities.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_heap_snapshot_worker_js_target_concatenate_heap_snapshot_worker_js ($@)"
 	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/HeapSnapshotWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js"
 
diff --git a/Source/devtools/concatenated_temp_storage_shared_worker_js.target.darwin-arm.mk b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.darwin-arm.mk
new file mode 100644
index 0000000..93da02d
--- /dev/null
+++ b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.darwin-arm.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+LOCAL_MODULE_STEM := concatenated_temp_storage_shared_worker_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_temp_storage_shared_worker_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempStorageSharedWorker.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_temp_storage_shared_worker_js_target_concatenate_temp_storage_shared_worker_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TempStorageSharedWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_temp_storage_shared_worker_js
+concatenated_temp_storage_shared_worker_js: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_temp_storage_shared_worker_js.target.darwin-mips.mk b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.darwin-mips.mk
new file mode 100644
index 0000000..93da02d
--- /dev/null
+++ b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.darwin-mips.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+LOCAL_MODULE_STEM := concatenated_temp_storage_shared_worker_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_temp_storage_shared_worker_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempStorageSharedWorker.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_temp_storage_shared_worker_js_target_concatenate_temp_storage_shared_worker_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TempStorageSharedWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_temp_storage_shared_worker_js
+concatenated_temp_storage_shared_worker_js: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_temp_storage_shared_worker_js.target.darwin-x86.mk b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.darwin-x86.mk
new file mode 100644
index 0000000..93da02d
--- /dev/null
+++ b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.darwin-x86.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+LOCAL_MODULE_STEM := concatenated_temp_storage_shared_worker_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_temp_storage_shared_worker_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempStorageSharedWorker.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_temp_storage_shared_worker_js_target_concatenate_temp_storage_shared_worker_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TempStorageSharedWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_temp_storage_shared_worker_js
+concatenated_temp_storage_shared_worker_js: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_temp_storage_shared_worker_js.target.linux-arm.mk b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.linux-arm.mk
new file mode 100644
index 0000000..93da02d
--- /dev/null
+++ b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.linux-arm.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+LOCAL_MODULE_STEM := concatenated_temp_storage_shared_worker_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_temp_storage_shared_worker_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempStorageSharedWorker.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_temp_storage_shared_worker_js_target_concatenate_temp_storage_shared_worker_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TempStorageSharedWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_temp_storage_shared_worker_js
+concatenated_temp_storage_shared_worker_js: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_temp_storage_shared_worker_js.target.linux-mips.mk b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.linux-mips.mk
new file mode 100644
index 0000000..93da02d
--- /dev/null
+++ b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.linux-mips.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+LOCAL_MODULE_STEM := concatenated_temp_storage_shared_worker_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_temp_storage_shared_worker_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempStorageSharedWorker.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_temp_storage_shared_worker_js_target_concatenate_temp_storage_shared_worker_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TempStorageSharedWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_temp_storage_shared_worker_js
+concatenated_temp_storage_shared_worker_js: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/concatenated_temp_storage_shared_worker_js.target.linux-x86.mk b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.linux-x86.mk
new file mode 100644
index 0000000..93da02d
--- /dev/null
+++ b/Source/devtools/concatenated_temp_storage_shared_worker_js.target.linux-x86.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+LOCAL_MODULE_STEM := concatenated_temp_storage_shared_worker_js
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "concatenate_temp_storage_shared_worker_js":
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/inline_js_imports.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/TempStorageSharedWorker.js $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_concatenated_temp_storage_shared_worker_js_target_concatenate_temp_storage_shared_worker_js ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/inline_js_imports.py front_end/TempStorageSharedWorker.js front_end "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+# Alias gyp target name.
+.PHONY: concatenated_temp_storage_shared_worker_js
+concatenated_temp_storage_shared_worker_js: third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/devtools.gyp b/Source/devtools/devtools.gyp
index c17dd31..f602541 100644
--- a/Source/devtools/devtools.gyp
+++ b/Source/devtools/devtools.gyp
@@ -38,6 +38,7 @@
             'type': 'none',
             'dependencies': [
                 'devtools_html',
+                'supported_css_properties',
                 'frontend_protocol_sources',
             ],
             'conditions': [
@@ -46,6 +47,7 @@
                                      'concatenated_devtools_elements_js',
                                      'concatenated_devtools_resources_js',
                                      'concatenated_devtools_network_js',
+                                     'concatenated_devtools_extensions_js',
                                      'concatenated_devtools_scripts_js',
                                      'concatenated_devtools_timeline_js',
                                      'concatenated_devtools_profiles_js',
@@ -54,41 +56,52 @@
                                      'concatenated_devtools_layers_js',
                                      'concatenated_heap_snapshot_worker_js',
                                      'concatenated_script_formatter_worker_js',
+                                     'concatenated_temp_storage_shared_worker_js',
                                      'concatenated_devtools_css'],
                 }],
             ],
             'copies': [
                 {
                     'destination': '<(PRODUCT_DIR)/resources/inspector',
-                    'files': [
-                        '<@(devtools_files)',
-                        '<(SHARED_INTERMEDIATE_DIR)/blink/InspectorBackendCommands.js',
-                    ],
                     'conditions': [
-                        ['debug_devtools==0', {
-                            'files/': [['exclude', '\\.(js|css|html)$']],
+                        ['debug_devtools==1', {
+                            'files': [
+                                '<@(devtools_files)',
+                                '<(SHARED_INTERMEDIATE_DIR)/blink/InspectorBackendCommands.js',
+                                '<(SHARED_INTERMEDIATE_DIR)/blink/SupportedCSSProperties.js',
+                                '<@(devtools_heap_snapshot_worker_js_files)',
+                                '<@(devtools_temp_storage_shared_worker_js_files)',
+                                '<@(devtools_script_formatter_worker_js_files)',
+                            ],
+                        },
+                        {
+                            'files': [],
                         }],
                     ],
                 },
                 {
                     'destination': '<(PRODUCT_DIR)/resources/inspector/UglifyJS',
-                    'files': [
-                        '<@(devtools_uglify_files)',
-                    ],
                     'conditions': [
-                        ['debug_devtools==0', {
-                            'files/': [['exclude', '\\.(js|css|html)$']],
+                        ['debug_devtools==1', {
+                            'files': [
+                                '<@(devtools_uglify_files)',
+                            ],
+                        },
+                        {
+                            'files': [],
                         }],
                     ],
                 },
                 {
                     'destination': '<(PRODUCT_DIR)/resources/inspector/cm',
-                    'files': [
-                        '<@(devtools_cm_files)',
-                    ],
                     'conditions': [
-                        ['debug_devtools==0', {
-                            'files/': [['exclude', '\\.(js|css|html)$']],
+                        ['debug_devtools==1', {
+                            'files': [
+                                '<@(devtools_cm_files)',
+                            ],
+                        },
+                        {
+                            'files': [],
                         }],
                     ],
                 },
@@ -143,6 +156,7 @@
                                      'concatenated_devtools_elements_js',
                                      'concatenated_devtools_resources_js',
                                      'concatenated_devtools_network_js',
+                                     'concatenated_devtools_extensions_js',
                                      'concatenated_devtools_scripts_js',
                                      'concatenated_devtools_timeline_js',
                                      'concatenated_devtools_profiles_js',
@@ -151,6 +165,7 @@
                                      'concatenated_devtools_layers_js',
                                      'concatenated_heap_snapshot_worker_js',
                                      'concatenated_script_formatter_worker_js',
+                                     'concatenated_temp_storage_shared_worker_js',
                                      'concatenated_devtools_css'],
                     'actions': [{
                         'action_name': 'generate_devtools_grd',
@@ -159,6 +174,7 @@
                             '<(PRODUCT_DIR)/resources/inspector/devtools.html',
                             '<(PRODUCT_DIR)/resources/inspector/inspector.js',
                             '<(PRODUCT_DIR)/resources/inspector/ElementsPanel.js',
+                            '<(PRODUCT_DIR)/resources/inspector/ExtensionServer.js',
                             '<(PRODUCT_DIR)/resources/inspector/ResourcesPanel.js',
                             '<(PRODUCT_DIR)/resources/inspector/NetworkPanel.js',
                             '<(PRODUCT_DIR)/resources/inspector/SourcesPanel.js',
@@ -169,6 +185,7 @@
                             '<(PRODUCT_DIR)/resources/inspector/CodeMirrorTextEditor.js',
                             '<(PRODUCT_DIR)/resources/inspector/HeapSnapshotWorker.js',
                             '<(PRODUCT_DIR)/resources/inspector/ScriptFormatterWorker.js',
+                            '<(PRODUCT_DIR)/resources/inspector/TempStorageSharedWorker.js',
                             '<(PRODUCT_DIR)/resources/inspector/inspector.css',
                             '<(PRODUCT_DIR)/resources/inspector/devtools_extension_api.js',
                             '<@(devtools_standalone_files)',
@@ -199,6 +216,7 @@
                         'input_pages': [
                             '<@(devtools_files)',
                             '<(SHARED_INTERMEDIATE_DIR)/blink/InspectorBackendCommands.js',
+                            '<(SHARED_INTERMEDIATE_DIR)/blink/SupportedCSSProperties.js',
                             '<(PRODUCT_DIR)/resources/inspector/devtools.html',
                         ],
                         'images': [
@@ -241,7 +259,32 @@
                 '--output_js_dir', '<(SHARED_INTERMEDIATE_DIR)/blink',
               ],
               'message': 'Generating Inspector protocol frontend sources from protocol.json',
-              'msvs_cygwin_shell': 1,
+            },
+          ]
+        },
+        {
+          'target_name': 'supported_css_properties',
+          'type': 'none',
+          'actions': [
+            {
+              'action_name': 'generateSupportedCSSProperties',
+              'inputs': [
+                # The python script in action below.
+                'scripts/generate_supported_css.py',
+                # Input files for the script.
+                '../core/css/CSSPropertyNames.in',
+                '../core/css/SVGCSSPropertyNames.in',
+                '../core/css/CSSShorthands.in',
+              ],
+              'outputs': [
+                '<(SHARED_INTERMEDIATE_DIR)/blink/SupportedCSSProperties.js',
+              ],
+              'action': [
+                'python',
+                '<@(_inputs)',
+                '<@(_outputs)',
+              ],
+              'message': 'Generating supported CSS properties for front end',
             },
           ]
         },
@@ -254,6 +297,7 @@
                     'type': 'none',
                     'dependencies': [
                         'devtools_html',
+                        'supported_css_properties',
                         'frontend_protocol_sources'
                     ],
                     'actions': [{
@@ -264,7 +308,8 @@
                             '<@(_script_name)',
                             '<@(_input_page)',
                             '<@(devtools_files)',
-                            '<(SHARED_INTERMEDIATE_DIR)/blink/InspectorBackendCommands.js'
+                            '<(SHARED_INTERMEDIATE_DIR)/blink/InspectorBackendCommands.js',
+                            '<(SHARED_INTERMEDIATE_DIR)/blink/SupportedCSSProperties.js'
                         ],
                         'search_path': [
                             'front_end',
@@ -323,6 +368,22 @@
                     }],
                 },
                 {
+                    'target_name': 'concatenated_devtools_extensions_js',
+                    'type': 'none',
+                    'actions': [{
+                        'action_name': 'concatenate_devtools_extensions_js',
+                        'script_name': 'scripts/inline_js_imports.py',
+                        'input_file': 'front_end/ExtensionServer.js',
+                        'inputs': [
+                            '<@(_script_name)',
+                            '<@(devtools_extensions_js_files)',
+                        ],
+                        'search_path': 'front_end',
+                        'outputs': ['<(PRODUCT_DIR)/resources/inspector/ExtensionServer.js'],
+                        'action': ['python', '<@(_script_name)', '<@(_input_file)', '<@(_search_path)', '<@(_outputs)'],
+                    }],
+                },
+                {
                     'target_name': 'concatenated_devtools_scripts_js',
                     'type': 'none',
                     'actions': [{
@@ -413,12 +474,7 @@
                         'inputs': [
                             '<@(_script_name)',
                             '<@(_input_file)',
-                            'front_end/AllocationProfile.js',
-                            'front_end/HeapSnapshot.js',
-                            'front_end/HeapSnapshotLoader.js',
-                            'front_end/HeapSnapshotWorkerDispatcher.js',
-                            'front_end/JSHeapSnapshot.js',
-                            'front_end/utilities.js',
+                            '<@(devtools_heap_snapshot_worker_js_files)',
                         ],
                         'search_path': 'front_end',
                         'outputs': ['<(PRODUCT_DIR)/resources/inspector/HeapSnapshotWorker.js'],
@@ -443,6 +499,22 @@
                     }],
                 },
                 {
+                    'target_name': 'concatenated_temp_storage_shared_worker_js',
+                    'type': 'none',
+                    'actions': [{
+                        'action_name': 'concatenate_temp_storage_shared_worker_js',
+                        'script_name': 'scripts/inline_js_imports.py',
+                        'input_file': 'front_end/TempStorageSharedWorker.js',
+                        'inputs': [
+                            '<@(_script_name)',
+                            '<@(devtools_temp_storage_shared_worker_js_files)'
+                        ],
+                        'search_path': 'front_end',
+                        'outputs': ['<(PRODUCT_DIR)/resources/inspector/TempStorageSharedWorker.js'],
+                        'action': ['python', '<@(_script_name)', '<@(_input_file)', '<@(_search_path)', '<@(_outputs)'],
+                    }],
+                },
+                {
                     'target_name': 'concatenated_devtools_layers_js',
                     'type': 'none',
                     'actions': [{
diff --git a/Source/devtools/devtools.gypi b/Source/devtools/devtools.gypi
index 5c213c6..ef173a3 100644
--- a/Source/devtools/devtools.gypi
+++ b/Source/devtools/devtools.gypi
@@ -53,7 +53,8 @@
             'front_end/CookieItemsView.js',
             'front_end/CookieParser.js',
             'front_end/CookiesTable.js',
-            'front_end/CSSFormatter.js',
+            'front_end/CountersGraph.js',
+            'front_end/CPUProfilerModel.js',
             'front_end/CSSMetadata.js',
             'front_end/CSSStyleModel.js',
             'front_end/CSSStyleSheetMapping.js',
@@ -61,29 +62,19 @@
             'front_end/DataGrid.js',
             'front_end/DebuggerModel.js',
             'front_end/DebuggerScriptMapping.js',
-            'front_end/DevToolsExtensionAPI.js',
             'front_end/Tests.js',
             'front_end/Dialog.js',
             'front_end/DOMAgent.js',
             'front_end/DOMBreakpointsSidebarPane.js',
-            'front_end/DOMCountersGraph.js',
             'front_end/DOMExtension.js',
             'front_end/DOMPresentationUtils.js',
             'front_end/DOMStorage.js',
-            'front_end/DOMSyntaxHighlighter.js',
             'front_end/DefaultScriptMapping.js',
             'front_end/DockController.js',
             'front_end/Drawer.js',
             'front_end/EditFileSystemDialog.js',
-            'front_end/ElementsPanelDescriptor.js',
-            'front_end/ElementsTreeOutline.js',
             'front_end/EmptyView.js',
-            'front_end/ExtensionAPI.js',
-            'front_end/ExtensionAuditCategory.js',
-            'front_end/ExtensionPanel.js',
-            'front_end/ExtensionRegistryStub.js',
-            'front_end/ExtensionServer.js',
-            'front_end/ExtensionView.js',
+            'front_end/ExtensionServerProxy.js',
             'front_end/FileManager.js',
             'front_end/FileSystemMapping.js',
             'front_end/FileSystemModel.js',
@@ -96,10 +87,12 @@
             'front_end/GoToLineDialog.js',
             'front_end/HAREntry.js',
             'front_end/HandlerRegistry.js',
-            'front_end/HeapSnapshotWorker.js',
             'front_end/HelpScreen.js',
+            'front_end/HelpScreenUntilReload.js',
             'front_end/ImageView.js',
             'front_end/IndexedDBModel.js',
+            'front_end/InplaceEditor.js',
+            'front_end/InspectElementModeController.js',
             'front_end/InspectorBackend.js',
             'front_end/InspectorFrontendAPI.js',
             'front_end/InspectorFrontendHostStub.js',
@@ -107,30 +100,29 @@
             'front_end/inspector.js',
             'front_end/IsolatedFileSystem.js',
             'front_end/IsolatedFileSystemManager.js',
-            'front_end/JavaScriptFormatter.js',
             'front_end/jsdifflib.js',
             'front_end/KeyboardShortcut.js',
-            'front_end/LayersPanelDescriptor.js',
             'front_end/Linkifier.js',
             'front_end/LiveEditSupport.js',
+            'front_end/ModuleManager.js',
             'front_end/NativeBreakpointsSidebarPane.js',
             'front_end/NetworkManager.js',
             'front_end/NetworkLog.js',
-            'front_end/NetworkPanelDescriptor.js',
             'front_end/NetworkRequest.js',
             'front_end/NetworkUISourceCodeProvider.js',
-            'front_end/InspectElementModeController.js',
+            'front_end/NotificationService.js',
             'front_end/Object.js',
             'front_end/ObjectPopoverHelper.js',
             'front_end/ObjectPropertiesSection.js',
             'front_end/OverridesSupport.js',
             'front_end/OverviewGrid.js',
+            'front_end/PaintProfiler.js',
             'front_end/Panel.js',
             'front_end/ParsedURL.js',
             'front_end/Placard.js',
+            'front_end/Platform.js',
             'front_end/Popover.js',
             'front_end/PresentationConsoleMessageHelper.js',
-            'front_end/ProfilesPanelDescriptor.js',
             'front_end/Progress.js',
             'front_end/ProgressIndicator.js',
             'front_end/PropertiesSection.js',
@@ -146,17 +138,16 @@
             'front_end/ScreencastView.js',
             'front_end/Script.js',
             'front_end/ScriptFormatter.js',
-            'front_end/ScriptFormatterWorker.js',
             'front_end/ScriptSnippetModel.js',
             'front_end/SearchableView.js',
             'front_end/SettingsScreen.js',
             'front_end/Section.js',
             'front_end/Settings.js',
+            'front_end/SettingsUI.js',
             'front_end/ShortcutsScreen.js',
             'front_end/ShowMoreDataGridNode.js',
             'front_end/SidebarOverlay.js',
             'front_end/SidebarPane.js',
-            'front_end/SidebarView.js',
             'front_end/SidebarTreeElement.js',
             'front_end/SimpleWorkspaceProvider.js',
             'front_end/SnippetStorage.js',
@@ -164,9 +155,9 @@
             'front_end/SourceFrame.js',
             'front_end/SourceMap.js',
             'front_end/SourceMapping.js',
-            'front_end/SourcesPanelDescriptor.js',
             'front_end/Spectrum.js',
             'front_end/SplitView.js',
+            'front_end/StackView.js',
             'front_end/StatusBarButton.js',
             'front_end/StylesSourceMapping.js',
             'front_end/SuggestBox.js',
@@ -179,7 +170,6 @@
             'front_end/TextUtils.js',
             'front_end/TimelineGrid.js',
             'front_end/TimelineManager.js',
-            'front_end/TimelinePanelDescriptor.js',
             'front_end/TracingAgent.js',
             'front_end/treeoutline.js',
             'front_end/UISourceCode.js',
@@ -190,12 +180,15 @@
             'front_end/View.js',
             'front_end/ViewportControl.js',
             'front_end/WorkerManager.js',
+            'front_end/WorkerFrontendManager.js',
             'front_end/Workspace.js',
             'front_end/WorkspaceController.js',
+            'front_end/ZoomManager.js',
             'front_end/dialog.css',
             'front_end/inspector.css',
             'front_end/tabbedPane.css',
             'front_end/inspectorSyntaxHighlight.css',
+            'front_end/modules.js',
             'front_end/popover.css',
             '<@(devtools_modules_js_files)',
             '<@(devtools_standalone_files)',
@@ -208,7 +201,6 @@
             'front_end/buildSystemOnly.js',
             'front_end/cm/cmdevtools.css',
             'front_end/cm/codemirror.css',
-            'front_end/cssNamedFlows.css',
             'front_end/dataGrid.css',
             'front_end/elementsPanel.css',
             'front_end/filter.css',
@@ -239,17 +231,25 @@
             'front_end/layersPanel.css',
         ],
         'devtools_elements_js_files': [
-            'front_end/CSSNamedFlowCollectionsView.js',
-            'front_end/CSSNamedFlowView.js',
+            'front_end/DOMSyntaxHighlighter.js',
+            'front_end/ElementsTreeOutline.js',
             'front_end/ElementsPanel.js',
             'front_end/EventListenersSidebarPane.js',
             'front_end/MetricsSidebarPane.js',
-            'front_end/OverridesView.js', 
+            'front_end/OverridesView.js',
             'front_end/PlatformFontsSidebarPane.js',
             'front_end/PropertiesSidebarPane.js',
             'front_end/RenderingOptionsView.js',
             'front_end/StylesSidebarPane.js',
         ],
+        'devtools_extensions_js_files': [
+            'front_end/ExtensionAPI.js',
+            'front_end/ExtensionAuditCategory.js',
+            'front_end/ExtensionPanel.js',
+            'front_end/ExtensionRegistryStub.js',
+            'front_end/ExtensionServer.js',
+            'front_end/ExtensionView.js',
+        ],
         'devtools_resources_js_files': [
             'front_end/ApplicationCacheItemsView.js',
             'front_end/DOMStorageItemsView.js',
@@ -278,13 +278,14 @@
             'front_end/BreakpointsSidebarPane.js',
             'front_end/CSSSourceFrame.js',
             'front_end/CallStackSidebarPane.js',
+            'front_end/EditingLocationHistoryManager.js',
             'front_end/FilePathScoreFunction.js',
             'front_end/FilteredItemSelectionDialog.js',
             'front_end/JavaScriptSourceFrame.js',
-            'front_end/NavigatorOverlayController.js',
             'front_end/NavigatorView.js',
             'front_end/RevisionHistoryView.js',
             'front_end/ScopeChainSidebarPane.js',
+            'front_end/SimpleHistoryManager.js',
             'front_end/SourcesNavigator.js',
             'front_end/SourcesPanel.js',
             'front_end/SourcesSearchScope.js',
@@ -293,31 +294,31 @@
             'front_end/UISourceCodeFrame.js',
             'front_end/WatchExpressionsSidebarPane.js',
             'front_end/WorkersSidebarPane.js',
+            'front_end/ThreadsToolbar.js',
         ],
         'devtools_timeline_js_files': [
             'front_end/MemoryStatistics.js',
             'front_end/PieChart.js',
-            'front_end/TimelineFrameController.js',
+            'front_end/TimelineFrameModel.js',
             'front_end/TimelineModel.js',
             'front_end/TimelinePresentationModel.js',
             'front_end/TimelineOverviewPane.js',
             'front_end/TimelineEventOverview.js',
+            'front_end/TimelineFlameChart.js',
             'front_end/TimelineFrameOverview.js',
             'front_end/TimelineMemoryOverview.js',
+            'front_end/TimelineView.js',
             'front_end/TimelinePanel.js',
         ],
         'devtools_profiles_js_files': [
-            'front_end/AllocationProfile.js',
             'front_end/BottomUpProfileDataGridTree.js',
             'front_end/CPUProfileView.js',
-            'front_end/HeapSnapshot.js',
+            'front_end/HeapSnapshotCommon.js',
             'front_end/HeapSnapshotDataGrids.js',
             'front_end/HeapSnapshotGridNodes.js',
-            'front_end/HeapSnapshotLoader.js',
             'front_end/HeapSnapshotProxy.js',
             'front_end/HeapSnapshotView.js',
             'front_end/HeapSnapshotWorkerDispatcher.js',
-            'front_end/JSHeapSnapshot.js',
             'front_end/ProfileDataGridTree.js',
             'front_end/ProfilesPanel.js',
             'front_end/ProfileLauncherView.js',
@@ -325,8 +326,21 @@
             'front_end/CanvasProfileView.js',
             'front_end/CanvasReplayStateView.js',
         ],
+        'devtools_heap_snapshot_worker_js_files': [
+            'front_end/AllocationProfile.js',
+            'front_end/HeapSnapshot.js',
+            'front_end/HeapSnapshotCommon.js',
+            'front_end/HeapSnapshotLoader.js',
+            'front_end/HeapSnapshotWorker.js',
+            'front_end/HeapSnapshotWorkerDispatcher.js',
+            'front_end/JSHeapSnapshot.js',
+            'front_end/TextUtils.js',
+            'front_end/UIString.js',
+            'front_end/utilities.js',
+        ],
         'devtools_audits_js_files': [
             'front_end/AuditCategories.js',
+            'front_end/AuditCategory.js',
             'front_end/AuditController.js',
             'front_end/AuditFormatters.js',
             'front_end/AuditLauncherView.js',
@@ -359,6 +373,7 @@
         ],
         'devtools_modules_js_files': [
             '<@(devtools_elements_js_files)',
+            '<@(devtools_extensions_js_files)',
             '<@(devtools_resources_js_files)',
             '<@(devtools_network_js_files)',
             '<@(devtools_scripts_js_files)',
@@ -375,17 +390,12 @@
             'front_end/Images/addIcon.png',
             'front_end/Images/applicationCache.png',
             'front_end/Images/back.png',
-            'front_end/Images/breakpointBorder.png',
-            'front_end/Images/breakpoint2.png',
-            'front_end/Images/breakpoint2_2x.png',
-            'front_end/Images/breakpointConditional2.png',
-            'front_end/Images/breakpointConditional2_2x.png',
-            'front_end/Images/breakpointConditionalBorder.png',
-            'front_end/Images/breakpointConditionalCounterBorder.png',
-            'front_end/Images/breakpointCounterBorder.png',
+            'front_end/Images/breakpoint.png',
+            'front_end/Images/breakpoint_2x.png',
+            'front_end/Images/breakpointConditional.png',
+            'front_end/Images/breakpointConditional_2x.png',
             'front_end/Images/checker.png',
             'front_end/Images/cookie.png',
-            'front_end/Images/namedFlowOverflow.png',
             'front_end/Images/database.png',
             'front_end/Images/databaseTable.png',
             'front_end/Images/deleteIcon.png',
@@ -393,10 +403,6 @@
             'front_end/Images/forward.png',
             'front_end/Images/fileSystem.png',
             'front_end/Images/frame.png',
-            'front_end/Images/glossyHeader.png',
-            'front_end/Images/glossyHeaderPressed.png',
-            'front_end/Images/glossyHeaderSelected.png',
-            'front_end/Images/glossyHeaderSelectedPressed.png',
             'front_end/Images/graphLabelCalloutLeft.png',
             'front_end/Images/graphLabelCalloutRight.png',
             'front_end/Images/indexedDB.png',
@@ -415,11 +421,7 @@
             'front_end/Images/profileGroupIcon.png',
             'front_end/Images/profileIcon.png',
             'front_end/Images/profileSmallIcon.png',
-            'front_end/Images/programCounterBorder.png',
             'front_end/Images/radioDot.png',
-            'front_end/Images/regionEmpty.png',
-            'front_end/Images/regionFit.png',
-            'front_end/Images/regionOverset.png',
             'front_end/Images/resourceCSSIcon.png',
             'front_end/Images/resourceDocumentIcon.png',
             'front_end/Images/resourceDocumentIconSmall.png',
@@ -432,13 +434,12 @@
             'front_end/Images/sessionStorage.png',
             'front_end/Images/settingsListRemove.png',
             'front_end/Images/settingsListRemove_2x.png',
-            'front_end/Images/spinner.gif',
             'front_end/Images/spinnerActive.gif',
             'front_end/Images/spinnerActiveSelected.gif',
             'front_end/Images/spinnerInactive.gif',
             'front_end/Images/spinnerInactiveSelected.gif',
             'front_end/Images/statusbarButtonGlyphs.png',
-            'front_end/Images/statusbarButtonGlyphs2x.png',
+            'front_end/Images/statusbarButtonGlyphs_2x.png',
             'front_end/Images/statusbarResizerHorizontal.png',
             'front_end/Images/statusbarResizerVertical.png',
             'front_end/Images/thumbActiveHoriz.png',
@@ -447,20 +448,6 @@
             'front_end/Images/thumbVert.png',
             'front_end/Images/thumbHoverHoriz.png',
             'front_end/Images/thumbHoverVert.png',
-            'front_end/Images/timelineHollowPillBlue.png',
-            'front_end/Images/timelineHollowPillGray.png',
-            'front_end/Images/timelineHollowPillGreen.png',
-            'front_end/Images/timelineHollowPillOrange.png',
-            'front_end/Images/timelineHollowPillPurple.png',
-            'front_end/Images/timelineHollowPillRed.png',
-            'front_end/Images/timelineHollowPillYellow.png',
-            'front_end/Images/timelinePillBlue.png',
-            'front_end/Images/timelinePillGray.png',
-            'front_end/Images/timelinePillGreen.png',
-            'front_end/Images/timelinePillOrange.png',
-            'front_end/Images/timelinePillPurple.png',
-            'front_end/Images/timelinePillRed.png',
-            'front_end/Images/timelinePillYellow.png',
             'front_end/Images/toolbarItemSelected.png',
             'front_end/Images/trackHoriz.png',
             'front_end/Images/trackVert.png',
@@ -471,10 +458,19 @@
             'front_end/LayerTree.js',
             'front_end/Layers3DView.js',
             'front_end/LayerDetailsView.js',
+            'front_end/PaintProfilerView.js',
         ],
         'devtools_extension_api_files': [
             'front_end/ExtensionAPI.js',
-            'front_end/DevToolsExtensionAPI.js'
+        ],
+        'devtools_temp_storage_shared_worker_js_files': [
+            'front_end/TempStorageSharedWorker.js',
+        ],
+        'devtools_script_formatter_worker_js_files': [
+            'front_end/CSSFormatter.js',
+            'front_end/JavaScriptFormatter.js',
+            'front_end/ScriptFormatterWorker.js',
+            'front_end/utilities.js',
         ],
     },
 }
diff --git a/Source/devtools/devtools_extension_api.target.darwin-arm.mk b/Source/devtools/devtools_extension_api.target.darwin-arm.mk
index 0c6ff0f..8b20d6a 100644
--- a/Source/devtools/devtools_extension_api.target.darwin-arm.mk
+++ b/Source/devtools/devtools_extension_api.target.darwin-arm.mk
@@ -18,9 +18,9 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_devtools_extension_api_target_devtools_html ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js front_end/DevToolsExtensionAPI.js
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js
 
 
 
diff --git a/Source/devtools/devtools_extension_api.target.darwin-mips.mk b/Source/devtools/devtools_extension_api.target.darwin-mips.mk
index 0c6ff0f..8b20d6a 100644
--- a/Source/devtools/devtools_extension_api.target.darwin-mips.mk
+++ b/Source/devtools/devtools_extension_api.target.darwin-mips.mk
@@ -18,9 +18,9 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_devtools_extension_api_target_devtools_html ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js front_end/DevToolsExtensionAPI.js
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js
 
 
 
diff --git a/Source/devtools/devtools_extension_api.target.darwin-x86.mk b/Source/devtools/devtools_extension_api.target.darwin-x86.mk
index 0c6ff0f..8b20d6a 100644
--- a/Source/devtools/devtools_extension_api.target.darwin-x86.mk
+++ b/Source/devtools/devtools_extension_api.target.darwin-x86.mk
@@ -18,9 +18,9 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_devtools_extension_api_target_devtools_html ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js front_end/DevToolsExtensionAPI.js
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js
 
 
 
diff --git a/Source/devtools/devtools_extension_api.target.linux-arm.mk b/Source/devtools/devtools_extension_api.target.linux-arm.mk
index 0c6ff0f..8b20d6a 100644
--- a/Source/devtools/devtools_extension_api.target.linux-arm.mk
+++ b/Source/devtools/devtools_extension_api.target.linux-arm.mk
@@ -18,9 +18,9 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_devtools_extension_api_target_devtools_html ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js front_end/DevToolsExtensionAPI.js
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js
 
 
 
diff --git a/Source/devtools/devtools_extension_api.target.linux-mips.mk b/Source/devtools/devtools_extension_api.target.linux-mips.mk
index 0c6ff0f..8b20d6a 100644
--- a/Source/devtools/devtools_extension_api.target.linux-mips.mk
+++ b/Source/devtools/devtools_extension_api.target.linux-mips.mk
@@ -18,9 +18,9 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_devtools_extension_api_target_devtools_html ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js front_end/DevToolsExtensionAPI.js
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js
 
 
 
diff --git a/Source/devtools/devtools_extension_api.target.linux-x86.mk b/Source/devtools/devtools_extension_api.target.linux-x86.mk
index 0c6ff0f..8b20d6a 100644
--- a/Source/devtools/devtools_extension_api.target.linux-x86.mk
+++ b/Source/devtools/devtools_extension_api.target.linux-x86.mk
@@ -18,9 +18,9 @@
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/DevToolsExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_extension_api.py $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/ExtensionAPI.js $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_devtools_extension_api_target_devtools_html ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js front_end/DevToolsExtensionAPI.js
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/resources/inspector; python scripts/generate_devtools_extension_api.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/ExtensionAPI.js
 
 
 
diff --git a/Source/devtools/devtools_html.target.darwin-arm.mk b/Source/devtools/devtools_html.target.darwin-arm.mk
index 0899828..e28ca82 100644
--- a/Source/devtools/devtools_html.target.darwin-arm.mk
+++ b/Source/devtools/devtools_html.target.darwin-arm.mk
@@ -63,6 +63,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-Wno-address \
 	-Wno-format-security \
 	-Wno-return-type \
@@ -71,10 +72,10 @@
 	-g \
 	-fomit-frame-pointer \
 	-fdata-sections \
-	-ffunction-sections
+	-ffunction-sections \
+	-funwind-tables
 
 MY_DEFS_Debug := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -85,7 +86,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -115,7 +115,6 @@
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
 	-Wno-abi \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
@@ -147,6 +146,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-Wno-address \
 	-Wno-format-security \
 	-Wno-return-type \
@@ -155,10 +155,10 @@
 	-fno-ident \
 	-fdata-sections \
 	-ffunction-sections \
-	-fomit-frame-pointer
+	-fomit-frame-pointer \
+	-funwind-tables
 
 MY_DEFS_Release := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -169,7 +169,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -199,7 +198,6 @@
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
 	-Wno-abi \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
diff --git a/Source/devtools/devtools_html.target.darwin-mips.mk b/Source/devtools/devtools_html.target.darwin-mips.mk
index 0045c50..9b265eb 100644
--- a/Source/devtools/devtools_html.target.darwin-mips.mk
+++ b/Source/devtools/devtools_html.target.darwin-mips.mk
@@ -63,6 +63,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-Wno-address \
 	-Wno-format-security \
 	-Wno-return-type \
@@ -71,10 +72,10 @@
 	-g \
 	-fomit-frame-pointer \
 	-fdata-sections \
-	-ffunction-sections
+	-ffunction-sections \
+	-funwind-tables
 
 MY_DEFS_Debug := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -85,7 +86,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -115,7 +115,6 @@
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
 	-Wno-uninitialized \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
@@ -147,6 +146,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-Wno-address \
 	-Wno-format-security \
 	-Wno-return-type \
@@ -155,10 +155,10 @@
 	-fno-ident \
 	-fdata-sections \
 	-ffunction-sections \
-	-fomit-frame-pointer
+	-fomit-frame-pointer \
+	-funwind-tables
 
 MY_DEFS_Release := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -169,7 +169,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -199,7 +198,6 @@
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
 	-Wno-uninitialized \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
diff --git a/Source/devtools/devtools_html.target.darwin-x86.mk b/Source/devtools/devtools_html.target.darwin-x86.mk
index 0f64ac8..cf351cc 100644
--- a/Source/devtools/devtools_html.target.darwin-x86.mk
+++ b/Source/devtools/devtools_html.target.darwin-x86.mk
@@ -64,6 +64,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-fno-stack-protector \
 	-Wno-address \
 	-Wno-format-security \
@@ -73,10 +74,10 @@
 	-g \
 	-fomit-frame-pointer \
 	-fdata-sections \
-	-ffunction-sections
+	-ffunction-sections \
+	-funwind-tables
 
 MY_DEFS_Debug := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -87,7 +88,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -116,7 +116,6 @@
 	-fno-threadsafe-statics \
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
@@ -149,6 +148,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-fno-stack-protector \
 	-Wno-address \
 	-Wno-format-security \
@@ -159,11 +159,9 @@
 	-fdata-sections \
 	-ffunction-sections \
 	-fomit-frame-pointer \
-	-fno-unwind-tables \
-	-fno-asynchronous-unwind-tables
+	-funwind-tables
 
 MY_DEFS_Release := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -174,7 +172,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -203,7 +200,6 @@
 	-fno-threadsafe-statics \
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
diff --git a/Source/devtools/devtools_html.target.linux-arm.mk b/Source/devtools/devtools_html.target.linux-arm.mk
index 0899828..e28ca82 100644
--- a/Source/devtools/devtools_html.target.linux-arm.mk
+++ b/Source/devtools/devtools_html.target.linux-arm.mk
@@ -63,6 +63,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-Wno-address \
 	-Wno-format-security \
 	-Wno-return-type \
@@ -71,10 +72,10 @@
 	-g \
 	-fomit-frame-pointer \
 	-fdata-sections \
-	-ffunction-sections
+	-ffunction-sections \
+	-funwind-tables
 
 MY_DEFS_Debug := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -85,7 +86,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -115,7 +115,6 @@
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
 	-Wno-abi \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
@@ -147,6 +146,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-Wno-address \
 	-Wno-format-security \
 	-Wno-return-type \
@@ -155,10 +155,10 @@
 	-fno-ident \
 	-fdata-sections \
 	-ffunction-sections \
-	-fomit-frame-pointer
+	-fomit-frame-pointer \
+	-funwind-tables
 
 MY_DEFS_Release := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -169,7 +169,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -199,7 +198,6 @@
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
 	-Wno-abi \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
diff --git a/Source/devtools/devtools_html.target.linux-mips.mk b/Source/devtools/devtools_html.target.linux-mips.mk
index 0045c50..9b265eb 100644
--- a/Source/devtools/devtools_html.target.linux-mips.mk
+++ b/Source/devtools/devtools_html.target.linux-mips.mk
@@ -63,6 +63,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-Wno-address \
 	-Wno-format-security \
 	-Wno-return-type \
@@ -71,10 +72,10 @@
 	-g \
 	-fomit-frame-pointer \
 	-fdata-sections \
-	-ffunction-sections
+	-ffunction-sections \
+	-funwind-tables
 
 MY_DEFS_Debug := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -85,7 +86,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -115,7 +115,6 @@
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
 	-Wno-uninitialized \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
@@ -147,6 +146,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-Wno-address \
 	-Wno-format-security \
 	-Wno-return-type \
@@ -155,10 +155,10 @@
 	-fno-ident \
 	-fdata-sections \
 	-ffunction-sections \
-	-fomit-frame-pointer
+	-fomit-frame-pointer \
+	-funwind-tables
 
 MY_DEFS_Release := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -169,7 +169,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -199,7 +198,6 @@
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
 	-Wno-uninitialized \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
diff --git a/Source/devtools/devtools_html.target.linux-x86.mk b/Source/devtools/devtools_html.target.linux-x86.mk
index 0f64ac8..cf351cc 100644
--- a/Source/devtools/devtools_html.target.linux-x86.mk
+++ b/Source/devtools/devtools_html.target.linux-x86.mk
@@ -64,6 +64,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-fno-stack-protector \
 	-Wno-address \
 	-Wno-format-security \
@@ -73,10 +74,10 @@
 	-g \
 	-fomit-frame-pointer \
 	-fdata-sections \
-	-ffunction-sections
+	-ffunction-sections \
+	-funwind-tables
 
 MY_DEFS_Debug := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -87,7 +88,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -116,7 +116,6 @@
 	-fno-threadsafe-statics \
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
@@ -149,6 +148,7 @@
 	-Wno-extra \
 	-Wno-ignored-qualifiers \
 	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
 	-fno-stack-protector \
 	-Wno-address \
 	-Wno-format-security \
@@ -159,11 +159,9 @@
 	-fdata-sections \
 	-ffunction-sections \
 	-fomit-frame-pointer \
-	-fno-unwind-tables \
-	-fno-asynchronous-unwind-tables
+	-funwind-tables
 
 MY_DEFS_Release := \
-	'-DANGLE_DX11' \
 	'-DV8_DEPRECATION_WARNINGS' \
 	'-D_FILE_OFFSET_BITS=64' \
 	'-DNO_TCMALLOC' \
@@ -174,7 +172,6 @@
 	'-DENABLE_CONFIGURATION_POLICY' \
 	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
 	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
 	'-DUSE_OPENSSL=1' \
 	'-DENABLE_EGLIMAGE=1' \
 	'-DCLD_VERSION=1' \
@@ -203,7 +200,6 @@
 	-fno-threadsafe-statics \
 	-fvisibility-inlines-hidden \
 	-Wno-deprecated \
-	-Wno-error=c++0x-compat \
 	-Wno-non-virtual-dtor \
 	-Wno-sign-promo \
 	-Wno-non-virtual-dtor
diff --git a/Source/devtools/front_end/AdvancedSearchController.js b/Source/devtools/front_end/AdvancedSearchController.js
index 8dcbe60..be54e0d 100644
--- a/Source/devtools/front_end/AdvancedSearchController.js
+++ b/Source/devtools/front_end/AdvancedSearchController.js
@@ -28,7 +28,6 @@
 
 /**
  * @constructor
- * @implements {WebInspector.ViewFactory}
  */
 WebInspector.AdvancedSearchController = function()
 {
@@ -38,7 +37,6 @@
     WebInspector.settings.advancedSearchConfig = WebInspector.settings.createSetting("advancedSearchConfig", new WebInspector.SearchConfig("", true, false));
 
     WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.FrameNavigated, this._frameNavigated, this);
-    WebInspector.inspectorView.registerViewInDrawer("search", WebInspector.UIString("Search"), this);
 }
 
 /**
@@ -54,17 +52,6 @@
 
 WebInspector.AdvancedSearchController.prototype = {
     /**
-     * @param {string=} id
-     * @return {?WebInspector.View}
-     */
-    createView: function(id)
-    {
-        if (!this._searchView)
-            this._searchView = new WebInspector.SearchView(this);
-        return this._searchView;
-    },
-
-    /**
      * @param {!KeyboardEvent} event
      * @return {boolean}
      */
@@ -87,15 +74,6 @@
         this.resetSearch();
     },
 
-    /**
-     * @param {!WebInspector.SearchScope} searchScope
-     */
-    registerSearchScope: function(searchScope)
-    {
-        // FIXME: implement multiple search scopes.
-        this._searchScope = searchScope;
-    },
-
     show: function()
     {
         var selection = window.getSelection();
@@ -132,7 +110,7 @@
     {
         this._isIndexing = true;
         // FIXME: this._currentSearchScope should be initialized based on searchConfig
-        this._currentSearchScope = this._searchScope;
+        this._currentSearchScope = this._searchScopes()[0];
         if (this._progressIndicator)
             this._progressIndicator.done();
         this._progressIndicator = new WebInspector.ProgressIndicator();
@@ -190,7 +168,7 @@
     {
         this._searchConfig = searchConfig;
         // FIXME: this._currentSearchScope should be initialized based on searchConfig
-        this._currentSearchScope = this._searchScope;
+        this._currentSearchScope = this._searchScopes()[0];
 
         if (this._progressIndicator)
             this._progressIndicator.done();
@@ -216,6 +194,35 @@
         if (this._currentSearchScope)
             this._currentSearchScope.stopSearch();
         delete this._searchConfig;
+    },
+
+    /**
+     * @return {!Array.<!WebInspector.SearchScope>}
+     */
+    _searchScopes: function()
+    {
+        // FIXME: implement multiple search scopes.
+        return /** @type {!Array.<!WebInspector.SearchScope>} */ (WebInspector.moduleManager.instances(WebInspector.SearchScope));
+    }
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.Drawer.ViewFactory}
+ */
+WebInspector.AdvancedSearchController.ViewFactory = function()
+{
+}
+
+WebInspector.AdvancedSearchController.ViewFactory.prototype = {
+    /**
+     * @return {!WebInspector.View}
+     */
+    createView: function()
+    {
+        if (!WebInspector.advancedSearchController._searchView)
+            WebInspector.advancedSearchController._searchView = new WebInspector.SearchView(WebInspector.advancedSearchController);
+        return WebInspector.advancedSearchController._searchView;
     }
 }
 
@@ -230,7 +237,7 @@
 
     this._controller = controller;
 
-    this.element.className = "search-view vbox";
+    this.element.classList.add("search-view");
 
     this._searchPanelElement = this.element.createChild("div", "search-drawer-header");
     this._searchPanelElement.addEventListener("keydown", this._onKeyDown.bind(this), false);
@@ -381,11 +388,6 @@
         this._search.select();
     },
 
-    afterShow: function()
-    {
-        this.focus();
-    },
-
     willHide: function()
     {
         this._controller.stopSearch();
@@ -455,7 +457,14 @@
         var regexp = new RegExp(pattern, "g");
         var queryParts = this.query.match(regexp) || [];
 
+        /**
+         * @type {!Array.<string>}
+         */
         this._fileQueries = [];
+
+        /**
+         * @type {!Array.<string>}
+         */
         this._queries = [];
 
         for (var i = 0; i < queryParts.length; ++i) {
@@ -476,11 +485,17 @@
         }
     },
 
+    /**
+     * @return {!Array.<string>}
+     */
     fileQueries: function()
     {
         return this._fileQueries;
     },
 
+    /**
+     * @return {!Array.<string>}
+     */
     queries: function()
     {
         return this._queries;
@@ -535,6 +550,12 @@
      */
     performSearch: function(searchConfig, progress, searchResultCallback, searchFinishedCallback) { },
 
+    /**
+     * @param {!WebInspector.ProgressIndicator} progressIndicator
+     * @param {function(boolean)} callback
+     */
+    performIndexing: function(progressIndicator, callback) { },
+
     stopSearch: function() { },
 
     /**
@@ -602,12 +623,7 @@
      */
     _createAnchor: function(uiSourceCode, lineNumber, columnNumber)
     {
-        var anchor = document.createElement("a");
-        anchor.preferredPanel = "sources";
-        anchor.href = sanitizeHref(uiSourceCode.originURL());
-        anchor.uiSourceCode = uiSourceCode;
-        anchor.lineNumber = lineNumber;
-        return anchor;
+        return WebInspector.Linkifier.linkifyUsingRevealer(new WebInspector.UILocation(uiSourceCode, lineNumber, columnNumber), "", uiSourceCode.url, lineNumber);
     },
 
     /**
@@ -797,6 +813,6 @@
 }
 
 /**
- * @type {?WebInspector.AdvancedSearchController}
+ * @type {!WebInspector.AdvancedSearchController}
  */
-WebInspector.advancedSearchController = null;
+WebInspector.advancedSearchController;
diff --git a/Source/devtools/front_end/AllocationProfile.js b/Source/devtools/front_end/AllocationProfile.js
index d337178..ebda731 100644
--- a/Source/devtools/front_end/AllocationProfile.js
+++ b/Source/devtools/front_end/AllocationProfile.js
@@ -111,6 +111,9 @@
         return traverseNode(traceTreeRaw, 0, null);
     },
 
+    /**
+     * @return {!Array.<!WebInspector.HeapSnapshotCommon.SerializedTraceTop>}
+     */
     serializeTraceTops: function()
     {
         if (this._traceTops)
@@ -136,6 +139,10 @@
         return result;
     },
 
+    /**
+     * @param {string} nodeId
+     * @return {!WebInspector.HeapSnapshotCommon.AllocationNodeCallers}
+     */
     serializeCallers: function(nodeId)
     {
         var node = this._idToNode[nodeId];
@@ -157,10 +164,10 @@
         for (var i = 0; i < callers.length; i++) {
             branchingCallers.push(this._serializeCaller(callers[i]));
         }
-        return {
+        return /** @type {!WebInspector.HeapSnapshotCommon.AllocationNodeCallers} */ ({
             nodesWithSingleCaller: nodesWithSingleCaller,
             branchingCallers: branchingCallers
-        };
+        });
     },
 
     _serializeCaller: function(node)
@@ -241,11 +248,17 @@
         return result;
     },
 
+    /**
+     * @return {!Array.<!WebInspector.AllocationBackTraceNode>}
+     */
     callers: function()
     {
         return this._callers;
     },
 
+    /**
+     * @return {boolean}
+     */
     hasCallers: function()
     {
         return this._callers.length > 0;
@@ -278,6 +291,9 @@
         this.totalSize += node.allocationSize;
     },
 
+    /**
+     * @return {?WebInspector.AllocationBackTraceNode}
+     */
     tracesWithThisTop: function()
     {
         if (!this._traceTops.length)
diff --git a/Source/devtools/front_end/AuditCategories.js b/Source/devtools/front_end/AuditCategories.js
index ffd3f63..848a455 100644
--- a/Source/devtools/front_end/AuditCategories.js
+++ b/Source/devtools/front_end/AuditCategories.js
@@ -30,13 +30,13 @@
 
 /**
  * @constructor
- * @extends {WebInspector.AuditCategory}
+ * @extends {WebInspector.AuditCategoryImpl}
  */
 WebInspector.AuditCategories.PagePerformance = function() {
-    WebInspector.AuditCategory.call(this, WebInspector.AuditCategories.PagePerformance.AuditCategoryName);
+    WebInspector.AuditCategoryImpl.call(this, WebInspector.AuditCategories.PagePerformance.AuditCategoryName);
 }
 
-WebInspector.AuditCategories.PagePerformance.AuditCategoryName = "Web Page Performance";
+WebInspector.AuditCategories.PagePerformance.AuditCategoryName = WebInspector.UIString("Web Page Performance");
 
 WebInspector.AuditCategories.PagePerformance.prototype = {
     initialize: function()
@@ -47,18 +47,18 @@
         this.addRule(new WebInspector.AuditRules.VendorPrefixedCSSProperties(), WebInspector.AuditRule.Severity.Warning);
     },
 
-    __proto__: WebInspector.AuditCategory.prototype
+    __proto__: WebInspector.AuditCategoryImpl.prototype
 }
 
 /**
  * @constructor
- * @extends {WebInspector.AuditCategory}
+ * @extends {WebInspector.AuditCategoryImpl}
  */
 WebInspector.AuditCategories.NetworkUtilization = function() {
-    WebInspector.AuditCategory.call(this, WebInspector.AuditCategories.NetworkUtilization.AuditCategoryName);
+    WebInspector.AuditCategoryImpl.call(this, WebInspector.AuditCategories.NetworkUtilization.AuditCategoryName);
 }
 
-WebInspector.AuditCategories.NetworkUtilization.AuditCategoryName = "Network Utilization";
+WebInspector.AuditCategories.NetworkUtilization.AuditCategoryName = WebInspector.UIString("Network Utilization");
 
 WebInspector.AuditCategories.NetworkUtilization.prototype = {
     initialize: function()
@@ -75,5 +75,5 @@
         this.addRule(new WebInspector.AuditRules.ProxyCacheControlRule(), WebInspector.AuditRule.Severity.Warning);
     },
 
-    __proto__: WebInspector.AuditCategory.prototype
+    __proto__: WebInspector.AuditCategoryImpl.prototype
 }
diff --git a/Source/devtools/front_end/LayersPanelDescriptor.js b/Source/devtools/front_end/AuditCategory.js
similarity index 67%
rename from Source/devtools/front_end/LayersPanelDescriptor.js
rename to Source/devtools/front_end/AuditCategory.js
index 95ad832..ee87afe 100644
--- a/Source/devtools/front_end/LayersPanelDescriptor.js
+++ b/Source/devtools/front_end/AuditCategory.js
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012 Google Inc. All rights reserved.
+ * Copyright (C) 2014 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
@@ -27,14 +27,34 @@
  */
 
 /**
- * @constructor
- * @extends {WebInspector.PanelDescriptor}
+ * @interface
  */
-WebInspector.LayersPanelDescriptor = function()
+WebInspector.AuditCategory = function()
 {
-    WebInspector.PanelDescriptor.call(this, "layers", WebInspector.UIString("Layers"), "LayersPanel", "LayersPanel.js");
 }
 
-WebInspector.LayersPanelDescriptor.prototype = {
-    __proto__: WebInspector.PanelDescriptor.prototype
+WebInspector.AuditCategory.prototype = {
+    /**
+     * @return {string}
+     */
+    get id()
+    {
+    },
+
+    /**
+     * @return {string}
+     */
+    get displayName()
+    {
+    },
+
+    /**
+     * @param {!Array.<!WebInspector.NetworkRequest>} requests
+     * @param {function(!WebInspector.AuditRuleResult)} ruleResultCallback
+     * @param {function()} categoryDoneCallback
+     * @param {!WebInspector.Progress} progress
+     */
+    run: function(requests, ruleResultCallback, categoryDoneCallback, progress)
+    {
+    }
 }
diff --git a/Source/devtools/front_end/AuditController.js b/Source/devtools/front_end/AuditController.js
index b38d749..5e8c3d9 100644
--- a/Source/devtools/front_end/AuditController.js
+++ b/Source/devtools/front_end/AuditController.js
@@ -48,6 +48,11 @@
     {
         this._progress.setTitle(WebInspector.UIString("Running audit"));
 
+        /**
+         * @param {!WebInspector.AuditCategoryResult} categoryResult
+         * @param {!WebInspector.AuditRuleResult} ruleResult
+         * @this {WebInspector.AuditController}
+         */
         function ruleResultReadyCallback(categoryResult, ruleResult)
         {
             if (ruleResult && ruleResult.children)
@@ -60,6 +65,10 @@
         var results = [];
         var mainResourceURL = WebInspector.inspectedPageURL;
         var categoriesDone = 0;
+
+        /**
+         * @this {WebInspector.AuditController}
+         */
         function categoryDoneCallback()
         {
             if (++categoriesDone !== categories.length)
@@ -111,6 +120,9 @@
         for (var i = 0; i < categoryIds.length; ++i)
             categories.push(this._auditsPanel.categoriesById[categoryIds[i]]);
 
+        /**
+         * @this {WebInspector.AuditController}
+         */
         function startAuditWhenResourcesReady()
         {
             startedCallback();
diff --git a/Source/devtools/front_end/AuditFormatters.js b/Source/devtools/front_end/AuditFormatters.js
index 5bea55f..e24ccce 100644
--- a/Source/devtools/front_end/AuditFormatters.js
+++ b/Source/devtools/front_end/AuditFormatters.js
@@ -36,11 +36,20 @@
 }
 
 WebInspector.AuditFormatters.Registry = {
+
+    /**
+     * @param {string} text
+     * @return {!Text}
+     */
     text: function(text)
     {
         return document.createTextNode(text);
     },
 
+    /**
+     * @param {string} snippetText
+     * @return {!Element}
+     */
     snippet: function(snippetText)
     {
         var div = document.createElement("div");
@@ -49,6 +58,9 @@
         return div;
     },
 
+    /**
+     * @return {!Element}
+     */
     concat: function()
     {
         var parent = document.createElement("span");
@@ -57,6 +69,12 @@
         return parent;
     },
 
+    /**
+     * @param {string} url
+     * @param {string=} displayText
+     * @param {boolean=} allowExternalNavigation
+     * @return {!Element}
+     */
     url: function(url, displayText, allowExternalNavigation)
     {
         var a = document.createElement("a");
@@ -68,6 +86,11 @@
         return a;
     },
 
+    /**
+     * @param {string} url
+     * @param {number=} line
+     * @return {!Element}
+     */
     resourceLink: function(url, line)
     {
         // FIXME: use WebInspector.Linkifier
@@ -78,6 +101,7 @@
 WebInspector.AuditFormatters.prototype = {
     /**
      * @param {string|boolean|number|!Object} value
+     * @return {!Node}
      */
     apply: function(value)
     {
@@ -114,6 +138,7 @@
      * @param {!Object} formatters
      * @param {?Object} thisArgument
      * @param {string|boolean|number|!Object} value
+     * @return {*}
      */
     partiallyApply: function(formatters, thisArgument, value)
     {
diff --git a/Source/devtools/front_end/AuditLauncherView.js b/Source/devtools/front_end/AuditLauncherView.js
index de57f57..10eaac3 100644
--- a/Source/devtools/front_end/AuditLauncherView.js
+++ b/Source/devtools/front_end/AuditLauncherView.js
@@ -158,6 +158,9 @@
         this._buttonContainerElement.appendChild(this._progressIndicator.element);
         this._displayResourceLoadingProgress = true;
 
+        /**
+         * @this {WebInspector.AuditLauncherView}
+         */
         function onAuditStarted()
         {
             this._displayResourceLoadingProgress = false;
@@ -244,6 +247,10 @@
 
         this._contentElement.appendChild(this._headerElement);
 
+        /**
+         * @param {?Event} event
+         * @this {WebInspector.AuditLauncherView}
+         */
         function handleSelectAllClick(event)
         {
             this._selectAllClicked(event.target.checked, true);
diff --git a/Source/devtools/front_end/AuditResultView.js b/Source/devtools/front_end/AuditResultView.js
index f3eeadb..ea30f3f 100644
--- a/Source/devtools/front_end/AuditResultView.js
+++ b/Source/devtools/front_end/AuditResultView.js
@@ -36,7 +36,7 @@
 WebInspector.AuditResultView = function(categoryResults)
 {
     WebInspector.SidebarPaneStack.call(this);
-    this.element.classList.add("audit-result-view");
+    this.element.classList.add("audit-result-view", "fill");
 
     function categorySorter(a, b) {
         return (a.title || "").localeCompare(b.title || "");
diff --git a/Source/devtools/front_end/AuditRules.js b/Source/devtools/front_end/AuditRules.js
index 433ad2a..3f2cd0b 100644
--- a/Source/devtools/front_end/AuditRules.js
+++ b/Source/devtools/front_end/AuditRules.js
@@ -75,7 +75,7 @@
  */
 WebInspector.AuditRules.GzipRule = function()
 {
-    WebInspector.AuditRule.call(this, "network-gzip", "Enable gzip compression");
+    WebInspector.AuditRule.call(this, "network-gzip", WebInspector.UIString("Enable gzip compression"));
 }
 
 WebInspector.AuditRules.GzipRule.prototype = {
@@ -108,9 +108,11 @@
                 result.violationCount++;
             }
         }
-        if (!totalSavings)
-            return callback(null);
-        summary.value = String.sprintf("Compressing the following resources with gzip could reduce their transfer size by about two thirds (~%s):", Number.bytesToString(totalSavings));
+        if (!totalSavings) {
+            callback(null);
+            return;
+        }
+        summary.value = WebInspector.UIString("Compressing the following resources with gzip could reduce their transfer size by about two thirds (~%s):", Number.bytesToString(totalSavings));
         callback(result);
     },
 
@@ -162,13 +164,15 @@
             if (extraResourceCount <= 0)
                 continue;
             penalizedResourceCount += extraResourceCount - 1;
-            summary.addChild(String.sprintf("%d %s resources served from %s.", domainResources.length, this._resourceTypeName, WebInspector.AuditRuleResult.resourceDomain(domain)));
+            summary.addChild(WebInspector.UIString("%d %s resources served from %s.", domainResources.length, this._resourceTypeName, WebInspector.AuditRuleResult.resourceDomain(domain)));
             result.violationCount += domainResources.length;
         }
-        if (!penalizedResourceCount)
-            return callback(null);
+        if (!penalizedResourceCount) {
+            callback(null);
+            return;
+        }
 
-        summary.value = "There are multiple resources served from same domain. Consider combining them into as few files as possible.";
+        summary.value = WebInspector.UIString("There are multiple resources served from same domain. Consider combining them into as few files as possible.");
         callback(result);
     },
 
@@ -180,7 +184,7 @@
  * @extends {WebInspector.AuditRules.CombineExternalResourcesRule}
  */
 WebInspector.AuditRules.CombineJsResourcesRule = function(allowedPerDomain) {
-    WebInspector.AuditRules.CombineExternalResourcesRule.call(this, "page-externaljs", "Combine external JavaScript", WebInspector.resourceTypes.Script, "JavaScript", allowedPerDomain);
+    WebInspector.AuditRules.CombineExternalResourcesRule.call(this, "page-externaljs", WebInspector.UIString("Combine external JavaScript"), WebInspector.resourceTypes.Script, "JavaScript", allowedPerDomain);
 }
 
 WebInspector.AuditRules.CombineJsResourcesRule.prototype = {
@@ -192,7 +196,7 @@
  * @extends {WebInspector.AuditRules.CombineExternalResourcesRule}
  */
 WebInspector.AuditRules.CombineCssResourcesRule = function(allowedPerDomain) {
-    WebInspector.AuditRules.CombineExternalResourcesRule.call(this, "page-externalcss", "Combine external CSS", WebInspector.resourceTypes.Stylesheet, "CSS", allowedPerDomain);
+    WebInspector.AuditRules.CombineExternalResourcesRule.call(this, "page-externalcss", WebInspector.UIString("Combine external CSS"), WebInspector.resourceTypes.Stylesheet, "CSS", allowedPerDomain);
 }
 
 WebInspector.AuditRules.CombineCssResourcesRule.prototype = {
@@ -204,7 +208,7 @@
  * @extends {WebInspector.AuditRule}
  */
 WebInspector.AuditRules.MinimizeDnsLookupsRule = function(hostCountThreshold) {
-    WebInspector.AuditRule.call(this, "network-minimizelookups", "Minimize DNS lookups");
+    WebInspector.AuditRule.call(this, "network-minimizelookups", WebInspector.UIString("Minimize DNS lookups"));
     this._hostCountThreshold = hostCountThreshold;
 }
 
@@ -230,10 +234,12 @@
             summary.addSnippet(domain);
             result.violationCount++;
         }
-        if (!summary.children || summary.children.length <= this._hostCountThreshold)
-            return callback(null);
+        if (!summary.children || summary.children.length <= this._hostCountThreshold) {
+            callback(null);
+            return;
+        }
 
-        summary.value = "The following domains only serve one resource each. If possible, avoid the extra DNS lookups by serving these resources from existing domains.";
+        summary.value = WebInspector.UIString("The following domains only serve one resource each. If possible, avoid the extra DNS lookups by serving these resources from existing domains.");
         callback(result);
     },
 
@@ -246,7 +252,7 @@
  */
 WebInspector.AuditRules.ParallelizeDownloadRule = function(optimalHostnameCount, minRequestThreshold, minBalanceThreshold)
 {
-    WebInspector.AuditRule.call(this, "network-parallelizehosts", "Parallelize downloads across hostnames");
+    WebInspector.AuditRule.call(this, "network-parallelizehosts", WebInspector.UIString("Parallelize downloads across hostnames"));
     this._optimalHostnameCount = optimalHostnameCount;
     this._minRequestThreshold = minRequestThreshold;
     this._minBalanceThreshold = minBalanceThreshold;
@@ -277,8 +283,10 @@
         for (var url in domainToResourcesMap)
             hosts.push(url);
 
-        if (!hosts.length)
-            return callback(null); // no hosts (local file or something)
+        if (!hosts.length) {
+            callback(null); // no hosts (local file or something)
+            return;
+        }
 
         hosts.sort(hostSorter);
 
@@ -288,8 +296,10 @@
 
         var busiestHostResourceCount = domainToResourcesMap[hosts[0]].length;
         var requestCountAboveThreshold = busiestHostResourceCount - this._minRequestThreshold;
-        if (requestCountAboveThreshold <= 0)
-            return callback(null);
+        if (requestCountAboveThreshold <= 0) {
+            callback(null);
+            return;
+        }
 
         var avgResourcesPerHost = 0;
         for (var i = 0, size = hosts.length; i < size; ++i)
@@ -301,11 +311,13 @@
 
         var pctAboveAvg = (requestCountAboveThreshold / avgResourcesPerHost) - 1.0;
         var minBalanceThreshold = this._minBalanceThreshold;
-        if (pctAboveAvg < minBalanceThreshold)
-            return callback(null);
+        if (pctAboveAvg < minBalanceThreshold) {
+            callback(null);
+            return;
+        }
 
         var requestsOnBusiestHost = domainToResourcesMap[hosts[0]];
-        var entry = result.addChild(String.sprintf("This page makes %d parallelizable requests to %s. Increase download parallelization by distributing the following requests across multiple hostnames.", busiestHostResourceCount, hosts[0]), true);
+        var entry = result.addChild(WebInspector.UIString("This page makes %d parallelizable requests to %s. Increase download parallelization by distributing the following requests across multiple hostnames.", busiestHostResourceCount, hosts[0]), true);
         for (var i = 0; i < requestsOnBusiestHost.length; ++i)
             entry.addURL(requestsOnBusiestHost[i].url);
 
@@ -324,7 +336,7 @@
  */
 WebInspector.AuditRules.UnusedCssRule = function()
 {
-    WebInspector.AuditRule.call(this, "page-unusedcss", "Remove unused CSS rules");
+    WebInspector.AuditRule.call(this, "page-unusedcss", WebInspector.UIString("Remove unused CSS rules"));
 }
 
 WebInspector.AuditRules.UnusedCssRule.prototype = {
@@ -393,7 +405,7 @@
 
                     var resource = WebInspector.resourceForURL(styleSheet.sourceURL);
                     var isInlineBlock = resource && resource.request && resource.request.type == WebInspector.resourceTypes.Document;
-                    var url = !isInlineBlock ? WebInspector.AuditRuleResult.linkifyDisplayName(styleSheet.sourceURL) : String.sprintf("Inline block #%d", ++inlineBlockOrdinal);
+                    var url = !isInlineBlock ? WebInspector.AuditRuleResult.linkifyDisplayName(styleSheet.sourceURL) : WebInspector.UIString("Inline block #%d", ++inlineBlockOrdinal);
                     var pctUnused = Math.round(100 * unusedRules.length / styleSheet.rules.length);
                     if (!summary)
                         summary = result.addChild("", true);
@@ -409,7 +421,7 @@
                     return callback(null);
 
                 var totalUnusedPercent = Math.round(100 * totalUnusedStylesheetSize / totalStylesheetSize);
-                summary.value = String.sprintf("%s rules (%d%) of CSS not used by the current page.", totalUnusedStylesheetSize, totalUnusedPercent);
+                summary.value = WebInspector.UIString("%s rules (%d%) of CSS not used by the current page.", totalUnusedStylesheetSize, totalUnusedPercent);
 
                 callback(result);
             }
@@ -467,25 +479,16 @@
                 continuation(styleSheets);
         }
 
-        /**
-         * @param {?Protocol.Error} error
-         * @param {!Array.<!CSSAgent.CSSStyleSheetHeader>} styleSheetInfos
-         */
-        function allStylesCallback(error, styleSheetInfos)
-        {
-            if (progress.isCanceled())
-                return;
-
-            if (error || !styleSheetInfos || !styleSheetInfos.length)
-                return evalCallback([]);
-            var styleSheets = [];
-            for (var i = 0; i < styleSheetInfos.length; ++i) {
-                var info = styleSheetInfos[i];
-                WebInspector.CSSStyleSheet.createForId(info.styleSheetId, styleSheetCallback.bind(null, styleSheets, info.sourceURL, i == styleSheetInfos.length - 1 ? evalCallback : null));
-            }
+        var styleSheetInfos = WebInspector.cssModel.allStyleSheets();
+        if (!styleSheetInfos || !styleSheetInfos.length) {
+            evalCallback([]);
+            return;
         }
-
-        CSSAgent.getAllStyleSheets(allStylesCallback);
+        var styleSheets = [];
+        for (var i = 0; i < styleSheetInfos.length; ++i) {
+            var info = styleSheetInfos[i];
+            WebInspector.CSSStyleSheet.createForId(info.id, styleSheetCallback.bind(null, styleSheets, info.sourceURL, i == styleSheetInfos.length - 1 ? evalCallback : null));
+        }
     },
 
     __proto__: WebInspector.AuditRule.prototype
@@ -553,6 +556,11 @@
         }
     },
 
+    /**
+     * @param {!WebInspector.NetworkRequest} request
+     * @param {number} timeMs
+     * @return {boolean}
+     */
     freshnessLifetimeGreaterThan: function(request, timeMs)
     {
         var dateHeader = this.responseHeader(request, "Date");
@@ -580,21 +588,39 @@
         return (isNaN(freshnessLifetimeMs)) ? false : freshnessLifetimeMs > timeMs;
     },
 
+    /**
+     * @param {!WebInspector.NetworkRequest} request
+     * @param {string} header
+     * @return {string|undefined}
+     */
     responseHeader: function(request, header)
     {
         return request.responseHeaderValue(header);
     },
 
+    /**
+     * @param {!WebInspector.NetworkRequest} request
+     * @param {string} header
+     * @return {boolean}
+     */
     hasResponseHeader: function(request, header)
     {
         return request.responseHeaderValue(header) !== undefined;
     },
 
+    /**
+     * @param {!WebInspector.NetworkRequest} request
+     * @return {boolean}
+     */
     isCompressible: function(request)
     {
         return request.type.isTextType();
     },
 
+    /**
+     * @param {!WebInspector.NetworkRequest} request
+     * @return {boolean}
+     */
     isPubliclyCacheable: function(request)
     {
         if (this._isExplicitlyNonCacheable(request))
@@ -606,29 +632,47 @@
         return request.url.indexOf("?") == -1 && !this.responseHeaderMatch(request, "Cache-Control", "private");
     },
 
+    /**
+     * @param {!WebInspector.NetworkRequest} request
+     * @param {string} header
+     * @param {string} regexp
+     * @return {?Array.<string>}
+     */
     responseHeaderMatch: function(request, header, regexp)
     {
         return request.responseHeaderValue(header)
             ? request.responseHeaderValue(header).match(new RegExp(regexp, "im"))
-            : undefined;
+            : null;
     },
 
+    /**
+     * @param {!WebInspector.NetworkRequest} request
+     * @return {boolean}
+     */
     hasExplicitExpiration: function(request)
     {
         return this.hasResponseHeader(request, "Date") &&
-            (this.hasResponseHeader(request, "Expires") || this.responseHeaderMatch(request, "Cache-Control", "max-age"));
+            (this.hasResponseHeader(request, "Expires") || !!this.responseHeaderMatch(request, "Cache-Control", "max-age"));
     },
 
+    /**
+     * @param {!WebInspector.NetworkRequest} request
+     * @return {boolean}
+     */
     _isExplicitlyNonCacheable: function(request)
     {
         var hasExplicitExp = this.hasExplicitExpiration(request);
-        return this.responseHeaderMatch(request, "Cache-Control", "(no-cache|no-store|must-revalidate)") ||
-            this.responseHeaderMatch(request, "Pragma", "no-cache") ||
+        return !!this.responseHeaderMatch(request, "Cache-Control", "(no-cache|no-store|must-revalidate)") ||
+            !!this.responseHeaderMatch(request, "Pragma", "no-cache") ||
             (hasExplicitExp && !this.freshnessLifetimeGreaterThan(request, 0)) ||
-            (!hasExplicitExp && request.url && request.url.indexOf("?") >= 0) ||
+            (!hasExplicitExp && !!request.url && request.url.indexOf("?") >= 0) ||
             (!hasExplicitExp && !this.isCacheableResource(request));
     },
 
+    /**
+     * @param {!WebInspector.NetworkRequest} request
+     * @return {boolean}
+     */
     isCacheableResource: function(request)
     {
         return request.statusCode !== undefined && WebInspector.AuditRules.CacheableResponseCodes[request.statusCode];
@@ -643,14 +687,14 @@
  */
 WebInspector.AuditRules.BrowserCacheControlRule = function()
 {
-    WebInspector.AuditRules.CacheControlRule.call(this, "http-browsercache", "Leverage browser caching");
+    WebInspector.AuditRules.CacheControlRule.call(this, "http-browsercache", WebInspector.UIString("Leverage browser caching"));
 }
 
 WebInspector.AuditRules.BrowserCacheControlRule.prototype = {
     handleNonCacheableResources: function(requests, result)
     {
         if (requests.length) {
-            var entry = result.addChild("The following resources are explicitly non-cacheable. Consider making them cacheable if possible:", true);
+            var entry = result.addChild(WebInspector.UIString("The following resources are explicitly non-cacheable. Consider making them cacheable if possible:"), true);
             result.violationCount += requests.length;
             for (var i = 0; i < requests.length; ++i)
                 entry.addURL(requests[i].url);
@@ -659,15 +703,15 @@
 
     runChecks: function(requests, result, callback)
     {
-        this.execCheck("The following resources are missing a cache expiration. Resources that do not specify an expiration may not be cached by browsers:",
+        this.execCheck(WebInspector.UIString("The following resources are missing a cache expiration. Resources that do not specify an expiration may not be cached by browsers:"),
             this._missingExpirationCheck, requests, result);
-        this.execCheck("The following resources specify a \"Vary\" header that disables caching in most versions of Internet Explorer:",
+        this.execCheck(WebInspector.UIString("The following resources specify a \"Vary\" header that disables caching in most versions of Internet Explorer:"),
             this._varyCheck, requests, result);
-        this.execCheck("The following cacheable resources have a short freshness lifetime:",
+        this.execCheck(WebInspector.UIString("The following cacheable resources have a short freshness lifetime:"),
             this._oneMonthExpirationCheck, requests, result);
 
         // Unable to implement the favicon check due to the WebKit limitations.
-        this.execCheck("To further improve cache hit rate, specify an expiration one year in the future for the following cacheable resources:",
+        this.execCheck(WebInspector.UIString("To further improve cache hit rate, specify an expiration one year in the future for the following cacheable resources:"),
             this._oneYearExpirationCheck, requests, result);
     },
 
@@ -711,17 +755,17 @@
  * @extends {WebInspector.AuditRules.CacheControlRule}
  */
 WebInspector.AuditRules.ProxyCacheControlRule = function() {
-    WebInspector.AuditRules.CacheControlRule.call(this, "http-proxycache", "Leverage proxy caching");
+    WebInspector.AuditRules.CacheControlRule.call(this, "http-proxycache", WebInspector.UIString("Leverage proxy caching"));
 }
 
 WebInspector.AuditRules.ProxyCacheControlRule.prototype = {
     runChecks: function(requests, result, callback)
     {
-        this.execCheck("Resources with a \"?\" in the URL are not cached by most proxy caching servers:",
+        this.execCheck(WebInspector.UIString("Resources with a \"?\" in the URL are not cached by most proxy caching servers:"),
             this._questionMarkCheck, requests, result);
-        this.execCheck("Consider adding a \"Cache-Control: public\" header to the following resources:",
+        this.execCheck(WebInspector.UIString("Consider adding a \"Cache-Control: public\" header to the following resources:"),
             this._publicCachingCheck, requests, result);
-        this.execCheck("The following publicly cacheable resources contain a Set-Cookie header. This security vulnerability can cause cookies to be shared by multiple users.",
+        this.execCheck(WebInspector.UIString("The following publicly cacheable resources contain a Set-Cookie header. This security vulnerability can cause cookies to be shared by multiple users."),
             this._setCookieCacheableCheck, requests, result);
     },
 
@@ -752,7 +796,7 @@
  */
 WebInspector.AuditRules.ImageDimensionsRule = function()
 {
-    WebInspector.AuditRule.call(this, "page-imagedims", "Specify image dimensions");
+    WebInspector.AuditRule.call(this, "page-imagedims", WebInspector.UIString("Specify image dimensions"));
 }
 
 WebInspector.AuditRules.ImageDimensionsRule.prototype = {
@@ -769,7 +813,7 @@
         function doneCallback()
         {
             for (var url in urlToNoDimensionCount) {
-                var entry = entry || result.addChild("A width and height should be specified for all images in order to speed up page display. The following image(s) are missing a width and/or height:", true);
+                var entry = entry || result.addChild(WebInspector.UIString("A width and height should be specified for all images in order to speed up page display. The following image(s) are missing a width and/or height:"), true);
                 var format = "%r";
                 if (urlToNoDimensionCount[url] > 1)
                     format += " (%d uses)";
@@ -887,7 +931,7 @@
  */
 WebInspector.AuditRules.CssInHeadRule = function()
 {
-    WebInspector.AuditRule.call(this, "page-cssinhead", "Put CSS in the document head");
+    WebInspector.AuditRule.call(this, "page-cssinhead", WebInspector.UIString("Put CSS in the document head"));
 }
 
 WebInspector.AuditRules.CssInHeadRule.prototype = {
@@ -920,7 +964,7 @@
                     result.addFormatted("Link node %r should be moved to the document head in %r", urlViolations[1][i], url);
                 result.violationCount += urlViolations[1].length;
             }
-            summary.value = String.sprintf("CSS in the document body adversely impacts rendering performance.");
+            summary.value = WebInspector.UIString("CSS in the document body adversely impacts rendering performance.");
             callback(result);
         }
 
@@ -983,7 +1027,7 @@
  */
 WebInspector.AuditRules.StylesScriptsOrderRule = function()
 {
-    WebInspector.AuditRule.call(this, "page-stylescriptorder", "Optimize the order of styles and scripts");
+    WebInspector.AuditRule.call(this, "page-stylescriptorder", WebInspector.UIString("Optimize the order of styles and scripts"));
 }
 
 WebInspector.AuditRules.StylesScriptsOrderRule.prototype = {
@@ -1007,13 +1051,13 @@
             var cssBeforeInlineCount = resultValue[1];
 
             if (lateCssUrls.length) {
-                var entry = result.addChild("The following external CSS files were included after an external JavaScript file in the document head. To ensure CSS files are downloaded in parallel, always include external CSS before external JavaScript.", true);
+                var entry = result.addChild(WebInspector.UIString("The following external CSS files were included after an external JavaScript file in the document head. To ensure CSS files are downloaded in parallel, always include external CSS before external JavaScript."), true);
                 entry.addURLs(lateCssUrls);
                 result.violationCount += lateCssUrls.length;
             }
 
             if (cssBeforeInlineCount) {
-                result.addChild(String.sprintf(" %d inline script block%s found in the head between an external CSS file and another resource. To allow parallel downloading, move the inline script before the external CSS file, or after the next resource.", cssBeforeInlineCount, cssBeforeInlineCount > 1 ? "s were" : " was"));
+                result.addChild(WebInspector.UIString(" %d inline script block%s found in the head between an external CSS file and another resource. To allow parallel downloading, move the inline script before the external CSS file, or after the next resource.", cssBeforeInlineCount, cssBeforeInlineCount > 1 ? "s were" : " was"));
                 result.violationCount += cssBeforeInlineCount;
             }
             callback(result);
@@ -1096,22 +1140,18 @@
      */
     doRun: function(requests, result, callback, progress)
     {
-        CSSAgent.getAllStyleSheets(sheetsCallback.bind(this));
+        var headers = WebInspector.cssModel.allStyleSheets();
 
-        function sheetsCallback(error, headers)
-        {
-            if (error)
-                return callback(null);
+        if (!headers.length) {
+            callback(null);
+            return;
+        }
+        for (var i = 0; i < headers.length; ++i) {
+            var header = headers[i];
+            if (header.disabled)
+                continue; // Do not check disabled stylesheets.
 
-            if (!headers.length)
-                return callback(null);
-            for (var i = 0; i < headers.length; ++i) {
-                var header = headers[i];
-                if (header.disabled)
-                    continue; // Do not check disabled stylesheets.
-
-                this._visitStyleSheet(header.styleSheetId, i === headers.length - 1 ? finishedCallback : null, result, progress);
-            }
+            this._visitStyleSheet(header.id, i === headers.length - 1 ? finishedCallback : null, result, progress);
         }
 
         function finishedCallback()
@@ -1124,6 +1164,10 @@
     {
         WebInspector.CSSStyleSheet.createForId(styleSheetId, sheetCallback.bind(this));
 
+        /**
+         * @param {?WebInspector.CSSStyleSheet} styleSheet
+         * @this {WebInspector.AuditRules.CSSRuleBase}
+         */
         function sheetCallback(styleSheet)
         {
             if (progress.isCanceled())
@@ -1190,7 +1234,7 @@
  */
 WebInspector.AuditRules.VendorPrefixedCSSProperties = function()
 {
-    WebInspector.AuditRules.CSSRuleBase.call(this, "page-vendorprefixedcss", "Use normal CSS property names instead of vendor-prefixed ones");
+    WebInspector.AuditRules.CSSRuleBase.call(this, "page-vendorprefixedcss", WebInspector.UIString("Use normal CSS property names instead of vendor-prefixed ones"));
     this._webkitPrefix = "-webkit-";
 }
 
@@ -1232,15 +1276,14 @@
             var rule = style.parentRule;
             this._mentionedProperties[normalPropertyName] = true;
             if (!this._styleSheetResult)
-                this._styleSheetResult = result.addChild(rule.sourceURL ? WebInspector.linkifyResourceAsNode(rule.sourceURL) : "<unknown>");
+                this._styleSheetResult = result.addChild(rule.sourceURL ? WebInspector.linkifyResourceAsNode(rule.sourceURL) : WebInspector.UIString("<unknown>"));
             if (!this._ruleResult) {
                 var anchor = WebInspector.linkifyURLAsNode(rule.sourceURL, rule.selectorText);
-                anchor.preferredPanel = "resources";
                 anchor.lineNumber = rule.lineNumberInSource();
                 this._ruleResult = this._styleSheetResult.addChild(anchor);
             }
             ++result.violationCount;
-            this._ruleResult.addSnippet(String.sprintf("\"" + this._webkitPrefix + "%s\" is used, but \"%s\" is supported.", normalPropertyName, normalPropertyName));
+            this._ruleResult.addSnippet(WebInspector.UIString("\"%s%s\" is used, but \"%s\" is supported.", this._webkitPrefix, normalPropertyName, normalPropertyName));
         }
     },
 
@@ -1306,7 +1349,7 @@
  */
 WebInspector.AuditRules.CookieSizeRule = function(avgBytesThreshold)
 {
-    WebInspector.AuditRules.CookieRuleBase.call(this, "http-cookiesize", "Minimize cookie size");
+    WebInspector.AuditRules.CookieRuleBase.call(this, "http-cookiesize", WebInspector.UIString("Minimize cookie size"));
     this._avgBytesThreshold = avgBytesThreshold;
     this._maxBytesThreshold = 1000;
 }
@@ -1390,17 +1433,17 @@
             if (avgCookieSize > this._avgBytesThreshold && avgCookieSize < this._maxBytesThreshold)
                 bigAvgCookieDomains.push(WebInspector.AuditRuleResult.resourceDomain(domain) + ": " + Number.bytesToString(avgCookieSize));
         }
-        result.addChild(String.sprintf("The average cookie size for all requests on this page is %s", Number.bytesToString(avgAllCookiesSize)));
+        result.addChild(WebInspector.UIString("The average cookie size for all requests on this page is %s", Number.bytesToString(avgAllCookiesSize)));
 
         var message;
         if (hugeCookieDomains.length) {
-            var entry = result.addChild("The following domains have a cookie size in excess of 1KB. This is harmful because requests with cookies larger than 1KB typically cannot fit into a single network packet.", true);
+            var entry = result.addChild(WebInspector.UIString("The following domains have a cookie size in excess of 1KB. This is harmful because requests with cookies larger than 1KB typically cannot fit into a single network packet."), true);
             entry.addURLs(hugeCookieDomains);
             result.violationCount += hugeCookieDomains.length;
         }
 
         if (bigAvgCookieDomains.length) {
-            var entry = result.addChild(String.sprintf("The following domains have an average cookie size in excess of %d bytes. Reducing the size of cookies for these domains can reduce the time it takes to send requests.", this._avgBytesThreshold), true);
+            var entry = result.addChild(WebInspector.UIString("The following domains have an average cookie size in excess of %d bytes. Reducing the size of cookies for these domains can reduce the time it takes to send requests.", this._avgBytesThreshold), true);
             entry.addURLs(bigAvgCookieDomains);
             result.violationCount += bigAvgCookieDomains.length;
         }
@@ -1415,7 +1458,7 @@
  */
 WebInspector.AuditRules.StaticCookielessRule = function(minResources)
 {
-    WebInspector.AuditRules.CookieRuleBase.call(this, "http-staticcookieless", "Serve static content from a cookieless domain");
+    WebInspector.AuditRules.CookieRuleBase.call(this, "http-staticcookieless", WebInspector.UIString("Serve static content from a cookieless domain"));
     this._minResources = minResources;
 }
 
@@ -1443,7 +1486,7 @@
         if (badUrls.length < this._minResources)
             return;
 
-        var entry = result.addChild(String.sprintf("%s of cookies were sent with the following static resources. Serve these static resources from a domain that does not set cookies:", Number.bytesToString(cookieBytes)), true);
+        var entry = result.addChild(WebInspector.UIString("%s of cookies were sent with the following static resources. Serve these static resources from a domain that does not set cookies:", Number.bytesToString(cookieBytes)), true);
         entry.addURLs(badUrls);
         result.violationCount = badUrls.length;
     },
diff --git a/Source/devtools/front_end/AuditsPanel.js b/Source/devtools/front_end/AuditsPanel.js
index 3a06211..a11c6ff 100644
--- a/Source/devtools/front_end/AuditsPanel.js
+++ b/Source/devtools/front_end/AuditsPanel.js
@@ -30,17 +30,14 @@
 
 /**
  * @constructor
- * @extends {WebInspector.Panel}
+ * @extends {WebInspector.PanelWithSidebarTree}
  */
 WebInspector.AuditsPanel = function()
 {
-    WebInspector.Panel.call(this, "audits");
+    WebInspector.PanelWithSidebarTree.call(this, "audits");
     this.registerRequiredCSS("panelEnablerView.css");
     this.registerRequiredCSS("auditsPanel.css");
 
-    this.createSidebarViewWithTree();
-    this.splitView.mainElement.classList.add("vbox");
-
     this.auditsTreeElement = new WebInspector.SidebarSectionTreeElement("", {}, true);
     this.sidebarTree.appendChild(this.auditsTreeElement);
     this.auditsTreeElement.listItemElement.classList.add("hidden");
@@ -52,8 +49,6 @@
     this.sidebarTree.appendChild(this.auditResultsTreeElement);
     this.auditResultsTreeElement.expand();
 
-    this.viewsContainerElement = this.splitView.mainElement;
-
     this._constructCategories();
 
     this._auditController = new WebInspector.AuditController(this);
@@ -157,7 +152,7 @@
         this._visibleView = x;
 
         if (x)
-            x.show(this.viewsContainerElement);
+            x.show(this.mainElement());
     },
 
     wasShown: function()
@@ -173,21 +168,23 @@
         this.auditResultsTreeElement.removeChildren();
     },
 
-    __proto__: WebInspector.Panel.prototype
+    __proto__: WebInspector.PanelWithSidebarTree.prototype
 }
 
 /**
  * @constructor
+ * @implements {WebInspector.AuditCategory}
  * @param {string} displayName
  */
-WebInspector.AuditCategory = function(displayName)
+WebInspector.AuditCategoryImpl = function(displayName)
 {
     this._displayName = displayName;
     this._rules = [];
 }
 
-WebInspector.AuditCategory.prototype = {
+WebInspector.AuditCategoryImpl.prototype = {
     /**
+     * @override
      * @return {string}
      */
     get id()
@@ -197,6 +194,7 @@
     },
 
     /**
+     * @override
      * @return {string}
      */
     get displayName()
@@ -215,6 +213,7 @@
     },
 
     /**
+     * @override
      * @param {!Array.<!WebInspector.NetworkRequest>} requests
      * @param {function(!WebInspector.AuditRuleResult)} ruleResultCallback
      * @param {function()} categoryDoneCallback
@@ -333,7 +332,7 @@
 
 WebInspector.AuditCategoryResult.prototype = {
     /**
-     * @param {!WebInspector.AuditCategoryResult} ruleResult
+     * @param {!WebInspector.AuditRuleResult} ruleResult
      */
     addRuleResult: function(ruleResult)
     {
@@ -516,6 +515,7 @@
  */
 WebInspector.AuditCategories = {};
 
+importScript("AuditCategory.js");
 importScript("AuditCategories.js");
 importScript("AuditController.js");
 importScript("AuditFormatters.js");
diff --git a/Source/devtools/front_end/BreakpointManager.js b/Source/devtools/front_end/BreakpointManager.js
index 689dba8..4b2e1d3 100644
--- a/Source/devtools/front_end/BreakpointManager.js
+++ b/Source/devtools/front_end/BreakpointManager.js
@@ -68,13 +68,14 @@
 /**
  * @param {string} sourceFileId
  * @param {number} lineNumber
+ * @param {number} columnNumber
  * @return {string}
  */
-WebInspector.BreakpointManager._breakpointStorageId = function(sourceFileId, lineNumber)
+WebInspector.BreakpointManager._breakpointStorageId = function(sourceFileId, lineNumber, columnNumber)
 {
     if (!sourceFileId)
         return "";
-    return sourceFileId + ":" + lineNumber;
+    return sourceFileId + ":" + lineNumber + ":" + columnNumber;
 }
 
 WebInspector.BreakpointManager.prototype = {
@@ -107,7 +108,7 @@
         var provisionalBreakpoints = this._provisionalBreakpointsForSourceFileId(sourceFileId);
         for (var i = 0; i < breakpointItems.length; ++i) {
             var breakpointItem = breakpointItems[i];
-            var itemStorageId = WebInspector.BreakpointManager._breakpointStorageId(breakpointItem.sourceFileId, breakpointItem.lineNumber);
+            var itemStorageId = WebInspector.BreakpointManager._breakpointStorageId(breakpointItem.sourceFileId, breakpointItem.lineNumber, breakpointItem.columnNumber);
             var provisionalBreakpoint = provisionalBreakpoints.get(itemStorageId);
             if (provisionalBreakpoint) {
                 if (!this._breakpointsForPrimaryUISourceCode.get(uiSourceCode))
@@ -115,7 +116,7 @@
                 this._breakpointsForPrimaryUISourceCode.get(uiSourceCode).push(provisionalBreakpoint);
                 provisionalBreakpoint._updateInDebugger();
             } else {
-                this._innerSetBreakpoint(uiSourceCode, breakpointItem.lineNumber, breakpointItem.condition, breakpointItem.enabled);
+                this._innerSetBreakpoint(uiSourceCode, breakpointItem.lineNumber, breakpointItem.columnNumber, breakpointItem.condition, breakpointItem.enabled);
             }
         }
         this._storage.unmute();
@@ -181,26 +182,28 @@
     /**
      * @param {!WebInspector.UISourceCode} uiSourceCode
      * @param {number} lineNumber
+     * @param {number} columnNumber
      * @param {string} condition
      * @param {boolean} enabled
      * @return {!WebInspector.BreakpointManager.Breakpoint}
      */
-    setBreakpoint: function(uiSourceCode, lineNumber, condition, enabled)
+    setBreakpoint: function(uiSourceCode, lineNumber, columnNumber, condition, enabled)
     {
         this._debuggerModel.setBreakpointsActive(true);
-        return this._innerSetBreakpoint(uiSourceCode, lineNumber, condition, enabled);
+        return this._innerSetBreakpoint(uiSourceCode, lineNumber, columnNumber, condition, enabled);
     },
 
     /**
      * @param {!WebInspector.UISourceCode} uiSourceCode
      * @param {number} lineNumber
+     * @param {number} columnNumber
      * @param {string} condition
      * @param {boolean} enabled
      * @return {!WebInspector.BreakpointManager.Breakpoint}
      */
-    _innerSetBreakpoint: function(uiSourceCode, lineNumber, condition, enabled)
+    _innerSetBreakpoint: function(uiSourceCode, lineNumber, columnNumber, condition, enabled)
     {
-        var breakpoint = this.findBreakpoint(uiSourceCode, lineNumber);
+        var breakpoint = this.findBreakpoint(uiSourceCode, lineNumber, columnNumber);
         if (breakpoint) {
             breakpoint._updateBreakpoint(condition, enabled);
             return breakpoint;
@@ -208,7 +211,7 @@
         var projectId = uiSourceCode.project().id();
         var path = uiSourceCode.path();
         var sourceFileId = WebInspector.BreakpointManager._sourceFileId(uiSourceCode);
-        breakpoint = new WebInspector.BreakpointManager.Breakpoint(this, projectId, path, sourceFileId, lineNumber, condition, enabled);
+        breakpoint = new WebInspector.BreakpointManager.Breakpoint(this, projectId, path, sourceFileId, lineNumber, columnNumber, condition, enabled);
         if (!this._breakpointsForPrimaryUISourceCode.get(uiSourceCode))
             this._breakpointsForPrimaryUISourceCode.put(uiSourceCode, []);
         this._breakpointsForPrimaryUISourceCode.get(uiSourceCode).push(breakpoint);
@@ -218,13 +221,27 @@
     /**
      * @param {!WebInspector.UISourceCode} uiSourceCode
      * @param {number} lineNumber
+     * @param {number} columnNumber
      * @return {?WebInspector.BreakpointManager.Breakpoint}
      */
-    findBreakpoint: function(uiSourceCode, lineNumber)
+    findBreakpoint: function(uiSourceCode, lineNumber, columnNumber)
     {
         var breakpoints = this._breakpointsForUISourceCode.get(uiSourceCode);
-        var lineBreakpoints = breakpoints ? breakpoints[lineNumber] : null;
-        return lineBreakpoints ? lineBreakpoints[0] : null;
+        var lineBreakpoints = breakpoints ? breakpoints.get(String(lineNumber)) : null;
+        var columnBreakpoints = lineBreakpoints ? lineBreakpoints.get(String(columnNumber)) : null;
+        return columnBreakpoints ? columnBreakpoints[0] : null;
+    },
+
+    /**
+     * @param {!WebInspector.UISourceCode} uiSourceCode
+     * @param {number} lineNumber
+     * @return {?WebInspector.BreakpointManager.Breakpoint}
+     */
+    findBreakpointOnLine: function(uiSourceCode, lineNumber)
+    {
+        var breakpoints = this._breakpointsForUISourceCode.get(uiSourceCode);
+        var lineBreakpoints = breakpoints ? breakpoints.get(String(lineNumber)) : null;
+        return lineBreakpoints ? lineBreakpoints.values()[0][0] : null;
     },
 
     /**
@@ -233,11 +250,14 @@
      */
     breakpointsForUISourceCode: function(uiSourceCode)
     {
-        var breakpoints = this._breakpointsForUISourceCode.get(uiSourceCode);
-        var allLineBreakpoints = breakpoints ? Object.values(breakpoints) : [];
         var result = [];
-        for (var i = 0; i < allLineBreakpoints.length; ++i)
-            result = result.concat(allLineBreakpoints[i]);
+        var uiSourceCodeBreakpoints = this._breakpointsForUISourceCode.get(uiSourceCode);
+        var breakpoints = uiSourceCodeBreakpoints ? uiSourceCodeBreakpoints.values() : [];
+        for (var i = 0; i < breakpoints.length; ++i) {
+            var lineBreakpoints = breakpoints[i];
+            var columnBreakpointArrays = lineBreakpoints ? lineBreakpoints.values() : [];
+            result = result.concat.apply(result, columnBreakpointArrays);
+        }
         return result;
     },
 
@@ -255,29 +275,32 @@
 
     /**
      * @param {!WebInspector.UISourceCode} uiSourceCode
-     * @return {!Array.<{breakpoint: !WebInspector.BreakpointManager.Breakpoint, uiLocation: !WebInspector.UILocation}>}
+     * @return {!Array.<!{breakpoint: !WebInspector.BreakpointManager.Breakpoint, uiLocation: !WebInspector.UILocation}>}
      */
     breakpointLocationsForUISourceCode: function(uiSourceCode)
     {
-        var breakpoints = this._breakpointsForUISourceCode.get(uiSourceCode);
-        var breakpointLines = breakpoints ? Object.keys(breakpoints) : [];
+        var uiSourceCodeBreakpoints = this._breakpointsForUISourceCode.get(uiSourceCode);
+        var lineNumbers = uiSourceCodeBreakpoints ? uiSourceCodeBreakpoints.keys() : [];
         var result = [];
-        for (var i = 0; i < breakpointLines.length; ++i) {
-            var lineNumber = parseInt(breakpointLines[i], 10);
-            if (isNaN(lineNumber))
-                continue;
-            var lineBreakpoints = breakpoints[lineNumber];
-            for (var j = 0; j < lineBreakpoints.length; ++j) {
-                var breakpoint = lineBreakpoints[j];
-                var uiLocation = new WebInspector.UILocation(uiSourceCode, lineNumber, 0);
-                result.push({breakpoint: breakpoint, uiLocation: uiLocation});
+        for (var i = 0; i < lineNumbers.length; ++i) {
+            var lineBreakpoints = uiSourceCodeBreakpoints.get(lineNumbers[i]);
+            var columnNumbers = lineBreakpoints.keys();
+            for (var j = 0; j < columnNumbers.length; ++j) {
+                var columnBreakpoints = lineBreakpoints.get(columnNumbers[j]);
+                var lineNumber = parseInt(lineNumbers[i], 10);
+                var columnNumber = parseInt(columnNumbers[j], 10);
+                for (var k = 0; k < columnBreakpoints.length; ++k) {
+                    var breakpoint = columnBreakpoints[k];
+                    var uiLocation = new WebInspector.UILocation(uiSourceCode, lineNumber, columnNumber);
+                    result.push({breakpoint: breakpoint, uiLocation: uiLocation});
+                }
             }
         }
         return result;
     },
 
     /**
-     * @return {!Array.<{breakpoint: !WebInspector.BreakpointManager.Breakpoint, uiLocation: !WebInspector.UILocation}>}
+     * @return {!Array.<!{breakpoint: !WebInspector.BreakpointManager.Breakpoint, uiLocation: !WebInspector.UILocation}>}
      */
     allBreakpointLocations: function()
     {
@@ -353,17 +376,20 @@
     {
         var breakpoints = this._breakpointsForUISourceCode.get(uiLocation.uiSourceCode);
         if (!breakpoints) {
-            breakpoints = {};
+            breakpoints = new StringMap();
             this._breakpointsForUISourceCode.put(uiLocation.uiSourceCode, breakpoints);
         }
-
-        var lineBreakpoints = breakpoints[uiLocation.lineNumber];
+        var lineBreakpoints = breakpoints.get(String(uiLocation.lineNumber));
         if (!lineBreakpoints) {
-            lineBreakpoints = [];
-            breakpoints[uiLocation.lineNumber] = lineBreakpoints;
+            lineBreakpoints = new StringMap();
+            breakpoints.put(String(uiLocation.lineNumber), lineBreakpoints);
         }
-
-        lineBreakpoints.push(breakpoint);
+        var columnBreakpoints = lineBreakpoints.get(String(uiLocation.columnNumber));
+        if (!columnBreakpoints) {
+            columnBreakpoints = [];
+            lineBreakpoints.put(String(uiLocation.columnNumber), columnBreakpoints);
+        }
+        columnBreakpoints.push(breakpoint);
         this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.BreakpointAdded, {breakpoint: breakpoint, uiLocation: uiLocation});
     },
 
@@ -377,14 +403,18 @@
         if (!breakpoints)
             return;
 
-        var lineBreakpoints = breakpoints[uiLocation.lineNumber];
+        var lineBreakpoints = breakpoints.get(String(uiLocation.lineNumber));
         if (!lineBreakpoints)
             return;
-
-        lineBreakpoints.remove(breakpoint);
-        if (!lineBreakpoints.length)
-            delete breakpoints[uiLocation.lineNumber];
-        if (Object.keys(breakpoints).length === 0)
+        var columnBreakpoints = lineBreakpoints.get(String(uiLocation.columnNumber));
+        if (!columnBreakpoints)
+            return;
+        columnBreakpoints.remove(breakpoint);
+        if (!columnBreakpoints.length)
+            lineBreakpoints.remove(String(uiLocation.columnNumber));
+        if (!lineBreakpoints.size())
+            breakpoints.remove(String(uiLocation.lineNumber));
+        if (!breakpoints.size())
             this._breakpointsForUISourceCode.remove(uiLocation.uiSourceCode);
         this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.BreakpointRemoved, {breakpoint: breakpoint, uiLocation: uiLocation});
     },
@@ -399,15 +429,17 @@
  * @param {string} path
  * @param {string} sourceFileId
  * @param {number} lineNumber
+ * @param {number} columnNumber
  * @param {string} condition
  * @param {boolean} enabled
  */
-WebInspector.BreakpointManager.Breakpoint = function(breakpointManager, projectId, path, sourceFileId, lineNumber, condition, enabled)
+WebInspector.BreakpointManager.Breakpoint = function(breakpointManager, projectId, path, sourceFileId, lineNumber, columnNumber, condition, enabled)
 {
     this._breakpointManager = breakpointManager;
     this._projectId = projectId;
     this._path = path;
     this._lineNumber = lineNumber;
+    this._columnNumber = columnNumber;
     this._sourceFileId = sourceFileId;
     /** @type {!Array.<!WebInspector.Script.Location>} */
     this._liveLocations = [];
@@ -446,6 +478,14 @@
     },
 
     /**
+     * @return {number}
+     */
+    columnNumber: function()
+    {
+        return this._columnNumber;
+    },
+
+    /**
      * @return {?WebInspector.UISourceCode}
      */
     uiSourceCode: function()
@@ -555,12 +595,12 @@
         var uiSourceCode = this._breakpointManager._workspace.uiSourceCode(this._projectId, this._path);
         if (!uiSourceCode)
             return;
-        var rawLocation = uiSourceCode.uiLocationToRawLocation(this._lineNumber, 0);
+        var rawLocation = uiSourceCode.uiLocationToRawLocation(this._lineNumber, this._columnNumber);
         var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (rawLocation);
         if (debuggerModelLocation)
             this._breakpointManager._debuggerModel.setBreakpointByScriptLocation(debuggerModelLocation, this._condition, this._didSetBreakpointInDebugger.bind(this));
         else if (uiSourceCode.url)
-            this._breakpointManager._debuggerModel.setBreakpointByURL(uiSourceCode.url, this._lineNumber, 0, this._condition, this._didSetBreakpointInDebugger.bind(this));
+            this._breakpointManager._debuggerModel.setBreakpointByURL(uiSourceCode.url, this._lineNumber, this._columnNumber, this._condition, this._didSetBreakpointInDebugger.bind(this));
     },
 
     /**
@@ -588,7 +628,7 @@
         for (var i = 0; i < locations.length; ++i) {
             var script = this._breakpointManager._debuggerModel.scriptForId(locations[i].scriptId);
             var uiLocation = script.rawLocationToUILocation(locations[i].lineNumber, locations[i].columnNumber);
-            if (this._breakpointManager.findBreakpoint(uiLocation.uiSourceCode, uiLocation.lineNumber)) {
+            if (this._breakpointManager.findBreakpoint(uiLocation.uiSourceCode, uiLocation.lineNumber, uiLocation.columnNumber)) {
                 // location clash
                 this.remove();
                 return;
@@ -612,11 +652,9 @@
     {
         for (var stringifiedLocation in this._uiLocations)
             this._breakpointManager._uiLocationRemoved(this, this._uiLocations[stringifiedLocation]);
-
         for (var i = 0; i < this._liveLocations.length; ++i)
             this._liveLocations[i].dispose();
         this._liveLocations = [];
-
         this._uiLocations = {};
     },
 
@@ -625,7 +663,7 @@
      */
     _breakpointStorageId: function()
     {
-        return WebInspector.BreakpointManager._breakpointStorageId(this._sourceFileId, this._lineNumber);
+        return WebInspector.BreakpointManager._breakpointStorageId(this._sourceFileId, this._lineNumber, this._columnNumber);
     },
 
     _fakeBreakpointAtPrimaryLocation: function()
@@ -634,7 +672,7 @@
         var uiSourceCode = this._breakpointManager._workspace.uiSourceCode(this._projectId, this._path);
         if (!uiSourceCode)
             return;
-        var uiLocation = new WebInspector.UILocation(uiSourceCode, this._lineNumber, 0);
+        var uiLocation = new WebInspector.UILocation(uiSourceCode, this._lineNumber, this._columnNumber);
         this._uiLocations[""] = uiLocation;
         this._breakpointManager._uiLocationAdded(this, uiLocation);
     }
@@ -654,7 +692,8 @@
     this._breakpoints = {};
     for (var i = 0; i < breakpoints.length; ++i) {
         var breakpoint = /** @type {!WebInspector.BreakpointManager.Storage.Item} */ (breakpoints[i]);
-        this._breakpoints[breakpoint.sourceFileId + ":" + breakpoint.lineNumber] = breakpoint;
+        breakpoint.columnNumber = breakpoint.columnNumber || 0;
+        this._breakpoints[breakpoint.sourceFileId + ":" + breakpoint.lineNumber + ":" + breakpoint.columnNumber] = breakpoint;
     }
 }
 
@@ -724,9 +763,10 @@
 {
     this.sourceFileId = breakpoint._sourceFileId;
     this.lineNumber = breakpoint.lineNumber();
+    this.columnNumber = breakpoint.columnNumber();
     this.condition = breakpoint.condition();
     this.enabled = breakpoint.enabled();
 }
 
-/** @type {?WebInspector.BreakpointManager} */
-WebInspector.breakpointManager = null;
+/** @type {!WebInspector.BreakpointManager} */
+WebInspector.breakpointManager;
diff --git a/Source/devtools/front_end/BreakpointsSidebarPane.js b/Source/devtools/front_end/BreakpointsSidebarPane.js
index 5061df0..deee4e7 100644
--- a/Source/devtools/front_end/BreakpointsSidebarPane.js
+++ b/Source/devtools/front_end/BreakpointsSidebarPane.js
@@ -25,12 +25,14 @@
 
 /**
  * @constructor
+ * @param {!WebInspector.DebuggerModel} debuggerModel
  * @param {!WebInspector.BreakpointManager} breakpointManager
  * @extends {WebInspector.SidebarPane}
  */
-WebInspector.JavaScriptBreakpointsSidebarPane = function(breakpointManager, showSourceLineDelegate)
+WebInspector.JavaScriptBreakpointsSidebarPane = function(debuggerModel, breakpointManager, showSourceLineDelegate)
 {
     WebInspector.SidebarPane.call(this, WebInspector.UIString("Breakpoints"));
+    this._debuggerModel = debuggerModel;
     this.registerRequiredCSS("breakpointsList.css");
 
     this._breakpointManager = breakpointManager;
@@ -61,11 +63,11 @@
     _emptyElementContextMenu: function(event)
     {
         var contextMenu = new WebInspector.ContextMenu(event);
-        var breakpointActive = WebInspector.debuggerModel.breakpointsActive();
+        var breakpointActive = this._debuggerModel.breakpointsActive();
         var breakpointActiveTitle = breakpointActive ?
             WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Deactivate breakpoints" : "Deactivate Breakpoints") :
             WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Activate breakpoints" : "Activate Breakpoints");
-        contextMenu.appendItem(breakpointActiveTitle, WebInspector.debuggerModel.setBreakpointsActive.bind(WebInspector.debuggerModel, !breakpointActive));
+        contextMenu.appendItem(breakpointActiveTitle, this._debuggerModel.setBreakpointsActive.bind(this._debuggerModel, !breakpointActive));
         contextMenu.show();
     },
 
@@ -111,10 +113,16 @@
          */
         function didRequestContent(content)
         {
-            var lineEndings = content.lineEndings();
-            if (uiLocation.lineNumber < lineEndings.length)
-                snippetElement.textContent = content.substring(lineEndings[uiLocation.lineNumber - 1], lineEndings[uiLocation.lineNumber]);
+            var lineNumber = uiLocation.lineNumber
+            var columnNumber = uiLocation.columnNumber;
+            var contentString = new String(content);
+            if (lineNumber < contentString.lineCount()) {
+                var lineText = contentString.lineAt(lineNumber);
+                var maxSnippetLength = 200;
+                snippetElement.textContent = lineText.substr(columnNumber).trimEnd(maxSnippetLength);
+            }
         }
+
         uiLocation.uiSourceCode.requestContent(didRequestContent.bind(this));
 
         element._data = uiLocation;
@@ -197,11 +205,11 @@
         }
 
         contextMenu.appendSeparator();
-        var breakpointActive = WebInspector.debuggerModel.breakpointsActive();
+        var breakpointActive = this._debuggerModel.breakpointsActive();
         var breakpointActiveTitle = breakpointActive ?
             WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Deactivate breakpoints" : "Deactivate Breakpoints") :
             WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Activate breakpoints" : "Activate Breakpoints");
-        contextMenu.appendItem(breakpointActiveTitle, WebInspector.debuggerModel.setBreakpointsActive.bind(WebInspector.debuggerModel, !breakpointActive));
+        contextMenu.appendItem(breakpointActiveTitle, this._debuggerModel.setBreakpointsActive.bind(this._debuggerModel, !breakpointActive));
 
         function enabledBreakpointCount(breakpoints)
         {
@@ -318,6 +326,12 @@
         inputElementContainer.appendChild(inputElement);
         this._addListElement(inputElementContainer, this.listElement.firstChild);
 
+        /**
+         * @param {boolean} accept
+         * @param {!Element} e
+         * @param {string} text
+         * @this {WebInspector.XHRBreakpointsSidebarPane}
+         */
         function finishEditing(accept, e, text)
         {
             this._removeListElement(inputElementContainer);
@@ -327,8 +341,8 @@
             }
         }
 
-        var config = new WebInspector.EditingConfig(finishEditing.bind(this, true), finishEditing.bind(this, false));
-        WebInspector.startEditing(inputElement, config);
+        var config = new WebInspector.InplaceEditor.Config(finishEditing.bind(this, true), finishEditing.bind(this, false));
+        WebInspector.InplaceEditor.startEditing(inputElement, config);
     },
 
     _setBreakpoint: function(url, enabled)
@@ -384,11 +398,19 @@
     _contextMenu: function(url, event)
     {
         var contextMenu = new WebInspector.ContextMenu(event);
+
+        /**
+         * @this {WebInspector.XHRBreakpointsSidebarPane}
+         */
         function removeBreakpoint()
         {
             this._removeBreakpoint(url);
             this._saveBreakpoints();
         }
+
+        /**
+         * @this {WebInspector.XHRBreakpointsSidebarPane}
+         */
         function removeAllBreakpoints()
         {
             for (var url in this._breakpointElements)
@@ -421,6 +443,12 @@
         this.listElement.insertBefore(inputElement, element);
         element.classList.add("hidden");
 
+        /**
+         * @param {boolean} accept
+         * @param {!Element} e
+         * @param {string} text
+         * @this {WebInspector.XHRBreakpointsSidebarPane}
+         */
         function finishEditing(accept, e, text)
         {
             this._removeListElement(inputElement);
@@ -432,7 +460,7 @@
                 element.classList.remove("hidden");
         }
 
-        WebInspector.startEditing(inputElement, new WebInspector.EditingConfig(finishEditing.bind(this, true), finishEditing.bind(this, false)));
+        WebInspector.InplaceEditor.startEditing(inputElement, new WebInspector.InplaceEditor.Config(finishEditing.bind(this, true), finishEditing.bind(this, false)));
     },
 
     highlightBreakpoint: function(url)
diff --git a/Source/devtools/front_end/CPUProfileView.js b/Source/devtools/front_end/CPUProfileView.js
index c84bbf5..8e2ab10 100644
--- a/Source/devtools/front_end/CPUProfileView.js
+++ b/Source/devtools/front_end/CPUProfileView.js
@@ -32,8 +32,8 @@
 {
     WebInspector.View.call(this);
 
-    this.element.classList.add("profile-view");
-    
+    this.element.classList.add("cpu-profile-view");
+
     this.showSelfTimeAsPercent = WebInspector.settings.createSetting("cpuProfilerShowSelfTimeAsPercent", true);
     this.showTotalTimeAsPercent = WebInspector.settings.createSetting("cpuProfilerShowTotalTimeAsPercent", true);
     this.showAverageTimeAsPercent = WebInspector.settings.createSetting("cpuProfilerShowAverageTimeAsPercent", true);
@@ -86,14 +86,10 @@
 
     this._linkifier = new WebInspector.Linkifier(new WebInspector.Linkifier.DefaultFormatter(30));
 
-    function didCreateTempFile()
-    {
-        ProfilerAgent.getCPUProfile(this.profile.uid, this._getCPUProfileCallback.bind(this));
-    }
     if (this.profile._profile) // If the profile has been loaded from file then use it.
         this._processProfileData(this.profile._profile);
     else
-        this.profile._createTempFile(didCreateTempFile.bind(this));
+        this._processProfileData(this.profile.protocolProfile());
 }
 
 WebInspector.CPUProfileView._TypeFlame = "Flame";
@@ -124,23 +120,8 @@
     },
 
     /**
-     * @param {?Protocol.Error} error
-     * @param {!ProfilerAgent.CPUProfile} profile
+     * @param {?ProfilerAgent.CPUProfile} profile
      */
-    _getCPUProfileCallback: function(error, profile)
-    {
-        if (error)
-            return;
-
-        if (!profile.head) {
-            // Profiling was tentatively terminated with the "Clear all profiles." button.
-            return;
-        }
-
-        this.profile._saveToTempFile(JSON.stringify(profile));
-        this._processProfileData(profile);
-    },
-
     _processProfileData: function(profile)
     {
         this.profileHead = profile.head;
@@ -168,7 +149,7 @@
     _getBottomUpProfileDataGridTree: function()
     {
         if (!this._bottomUpProfileDataGridTree)
-            this._bottomUpProfileDataGridTree = new WebInspector.BottomUpProfileDataGridTree(this, this.profileHead);
+            this._bottomUpProfileDataGridTree = new WebInspector.BottomUpProfileDataGridTree(this, /** @type {!ProfilerAgent.CPUProfileNode} */ (this.profileHead));
         return this._bottomUpProfileDataGridTree;
     },
 
@@ -178,7 +159,7 @@
     _getTopDownProfileDataGridTree: function()
     {
         if (!this._topDownProfileDataGridTree)
-            this._topDownProfileDataGridTree = new WebInspector.TopDownProfileDataGridTree(this, this.profileHead);
+            this._topDownProfileDataGridTree = new WebInspector.TopDownProfileDataGridTree(this, /** @type {!ProfilerAgent.CPUProfileNode} */ (this.profileHead));
         return this._topDownProfileDataGridTree;
     },
 
@@ -379,16 +360,25 @@
         this._jumpToSearchResult(this._currentSearchResultIndex);
     },
 
+    /**
+     * @return {boolean}
+     */
     showingFirstSearchResult: function()
     {
         return (this._currentSearchResultIndex === 0);
     },
 
+    /**
+     * @return {boolean}
+     */
     showingLastSearchResult: function()
     {
         return (this._searchResults && this._currentSearchResultIndex === (this._searchResults.length - 1));
     },
 
+    /**
+     * @return {number}
+     */
     currentSearchResultIndex: function() {
         return this._currentSearchResultIndex;
     },
@@ -423,10 +413,7 @@
         var script = WebInspector.debuggerModel.scriptForId(node.scriptId)
         if (!script)
             return;
-        var uiLocation = script.rawLocationToUILocation(node.lineNumber);
-        if (!uiLocation)
-            return;
-        WebInspector.panel("sources").showUILocation(uiLocation);
+        WebInspector.Revealer.reveal(script.rawLocationToUILocation(node.lineNumber));
     },
 
     _changeView: function()
@@ -603,17 +590,17 @@
         var head = this.profileHead;
         head.parent = null;
         head.head = null;
-        var nodesToTraverse = [ { parent: head, children: head.children } ];
-        while (nodesToTraverse.length > 0) {
-            var pair = nodesToTraverse.pop();
-            var parent = pair.parent;
-            var children = pair.children;
+        var nodesToTraverse = [ head ];
+        while (nodesToTraverse.length) {
+            var parent = nodesToTraverse.pop();
+            var children = parent.children;
             var length = children.length;
             for (var i = 0; i < length; ++i) {
-                children[i].head = head;
-                children[i].parent = parent;
-                if (children[i].children.length > 0)
-                    nodesToTraverse.push({ parent: children[i], children: children[i].children });
+                var child = children[i];
+                child.head = head;
+                child.parent = parent;
+                if (child.children.length)
+                    nodesToTraverse.push(child);
             }
         }
     },
@@ -632,7 +619,7 @@
         var topLevelNodes = this.profileHead.children;
         for (var i = 0; i < topLevelNodes.length; i++) {
             var node = topLevelNodes[i];
-            if (node.functionName == "(garbage collector)") {
+            if (node.functionName === "(garbage collector)") {
                 this._gcNode = node;
                 break;
             }
@@ -645,14 +632,18 @@
 /**
  * @constructor
  * @extends {WebInspector.ProfileType}
- * @implements {ProfilerAgent.Dispatcher}
+ * @implements {WebInspector.CPUProfilerModel.Delegate}
  */
 WebInspector.CPUProfileType = function()
 {
     WebInspector.ProfileType.call(this, WebInspector.CPUProfileType.TypeId, WebInspector.UIString("Collect JavaScript CPU Profile"));
-    InspectorBackend.registerProfilerDispatcher(this);
     this._recording = false;
+
+    this._nextAnonymousConsoleProfileNumber = 1;
+    this._anonymousConsoleProfileIdToTitle = {};
+
     WebInspector.CPUProfileType.instance = this;
+    WebInspector.cpuProfilerModel.setDelegate(this);
 }
 
 WebInspector.CPUProfileType.TypeId = "CPU";
@@ -698,21 +689,84 @@
     },
 
     /**
-     * @param {!ProfilerAgent.ProfileHeader} profileHeader
+     * @param {string} id
+     * @param {!DebuggerAgent.Location} scriptLocation
+     * @param {string=} title
      */
-    addProfileHeader: function(profileHeader)
+    consoleProfileStarted: function(id, scriptLocation, title)
     {
-        if (this._profileBeingRecorded) {
-            this._profileBeingRecorded.title = profileHeader.title;
-            this._profileBeingRecorded.sidebarElement.mainTitle = profileHeader.title;
-            this._profileBeingRecorded.uid = profileHeader.uid;
-            WebInspector.panels.profiles._showProfile(this._profileBeingRecorded);
-            this._profileBeingRecorded = null;
-            return;
+        var resolvedTitle = title;
+        if (!resolvedTitle) {
+            resolvedTitle = WebInspector.UIString("Profile %s", this._nextAnonymousConsoleProfileNumber++);
+            this._anonymousConsoleProfileIdToTitle[id] = resolvedTitle;
         }
-        this.addProfile(new WebInspector.CPUProfileHeader(this, profileHeader.title, profileHeader.uid));
+        var messageElement = document.createTextNode(WebInspector.UIString("Profile '%s' started.", resolvedTitle));
+        this._addMessageToConsole(WebInspector.ConsoleMessage.MessageType.Profile, scriptLocation, messageElement);
     },
 
+    /**
+     * @param {string} protocolId
+     * @param {!DebuggerAgent.Location} scriptLocation
+     * @param {!ProfilerAgent.CPUProfile} cpuProfile
+     * @param {string=} title
+     */
+    consoleProfileFinished: function(protocolId, scriptLocation, cpuProfile, title)
+    {
+        var resolvedTitle = title;
+        if (typeof title === "undefined") {
+            resolvedTitle = this._anonymousConsoleProfileIdToTitle[protocolId];
+            delete this._anonymousConsoleProfileIdToTitle[protocolId];
+        }
+
+        var profile = new WebInspector.CPUProfileHeader(this, resolvedTitle);
+        profile.setProtocolProfile(cpuProfile);
+        this.addProfile(profile);
+
+        var messageElement = document.createElement("span");
+        messageElement.createTextChild("Profile '");
+        var a = messageElement.createChild("span", "link");
+        a.title = resolvedTitle;
+        a.textContent = resolvedTitle;
+        a.addEventListener("click", onClick.bind(this, profile.uid), true);
+        function onClick(profileUid, event)
+        {
+            var profile = WebInspector.ProfileTypeRegistry.instance.cpuProfileType.getProfile(profileUid);
+            if (profile)
+                WebInspector.showPanel("profiles").showProfile(profile);
+        }
+        messageElement.createTextChild("' finished.");
+
+        this._addMessageToConsole(WebInspector.ConsoleMessage.MessageType.ProfileEnd, scriptLocation, messageElement);
+    },
+
+    /**
+     * @param {string} type
+     * @param {!DebuggerAgent.Location} scriptLocation
+     * @param {!Node} messageElement
+     */
+    _addMessageToConsole: function(type, scriptLocation, messageElement)
+    {
+        var rawLocation = new WebInspector.DebuggerModel.Location(scriptLocation.scriptId, scriptLocation.lineNumber, scriptLocation.columnNumber || 0);
+        var uiLocation = WebInspector.debuggerModel.rawLocationToUILocation(rawLocation);
+        var url;
+        if (uiLocation)
+            url = uiLocation.url();
+        var message = WebInspector.ConsoleMessage.create(
+            WebInspector.ConsoleMessage.MessageSource.ConsoleAPI,
+            WebInspector.ConsoleMessage.MessageLevel.Debug,
+            "",
+            type,
+            url || undefined,
+            scriptLocation.lineNumber,
+            scriptLocation.columnNumber);
+
+        message.setMessageElement(messageElement);
+        WebInspector.console.addMessage(message);
+    },
+
+    /**
+     * @return {boolean}
+     */
     isRecordingProfile: function()
     {
         return this._recording;
@@ -722,10 +776,11 @@
     {
         if (this._profileBeingRecorded)
             return;
-        this._profileBeingRecorded = new WebInspector.CPUProfileHeader(this, WebInspector.UIString("Recording\u2026"));
+        this._profileBeingRecorded = new WebInspector.CPUProfileHeader(this);
         this.addProfile(this._profileBeingRecorded);
-
+        this._profileBeingRecorded.updateStatus(WebInspector.UIString("Recording\u2026"));
         this._recording = true;
+        WebInspector.cpuProfilerModel.setRecording(true);
         WebInspector.userMetrics.ProfilesCPUProfileTaken.record();
         ProfilerAgent.start();
     },
@@ -733,12 +788,29 @@
     stopRecordingProfile: function()
     {
         this._recording = false;
-        ProfilerAgent.stop();
+        WebInspector.cpuProfilerModel.setRecording(false);
+
+        /**
+         * @param {?string} error
+         * @param {?ProfilerAgent.CPUProfile} profile
+         * @this {WebInspector.CPUProfileType}
+         */
+        function didStopProfiling(error, profile)
+        {
+            if (!this._profileBeingRecorded)
+                return;
+            this._profileBeingRecorded.setProtocolProfile(profile);
+            this._profileBeingRecorded.updateStatus("");
+            var recordedProfile = this._profileBeingRecorded;
+            this._profileBeingRecorded = null;
+            WebInspector.panels.profiles.showProfile(recordedProfile);
+        }
+        ProfilerAgent.stop(didStopProfiling.bind(this));
     },
 
     /**
      * @override
-     * @param {!string} title
+     * @param {string} title
      * @return {!WebInspector.ProfileHeader}
      */
     createProfileLoadedFromFile: function(title)
@@ -749,21 +821,9 @@
     /**
      * @override
      */
-    removeProfile: function(profile)
+    profileBeingRecordedRemoved: function()
     {
-        if (this._profileBeingRecorded === profile)
-            this._recording = false;
-        else if (!profile.fromFile())
-            ProfilerAgent.removeProfile(profile.uid);
-        WebInspector.ProfileType.prototype.removeProfile.call(this, profile);
-    },
-
-    /**
-     * @override
-     */
-    resetProfiles: function()
-    {
-        this._reset();
+        this.stopRecordingProfile();
     },
 
     __proto__: WebInspector.ProfileType.prototype
@@ -775,12 +835,11 @@
  * @implements {WebInspector.OutputStream}
  * @implements {WebInspector.OutputStreamDelegate}
  * @param {!WebInspector.CPUProfileType} type
- * @param {string} title
- * @param {number=} uid
+ * @param {string=} title
  */
-WebInspector.CPUProfileHeader = function(type, title, uid)
+WebInspector.CPUProfileHeader = function(type, title)
 {
-    WebInspector.ProfileHeader.call(this, type, title, uid);
+    WebInspector.ProfileHeader.call(this, type, title || WebInspector.UIString("Profile %d", type._nextProfileUid));
     this._tempFile = null;
 }
 
@@ -788,7 +847,7 @@
     onTransferStarted: function()
     {
         this._jsonifiedProfile = "";
-        this.sidebarElement.subtitle = WebInspector.UIString("Loading\u2026 %s", Number.bytesToString(this._jsonifiedProfile.length));
+        this.updateStatus(WebInspector.UIString("Loading\u2026 %s", Number.bytesToString(this._jsonifiedProfile.length)));
     },
 
     /**
@@ -796,15 +855,15 @@
      */
     onChunkTransferred: function(reader)
     {
-        this.sidebarElement.subtitle = WebInspector.UIString("Loading\u2026 %d\%", Number.bytesToString(this._jsonifiedProfile.length));
+        this.updateStatus(WebInspector.UIString("Loading\u2026 %d\%", Number.bytesToString(this._jsonifiedProfile.length)));
     },
 
     onTransferFinished: function()
     {
-        this.sidebarElement.subtitle = WebInspector.UIString("Parsing\u2026");
+        this.updateStatus(WebInspector.UIString("Parsing\u2026"));
         this._profile = JSON.parse(this._jsonifiedProfile);
         this._jsonifiedProfile = null;
-        this.sidebarElement.subtitle = WebInspector.UIString("Loaded");
+        this.updateStatus(WebInspector.UIString("Loaded"));
 
         if (this._profileType._profileBeingRecorded === this)
             this._profileType._profileBeingRecorded = null;
@@ -815,18 +874,20 @@
      */
     onError: function(reader, e)
     {
+        var subtitle;
         switch(e.target.error.code) {
         case e.target.error.NOT_FOUND_ERR:
-            this.sidebarElement.subtitle = WebInspector.UIString("'%s' not found.", reader.fileName());
-        break;
-        case e.target.error.NOT_READABLE_ERR:
-            this.sidebarElement.subtitle = WebInspector.UIString("'%s' is not readable", reader.fileName());
-        break;
-        case e.target.error.ABORT_ERR:
+            subtitle = WebInspector.UIString("'%s' not found.", reader.fileName());
             break;
+        case e.target.error.NOT_READABLE_ERR:
+            subtitle = WebInspector.UIString("'%s' is not readable", reader.fileName());
+            break;
+        case e.target.error.ABORT_ERR:
+            return;
         default:
-            this.sidebarElement.subtitle = WebInspector.UIString("'%s' error %d", reader.fileName(), e.target.error.code);
+            subtitle = WebInspector.UIString("'%s' error %d", reader.fileName(), e.target.error.code);
         }
+        this.updateStatus(subtitle);
     },
 
     /**
@@ -842,6 +903,15 @@
     /**
      * @override
      */
+    dispose: function()
+    {
+        this.removeTempFile();
+    },
+
+    /**
+     * @override
+     * @return {!WebInspector.ProfileSidebarTreeElement}
+     */
     createSidebarTreeElement: function()
     {
         return new WebInspector.ProfileSidebarTreeElement(this, "profile-sidebar-tree-item");
@@ -849,9 +919,9 @@
 
     /**
      * @override
-     * @param {!WebInspector.ProfilesPanel} profilesPanel
+     * @return {!WebInspector.CPUProfileView}
      */
-    createView: function(profilesPanel)
+    createView: function()
     {
         return new WebInspector.CPUProfileView(this);
     },
@@ -862,14 +932,16 @@
      */
     canSaveToFile: function()
     {
-        return !!this._tempFile;
+        return !this.fromFile() && this._protocolProfile;
     },
 
     saveToFile: function()
     {
         var fileOutputStream = new WebInspector.FileOutputStream();
+
         /**
          * @param {boolean} accepted
+         * @this {WebInspector.CPUProfileHeader}
          */
         function onOpenForSave(accepted)
         {
@@ -882,7 +954,15 @@
                 else
                     fileOutputStream.close();
             }
-            this._tempFile.read(didRead.bind(this));
+            if (this._failedToCreateTempFile) {
+                WebInspector.log("Failed to open temp file with heap snapshot",
+                                 WebInspector.ConsoleMessage.MessageLevel.Error);
+                fileOutputStream.close();
+            } else if (this._tempFile) {
+                this._tempFile.read(didRead.bind(this));
+            } else {
+                this._onTempFileReady = onOpenForSave.bind(this, accepted);
+            }
         }
         this._fileName = this._fileName || "CPU-" + new Date().toISO8601Compact() + this._profileType.fileExtension();
         fileOutputStream.open(this._fileName, onOpenForSave.bind(this));
@@ -893,39 +973,101 @@
      */
     loadFromFile: function(file)
     {
-        this.sidebarElement.subtitle = WebInspector.UIString("Loading\u2026");
-        this.sidebarElement.wait = true;
-
+        this.updateStatus(WebInspector.UIString("Loading\u2026"), true);
         var fileReader = new WebInspector.ChunkedFileReader(file, 10000000, this);
         fileReader.start(this);
     },
 
+
     /**
-     * @param {!function()} callback
+     * @return {?ProfilerAgent.CPUProfile}
      */
-    _createTempFile: function(callback)
+    protocolProfile: function()
     {
-        function didCreateFile(result)
-        {
-            this._tempFile = result;
-            callback();
-        }
-        new WebInspector.TempFile("cpu-profiler", this.uid, didCreateFile.bind(this));
+        return this._protocolProfile;
     },
 
     /**
-     * @param {!string} data
+     * @param {!ProfilerAgent.CPUProfile} cpuProfile
      */
-    _saveToTempFile: function(data)
+    setProtocolProfile: function(cpuProfile)
     {
-        if (this._tempFile)
-            this._tempFile.write(data);
+        this._protocolProfile = cpuProfile;
+        this._saveProfileDataToTempFile(cpuProfile);
+        if (this.canSaveToFile())
+            this.dispatchEventToListeners(WebInspector.ProfileHeader.Events.ProfileReceived);
+    },
+
+    /**
+     * @param {!ProfilerAgent.CPUProfile} data
+     */
+    _saveProfileDataToTempFile: function(data)
+    {
+        var serializedData = JSON.stringify(data);
+
+        /**
+         * @this {WebInspector.CPUProfileHeader}
+         */
+        function didCreateTempFile(tempFile)
+        {
+            this._writeToTempFile(tempFile, serializedData);
+        }
+        new WebInspector.TempFile("cpu-profiler", this.uid,  didCreateTempFile.bind(this));
+    },
+
+    /**
+     * @param {?WebInspector.TempFile} tempFile
+     * @param {string} serializedData
+     */
+    _writeToTempFile: function(tempFile, serializedData)
+    {
+        this._tempFile = tempFile;
+        if (!tempFile) {
+            this._failedToCreateTempFile = true;
+            this._notifyTempFileReady();
+            return;
+        }
+        /**
+         * @param {boolean} success
+         * @this {WebInspector.CPUProfileHeader}
+         */
+        function didWriteToTempFile(success)
+        {
+            if (!success)
+                this._failedToCreateTempFile = true;
+            tempFile.finishWriting();
+            this._notifyTempFileReady();
+        }
+        tempFile.write(serializedData, didWriteToTempFile.bind(this));
+    },
+
+    _notifyTempFileReady: function()
+    {
+        if (this._onTempFileReady) {
+            this._onTempFileReady();
+            this._onTempFileReady = null;
+        }
     },
 
     __proto__: WebInspector.ProfileHeader.prototype
 }
 
 /**
+ * @return {!WebInspector.FlameChart.ColorGenerator}
+ */
+WebInspector.CPUProfileView.colorGenerator = function()
+{
+    if (!WebInspector.CPUProfileView._colorGenerator) {
+        var colorGenerator = new WebInspector.FlameChart.ColorGenerator();
+        colorGenerator.colorPairForID("(idle)::0", 50);
+        colorGenerator.colorPairForID("(program)::0", 50);
+        colorGenerator.colorPairForID("(garbage collector)::0", 50);
+        WebInspector.CPUProfileView._colorGenerator = colorGenerator;
+    }
+    return WebInspector.CPUProfileView._colorGenerator;
+}
+
+/**
  * @constructor
  * @implements {WebInspector.FlameChartDataProvider}
  */
@@ -933,23 +1075,30 @@
 {
     WebInspector.FlameChartDataProvider.call(this);
     this._cpuProfileView = cpuProfileView;
+    this._colorGenerator = WebInspector.CPUProfileView.colorGenerator();
 }
 
 WebInspector.CPUFlameChartDataProvider.prototype = {
     /**
-     * @param {!WebInspector.FlameChart.ColorGenerator} colorGenerator
-     * @return {!Object}
+     * @return {?WebInspector.FlameChart.TimelineData}
      */
-    timelineData: function(colorGenerator)
+    timelineData: function()
     {
-        return this._timelineData || this._calculateTimelineData(colorGenerator);
+        return this._timelineData || this._calculateTimelineData();
     },
 
     /**
-     * @param {!WebInspector.FlameChart.ColorGenerator} colorGenerator
-     * @return {?Object}
+     * @return {!WebInspector.FlameChart.ColorGenerator}
      */
-    _calculateTimelineData: function(colorGenerator)
+    colorGenerator: function()
+    {
+        return this._colorGenerator;
+    },
+
+    /**
+     * @return {?WebInspector.FlameChart.TimelineData}
+     */
+    _calculateTimelineData: function()
     {
         if (!this._cpuProfileView.profileHead)
             return null;
@@ -1028,8 +1177,9 @@
                 continue;
             }
 
+            var colorGenerator = this._colorGenerator;
             while (node) {
-                var colorPair = colorGenerator._colorPairForID(node.functionName + ":" + node.url + ":" + node.lineNumber);
+                var colorPair = colorGenerator.colorPairForID(node.functionName + ":" + node.url + ":" + node.lineNumber);
                 var indexesForColor = colorEntryIndexes[colorPair.index];
                 if (!indexesForColor)
                     indexesForColor = colorEntryIndexes[colorPair.index] = [];
@@ -1082,11 +1232,12 @@
             entryDeoptFlags: entryDeoptFlags
         };
 
-        return this._timelineData;
+        return /** @type {!WebInspector.FlameChart.TimelineData} */ (this._timelineData);
     },
 
     /**
      * @param {number} ms
+     * @return {string}
      */
     _millisecondsToString: function(ms)
     {
@@ -1099,6 +1250,7 @@
 
     /**
      * @param {number} entryIndex
+     * @return {?Array.<!{title: string, text: string}>}
      */
     prepareHighlightedEntryInfo: function(entryIndex)
     {
@@ -1147,8 +1299,6 @@
     entryData: function(entryIndex)
     {
         return this._timelineData.entryNodes[entryIndex];
-    },
-
-    __proto__: WebInspector.FlameChartDataProvider
+    }
 }
 
diff --git a/Source/devtools/front_end/CPUProfilerModel.js b/Source/devtools/front_end/CPUProfilerModel.js
new file mode 100644
index 0000000..e7cf719
--- /dev/null
+++ b/Source/devtools/front_end/CPUProfilerModel.js
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2014 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:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
+ * OR ITS 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.
+ */
+
+/**
+ * @constructor
+ * @extends {WebInspector.Object}
+ * @implements {ProfilerAgent.Dispatcher}
+ */
+WebInspector.CPUProfilerModel = function()
+{
+    /** @type {?WebInspector.CPUProfilerModel.Delegate} */
+    this._delegate = null;
+    this._isRecording = false;
+    InspectorBackend.registerProfilerDispatcher(this);
+    ProfilerAgent.enable();
+}
+
+WebInspector.CPUProfilerModel.EventTypes = {
+    ProfileStarted: "profile-started",
+    ProfileStopped: "profile-stopped"
+};
+
+WebInspector.CPUProfilerModel.prototype = {
+    /**
+      * @param {!WebInspector.CPUProfilerModel.Delegate} delegate
+      */
+    setDelegate: function(delegate)
+    {
+        this._delegate = delegate;
+    },
+
+    /**
+     * @param {string} id
+     * @param {!DebuggerAgent.Location} scriptLocation
+     * @param {!ProfilerAgent.CPUProfile} cpuProfile
+     * @param {string=} title
+     */
+    consoleProfileFinished: function(id, scriptLocation, cpuProfile, title)
+    {
+        // Make sure ProfilesPanel is initialized and CPUProfileType is created.
+        WebInspector.moduleManager.loadModule("profiles");
+        this._delegate.consoleProfileFinished(id, scriptLocation, cpuProfile, title);
+    },
+
+    /**
+     * @param {string} id
+     * @param {!DebuggerAgent.Location} scriptLocation
+     * @param {string=} title
+     */
+    consoleProfileStarted: function(id, scriptLocation, title)
+    {
+        // Make sure ProfilesPanel is initialized and CPUProfileType is created.
+        WebInspector.moduleManager.loadModule("profiles");
+        this._delegate.consoleProfileStarted(id, scriptLocation, title);
+    },
+
+    /**
+      * @param {boolean} isRecording
+      */
+    setRecording: function(isRecording)
+    {
+        this._isRecording = isRecording;
+        this.dispatchEventToListeners(isRecording ?
+            WebInspector.CPUProfilerModel.EventTypes.ProfileStarted :
+            WebInspector.CPUProfilerModel.EventTypes.ProfileStopped);
+    },
+
+    /**
+      * @return {boolean}
+      */
+    isRecordingProfile: function()
+    {
+        return this._isRecording;
+    },
+
+    __proto__: WebInspector.Object.prototype
+}
+
+/** @interface */
+WebInspector.CPUProfilerModel.Delegate = function() {};
+
+WebInspector.CPUProfilerModel.Delegate.prototype = {
+    /**
+     * @param {string} protocolId
+     * @param {!DebuggerAgent.Location} scriptLocation
+     * @param {string=} title
+     */
+    consoleProfileStarted: function(protocolId, scriptLocation, title) {},
+
+    /**
+     * @param {string} protocolId
+     * @param {!DebuggerAgent.Location} scriptLocation
+     * @param {!ProfilerAgent.CPUProfile} cpuProfile
+     * @param {string=} title
+     */
+    consoleProfileFinished: function(protocolId, scriptLocation, cpuProfile, title) {}
+}
+
+/**
+ * @type {!WebInspector.CPUProfilerModel}
+ */
+WebInspector.cpuProfilerModel;
diff --git a/Source/devtools/front_end/CSSFormatter.js b/Source/devtools/front_end/CSSFormatter.js
index c20c88a..b03d982 100644
--- a/Source/devtools/front_end/CSSFormatter.js
+++ b/Source/devtools/front_end/CSSFormatter.js
@@ -45,7 +45,7 @@
     format: function()
     {
         this._lineEndings = this._lineEndings(this._content);
-        var tokenize = WebInspector.CodeMirrorUtils.createTokenizer("text/css");
+        var tokenize = FormatterWorker.createTokenizer("text/css");
         var lines = this._content.split("\n");
 
         for (var i = 0; i < lines.length; ++i) {
@@ -73,14 +73,14 @@
     /**
      * @param {number} startLine
      * @param {string} token
-     * @param {string} type
+     * @param {?string} type
      * @param {number} startColumn
      */
     _tokenCallback: function(startLine, token, type, startColumn)
     {
         if (startLine !== this._lastLine)
             this._state.eatWhitespace = true;
-        if (/^css-property/.test(type) && !this._state.inPropertyValue)
+        if (/^property/.test(type) && !this._state.inPropertyValue)
             this._state.seenProperty = true;
         this._lastLine = startLine;
         var isWhitespace = /^\s+$/.test(token);
@@ -122,7 +122,7 @@
 
         this._builder.addToken(token, startPosition, startLine, startColumn);
 
-        if (type === "css-comment" && !this._state.inPropertyValue && !this._state.seenProperty)
+        if (type === "comment" && !this._state.inPropertyValue && !this._state.seenProperty)
             this._builder.addNewLine();
         if (token === ";" && this._state.inPropertyValue) {
             this._state.inPropertyValue = false;
diff --git a/Source/devtools/front_end/CSSMetadata.js b/Source/devtools/front_end/CSSMetadata.js
index 1d3376d..0c9ab1b 100644
--- a/Source/devtools/front_end/CSSMetadata.js
+++ b/Source/devtools/front_end/CSSMetadata.js
@@ -32,7 +32,7 @@
 
 /**
  * @constructor
- * @param {!Array.<!CSSAgent.CSSPropertyInfo|string>} properties
+ * @param {!Array.<!{name: string, longhands: !Array.<string>}|string>} properties
  */
 WebInspector.CSSMetadata = function(properties)
 {
@@ -45,7 +45,6 @@
             this._values.push(property);
             continue;
         }
-
         var propertyName = property.name;
         this._values.push(propertyName);
 
@@ -214,6 +213,9 @@
     "border-left-width": { values: [
         "medium", "thick", "thin"
     ] },
+    "box-shadow": { values: [
+        "inset", "none"
+    ] },
     "-webkit-writing-mode": { values: [
         "lr", "rl", "tb", "lr-tb", "rl-tb", "tb-rl", "horizontal-tb", "vertical-rl", "vertical-lr", "horizontal-bt"
     ] },
@@ -429,7 +431,7 @@
         "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
     ] },
     "unicode-bidi": { values: [
-        "normal", "bidi-override", "embed"
+        "normal", "bidi-override", "embed", "isolate", "isolate-override", "plaintext"
     ] },
     "clip-rule": { values: [
         "nonzero", "evenodd"
@@ -655,12 +657,11 @@
     "border-left": { m: "background" },
     "border-radius": { m: "background" },
     "bottom": { m: "visuren" },
-    "box-shadow": { m: "background" },
     "color": { m: "color", a: "foreground" },
     "counter-increment": { m: "generate" },
     "counter-reset": { m: "generate" },
-    "grid-definition-columns": { m: "grid" },
-    "grid-definition-rows": { m: "grid" },
+    "grid-template-columns": { m: "grid" },
+    "grid-template-rows": { m: "grid" },
     "height": { m: "box" },
     "image-orientation": { m: "images" },
     "left": { m: "visuren" },
@@ -718,14 +719,9 @@
     return entry || null;
 }
 
-WebInspector.CSSMetadata.requestCSSShorthandData = function()
+WebInspector.CSSMetadata.initializeWithSupportedProperties = function(properties)
 {
-    function propertyNamesCallback(error, properties)
-    {
-        if (!error)
-            WebInspector.CSSMetadata.cssPropertiesMetainfo = new WebInspector.CSSMetadata(properties);
-    }
-    CSSAgent.getSupportedCSSProperties(propertyNamesCallback);
+    WebInspector.CSSMetadata.cssPropertiesMetainfo = new WebInspector.CSSMetadata(properties);
 }
 
 WebInspector.CSSMetadata.cssPropertiesMetainfoKeySet = function()
@@ -922,6 +918,9 @@
         return foundIndex;
     },
 
+    /**
+     * @return {!Object.<string, boolean>}
+     */
     keySet: function()
     {
         if (!this._keySet)
@@ -929,16 +928,32 @@
         return this._keySet;
     },
 
+    /**
+     * @param {string} str
+     * @param {string} prefix
+     * @return {string}
+     */
     next: function(str, prefix)
     {
         return this._closest(str, prefix, 1);
     },
 
+    /**
+     * @param {string} str
+     * @param {string} prefix
+     * @return {string}
+     */
     previous: function(str, prefix)
     {
         return this._closest(str, prefix, -1);
     },
 
+    /**
+     * @param {string} str
+     * @param {string} prefix
+     * @param {number} shift
+     * @return {string}
+     */
     _closest: function(str, prefix, shift)
     {
         if (!str)
@@ -977,3 +992,5 @@
         return this._shorthands[longhand];
     }
 }
+
+WebInspector.CSSMetadata.initializeWithSupportedProperties([]);
diff --git a/Source/devtools/front_end/CSSNamedFlowCollectionsView.js b/Source/devtools/front_end/CSSNamedFlowCollectionsView.js
deleted file mode 100644
index 24da59c..0000000
--- a/Source/devtools/front_end/CSSNamedFlowCollectionsView.js
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above
- *    copyright notice, this list of conditions and the following
- *    disclaimer.
- * 2. 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.
- *
- * 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 HOLDER 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.
- */
-
-/**
- * @constructor
- * @extends {WebInspector.SidebarView}
- */
-WebInspector.CSSNamedFlowCollectionsView = function()
-{
-    WebInspector.SidebarView.call(this, WebInspector.SidebarView.SidebarPosition.Start);
-    this.registerRequiredCSS("cssNamedFlows.css");
-
-    this._namedFlows = {};
-    this._contentNodes = {};
-    this._regionNodes = {};
-
-    this.element.classList.add("css-named-flow-collections-view");
-    this.element.classList.add("fill");
-
-    this._statusElement = document.createElement("span");
-    this._statusElement.textContent = WebInspector.UIString("CSS Named Flows");
-
-    var sidebarHeader = this.firstElement().createChild("div", "tabbed-pane-header selected sidebar-header");
-    var tab = sidebarHeader.createChild("div", "tabbed-pane-header-tab");
-    tab.createChild("span", "tabbed-pane-header-tab-title").textContent = WebInspector.UIString("CSS Named Flows");
-
-    this._sidebarContentElement = this.firstElement().createChild("div", "sidebar-content outline-disclosure");
-    this._flowListElement = this._sidebarContentElement.createChild("ol");
-    this._flowTree = new TreeOutline(this._flowListElement);
-
-    this._emptyElement = document.createElement("div");
-    this._emptyElement.classList.add("info");
-    this._emptyElement.textContent = WebInspector.UIString("No CSS Named Flows");
-
-    this._tabbedPane = new WebInspector.TabbedPane();
-    this._tabbedPane.closeableTabs = true;
-    this._tabbedPane.show(this.secondElement());
-}
-
-WebInspector.CSSNamedFlowCollectionsView.prototype = {
-    showInDrawer: function()
-    {
-        WebInspector.inspectorView.showCloseableViewInDrawer("css-flows", WebInspector.UIString("CSS Flows"), this);
-    },
-
-    reset: function()
-    {
-        if (!this._document)
-            return;
-
-        WebInspector.cssModel.getNamedFlowCollectionAsync(this._document.id, this._resetNamedFlows.bind(this));
-    },
-
-    /**
-     * @param {!WebInspector.DOMDocument} document
-     */
-    _setDocument: function(document)
-    {
-        this._document = document;
-        this.reset();
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _documentUpdated: function(event)
-    {
-        var document = /** @type {!WebInspector.DOMDocument} */ (event.data);
-        this._setDocument(document);
-    },
-
-    /**
-     * @param {boolean} hasContent
-     */
-    _setSidebarHasContent: function(hasContent)
-    {
-        if (hasContent) {
-            if (!this._emptyElement.parentNode)
-                return;
-
-            this._sidebarContentElement.removeChild(this._emptyElement);
-            this._sidebarContentElement.appendChild(this._flowListElement);
-        } else {
-            if (!this._flowListElement.parentNode)
-                return;
-
-            this._sidebarContentElement.removeChild(this._flowListElement);
-            this._sidebarContentElement.appendChild(this._emptyElement);
-        }
-    },
-
-    /**
-     * @param {!WebInspector.NamedFlow} flow
-     */
-    _appendNamedFlow: function(flow)
-    {
-        var flowHash = this._hashNamedFlow(flow.documentNodeId, flow.name);
-        var flowContainer = { flow: flow, flowHash: flowHash };
-
-        for (var i = 0; i < flow.content.length; ++i)
-            this._contentNodes[flow.content[i]] = flowHash;
-        for (var i = 0; i < flow.regions.length; ++i)
-            this._regionNodes[flow.regions[i].nodeId] = flowHash;
-
-        var flowTreeItem = new WebInspector.FlowTreeElement(flowContainer);
-        flowTreeItem.onselect = this._selectNamedFlowTab.bind(this, flowHash);
-
-        flowContainer.flowTreeItem = flowTreeItem;
-        this._namedFlows[flowHash] = flowContainer;
-
-        if (!this._flowTree.children.length)
-            this._setSidebarHasContent(true);
-        this._flowTree.appendChild(flowTreeItem);
-    },
-
-    /**
-     * @param {string} flowHash
-     */
-    _removeNamedFlow: function(flowHash)
-    {
-        var flowContainer = this._namedFlows[flowHash];
-
-        if (this._tabbedPane._tabsById[flowHash])
-            this._tabbedPane.closeTab(flowHash);
-        this._flowTree.removeChild(flowContainer.flowTreeItem);
-
-        var flow = flowContainer.flow;
-        for (var i = 0; i < flow.content.length; ++i)
-            delete this._contentNodes[flow.content[i]];
-        for (var i = 0; i < flow.regions.length; ++i)
-            delete this._regionNodes[flow.regions[i].nodeId];
-
-        delete this._namedFlows[flowHash];
-
-        if (!this._flowTree.children.length)
-            this._setSidebarHasContent(false);
-    },
-
-    /**
-     * @param {!WebInspector.NamedFlow} flow
-     */
-    _updateNamedFlow: function(flow)
-    {
-        var flowHash = this._hashNamedFlow(flow.documentNodeId, flow.name);
-        var flowContainer = this._namedFlows[flowHash];
-
-        if (!flowContainer)
-            return;
-
-        var oldFlow = flowContainer.flow;
-        flowContainer.flow = flow;
-
-        for (var i = 0; i < oldFlow.content.length; ++i)
-            delete this._contentNodes[oldFlow.content[i]];
-        for (var i = 0; i < oldFlow.regions.length; ++i)
-            delete this._regionNodes[oldFlow.regions[i].nodeId];
-
-        for (var i = 0; i < flow.content.length; ++i)
-            this._contentNodes[flow.content[i]] = flowHash;
-        for (var i = 0; i < flow.regions.length; ++i)
-            this._regionNodes[flow.regions[i].nodeId] = flowHash;
-
-        flowContainer.flowTreeItem.setOverset(flow.overset);
-
-        if (flowContainer.flowView)
-            flowContainer.flowView.flow = flow;
-    },
-
-    /**
-     * @param {?WebInspector.NamedFlowCollection} namedFlowCollection
-     */
-    _resetNamedFlows: function(namedFlowCollection)
-    {
-        for (var flowHash in this._namedFlows)
-            this._removeNamedFlow(flowHash);
-
-        var namedFlows = namedFlowCollection ? namedFlowCollection.namedFlowMap : {};
-        for (var flowName in namedFlows)
-            this._appendNamedFlow(namedFlows[flowName]);
-
-        if (!this._flowTree.children.length)
-            this._setSidebarHasContent(false);
-        else
-            this._showNamedFlowForNode(WebInspector.panel("elements").treeOutline.selectedDOMNode());
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _namedFlowCreated: function(event)
-    {
-        // FIXME: We only have support for Named Flows in the main document.
-        if (event.data.documentNodeId !== this._document.id)
-            return;
-
-        var flow = /** @type {!WebInspector.NamedFlow} */ (event.data);
-        this._appendNamedFlow(flow);
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _namedFlowRemoved: function(event)
-    {
-        // FIXME: We only have support for Named Flows in the main document.
-        if (event.data.documentNodeId !== this._document.id)
-            return;
-
-        this._removeNamedFlow(this._hashNamedFlow(event.data.documentNodeId, event.data.flowName));
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _regionLayoutUpdated: function(event)
-    {
-        // FIXME: We only have support for Named Flows in the main document.
-        if (event.data.documentNodeId !== this._document.id)
-            return;
-
-        var flow = /** @type {!WebInspector.NamedFlow} */ (event.data);
-        this._updateNamedFlow(flow);
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _regionOversetChanged: function(event)
-    {
-        // FIXME: We only have support for Named Flows in the main document.
-        if (event.data.documentNodeId !== this._document.id)
-            return;
-
-        var flow = /** @type {!WebInspector.NamedFlow} */ (event.data);
-        this._updateNamedFlow(flow);
-    },
-
-    /**
-     * @param {!DOMAgent.NodeId} documentNodeId
-     * @param {string} flowName
-     */
-    _hashNamedFlow: function(documentNodeId, flowName)
-    {
-        return documentNodeId + "|" + flowName;
-    },
-
-    /**
-     * @param {string} flowHash
-     */
-    _showNamedFlow: function(flowHash)
-    {
-        this._selectNamedFlowInSidebar(flowHash);
-        this._selectNamedFlowTab(flowHash);
-    },
-
-    /**
-     * @param {string} flowHash
-     */
-    _selectNamedFlowInSidebar: function(flowHash)
-    {
-        this._namedFlows[flowHash].flowTreeItem.select(true);
-    },
-
-    /**
-     * @param {string} flowHash
-     * @return {boolean}
-     */
-    _selectNamedFlowTab: function(flowHash)
-    {
-        var flowContainer = this._namedFlows[flowHash];
-
-        if (this._tabbedPane.selectedTabId === flowHash)
-            return false;
-
-        if (!this._tabbedPane.selectTab(flowHash)) {
-            if (!flowContainer.flowView)
-                flowContainer.flowView = new WebInspector.CSSNamedFlowView(flowContainer.flow);
-
-            this._tabbedPane.appendTab(flowHash, flowContainer.flow.name, flowContainer.flowView);
-            this._tabbedPane.selectTab(flowHash);
-        }
-        return false;
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _selectedNodeChanged: function(event)
-    {
-        var node = /** @type {!WebInspector.DOMNode} */ (event.data);
-        this._showNamedFlowForNode(node);
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _tabSelected: function(event)
-    {
-        this._selectNamedFlowInSidebar(event.data.tabId);
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _tabClosed: function(event)
-    {
-        this._namedFlows[event.data.tabId].flowTreeItem.deselect();
-    },
-
-    /**
-     * @param {?WebInspector.DOMNode} node
-     */
-    _showNamedFlowForNode: function(node)
-    {
-        if (!node)
-            return;
-
-        if (this._regionNodes[node.id]) {
-            this._showNamedFlow(this._regionNodes[node.id]);
-            return;
-        }
-
-        while (node) {
-            if (this._contentNodes[node.id]) {
-                this._showNamedFlow(this._contentNodes[node.id]);
-                return;
-            }
-
-            node = node.parentNode;
-        }
-    },
-
-    wasShown: function()
-    {
-        WebInspector.SidebarView.prototype.wasShown.call(this);
-
-        WebInspector.domAgent.requestDocument(this._setDocument.bind(this));
-
-        WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.DocumentUpdated, this._documentUpdated, this);
-
-        WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.NamedFlowCreated, this._namedFlowCreated, this);
-        WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.NamedFlowRemoved, this._namedFlowRemoved, this);
-        WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.RegionLayoutUpdated, this._regionLayoutUpdated, this);
-        WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.RegionOversetChanged, this._regionOversetChanged, this);
-
-        WebInspector.panel("elements").treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.SelectedNodeChanged, this._selectedNodeChanged, this);
-
-        this._tabbedPane.addEventListener(WebInspector.TabbedPane.EventTypes.TabSelected, this._tabSelected, this);
-        this._tabbedPane.addEventListener(WebInspector.TabbedPane.EventTypes.TabClosed, this._tabClosed, this);
-    },
-
-    willHide: function()
-    {
-        WebInspector.domAgent.removeEventListener(WebInspector.DOMAgent.Events.DocumentUpdated, this._documentUpdated, this);
-
-        WebInspector.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.NamedFlowCreated, this._namedFlowCreated, this);
-        WebInspector.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.NamedFlowRemoved, this._namedFlowRemoved, this);
-        WebInspector.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.RegionLayoutUpdated, this._regionLayoutUpdated, this);
-        WebInspector.cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.RegionOversetChanged, this._regionOversetChanged, this);
-
-        WebInspector.panel("elements").treeOutline.removeEventListener(WebInspector.ElementsTreeOutline.Events.SelectedNodeChanged, this._selectedNodeChanged, this);
-
-        this._tabbedPane.removeEventListener(WebInspector.TabbedPane.EventTypes.TabSelected, this._tabSelected, this);
-        this._tabbedPane.removeEventListener(WebInspector.TabbedPane.EventTypes.TabClosed, this._tabClosed, this);
-    },
-
-    __proto__: WebInspector.SidebarView.prototype
-}
-
-/**
- * @constructor
- * @extends {TreeElement}
- */
-WebInspector.FlowTreeElement = function(flowContainer)
-{
-    var container = document.createElement("div");
-    container.createChild("div", "selection");
-    container.createChild("span", "title").createChild("span").textContent = flowContainer.flow.name;
-
-    TreeElement.call(this, container, flowContainer, false);
-
-    this._overset = false;
-    this.setOverset(flowContainer.flow.overset);
-}
-
-WebInspector.FlowTreeElement.prototype = {
-    /**
-     * @param {boolean} newOverset
-     */
-    setOverset: function(newOverset)
-    {
-        if (this._overset === newOverset)
-            return;
-
-        if (newOverset) {
-            this.title.classList.add("named-flow-overflow");
-            this.tooltip = WebInspector.UIString("Overflows.");
-        } else {
-            this.title.classList.remove("named-flow-overflow");
-            this.tooltip = "";
-        }
-
-        this._overset = newOverset;
-    },
-
-    __proto__: TreeElement.prototype
-}
diff --git a/Source/devtools/front_end/CSSNamedFlowView.js b/Source/devtools/front_end/CSSNamedFlowView.js
deleted file mode 100644
index 0542b0e..0000000
--- a/Source/devtools/front_end/CSSNamedFlowView.js
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above
- *    copyright notice, this list of conditions and the following
- *    disclaimer.
- * 2. 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.
- *
- * 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 HOLDER 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.
- */
-
-/**
- * @constructor
- * @extends {WebInspector.View}
- * @param {!WebInspector.NamedFlow} flow
- */
-WebInspector.CSSNamedFlowView = function(flow)
-{
-    WebInspector.View.call(this);
-    this.element.classList.add("css-named-flow");
-    this.element.classList.add("outline-disclosure");
-
-    this._treeOutline = new TreeOutline(this.element.createChild("ol"), true);
-
-    this._contentTreeItem = new TreeElement(WebInspector.UIString("content"), null, true);
-    this._treeOutline.appendChild(this._contentTreeItem);
-
-    this._regionsTreeItem = new TreeElement(WebInspector.UIString("region chain"), null, true);
-    this._regionsTreeItem.expand();
-    this._treeOutline.appendChild(this._regionsTreeItem);
-
-    this._flow = flow;
-
-    var content = flow.content;
-    for (var i = 0; i < content.length; ++i)
-        this._insertContentNode(content[i]);
-
-    var regions = flow.regions;
-    for (var i = 0; i < regions.length; ++i)
-        this._insertRegion(regions[i]);
-}
-
-WebInspector.CSSNamedFlowView.OversetTypeMessageMap = {
-    empty: "empty",
-    fit: "fit",
-    overset: "overset"
-}
-
-WebInspector.CSSNamedFlowView.prototype = {
-    /**
-     * @param {?WebInspector.DOMNode} rootDOMNode
-     * @return {?WebInspector.ElementsTreeOutline}
-     */
-    _createFlowTreeOutline: function(rootDOMNode)
-    {
-        if (!rootDOMNode)
-            return null;
-
-        var treeOutline = new WebInspector.ElementsTreeOutline(false, false);
-        treeOutline.element.classList.add("named-flow-element");
-        treeOutline.setVisible(true);
-        treeOutline.rootDOMNode = rootDOMNode;
-        treeOutline.wireToDomAgent();
-        WebInspector.domAgent.removeEventListener(WebInspector.DOMAgent.Events.DocumentUpdated, treeOutline._elementsTreeUpdater._documentUpdated, treeOutline._elementsTreeUpdater);
-
-        return treeOutline;
-    },
-
-    /**
-     * @param {!DOMAgent.NodeId} contentNodeId
-     * @param {number=} index
-     */
-    _insertContentNode: function(contentNodeId, index)
-    {
-        var treeOutline = this._createFlowTreeOutline(WebInspector.domAgent.nodeForId(contentNodeId));
-        var treeItem = new TreeElement(treeOutline.element, treeOutline);
-
-        if (index === undefined) {
-            this._contentTreeItem.appendChild(treeItem);
-            return;
-        }
-
-        this._contentTreeItem.insertChild(treeItem, index);
-    },
-
-    /**
-     * @param {!CSSAgent.Region} region
-     * @param {number=} index
-     */
-    _insertRegion: function(region, index)
-    {
-        var treeOutline = this._createFlowTreeOutline(WebInspector.domAgent.nodeForId(region.nodeId));
-        treeOutline.element.classList.add("region-" + region.regionOverset);
-
-        var treeItem = new TreeElement(treeOutline.element, treeOutline);
-        var oversetText = WebInspector.UIString(WebInspector.CSSNamedFlowView.OversetTypeMessageMap[region.regionOverset]);
-        treeItem.tooltip = WebInspector.UIString("Region is %s.", oversetText);
-
-        if (index === undefined) {
-            this._regionsTreeItem.appendChild(treeItem);
-            return;
-        }
-
-        this._regionsTreeItem.insertChild(treeItem, index);
-    },
-
-    get flow()
-    {
-        return this._flow;
-    },
-
-    set flow(newFlow)
-    {
-        this._update(newFlow);
-    },
-
-    /**
-     * @param {!TreeElement} regionTreeItem
-     * @param {string} newRegionOverset
-     * @param {string} oldRegionOverset
-     */
-    _updateRegionOverset: function(regionTreeItem, newRegionOverset, oldRegionOverset)
-    {
-        var element = regionTreeItem.representedObject.element;
-        element.classList.remove("region-" + oldRegionOverset);
-        element.classList.add("region-" + newRegionOverset);
-
-        var oversetText = WebInspector.UIString(WebInspector.CSSNamedFlowView.OversetTypeMessageMap[newRegionOverset]);
-        regionTreeItem.tooltip = WebInspector.UIString("Region is %s." , oversetText);
-    },
-
-    /**
-     * @param {!Array.<!DOMAgent.NodeId>} oldContent
-     * @param {!Array.<!DOMAgent.NodeId>} newContent
-     */
-    _mergeContentNodes: function(oldContent, newContent)
-    {
-        var nodeIdSet = {};
-        for (var i = 0; i < newContent.length; ++i)
-            nodeIdSet[newContent[i]] = true;
-
-        var oldContentIndex = 0;
-        var newContentIndex = 0;
-        var contentTreeChildIndex = 0;
-
-        while (oldContentIndex < oldContent.length || newContentIndex < newContent.length) {
-            if (oldContentIndex === oldContent.length) {
-                this._insertContentNode(newContent[newContentIndex]);
-                ++newContentIndex;
-                continue;
-            }
-
-            if (newContentIndex === newContent.length) {
-                this._contentTreeItem.removeChildAtIndex(contentTreeChildIndex);
-                ++oldContentIndex;
-                continue;
-            }
-
-            if (oldContent[oldContentIndex] === newContent[newContentIndex]) {
-                ++oldContentIndex;
-                ++newContentIndex;
-                ++contentTreeChildIndex;
-                continue;
-            }
-
-            if (nodeIdSet[oldContent[oldContentIndex]]) {
-                this._insertContentNode(newContent[newContentIndex], contentTreeChildIndex);
-                ++newContentIndex;
-                ++contentTreeChildIndex;
-                continue;
-            }
-
-            this._contentTreeItem.removeChildAtIndex(contentTreeChildIndex);
-            ++oldContentIndex;
-        }
-    },
-
-    /**
-     * @param {!Array.<!CSSAgent.Region>} oldRegions
-     * @param {!Array.<!CSSAgent.Region>} newRegions
-     */
-    _mergeRegions: function(oldRegions, newRegions)
-    {
-        var nodeIdSet = {};
-        for (var i = 0; i < newRegions.length; ++i)
-            nodeIdSet[newRegions[i].nodeId] = true;
-
-        var oldRegionsIndex = 0;
-        var newRegionsIndex = 0;
-        var regionsTreeChildIndex = 0;
-
-        while (oldRegionsIndex < oldRegions.length || newRegionsIndex < newRegions.length) {
-            if (oldRegionsIndex === oldRegions.length) {
-                this._insertRegion(newRegions[newRegionsIndex]);
-                ++newRegionsIndex;
-                continue;
-            }
-
-            if (newRegionsIndex === newRegions.length) {
-                this._regionsTreeItem.removeChildAtIndex(regionsTreeChildIndex);
-                ++oldRegionsIndex;
-                continue;
-            }
-
-            if (oldRegions[oldRegionsIndex].nodeId === newRegions[newRegionsIndex].nodeId) {
-                if (oldRegions[oldRegionsIndex].regionOverset !== newRegions[newRegionsIndex].regionOverset)
-                    this._updateRegionOverset(this._regionsTreeItem.children[regionsTreeChildIndex], newRegions[newRegionsIndex].regionOverset, oldRegions[oldRegionsIndex].regionOverset);
-                ++oldRegionsIndex;
-                ++newRegionsIndex;
-                ++regionsTreeChildIndex;
-                continue;
-            }
-
-            if (nodeIdSet[oldRegions[oldRegionsIndex].nodeId]) {
-                this._insertRegion(newRegions[newRegionsIndex], regionsTreeChildIndex);
-                ++newRegionsIndex;
-                ++regionsTreeChildIndex;
-                continue;
-            }
-
-            this._regionsTreeItem.removeChildAtIndex(regionsTreeChildIndex);
-            ++oldRegionsIndex;
-        }
-    },
-
-    /**
-     * @param {!WebInspector.NamedFlow} newFlow
-     */
-    _update: function(newFlow)
-    {
-        this._mergeContentNodes(this._flow.content, newFlow.content);
-        this._mergeRegions(this._flow.regions, newFlow.regions);
-
-        this._flow = newFlow;
-    },
-
-    __proto__: WebInspector.View.prototype
-}
diff --git a/Source/devtools/front_end/CSSSourceFrame.js b/Source/devtools/front_end/CSSSourceFrame.js
index 06d2d9a..3feba90 100644
--- a/Source/devtools/front_end/CSSSourceFrame.js
+++ b/Source/devtools/front_end/CSSSourceFrame.js
@@ -42,7 +42,7 @@
 WebInspector.CSSSourceFrame.prototype = {
     _registerShortcuts: function()
     {
-        var shortcutKeys = WebInspector.SourcesPanelDescriptor.ShortcutKeys;
+        var shortcutKeys = WebInspector.ShortcutsScreen.SourcesPanelShortcuts;
         for (var i = 0; i < shortcutKeys.IncreaseCSSUnitByOne.length; ++i)
             this.addShortcut(shortcutKeys.IncreaseCSSUnitByOne[i].key, this._handleUnitModification.bind(this, 1));
         for (var i = 0; i < shortcutKeys.DecreaseCSSUnitByOne.length; ++i)
diff --git a/Source/devtools/front_end/CSSStyleModel.js b/Source/devtools/front_end/CSSStyleModel.js
index d2f2fd2..1c8526b 100644
--- a/Source/devtools/front_end/CSSStyleModel.js
+++ b/Source/devtools/front_end/CSSStyleModel.js
@@ -41,8 +41,6 @@
     WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.UndoRedoRequested, this._undoRedoRequested, this);
     WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.UndoRedoCompleted, this._undoRedoCompleted, this);
     WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameCreatedOrNavigated, this._mainFrameCreatedOrNavigated, this);
-    this._namedFlowCollections = {};
-    WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.DocumentUpdated, this._resetNamedFlowCollections, this);
     InspectorBackend.registerCSSDispatcher(new WebInspector.CSSDispatcher(this));
     CSSAgent.enable(this._wasEnabled.bind(this));
     this._resetStyleSheets();
@@ -68,10 +66,6 @@
     StyleSheetChanged: "StyleSheetChanged",
     StyleSheetRemoved: "StyleSheetRemoved",
     MediaQueryResultChanged: "MediaQueryResultChanged",
-    NamedFlowCreated: "NamedFlowCreated",
-    NamedFlowRemoved: "NamedFlowRemoved",
-    RegionLayoutUpdated: "RegionLayoutUpdated",
-    RegionOversetChanged: "RegionOversetChanged"
 }
 
 WebInspector.CSSStyleModel.MediaTypes = ["all", "braille", "embossed", "handheld", "print", "projection", "screen", "speech", "tty", "tv"];
@@ -156,7 +150,7 @@
 
     /**
      * @param {number} nodeId
-     * @param {function(?String, ?Array.<!CSSAgent.PlatformFontUsage>)} callback
+     * @param {function(?string, ?Array.<!CSSAgent.PlatformFontUsage>)} callback
      */
     getPlatformFontsForNode: function(nodeId, callback)
     {
@@ -171,6 +165,14 @@
     },
 
     /**
+     * @return {!Array.<!WebInspector.CSSStyleSheetHeader>}
+     */
+    allStyleSheets: function()
+    {
+        return Object.values(this._styleSheetIdToHeader);
+    },
+
+    /**
      * @param {!DOMAgent.NodeId} nodeId
      * @param {function(?WebInspector.CSSStyleDeclaration, ?WebInspector.CSSStyleDeclaration)} userCallback
      */
@@ -204,65 +206,6 @@
     },
 
     /**
-     * @param {!DOMAgent.NodeId} documentNodeId
-     * @param {function(?WebInspector.NamedFlowCollection)} userCallback
-     */
-    getNamedFlowCollectionAsync: function(documentNodeId, userCallback)
-    {
-        var namedFlowCollection = this._namedFlowCollections[documentNodeId];
-        if (namedFlowCollection) {
-            userCallback(namedFlowCollection);
-            return;
-        }
-
-        /**
-         * @param {function(?WebInspector.NamedFlowCollection)} userCallback
-         * @param {?Protocol.Error} error
-         * @param {?Array.<!CSSAgent.NamedFlow>} namedFlowPayload
-         */
-        function callback(userCallback, error, namedFlowPayload)
-        {
-            if (error || !namedFlowPayload)
-                userCallback(null);
-            else {
-                var namedFlowCollection = new WebInspector.NamedFlowCollection(namedFlowPayload);
-                this._namedFlowCollections[documentNodeId] = namedFlowCollection;
-                userCallback(namedFlowCollection);
-            }
-        }
-
-        CSSAgent.getNamedFlowCollection(documentNodeId, callback.bind(this, userCallback));
-    },
-
-    /**
-     * @param {!DOMAgent.NodeId} documentNodeId
-     * @param {string} flowName
-     * @param {function(?WebInspector.NamedFlow)} userCallback
-     */
-    getFlowByNameAsync: function(documentNodeId, flowName, userCallback)
-    {
-        var namedFlowCollection = this._namedFlowCollections[documentNodeId];
-        if (namedFlowCollection) {
-            userCallback(namedFlowCollection.flowByName(flowName));
-            return;
-        }
-
-        /**
-         * @param {function(?WebInspector.NamedFlow)} userCallback
-         * @param {?WebInspector.NamedFlowCollection} namedFlowCollection
-         */
-        function callback(userCallback, namedFlowCollection)
-        {
-            if (!namedFlowCollection)
-                userCallback(null);
-            else
-                userCallback(namedFlowCollection.flowByName(flowName));
-        }
-
-        this.getNamedFlowCollectionAsync(documentNodeId, callback.bind(this, userCallback));
-    },
-
-    /**
      * @param {!CSSAgent.CSSRuleId} ruleId
      * @param {!DOMAgent.NodeId} nodeId
      * @param {string} newSelector
@@ -277,7 +220,8 @@
          * @param {function()} failureCallback
          * @param {?Protocol.Error} error
          * @param {string} newSelector
-         * @param {?CSSAgent.CSSRule} rulePayload
+         * @param {!CSSAgent.CSSRule} rulePayload
+         * @this {WebInspector.CSSStyleModel}
          */
         function callback(nodeId, successCallback, failureCallback, newSelector, error, rulePayload)
         {
@@ -345,13 +289,11 @@
     addRule: function(nodeId, selector, successCallback, failureCallback)
     {
         /**
-         * @param {function(!WebInspector.CSSRule, boolean)} successCallback
-         * @param {function()} failureCallback
-         * @param {string} selector
          * @param {?Protocol.Error} error
-         * @param {?CSSAgent.CSSRule} rulePayload
+         * @param {!CSSAgent.CSSRule} rulePayload
+         * @this {WebInspector.CSSStyleModel}
          */
-        function callback(successCallback, failureCallback, selector, error, rulePayload)
+        function callback(error, rulePayload)
         {
             this._pendingCommandsMajorState.pop();
             if (error) {
@@ -364,7 +306,7 @@
         }
 
         this._pendingCommandsMajorState.push(true);
-        CSSAgent.addRule(nodeId, selector, callback.bind(this, successCallback, failureCallback, selector));
+        CSSAgent.addRule(nodeId, selector, callback.bind(this));
     },
 
     mediaQueryResultChanged: function()
@@ -490,73 +432,22 @@
     },
 
     /**
-     * @param {!CSSAgent.NamedFlow} namedFlowPayload
-     */
-    _namedFlowCreated: function(namedFlowPayload)
-    {
-        var namedFlow = WebInspector.NamedFlow.parsePayload(namedFlowPayload);
-        var namedFlowCollection = this._namedFlowCollections[namedFlow.documentNodeId];
-
-        if (!namedFlowCollection)
-            return;
-
-        namedFlowCollection._appendNamedFlow(namedFlow);
-        this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.NamedFlowCreated, namedFlow);
-    },
-
-    /**
-     * @param {!DOMAgent.NodeId} documentNodeId
-     * @param {string} flowName
-     */
-    _namedFlowRemoved: function(documentNodeId, flowName)
-    {
-        var namedFlowCollection = this._namedFlowCollections[documentNodeId];
-
-        if (!namedFlowCollection)
-            return;
-
-        namedFlowCollection._removeNamedFlow(flowName);
-        this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.NamedFlowRemoved, { documentNodeId: documentNodeId, flowName: flowName });
-    },
-
-    /**
-     * @param {!CSSAgent.NamedFlow} namedFlowPayload
-     */
-    _regionLayoutUpdated: function(namedFlowPayload)
-    {
-        var namedFlow = WebInspector.NamedFlow.parsePayload(namedFlowPayload);
-        var namedFlowCollection = this._namedFlowCollections[namedFlow.documentNodeId];
-
-        if (!namedFlowCollection)
-            return;
-
-        namedFlowCollection._appendNamedFlow(namedFlow);
-        this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.RegionLayoutUpdated, namedFlow);
-    },
-
-    /**
-     * @param {!CSSAgent.NamedFlow} namedFlowPayload
-     */
-    _regionOversetChanged: function(namedFlowPayload)
-    {
-        var namedFlow = WebInspector.NamedFlow.parsePayload(namedFlowPayload);
-        var namedFlowCollection = this._namedFlowCollections[namedFlow.documentNodeId];
-
-         if (!namedFlowCollection)
-            return;
-
-        namedFlowCollection._appendNamedFlow(namedFlow);
-        this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.RegionOversetChanged, namedFlow);
-    },
-
-    /**
      * @param {!CSSAgent.StyleSheetId} styleSheetId
      * @param {string} newText
      * @param {boolean} majorChange
-     * @param {function(?string)} userCallback
+     * @param {function(?Protocol.Error)} userCallback
      */
     setStyleSheetText: function(styleSheetId, newText, majorChange, userCallback)
     {
+        var header = this._styleSheetIdToHeader[styleSheetId];
+        console.assert(header);
+        this._pendingCommandsMajorState.push(majorChange);
+        header.setContent(newText, callback.bind(this));
+
+        /**
+         * @param {?Protocol.Error} error
+         * @this {WebInspector.CSSStyleModel}
+         */
         function callback(error)
         {
             this._pendingCommandsMajorState.pop();
@@ -566,8 +457,6 @@
             if (!error && userCallback)
                 userCallback(error);
         }
-        this._pendingCommandsMajorState.push(majorChange);
-        CSSAgent.setStyleSheetText(styleSheetId, newText, callback.bind(this));
     },
 
     _undoRedoRequested: function()
@@ -593,11 +482,6 @@
         this._styleSheetIdToHeader = {};
     },
 
-    _resetNamedFlowCollections: function()
-    {
-        this._namedFlowCollections = {};
-    },
-
     updateLocations: function()
     {
         var headers = Object.values(this._styleSheetIdToHeader);
@@ -904,6 +788,7 @@
 
     /**
      * @param {number=} index
+     * @return {!WebInspector.CSSProperty}
      */
     newBlankProperty: function(index)
     {
@@ -952,41 +837,6 @@
     {
         this.insertPropertyAt(this.allProperties.length, name, value, userCallback);
     },
-
-    /**
-     * @param {string} text
-     * @param {function(?WebInspector.CSSStyleDeclaration)=} userCallback
-     */
-    setText: function(text, userCallback)
-    {
-        /**
-         * @param {?string} error
-         * @param {!CSSAgent.CSSStyle} payload
-         */
-        function callback(error, payload)
-        {
-            WebInspector.cssModel._pendingCommandsMajorState.pop();
-            if (!userCallback)
-                return;
-
-            if (error) {
-                console.error(error);
-                userCallback(null);
-            } else
-                userCallback(WebInspector.CSSStyleDeclaration.parsePayload(payload));
-        }
-
-        if (!this.id)
-            throw "No style id";
-
-        if (typeof this.cssText === "undefined") {
-            userCallback(null);
-            return;
-        }
-
-        WebInspector.cssModel._pendingCommandsMajorState.push(true);
-        CSSAgent.setStyleText(this.id, text, callback);
-    }
 }
 
 /**
@@ -1180,8 +1030,6 @@
     },
 
     /**
-     * Replaces "propertyName: propertyValue [!important];" in the stylesheet by an arbitrary propertyText.
-     *
      * @param {string} propertyText
      * @param {boolean} majorChange
      * @param {boolean} overwrite
@@ -1201,6 +1049,7 @@
         /**
          * @param {?string} error
          * @param {!CSSAgent.CSSStyle} stylePayload
+         * @this {WebInspector.CSSProperty}
          */
         function callback(error, stylePayload)
         {
@@ -1208,7 +1057,6 @@
             if (!error) {
                 if (majorChange)
                     WebInspector.domAgent.markUndoableState();
-                this.text = propertyText;
                 var style = WebInspector.CSSStyleDeclaration.parsePayload(stylePayload);
                 var newProperty = style.allProperties[this.index];
 
@@ -1216,7 +1064,6 @@
                     newProperty.setDisabled(false, enabledCallback);
                     return;
                 }
-
                 if (userCallback)
                     userCallback(style);
             } else {
@@ -1256,33 +1103,15 @@
     {
         if (!this.ownerStyle && userCallback)
             userCallback(null);
-        if (disabled === this.disabled && userCallback)
-            userCallback(this.ownerStyle);
-
-        /**
-         * @param {?string} error
-         * @param {!CSSAgent.CSSStyle} stylePayload
-         */
-        function callback(error, stylePayload)
-        {
-            WebInspector.cssModel._pendingCommandsMajorState.pop();
-            if (error) {
-                if (userCallback)
-                    userCallback(null);
-                return;
-            }
-            WebInspector.domAgent.markUndoableState();
-            if (userCallback) {
-                var style = WebInspector.CSSStyleDeclaration.parsePayload(stylePayload);
-                userCallback(style);
-            }
+        if (disabled === this.disabled) {
+            if (userCallback)
+                userCallback(this.ownerStyle);
+            return;
         }
-
-        if (!this.ownerStyle.id)
-            throw "No owner style id";
-
-        WebInspector.cssModel._pendingCommandsMajorState.push(false);
-        CSSAgent.toggleProperty(this.ownerStyle.id, this.index, disabled, callback.bind(this));
+        if (disabled)
+            this.setText("/* " + this.text + " */", true, true, userCallback);
+        else
+            this.setText(this.text.substring(2, this.text.length - 2).trim(), true, true, userCallback);
     },
 
     /**
@@ -1508,6 +1337,7 @@
 
     /**
      * @override
+     * @return {string}
      */
     contentURL: function()
     {
@@ -1516,6 +1346,7 @@
 
     /**
      * @override
+     * @return {!WebInspector.ResourceType}
      */
     contentType: function()
     {
@@ -1523,12 +1354,26 @@
     },
 
     /**
+     * @param {string} text
+     * @return {string}
+     */
+    _trimSourceURL: function(text)
+    {
+        var sourceURLRegex = /\n[\040\t]*\/\*[#@][\040\t]sourceURL=[\040\t]*([^\s]*)[\040\t]*\*\/[\040\t]*$/mg;
+        return text.replace(sourceURLRegex, "");
+    },
+
+    /**
      * @override
+     * @param {function(?string)} callback
      */
     requestContent: function(callback)
     {
         CSSAgent.getStyleSheetText(this.id, textCallback.bind(this));
 
+        /**
+         * @this {WebInspector.CSSStyleSheetHeader}
+         */
         function textCallback(error, text)
         {
             if (error) {
@@ -1536,6 +1381,7 @@
                 text = "";
                 // Fall through.
             }
+            text = this._trimSourceURL(text);
             callback(text);
         }
     },
@@ -1552,26 +1398,37 @@
 
         // searchInContent should call back later.
         this.requestContent(performSearch);
-    }
+    },
+
+    /**
+     * @param {string} newText
+     * @param {function(?Protocol.Error)} callback
+     */
+    setContent: function(newText, callback)
+    {
+        newText = this._trimSourceURL(newText);
+        if (this.hasSourceURL)
+            newText += "\n/*# sourceURL=" + this.sourceURL + " */";
+        CSSAgent.setStyleSheetText(this.id, newText, callback);
+    },
 }
 
 /**
  * @constructor
- * @param {!CSSAgent.CSSStyleSheetBody} payload
+ * @param {!CSSAgent.StyleSheetId} styleSheetId
+ * @param {!Array.<!CSSAgent.CSSRule>} payload
  */
-WebInspector.CSSStyleSheet = function(payload)
+WebInspector.CSSStyleSheet = function(styleSheetId, payload)
 {
-    this.id = payload.styleSheetId;
+    this.id = styleSheetId;
     this.rules = [];
     this.styles = {};
-    for (var i = 0; i < payload.rules.length; ++i) {
-        var rule = WebInspector.CSSRule.parsePayload(payload.rules[i]);
+    for (var i = 0; i < payload.length; ++i) {
+        var rule = WebInspector.CSSRule.parsePayload(payload[i]);
         this.rules.push(rule);
         if (rule.style)
             this.styles[rule.style.id] = rule.style;
     }
-    if ("text" in payload)
-        this._text = payload.text;
 }
 
 /**
@@ -1589,43 +1446,9 @@
         if (error)
             userCallback(null);
         else
-            userCallback(new WebInspector.CSSStyleSheet(styleSheetPayload));
+            userCallback(new WebInspector.CSSStyleSheet(styleSheetId, styleSheetPayload.rules));
     }
-    CSSAgent.getStyleSheet(styleSheetId, callback.bind(this));
-}
-
-WebInspector.CSSStyleSheet.prototype = {
-    /**
-     * @return {string|undefined}
-     */
-    getText: function()
-    {
-        return this._text;
-    },
-
-    /**
-     * @param {string} newText
-     * @param {boolean} majorChange
-     * @param {function(?string)=} userCallback
-     */
-    setText: function(newText, majorChange, userCallback)
-    {
-        /**
-         * @param {?string} error
-         */
-        function callback(error)
-        {
-            if (!error)
-                WebInspector.domAgent.markUndoableState();
-
-            WebInspector.cssModel._pendingCommandsMajorState.pop();
-            if (userCallback)
-                userCallback(error);
-        }
-
-        WebInspector.cssModel._pendingCommandsMajorState.push(majorChange);
-        CSSAgent.setStyleSheetText(this.id, newText, callback.bind(this));
-    }
+    CSSAgent.getStyleSheet(styleSheetId, callback);
 }
 
 /**
@@ -1667,107 +1490,6 @@
     {
         this._cssModel._styleSheetRemoved(id);
     },
-
-    /**
-     * @param {!CSSAgent.NamedFlow} namedFlowPayload
-     */
-    namedFlowCreated: function(namedFlowPayload)
-    {
-        this._cssModel._namedFlowCreated(namedFlowPayload);
-    },
-
-    /**
-     * @param {!DOMAgent.NodeId} documentNodeId
-     * @param {string} flowName
-     */
-    namedFlowRemoved: function(documentNodeId, flowName)
-    {
-        this._cssModel._namedFlowRemoved(documentNodeId, flowName);
-    },
-
-    /**
-     * @param {!CSSAgent.NamedFlow} namedFlowPayload
-     */
-    regionLayoutUpdated: function(namedFlowPayload)
-    {
-        this._cssModel._regionLayoutUpdated(namedFlowPayload);
-    },
-
-    /**
-     * @param {!CSSAgent.NamedFlow} namedFlowPayload
-     */
-    regionOversetChanged: function(namedFlowPayload)
-    {
-        this._cssModel._regionOversetChanged(namedFlowPayload);
-    }
-}
-
-/**
- * @constructor
- * @param {!CSSAgent.NamedFlow} payload
- */
-WebInspector.NamedFlow = function(payload)
-{
-    this.documentNodeId = payload.documentNodeId;
-    this.name = payload.name;
-    this.overset = payload.overset;
-    this.content = payload.content;
-    this.regions = payload.regions;
-}
-
-/**
- * @param {!CSSAgent.NamedFlow} payload
- * @return {!WebInspector.NamedFlow}
- */
-WebInspector.NamedFlow.parsePayload = function(payload)
-{
-    return new WebInspector.NamedFlow(payload);
-}
-
-/**
- * @constructor
- * @param {!Array.<!CSSAgent.NamedFlow>} payload
- */
-WebInspector.NamedFlowCollection = function(payload)
-{
-    /** @type {!Object.<string, !WebInspector.NamedFlow>} */
-    this.namedFlowMap = {};
-
-    for (var i = 0; i < payload.length; ++i) {
-        var namedFlow = WebInspector.NamedFlow.parsePayload(payload[i]);
-        this.namedFlowMap[namedFlow.name] = namedFlow;
-    }
-}
-
-WebInspector.NamedFlowCollection.prototype = {
-    /**
-     * @param {!WebInspector.NamedFlow} namedFlow
-     */
-    _appendNamedFlow: function(namedFlow)
-    {
-        this.namedFlowMap[namedFlow.name] = namedFlow;
-    },
-
-    /**
-     * @param {string} flowName
-     */
-    _removeNamedFlow: function(flowName)
-    {
-        delete this.namedFlowMap[flowName];
-    },
-
-    /**
-     * @param {string} flowName
-     * @return {?WebInspector.NamedFlow}
-     */
-    flowByName: function(flowName)
-    {
-        var namedFlow = this.namedFlowMap[flowName];
-
-        if (!namedFlow)
-            return null;
-        return namedFlow;
-    }
 }
 
 /**
@@ -1811,6 +1533,7 @@
          * @param {!DOMAgent.NodeId} nodeId
          * @param {?Protocol.Error} error
          * @param {!Array.<!CSSAgent.CSSComputedStyleProperty>} computedPayload
+         * @this {WebInspector.CSSStyleModel.ComputedStyleLoader}
          */
         function resultCallback(nodeId, error, computedPayload)
         {
@@ -1829,6 +1552,6 @@
 }
 
 /**
- * @type {?WebInspector.CSSStyleModel}
+ * @type {!WebInspector.CSSStyleModel}
  */
-WebInspector.cssModel = null;
+WebInspector.cssModel;
diff --git a/Source/devtools/front_end/CallStackSidebarPane.js b/Source/devtools/front_end/CallStackSidebarPane.js
index 15a0121..59ebe18 100644
--- a/Source/devtools/front_end/CallStackSidebarPane.js
+++ b/Source/devtools/front_end/CallStackSidebarPane.js
@@ -33,11 +33,12 @@
     this.bodyElement.addEventListener("keydown", this._keyDown.bind(this), true);
     this.bodyElement.tabIndex = 0;
 
-    var asyncCheckbox = this.titleElement.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Async"), WebInspector.settings.enableAsyncStackTraces, true, undefined, WebInspector.UIString("Capture async stack traces")));
-    asyncCheckbox.classList.add("scripts-callstack-async");
-    asyncCheckbox.addEventListener("click", consumeEvent, false);
-
-    WebInspector.settings.enableAsyncStackTraces.addChangeListener(this._asyncStackTracesStateChanged, this);
+    if (WebInspector.experimentsSettings.asyncStackTraces.isEnabled()) {
+        var asyncCheckbox = this.titleElement.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Async"), WebInspector.settings.enableAsyncStackTraces, true, undefined, WebInspector.UIString("Capture async stack traces")));
+        asyncCheckbox.classList.add("scripts-callstack-async");
+        asyncCheckbox.addEventListener("click", consumeEvent, false);
+        WebInspector.settings.enableAsyncStackTraces.addChangeListener(this._asyncStackTracesStateChanged, this);
+    }
 }
 
 WebInspector.CallStackSidebarPane.Events = {
@@ -66,8 +67,13 @@
         this._appendSidebarPlacards(callFrames);
 
         while (asyncStackTrace) {
-            var title = "[" + (asyncStackTrace.description || WebInspector.UIString("Async Call")) + "]";
+            var title = asyncStackTrace.description;
+            if (title)
+                title += " " + WebInspector.UIString("(async)");
+            else
+                title = WebInspector.UIString("Async Call");
             var asyncPlacard = new WebInspector.Placard(title, "");
+            asyncPlacard.element.classList.add("placard-label");
             this.bodyElement.appendChild(asyncPlacard.element);
             this._appendSidebarPlacards(asyncStackTrace.callFrames, asyncPlacard);
             asyncStackTrace = asyncStackTrace.asyncStackTrace;
@@ -100,7 +106,7 @@
     {
         var contextMenu = new WebInspector.ContextMenu(event);
 
-        if (!placard._callFrame.isAsync() && WebInspector.debuggerModel.canSetScriptSource())
+        if (!placard._callFrame.isAsync())
             contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Restart frame" : "Restart Frame"), this._restartFrame.bind(this, placard));
 
         contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Copy stack trace" : "Copy Stack Trace"), this._copyStackTrace.bind(this));
@@ -161,9 +167,8 @@
     {
         var index = this._selectedCallFrameIndex();
         if (index === -1)
-            return true;
-        this._selectPlacardByIndex(index + 1);
-        return true;
+            return false;
+        return this._selectPlacardByIndex(index + 1);
     },
 
     /**
@@ -173,19 +178,20 @@
     {
         var index = this._selectedCallFrameIndex();
         if (index === -1)
-            return true;
-        this._selectPlacardByIndex(index - 1);
-        return true;
+            return false;
+        return this._selectPlacardByIndex(index - 1);
     },
 
     /**
      * @param {number} index
+     * @return {boolean}
      */
     _selectPlacardByIndex: function(index)
     {
         if (index < 0 || index >= this.placards.length)
-            return;
-        this._placardSelected(this.placards[index])
+            return false;
+        this._placardSelected(this.placards[index]);
+        return true;
     },
 
     /**
@@ -209,6 +215,7 @@
      */
     _placardSelected: function(placard)
     {
+        placard.element.scrollIntoViewIfNeeded();
         this.dispatchEventToListeners(WebInspector.CallStackSidebarPane.Events.CallFrameSelected, placard._callFrame);
     },
 
@@ -228,8 +235,8 @@
      */
     registerShortcuts: function(registerShortcutDelegate)
     {
-        registerShortcutDelegate(WebInspector.SourcesPanelDescriptor.ShortcutKeys.NextCallFrame, this._selectNextCallFrameOnStack.bind(this));
-        registerShortcutDelegate(WebInspector.SourcesPanelDescriptor.ShortcutKeys.PrevCallFrame, this._selectPreviousCallFrameOnStack.bind(this));
+        registerShortcutDelegate(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.NextCallFrame, this._selectNextCallFrameOnStack.bind(this));
+        registerShortcutDelegate(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.PrevCallFrame, this._selectPreviousCallFrameOnStack.bind(this));
     },
 
     /**
@@ -251,14 +258,8 @@
     {
         if (event.altKey || event.shiftKey || event.metaKey || event.ctrlKey)
             return;
-
-        if (event.keyIdentifier === "Up") {
-            this._selectPreviousCallFrameOnStack();
-            event.consume();
-        } else if (event.keyIdentifier === "Down") {
-            this._selectNextCallFrameOnStack();
-            event.consume();
-        }
+        if (event.keyIdentifier === "Up" && this._selectPreviousCallFrameOnStack() || event.keyIdentifier === "Down" && this._selectNextCallFrameOnStack())
+            event.consume(true);
     },
 
     __proto__: WebInspector.SidebarPane.prototype
diff --git a/Source/devtools/front_end/CanvasProfileView.js b/Source/devtools/front_end/CanvasProfileView.js
index e0c17ef..15d9a72 100644
--- a/Source/devtools/front_end/CanvasProfileView.js
+++ b/Source/devtools/front_end/CanvasProfileView.js
@@ -44,20 +44,20 @@
     this._linkifier = new WebInspector.Linkifier();
 
     const defaultReplayLogWidthPercent = 0.34;
-    this._replayInfoSplitView = new WebInspector.SplitView(true, "canvasProfileViewReplaySplitLocation", defaultReplayLogWidthPercent);
+    this._replayInfoSplitView = new WebInspector.SplitView(true, true, "canvasProfileViewReplaySplitLocation", defaultReplayLogWidthPercent);
     this._replayInfoSplitView.setMainElementConstraints(defaultReplayLogWidthPercent, defaultReplayLogWidthPercent);
     this._replayInfoSplitView.show(this.element);
 
-    this._imageSplitView = new WebInspector.SplitView(false, "canvasProfileViewSplitLocation", 300);
-    this._imageSplitView.show(this._replayInfoSplitView.firstElement());
+    this._imageSplitView = new WebInspector.SplitView(false, true, "canvasProfileViewSplitLocation", 300);
+    this._imageSplitView.show(this._replayInfoSplitView.mainElement());
 
-    var replayImageContainer = this._imageSplitView.firstElement().createChild("div");
+    var replayImageContainer = this._imageSplitView.mainElement().createChild("div");
     replayImageContainer.id = "canvas-replay-image-container";
     this._replayImageElement = replayImageContainer.createChild("img", "canvas-replay-image");
     this._debugInfoElement = replayImageContainer.createChild("div", "canvas-debug-info hidden");
     this._spinnerIcon = replayImageContainer.createChild("img", "canvas-spinner-icon hidden");
 
-    var replayLogContainer = this._imageSplitView.secondElement();
+    var replayLogContainer = this._imageSplitView.sidebarElement();
     var controlsContainer = replayLogContainer.createChild("div", "status-bar");
     var logGridContainer = replayLogContainer.createChild("div", "canvas-replay-log");
 
@@ -75,7 +75,7 @@
     this._installReplayInfoSidebarWidgets(controlsContainer);
 
     this._replayStateView = new WebInspector.CanvasReplayStateView(this._traceLogPlayer);
-    this._replayStateView.show(this._replayInfoSplitView.secondElement());
+    this._replayStateView.show(this._replayInfoSplitView.sidebarElement());
 
     /** @type {!Object.<string, boolean>} */
     this._replayContexts = {};
@@ -143,6 +143,9 @@
         controlsContainer.appendChild(this._toggleReplayStateSidebarButton.element);
         this._enableReplayInfoSidebar(false);
 
+        /**
+         * @this {WebInspector.CanvasProfileView}
+         */
         function clickHandler()
         {
             this._enableReplayInfoSidebar(this._toggleReplayStateSidebarButton.state === "left");
@@ -161,7 +164,7 @@
         } else {
             this._toggleReplayStateSidebarButton.state = "left";
             this._toggleReplayStateSidebarButton.title = WebInspector.UIString("Show sidebar.");
-            this._replayInfoSplitView.showOnlyFirst();
+            this._replayInfoSplitView.hideSidebar();
         }
         this._replayInfoResizeWidgetElement.enableStyleClass("hidden", !show);
     },
@@ -205,6 +208,7 @@
 
         /**
          * @param {?CanvasAgent.ResourceState} resourceState
+         * @this {WebInspector.CanvasProfileView}
          */
         function didReceiveResourceState(resourceState)
         {
@@ -305,13 +309,14 @@
         /**
          * @param {?CanvasAgent.ResourceState} resourceState
          * @param {number} replayTime
+         * @this {WebInspector.CanvasProfileView}
          */
         function didReplayTraceLog(resourceState, replayTime)
         {
             delete this._pendingReplayTraceLogEvent;
             this._enableWaitIcon(false);
 
-            this._debugInfoElement.textContent = "Replay time: " + Number.secondsToString(replayTime / 1000, true);
+            this._debugInfoElement.textContent = WebInspector.UIString("Replay time: %s", Number.secondsToString(replayTime / 1000, true));
             this._onReplayContextChanged();
 
             if (index !== this._selectedCallIndex())
@@ -328,6 +333,7 @@
     {
         /**
          * @param {?CanvasAgent.TraceLog} traceLog
+         * @this {WebInspector.CanvasProfileView}
          */
         function didReceiveTraceLog(traceLog)
         {
@@ -395,7 +401,7 @@
                 var index = rootNode.children.length;
                 var data = {};
                 data[0] = "";
-                data[1] = "Frame #" + (index + 1);
+                data[1] = WebInspector.UIString("Frame #%d", index + 1);
                 data[2] = "";
                 frameNode = new WebInspector.DataGridNode(data);
                 frameNode.selectable = true;
@@ -424,7 +430,7 @@
             var index = self._drawCallGroupsCount || 0;
             var data = {};
             data[0] = "";
-            data[1] = "Draw call group #" + (index + 1);
+            data[1] = WebInspector.UIString("Draw call group #%d", index + 1);
             data[2] = "";
             var node = new WebInspector.DataGridNode(data);
             node.selectable = true;
@@ -537,6 +543,7 @@
          * @param {?Protocol.Error} error
          * @param {!RuntimeAgent.RemoteObject=} result
          * @param {!CanvasAgent.ResourceState=} resourceState
+         * @this {WebInspector.CanvasProfileView}
          */
         function showObjectPopover(error, result, resourceState)
         {
@@ -619,7 +626,6 @@
 WebInspector.CanvasProfileType = function()
 {
     WebInspector.ProfileType.call(this, WebInspector.CanvasProfileType.TypeId, WebInspector.UIString("Capture Canvas Frame"));
-    this._nextProfileUid = 1;
     this._recording = false;
     this._lastProfileHeader = null;
 
@@ -637,9 +643,9 @@
     this._frameSelector = new WebInspector.StatusBarComboBox(this._dispatchViewUpdatedEvent.bind(this));
     this._frameSelector.element.title = WebInspector.UIString("Frame containing the canvases to capture.");
     this._frameSelector.element.classList.add("hidden");
-    WebInspector.runtimeModel.contextLists().forEach(this._addFrame, this);
-    WebInspector.runtimeModel.addEventListener(WebInspector.RuntimeModel.Events.FrameExecutionContextListAdded, this._frameAdded, this);
-    WebInspector.runtimeModel.addEventListener(WebInspector.RuntimeModel.Events.FrameExecutionContextListRemoved, this._frameRemoved, this);
+    WebInspector.resourceTreeModel.frames().forEach(this._addFrame, this);
+    WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.FrameAdded, this._frameAdded, this);
+    WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.FrameDetached, this._frameRemoved, this);
 
     this._dispatcher = new WebInspector.CanvasDispatcher(this);
     this._canvasAgentEnabled = false;
@@ -721,8 +727,7 @@
     {
         if (error || this._lastProfileHeader && this._lastProfileHeader.traceLogId() === traceLogId)
             return;
-        var profileHeader = new WebInspector.CanvasProfileHeader(this, WebInspector.UIString("Trace Log %d", this._nextProfileUid), this._nextProfileUid, traceLogId, frameId);
-        ++this._nextProfileUid;
+        var profileHeader = new WebInspector.CanvasProfileHeader(this, traceLogId, frameId);
         this._lastProfileHeader = profileHeader;
         this.addProfile(profileHeader);
         profileHeader._updateCapturingStatus();
@@ -749,15 +754,6 @@
 
     /**
      * @override
-     */
-    _reset: function()
-    {
-        WebInspector.ProfileType.prototype._reset.call(this);
-        this._nextProfileUid = 1;
-    },
-
-    /**
-     * @override
      * @param {!WebInspector.ProfileHeader} profile
      */
     removeProfile: function(profile)
@@ -811,8 +807,10 @@
     {
         if (this._canvasAgentEnabled === enable)
             return;
+
         /**
          * @param {?Protocol.Error} error
+         * @this {WebInspector.CanvasProfileType}
          */
         function callback(error)
         {
@@ -841,19 +839,19 @@
      */
     _frameAdded: function(event)
     {
-        var contextList = /** @type {!WebInspector.FrameExecutionContextList} */ (event.data);
-        this._addFrame(contextList);
+        var frame = /** @type {!WebInspector.ResourceTreeFrame} */ (event.data);
+        this._addFrame(frame);
     },
 
     /**
-     * @param {!WebInspector.FrameExecutionContextList} contextList
+     * @param {!WebInspector.ResourceTreeFrame} frame
      */
-    _addFrame: function(contextList)
+    _addFrame: function(frame)
     {
-        var frameId = contextList.frameId;
+        var frameId = frame.id;
         var option = document.createElement("option");
-        option.text = contextList.displayName;
-        option.title = contextList.url;
+        option.text = frame.displayName();
+        option.title = frame.url;
         option.value = frameId;
 
         this._frameOptions[frameId] = option;
@@ -869,8 +867,8 @@
      */
     _frameRemoved: function(event)
     {
-        var contextList = /** @type {!WebInspector.FrameExecutionContextList} */ (event.data);
-        var frameId = contextList.frameId;
+        var frame = /** @type {!WebInspector.ResourceTreeFrame} */ (event.data);
+        var frameId = frame.id;
         var option = this._frameOptions[frameId];
         if (option && this._framesWithCanvases[frameId]) {
             this._frameSelector.removeOption(option);
@@ -987,14 +985,12 @@
  * @constructor
  * @extends {WebInspector.ProfileHeader}
  * @param {!WebInspector.CanvasProfileType} type
- * @param {string} title
- * @param {number=} uid
  * @param {!CanvasAgent.TraceLogId=} traceLogId
  * @param {!PageAgent.FrameId=} frameId
  */
-WebInspector.CanvasProfileHeader = function(type, title, uid, traceLogId, frameId)
+WebInspector.CanvasProfileHeader = function(type, traceLogId, frameId)
 {
-    WebInspector.ProfileHeader.call(this, type, title, uid);
+    WebInspector.ProfileHeader.call(this, type, WebInspector.UIString("Trace Log %d", traceLogId));
     /** @type {!CanvasAgent.TraceLogId} */
     this._traceLogId = traceLogId || "";
     this._frameId = frameId;
@@ -1039,9 +1035,9 @@
 
     /**
      * @override
-     * @param {!WebInspector.ProfilesPanel} profilesPanel
+     * @return {!WebInspector.CanvasProfileView}
      */
-    createView: function(profilesPanel)
+    createView: function()
     {
         return new WebInspector.CanvasProfileView(this);
     },
@@ -1062,7 +1058,7 @@
      */
     _updateCapturingStatus: function(traceLog)
     {
-        if (!this.sidebarElement || !this._traceLogId)
+        if (!this._traceLogId)
             return;
 
         if (traceLog) {
@@ -1070,8 +1066,8 @@
             this._traceLogSize = traceLog.totalAvailableCalls;
         }
 
-        this.sidebarElement.subtitle = this._alive ? WebInspector.UIString("Capturing\u2026 %d calls", this._traceLogSize) : WebInspector.UIString("Captured %d calls", this._traceLogSize);
-        this.sidebarElement.wait = this._alive;
+        var subtitle = this._alive ? WebInspector.UIString("Capturing\u2026 %d calls", this._traceLogSize) : WebInspector.UIString("Captured %d calls", this._traceLogSize);
+        this.updateStatus(subtitle, this._alive);
 
         if (this._alive) {
             clearTimeout(this._requestStatusTimer);
@@ -1083,6 +1079,7 @@
     {
         /**
          * @param {?CanvasAgent.TraceLog} traceLog
+         * @this {WebInspector.CanvasProfileHeader}
          */
         function didReceiveTraceLog(traceLog)
         {
@@ -1183,6 +1180,7 @@
         /**
          * @param {?Protocol.Error} error
          * @param {!CanvasAgent.TraceLog} traceLog
+         * @this {WebInspector.CanvasTraceLogPlayerProxy}
          */
         function callback(error, traceLog)
         {
@@ -1214,13 +1212,16 @@
             userCallback(null); // Has not been replayed yet.
             return;
         }
-        if (this._currentResourceStates[resourceId]) {
-            userCallback(this._currentResourceStates[resourceId]);
+        var effectiveResourceId = /** @type {!CanvasAgent.ResourceId} */ (resourceId);
+        if (this._currentResourceStates[effectiveResourceId]) {
+            userCallback(this._currentResourceStates[effectiveResourceId]);
             return;
         }
+
         /**
          * @param {?Protocol.Error} error
          * @param {!CanvasAgent.ResourceState} resourceState
+         * @this {WebInspector.CanvasTraceLogPlayerProxy}
          */
         function callback(error, resourceState)
         {
@@ -1228,11 +1229,11 @@
                 userCallback(null);
                 return;
             }
-            this._currentResourceStates[resourceId] = resourceState;
+            this._currentResourceStates[effectiveResourceId] = resourceState;
             userCallback(resourceState);
             this.dispatchEventToListeners(WebInspector.CanvasTraceLogPlayerProxy.Events.CanvasResourceStateReceived, resourceState);
         }
-        CanvasAgent.getResourceState(this._traceLogId, resourceId, callback.bind(this));
+        CanvasAgent.getResourceState(this._traceLogId, effectiveResourceId, callback.bind(this));
     },
 
     /**
@@ -1245,6 +1246,7 @@
          * @param {?Protocol.Error} error
          * @param {!CanvasAgent.ResourceState} resourceState
          * @param {number} replayTime
+         * @this {WebInspector.CanvasTraceLogPlayerProxy}
          */
         function callback(error, resourceState, replayTime)
         {
diff --git a/Source/devtools/front_end/CanvasReplayStateView.js b/Source/devtools/front_end/CanvasReplayStateView.js
index caa85bb..863951f 100644
--- a/Source/devtools/front_end/CanvasReplayStateView.js
+++ b/Source/devtools/front_end/CanvasReplayStateView.js
@@ -54,7 +54,7 @@
 
     /** @type {!Object.<string, !Object.<string, boolean>>} */
     this._gridNodesExpandedState = {};
-    /** @type {!Object.<string, {scrollTop:number, scrollLeft:number}>} */
+    /** @type {!Object.<string, !{scrollTop: number, scrollLeft: number}>} */
     this._gridScrollPositions = {};
 
     /** @type {?CanvasAgent.ResourceId} */
@@ -262,8 +262,10 @@
     {
         this._updateCurrentOption();
         var selectedResourceId = this._resourceSelector.selectedOption().value;
+
         /**
          * @param {?CanvasAgent.ResourceState} resourceState
+         * @this {WebInspector.CanvasReplayStateView}
          */
         function didReceiveResourceState(resourceState)
         {
@@ -280,8 +282,8 @@
     _onCanvasTraceLogReceived: function(event)
     {
         var traceLog = /** @type {!CanvasAgent.TraceLog} */ (event.data);
-        if (traceLog)
-            this._collectResourcesFromTraceLog(traceLog);
+        console.assert(traceLog);
+        this._collectResourcesFromTraceLog(traceLog);
     },
 
     /**
@@ -290,8 +292,8 @@
     _onCanvasResourceStateReceived: function(event)
     {
         var resourceState = /** @type {!CanvasAgent.ResourceState} */ (event.data);
-        if (resourceState)
-            this._collectResourcesFromResourceState(resourceState);
+        console.assert(resourceState);
+        this._collectResourcesFromResourceState(resourceState);
     },
 
     /**
@@ -350,6 +352,7 @@
          * @param {!Array.<!CanvasAgent.ResourceStateDescriptor>|undefined} descriptors
          * @param {!WebInspector.DataGridNode} parent
          * @param {!Object=} nameToOldChildren
+         * @this {WebInspector.CanvasReplayStateView}
          */
         function appendResourceStateDescriptors(descriptors, parent, nameToOldChildren)
         {
@@ -381,16 +384,14 @@
      */
     _updateDataGridHighlights: function(nodes)
     {
-        for (var i = 0, n = this._highlightedGridNodes.length; i < n; ++i) {
-            var node = this._highlightedGridNodes[i];
-            node.element.classList.remove("canvas-grid-node-highlighted");
-        }
+        for (var i = 0, n = this._highlightedGridNodes.length; i < n; ++i)
+            this._highlightedGridNodes[i].element.classList.remove("canvas-grid-node-highlighted");
 
         this._highlightedGridNodes = nodes;
 
         for (var i = 0, n = this._highlightedGridNodes.length; i < n; ++i) {
             var node = this._highlightedGridNodes[i];
-            node.element.classList.add("canvas-grid-node-highlighted");
+            WebInspector.runCSSAnimationOnce(node.element, "canvas-grid-node-highlighted");
             node.reveal();
         }
     },
diff --git a/Source/devtools/front_end/CodeMirrorTextEditor.js b/Source/devtools/front_end/CodeMirrorTextEditor.js
index cd74282..4a4d63a 100644
--- a/Source/devtools/front_end/CodeMirrorTextEditor.js
+++ b/Source/devtools/front_end/CodeMirrorTextEditor.js
@@ -151,12 +151,21 @@
     this._codeMirror.on("beforeChange", this._beforeChange.bind(this));
     this._codeMirror.on("gutterClick", this._gutterClick.bind(this));
     this._codeMirror.on("cursorActivity", this._cursorActivity.bind(this));
+    this._codeMirror.on("beforeSelectionChange", this._beforeSelectionChange.bind(this));
     this._codeMirror.on("scroll", this._scroll.bind(this));
     this._codeMirror.on("focus", this._focus.bind(this));
     this._codeMirror.on("blur", this._blur.bind(this));
     this.element.addEventListener("contextmenu", this._contextMenu.bind(this), false);
+    /**
+     * @this {WebInspector.CodeMirrorTextEditor}
+     */
+    function updateAnticipateJumpFlag(value)
+    {
+        this._isHandlingMouseDownEvent = value;
+    }
+    this.element.addEventListener("mousedown", updateAnticipateJumpFlag.bind(this, true), true);
+    this.element.addEventListener("mousedown", updateAnticipateJumpFlag.bind(this, false), false);
 
-    this.element.classList.add("fill");
     this.element.style.overflow = "hidden";
     this.element.firstChild.classList.add("source-code");
     this.element.firstChild.classList.add("fill");
@@ -165,12 +174,18 @@
 
     this.element.addEventListener("focus", this._handleElementFocus.bind(this), false);
     this.element.addEventListener("keydown", this._handleKeyDown.bind(this), true);
+    this.element.addEventListener("keydown", this._handlePostKeyDown.bind(this), false);
     this.element.tabIndex = 0;
 
-    this._setupSelectionColor();
     this._setupWhitespaceHighlight();
 }
 
+/** @typedef {{canceled: boolean, from: CodeMirror.Pos, to: CodeMirror.Pos, text: string, origin: string, cancel: function()}} */
+WebInspector.CodeMirrorTextEditor.BeforeChangeObject;
+
+/** @typedef {{from: CodeMirror.Pos, to: CodeMirror.Pos, origin: string, text: !Array.<string>, removed: !Array.<string>}} */
+WebInspector.CodeMirrorTextEditor.ChangeObject;
+
 WebInspector.CodeMirrorTextEditor.maxHighlightLength = 1000;
 
 WebInspector.CodeMirrorTextEditor.autocompleteCommand = function(codeMirror)
@@ -185,7 +200,7 @@
 
     function countIndent(line)
     {
-        for(var i = 0; i < line.length; ++i) {
+        for (var i = 0; i < line.length; ++i) {
             if (!WebInspector.TextUtils.isSpaceChar(line[i]))
                 return i;
         }
@@ -211,6 +226,7 @@
     codemirror.execCommand("undo");
     var cursor = codemirror.getCursor("start");
     codemirror._codeMirrorTextEditor._innerRevealLine(cursor.line, scrollInfo);
+    codemirror._codeMirrorTextEditor._autocompleteController.finishAutocomplete();
 }
 
 CodeMirror.commands.redoAndReveal = function(codemirror)
@@ -219,6 +235,7 @@
     codemirror.execCommand("redo");
     var cursor = codemirror.getCursor("start");
     codemirror._codeMirrorTextEditor._innerRevealLine(cursor.line, scrollInfo);
+    codemirror._codeMirrorTextEditor._autocompleteController.finishAutocomplete();
 }
 
 WebInspector.CodeMirrorTextEditor.LongLineModeLineLengthThreshold = 2000;
@@ -232,6 +249,9 @@
 
     wasShown: function()
     {
+        if (this._wasOnceShown)
+            return;
+        this._wasOnceShown = true;
         this._codeMirror.refresh();
     },
 
@@ -312,6 +332,9 @@
      */
     highlightSearchResults: function(regex, range)
     {
+        /**
+         * @this {WebInspector.CodeMirrorTextEditor}
+         */
         function innerHighlightRegex()
         {
             if (range) {
@@ -326,12 +349,18 @@
             }
             this._tokenHighlighter.highlightSearchResults(regex, range);
         }
+        if (!this._selectionBeforeSearch)
+            this._selectionBeforeSearch = this.selection();
         this._codeMirror.operation(innerHighlightRegex.bind(this));
     },
 
     cancelSearchResultsHighlight: function()
     {
         this._codeMirror.operation(this._tokenHighlighter.highlightSelectedTokens.bind(this._tokenHighlighter));
+        if (this._selectionBeforeSearch) {
+            this._reportJump(this._selectionBeforeSearch, this.selection());
+            delete this._selectionBeforeSearch;
+        }
     },
 
     undo: function()
@@ -344,23 +373,6 @@
         this._codeMirror.redo();
     },
 
-    _setupSelectionColor: function()
-    {
-        if (WebInspector.CodeMirrorTextEditor._selectionStyleInjected)
-            return;
-        WebInspector.CodeMirrorTextEditor._selectionStyleInjected = true;
-        var backgroundColor = WebInspector.getSelectionBackgroundColor();
-        var backgroundColorRule = backgroundColor ? ".CodeMirror .CodeMirror-selected { background-color: " + backgroundColor + ";}" : "";
-        var foregroundColor = WebInspector.getSelectionForegroundColor();
-        var foregroundColorRule = foregroundColor ? ".CodeMirror .CodeMirror-selectedtext:not(.CodeMirror-persist-highlight) { color: " + foregroundColor + "!important;}" : "";
-        if (!foregroundColorRule && !backgroundColorRule)
-            return;
-
-        var style = document.createElement("style");
-        style.textContent = backgroundColorRule + foregroundColorRule;
-        document.head.appendChild(style);
-    },
-
     _setupWhitespaceHighlight: function()
     {
         if (WebInspector.CodeMirrorTextEditor._whitespaceStyleInjected || !WebInspector.settings.showWhitespacesInEditor.get())
@@ -386,6 +398,12 @@
             e.consume(true);
     },
 
+    _handlePostKeyDown: function(e)
+    {
+        if (e.defaultPrevented)
+            e.consume(true);
+    },
+
     _shouldProcessWordForAutocompletion: function(word)
     {
         return word.length && (word[0] < '0' || word[0] > '9');
@@ -397,7 +415,7 @@
     _addTextToCompletionDictionary: function(text)
     {
         var words = WebInspector.TextUtils.textToWords(text);
-        for(var i = 0; i < words.length; ++i) {
+        for (var i = 0; i < words.length; ++i) {
             if (this._shouldProcessWordForAutocompletion(words[i]))
                 this._dictionary.addWord(words[i]);
         }
@@ -409,7 +427,7 @@
     _removeTextFromCompletionDictionary: function(text)
     {
         var words = WebInspector.TextUtils.textToWords(text);
-        for(var i = 0; i < words.length; ++i) {
+        for (var i = 0; i < words.length; ++i) {
             if (this._shouldProcessWordForAutocompletion(words[i]))
                 this._dictionary.removeWord(words[i]);
         }
@@ -477,13 +495,10 @@
         var token = this._codeMirror.getTokenAt(new CodeMirror.Pos(lineNumber, (column || 0) + 1));
         if (!token || !token.type)
             return null;
-        var convertedType = WebInspector.CodeMirrorUtils.convertTokenType(token.type);
-        if (!convertedType)
-            return null;
         return {
             startColumn: token.start,
             endColumn: token.end - 1,
-            type: convertedType
+            type: token.type
         };
     },
 
@@ -728,7 +743,7 @@
         if (!wrapClasses)
             return;
         var classes = wrapClasses.split(" ");
-        for(var i = 0; i < classes.length; ++i) {
+        for (var i = 0; i < classes.length; ++i) {
             if (classes[i].startsWith("cm-breakpoint"))
                 this._codeMirror.removeLineClass(lineNumber, "wrap", classes[i]);
         }
@@ -777,11 +792,10 @@
      */
     highlightPosition: function(lineNumber, columnNumber)
     {
-        if (lineNumber < 0)
-            return;
-        lineNumber = Math.min(lineNumber, this._codeMirror.lineCount() - 1);
-        if (typeof columnNumber !== "number" || columnNumber < 0 || columnNumber > this._codeMirror.getLine(lineNumber).length)
+        lineNumber = Number.constrain(lineNumber, 0, this._codeMirror.lineCount() - 1);
+        if (typeof columnNumber !== "number")
             columnNumber = 0;
+        columnNumber = Number.constrain(columnNumber, 0, this._codeMirror.getLine(lineNumber).length);
 
         this.clearPositionHighlight();
         this._highlightedLine = this._codeMirror.getLineHandle(lineNumber);
@@ -791,7 +805,7 @@
         this._codeMirror.addLineClass(this._highlightedLine, null, "cm-highlight");
         this._clearHighlightTimeout = setTimeout(this.clearPositionHighlight.bind(this), 2000);
         if (!this.readOnly())
-            this._codeMirror.setSelection(new CodeMirror.Pos(lineNumber, columnNumber));
+            this.setSelection(WebInspector.TextRange.createFromLocation(lineNumber, columnNumber));
     },
 
     clearPositionHighlight: function()
@@ -828,7 +842,7 @@
     {
         var scrollInfo = this._codeMirror.getScrollInfo();
         var newPaddingBottom;
-        var linesElement = this.element.firstChild.querySelector(".CodeMirror-lines");
+        var linesElement = this.element.firstElementChild.querySelector(".CodeMirror-lines");
         var lineCount = this._codeMirror.lineCount();
         if (lineCount <= 1)
             newPaddingBottom = 0;
@@ -844,12 +858,13 @@
         var parentElement = this.element.parentElement;
         if (!parentElement || !this.isShowing())
             return;
-        var scrollInfo = this._codeMirror.getScrollInfo();
+        var scrollLeft = this._codeMirror.doc.scrollLeft;
+        var scrollTop = this._codeMirror.doc.scrollTop;
         var width = parentElement.offsetWidth;
         var height = parentElement.offsetHeight;
         this._codeMirror.setSize(width, height);
         this._updatePaddingBottom(width, height);
-        this._codeMirror.scrollTo(scrollInfo.left, scrollInfo.top);
+        this._codeMirror.scrollTo(scrollLeft, scrollTop);
     },
 
     onResize: function()
@@ -885,28 +900,32 @@
         if (column === 0 || !WebInspector.TextUtils.isWordChar(line.charAt(column - 1)))
             return null;
         var wordStart = column - 1;
-        while(wordStart > 0 && WebInspector.TextUtils.isWordChar(line.charAt(wordStart - 1)))
+        while (wordStart > 0 && WebInspector.TextUtils.isWordChar(line.charAt(wordStart - 1)))
             --wordStart;
         if (prefixOnly)
             return new WebInspector.TextRange(lineNumber, wordStart, lineNumber, column);
         var wordEnd = column;
-        while(wordEnd < line.length && WebInspector.TextUtils.isWordChar(line.charAt(wordEnd)))
+        while (wordEnd < line.length && WebInspector.TextUtils.isWordChar(line.charAt(wordEnd)))
             ++wordEnd;
         return new WebInspector.TextRange(lineNumber, wordStart, lineNumber, wordEnd);
     },
 
+    /**
+     * @param {!CodeMirror} codeMirror
+     * @param {!WebInspector.CodeMirrorTextEditor.BeforeChangeObject} changeObject
+     */
     _beforeChange: function(codeMirror, changeObject)
     {
         if (!this._dictionary)
             return;
         this._updatedLines = this._updatedLines || {};
-        for(var i = changeObject.from.line; i <= changeObject.to.line; ++i)
+        for (var i = changeObject.from.line; i <= changeObject.to.line; ++i)
             this._updatedLines[i] = this.line(i);
     },
 
     /**
      * @param {!CodeMirror} codeMirror
-     * @param {!{origin: string, text: !Array.<string>, removed: !Array.<string>}} changeObject
+     * @param {!WebInspector.CodeMirrorTextEditor.ChangeObject} changeObject
      */
     _change: function(codeMirror, changeObject)
     {
@@ -921,7 +940,7 @@
         this._elementToWidget.clear();
 
         if (this._updatedLines) {
-            for(var lineNumber in this._updatedLines)
+            for (var lineNumber in this._updatedLines)
                 this._removeTextFromCompletionDictionary(this._updatedLines[lineNumber]);
             delete this._updatedLines;
         }
@@ -948,16 +967,16 @@
             if (!this._muteTextChangedEvent)
                 this._delegate.onTextChanged(oldRange, newRange);
 
-            for(var i = newRange.startLine; i <= newRange.endLine; ++i) {
+            for (var i = newRange.startLine; i <= newRange.endLine; ++i) {
                 linesToUpdate[i] = true;
             }
             if (this._dictionary) {
-                for(var i = newRange.startLine; i <= newRange.endLine; ++i)
+                for (var i = newRange.startLine; i <= newRange.endLine; ++i)
                     linesToUpdate[i] = this.line(i);
             }
         } while (changeObject = changeObject.next);
         if (this._dictionary) {
-            for(var lineNumber in linesToUpdate)
+            for (var lineNumber in linesToUpdate)
                 this._addTextToCompletionDictionary(linesToUpdate[lineNumber]);
         }
         if (singleCharInput)
@@ -973,6 +992,28 @@
             this._codeMirror.operation(this._tokenHighlighter.highlightSelectedTokens.bind(this._tokenHighlighter));
     },
 
+    /**
+     * @param {!CodeMirror} codeMirror
+     * @param {!{head: !CodeMirror.Pos, anchor: !CodeMirror.Pos}} selection
+     */
+    _beforeSelectionChange: function(codeMirror, selection)
+    {
+        if (!this._isHandlingMouseDownEvent)
+            return;
+        this._reportJump(this.selection(), this._toRange(selection.anchor, selection.head));
+    },
+
+    /**
+     * @param {?WebInspector.TextRange} from
+     * @param {?WebInspector.TextRange} to
+     */
+    _reportJump: function(from, to)
+    {
+        if (from && to && from.equal(to))
+            return;
+        this._delegate.onJumpToPosition(from, to);
+    },
+
     _scroll: function()
     {
         if (this._scrollTimer)
@@ -1163,11 +1204,59 @@
         return new WebInspector.TextRange(start.line, start.ch, end.line, end.ch);
     },
 
+    /**
+     * @param {number} lineNumber
+     * @param {number} columnNumber
+     * @return {!WebInspector.TextEditorPositionHandle}
+     */
+    textEditorPositionHandle: function(lineNumber, columnNumber)
+    {
+        return new WebInspector.CodeMirrorPositionHandle(this._codeMirror, new CodeMirror.Pos(lineNumber, columnNumber));
+    },
+
     __proto__: WebInspector.View.prototype
 }
 
 /**
  * @constructor
+ * @implements {WebInspector.TextEditorPositionHandle}
+ * @param {!CodeMirror} codeMirror
+ * @param {!CodeMirror.Pos} pos
+ */
+WebInspector.CodeMirrorPositionHandle = function(codeMirror, pos)
+{
+    this._codeMirror = codeMirror;
+    this._lineHandle = codeMirror.getLineHandle(pos.line);
+    this._columnNumber = pos.ch;
+}
+
+WebInspector.CodeMirrorPositionHandle.prototype = {
+    /**
+     * @return {?{lineNumber: number, columnNumber: number}}
+     */
+    resolve: function()
+    {
+        var lineNumber = this._codeMirror.getLineNumber(this._lineHandle);
+        if (typeof lineNumber !== "number")
+            return null;
+        return {
+            lineNumber: lineNumber,
+            columnNumber: this._columnNumber
+        };
+    },
+
+    /**
+     * @param {!WebInspector.TextEditorPositionHandle} positionHandle
+     * @return {boolean}
+     */
+    equal: function(positionHandle)
+    {
+        return positionHandle._lineHandle === this._lineHandle && positionHandle._columnNumber == this._columnNumber && positionHandle._codeMirror === this._codeMirror;
+    }
+}
+
+/**
+ * @constructor
  * @param {!CodeMirror} codeMirror
  */
 WebInspector.CodeMirrorTextEditor.TokenHighlighter = function(codeMirror)
@@ -1178,7 +1267,7 @@
 WebInspector.CodeMirrorTextEditor.TokenHighlighter.prototype = {
     /**
      * @param {!RegExp} regex
-     * @param {!WebInspector.TextRange} range
+     * @param {?WebInspector.TextRange} range
      */
     highlightSearchResults: function(regex, range)
     {
@@ -1200,14 +1289,17 @@
                 this._highlightDescriptor.selectionStart = selectionStart;
         } else {
             this._removeHighlight();
-            this._setHighlighter(this._searchHighlighter.bind(this, this._highlightRegex, this._highlightRange), selectionStart);
+            this._setHighlighter(this._searchHighlighter.bind(this, this._highlightRegex), selectionStart);
         }
-        if (selectionStart) {
+        if (this._highlightRange) {
             var pos = WebInspector.CodeMirrorTextEditor.prototype._toPos(this._highlightRange);
             this._searchResultMarker = this._codeMirror.markText(pos.start, pos.end, {className: "cm-column-with-selection"});
         }
     },
 
+    /**
+     * @return {!RegExp|undefined}
+     */
     highlightedRegex: function()
     {
         return this._highlightRegex;
@@ -1260,10 +1352,9 @@
 
     /**
      * @param {!RegExp} regex
-     * @param {!WebInspector.TextRange} range
      * @param {!CodeMirror.StringStream} stream
      */
-    _searchHighlighter: function(regex, range, stream)
+    _searchHighlighter: function(regex, stream)
     {
         if (stream.column() === 0)
             delete this._searchMatchLength;
@@ -1337,6 +1428,9 @@
 WebInspector.CodeMirrorTextEditor.BlockIndentController.prototype = {
     name: "blockIndentKeymap",
 
+    /**
+     * @return {*}
+     */
     Enter: function(codeMirror)
     {
         if (codeMirror.somethingSelected())
@@ -1357,13 +1451,17 @@
             return CodeMirror.Pass;
     },
 
+    /**
+     * @return {*}
+     */
     "'}'": function(codeMirror)
     {
         var cursor = codeMirror.getCursor();
         var line = codeMirror.getLine(cursor.line);
-        for(var i = 0 ; i < line.length; ++i)
+        for (var i = 0 ; i < line.length; ++i) {
             if (!WebInspector.TextUtils.isSpaceChar(line.charAt(i)))
                 return CodeMirror.Pass;
+        }
 
         codeMirror.replaceRange("}", cursor);
         var matchingBracket = codeMirror.findMatchingBracket();
@@ -1498,6 +1596,7 @@
 
     /**
      * @param {?Event} e
+     * @return {boolean}
      */
     keyDown: function(e)
     {
@@ -1568,3 +1667,52 @@
         return metrics ? new AnchorBox(metrics.x, metrics.y, 0, metrics.height) : null;
     },
 }
+
+/**
+ * @param {string} modeName
+ * @param {string} tokenPrefix
+ */
+WebInspector.CodeMirrorTextEditor._overrideModeWithPrefixedTokens = function(modeName, tokenPrefix)
+{
+    var oldModeName = modeName + "-old";
+    if (CodeMirror.modes[oldModeName])
+        return;
+
+    CodeMirror.defineMode(oldModeName, CodeMirror.modes[modeName]);
+    CodeMirror.defineMode(modeName, modeConstructor);
+
+    function modeConstructor(config, parserConfig)
+    {
+        var innerConfig = {};
+        for (var i in parserConfig)
+            innerConfig[i] = parserConfig[i];
+        innerConfig.name = oldModeName;
+        var codeMirrorMode = CodeMirror.getMode(config, innerConfig);
+        codeMirrorMode.name = modeName;
+        codeMirrorMode.token = tokenOverride.bind(null, codeMirrorMode.token);
+        return codeMirrorMode;
+    }
+
+    function tokenOverride(superToken, stream, state)
+    {
+        var token = superToken(stream, state);
+        return token ? tokenPrefix + token : token;
+    }
+}
+
+WebInspector.CodeMirrorTextEditor._overrideModeWithPrefixedTokens("css", "css-");
+WebInspector.CodeMirrorTextEditor._overrideModeWithPrefixedTokens("javascript", "js-");
+WebInspector.CodeMirrorTextEditor._overrideModeWithPrefixedTokens("xml", "xml-");
+
+(function() {
+    var backgroundColor = InspectorFrontendHost.getSelectionBackgroundColor();
+    var backgroundColorRule = backgroundColor ? ".CodeMirror .CodeMirror-selected { background-color: " + backgroundColor + ";}" : "";
+    var foregroundColor = InspectorFrontendHost.getSelectionForegroundColor();
+    var foregroundColorRule = foregroundColor ? ".CodeMirror .CodeMirror-selectedtext:not(.CodeMirror-persist-highlight) { color: " + foregroundColor + "!important;}" : "";
+    if (!foregroundColorRule && !backgroundColorRule)
+        return;
+
+    var style = document.createElement("style");
+    style.textContent = backgroundColorRule + foregroundColorRule;
+    document.head.appendChild(style);
+})();
diff --git a/Source/devtools/front_end/CodeMirrorUtils.js b/Source/devtools/front_end/CodeMirrorUtils.js
index 70f273a..1d0aaa2 100644
--- a/Source/devtools/front_end/CodeMirrorUtils.js
+++ b/Source/devtools/front_end/CodeMirrorUtils.js
@@ -28,10 +28,93 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-WebInspector.CodeMirrorUtils = {
+/**
+ * @constructor
+ * @extends {WebInspector.InplaceEditor}
+ */
+WebInspector.CodeMirrorUtils = function()
+{
+    WebInspector.InplaceEditor.call(this);
+}
+
+WebInspector.CodeMirrorUtils.prototype = {
+    /**
+     * @return {string}
+     */
+    editorContent: function(editingContext) {
+        return editingContext.codeMirror.getValue();
+    },
+
+    /**
+     * @param {?Event} e
+     */
+    _consumeCopy: function(e)
+    {
+        e.consume();
+    },
+
+    setUpEditor: function(editingContext)
+    {
+        var element = editingContext.element;
+        var config = editingContext.config;
+        loadScript("CodeMirrorTextEditor.js");
+        editingContext.cssLoadView = new WebInspector.CodeMirrorCSSLoadView();
+        editingContext.cssLoadView.show(element);
+        WebInspector.setCurrentFocusElement(element);
+        element.addEventListener("copy", this._consumeCopy, false);
+        var codeMirror = window.CodeMirror(element, {
+            mode: config.mode,
+            lineWrapping: config.lineWrapping,
+            smartIndent: config.smartIndent,
+            autofocus: true,
+            theme: config.theme,
+            value: config.initialValue
+        });
+        codeMirror.getWrapperElement().classList.add("source-code");
+        codeMirror.on("cursorActivity", function(cm) {
+            cm.display.cursor.scrollIntoViewIfNeeded(false);
+        });
+        editingContext.codeMirror = codeMirror;
+    },
+
+    closeEditor: function(editingContext)
+    {
+        editingContext.element.removeEventListener("copy", this._consumeCopy, false);
+        editingContext.cssLoadView.detach();
+    },
+
+    cancelEditing: function(editingContext)
+    {
+        editingContext.codeMirror.setValue(editingContext.oldText);
+    },
+
+    augmentEditingHandle: function(editingContext, handle)
+    {
+        function setWidth(editingContext, width)
+        {
+            var padding = 30;
+            var codeMirror = editingContext.codeMirror;
+            codeMirror.getWrapperElement().style.width = (width - codeMirror.getWrapperElement().offsetLeft - padding) + "px";
+            codeMirror.refresh();
+        }
+
+        handle.codeMirror = editingContext.codeMirror;
+        handle.setWidth = setWidth.bind(null, editingContext);
+    },
+
+    __proto__: WebInspector.InplaceEditor.prototype
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.TokenizerFactory}
+ */
+WebInspector.CodeMirrorUtils.TokenizerFactory = function() { }
+
+WebInspector.CodeMirrorUtils.TokenizerFactory.prototype = {
     /**
      * @param {string} mimeType
-     * @return {function(string, function(string, string, number, number))}
+     * @return {function(string, function(string, ?string, number, number))}
      */
     createTokenizer: function(mimeType)
     {
@@ -48,57 +131,23 @@
             }
         }
         return tokenize;
-    },
-
-    /**
-     * @param {string} tokenType
-     */
-    convertTokenType: function(tokenType)
-    {
-        if (tokenType.startsWith("js-variable") || tokenType.startsWith("js-property") || tokenType === "js-def")
-            return "javascript-ident";
-        if (tokenType === "js-string-2")
-            return "javascript-regexp";
-        if (tokenType === "js-number" || tokenType === "js-comment" || tokenType === "js-string" || tokenType === "js-keyword")
-            return "javascript-" + tokenType.substring("js-".length);
-        if (tokenType === "css-number")
-            return "css-number";
-        return null;
-    },
-
-    /**
-     * @param {string} modeName
-     * @param {string} tokenPrefix
-     */
-    overrideModeWithPrefixedTokens: function(modeName, tokenPrefix)
-    {
-        var oldModeName = modeName + "-old";
-        if (CodeMirror.modes[oldModeName])
-            return;
-
-        CodeMirror.defineMode(oldModeName, CodeMirror.modes[modeName]);
-        CodeMirror.defineMode(modeName, modeConstructor);
-
-        function modeConstructor(config, parserConfig)
-        {
-            var innerConfig = {};
-            for (var i in parserConfig)
-                innerConfig[i] = parserConfig[i];
-            innerConfig.name = oldModeName;
-            var codeMirrorMode = CodeMirror.getMode(config, innerConfig);
-            codeMirrorMode.name = modeName;
-            codeMirrorMode.token = tokenOverride.bind(this, codeMirrorMode.token);
-            return codeMirrorMode;
-        }
-
-        function tokenOverride(superToken, stream, state)
-        {
-            var token = superToken(stream, state);
-            return token ? tokenPrefix + token : token;
-        }
     }
 }
 
-WebInspector.CodeMirrorUtils.overrideModeWithPrefixedTokens("css-base", "css-");
-WebInspector.CodeMirrorUtils.overrideModeWithPrefixedTokens("javascript", "js-");
-WebInspector.CodeMirrorUtils.overrideModeWithPrefixedTokens("xml", "xml-");
+/**
+ * This bogus view is needed to load/unload CodeMirror-related CSS on demand.
+ *
+ * @constructor
+ * @extends {WebInspector.View}
+ */
+WebInspector.CodeMirrorCSSLoadView = function()
+{
+    WebInspector.View.call(this);
+    this.element.classList.add("hidden");
+    this.registerRequiredCSS("cm/codemirror.css");
+    this.registerRequiredCSS("cm/cmdevtools.css");
+}
+
+WebInspector.CodeMirrorCSSLoadView.prototype = {
+    __proto__: WebInspector.View.prototype
+}
diff --git a/Source/devtools/front_end/CompilerScriptMapping.js b/Source/devtools/front_end/CompilerScriptMapping.js
index 291b045..620c9d2 100644
--- a/Source/devtools/front_end/CompilerScriptMapping.js
+++ b/Source/devtools/front_end/CompilerScriptMapping.js
@@ -31,11 +31,13 @@
 /**
  * @constructor
  * @implements {WebInspector.ScriptSourceMapping}
+ * @param {!WebInspector.DebuggerModel} debuggerModel
  * @param {!WebInspector.Workspace} workspace
  * @param {!WebInspector.SimpleWorkspaceProvider} networkWorkspaceProvider
  */
-WebInspector.CompilerScriptMapping = function(workspace, networkWorkspaceProvider)
+WebInspector.CompilerScriptMapping = function(debuggerModel, workspace, networkWorkspaceProvider)
 {
+    this._debuggerModel = debuggerModel;
     this._workspace = workspace;
     this._workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAddedToWorkspace, this);
     this._networkWorkspaceProvider = networkWorkspaceProvider;
@@ -49,7 +51,7 @@
     this._scriptForSourceMap = new Map();
     /** @type {!StringMap.<!WebInspector.SourceMap>} */
     this._sourceMapForURL = new StringMap();
-    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
+    debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
 }
 
 WebInspector.CompilerScriptMapping.prototype = {
@@ -91,7 +93,7 @@
         var script = /** @type {!WebInspector.Script} */ (this._scriptForSourceMap.get(sourceMap));
         console.assert(script);
         var entry = sourceMap.findEntryReversed(uiSourceCode.url, lineNumber);
-        return WebInspector.debuggerModel.createRawLocation(script, entry[0], entry[1]);
+        return this._debuggerModel.createRawLocation(script, /** @type {number} */ (entry[0]), /** @type {number} */ (entry[1]));
     },
 
     /**
@@ -104,6 +106,7 @@
 
         /**
          * @param {?WebInspector.SourceMap} sourceMap
+         * @this {WebInspector.CompilerScriptMapping}
          */
         function sourceMapLoaded(sourceMap)
         {
@@ -210,15 +213,17 @@
 
         /**
          * @param {?WebInspector.SourceMap} sourceMap
+         * @this {WebInspector.CompilerScriptMapping}
          */
         function sourceMapLoaded(sourceMap)
         {
-            var callbacks = this._pendingSourceMapLoadingCallbacks[sourceMapURL];
-            delete this._pendingSourceMapLoadingCallbacks[sourceMapURL];
+            var url = /** @type {string} */ (sourceMapURL);
+            var callbacks = this._pendingSourceMapLoadingCallbacks[url];
+            delete this._pendingSourceMapLoadingCallbacks[url];
             if (!callbacks)
                 return;
             if (sourceMap)
-                this._sourceMapForSourceMapURL[sourceMapURL] = sourceMap;
+                this._sourceMapForSourceMapURL[url] = sourceMap;
             for (var i = 0; i < callbacks.length; ++i)
                 callbacks[i](sourceMap);
         }
@@ -226,6 +231,10 @@
 
     _debuggerReset: function()
     {
+        /**
+         * @param {!WebInspector.SourceMap} sourceMap
+         * @this {WebInspector.CompilerScriptMapping}
+         */
         function unbindUISourceCodesForSourceMap(sourceMap)
         {
             var sourceURLs = sourceMap.sources();
diff --git a/Source/devtools/front_end/ConsoleMessage.js b/Source/devtools/front_end/ConsoleMessage.js
index 6260c1a..438d3a2 100644
--- a/Source/devtools/front_end/ConsoleMessage.js
+++ b/Source/devtools/front_end/ConsoleMessage.js
@@ -48,14 +48,13 @@
  */
 WebInspector.ConsoleMessageImpl = function(source, level, message, linkifier, type, url, line, column, repeatCount, parameters, stackTrace, requestId, isOutdated)
 {
-    WebInspector.ConsoleMessage.call(this, source, level, url, line, column, repeatCount);
+    WebInspector.ConsoleMessage.call(this, source, level, url, line, column, repeatCount, requestId);
 
     this._linkifier = linkifier;
     this.type = type || WebInspector.ConsoleMessage.MessageType.Log;
     this._messageText = message;
     this._parameters = parameters;
     this._stackTrace = stackTrace;
-    this._request = requestId ? WebInspector.networkLog.requestForId(requestId) : null;
     this._isOutdated = isOutdated;
     /** @type {!Array.<!WebInspector.DataGrid>} */
     this._dataGrids = [];
@@ -90,77 +89,89 @@
         }
     },
 
+    /**
+     * @override
+     * @param {!Node} messageElement
+     */
+    setMessageElement: function(messageElement)
+    {
+        this._messageElement = messageElement;
+    },
+
     _formatMessage: function()
     {
         this._formattedMessage = document.createElement("span");
         this._formattedMessage.className = "console-message-text source-code";
 
-        if (this.source === WebInspector.ConsoleMessage.MessageSource.ConsoleAPI) {
-            switch (this.type) {
-                case WebInspector.ConsoleMessage.MessageType.Trace:
-                    this._messageElement = this._format(this._parameters || ["console.trace()"]);
-                    break;
-                case WebInspector.ConsoleMessage.MessageType.Clear:
-                    this._messageElement = document.createTextNode(WebInspector.UIString("Console was cleared"));
-                    this._formattedMessage.classList.add("console-info");
-                    break;
-                case WebInspector.ConsoleMessage.MessageType.Assert:
-                    var args = [WebInspector.UIString("Assertion failed:")];
-                    if (this._parameters)
-                        args = args.concat(this._parameters);
-                    this._messageElement = this._format(args);
-                    break;
-                case WebInspector.ConsoleMessage.MessageType.Dir:
-                    var obj = this._parameters ? this._parameters[0] : undefined;
-                    var args = ["%O", obj];
-                    this._messageElement = this._format(args);
-                    break;
-                case WebInspector.ConsoleMessage.MessageType.Profile:
-                    var title = WebInspector.ProfilesPanelDescriptor.resolveProfileTitle(this._messageText);
-                    this._messageElement = document.createTextNode(WebInspector.UIString("Profile '%s' started.", title));
-                    break;
-                case WebInspector.ConsoleMessage.MessageType.ProfileEnd:
-                    var hashIndex = this._messageText.lastIndexOf("#");
-                    var title = WebInspector.ProfilesPanelDescriptor.resolveProfileTitle(this._messageText.substring(0, hashIndex));
-                    var uid = this._messageText.substring(hashIndex + 1);
-                    var format = WebInspector.UIString("Profile '%s' finished.", "%_");
-                    var link = WebInspector.linkifyURLAsNode("webkit-profile://CPU/" + uid, title);
-                    this._messageElement = document.createElement("span");
-                    this._formatWithSubstitutionString(format, [link], this._messageElement);
-                    break;
-                default:
-                    var args = this._parameters || [this._messageText];
-                    this._messageElement = this._format(args);
-            }
-        } else if (this.source === WebInspector.ConsoleMessage.MessageSource.Network) {
-            if (this._request) {
-                this._stackTrace = this._request.initiator.stackTrace;
-                if (this._request.initiator && this._request.initiator.url) {
-                    this.url = this._request.initiator.url;
-                    this.line = this._request.initiator.lineNumber;
+        /**
+         * @param {string} title
+         * @return {!Element}
+         * @this {WebInspector.NetworkRequest}
+         */
+        function linkifyRequest(title)
+        {
+            return WebInspector.Linkifier.linkifyUsingRevealer(this, title, this.url);
+        }
+
+        if (!this._messageElement) {
+            if (this.source === WebInspector.ConsoleMessage.MessageSource.ConsoleAPI) {
+                switch (this.type) {
+                    case WebInspector.ConsoleMessage.MessageType.Trace:
+                        this._messageElement = this._format(this._parameters || ["console.trace()"]);
+                        break;
+                    case WebInspector.ConsoleMessage.MessageType.Clear:
+                        this._messageElement = document.createTextNode(WebInspector.UIString("Console was cleared"));
+                        this._formattedMessage.classList.add("console-info");
+                        break;
+                    case WebInspector.ConsoleMessage.MessageType.Assert:
+                        var args = [WebInspector.UIString("Assertion failed:")];
+                        if (this._parameters)
+                            args = args.concat(this._parameters);
+                        this._messageElement = this._format(args);
+                        break;
+                    case WebInspector.ConsoleMessage.MessageType.Dir:
+                        var obj = this._parameters ? this._parameters[0] : undefined;
+                        var args = ["%O", obj];
+                        this._messageElement = this._format(args);
+                        break;
+                    case WebInspector.ConsoleMessage.MessageType.Profile:
+                    case WebInspector.ConsoleMessage.MessageType.ProfileEnd:
+                        console.assert(false);
+                        break;
+                    default:
+                        var args = this._parameters || [this._messageText];
+                        this._messageElement = this._format(args);
                 }
-                this._messageElement = document.createElement("span");
-                if (this.level === WebInspector.ConsoleMessage.MessageLevel.Error) {
-                    this._messageElement.appendChild(document.createTextNode(this._request.requestMethod + " "));
-                    this._messageElement.appendChild(WebInspector.linkifyRequestAsNode(this._request));
-                    if (this._request.failed)
-                        this._messageElement.appendChild(document.createTextNode(" " + this._request.localizedFailDescription));
-                    else
-                        this._messageElement.appendChild(document.createTextNode(" " + this._request.statusCode + " (" + this._request.statusText + ")"));
+            } else if (this.source === WebInspector.ConsoleMessage.MessageSource.Network) {
+                if (this._request) {
+                    this._stackTrace = this._request.initiator.stackTrace;
+                    if (this._request.initiator && this._request.initiator.url) {
+                        this.url = this._request.initiator.url;
+                        this.line = this._request.initiator.lineNumber;
+                    }
+                    this._messageElement = document.createElement("span");
+                    if (this.level === WebInspector.ConsoleMessage.MessageLevel.Error) {
+                        this._messageElement.appendChild(document.createTextNode(this._request.requestMethod + " "));
+                        this._messageElement.appendChild(WebInspector.Linkifier.linkifyUsingRevealer(this._request, this._request.url, this._request.url));
+                        if (this._request.failed)
+                            this._messageElement.appendChild(document.createTextNode(" " + this._request.localizedFailDescription));
+                        else
+                            this._messageElement.appendChild(document.createTextNode(" " + this._request.statusCode + " (" + this._request.statusText + ")"));
+                    } else {
+                        var fragment = WebInspector.linkifyStringAsFragmentWithCustomLinkifier(this._messageText, linkifyRequest.bind(this._request));
+                        this._messageElement.appendChild(fragment);
+                    }
                 } else {
-                    var fragment = WebInspector.linkifyStringAsFragmentWithCustomLinkifier(this._messageText, WebInspector.linkifyRequestAsNode.bind(null, this._request));
-                    this._messageElement.appendChild(fragment);
+                    if (this.url) {
+                        var isExternal = !WebInspector.resourceForURL(this.url) && !WebInspector.workspace.uiSourceCodeForURL(this.url);
+                        this._anchorElement = WebInspector.linkifyURLAsNode(this.url, this.url, "console-message-url", isExternal);
+                    }
+                    this._messageElement = this._format([this._messageText]);
                 }
             } else {
-                if (this.url) {
-                    var isExternal = !WebInspector.resourceForURL(this.url) && !WebInspector.workspace.uiSourceCodeForURL(this.url);
-                    this._anchorElement = WebInspector.linkifyURLAsNode(this.url, this.url, "console-message-url", isExternal);
-                }
-                this._messageElement = this._format([this._messageText]);
+                var args = this._parameters || [this._messageText];
+                this._messageElement = this._format(args);
             }
-        } else {
-            var args = this._parameters || [this._messageText];
-            this._messageElement = this._format(args);
         }
 
         if (this.source !== WebInspector.ConsoleMessage.MessageSource.Network || this._request) {
@@ -219,14 +230,6 @@
     },
 
     /**
-     * @return {?WebInspector.NetworkRequest}
-     */
-    request: function()
-    {
-        return this._request;
-    },
-
-    /**
      * @param {string} url
      * @param {number} lineNumber
      * @param {number} columnNumber
@@ -437,7 +440,7 @@
 
     /**
      * @param {string} type
-     * @param {string} subtype
+     * @param {string=} subtype
      * @param {string=} description
      * @return {!Element}
      */
@@ -474,6 +477,10 @@
 
     _formatParameterAsNode: function(object, elem)
     {
+        /**
+         * @param {!DOMAgent.NodeId} nodeId
+         * @this {WebInspector.ConsoleMessageImpl}
+         */
         function printNode(nodeId)
         {
             if (!nodeId) {
@@ -482,14 +489,12 @@
                 this._formatParameterAsObject(object, elem, false);
                 return;
             }
-            var treeOutline = new WebInspector.ElementsTreeOutline(false, false);
-            treeOutline.setVisible(true);
-            treeOutline.rootDOMNode = WebInspector.domAgent.nodeForId(nodeId);
-            treeOutline.element.classList.add("outline-disclosure");
-            if (!treeOutline.children[0].hasChildren)
-                treeOutline.element.classList.add("single-node");
-            elem.appendChild(treeOutline.element);
-            treeOutline.element.treeElementForTest = treeOutline.children[0];
+            var node = WebInspector.domAgent.nodeForId(nodeId);
+            var renderer = WebInspector.moduleManager.instance(WebInspector.Renderer, node);
+            if (renderer)
+                elem.appendChild(renderer.render(node));
+            else
+                console.error("No renderer for node found");
         }
         object.pushNodeToFrontend(printNode.bind(this));
     },
@@ -671,6 +676,7 @@
         /**
          * @param {?WebInspector.RemoteObject} result
          * @param {boolean=} wasThrown
+         * @this {WebInspector.ConsoleMessageImpl}
          */
         function onInvokeGetterClick(result, wasThrown)
         {
@@ -702,10 +708,22 @@
         return rootElement;
     },
 
+    /**
+     * @param {string} format
+     * @param {!Array.<string>} parameters
+     * @param {!Element} formattedResult
+     * @this {WebInspector.ConsoleMessageImpl}
+     */
     _formatWithSubstitutionString: function(format, parameters, formattedResult)
     {
         var formatters = {};
 
+        /**
+         * @param {boolean} force
+         * @param {!Object} obj
+         * @return {!Element}
+         * @this {WebInspector.ConsoleMessageImpl}
+         */
         function parameterFormatter(force, obj)
         {
             return this._formatParameter(obj, force, false);
@@ -834,12 +852,18 @@
         WebInspector.highlightSearchResults(element, matchRanges);
     },
 
+    /**
+     * @return {boolean}
+     */
     matchesRegex: function(regexObject)
     {
         regexObject.lastIndex = 0;
-        return regexObject.test(this.message) || (this._anchorElement && regexObject.test(this._anchorElement.textContent));
+        return regexObject.test(this.message) || (!!this._anchorElement && regexObject.test(this._anchorElement.textContent));
     },
 
+    /**
+     * @return {!Element}
+     */
     toMessageElement: function()
     {
         if (this._element)
@@ -885,7 +909,7 @@
         for (var i = 0; i < this._stackTrace.length; i++) {
             var frame = this._stackTrace[i];
 
-            var content = document.createElement("div");
+            var content = document.createElementWithClass("div", "stacktrace-entry");
             var messageTextElement = document.createElement("span");
             messageTextElement.className = "console-message-text source-code";
             var functionName = frame.functionName || WebInspector.UIString("(anonymous function)");
@@ -919,6 +943,9 @@
         this.repeatCountElement.textContent = this.repeatCount;
     },
 
+    /**
+     * @return {string}
+     */
     toString: function()
     {
         var sourceString;
@@ -927,7 +954,7 @@
                 sourceString = "XML";
                 break;
             case WebInspector.ConsoleMessage.MessageSource.JS:
-                sourceString = "JS";
+                sourceString = "JavaScript";
                 break;
             case WebInspector.ConsoleMessage.MessageSource.Network:
                 sourceString = "Network";
@@ -1026,6 +1053,10 @@
         return WebInspector.debuggerModel.createRawLocationByURL(this.url, lineNumber, columnNumber);
     },
 
+    /**
+     * @param {?WebInspector.ConsoleMessage} msg
+     * @return {boolean}
+     */
     isEqual: function(msg)
     {
         if (!msg)
diff --git a/Source/devtools/front_end/ConsoleModel.js b/Source/devtools/front_end/ConsoleModel.js
index aef8fd1..dfa36a9 100644
--- a/Source/devtools/front_end/ConsoleModel.js
+++ b/Source/devtools/front_end/ConsoleModel.js
@@ -54,6 +54,10 @@
             ConsoleAgent.setMonitoringXHREnabled(true);
 
         this._enablingConsole = true;
+
+        /**
+         * @this {WebInspector.ConsoleModel}
+         */
         function callback()
         {
             delete this._enablingConsole;
@@ -161,8 +165,9 @@
  * @param {number=} line
  * @param {number=} column
  * @param {number=} repeatCount
+ * @param {!NetworkAgent.RequestId=} requestId
  */
-WebInspector.ConsoleMessage = function(source, level, url, line, column, repeatCount)
+WebInspector.ConsoleMessage = function(source, level, url, line, column, repeatCount, requestId)
 {
     this.source = source;
     this.level = level;
@@ -175,10 +180,18 @@
     this.repeatCount = repeatCount;
     this.repeatDelta = repeatCount;
     this.totalRepeatCount = repeatCount;
+    this._request = requestId ? WebInspector.networkLog.requestForId(requestId) : null;
 }
 
 WebInspector.ConsoleMessage.prototype = {
     /**
+     * @param {!Node} messageElement
+     */
+    setMessageElement: function(messageElement)
+    {
+    },
+
+    /**
      * @return {boolean}
      */
     isErrorOrWarning: function()
@@ -196,7 +209,7 @@
      */
     clone: function()
     {
-        // Implemented by concrete instances
+        throw "Not implemented";
     },
 
     /**
@@ -204,7 +217,15 @@
      */
     location: function()
     {
-        // Implemented by concrete instances
+        throw "Not implemented";
+    },
+
+    /**
+     * @return {?WebInspector.NetworkRequest}
+     */
+    request: function()
+    {
+        return this._request;
     }
 }
 
@@ -267,7 +288,6 @@
     Debug: "debug"
 }
 
-
 /**
  * @constructor
  * @implements {ConsoleAgent.Dispatcher}
@@ -316,6 +336,6 @@
 }
 
 /**
- * @type {?WebInspector.ConsoleModel}
+ * @type {!WebInspector.ConsoleModel}
  */
-WebInspector.console = null;
+WebInspector.console;
diff --git a/Source/devtools/front_end/ConsolePanel.js b/Source/devtools/front_end/ConsolePanel.js
index f9efc77..3b2a901 100644
--- a/Source/devtools/front_end/ConsolePanel.js
+++ b/Source/devtools/front_end/ConsolePanel.js
@@ -29,7 +29,6 @@
 /**
  * @constructor
  * @extends {WebInspector.Panel}
- * @implements {WebInspector.ViewFactory}
  */
 WebInspector.ConsolePanel = function()
 {
@@ -39,20 +38,8 @@
 
 WebInspector.ConsolePanel.prototype = {
     /**
-     * @param {string=} id
-     * @return {?WebInspector.View}
+     * @return {!Element}
      */
-    createView: function(id)
-    {
-        if (!this._consoleViewWrapper) {
-            this._consoleViewWrapper = new WebInspector.View();
-            this._consoleViewWrapper.element.classList.add("fill", "console-view-wrapper");
-            if (WebInspector.inspectorView.currentPanel() !== this)
-                this._view.show(this._consoleViewWrapper.element);
-        }
-        return this._consoleViewWrapper;
-    },
-
     defaultFocusedElement: function()
     {
         return this._view.defaultFocusedElement();
@@ -61,24 +48,77 @@
     wasShown: function()
     {
         WebInspector.Panel.prototype.wasShown.call(this);
-        if (WebInspector.inspectorView.drawer().visible() && WebInspector.inspectorView.selectedViewInDrawer() === "console") {
-            WebInspector.inspectorView.drawer().hide(true);
-            this._drawerWasVisible = true;
-        }
         this._view.show(this.element);
     },
 
     willHide: function()
     {
-        if (this._drawerWasVisible) {
-            WebInspector.inspectorView.drawer().show(true);
-            delete this._drawerWasVisible;
-        }
-
         WebInspector.Panel.prototype.willHide.call(this);
-        if (this._consoleViewWrapper)
-            this._view.show(this._consoleViewWrapper.element);
+        if (WebInspector.ConsolePanel.WrapperView._instance)
+            WebInspector.ConsolePanel.WrapperView._instance._showViewInWrapper();
     },
 
     __proto__: WebInspector.Panel.prototype
 }
+
+/**
+ * @constructor
+ * @implements {WebInspector.Drawer.ViewFactory}
+ */
+WebInspector.ConsolePanel.ViewFactory = function()
+{
+}
+
+WebInspector.ConsolePanel.ViewFactory.prototype = {
+    /**
+     * @return {!WebInspector.View}
+     */
+    createView: function()
+    {
+        if (!WebInspector.ConsolePanel.WrapperView._instance)
+            WebInspector.ConsolePanel.WrapperView._instance = new WebInspector.ConsolePanel.WrapperView();
+        return WebInspector.ConsolePanel.WrapperView._instance;
+    }
+}
+
+/**
+ * @constructor
+ * @extends {WebInspector.View}
+ */
+WebInspector.ConsolePanel.WrapperView = function()
+{
+    WebInspector.View.call(this);
+    this.element.classList.add("console-view-wrapper");
+
+    this._view = WebInspector.consoleView;
+    // FIXME: this won't be needed once drawer becomes a view.
+    this.wasShown();
+}
+
+WebInspector.ConsolePanel.WrapperView.prototype = {
+    wasShown: function()
+    {
+        if (!WebInspector.inspectorView.currentPanel() || WebInspector.inspectorView.currentPanel().name !== "console")
+            this._showViewInWrapper();
+    },
+
+    /**
+     * @return {!Element}
+     */
+    defaultFocusedElement: function()
+    {
+        return this._view.defaultFocusedElement();
+    },
+
+    focus: function()
+    {
+        this._view.focus();
+    },
+
+    _showViewInWrapper: function()
+    {
+        this._view.show(this.element);
+    },
+
+    __proto__: WebInspector.View.prototype
+}
diff --git a/Source/devtools/front_end/ConsoleView.js b/Source/devtools/front_end/ConsoleView.js
index 55e6629..20f1080 100644
--- a/Source/devtools/front_end/ConsoleView.js
+++ b/Source/devtools/front_end/ConsoleView.js
@@ -43,31 +43,29 @@
     this._searchableView.show(this.element);
 
     this._contentsElement = this._searchableView.element;
-    this._contentsElement.classList.add("fill", "vbox", "console-view");
+    this._contentsElement.classList.add("console-view");
     this._visibleMessagesIndices = [];
     this._urlToMessageCount = {};
 
     this._clearConsoleButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear console log."), "clear-status-bar-item");
     this._clearConsoleButton.addEventListener("click", this._requestClearMessages, this);
 
-    this._frameSelector = new WebInspector.StatusBarComboBox(this._frameChanged.bind(this), "console-context");
-    this._contextSelector = new WebInspector.StatusBarComboBox(this._contextChanged.bind(this), "console-context");
+    this._executionContextSelector = new WebInspector.StatusBarComboBox(this._executionContextChanged.bind(this), "console-context");
+    this._topLevelOptionByFrameId = {};
+    this._subOptionsByFrameId = {};
 
     this._filter = new WebInspector.ConsoleViewFilter();
     this._filter.addEventListener(WebInspector.ConsoleViewFilter.Events.FilterChanged, this._updateMessageList.bind(this));
 
-    if (hideContextSelector) {
-        this._frameSelector.element.classList.add("hidden");
-        this._contextSelector.element.classList.add("hidden");
-    }
+    if (hideContextSelector)
+        this._executionContextSelector.element.classList.add("hidden");
 
     this._filterBar = new WebInspector.FilterBar();
 
     var statusBarElement = this._contentsElement.createChild("div", "console-status-bar");
     statusBarElement.appendChild(this._clearConsoleButton.element);
     statusBarElement.appendChild(this._filterBar.filterButton().element);
-    statusBarElement.appendChild(this._frameSelector.element);
-    statusBarElement.appendChild(this._contextSelector.element);
+    statusBarElement.appendChild(this._executionContextSelector.element);
 
     this._filtersContainer = this._contentsElement.createChild("div", "console-filters-header hidden");
     this._filtersContainer.appendChild(this._filterBar.filtersElement());
@@ -157,12 +155,14 @@
      */
     _addFrame: function(contextList)
     {
-        var option = this._frameSelector.createOption(contextList.displayName, contextList.url);
-        option._contextList = contextList;
-        contextList._consoleOption = option;
+        var maxLength = 50;
+        var topLevelOption = this._executionContextSelector.createOption(contextList.displayName.trimMiddle(maxLength), contextList.url);
+        topLevelOption._executionContext = null;
+        this._topLevelOptionByFrameId[contextList.frameId] = topLevelOption;
+        this._subOptionsByFrameId[contextList.frameId] = [];
+
         contextList.addEventListener(WebInspector.FrameExecutionContextList.EventTypes.ContextsUpdated, this._frameUpdated, this);
         contextList.addEventListener(WebInspector.FrameExecutionContextList.EventTypes.ContextAdded, this._contextAdded, this);
-        this._frameChanged();
     },
 
     /**
@@ -171,48 +171,45 @@
     _frameRemoved: function(event)
     {
         var contextList = /** @type {!WebInspector.FrameExecutionContextList} */ (event.data);
-        this._frameSelector.removeOption(contextList._consoleOption);
-        this._frameChanged();
-    },
 
-    _frameChanged: function()
-    {
-        var context = this._currentFrame();
-        if (!context) {
-            WebInspector.runtimeModel.setCurrentExecutionContext(null);
-            this._contextSelector.element.classList.add("hidden");
-            return;
-        }
-
-        var executionContexts = context.executionContexts();
-        if (executionContexts.length)
-            WebInspector.runtimeModel.setCurrentExecutionContext(executionContexts[0]);
-
-        if (executionContexts.length === 1) {
-            this._contextSelector.element.classList.add("hidden");
-            return;
-        }
-        this._contextSelector.element.classList.remove("hidden");
-        this._contextSelector.removeOptions();
-        for (var i = 0; i < executionContexts.length; ++i)
-            this._appendContextOption(executionContexts[i]);
+        this._removeSubOptions(contextList.frameId);
+        var topLevelOption = this._topLevelOptionByFrameId[contextList.frameId];
+        this._executionContextSelector.removeOption(topLevelOption);
+        delete this._topLevelOptionByFrameId[contextList.frameId];
+        delete this._subOptionsByFrameId[contextList.frameId];
+        this._executionContextChanged();
     },
 
     /**
-     * @param {!WebInspector.ExecutionContext} executionContext
+     * @param {string} frameId
+     * @return {boolean}
      */
-    _appendContextOption: function(executionContext)
+    _removeSubOptions: function(frameId)
     {
-        if (!WebInspector.runtimeModel.currentExecutionContext())
-            WebInspector.runtimeModel.setCurrentExecutionContext(executionContext);
-        var option = this._contextSelector.createOption(executionContext.name, executionContext.id);
-        option._executionContext = executionContext;
+        var selectedOptionRemoved = false;
+        var subOptions = this._subOptionsByFrameId[frameId];
+        for (var i = 0; i < subOptions.length; ++i) {
+            selectedOptionRemoved |= this._executionContextSelector.selectedOption() === subOptions[i];
+            this._executionContextSelector.removeOption(subOptions[i]);
+        }
+        this._subOptionsByFrameId[frameId] = [];
+        return selectedOptionRemoved;
     },
 
-    _contextChanged: function()
+    _executionContextChanged: function()
     {
-        var option = this._contextSelector.selectedOption();
-        WebInspector.runtimeModel.setCurrentExecutionContext(option ? option._executionContext : null);
+        var runtimeContext = WebInspector.runtimeModel.currentExecutionContext();
+        if (this._currentExecutionContext() !== runtimeContext)
+            WebInspector.runtimeModel.setCurrentExecutionContext(this._currentExecutionContext());
+    },
+
+    /**
+     * @return {?WebInspector.ExecutionContext}
+     */
+    _currentExecutionContext: function()
+    {
+        var option = this._executionContextSelector.selectedOption();
+        return option ? option._executionContext : null;
     },
 
     /**
@@ -221,9 +218,17 @@
     _frameUpdated: function(event)
     {
         var contextList = /** @type {!WebInspector.FrameExecutionContextList} */ (event.data);
-        var option = contextList._consoleOption;
-        option.text = contextList.displayName;
+        var option = this._topLevelOptionByFrameId[contextList.frameId];
+        var maxLength = 50;
+        option.text = contextList.displayName.trimMiddle(maxLength);
         option.title = contextList.url;
+
+        var selectedRemoved = this._removeSubOptions(contextList.frameId);
+
+        if (selectedRemoved) {
+            this._executionContextSelector.select(option);
+            this._executionContextChanged();
+        }
     },
 
     /**
@@ -232,17 +237,35 @@
     _contextAdded: function(event)
     {
         var contextList = /** @type {!WebInspector.FrameExecutionContextList} */ (event.data);
-        if (contextList === this._currentFrame())
-            this._frameChanged();
-    },
 
-    /**
-     * @return {!WebInspector.FrameExecutionContextList|undefined}
-     */
-    _currentFrame: function()
-    {
-        var option = this._frameSelector.selectedOption();
-        return option ? option._contextList : undefined;
+        var currentExecutionContext = this._currentExecutionContext();
+        var shouldSelectOption = this._removeSubOptions(contextList.frameId);
+
+        var topLevelOption = this._topLevelOptionByFrameId[contextList.frameId];
+        var nextTopLevelOption = topLevelOption.nextSibling;
+        var subOptions = this._subOptionsByFrameId[contextList.frameId];
+        var executionContexts = contextList.executionContexts();
+        for (var i = 0; i < executionContexts.length; ++i) {
+            if (executionContexts[i].isMainWorldContext) {
+                topLevelOption._executionContext = executionContexts[i];
+                continue;
+            }
+            var subOption = document.createElement("option");
+            subOption.text = "\u00a0\u00a0\u00a0\u00a0" + executionContexts[i].name;
+            subOption._executionContext = executionContexts[i];
+            this._executionContextSelector.selectElement().insertBefore(subOption, nextTopLevelOption);
+            subOptions.push(subOption);
+
+            if (shouldSelectOption && executionContexts[i] === currentExecutionContext) {
+                this._executionContextSelector.select(subOption);
+                shouldSelectOption = false;
+            }
+        }
+
+        if (shouldSelectOption)
+            this._executionContextSelector.select(topLevelOption);
+
+        this._executionContextChanged();
     },
 
     willHide: function()
@@ -257,9 +280,10 @@
             this.prompt.moveCaretToEndOfPrompt();
     },
 
-    afterShow: function()
+    focus: function()
     {
         WebInspector.setCurrentFocusElement(this.promptElement);
+        this.prompt.moveCaretToEndOfPrompt();
     },
 
     storeScrollPositions: function()
@@ -291,10 +315,13 @@
         if (this._scrollIntoViewTimer)
             return;
 
+        /**
+         * @this {WebInspector.ConsoleView}
+         */
         function scrollIntoView()
         {
             delete this._scrollIntoViewTimer;
-            this.messagesElement.scrollTop = this.messagesElement.scrollHeight - this.messagesElement.clientHeight;
+            this.messagesElement.scrollTop = this.messagesElement.scrollHeight;
         }
         this._scrollIntoViewTimer = setTimeout(scrollIntoView.bind(this), 20);
     },
@@ -395,12 +422,6 @@
 
     _handleContextMenuEvent: function(event)
     {
-        if (!window.getSelection().isCollapsed) {
-            // If there is a selection, we want to show our normal context menu
-            // (with Copy, etc.), and not Clear Console.
-            return;
-        }
-
         if (event.target.enclosingNodeOrSelfWithNodeName("a"))
             return;
 
@@ -614,6 +635,7 @@
          * @param {string=} url
          * @param {number=} lineNumber
          * @param {number=} columnNumber
+         * @this {WebInspector.ConsoleView}
          */
         function addMessage(url, lineNumber, columnNumber)
         {
@@ -631,6 +653,7 @@
         /**
          * @param {?Protocol.Error} error
          * @param {!DebuggerAgent.FunctionDetails} response
+         * @this {WebInspector.ConsoleView}
          */
         function didGetDetails(error, response)
         {
@@ -671,6 +694,7 @@
          * @param {?WebInspector.RemoteObject} result
          * @param {boolean} wasThrown
          * @param {?RuntimeAgent.RemoteObject=} valueResult
+         * @this {WebInspector.ConsoleView}
          */
         function printResult(result, wasThrown, valueResult)
         {
@@ -689,6 +713,9 @@
         WebInspector.userMetrics.ConsoleEvaluated.record();
     },
 
+    /**
+     * @return {!Array.<!Element>}
+     */
     elementsToRestoreScrollPositionsFor: function()
     {
         return [this.messagesElement];
@@ -872,7 +899,7 @@
 
 /**
  * @constructor
- * @extends WebInspector.ConsoleMessage
+ * @extends {WebInspector.ConsoleMessage}
  */
 WebInspector.ConsoleCommand = function(text)
 {
@@ -915,6 +942,7 @@
 
     /**
      * @param {!RegExp} regexObject
+     * @return {boolean}
      */
     matchesRegex: function(regexObject)
     {
@@ -922,6 +950,9 @@
         return regexObject.test(this.text);
     },
 
+    /**
+     * @return {!Element}
+     */
     toMessageElement: function()
     {
         if (!this._element) {
@@ -974,6 +1005,9 @@
         return false;
     },
 
+    /**
+     * @return {!Element}
+     */
     toMessageElement: function()
     {
         var element = WebInspector.ConsoleMessageImpl.prototype.toMessageElement.call(this);
@@ -1063,9 +1097,9 @@
 }
 
 /**
- * @type {?WebInspector.ConsoleView}
+ * @type {!WebInspector.ConsoleView}
  */
-WebInspector.consoleView = null;
+WebInspector.consoleView;
 
 WebInspector.ConsoleMessage.create = function(source, level, message, type, url, line, column, repeatCount, parameters, stackTrace, requestId, isOutdated)
 {
diff --git a/Source/devtools/front_end/ContentProvider.js b/Source/devtools/front_end/ContentProvider.js
index 46274dc..7001710 100644
--- a/Source/devtools/front_end/ContentProvider.js
+++ b/Source/devtools/front_end/ContentProvider.js
@@ -79,15 +79,10 @@
 {
     var regex = createSearchRegex(query, caseSensitive, isRegex);
 
+    var contentString = new String(content);
     var result = [];
-    var lineEndings = content.lineEndings();
-    for (var i = 0; i < lineEndings.length; ++i) {
-        var lineStart = i > 0 ? lineEndings[i - 1] + 1 : 0;
-        var lineEnd = lineEndings[i];
-        var lineContent = content.substring(lineStart, lineEnd);
-        if (lineContent.length > 0 && lineContent.charAt(lineContent.length - 1) === "\r")
-            lineContent = lineContent.substring(0, lineContent.length - 1)
-
+    for (var i = 0; i < contentString.lineCount(); ++i) {
+        var lineContent = contentString.lineAt(i);
         regex.lastIndex = 0;
         if (regex.exec(lineContent))
             result.push(new WebInspector.ContentProvider.SearchMatch(i, lineContent));
diff --git a/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js b/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js
index 093d2c3..4699f9f 100644
--- a/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js
+++ b/Source/devtools/front_end/ContentProviderBasedProjectDelegate.js
@@ -137,11 +137,12 @@
         /**
          * @param {boolean} success
          * @param {string=} newName
+         * @this {WebInspector.ContentProviderBasedProjectDelegate}
          */
         function innerCallback(success, newName)
         {
             if (success)
-                this._updateName(path, newName);
+                this._updateName(path, /** @type {string} */ (newName));
             callback(success, newName);
         }
     },
@@ -219,8 +220,8 @@
     },
 
     /**
-     * @param {Array.<string>} queries
-     * @param {Array.<string>} fileQueries
+     * @param {!Array.<string>} queries
+     * @param {!Array.<string>} fileQueries
      * @param {boolean} caseSensitive
      * @param {boolean} isRegex
      * @param {!WebInspector.Progress} progress
@@ -239,6 +240,7 @@
 
         /**
          * @param {string} path
+         * @this {WebInspector.ContentProviderBasedProjectDelegate}
          */
         function filterOutContentScripts(path)
         {
@@ -274,12 +276,16 @@
         /**
          * @param {string} path
          * @param {function(boolean)} callback
+         * @this {WebInspector.ContentProviderBasedProjectDelegate}
          */
         function searchInContent(path, callback)
         {
             var queriesToRun = queries.slice();
             searchNextQuery.call(this);
 
+            /**
+             * @this {WebInspector.ContentProviderBasedProjectDelegate}
+             */
             function searchNextQuery()
             {
                 if (!queriesToRun.length) {
@@ -291,7 +297,8 @@
             }
 
             /**
-             * @param {Array.<WebInspector.ContentProvider.SearchMatch>} searchMatches
+             * @param {!Array.<!WebInspector.ContentProvider.SearchMatch>} searchMatches
+             * @this {WebInspector.ContentProviderBasedProjectDelegate}
              */
             function contentCallback(searchMatches)
             {
diff --git a/Source/devtools/front_end/ContentProviders.js b/Source/devtools/front_end/ContentProviders.js
index b8f83ad..f832115 100644
--- a/Source/devtools/front_end/ContentProviders.js
+++ b/Source/devtools/front_end/ContentProviders.js
@@ -97,6 +97,7 @@
 
         /**
          * @param {?string} content
+         * @this {WebInspector.ConcatenatedScriptsContentProvider}
          */
         function didRequestSource(content)
         {
@@ -134,6 +135,7 @@
         /**
          * @param {!WebInspector.Script} script
          * @param {!Array.<!PageAgent.SearchMatch>} searchMatches
+         * @this {WebInspector.ConcatenatedScriptsContentProvider}
          */
         function searchCallback(script, searchMatches)
         {
@@ -180,16 +182,14 @@
         }
 
         return content;
-    },
-
-    __proto__: WebInspector.ContentProvider.prototype
+    }
 }
 
 /**
  * @constructor
+ * @implements {WebInspector.ContentProvider}
  * @param {string} sourceURL
  * @param {!WebInspector.ResourceType} contentType
- * @implements {WebInspector.ContentProvider}
  */
 WebInspector.CompilerSourceMappingContentProvider = function(sourceURL, contentType)
 {
@@ -226,6 +226,7 @@
          * @param {number} statusCode
          * @param {!NetworkAgent.Headers} headers
          * @param {string} content
+         * @this {WebInspector.CompilerSourceMappingContentProvider}
          */
         function contentLoaded(error, statusCode, headers, content)
         {
@@ -261,9 +262,7 @@
 
             callback(WebInspector.ContentProvider.performSearchInContent(content, query, caseSensitive, isRegex));
         }
-    },
-
-    __proto__: WebInspector.ContentProvider.prototype
+    }
 }
 
 /**
@@ -311,6 +310,9 @@
      */
     searchInContent: function(query, caseSensitive, isRegex, callback)
     {
+        /**
+         * @this {WebInspector.StaticContentProvider}
+         */
         function performSearch()
         {
             callback(WebInspector.ContentProvider.performSearchInContent(this._content, query, caseSensitive, isRegex));
@@ -318,7 +320,5 @@
 
         // searchInContent should call back later.
         window.setTimeout(performSearch.bind(this), 0);
-    },
-
-    __proto__: WebInspector.ContentProvider.prototype
+    }
 }
diff --git a/Source/devtools/front_end/ContextMenu.js b/Source/devtools/front_end/ContextMenu.js
index e069b1f..7c2ded1 100644
--- a/Source/devtools/front_end/ContextMenu.js
+++ b/Source/devtools/front_end/ContextMenu.js
@@ -48,11 +48,17 @@
 }
 
 WebInspector.ContextMenuItem.prototype = {
+    /**
+     * @return {number}
+     */
     id: function()
     {
         return this._id;
     },
 
+    /**
+     * @return {string}
+     */
     type: function()
     {
         return this._type;
@@ -130,6 +136,7 @@
 
     /**
      * @param {boolean=} disabled
+     * @return {!WebInspector.ContextMenuItem}
      */
     appendCheckboxItem: function(label, handler, checked, disabled)
     {
@@ -196,6 +203,9 @@
 }
 
 WebInspector.ContextMenu.prototype = {
+    /**
+     * @return {number}
+     */
     nextId: function()
     {
         return this._id++;
@@ -242,8 +252,15 @@
      */
     appendApplicableItems: function(target)
     {
-        for (var i = 0; i < WebInspector.ContextMenu._providers.length; ++i) {
-            var provider = WebInspector.ContextMenu._providers[i];
+        WebInspector.moduleManager.extensions(WebInspector.ContextMenu.Provider, target).forEach(processProviders.bind(this));
+
+        /**
+         * @param {!WebInspector.ModuleManager.Extension} extension
+         * @this {WebInspector.ContextMenu}
+         */
+        function processProviders(extension)
+        {
+            var provider = /** @type {!WebInspector.ContextMenu.Provider} */ (extension.instance());
             this.appendSeparator();
             provider.appendApplicableItems(this._event, this, target);
             this.appendSeparator();
@@ -267,16 +284,6 @@
     appendApplicableItems: function(event, contextMenu, target) { }
 }
 
-/**
- * @param {!WebInspector.ContextMenu.Provider} provider
- */
-WebInspector.ContextMenu.registerProvider = function(provider)
-{
-    WebInspector.ContextMenu._providers.push(provider);
-}
-
-WebInspector.ContextMenu._providers = [];
-
 WebInspector.contextMenuItemSelected = function(id)
 {
     if (WebInspector._contextMenu)
diff --git a/Source/devtools/front_end/CookieItemsView.js b/Source/devtools/front_end/CookieItemsView.js
index 05d2976..4e05774 100644
--- a/Source/devtools/front_end/CookieItemsView.js
+++ b/Source/devtools/front_end/CookieItemsView.js
@@ -116,6 +116,9 @@
         var resourceURLsForDocumentURL = [];
         this._totalSize = 0;
 
+        /**
+         * @this {WebInspector.CookieItemsView}
+         */
         function populateResourcesForDocuments(resource)
         {
             var url = resource.documentURL.asParsedURL();
diff --git a/Source/devtools/front_end/CookiesTable.js b/Source/devtools/front_end/CookiesTable.js
index 6d88f34..7a213ac 100644
--- a/Source/devtools/front_end/CookiesTable.js
+++ b/Source/devtools/front_end/CookiesTable.js
@@ -38,7 +38,6 @@
 WebInspector.CookiesTable = function(expandable, refreshCallback, selectedCallback)
 {
     WebInspector.View.call(this);
-    this.element.className = "fill";
 
     var readOnly = expandable;
     this._refreshCallback = refreshCallback;
diff --git a/Source/devtools/front_end/CountersGraph.js b/Source/devtools/front_end/CountersGraph.js
new file mode 100644
index 0000000..f2512e3
--- /dev/null
+++ b/Source/devtools/front_end/CountersGraph.js
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+/**
+ * @constructor
+ * @extends {WebInspector.MemoryStatistics}
+ * @param {!WebInspector.TimelineView} timelineView
+ * @param {!WebInspector.TimelineModel} model
+ */
+WebInspector.CountersGraph = function(timelineView, model)
+{
+    WebInspector.MemoryStatistics.call(this, timelineView, model);
+}
+
+/**
+ * @constructor
+ * @extends {WebInspector.CounterUIBase}
+ * @param {!WebInspector.CountersGraph} memoryCountersPane
+ * @param {string} title
+ * @param {string} currentValueLabel
+ * @param {!string} color
+ * @param {!WebInspector.MemoryStatistics.Counter} counter
+ */
+WebInspector.CounterUI = function(memoryCountersPane, title, currentValueLabel, color, counter)
+{
+    WebInspector.CounterUIBase.call(this, memoryCountersPane, title, color, counter)
+    this._range = this._swatch.element.createChild("span");
+
+    this._value = memoryCountersPane._currentValuesBar.createChild("span", "memory-counter-value");
+    this._value.style.color = color;
+    this._currentValueLabel = currentValueLabel;
+    this._marker = memoryCountersPane._canvasContainer.createChild("div", "memory-counter-marker");
+    this._marker.style.backgroundColor = color;
+    this.clearCurrentValueAndMarker();
+
+    this.graphColor = color;
+    this.graphYValues = [];
+}
+
+WebInspector.CounterUI.prototype = {
+    reset: function()
+    {
+        this._range.textContent = "";
+    },
+
+    /**
+     * @param {number} minValue
+     * @param {number} maxValue
+     */
+    setRange: function(minValue, maxValue)
+    {
+        this._range.textContent = WebInspector.UIString("[%d:%d]", minValue, maxValue);
+    },
+
+    __proto__: WebInspector.CounterUIBase.prototype
+}
+
+
+WebInspector.CountersGraph.prototype = {
+    _createCurrentValuesBar: function()
+    {
+        this._currentValuesBar = this._graphsContainer.createChild("div");
+        this._currentValuesBar.id = "counter-values-bar";
+        this._graphsContainer.classList.add("dom-counters");
+    },
+
+    _createAllCounters: function()
+    {
+        this._counters = [];
+        this._counterUI = [];
+        this._createCounter(WebInspector.UIString("Documents"), WebInspector.UIString("Documents: %d"), "#d00", "documents");
+        this._createCounter(WebInspector.UIString("Nodes"), WebInspector.UIString("Nodes: %d"), "#0a0", "nodes");
+        this._createCounter(WebInspector.UIString("Listeners"), WebInspector.UIString("Listeners: %d"), "#00d", "jsEventListeners");
+        if (WebInspector.experimentsSettings.gpuTimeline.isEnabled())
+            this._createCounter(WebInspector.UIString("GPU Memory"), WebInspector.UIString("GPU Memory [KB]: %d"), "#c0c", "gpuMemoryUsedKB");
+    },
+
+    /**
+     * @param {string} uiName
+     * @param {string} uiValueTemplate
+     * @param {string} color
+     * @param {string} protocolName
+     */
+    _createCounter: function(uiName, uiValueTemplate, color, protocolName)
+    {
+        var counter = new WebInspector.MemoryStatistics.Counter(protocolName);
+        this._counters.push(counter);
+        this._counterUI.push(new WebInspector.CounterUI(this, uiName, uiValueTemplate, color, counter));
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _onRecordAdded: function(event)
+    {
+        /**
+         * @this {!WebInspector.CountersGraph}
+         */
+        function addStatistics(record)
+        {
+            var counters = record.counters;
+            if (!counters)
+                return;
+            var time = record.endTime || record.startTime;
+            for (var i = 0; i < this._counters.length; ++i)
+                this._counters[i].appendSample(time, counters);
+        }
+        WebInspector.TimelinePresentationModel.forAllRecords([/** @type {!TimelineAgent.TimelineEvent} */ (event.data)], null, addStatistics.bind(this));
+        this.scheduleRefresh();
+    },
+
+    draw: function()
+    {
+        WebInspector.MemoryStatistics.prototype.draw.call(this);
+        for (var i = 0; i < this._counterUI.length; i++)
+            this._drawGraph(this._counterUI[i]);
+    },
+
+    /**
+     * @param {!WebInspector.CounterUIBase} counterUI
+     */
+    _drawGraph: function(counterUI)
+    {
+        var canvas = this._canvas;
+        var ctx = canvas.getContext("2d");
+        var width = canvas.width;
+        var height = this._clippedHeight;
+        var originY = this._originY;
+        var counter = counterUI.counter;
+        var values = counter.values;
+
+        if (!values.length)
+            return;
+
+        var maxValue;
+        var minValue;
+        for (var i = counter._minimumIndex; i <= counter._maximumIndex; i++) {
+            var value = values[i];
+            if (minValue === undefined || value < minValue)
+                minValue = value;
+            if (maxValue === undefined || value > maxValue)
+                maxValue = value;
+        }
+        minValue = minValue || 0;
+        maxValue = maxValue || 1;
+
+        counterUI.setRange(minValue, maxValue);
+
+        if (!counterUI.visible)
+            return;
+
+        var yValues = counterUI.graphYValues;
+        yValues.length = this._counters.length;
+
+        var maxYRange = maxValue - minValue;
+        var yFactor = maxYRange ? height / (maxYRange) : 1;
+
+        ctx.save();
+        ctx.translate(0.5, 0.5);
+        ctx.beginPath();
+        var value = values[counter._minimumIndex];
+        var currentY = Math.round(originY + height - (value - minValue) * yFactor);
+        ctx.moveTo(0, currentY);
+        for (var i = counter._minimumIndex; i <= counter._maximumIndex; i++) {
+             var x = Math.round(counter.x[i]);
+             ctx.lineTo(x, currentY);
+             var currentValue = values[i];
+             if (typeof currentValue !== "undefined")
+                value = currentValue;
+             currentY = Math.round(originY + height - (value - minValue) * yFactor);
+             ctx.lineTo(x, currentY);
+             yValues[i] = currentY;
+        }
+        ctx.lineTo(width, currentY);
+        ctx.lineWidth = 1;
+        ctx.strokeStyle = counterUI.graphColor;
+        ctx.stroke();
+        ctx.closePath();
+        ctx.restore();
+    },
+
+    __proto__: WebInspector.MemoryStatistics.prototype
+}
+
diff --git a/Source/devtools/front_end/DOMAgent.js b/Source/devtools/front_end/DOMAgent.js
index 970c6b3..9e4a4fb 100644
--- a/Source/devtools/front_end/DOMAgent.js
+++ b/Source/devtools/front_end/DOMAgent.js
@@ -83,6 +83,11 @@
         this._templateContent.parentNode = this;
     }
 
+    if (payload.importedDocument) {
+        this._importedDocument = new WebInspector.DOMNode(this._domAgent, this.ownerDocument, true, payload.importedDocument);
+        this._importedDocument.parentNode = this;
+    }
+
     if (payload.children)
         this._setChildrenPayload(payload.children);
 
@@ -162,7 +167,7 @@
     },
 
     /**
-     * @return {!WebInspector.DOMNode}
+     * @return {?WebInspector.DOMNode}
      */
     templateContent: function()
     {
@@ -170,6 +175,14 @@
     },
 
     /**
+     * @return {?WebInspector.DOMNode}
+     */
+    importedDocument: function()
+    {
+        return this._importedDocument;
+    },
+
+    /**
      * @return {number}
      */
     nodeType: function()
@@ -312,7 +325,8 @@
     removeAttribute: function(name, callback)
     {
         /**
-         *  @param {?Protocol.Error} error
+         * @param {?Protocol.Error} error
+         * @this {WebInspector.DOMNode}
          */
         function mycallback(error)
         {
@@ -682,11 +696,20 @@
             this.parentNode._updateDescendantUserPropertyCount(name, -1);
     },
 
+    /**
+     * @param {string} name
+     * @return {?T}
+     * @template T
+     */
     getUserProperty: function(name)
     {
-        return this._userProperties ? this._userProperties[name] : null;
+        return (this._userProperties && this._userProperties[name]) || null;
     },
 
+    /**
+     * @param {string} name
+     * @return {number}
+     */
     descendantUserPropertyCount: function(name)
     {
         return this._descendantUserPropertyCounters && this._descendantUserPropertyCounters[name] ? this._descendantUserPropertyCounters[name] : 0;
@@ -718,8 +741,7 @@
 {
     WebInspector.DOMNode.call(this, domAgent, this, false, payload);
     this.documentURL = payload.documentURL || "";
-    this.baseURL = /** @type {string} */ (payload.baseURL);
-    console.assert(this.baseURL);
+    this.baseURL = payload.baseURL || "";
     this.xmlVersion = payload.xmlVersion;
     this._listeners = {};
 }
@@ -755,8 +777,7 @@
     ChildNodeCountUpdated: "ChildNodeCountUpdated",
     UndoRedoRequested: "UndoRedoRequested",
     UndoRedoCompleted: "UndoRedoCompleted",
-    InspectNodeRequested: "InspectNodeRequested",
-    PseudoStateChanged: "PseudoStateChanged"
+    InspectNodeRequested: "InspectNodeRequested"
 }
 
 WebInspector.DOMAgent.prototype = {
@@ -864,6 +885,9 @@
     {
         var callbackWrapper = this._wrapClientCallback(callback);
 
+        /**
+         * @this {WebInspector.DOMAgent}
+         */
         function onDocumentAvailable()
         {
             if (this._document)
@@ -913,7 +937,7 @@
             this._attributeLoadNodeIds[nodeIds[i]] = true;
         if ("_loadNodeAttributesTimeout" in this)
             return;
-        this._loadNodeAttributesTimeout = setTimeout(this._loadNodeAttributes.bind(this), 0);
+        this._loadNodeAttributesTimeout = setTimeout(this._loadNodeAttributes.bind(this), 20);
     },
 
     _loadNodeAttributes: function()
@@ -1116,17 +1140,6 @@
     },
 
     /**
-     * @param {!DOMAgent.NodeId} elementId
-     */
-    _pseudoStateChanged: function(elementId)
-    {
-        var node = this._idToDOMNode[elementId];
-        if (!node)
-            return;
-        this.dispatchEventToListeners(WebInspector.DOMAgent.Events.PseudoStateChanged, node);
-    },
-
-    /**
      * @param {!WebInspector.DOMNode} node
      */
     _unbind: function(node)
@@ -1173,6 +1186,7 @@
          * @param {?Protocol.Error} error
          * @param {string} searchId
          * @param {number} resultsCount
+         * @this {WebInspector.DOMAgent}
          */
         function callback(error, searchId, resultsCount)
         {
@@ -1184,7 +1198,7 @@
 
     /**
      * @param {number} index
-     * @param {?function(?DOMAgent.Node)} callback
+     * @param {?function(?WebInspector.DOMNode)} callback
      */
     searchResult: function(index, callback)
     {
@@ -1196,6 +1210,7 @@
         /**
          * @param {?Protocol.Error} error
          * @param {!Array.<number>} nodeIds
+         * @this {WebInspector.DOMAgent}
          */
         function searchResultsCallback(error, nodeIds)
         {
@@ -1207,7 +1222,7 @@
             if (nodeIds.length != 1)
                 return;
 
-            callback(this._idToDOMNode[nodeIds[0]]);
+            callback(this.nodeForId(nodeIds[0]));
         }
     },
 
@@ -1274,6 +1289,9 @@
      */
     setInspectModeEnabled: function(enabled, inspectShadowDOM, callback)
     {
+        /**
+         * @this {WebInspector.DOMAgent}
+         */
         function onDocumentAvailable()
         {
             this._highlighter.setInspectModeEnabled(enabled, inspectShadowDOM, this._buildHighlightConfig(), callback);
@@ -1315,6 +1333,10 @@
      */
     _markRevision: function(node, callback)
     {
+        /**
+         * @param {?Protocol.Error} error
+         * @this {WebInspector.DOMAgent}
+         */
         function wrapperFunction(error)
         {
             if (!error)
@@ -1352,6 +1374,11 @@
             }
         }
 
+        /**
+         * @param {?Protocol.Error} error
+         * @param {string} scriptId
+         * @this {WebInspector.DOMAgent}
+         */
         function scriptAddedCallback(error, scriptId)
         {
             delete this._addTouchEventsScriptInjecting;
@@ -1373,6 +1400,10 @@
      */
     undo: function(callback)
     {
+        /**
+         * @param {?Protocol.Error} error
+         * @this {WebInspector.DOMAgent}
+         */
         function mycallback(error)
         {
             this.dispatchEventToListeners(WebInspector.DOMAgent.Events.UndoRedoCompleted);
@@ -1388,6 +1419,10 @@
      */
     redo: function(callback)
     {
+        /**
+         * @param {?Protocol.Error} error
+         * @this {WebInspector.DOMAgent}
+         */
         function mycallback(error)
         {
             this.dispatchEventToListeners(WebInspector.DOMAgent.Events.UndoRedoCompleted);
@@ -1540,14 +1575,6 @@
     pseudoElementRemoved: function(parentId, pseudoElementId)
     {
         this._domAgent._pseudoElementRemoved(parentId, pseudoElementId);
-    },
-
-    /**
-     * @param {!DOMAgent.NodeId} elementId
-     */
-    pseudoStateChanged: function(elementId)
-    {
-        this._domAgent._pseudoStateChanged(elementId);
     }
 }
 
@@ -1569,7 +1596,7 @@
      * @param {boolean} enabled
      * @param {boolean} inspectShadowDOM
      * @param {!DOMAgent.HighlightConfig} config
-     * @param {function(?Protocol.Error)} callback
+     * @param {function(?Protocol.Error)=} callback
      */
     setInspectModeEnabled: function(enabled, inspectShadowDOM, config, callback) {}
 }
@@ -1599,7 +1626,7 @@
      * @param {boolean} enabled
      * @param {boolean} inspectShadowDOM
      * @param {!DOMAgent.HighlightConfig} config
-     * @param {function(?Protocol.Error)} callback
+     * @param {function(?Protocol.Error)=} callback
      */
     setInspectModeEnabled: function(enabled, inspectShadowDOM, config, callback)
     {
@@ -1608,6 +1635,6 @@
 }
 
 /**
- * @type {?WebInspector.DOMAgent}
+ * @type {!WebInspector.DOMAgent}
  */
-WebInspector.domAgent = null;
+WebInspector.domAgent;
diff --git a/Source/devtools/front_end/DOMBreakpointsSidebarPane.js b/Source/devtools/front_end/DOMBreakpointsSidebarPane.js
index cbe2072..93d4edc 100644
--- a/Source/devtools/front_end/DOMBreakpointsSidebarPane.js
+++ b/Source/devtools/front_end/DOMBreakpointsSidebarPane.js
@@ -82,6 +82,10 @@
                 nodeBreakpoints[element._type] = true;
         }
 
+        /**
+         * @param {string} type
+         * @this {WebInspector.DOMBreakpointsSidebarPane}
+         */
         function toggleBreakpoint(type)
         {
             if (!nodeBreakpoints[type])
@@ -109,6 +113,7 @@
 
         /**
          * @param {?DOMAgent.NodeId} targetNodeId
+         * @this {WebInspector.DOMBreakpointsSidebarPane}
          */
         function didPushNodeToFrontend(targetNodeId)
         {
@@ -249,6 +254,10 @@
     _contextMenu: function(node, type, event)
     {
         var contextMenu = new WebInspector.ContextMenu(event);
+
+        /**
+         * @this {WebInspector.DOMBreakpointsSidebarPane}
+         */
         function removeBreakpoint()
         {
             this._removeBreakpoint(node, type);
@@ -315,6 +324,7 @@
         /**
          * @param {string} path
          * @param {?DOMAgent.NodeId} nodeId
+         * @this {WebInspector.DOMBreakpointsSidebarPane}
          */
         function didPushNodeByPathToFrontend(path, nodeId)
         {
@@ -343,6 +353,7 @@
 
     /**
      * @param {!WebInspector.Panel} panel
+     * @return {!WebInspector.DOMBreakpointsSidebarPane.Proxy}
      */
     createProxy: function(panel)
     {
@@ -412,6 +423,6 @@
 }
 
 /**
- * @type {?WebInspector.DOMBreakpointsSidebarPane}
+ * @type {!WebInspector.DOMBreakpointsSidebarPane}
  */
-WebInspector.domBreakpointsSidebarPane = null;
+WebInspector.domBreakpointsSidebarPane;
diff --git a/Source/devtools/front_end/DOMCountersGraph.js b/Source/devtools/front_end/DOMCountersGraph.js
deleted file mode 100644
index 5d25422..0000000
--- a/Source/devtools/front_end/DOMCountersGraph.js
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-
-/**
- * @constructor
- * @extends {WebInspector.MemoryStatistics}
- * @param {!WebInspector.TimelinePanel} timelinePanel
- * @param {!WebInspector.TimelineModel} model
- */
-WebInspector.DOMCountersGraph = function(timelinePanel, model)
-{
-    WebInspector.MemoryStatistics.call(this, timelinePanel, model);
-}
-
-/**
- * @constructor
- * @extends {WebInspector.CounterUIBase}
- * @param {!WebInspector.DOMCountersGraph} memoryCountersPane
- * @param {string} title
- * @param {string} currentValueLabel
- * @param {!Array.<number>} rgb
- * @param {function(!WebInspector.DOMCountersGraph.Counter):number} valueGetter
- */
-WebInspector.DOMCounterUI = function(memoryCountersPane, title, currentValueLabel, rgb, valueGetter)
-{
-    var swatchColor = "rgb(" + rgb.join(",") + ")";
-    WebInspector.CounterUIBase.call(this, memoryCountersPane, title, swatchColor, valueGetter)
-    this._range = this._swatch.element.createChild("span");
-
-    this._value = memoryCountersPane._currentValuesBar.createChild("span", "memory-counter-value");
-    this._value.style.color = swatchColor;
-    this._currentValueLabel = currentValueLabel;
-
-    this.graphColor = "rgba(" + rgb.join(",") + ",0.8)";
-    this.graphYValues = [];
-}
-
-/**
- * @constructor
- * @extends {WebInspector.MemoryStatistics.Counter}
- * @param {number} time
- * @param {number} documentCount
- * @param {number} nodeCount
- * @param {number} listenerCount
- */
-WebInspector.DOMCountersGraph.Counter = function(time, documentCount, nodeCount, listenerCount, usedGPUMemoryKBytes)
-{
-    WebInspector.MemoryStatistics.Counter.call(this, time);
-    this.documentCount = documentCount;
-    this.nodeCount = nodeCount;
-    this.listenerCount = listenerCount;
-    this.usedGPUMemoryKBytes = usedGPUMemoryKBytes;
-}
-
-WebInspector.DOMCounterUI.prototype = {
-    /**
-     * @param {number} minValue
-     * @param {number} maxValue
-     */
-    setRange: function(minValue, maxValue)
-    {
-        this._range.textContent = WebInspector.UIString("[%d:%d]", minValue, maxValue);
-    },
-
-    updateCurrentValue: function(countersEntry)
-    {
-        this._value.textContent =  WebInspector.UIString(this._currentValueLabel, this.valueGetter(countersEntry));
-    },
-
-    clearCurrentValueAndMarker: function(ctx)
-    {
-        this._value.textContent = "";
-        this.restoreImageUnderMarker(ctx);
-    },
-
-    /**
-     * @param {!CanvasRenderingContext2D} ctx
-     * @param {number} x
-     * @param {number} y
-     * @param {number} radius
-     */
-    saveImageUnderMarker: function(ctx, x, y, radius)
-    {
-        const w = radius + 1;
-        var imageData = ctx.getImageData(x - w, y - w, 2 * w, 2 * w);
-        this._imageUnderMarker = {
-            x: x - w,
-            y: y - w,
-            imageData: imageData
-        };
-    },
-
-    /**
-     * @param {!CanvasRenderingContext2D} ctx
-     */
-    restoreImageUnderMarker: function(ctx)
-    {
-        if (!this.visible)
-            return;
-        if (this._imageUnderMarker)
-            ctx.putImageData(this._imageUnderMarker.imageData, this._imageUnderMarker.x, this._imageUnderMarker.y);
-        this.discardImageUnderMarker();
-    },
-
-    discardImageUnderMarker: function()
-    {
-        delete this._imageUnderMarker;
-    },
-
-    __proto__: WebInspector.CounterUIBase.prototype
-}
-
-
-WebInspector.DOMCountersGraph.prototype = {
-    _createCurrentValuesBar: function()
-    {
-        this._currentValuesBar = this._canvasContainer.createChild("div");
-        this._currentValuesBar.id = "counter-values-bar";
-        this._canvasContainer.classList.add("dom-counters");
-    },
-
-    /**
-     * @return {!Element}
-     */
-    resizeElement: function()
-    {
-        return this._currentValuesBar;
-    },
-
-    /**
-     * @return {!Array.<!WebInspector.DOMCounterUI>}
-     */
-    _createCounterUIList: function()
-    {
-        function getDocumentCount(entry)
-        {
-            return entry.documentCount;
-        }
-        function getNodeCount(entry)
-        {
-            return entry.nodeCount;
-        }
-        function getListenerCount(entry)
-        {
-            return entry.listenerCount;
-        }
-        function getUsedGPUMemoryKBytes(entry)
-        {
-            return entry.usedGPUMemoryKBytes || 0;
-        }
-        var counterUIs = [
-            new WebInspector.DOMCounterUI(this, "Documents", "Documents: %d", [100, 0, 0], getDocumentCount),
-            new WebInspector.DOMCounterUI(this, "Nodes", "Nodes: %d", [0, 100, 0], getNodeCount),
-            new WebInspector.DOMCounterUI(this, "Listeners", "Listeners: %d", [0, 0, 100], getListenerCount)
-        ];
-        if (WebInspector.experimentsSettings.gpuTimeline.isEnabled())
-            counterUIs.push(new WebInspector.DOMCounterUI(this, "GPU Memory", "GPU Memory [KB]: %d", [200, 0, 200], getUsedGPUMemoryKBytes));
-        return counterUIs;
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _onRecordAdded: function(event)
-    {
-        /**
-         * @param {!Array.<!T>} array
-         * @param {!S} item
-         * @param {!function(!T,!S):!number} comparator
-         * @return {!number}
-         * @template T,S
-         */
-        function findInsertionLocation(array, item, comparator)
-        {
-            var index = array.length;
-            while (index > 0 && comparator(array[index - 1], item) > 0)
-                --index;
-            return index;
-        }
-
-        function addStatistics(record)
-        {
-            var counters = record["counters"];
-            var isGPURecord = record.data && typeof record.data["usedGPUMemoryBytes"] !== "undefined";
-            if (isGPURecord) {
-                counters = counters || {
-                    "startTime": record.startTime,
-                    "endTime": record.endTime
-                };
-                counters["usedGPUMemoryKBytes"] = Math.round(record.data["usedGPUMemoryBytes"] / 1024);
-            }
-            if (!counters)
-                return;
-
-            var time = record.endTime || record.startTime;
-            var counter = new WebInspector.DOMCountersGraph.Counter(
-                time,
-                counters["documents"],
-                counters["nodes"],
-                counters["jsEventListeners"],
-                counters["usedGPUMemoryKBytes"]
-            );
-
-            function compare(record, time)
-            {
-                return record.time - time;
-            }
-            var index = findInsertionLocation(this._counters, time, compare);
-            this._counters.splice(index, 0, counter);
-            if (isGPURecord) {
-                // Populate missing values from preceeding records.
-                // FIXME: Refactor the code to make each WebInspector.DOMCountersGraph.Counter
-                // be responsible for a single graph to avoid such synchronizations.
-                for (var i = index - 1; i >= 0 && typeof this._counters[i].usedGPUMemoryKBytes === "undefined"; --i) { }
-                var usedGPUMemoryKBytes = this._counters[i >= 0 ? i : index].usedGPUMemoryKBytes;
-                for (i = Math.max(i, 0); i < index; ++i)
-                    this._counters[i].usedGPUMemoryKBytes = usedGPUMemoryKBytes;
-                var copyFrom = index > 0 ? index - 1 : index + 1;
-                if (copyFrom < this._counters.length) {
-                    this._counters[index].documentCount = this._counters[copyFrom].documentCount;
-                    this._counters[index].nodeCount = this._counters[copyFrom].nodeCount;
-                    this._counters[index].listenerCount = this._counters[copyFrom].listenerCount;
-                } else {
-                    this._counters[index].documentCount =  0;
-                    this._counters[index].nodeCount = 0;
-                    this._counters[index].listenerCount = 0;
-                }
-            }
-        }
-        WebInspector.TimelinePresentationModel.forAllRecords([event.data], null, addStatistics.bind(this));
-    },
-
-    draw: function()
-    {
-        WebInspector.MemoryStatistics.prototype.draw.call(this);
-        for (var i = 0; i < this._counterUI.length; i++)
-            this._drawGraph(this._counterUI[i]);
-    },
-
-    /**
-     * @param {!CanvasRenderingContext2D} ctx
-     */
-    _restoreImageUnderMarker: function(ctx)
-    {
-        for (var i = 0; i < this._counterUI.length; i++) {
-            var counterUI = this._counterUI[i];
-            if (!counterUI.visible)
-                continue;
-            counterUI.restoreImageUnderMarker(ctx);
-        }
-    },
-
-    /**
-     * @param {!CanvasRenderingContext2D} ctx
-     * @param {number} x
-     * @param {number} index
-     */
-    _saveImageUnderMarker: function(ctx, x, index)
-    {
-        const radius = 2;
-        for (var i = 0; i < this._counterUI.length; i++) {
-            var counterUI = this._counterUI[i];
-            if (!counterUI.visible)
-                continue;
-            var y = counterUI.graphYValues[index];
-            counterUI.saveImageUnderMarker(ctx, x, y, radius);
-        }
-    },
-
-    /**
-     * @param {!CanvasRenderingContext2D} ctx
-     * @param {number} x
-     * @param {number} index
-     */
-    _drawMarker: function(ctx, x, index)
-    {
-        this._saveImageUnderMarker(ctx, x, index);
-        const radius = 2;
-        for (var i = 0; i < this._counterUI.length; i++) {
-            var counterUI = this._counterUI[i];
-            if (!counterUI.visible)
-                continue;
-            var y = counterUI.graphYValues[index];
-            ctx.beginPath();
-            ctx.arc(x + 0.5, y + 0.5, radius, 0, Math.PI * 2, true);
-            ctx.lineWidth = 1;
-            ctx.fillStyle = counterUI.graphColor;
-            ctx.strokeStyle = counterUI.graphColor;
-            ctx.fill();
-            ctx.stroke();
-            ctx.closePath();
-        }
-    },
-
-    /**
-     * @param {!WebInspector.CounterUIBase} counterUI
-     */
-    _drawGraph: function(counterUI)
-    {
-        var canvas = this._canvas;
-        var ctx = canvas.getContext("2d");
-        var width = canvas.width;
-        var height = this._clippedHeight;
-        var originY = this._originY;
-        var valueGetter = counterUI.valueGetter;
-
-        if (!this._counters.length)
-            return;
-
-        var maxValue;
-        var minValue;
-        for (var i = this._minimumIndex; i <= this._maximumIndex; i++) {
-            var value = valueGetter(this._counters[i]);
-            if (minValue === undefined || value < minValue)
-                minValue = value;
-            if (maxValue === undefined || value > maxValue)
-                maxValue = value;
-        }
-
-        counterUI.setRange(minValue, maxValue);
-
-        if (!counterUI.visible)
-            return;
-
-        var yValues = counterUI.graphYValues;
-        yValues.length = this._counters.length;
-
-        var maxYRange = maxValue - minValue;
-        var yFactor = maxYRange ? height / (maxYRange) : 1;
-
-        ctx.save();
-        ctx.translate(0.5, 0.5);
-        ctx.beginPath();
-        var currentY = Math.round(originY + (height - (valueGetter(this._counters[this._minimumIndex]) - minValue) * yFactor));
-        ctx.moveTo(0, currentY);
-        for (var i = this._minimumIndex; i <= this._maximumIndex; i++) {
-             var x = Math.round(this._counters[i].x);
-             ctx.lineTo(x, currentY);
-             currentY = Math.round(originY + (height - (valueGetter(this._counters[i]) - minValue) * yFactor));
-             ctx.lineTo(x, currentY);
-             yValues[i] = currentY;
-        }
-        ctx.lineTo(width, currentY);
-        ctx.lineWidth = 1;
-        ctx.strokeStyle = counterUI.graphColor;
-        ctx.stroke();
-        ctx.closePath();
-        ctx.restore();
-    },
-
-    _discardImageUnderMarker: function()
-    {
-        for (var i = 0; i < this._counterUI.length; i++)
-            this._counterUI[i].discardImageUnderMarker();
-    },
-
-    __proto__: WebInspector.MemoryStatistics.prototype
-}
-
diff --git a/Source/devtools/front_end/DOMExtension.js b/Source/devtools/front_end/DOMExtension.js
index 82bf800..b9629db 100644
--- a/Source/devtools/front_end/DOMExtension.js
+++ b/Source/devtools/front_end/DOMExtension.js
@@ -166,16 +166,21 @@
 /**
  * @param {number|undefined} x
  * @param {number|undefined} y
+ * @param {!Element=} relativeTo
  */
-Element.prototype.positionAt = function(x, y)
+Element.prototype.positionAt = function(x, y, relativeTo)
 {
+    var shift = {x: 0, y: 0};
+    if (relativeTo)
+       shift = relativeTo.boxInWindow(this.ownerDocument.defaultView);
+
     if (typeof x === "number")
-        this.style.setProperty("left", x + "px");
+        this.style.setProperty("left", (shift.x + x) + "px");
     else
         this.style.removeProperty("left");
 
     if (typeof y === "number")
-        this.style.setProperty("top", y + "px");
+        this.style.setProperty("top", (shift.y + y) + "px");
     else
         this.style.removeProperty("top");
 }
@@ -368,6 +373,25 @@
 }
 
 /**
+ * @param {!AnchorBox} box
+ * @return {!AnchorBox}
+ */
+AnchorBox.prototype.relativeTo = function(box)
+{
+    return new AnchorBox(
+        this.x - box.x, this.y - box.y, this.width, this.height);
+};
+
+/**
+ * @param {!Element} element
+ * @return {!AnchorBox}
+ */
+AnchorBox.prototype.relativeToElement = function(element)
+{
+    return this.relativeTo(element.boxInWindow(element.ownerDocument.defaultView));
+};
+
+/**
  * @param {!Window} targetWindow
  * @return {!AnchorBox}
  */
@@ -545,6 +569,9 @@
     return this.parentNode;
 }
 
+/**
+ * @return {boolean}
+ */
 function isEnterKey(event) {
     // Check if in IME.
     return event.keyCode !== 229 && event.keyIdentifier === "Enter";
@@ -554,45 +581,3 @@
 {
     e.consume();
 }
-
-/**
- * Mutation observers leak memory. Keep track of them and disconnect
- * on unload.
- * @constructor
- * @param {function(!Array.<!WebKitMutation>)} handler
- */
-function NonLeakingMutationObserver(handler)
-{
-    this._observer = new WebKitMutationObserver(handler);
-    NonLeakingMutationObserver._instances.push(this);
-    if (!NonLeakingMutationObserver._unloadListener) {
-        NonLeakingMutationObserver._unloadListener = function() {
-            while (NonLeakingMutationObserver._instances.length)
-                NonLeakingMutationObserver._instances[NonLeakingMutationObserver._instances.length - 1].disconnect();
-        };
-        window.addEventListener("unload", NonLeakingMutationObserver._unloadListener, false);
-    }
-}
-
-NonLeakingMutationObserver._instances = [];
-
-NonLeakingMutationObserver.prototype = {
-    /**
-     * @param {!Element} element
-     * @param {!Object} config
-     */
-    observe: function(element, config)
-    {
-        if (this._observer)
-            this._observer.observe(element, config);
-    },
-
-    disconnect: function()
-    {
-        if (this._observer)
-            this._observer.disconnect();
-        NonLeakingMutationObserver._instances.remove(this);
-        delete this._observer;
-    }
-}
-
diff --git a/Source/devtools/front_end/DOMPresentationUtils.js b/Source/devtools/front_end/DOMPresentationUtils.js
index d412f9d..bf119de 100644
--- a/Source/devtools/front_end/DOMPresentationUtils.js
+++ b/Source/devtools/front_end/DOMPresentationUtils.js
@@ -164,15 +164,25 @@
  * @param {boolean=} justSelector
  * @return {string}
  */
-WebInspector.DOMPresentationUtils.appropriateSelectorFor = function(node, justSelector)
+WebInspector.DOMPresentationUtils.fullQualifiedSelector = function(node, justSelector)
+{
+    if (node.nodeType() !== Node.ELEMENT_NODE)
+        return node.localName() || node.nodeName().toLowerCase();
+    return WebInspector.DOMPresentationUtils.cssPath(node, justSelector);
+}
+
+/**
+ * @param {!WebInspector.DOMNode} node
+ * @return {string}
+ */
+WebInspector.DOMPresentationUtils.simpleSelector = function(node)
 {
     var lowerCaseName = node.localName() || node.nodeName().toLowerCase();
     if (node.nodeType() !== Node.ELEMENT_NODE)
         return lowerCaseName;
     if (lowerCaseName === "input" && node.getAttribute("type") && !node.getAttribute("id") && !node.getAttribute("class"))
         return lowerCaseName + "[type=\"" + node.getAttribute("type") + "\"]";
-
-    return WebInspector.DOMPresentationUtils.cssPath(node, justSelector);
+    return WebInspector.DOMPresentationUtils._cssPathStep(node, false, true).value;
 }
 
 /**
@@ -188,7 +198,7 @@
     var steps = [];
     var contextNode = node;
     while (contextNode) {
-        var step = WebInspector.DOMPresentationUtils._cssPathValue(contextNode, optimized);
+        var step = WebInspector.DOMPresentationUtils._cssPathStep(contextNode, !!optimized, contextNode === node);
         if (!step)
             break; // Error - bail out early.
         steps.push(step);
@@ -203,10 +213,11 @@
 
 /**
  * @param {!WebInspector.DOMNode} node
- * @param {boolean=} optimized
+ * @param {boolean} optimized
+ * @param {boolean} isTargetNode
  * @return {?WebInspector.DOMNodePathStep}
  */
-WebInspector.DOMPresentationUtils._cssPathValue = function(node, optimized)
+WebInspector.DOMPresentationUtils._cssPathStep = function(node, optimized, isTargetNode)
 {
     if (node.nodeType() !== Node.ELEMENT_NODE)
         return null;
@@ -312,11 +323,15 @@
     var needsClassNames = false;
     var needsNthChild = false;
     var ownIndex = -1;
+    var elementIndex = -1;
     var siblings = parent.children();
     for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {
         var sibling = siblings[i];
+        if (sibling.nodeType() !== Node.ELEMENT_NODE)
+            continue;
+        elementIndex += 1;
         if (sibling === node) {
-            ownIndex = i;
+            ownIndex = elementIndex;
             continue;
         }
         if (needsNthChild)
@@ -347,6 +362,8 @@
     }
 
     var result = nodeName;
+    if (isTargetNode && nodeName.toLowerCase() === "input" && node.getAttribute("type") && !node.getAttribute("id") && !node.getAttribute("class"))
+        result += "[type=\"" + node.getAttribute("type") + "\"]";
     if (needsNthChild) {
         result += ":nth-child(" + (ownIndex + 1) + ")";
     } else if (needsClassNames) {
diff --git a/Source/devtools/front_end/DOMStorage.js b/Source/devtools/front_end/DOMStorage.js
index ead9de5..edce4b6 100644
--- a/Source/devtools/front_end/DOMStorage.js
+++ b/Source/devtools/front_end/DOMStorage.js
@@ -306,6 +306,6 @@
 }
 
 /**
- * @type {?WebInspector.DOMStorageModel}
+ * @type {!WebInspector.DOMStorageModel}
  */
-WebInspector.domStorageModel = null;
+WebInspector.domStorageModel;
diff --git a/Source/devtools/front_end/DOMSyntaxHighlighter.js b/Source/devtools/front_end/DOMSyntaxHighlighter.js
index 47847e5..8441dbd 100644
--- a/Source/devtools/front_end/DOMSyntaxHighlighter.js
+++ b/Source/devtools/front_end/DOMSyntaxHighlighter.js
@@ -33,12 +33,16 @@
  */
 WebInspector.DOMSyntaxHighlighter = function(mimeType, stripExtraWhitespace)
 {
-    loadScript("CodeMirrorTextEditor.js");
     this._mimeType = mimeType;
     this._stripExtraWhitespace = stripExtraWhitespace;
 }
 
 WebInspector.DOMSyntaxHighlighter.prototype = {
+    /**
+     * @param {string} content
+     * @param {string} className
+     * @return {!Element}
+     */
     createSpan: function(content, className)
     {
         var span = document.createElement("span");
@@ -56,9 +60,10 @@
 
         /**
          * @param {string} token
-         * @param {string} tokenType
+         * @param {?string} tokenType
          * @param {number} column
          * @param {number} newColumn
+         * @this {WebInspector.DOMSyntaxHighlighter}
          */
         function processToken(token, tokenType, column, newColumn)
         {
@@ -73,7 +78,7 @@
             plainTextStart = newColumn;
         }
 
-        var tokenize = WebInspector.CodeMirrorUtils.createTokenizer(this._mimeType);
+        var tokenize = WebInspector.moduleManager.instance(WebInspector.TokenizerFactory).createTokenizer(this._mimeType);
         for (var i = lines[0].length ? 0 : 1; i < lines.length; ++i) {
             var line = lines[i];
             var plainTextStart = 0;
diff --git a/Source/devtools/front_end/DataGrid.js b/Source/devtools/front_end/DataGrid.js
index 3680c8e..d9fb47e 100644
--- a/Source/devtools/front_end/DataGrid.js
+++ b/Source/devtools/front_end/DataGrid.js
@@ -43,6 +43,9 @@
 
     this._headerTable = document.createElement("table");
     this._headerTable.className = "header";
+    /**
+     * @type {!Object.<string, !Element>}
+     */
     this._headerTableHeaders = {};
 
     this._dataTable = document.createElement("table");
@@ -192,7 +195,7 @@
     for (var i = 0; i < length; ++i)
         dataGrid.rootNode().appendChild(nodes[i]);
 
-    dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged, sortDataGrid, this);
+    dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged, sortDataGrid);
 
     function sortDataGrid()
     {
@@ -288,7 +291,7 @@
         this._editingNode.select();
 
         var element = this._editingNode._element.children[columnOrdinal];
-        WebInspector.startEditing(element, this._startEditingConfig(element));
+        WebInspector.InplaceEditor.startEditing(element, this._startEditingConfig(element));
         window.getSelection().setBaseAndExtent(element, 0, element, 1);
     },
 
@@ -310,7 +313,7 @@
             return this._startEditingColumnOfDataGridNode(this._editingNode, this._nextEditableColumn(-1));
 
         this._editing = true;
-        WebInspector.startEditing(element, this._startEditingConfig(element));
+        WebInspector.InplaceEditor.startEditing(element, this._startEditingConfig(element));
 
         window.getSelection().setBaseAndExtent(element, 0, element, 1);
     },
@@ -322,7 +325,7 @@
 
     _startEditingConfig: function(element)
     {
-        return new WebInspector.EditingConfig(this._editingCommitted.bind(this), this._editingCancelled.bind(this), element.textContent);
+        return new WebInspector.InplaceEditor.Config(this._editingCommitted.bind(this), this._editingCancelled.bind(this), element.textContent);
     },
 
     _editingCommitted: function(element, newText, oldText, context, moveDirection)
@@ -336,6 +339,10 @@
         var textBeforeEditing = this._editingNode.data[columnIdentifier];
         var currentEditingNode = this._editingNode;
 
+        /**
+         * @param {boolean} wasChange
+         * @this {WebInspector.DataGrid}
+         */
         function moveToNextIfNeeded(wasChange) {
             if (!moveDirection)
                 return;
@@ -690,6 +697,9 @@
         return this._scrollContainer;
     },
 
+    /**
+     * @return {boolean}
+     */
     isScrolledToLastRow: function()
     {
         return this._scrollContainer.isScrolledToBottom();
@@ -945,6 +955,10 @@
         this._sortColumnCell.classList.add("sort-" + sortOrder);
     },
 
+    /**
+     * @param {string} columnIdentifier
+     * @return {!Element}
+     */
     headerTableHeader: function(columnIdentifier)
     {
         return this._headerTableHeaders[columnIdentifier];
diff --git a/Source/devtools/front_end/Database.js b/Source/devtools/front_end/Database.js
index 1f3d156..933a70e 100644
--- a/Source/devtools/front_end/Database.js
+++ b/Source/devtools/front_end/Database.js
@@ -202,6 +202,6 @@
 }
 
 /**
- * @type {?WebInspector.DatabaseModel}
+ * @type {!WebInspector.DatabaseModel}
  */
-WebInspector.databaseModel = null;
+WebInspector.databaseModel;
diff --git a/Source/devtools/front_end/DatabaseQueryView.js b/Source/devtools/front_end/DatabaseQueryView.js
index bded7b9..13f8647 100644
--- a/Source/devtools/front_end/DatabaseQueryView.js
+++ b/Source/devtools/front_end/DatabaseQueryView.js
@@ -103,6 +103,9 @@
 
         this.prompt.clearAutoComplete();
 
+        /**
+         * @this {WebInspector.DatabaseQueryView}
+         */
         function moveBackIfOutside()
         {
             delete this._selectionTimeout;
diff --git a/Source/devtools/front_end/DebuggerModel.js b/Source/devtools/front_end/DebuggerModel.js
index ce79212..d07b17b 100644
--- a/Source/devtools/front_end/DebuggerModel.js
+++ b/Source/devtools/front_end/DebuggerModel.js
@@ -43,11 +43,10 @@
     /** @type {!Object.<!string, !Array.<!WebInspector.Script>>} */
     this._scriptsBySourceURL = {};
 
-    this._canSetScriptSource = false;
     this._breakpointsActive = true;
 
-    WebInspector.settings.pauseOnExceptionStateString = WebInspector.settings.createSetting("pauseOnExceptionStateString", WebInspector.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions);
-    WebInspector.settings.pauseOnExceptionStateString.addChangeListener(this._pauseOnExceptionStateChanged, this);
+    WebInspector.settings.pauseOnExceptionEnabled.addChangeListener(this._pauseOnExceptionStateChanged, this);
+    WebInspector.settings.pauseOnCaughtException.addChangeListener(this._pauseOnExceptionStateChanged, this);
 
     WebInspector.settings.enableAsyncStackTraces.addChangeListener(this._asyncStackTracesStateChanged, this);
 
@@ -56,7 +55,11 @@
     WebInspector.DebuggerModel.applySkipStackFrameSettings();
 }
 
-// Keep these in sync with WebCore::ScriptDebugServer
+/**
+ * Keep these in sync with WebCore::ScriptDebugServer
+ *
+ * @enum {string}
+ */
 WebInspector.DebuggerModel.PauseOnExceptionsState = {
     DontPauseOnExceptions : "none",
     PauseOnAllExceptions : "all",
@@ -115,11 +118,6 @@
         if (this._debuggerEnabled)
             return;
 
-        function callback(error, result)
-        {
-            this._canSetScriptSource = result;
-        }
-        DebuggerAgent.canSetScriptSource(callback.bind(this));
         DebuggerAgent.enable(this._debuggerWasEnabled.bind(this));
     },
 
@@ -156,14 +154,6 @@
         this._skipAllPausesTimeout = setTimeout(this.skipAllPauses.bind(this, false), timeout);
     },
 
-    /**
-     * @return {boolean}
-     */
-    canSetScriptSource: function()
-    {
-        return this._canSetScriptSource;
-    },
-
     _debuggerWasEnabled: function()
     {
         this._debuggerEnabled = true;
@@ -174,13 +164,21 @@
 
     _pauseOnExceptionStateChanged: function()
     {
-        DebuggerAgent.setPauseOnExceptions(WebInspector.settings.pauseOnExceptionStateString.get());
+        var state;
+        if (!WebInspector.settings.pauseOnExceptionEnabled.get()) {
+            state = WebInspector.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions;
+        } else if (WebInspector.settings.pauseOnCaughtException.get()) {
+            state = WebInspector.DebuggerModel.PauseOnExceptionsState.PauseOnAllExceptions;
+        } else {
+            state = WebInspector.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions;
+        }
+        DebuggerAgent.setPauseOnExceptions(state);
     },
 
     _asyncStackTracesStateChanged: function()
     {
         const maxAsyncStackChainDepth = 4;
-        var enabled = WebInspector.settings.enableAsyncStackTraces.get();
+        var enabled = WebInspector.settings.enableAsyncStackTraces.get() && WebInspector.experimentsSettings.asyncStackTraces.isEnabled();
         DebuggerAgent.setAsyncCallStackDepth(enabled ? maxAsyncStackChainDepth : 0);
     },
 
@@ -206,6 +204,7 @@
         /**
          * @param {!WebInspector.DebuggerModel.Location} requestedLocation
          * @param {?string} error
+         * @this {WebInspector.DebuggerModel}
          */
         function callback(requestedLocation, error)
         {
@@ -602,6 +601,7 @@
         /**
          * @param {?RuntimeAgent.RemoteObject} result
          * @param {boolean=} wasThrown
+         * @this {WebInspector.DebuggerModel}
          */
         function didEvaluate(result, wasThrown)
         {
@@ -970,6 +970,7 @@
         /**
          * @param {?string} error
          * @param {!Array.<!DebuggerAgent.Location>=} stepInPositions
+         * @this {WebInspector.DebuggerModel.CallFrame}
          */
         function getStepInPositionsCallback(error, stepInPositions)
         {
@@ -983,6 +984,7 @@
 
     /**
      * @param {function(!WebInspector.UILocation):(boolean|undefined)} updateDelegate
+     * @return {!WebInspector.LiveLocation}
      */
     createLiveLocation: function(updateDelegate)
     {
@@ -1066,6 +1068,6 @@
 }
 
 /**
- * @type {?WebInspector.DebuggerModel}
+ * @type {!WebInspector.DebuggerModel}
  */
-WebInspector.debuggerModel = null;
+WebInspector.debuggerModel;
diff --git a/Source/devtools/front_end/DebuggerScriptMapping.js b/Source/devtools/front_end/DebuggerScriptMapping.js
index 112def2..3d4b29a 100644
--- a/Source/devtools/front_end/DebuggerScriptMapping.js
+++ b/Source/devtools/front_end/DebuggerScriptMapping.js
@@ -30,14 +30,15 @@
 
 /**
  * @constructor
+ * @param {!WebInspector.DebuggerModel} debuggerModel
  * @param {!WebInspector.Workspace} workspace
  * @param {!WebInspector.SimpleWorkspaceProvider} networkWorkspaceProvider
  */
-WebInspector.DebuggerScriptMapping = function(workspace, networkWorkspaceProvider)
+WebInspector.DebuggerScriptMapping = function(debuggerModel, workspace, networkWorkspaceProvider)
 {
-    this._defaultMapping = new WebInspector.DefaultScriptMapping(workspace);
-    this._resourceMapping = new WebInspector.ResourceScriptMapping(workspace);
-    this._compilerMapping = new WebInspector.CompilerScriptMapping(workspace, networkWorkspaceProvider);
+    this._defaultMapping = new WebInspector.DefaultScriptMapping(debuggerModel, workspace);
+    this._resourceMapping = new WebInspector.ResourceScriptMapping(debuggerModel, workspace);
+    this._compilerMapping = new WebInspector.CompilerScriptMapping(debuggerModel, workspace, networkWorkspaceProvider);
     this._snippetMapping = WebInspector.scriptSnippetModel.scriptMapping;
 
     WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this);
diff --git a/Source/devtools/front_end/DefaultScriptMapping.js b/Source/devtools/front_end/DefaultScriptMapping.js
index 2894026..d7b7ec8 100644
--- a/Source/devtools/front_end/DefaultScriptMapping.js
+++ b/Source/devtools/front_end/DefaultScriptMapping.js
@@ -31,14 +31,16 @@
 /**
  * @constructor
  * @implements {WebInspector.ScriptSourceMapping}
+ * @param {!WebInspector.DebuggerModel} debuggerModel
  * @param {!WebInspector.Workspace} workspace
  */
-WebInspector.DefaultScriptMapping = function(workspace)
+WebInspector.DefaultScriptMapping = function(debuggerModel, workspace)
 {
+    this._debuggerModel = debuggerModel;
     this._projectDelegate = new WebInspector.DebuggerProjectDelegate();
     this._workspace = workspace;
     this._workspace.addProject(this._projectDelegate);
-    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
+    debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
     this._debuggerReset();
 }
 
@@ -50,7 +52,7 @@
     rawLocationToUILocation: function(rawLocation)
     {
         var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (rawLocation);
-        var script = WebInspector.debuggerModel.scriptForId(debuggerModelLocation.scriptId);
+        var script = this._debuggerModel.scriptForId(debuggerModelLocation.scriptId);
         var uiSourceCode = this._uiSourceCodeForScriptId[script.scriptId];
         var lineNumber = debuggerModelLocation.lineNumber;
         var columnNumber = debuggerModelLocation.columnNumber || 0;
@@ -66,8 +68,8 @@
     uiLocationToRawLocation: function(uiSourceCode, lineNumber, columnNumber)
     {
         var scriptId = this._scriptIdForUISourceCode.get(uiSourceCode);
-        var script = WebInspector.debuggerModel.scriptForId(scriptId);
-        return WebInspector.debuggerModel.createRawLocation(script, lineNumber, columnNumber);
+        var script = this._debuggerModel.scriptForId(scriptId);
+        return this._debuggerModel.createRawLocation(script, lineNumber, columnNumber);
     },
 
     /**
diff --git a/Source/devtools/front_end/DevToolsExtensionAPI.js b/Source/devtools/front_end/DevToolsExtensionAPI.js
deleted file mode 100644
index 44f7c21..0000000
--- a/Source/devtools/front_end/DevToolsExtensionAPI.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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.
- */
-
-function platformExtensionAPI(coreAPI)
-{
-    function getTabId()
-    {
-        return tabId;
-    }
-    chrome = window.chrome || {};
-    // Override chrome.devtools as a workaround for a error-throwing getter being exposed
-    // in extension pages loaded into a non-extension process (only happens for remote client
-    // extensions)
-    var devtools_descriptor = Object.getOwnPropertyDescriptor(chrome, "devtools");
-    if (!devtools_descriptor || devtools_descriptor.get)
-        Object.defineProperty(chrome, "devtools", { value: {}, enumerable: true });
-    // Only expose tabId on chrome.devtools.inspectedWindow, not webInspector.inspectedWindow.
-    chrome.devtools.inspectedWindow = {};
-    chrome.devtools.inspectedWindow.__defineGetter__("tabId", getTabId);
-    chrome.devtools.inspectedWindow.__proto__ = coreAPI.inspectedWindow;
-    chrome.devtools.network = coreAPI.network;
-    chrome.devtools.panels = coreAPI.panels;
-
-    // default to expose experimental APIs for now.
-    if (extensionInfo.exposeExperimentalAPIs !== false) {
-        chrome.experimental = chrome.experimental || {};
-        chrome.experimental.devtools = chrome.experimental.devtools || {};
-
-        var properties = Object.getOwnPropertyNames(coreAPI);
-        for (var i = 0; i < properties.length; ++i) {
-            var descriptor = Object.getOwnPropertyDescriptor(coreAPI, properties[i]);
-            Object.defineProperty(chrome.experimental.devtools, properties[i], descriptor);
-        }
-        chrome.experimental.devtools.inspectedWindow = chrome.devtools.inspectedWindow;
-    }
-    if (extensionInfo.exposeWebInspectorNamespace)
-        window.webInspector = coreAPI;
-}
diff --git a/Source/devtools/front_end/Dialog.js b/Source/devtools/front_end/Dialog.js
index 171f4a1..bc006c6 100644
--- a/Source/devtools/front_end/Dialog.js
+++ b/Source/devtools/front_end/Dialog.js
@@ -55,8 +55,8 @@
     delegate.show(this._element);
 
     this._position();
-    this._windowResizeHandler = this._position.bind(this);
-    window.addEventListener("resize", this._windowResizeHandler, true);
+    this._containerResizeHandler = this._position.bind(this);
+    WebInspector.inspectorView.addEventListener(WebInspector.InspectorView.Events.DevToolsElementBoundingBoxChanged, this._containerResizeHandler);
     this._delegate.focus();
 }
 
@@ -97,7 +97,7 @@
 
         delete WebInspector.Dialog._instance;
         this._glassPane.dispose();
-        window.removeEventListener("resize", this._windowResizeHandler, true);
+        WebInspector.inspectorView.removeEventListener(WebInspector.InspectorView.Events.DevToolsElementBoundingBoxChanged, this._containerResizeHandler);
     },
 
     _onGlassPaneFocus: function(event)
@@ -157,16 +157,17 @@
      */
     position: function(element, relativeToElement)
     {
-        var offset = relativeToElement.offsetRelativeToWindow(window);
+        var container = WebInspector.inspectorView.devtoolsElement();
+        var box = relativeToElement.boxInWindow(window).relativeToElement(container);
 
-        var positionX = offset.x + (relativeToElement.offsetWidth - element.offsetWidth) / 2;
-        positionX = Number.constrain(positionX, 0, window.innerWidth - element.offsetWidth);
+        var positionX = box.x + (relativeToElement.offsetWidth - element.offsetWidth) / 2;
+        positionX = Number.constrain(positionX, 0, container.offsetWidth - element.offsetWidth);
 
-        var positionY = offset.y + (relativeToElement.offsetHeight - element.offsetHeight) / 2;
-        positionY = Number.constrain(positionY, 0, window.innerHeight - element.offsetHeight);
+        var positionY = box.y + (relativeToElement.offsetHeight - element.offsetHeight) / 2;
+        positionY = Number.constrain(positionY, 0, container.offsetHeight - element.offsetHeight);
 
-        element.style.left = positionX + "px";
-        element.style.top = positionY + "px";
+        element.style.position = "absolute";
+        element.positionAt(positionX, positionY, container);
     },
 
     focus: function() { },
diff --git a/Source/devtools/front_end/DockController.js b/Source/devtools/front_end/DockController.js
index c0c8381..5342f7b 100644
--- a/Source/devtools/front_end/DockController.js
+++ b/Source/devtools/front_end/DockController.js
@@ -34,18 +34,33 @@
  */
 WebInspector.DockController = function()
 {
-    this._dockToggleButton = new WebInspector.StatusBarButton("", "dock-status-bar-item", 3);
-    this._dockToggleButtonOption = new WebInspector.StatusBarButton("", "dock-status-bar-item", 3);
-    this._dockToggleButton.addEventListener("click", this._toggleDockState, this);
-    this._dockToggleButtonOption.addEventListener("click", this._toggleDockState, this);
-    this._dockToggleButton.setLongClickOptionsEnabled(this._createDockOptions.bind(this));
+    if (!WebInspector.queryParamsObject["can_dock"]) {
+        this._dockSide = WebInspector.DockController.State.Undocked;
+        this._updateUI();
+        return;
+    }
 
-    this.setDockSide(WebInspector.queryParamsObject["can_dock"] ? (WebInspector.queryParamsObject["dockSide"] || "bottom") : "undocked");
+    WebInspector.settings.currentDockState = WebInspector.settings.createSetting("currentDockState", "");
+    WebInspector.settings.lastDockState = WebInspector.settings.createSetting("lastDockState", "");
+    var states = [WebInspector.DockController.State.DockedToBottom, WebInspector.DockController.State.Undocked, WebInspector.DockController.State.DockedToRight];
+    var titles = [WebInspector.UIString("Dock to main window."), WebInspector.UIString("Undock into separate window."), WebInspector.UIString("Dock to main window.")];
+    if (WebInspector.experimentsSettings.dockToLeft.isEnabled()) {
+        states.push(WebInspector.DockController.State.DockedToLeft);
+        titles.push(WebInspector.UIString("Dock to main window."));
+    }
+    this._dockToggleButton = new WebInspector.StatusBarStatesSettingButton(
+        "dock-status-bar-item",
+        states,
+        titles,
+        WebInspector.settings.currentDockState,
+        WebInspector.settings.lastDockState,
+        this._dockSideChanged.bind(this));
 }
 
 WebInspector.DockController.State = {
     DockedToBottom: "bottom",
     DockedToRight: "right",
+    DockedToLeft: "left",
     Undocked: "undocked"
 }
 
@@ -55,11 +70,11 @@
 
 WebInspector.DockController.prototype = {
     /**
-     * @return {!Element}
+     * @return {?Element}
      */
     get element()
     {
-        return this._dockToggleButton.element;
+        return WebInspector.queryParamsObject["can_dock"] ? this._dockToggleButton.element : null;
     },
 
     /**
@@ -71,21 +86,25 @@
     },
 
     /**
+     * @return {boolean}
+     */
+    isVertical: function()
+    {
+        return this._dockSide === WebInspector.DockController.State.DockedToRight || this._dockSide === WebInspector.DockController.State.DockedToLeft;
+    },
+
+    /**
      * @param {string} dockSide
      */
-    setDockSide: function(dockSide)
+    _dockSideChanged: function(dockSide)
     {
         if (this._dockSide === dockSide)
             return;
 
-        if (this._dockSide)
-            WebInspector.settings.lastDockState.set(this._dockSide);
-
         this._dockSide = dockSide;
-        if (dockSide === WebInspector.DockController.State.Undocked) 
-            WebInspector.userMetrics.WindowDocked.record();
-        else
-            WebInspector.userMetrics.WindowUndocked.record();
+        if (WebInspector.queryParamsObject["can_dock"])
+            InspectorFrontendHost.setIsDocked(dockSide !== WebInspector.DockController.State.Undocked);
+
         this._updateUI();
         this.dispatchEventToListeners(WebInspector.DockController.Events.DockSideChanged, this._dockSide);
     },
@@ -97,81 +116,34 @@
         case WebInspector.DockController.State.DockedToBottom:
             body.classList.remove("undocked");
             body.classList.remove("dock-to-right");
+            body.classList.remove("dock-to-left");
             body.classList.add("dock-to-bottom");
             break;
         case WebInspector.DockController.State.DockedToRight: 
             body.classList.remove("undocked");
             body.classList.add("dock-to-right");
+            body.classList.remove("dock-to-left");
             body.classList.remove("dock-to-bottom");
             break;
-        case WebInspector.DockController.State.Undocked: 
+        case WebInspector.DockController.State.DockedToLeft:
+            body.classList.remove("undocked");
+            body.classList.remove("dock-to-right");
+            body.classList.add("dock-to-left");
+            body.classList.remove("dock-to-bottom");
+            break;
+        case WebInspector.DockController.State.Undocked:
             body.classList.add("undocked");
             body.classList.remove("dock-to-right");
+            body.classList.remove("dock-to-left");
             body.classList.remove("dock-to-bottom");
             break;
         }
-
-        this._dockToggleButton.setEnabled(true);
-
-        // Choose different last state based on the current one if missing or if is the same.
-        var sides = [WebInspector.DockController.State.DockedToBottom, WebInspector.DockController.State.Undocked, WebInspector.DockController.State.DockedToRight];
-        sides.remove(this._dockSide);
-        var lastState = WebInspector.settings.lastDockState.get();
-
-        sides.remove(lastState);
-        if (sides.length === 2) { // last state was not from the list of potential values
-            lastState = sides[0];
-            sides.remove(lastState);
-        }
-        this._decorateButtonForTargetState(this._dockToggleButton, lastState);
-        this._decorateButtonForTargetState(this._dockToggleButtonOption, sides[0]);
-    },
-
-    /**
-     * @param {!WebInspector.StatusBarButton} button
-     * @param {string} state
-     */
-    _decorateButtonForTargetState: function(button, state)
-    {
-        switch (state) {
-        case WebInspector.DockController.State.DockedToBottom:
-            button.title = WebInspector.UIString("Dock to main window.");
-            button.state = "bottom";
-            break;
-        case WebInspector.DockController.State.DockedToRight:
-            button.title = WebInspector.UIString("Dock to main window.");
-            button.state = "right";
-            break;
-        case WebInspector.DockController.State.Undocked: 
-            button.title = WebInspector.UIString("Undock into separate window.");
-            button.state = "undock";
-            break;
-        }
-    },
-
-    _createDockOptions: function()
-    {
-        return [this._dockToggleButtonOption];
-    },
-
-    /**
-     * @param {!WebInspector.Event} e
-     */
-    _toggleDockState: function(e)
-    {
-        var action;
-        switch (e.target.state) {
-        case "bottom": action = "bottom"; break;
-        case "right": action = "right"; break;
-        case "undock": action = "undocked"; break;
-        }
-        InspectorFrontendHost.requestSetDockSide(action);
     },
 
     __proto__: WebInspector.Object.prototype
 }
 
 /**
- * @type {?WebInspector.DockController}
+ * @type {!WebInspector.DockController}
  */
-WebInspector.dockController = null;
+WebInspector.dockController;
diff --git a/Source/devtools/front_end/Drawer.js b/Source/devtools/front_end/Drawer.js
index c14c811..82871ff 100644
--- a/Source/devtools/front_end/Drawer.js
+++ b/Source/devtools/front_end/Drawer.js
@@ -29,41 +29,71 @@
 
 /**
  * @constructor
- * @implements {WebInspector.ViewFactory}
- * @param {!WebInspector.InspectorView} inspectorView
+ * @extends {WebInspector.View}
+ * @param {!WebInspector.SplitView} splitView
  */
-WebInspector.Drawer = function(inspectorView)
+WebInspector.Drawer = function(splitView)
 {
-    this._inspectorView = inspectorView;
+    WebInspector.View.call(this);
+    this.element.id = "drawer-contents";
 
-    this.element = this._inspectorView.element.createChild("div", "drawer");
-    this.element.style.flexBasis = 0;
-
-    this._savedHeight = 200; // Default.
-
-    this._drawerContentsElement = this.element.createChild("div");
-    this._drawerContentsElement.id = "drawer-contents";
+    this._splitView = splitView;
+    splitView.hideDefaultResizer();
+    this.show(splitView.sidebarElement());
+    splitView.hideSidebar();
 
     this._toggleDrawerButton = new WebInspector.StatusBarButton(WebInspector.UIString("Show drawer."), "console-status-bar-item");
     this._toggleDrawerButton.addEventListener("click", this.toggle, this);
 
-    this._viewFactories = [];
     this._tabbedPane = new WebInspector.TabbedPane();
     this._tabbedPane.closeableTabs = false;
-    this._tabbedPane.markAsRoot();
+    this._tabbedPane.setRetainTabOrder(true, WebInspector.moduleManager.orderComparator(WebInspector.Drawer.ViewFactory, "name", "order"));
 
-    // Register console early for it to be the first in the list.
-    this.registerView("console", WebInspector.UIString("Console"), this);
-
-    this._tabbedPane.addEventListener(WebInspector.TabbedPane.EventTypes.TabClosed, this._updateTabStrip, this);
     this._tabbedPane.addEventListener(WebInspector.TabbedPane.EventTypes.TabSelected, this._tabSelected, this);
-    WebInspector.installDragHandle(this._tabbedPane.headerElement(), this._startStatusBarDragging.bind(this), this._statusBarDragging.bind(this), this._endStatusBarDragging.bind(this), "row-resize");
-    this._tabbedPane.element.createChild("div", "drawer-resizer");
+    splitView.installResizer(this._tabbedPane.headerElement());
     this._showDrawerOnLoadSetting = WebInspector.settings.createSetting("WebInspector.Drawer.showOnLoad", false);
     this._lastSelectedViewSetting = WebInspector.settings.createSetting("WebInspector.Drawer.lastSelectedView", "console");
+    this._initializeViewFactories();
 }
 
 WebInspector.Drawer.prototype = {
+    _initializeViewFactories: function()
+    {
+        this._viewFactories = {};
+        var extensions = WebInspector.moduleManager.extensions(WebInspector.Drawer.ViewFactory);
+
+        for (var i = 0; i < extensions.length; ++i) {
+            var descriptor = extensions[i].descriptor();
+            var id = descriptor["name"];
+            var title = WebInspector.UIString(descriptor["title"]);
+            var settingName = descriptor["setting"];
+            var setting = settingName ? /** @type {!WebInspector.Setting|undefined} */ (WebInspector.settings[settingName]) : null;
+
+            this._viewFactories[id] = extensions[i];
+
+            if (setting) {
+                setting.addChangeListener(this._toggleSettingBasedView.bind(this, id, title, setting));
+                if (setting.get())
+                    this._tabbedPane.appendTab(id, title, new WebInspector.View());
+            } else {
+                this._tabbedPane.appendTab(id, title, new WebInspector.View());
+            }
+        }
+        this._tabbedPane.show(this.element);
+    },
+
+    /**
+     * @param {string} id
+     * @param {string} title
+     * @param {!WebInspector.Setting} setting
+     */
+    _toggleSettingBasedView: function(id, title, setting)
+    {
+        this._tabbedPane.closeTab(id);
+        if (setting.get())
+            this._tabbedPane.appendTab(id, title, new WebInspector.View());
+    },
+
     /**
      * @return {!Element}
      */
@@ -72,16 +102,6 @@
         return this._toggleDrawerButton.element;
     },
 
-    _constrainHeight: function(height)
-    {
-        return Number.constrain(height, Preferences.minConsoleHeight, this._inspectorView.element.offsetHeight - Preferences.minConsoleHeight);
-    },
-
-    isHiding: function()
-    {
-        return this._isHiding;
-    },
-
     /**
      * @param {string} tabId
      * @param {string} title
@@ -99,38 +119,6 @@
 
     /**
      * @param {string} id
-     * @param {string} title
-     * @param {!WebInspector.ViewFactory} factory
-     */
-    registerView: function(id, title, factory)
-    {
-        if (this._tabbedPane.hasTab(id))
-            this._tabbedPane.closeTab(id);
-        this._viewFactories[id] = factory;
-        this._tabbedPane.appendTab(id, title, new WebInspector.View());
-    },
-
-    /**
-     * @param {string} id
-     */
-    unregisterView: function(id)
-    {
-        if (this._tabbedPane.hasTab(id))
-            this._tabbedPane.closeTab(id);
-        delete this._viewFactories[id];
-    },
-
-    /**
-     * @param {string=} id
-     * @return {?WebInspector.View}
-     */
-    createView: function(id)
-    {
-        return WebInspector.panel("console").createView(id);
-    },
-
-    /**
-     * @param {string} id
      */
     closeView: function(id)
     {
@@ -139,17 +127,24 @@
 
     /**
      * @param {string} id
-     * @param {boolean=} immediately
+     * @param {boolean=} immediate
      */
-    showView: function(id, immediately)
+    showView: function(id, immediate)
     {
         if (!this._toggleDrawerButton.enabled())
             return;
-        if (this._viewFactories[id])
-            this._tabbedPane.changeTabView(id, this._viewFactories[id].createView(id));
-        this._innerShow(immediately);
+        if (!this._tabbedPane.hasTab(id)) {
+            // Hidden tab.
+            this._innerShow(immediate);
+            return;
+        }
+        var viewFactory = this._viewFactory(id);
+        if (viewFactory)
+            this._tabbedPane.changeTabView(id, viewFactory.createView());
+        this._innerShow(immediate);
         this._tabbedPane.selectTab(id, true);
-        this._updateTabStrip();
+        // In case this id is already selected, anyways persist it as the last saved value.
+        this._lastSelectedViewSetting.set(id);
     },
 
     /**
@@ -169,15 +164,11 @@
         }
         this._innerShow();
         this._tabbedPane.selectTab(id, true);
-        this._updateTabStrip();
     },
 
-    /**
-     * @param {boolean=} immediately
-     */
-    show: function(immediately)
+    showDrawer: function()
     {
-        this.showView(this._tabbedPane.selectedTabId, immediately);
+        this.showView(this._lastSelectedViewSetting.get());
     },
 
     showOnLoadIfNecessary: function()
@@ -187,153 +178,33 @@
     },
 
     /**
-     * @param {boolean=} immediately
+     * @param {boolean=} immediate
      */
-    _innerShow: function(immediately)
+    _innerShow: function(immediate)
     {
-        this._immediatelyFinishAnimation();
-
         if (this._toggleDrawerButton.toggled)
             return;
+
         this._showDrawerOnLoadSetting.set(true);
         this._toggleDrawerButton.toggled = true;
         this._toggleDrawerButton.title = WebInspector.UIString("Hide drawer.");
 
-        document.body.classList.add("drawer-visible");
-        this._tabbedPane.show(this._drawerContentsElement);
+        this._splitView.showBoth(!immediate);
 
-        var height = this._constrainHeight(this._savedHeight);
-        var animations = [
-            {element: this.element, start: {"flex-basis": 23}, end: {"flex-basis": height}},
-        ];
-
-        function animationCallback(finished)
-        {
-            if (this._inspectorView.currentPanel())
-                this._inspectorView.currentPanel().doResize();
-            if (!finished)
-                return;
-            this._updateTabStrip();
-            if (this._visibleView()) {
-                // Get console content back
-                this._tabbedPane.changeTabView(this._tabbedPane.selectedTabId, this._visibleView());
-                if (this._visibleView().afterShow)
-                    this._visibleView().afterShow();
-            }
-            delete this._currentAnimation;
-        }
-
-        this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(immediately), animationCallback.bind(this));
-
-        if (immediately)
-            this._currentAnimation.forceComplete();
+        if (this._visibleView())
+            this._visibleView().focus();
     },
 
-    /**
-     * @param {boolean=} immediately
-     */
-    hide: function(immediately)
+    closeDrawer: function()
     {
-        this._immediatelyFinishAnimation();
-
         if (!this._toggleDrawerButton.toggled)
             return;
         this._showDrawerOnLoadSetting.set(false);
         this._toggleDrawerButton.toggled = false;
         this._toggleDrawerButton.title = WebInspector.UIString("Show console.");
 
-        this._isHiding = true;
-        this._savedHeight = this.element.offsetHeight;
-
         WebInspector.restoreFocusFromElement(this.element);
-
-        // Temporarily set properties and classes to mimic the post-animation values so panels
-        // like Elements in their updateStatusBarItems call will size things to fit the final location.
-        document.body.classList.remove("drawer-visible");
-        this._inspectorView.currentPanel().statusBarResized();
-        document.body.classList.add("drawer-visible");
-
-        var animations = [
-            {element: this.element, start: {"flex-basis": this.element.offsetHeight }, end: {"flex-basis": 23}},
-        ];
-
-        function animationCallback(finished)
-        {
-            if (this._inspectorView.currentPanel())
-                this._inspectorView.currentPanel().doResize();
-            if (!finished)
-                return;
-            this._tabbedPane.detach();
-            this._drawerContentsElement.removeChildren();
-            document.body.classList.remove("drawer-visible");
-            delete this._currentAnimation;
-            delete this._isHiding;
-        }
-
-        this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(immediately), animationCallback.bind(this));
-
-        if (immediately)
-            this._currentAnimation.forceComplete();
-    },
-
-    resize: function()
-    {
-        if (!this._toggleDrawerButton.toggled)
-            return;
-
-        this._visibleView().storeScrollPositions();
-        var height = this._constrainHeight(this.element.offsetHeight);
-        this.element.style.flexBasis = height + "px";
-        this._tabbedPane.doResize();
-    },
-
-    _immediatelyFinishAnimation: function()
-    {
-        if (this._currentAnimation)
-            this._currentAnimation.forceComplete();
-    },
-
-    /**
-     * @param {boolean=} immediately
-     * @return {number}
-     */
-    _animationDuration: function(immediately)
-    {
-        return immediately ? 0 : 50;
-    },
-
-    /**
-     * @return {boolean}
-     */
-    _startStatusBarDragging: function(event)
-    {
-        if (!this._toggleDrawerButton.toggled || event.target !== this._tabbedPane.headerElement())
-            return false;
-
-        this._visibleView().storeScrollPositions();
-        this._statusBarDragOffset = event.pageY - this.element.totalOffsetTop();
-        return true;
-    },
-
-    _statusBarDragging: function(event)
-    {
-        var height = window.innerHeight - event.pageY + this._statusBarDragOffset;
-        height = Number.constrain(height, Preferences.minConsoleHeight, this._inspectorView.element.offsetHeight - Preferences.minConsoleHeight);
-
-        this.element.style.flexBasis = height + "px";
-        if (this._inspectorView.currentPanel())
-            this._inspectorView.currentPanel().doResize();
-        this._tabbedPane.doResize();
-
-        event.consume(true);
-    },
-
-    _endStatusBarDragging: function(event)
-    {
-        this._savedHeight = this.element.offsetHeight;
-        delete this._statusBarDragOffset;
-
-        event.consume();
+        this._splitView.hideSidebar(true);
     },
 
     /**
@@ -344,27 +215,25 @@
         return this._tabbedPane.visibleView;
     },
 
-    _updateTabStrip: function()
-    {
-        this._tabbedPane.onResize();
-        this._tabbedPane.doResize();
-    },
-
-    _tabSelected: function()
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _tabSelected: function(event)
     {
         var tabId = this._tabbedPane.selectedTabId;
-        if (!this._tabbedPane.isTabCloseable(tabId))
+        if (event.data["isUserGesture"] && !this._tabbedPane.isTabCloseable(tabId))
             this._lastSelectedViewSetting.set(tabId);
-        if (this._viewFactories[tabId])
-            this._tabbedPane.changeTabView(tabId, this._viewFactories[tabId].createView(tabId));
+        var viewFactory = this._viewFactory(tabId);
+        if (viewFactory)
+            this._tabbedPane.changeTabView(tabId, viewFactory.createView());
     },
 
     toggle: function()
     {
         if (this._toggleDrawerButton.toggled)
-            this.hide();
+            this.closeDrawer();
         else
-            this.show();
+            this.showDrawer();
     },
 
     /**
@@ -381,5 +250,52 @@
     selectedViewId: function()
     {
         return this._tabbedPane.selectedTabId;
+    },
+
+    /**
+     * @return {?WebInspector.Drawer.ViewFactory}
+     */
+    _viewFactory: function(id)
+    {
+        return this._viewFactories[id] ? /** @type {!WebInspector.Drawer.ViewFactory} */ (this._viewFactories[id].instance()) : null;
+    },
+
+    __proto__: WebInspector.View.prototype
+}
+
+/**
+ * @interface
+ */
+WebInspector.Drawer.ViewFactory = function()
+{
+}
+
+WebInspector.Drawer.ViewFactory.prototype = {
+    /**
+     * @return {!WebInspector.View}
+     */
+    createView: function() {}
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.Drawer.ViewFactory}
+ * @param {function(new:T)} constructor
+ * @template T
+ */
+WebInspector.Drawer.SingletonViewFactory = function(constructor)
+{
+    this._constructor = constructor;
+}
+
+WebInspector.Drawer.SingletonViewFactory.prototype = {
+    /**
+     * @return {!WebInspector.View}
+     */
+    createView: function()
+    {
+        if (!this._instance)
+            this._instance = /** @type {!WebInspector.View} */(new this._constructor());
+        return this._instance;
     }
 }
diff --git a/Source/devtools/front_end/EditFileSystemDialog.js b/Source/devtools/front_end/EditFileSystemDialog.js
index b687996..b2aaea8 100644
--- a/Source/devtools/front_end/EditFileSystemDialog.js
+++ b/Source/devtools/front_end/EditFileSystemDialog.js
@@ -43,7 +43,7 @@
 
     var header = this.element.createChild("div", "header");
     var headerText = header.createChild("span");
-    headerText.textContent = "Edit file system";
+    headerText.textContent = WebInspector.UIString("Edit file system");
 
     var closeButton = header.createChild("div", "close-button-gray done-button");
     closeButton.addEventListener("click", this._onDoneClick.bind(this), false);
@@ -56,8 +56,8 @@
     WebInspector.isolatedFileSystemManager.mapping().addEventListener(WebInspector.FileSystemMapping.Events.ExcludedFolderRemoved, this._excludedFolderRemoved, this);
 
     var blockHeader = contents.createChild("div", "block-header");
-    blockHeader.textContent = "Mappings";
-    this._fileMappingsSection = contents.createChild("div", "file-mappings-section");
+    blockHeader.textContent = WebInspector.UIString("Mappings");
+    this._fileMappingsSection = contents.createChild("div", "section file-mappings-section");
     this._fileMappingsListContainer = this._fileMappingsSection.createChild("div", "settings-list-container");
     var entries = WebInspector.isolatedFileSystemManager.mapping().mappingEntries(this._fileSystemPath);
 
@@ -72,8 +72,8 @@
         this._addMappingRow(entries[i]);
 
     blockHeader = contents.createChild("div", "block-header");
-    blockHeader.textContent = "Excluded folders";
-    this._excludedFolderListSection = contents.createChild("div", "excluded-folders-section");
+    blockHeader.textContent = WebInspector.UIString("Excluded folders");
+    this._excludedFolderListSection = contents.createChild("div", "section excluded-folders-section");
     this._excludedFolderListContainer = this._excludedFolderListSection.createChild("div", "settings-list-container");
     var excludedFolderEntries = WebInspector.isolatedFileSystemManager.mapping().excludedFolders(fileSystemPath);
 
@@ -110,15 +110,19 @@
 
     _resize: function()
     {
-        if (!this._dialogElement)
+        if (!this._dialogElement || !this._relativeToElement)
             return;
 
-        const width = 540;
+        const minWidth = 200;
         const minHeight = 150;
-        var maxHeight = document.body.offsetHeight - 10;
+        var maxHeight = this._relativeToElement.offsetHeight - 10;
         maxHeight = Math.max(minHeight, maxHeight);
+        var maxWidth = Math.min(540, this._relativeToElement.offsetWidth - 10);
+        maxWidth = Math.max(minWidth, maxWidth);
         this._dialogElement.style.maxHeight = maxHeight + "px";
-        this._dialogElement.style.width = width + "px";
+        this._dialogElement.style.width = maxWidth + "px";
+
+        WebInspector.DialogDelegate.prototype.position(this._dialogElement, this._relativeToElement);
     },
 
     /**
@@ -127,6 +131,7 @@
      */
     position: function(element, relativeToElement)
     {
+        this._relativeToElement = relativeToElement;
         this._resize();
     },
 
diff --git a/Source/devtools/front_end/EditingLocationHistoryManager.js b/Source/devtools/front_end/EditingLocationHistoryManager.js
new file mode 100644
index 0000000..3097462
--- /dev/null
+++ b/Source/devtools/front_end/EditingLocationHistoryManager.js
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+/**
+ * @constructor
+ * @param {!WebInspector.SourcesPanel} sourcesPanel
+ * @param {!function():!WebInspector.SourceFrame} currentSourceFrameCallback
+ */
+WebInspector.EditingLocationHistoryManager = function(sourcesPanel, currentSourceFrameCallback)
+{
+    this._sourcesPanel = sourcesPanel;
+    this._historyManager = new WebInspector.SimpleHistoryManager(WebInspector.EditingLocationHistoryManager.HistoryDepth);
+    this._currentSourceFrameCallback = currentSourceFrameCallback;
+}
+
+WebInspector.EditingLocationHistoryManager.HistoryDepth = 20;
+
+WebInspector.EditingLocationHistoryManager.prototype = {
+    /**
+     * @param {!WebInspector.UISourceCodeFrame} sourceFrame
+     */
+    trackSourceFrameCursorJumps: function(sourceFrame)
+    {
+        sourceFrame.addEventListener(WebInspector.SourceFrame.Events.JumpHappened, this._onJumpHappened.bind(this));
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _onJumpHappened: function(event)
+    {
+        if (event.data.from)
+            this._updateActiveState(event.data.from);
+        if (event.data.to)
+            this._pushActiveState(event.data.to);
+    },
+
+    rollback: function()
+    {
+        this._historyManager.rollback();
+    },
+
+    rollover: function()
+    {
+        this._historyManager.rollover();
+    },
+
+    updateCurrentState: function()
+    {
+        var sourceFrame = this._currentSourceFrameCallback();
+        if (!sourceFrame)
+            return;
+        this._updateActiveState(sourceFrame.textEditor.selection());
+    },
+
+    pushNewState: function()
+    {
+        var sourceFrame = this._currentSourceFrameCallback();
+        if (!sourceFrame)
+            return;
+        this._pushActiveState(sourceFrame.textEditor.selection());
+    },
+
+    /**
+     * @param {!WebInspector.TextRange} selection
+     */
+    _updateActiveState: function(selection)
+    {
+        var active = this._historyManager.active();
+        if (!active)
+            return;
+        var sourceFrame = this._currentSourceFrameCallback();
+        if (!sourceFrame)
+            return;
+        var entry = new WebInspector.EditingLocationHistoryEntry(this._sourcesPanel, this, sourceFrame, selection);
+        active.merge(entry);
+    },
+
+    /**
+     * @param {!WebInspector.TextRange} selection
+     */
+    _pushActiveState: function(selection)
+    {
+        var sourceFrame = this._currentSourceFrameCallback();
+        if (!sourceFrame)
+            return;
+        var entry = new WebInspector.EditingLocationHistoryEntry(this._sourcesPanel, this, sourceFrame, selection);
+        this._historyManager.push(entry);
+    },
+
+    /**
+     * @param {!WebInspector.UISourceCode} uiSourceCode
+     */
+    removeHistoryForSourceCode: function(uiSourceCode)
+    {
+        function filterOut(entry)
+        {
+            return entry._projectId === uiSourceCode.project().id() && entry._path === uiSourceCode.path();
+        }
+
+        this._historyManager.filterOut(filterOut);
+    },
+}
+
+
+/**
+ * @constructor
+ * @implements {WebInspector.HistoryEntry}
+ * @param {!WebInspector.SourcesPanel} sourcesPanel
+ * @param {!WebInspector.EditingLocationHistoryManager} editingLocationManager
+ * @param {!WebInspector.SourceFrame} sourceFrame
+ * @param {!WebInspector.TextRange} selection
+ */
+WebInspector.EditingLocationHistoryEntry = function(sourcesPanel, editingLocationManager, sourceFrame, selection)
+{
+    this._sourcesPanel = sourcesPanel;
+    this._editingLocationManager = editingLocationManager;
+    var uiSourceCode = sourceFrame.uiSourceCode();
+    this._projectId = uiSourceCode.project().id();
+    this._path = uiSourceCode.path();
+
+    var position = this._positionFromSelection(selection);
+    this._positionHandle = sourceFrame.textEditor.textEditorPositionHandle(position.lineNumber, position.columnNumber);
+}
+
+WebInspector.EditingLocationHistoryEntry.prototype = {
+    /**
+     * @param {!WebInspector.HistoryEntry} entry
+     */
+    merge: function(entry)
+    {
+        if (this._projectId !== entry._projectId || this._path !== entry._path)
+            return;
+        this._positionHandle = entry._positionHandle;
+    },
+
+    /**
+     * @param {!WebInspector.TextRange} selection
+     * @return {!{lineNumber: number, columnNumber: number}}
+     */
+    _positionFromSelection: function(selection)
+    {
+        return {
+            lineNumber: selection.endLine,
+            columnNumber: selection.endColumn
+        };
+    },
+
+    /**
+     * @return {boolean}
+     */
+    valid: function()
+    {
+        var position = this._positionHandle.resolve();
+        var uiSourceCode = WebInspector.workspace.project(this._projectId).uiSourceCode(this._path);
+        return !!(position && uiSourceCode);
+    },
+
+    reveal: function()
+    {
+        var position = this._positionHandle.resolve();
+        var uiSourceCode = WebInspector.workspace.project(this._projectId).uiSourceCode(this._path);
+        if (!position || !uiSourceCode)
+            return;
+
+        this._editingLocationManager.updateCurrentState();
+        this._sourcesPanel.showUISourceCode(uiSourceCode, position.lineNumber, position.columnNumber);
+    }
+};
diff --git a/Source/devtools/front_end/ElementsPanel.js b/Source/devtools/front_end/ElementsPanel.js
index b6620a9..8f66a85 100644
--- a/Source/devtools/front_end/ElementsPanel.js
+++ b/Source/devtools/front_end/ElementsPanel.js
@@ -28,8 +28,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-importScript("CSSNamedFlowCollectionsView.js");
-importScript("CSSNamedFlowView.js");
+importScript("DOMSyntaxHighlighter.js");
+importScript("ElementsTreeOutline.js");
 importScript("EventListenersSidebarPane.js");
 importScript("MetricsSidebarPane.js");
 importScript("OverridesView.js");
@@ -40,7 +40,6 @@
 
 /**
  * @constructor
- * @implements {WebInspector.ViewFactory}
  * @implements {WebInspector.Searchable}
  * @extends {WebInspector.Panel}
  */
@@ -56,15 +55,15 @@
     const minimumContentWidthPercent = 0.34;
     const initialSidebarHeight = 325;
     const minimumContentHeightPercent = 0.34;
-    this.createSidebarView(this.element, WebInspector.SidebarView.SidebarPosition.End, initialSidebarWidth, initialSidebarHeight);
-    this.splitView.sidebarElement.classList.add("vbox");
-    this.splitView.setSidebarElementConstraints(Preferences.minElementsSidebarWidth, Preferences.minElementsSidebarHeight);
-    this.splitView.setMainElementConstraints(minimumContentWidthPercent, minimumContentHeightPercent);
-    this.splitView.addEventListener(WebInspector.SidebarView.EventTypes.Resized, this._updateTreeOutlineVisibleWidth.bind(this));
+
+    this._splitView = new WebInspector.SplitView(true, true, "elementsSidebarWidth", initialSidebarWidth, initialSidebarHeight);
+    this._splitView.setSidebarElementConstraints(Preferences.minSidebarWidth, Preferences.minSidebarHeight);
+    this._splitView.setMainElementConstraints(minimumContentWidthPercent, minimumContentHeightPercent);
+    this._splitView.addEventListener(WebInspector.SplitView.Events.SidebarSizeChanged, this._updateTreeOutlineVisibleWidth.bind(this));
+    this._splitView.show(this.element);
 
     this._searchableView = new WebInspector.SearchableView(this);
-    this.splitView.mainElement.classList.add("vbox");
-    this._searchableView.show(this.splitView.mainElement);
+    this._searchableView.show(this._splitView.mainElement());
     var stackElement = this._searchableView.element;
 
     this.contentElement = stackElement.createChild("div");
@@ -76,7 +75,7 @@
     WebInspector.settings.domWordWrap.addChangeListener(this._domWordWrapSettingChanged.bind(this));
 
     this.contentElement.addEventListener("contextmenu", this._contextMenuEventFired.bind(this), true);
-    this.splitView.sidebarElement.addEventListener("contextmenu", this._sidebarContextMenuEventFired.bind(this), false);
+    this._splitView.sidebarElement().addEventListener("contextmenu", this._sidebarContextMenuEventFired.bind(this), false);
 
     this.treeOutline = new WebInspector.ElementsTreeOutline(true, true, this._populateContextMenu.bind(this), this._setPseudoClassForNodeId.bind(this));
     this.treeOutline.wireToDomAgent();
@@ -132,13 +131,17 @@
         if (!this.treeOutline)
             return;
 
-        var width = this.splitView.element.offsetWidth;
-        if (this.splitView.isVertical())
-            width -= this.splitView.sidebarWidth();
+        var width = this._splitView.element.offsetWidth;
+        if (this._splitView.isVertical())
+            width -= this._splitView.sidebarSize();
         this.treeOutline.setVisibleWidth(width);
         this.updateBreadcrumbSizes();
+        this.treeOutline.updateSelection();
     },
 
+    /**
+     * @return {!Element}
+     */
     defaultFocusedElement: function()
     {
         return this.treeOutline.element;
@@ -152,11 +155,6 @@
         return this._searchableView;
     },
 
-    statusBarResized: function()
-    {
-        this.updateBreadcrumbSizes();
-    },
-
     wasShown: function()
     {
         // Attach heavy component lazily
@@ -187,27 +185,7 @@
 
     onResize: function()
     {
-        this.treeOutline.updateSelection();
-        this.updateBreadcrumbSizes();
-    },
-
-    /**
-     * @param {string=} id
-     * @return {?WebInspector.View}
-     */
-    createView: function(id)
-    {
-        if (id === "emulation") {
-            if (!this._overridesView)
-                this._overridesView = new WebInspector.OverridesView();
-            return this._overridesView;
-        }
-        if (id === "rendering") {
-            if (!this._renderingView)
-                this._renderingView = new WebInspector.RenderingOptionsView();
-            return this._renderingView;
-        }
-        return null;
+        this._updateTreeOutlineVisibleWidth();
     },
 
     /**
@@ -243,7 +221,7 @@
 
         WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMetrics.UserAction, {
             action: WebInspector.UserMetrics.UserActionNames.ForcedElementState,
-            selector: WebInspector.DOMPresentationUtils.appropriateSelectorFor(node, false),
+            selector: WebInspector.DOMPresentationUtils.fullQualifiedSelector(node, false),
             enabled: enable,
             state: pseudoClass
         });
@@ -263,7 +241,7 @@
             ConsoleAgent.addInspectedNode(selectedNode.id);
             this._lastValidSelectedNode = selectedNode;
         }
-        WebInspector.notifications.dispatchEventToListeners(WebInspector.ElementsTreeOutline.Events.SelectedNodeChanged);
+        WebInspector.notifications.dispatchEventToListeners(WebInspector.NotificationService.Events.SelectedNodeChanged);
     },
 
     _updateSidebars: function()
@@ -322,6 +300,7 @@
 
         /**
          * @param {?DOMAgent.NodeId} nodeId
+         * @this {WebInspector.ElementsPanel}
          */
         function selectLastSelectedNode(nodeId)
         {
@@ -369,6 +348,7 @@
 
         /**
          * @param {number} resultCount
+         * @this {WebInspector.ElementsPanel}
          */
         function resultCountCallback(resultCount)
         {
@@ -394,24 +374,12 @@
         var contextMenu = new WebInspector.ContextMenu(event);
         this.treeOutline.populateContextMenu(contextMenu, event);
 
-        if (WebInspector.experimentsSettings.cssRegions.isEnabled()) {
-            contextMenu.appendSeparator();
-            contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "CSS named flows\u2026" : "CSS Named Flows\u2026"), this._showNamedFlowCollections.bind(this));
-        }
-
         contextMenu.appendSeparator();
         contextMenu.appendCheckboxItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Word wrap" : "Word Wrap"), toggleWordWrap.bind(this), WebInspector.settings.domWordWrap.get());
 
         contextMenu.show();
     },
 
-    _showNamedFlowCollections: function()
-    {
-        if (!WebInspector.cssNamedFlowCollectionsView)
-            WebInspector.cssNamedFlowCollectionsView = new WebInspector.CSSNamedFlowCollectionsView();
-        WebInspector.cssNamedFlowCollectionsView.showInDrawer();
-    },
-
     _domWordWrapSettingChanged: function(event)
     {
         if (event.data)
@@ -487,6 +455,10 @@
             object.callFunctionJSON(dimensions, undefined, callback);
             object.release();
 
+            /**
+             * @return {!{offsetWidth: number, offsetHeight: number, naturalWidth: number, naturalHeight: number}}
+             * @this {!Element}
+             */
             function dimensions()
             {
                 return { offsetWidth: this.offsetWidth, offsetHeight: this.offsetHeight, naturalWidth: this.naturalWidth, naturalHeight: this.naturalHeight };
@@ -554,7 +526,8 @@
         }
 
         /**
-         * @param {?DOMAgent.Node} node
+         * @param {?WebInspector.DOMNode} node
+         * @this {WebInspector.ElementsPanel}
          */
         function searchCallback(node)
         {
@@ -1079,8 +1052,14 @@
         eventListenersSidebarPane.needsUpdate = false;
     },
 
+    /**
+     * @param {!KeyboardEvent} event
+     */
     handleShortcut: function(event)
     {
+        /**
+         * @this {WebInspector.ElementsPanel}
+         */
         function handleUndoRedo()
         {
             if (WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) && !event.shiftKey && event.keyIdentifier === "U+005A") { // Z key
@@ -1120,11 +1099,6 @@
         this.selectedDOMNode().copyNode();
     },
 
-    sidebarResized: function(event)
-    {
-        this.treeOutline.updateSelection();
-    },
-
     revealAndSelectNode: function(nodeId)
     {
         WebInspector.inspectorView.setCurrentPanel(this);
@@ -1189,8 +1163,7 @@
 
     _dockSideChanged: function()
     {
-        var dockSide = WebInspector.dockController.dockSide();
-        var vertically = dockSide === WebInspector.DockController.State.DockedToRight && WebInspector.settings.splitVerticallyWhenDockedToRight.get();
+        var vertically = WebInspector.dockController.isVertical() && WebInspector.settings.splitVerticallyWhenDockedToRight.get();
         this._splitVertically(vertically);
     },
 
@@ -1204,15 +1177,15 @@
      */
     _splitVertically: function(vertically)
     {
-        if (this.sidebarPaneView && vertically === !this.splitView.isVertical())
+        if (this.sidebarPaneView && vertically === !this._splitView.isVertical())
             return;
 
         if (this.sidebarPaneView) {
             this.sidebarPaneView.detach();
-            this.splitView.uninstallResizer(this.sidebarPaneView.headerElement());
+            this._splitView.uninstallResizer(this.sidebarPaneView.headerElement());
         }
 
-        this.splitView.setVertical(!vertically);
+        this._splitView.setVertical(!vertically);
 
         var computedPane = new WebInspector.SidebarPane(WebInspector.UIString("Computed"));
         computedPane.element.classList.add("composite");
@@ -1229,6 +1202,7 @@
         /**
          * @param {!WebInspector.SidebarPane} pane
          * @param {!Element=} beforeElement
+         * @this {WebInspector.ElementsPanel}
          */
         function showMetrics(pane, beforeElement)
         {
@@ -1237,6 +1211,7 @@
 
         /**
          * @param {!WebInspector.Event} event
+         * @this {WebInspector.ElementsPanel}
          */
         function tabSelected(event)
         {
@@ -1250,7 +1225,7 @@
         this.sidebarPaneView = new WebInspector.SidebarTabbedPane();
 
         if (vertically) {
-            this.splitView.installResizer(this.sidebarPaneView.headerElement());
+            this._splitView.installResizer(this.sidebarPaneView.headerElement());
             this.sidebarPanes.metrics.show(computedPane.bodyElement, this.sidebarPanes.computedStyle.element);
             this.sidebarPanes.metrics.setExpandCallback(expandComputed);
 
@@ -1259,14 +1234,14 @@
             compositePane.element.classList.add("fill");
             var expandComposite = compositePane.expand.bind(compositePane);
 
-            var splitView = new WebInspector.SplitView(true, "StylesPaneSplitRatio", 0.5);
+            var splitView = new WebInspector.SplitView(true, true, "StylesPaneSplitRatio", 0.5);
             splitView.show(compositePane.bodyElement);
 
-            this.sidebarPanes.styles.show(splitView.firstElement());
-            splitView.firstElement().appendChild(this.sidebarPanes.styles.titleElement);
+            this.sidebarPanes.styles.show(splitView.mainElement());
+            splitView.mainElement().appendChild(this.sidebarPanes.styles.titleElement);
             this.sidebarPanes.styles.setExpandCallback(expandComposite);
 
-            computedPane.show(splitView.secondElement());
+            computedPane.show(splitView.sidebarElement());
             computedPane.setExpandCallback(expandComposite);
 
             this.sidebarPaneView.addPane(compositePane);
@@ -1296,7 +1271,7 @@
         for (var i = 0; i < this._extensionSidebarPanes.length; ++i)
             this._extensionSidebarPanesContainer.addPane(this._extensionSidebarPanes[i]);
 
-        this.sidebarPaneView.show(this.splitView.sidebarElement);
+        this.sidebarPaneView.show(this._splitView.sidebarElement());
         this.sidebarPanes.styles.expand();
     },
 
@@ -1312,3 +1287,70 @@
 
     __proto__: WebInspector.Panel.prototype
 }
+
+/**
+ * @constructor
+ * @implements {WebInspector.ContextMenu.Provider}
+ */
+WebInspector.ElementsPanel.ContextMenuProvider = function()
+{
+}
+
+WebInspector.ElementsPanel.ContextMenuProvider.prototype = {
+    /**
+     * @param {!Event} event
+     * @param {!WebInspector.ContextMenu} contextMenu
+     * @param {!Object} target
+     */
+    appendApplicableItems: function(event, contextMenu, target)
+    {
+        WebInspector.panel("elements").appendApplicableItems(event, contextMenu, target);
+    }
+}
+
+
+/**
+ * @constructor
+ * @extends {WebInspector.Drawer.SingletonViewFactory}
+ */
+WebInspector.ElementsPanel.OverridesViewFactory = function()
+{
+    WebInspector.Drawer.SingletonViewFactory.call(this, WebInspector.OverridesView);
+}
+
+WebInspector.ElementsPanel.OverridesViewFactory.prototype = {
+    __proto__: WebInspector.Drawer.SingletonViewFactory.prototype
+}
+
+
+/**
+ * @constructor
+ * @extends {WebInspector.Drawer.SingletonViewFactory}
+ */
+WebInspector.ElementsPanel.RenderingViewFactory = function()
+{
+    WebInspector.Drawer.SingletonViewFactory.call(this, WebInspector.RenderingOptionsView);
+}
+
+WebInspector.ElementsPanel.RenderingViewFactory.prototype = {
+    __proto__: WebInspector.Drawer.SingletonViewFactory.prototype
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.Revealer}
+ */
+WebInspector.ElementsPanel.DOMNodeRevealer = function()
+{
+}
+
+WebInspector.ElementsPanel.DOMNodeRevealer.prototype = {
+    /**
+     * @param {!Object} node
+     */
+    reveal: function(node)
+    {
+        if (node instanceof WebInspector.DOMNode)
+            /** @type {!WebInspector.ElementsPanel} */ (WebInspector.showPanel("elements")).revealAndSelectNode(node.id);
+    }
+}
diff --git a/Source/devtools/front_end/ElementsPanelDescriptor.js b/Source/devtools/front_end/ElementsPanelDescriptor.js
deleted file mode 100644
index 9baa68a..0000000
--- a/Source/devtools/front_end/ElementsPanelDescriptor.js
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (C) 2012 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:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
- * OR ITS 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.
- */
-
-/**
- * @constructor
- * @extends {WebInspector.PanelDescriptor}
- * @implements {WebInspector.ContextMenu.Provider}
- * @implements {WebInspector.ViewFactory}
- */
-WebInspector.ElementsPanelDescriptor = function()
-{
-    WebInspector.PanelDescriptor.call(this, "elements", WebInspector.UIString("Elements"), "ElementsPanel", "ElementsPanel.js");
-    WebInspector.ContextMenu.registerProvider(this);
-}
-
-WebInspector.ElementsPanelDescriptor.prototype = {
-    /** 
-     * @param {!WebInspector.ContextMenu} contextMenu
-     * @param {!Object} target
-     */
-    appendApplicableItems: function(event, contextMenu, target)
-    {
-        if (target instanceof WebInspector.RemoteObject) {
-            var remoteObject = /** @type {!WebInspector.RemoteObject} */ (target);
-            if (remoteObject.subtype !== "node")
-                return;
-        } else if (!(target instanceof WebInspector.DOMNode))
-            return;
-        this.panel().appendApplicableItems(event, contextMenu, target);
-    },
-
-    registerShortcuts: function()
-    {
-        var elementsSection = WebInspector.shortcutsScreen.section(WebInspector.UIString("Elements Panel"));
-
-        var navigate = WebInspector.ElementsPanelDescriptor.ShortcutKeys.NavigateUp.concat(WebInspector.ElementsPanelDescriptor.ShortcutKeys.NavigateDown);
-        elementsSection.addRelatedKeys(navigate, WebInspector.UIString("Navigate elements"));
-
-        var expandCollapse = WebInspector.ElementsPanelDescriptor.ShortcutKeys.Expand.concat(WebInspector.ElementsPanelDescriptor.ShortcutKeys.Collapse);
-        elementsSection.addRelatedKeys(expandCollapse, WebInspector.UIString("Expand/collapse"));
-
-        elementsSection.addAlternateKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.EditAttribute, WebInspector.UIString("Edit attribute"));
-        elementsSection.addAlternateKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.HideElement, WebInspector.UIString("Hide element"));
-        elementsSection.addAlternateKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.ToggleEditAsHTML, WebInspector.UIString("Toggle edit as HTML"));
-
-        var stylesPaneSection = WebInspector.shortcutsScreen.section(WebInspector.UIString("Styles Pane"));
-
-        var nextPreviousProperty = WebInspector.ElementsPanelDescriptor.ShortcutKeys.NextProperty.concat(WebInspector.ElementsPanelDescriptor.ShortcutKeys.PreviousProperty);
-        stylesPaneSection.addRelatedKeys(nextPreviousProperty, WebInspector.UIString("Next/previous property"));
-
-        stylesPaneSection.addRelatedKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.IncrementValue, WebInspector.UIString("Increment value"));
-        stylesPaneSection.addRelatedKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.DecrementValue, WebInspector.UIString("Decrement value"));
-
-        stylesPaneSection.addAlternateKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.IncrementBy10, WebInspector.UIString("Increment by %f", 10));
-        stylesPaneSection.addAlternateKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.DecrementBy10, WebInspector.UIString("Decrement by %f", 10));
-
-        stylesPaneSection.addAlternateKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.IncrementBy100, WebInspector.UIString("Increment by %f", 100));
-        stylesPaneSection.addAlternateKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.DecrementBy100, WebInspector.UIString("Decrement by %f", 100));
-
-        stylesPaneSection.addAlternateKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.IncrementBy01, WebInspector.UIString("Increment by %f", 0.1));
-        stylesPaneSection.addAlternateKeys(WebInspector.ElementsPanelDescriptor.ShortcutKeys.DecrementBy01, WebInspector.UIString("Decrement by %f", 0.1));
-
-        // Install emulation view
-        function toggleEmulationView()
-        {
-            if (WebInspector.settings.showEmulationViewInDrawer.get())
-                WebInspector.inspectorView.registerViewInDrawer("emulation", WebInspector.UIString("Emulation"), this);
-            else
-                WebInspector.inspectorView.unregisterViewInDrawer("emulation");
-        }
-        WebInspector.settings.showEmulationViewInDrawer.addChangeListener(toggleEmulationView, this);
-        toggleEmulationView.call(this);
-
-        // Install rendering view
-        function toggleRenderingView()
-        {
-            if (WebInspector.settings.showRenderingViewInDrawer.get())
-                WebInspector.inspectorView.registerViewInDrawer("rendering", WebInspector.UIString("Rendering"), this);
-            else
-                WebInspector.inspectorView.unregisterViewInDrawer("rendering");
-        }
-        WebInspector.settings.showRenderingViewInDrawer.addChangeListener(toggleRenderingView, this);
-        toggleRenderingView.call(this);
-    },
-
-    /**
-     * @param {string=} id
-     * @return {?WebInspector.View}
-     */
-    createView: function(id)
-    {
-        return this.panel().createView(id);
-    },
-
-    __proto__: WebInspector.PanelDescriptor.prototype
-}
-
-WebInspector.ElementsPanelDescriptor.ShortcutKeys = {
-    NavigateUp: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up)
-    ],
-
-    NavigateDown: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down)
-    ],
-
-    Expand: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Right)
-    ],
-
-    Collapse: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Left)
-    ],
-
-    EditAttribute: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Enter)
-    ],
-
-    HideElement: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.H)
-    ],
-
-    ToggleEditAsHTML: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F2)
-    ],
-
-    NextProperty: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Tab)
-    ],
-
-    PreviousProperty: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Tab, WebInspector.KeyboardShortcut.Modifiers.Shift)
-    ],
-
-    IncrementValue: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up)
-    ],
-
-    DecrementValue: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down)
-    ],
-
-    IncrementBy10: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp),
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up, WebInspector.KeyboardShortcut.Modifiers.Shift)
-    ],
-
-    DecrementBy10: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown),
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down, WebInspector.KeyboardShortcut.Modifiers.Shift)
-    ],
-
-    IncrementBy100: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp, WebInspector.KeyboardShortcut.Modifiers.Shift)
-    ],
-
-    DecrementBy100: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown, WebInspector.KeyboardShortcut.Modifiers.Shift)
-    ],
-
-    IncrementBy01: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp, WebInspector.KeyboardShortcut.Modifiers.Alt)
-    ],
-
-    DecrementBy01: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown, WebInspector.KeyboardShortcut.Modifiers.Alt)
-    ]
-};
diff --git a/Source/devtools/front_end/ElementsTreeOutline.js b/Source/devtools/front_end/ElementsTreeOutline.js
index 26132f4..d87c9a9 100644
--- a/Source/devtools/front_end/ElementsTreeOutline.js
+++ b/Source/devtools/front_end/ElementsTreeOutline.js
@@ -699,6 +699,10 @@
             if (!object)
                 return;
 
+            /**
+             * @param {?string} pseudoType
+             * @this {!Element}
+             */
             function toggleClassAndInjectStyleRule(pseudoType)
             {
                 const classNamePrefix = "__web-inspector-hide";
@@ -773,6 +777,10 @@
 WebInspector.ElementsTreeOutline.PseudoStateDecorator.PropertyName = "pseudoState";
 
 WebInspector.ElementsTreeOutline.PseudoStateDecorator.prototype = {
+    /**
+     * @param {!WebInspector.DOMNode} node
+     * @return {?string}
+     */
     decorate: function(node)
     {
         if (node.nodeType() !== Node.ELEMENT_NODE)
@@ -783,6 +791,10 @@
         return WebInspector.UIString("Element state: %s", ":" + propertyValue.join(", :"));
     },
 
+    /**
+     * @param {!WebInspector.DOMNode} node
+     * @return {?string}
+     */
     decorateAncestor: function(node)
     {
         if (node.nodeType() !== Node.ELEMENT_NODE)
@@ -794,9 +806,7 @@
         if (descendantCount === 1)
             return WebInspector.UIString("%d descendant with forced state", descendantCount);
         return WebInspector.UIString("%d descendants with forced state", descendantCount);
-    },
-
-    __proto__: WebInspector.ElementsTreeOutline.ElementDecorator.prototype
+    }
 }
 
 /**
@@ -1000,7 +1010,7 @@
 
     _preventFollowingLinksOnDoubleClick: function()
     {
-        var links = this.listItemElement.querySelectorAll("li > .webkit-html-tag > .webkit-html-attribute > .webkit-html-external-link, li > .webkit-html-tag > .webkit-html-attribute > .webkit-html-resource-link");
+        var links = this.listItemElement.querySelectorAll("li .webkit-html-tag > .webkit-html-attribute > .webkit-html-external-link, li .webkit-html-tag > .webkit-html-attribute > .webkit-html-resource-link");
         if (!links)
             return;
 
@@ -1028,6 +1038,7 @@
 
     /**
      * @param {boolean=} closingTag
+     * @return {!WebInspector.ElementsTreeElement}
      */
     insertChildElement: function(child, index, closingTag)
     {
@@ -1070,6 +1081,9 @@
         var treeChildIndex = 0;
         var elementToSelect;
 
+        /**
+         * @this {WebInspector.ElementsTreeElement}
+         */
         function updateChildrenOfNode()
         {
             var treeOutline = treeElement.treeOutline;
@@ -1184,6 +1198,9 @@
 
     expandRecursively: function()
     {
+        /**
+         * @this {WebInspector.ElementsTreeElement}
+         */
         function callback()
         {
             TreeElement.prototype.expandRecursively.call(this, Number.MAX_VALUE);
@@ -1229,6 +1246,8 @@
 
     /**
      * @override
+     * @param {boolean=} selectedByUser
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1243,6 +1262,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     ondelete: function()
     {
@@ -1253,6 +1273,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onenter: function()
     {
@@ -1286,6 +1307,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     ondblclick: function(event)
     {
@@ -1437,7 +1459,7 @@
         // a parent node. Use a temporary span container for the HTML.
         var container = document.createElement("span");
         this._buildAttributeDOM(container, " ", "");
-        var attr = container.firstChild;
+        var attr = container.firstElementChild;
         attr.style.marginLeft = "2px"; // overrides the .editing margin rule
         attr.style.marginRight = "2px"; // overrides the .editing margin rule
 
@@ -1500,7 +1522,7 @@
         // Remove zero-width spaces that were added by nodeTitleInfo.
         removeZeroWidthSpaceRecursive(attribute);
 
-        var config = new WebInspector.EditingConfig(this._attributeEditingCommitted.bind(this), this._editingCancelled.bind(this), attributeName);
+        var config = new WebInspector.InplaceEditor.Config(this._attributeEditingCommitted.bind(this), this._editingCancelled.bind(this), attributeName);
         
         function handleKeyDownEvents(event)
         {
@@ -1521,7 +1543,7 @@
 
         config.customFinishHandler = handleKeyDownEvents.bind(this);
 
-        this._editing = WebInspector.startEditing(attribute, config);
+        this._editing = WebInspector.InplaceEditor.startEditing(attribute, config);
 
         window.getSelection().setBaseAndExtent(elementForSelection, 0, elementForSelection, 1);
 
@@ -1545,8 +1567,8 @@
         var container = textNodeElement.enclosingNodeOrSelfWithClass("webkit-html-text-node");
         if (container)
             container.textContent = textNode.nodeValue(); // Strip the CSS or JS highlighting if present.
-        var config = new WebInspector.EditingConfig(this._textNodeEditingCommitted.bind(this, textNode), this._editingCancelled.bind(this));
-        this._editing = WebInspector.startEditing(textNodeElement, config);
+        var config = new WebInspector.InplaceEditor.Config(this._textNodeEditingCommitted.bind(this, textNode), this._editingCancelled.bind(this));
+        this._editing = WebInspector.InplaceEditor.startEditing(textNodeElement, config);
         window.getSelection().setBaseAndExtent(textNodeElement, 0, textNodeElement, 1);
 
         return true;
@@ -1572,18 +1594,30 @@
 
         var closingTagElement = this._distinctClosingTagElement();
 
+        /**
+         * @param {?Event} event
+         * @this {WebInspector.ElementsTreeElement}
+         */
         function keyupListener(event)
         {
             if (closingTagElement)
                 closingTagElement.textContent = "</" + tagNameElement.textContent + ">";
         }
 
+        /**
+         * @param {!Element} element
+         * @param {string} newTagName
+         * @this {WebInspector.ElementsTreeElement}
+         */
         function editingComitted(element, newTagName)
         {
             tagNameElement.removeEventListener('keyup', keyupListener, false);
             this._tagNameEditingCommitted.apply(this, arguments);
         }
 
+        /**
+         * @this {WebInspector.ElementsTreeElement}
+         */
         function editingCancelled()
         {
             tagNameElement.removeEventListener('keyup', keyupListener, false);
@@ -1592,8 +1626,8 @@
 
         tagNameElement.addEventListener('keyup', keyupListener, false);
 
-        var config = new WebInspector.EditingConfig(editingComitted.bind(this), editingCancelled.bind(this), tagName);
-        this._editing = WebInspector.startEditing(tagNameElement, config);
+        var config = new WebInspector.InplaceEditor.Config(editingComitted.bind(this), editingCancelled.bind(this), tagName);
+        this._editing = WebInspector.InplaceEditor.startEditing(tagNameElement, config);
         window.getSelection().setBaseAndExtent(tagNameElement, 0, tagNameElement, 1);
         return true;
     },
@@ -1634,6 +1668,7 @@
         /**
          * @param {!Element} element
          * @param {string} newValue
+         * @this {WebInspector.ElementsTreeElement}
          */
         function commit(element, newValue)
         {
@@ -1641,6 +1676,9 @@
             dispose.call(this);
         }
 
+        /**
+         * @this {WebInspector.ElementsTreeElement}
+         */
         function dispose()
         {
             delete this._editing;
@@ -1664,9 +1702,9 @@
             this.treeOutline.element.focus();
         }
 
-        var config = new WebInspector.EditingConfig(commit.bind(this), dispose.bind(this));
+        var config = new WebInspector.InplaceEditor.Config(commit.bind(this), dispose.bind(this));
         config.setMultilineOptions(initialValue, { name: "xml", htmlMode: true }, "web-inspector-html", WebInspector.settings.domWordWrap.get(), true);
-        this._editing = WebInspector.startEditing(this._htmlEditElement, config);
+        this._editing = WebInspector.InplaceEditor.startEditing(this._htmlEditElement, config);
         this._editing.setWidth(this.treeOutline._visibleWidth);
         this.treeOutline._multilineEditing = this._editing;
     },
@@ -1676,8 +1714,10 @@
         delete this._editing;
 
         var treeOutline = this.treeOutline;
+
         /**
          * @param {?Protocol.Error=} error
+         * @this {WebInspector.ElementsTreeElement}
          */
         function moveToNextAttributeIfNeeded(error)
         {
@@ -1758,6 +1798,9 @@
             moveToNextAttributeIfNeeded.call(self);
         }
 
+        /**
+         * @this {WebInspector.ElementsTreeElement}
+         */
         function moveToNextAttributeIfNeeded()
         {
             if (moveDirection !== "forward") {
@@ -1803,6 +1846,9 @@
     {
         delete this._editing;
 
+        /**
+         * @this {WebInspector.ElementsTreeElement}
+         */
         function callback()
         {
             this.updateTitle();
@@ -1922,12 +1968,52 @@
      * @param {!Node} parentElement
      * @param {string} name
      * @param {string} value
+     * @param {boolean=} forceValue
      * @param {!WebInspector.DOMNode=} node
      * @param {function(string, string, string, boolean=, string=)=} linkify
      */
-    _buildAttributeDOM: function(parentElement, name, value, node, linkify)
+    _buildAttributeDOM: function(parentElement, name, value, forceValue, node, linkify)
     {
-        var hasText = (value.length > 0);
+        var closingPunctuationRegex = /[\/;:\)\]\}]/g;
+        var highlightIndex = 0;
+        var highlightCount;
+        var additionalHighlightOffset = 0;
+        var result;
+
+        /**
+         * @param {string} match
+         * @param {number} replaceOffset
+         * @return {string}
+         */
+        function replacer(match, replaceOffset) {
+            while (highlightIndex < highlightCount && result.entityRanges[highlightIndex].offset < replaceOffset) {
+                result.entityRanges[highlightIndex].offset += additionalHighlightOffset;
+                ++highlightIndex;
+            }
+            additionalHighlightOffset += 1;
+            return match + "\u200B";
+        }
+
+        /**
+         * @param {!Element} element
+         * @param {string} value
+         * @this {WebInspector.ElementsTreeElement}
+         */
+        function setValueWithEntities(element, value)
+        {
+            var attrValueElement = element.createChild("span", "webkit-html-attribute-value");
+            result = this._convertWhitespaceToEntities(value);
+            highlightCount = result.entityRanges.length;
+            value = result.text.replace(closingPunctuationRegex, replacer);
+            while (highlightIndex < highlightCount) {
+                result.entityRanges[highlightIndex].offset += additionalHighlightOffset;
+                ++highlightIndex;
+            }
+            attrValueElement.textContent = value;
+            WebInspector.highlightRangesWithStyleClass(attrValueElement, result.entityRanges, "webkit-html-entity-value");
+        }
+
+        var hasText = (forceValue || value.length > 0);
         var attrSpanElement = parentElement.createChild("span", "webkit-html-attribute");
         var attrNameElement = attrSpanElement.createChild("span", "webkit-html-attribute-name");
         attrNameElement.textContent = name;
@@ -1937,19 +2023,16 @@
 
         if (linkify && (name === "src" || name === "href")) {
             var rewrittenHref = node.resolveURL(value);
-            value = value.replace(/([\/;:\)\]\}])/g, "$1\u200B");
             if (rewrittenHref === null) {
-                var attrValueElement = attrSpanElement.createChild("span", "webkit-html-attribute-value");
-                attrValueElement.textContent = value;
+                setValueWithEntities.call(this, attrSpanElement, value);
             } else {
+                value = value.replace(closingPunctuationRegex, "$&\u200B");
                 if (value.startsWith("data:"))
                     value = value.trimMiddle(60);
                 attrSpanElement.appendChild(linkify(rewrittenHref, value, "webkit-html-attribute-value", node.nodeName().toLowerCase() === "a"));
             }
         } else {
-            value = value.replace(/([\/;:\)\]\}])/g, "$1\u200B");
-            var attrValueElement = attrSpanElement.createChild("span", "webkit-html-attribute-value");
-            attrValueElement.textContent = value;
+            setValueWithEntities.call(this, attrSpanElement, value);
         }
 
         if (hasText)
@@ -1989,7 +2072,7 @@
             for (var i = 0; i < attributes.length; ++i) {
                 var attr = attributes[i];
                 tagElement.appendChild(document.createTextNode(" "));
-                this._buildAttributeDOM(tagElement, attr.name, attr.value, node, linkify);
+                this._buildAttributeDOM(tagElement, attr.name, attr.value, false, node, linkify);
             }
         }
         tagElement.appendChild(document.createTextNode(">"));
@@ -2032,8 +2115,7 @@
 
         switch (node.nodeType()) {
             case Node.ATTRIBUTE_NODE:
-                var value = node.value || "\u200B"; // Zero width space to force showing an empty value.
-                this._buildAttributeDOM(info.titleDOM, node.name, value);
+                this._buildAttributeDOM(info.titleDOM, node.name, node.value, true);
                 break;
 
             case Node.ELEMENT_NODE:
@@ -2152,7 +2234,7 @@
      */
     _showInlineText: function()
     {
-        if (this._node.templateContent() || (WebInspector.ElementsTreeOutline.showShadowDOM() && this._node.hasShadowRoots()) || this._node.hasPseudoElements())
+        if (this._node.importedDocument() || this._node.templateContent() || (WebInspector.ElementsTreeOutline.showShadowDOM() && this._node.hasShadowRoots()) || this._node.hasPseudoElements())
             return false;
         if (this._node.nodeType() !== Node.ELEMENT_NODE)
             return false;
@@ -2295,6 +2377,9 @@
     {
         function scrollIntoViewCallback(object)
         {
+            /**
+             * @this {!Element}
+             */
             function scrollIntoView()
             {
                 this.scrollIntoViewIfNeeded(true);
@@ -2313,6 +2398,8 @@
     _visibleChildren: function()
     {
         var visibleChildren = WebInspector.ElementsTreeOutline.showShadowDOM() ? this._node.shadowRoots() : [];
+        if (this._node.importedDocument())
+            visibleChildren.push(this._node.importedDocument());
         if (this._node.templateContent())
             visibleChildren.push(this._node.templateContent());
         var pseudoElements = this._node.pseudoElements();
@@ -2331,6 +2418,8 @@
     _visibleChildCount: function()
     {
         var childCount = this._node.childNodeCount();
+        if (this._node.importedDocument())
+            ++childCount;
         if (this._node.templateContent())
             ++childCount;
         if (WebInspector.ElementsTreeOutline.showShadowDOM())
@@ -2513,3 +2602,31 @@
     if (parent)
         this.parent = parent;
 }
+
+/**
+ * @constructor
+ * @implements {WebInspector.Renderer}
+ */
+WebInspector.ElementsTreeOutline.Renderer = function()
+{
+}
+
+WebInspector.ElementsTreeOutline.Renderer.prototype = {
+    /**
+     * @param {!Object} object
+     * @return {?Element}
+     */
+    render: function(object)
+    {
+        if (!(object instanceof WebInspector.DOMNode))
+            return null;
+        var treeOutline = new WebInspector.ElementsTreeOutline(false, false);
+        treeOutline.rootDOMNode = /** @type {!WebInspector.DOMNode} */ (object);
+        treeOutline.element.classList.add("outline-disclosure");
+        if (!treeOutline.children[0].hasChildren)
+            treeOutline.element.classList.add("single-node");
+        treeOutline.setVisible(true);
+        treeOutline.element.treeElementForTest = treeOutline.children[0];
+        return treeOutline.element;
+    }
+}
diff --git a/Source/devtools/front_end/EmptyView.js b/Source/devtools/front_end/EmptyView.js
index a8b51c1..9db05c1 100644
--- a/Source/devtools/front_end/EmptyView.js
+++ b/Source/devtools/front_end/EmptyView.js
@@ -41,7 +41,7 @@
 WebInspector.EmptyView.prototype = {
     wasShown: function()
     {
-        this.element.className = "empty-view";
+        this.element.classList.add("empty-view");
         this.element.textContent = this._text;
     },
 
diff --git a/Source/devtools/front_end/EventListenersSidebarPane.js b/Source/devtools/front_end/EventListenersSidebarPane.js
index 2981e78..7e74a3f 100644
--- a/Source/devtools/front_end/EventListenersSidebarPane.js
+++ b/Source/devtools/front_end/EventListenersSidebarPane.js
@@ -190,28 +190,27 @@
 WebInspector.EventListenerBar.prototype = {
     update: function()
     {
+        /**
+         * @param {?WebInspector.RemoteObject} nodeObject
+         * @this {WebInspector.EventListenerBar}
+         */
         function updateWithNodeObject(nodeObject)
         {
             var properties = [];
 
-            if (this.eventListener.type)
-                properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("type", this.eventListener.type));
-            if (typeof this.eventListener.useCapture !== "undefined")
-                properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("useCapture", this.eventListener.useCapture));
-            if (typeof this.eventListener.isAttribute !== "undefined")
-                properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("isAttribute", this.eventListener.isAttribute));
+            properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("type", this.eventListener.type));
+            properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("useCapture", this.eventListener.useCapture));
+            properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("isAttribute", this.eventListener.isAttribute));
             if (nodeObject)
                 properties.push(new WebInspector.RemoteObjectProperty("node", nodeObject));
             if (typeof this.eventListener.handler !== "undefined") {
                 var remoteObject = WebInspector.RemoteObject.fromPayload(this.eventListener.handler);
                 properties.push(new WebInspector.RemoteObjectProperty("handler", remoteObject));
             }
-            if (typeof this.eventListener.handlerBody !== "undefined")
-                properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("listenerBody", this.eventListener.handlerBody));
+            properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("listenerBody", this.eventListener.handlerBody));
             if (this.eventListener.sourceName)
                 properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("sourceName", this.eventListener.sourceName));
-            if (this.eventListener.location)
-                properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("lineNumber", this.eventListener.location.lineNumber + 1));
+            properties.push(WebInspector.RemoteObjectProperty.fromPrimitiveValue("lineNumber", this.eventListener.location.lineNumber + 1));
 
             this.updateProperties(properties);
         }
@@ -230,7 +229,7 @@
         }
 
         if (node.id === this._nodeId) {
-            this.titleElement.textContent = WebInspector.DOMPresentationUtils.appropriateSelectorFor(node);
+            this.titleElement.textContent = WebInspector.DOMPresentationUtils.simpleSelector(node);
             return;
         }
 
@@ -240,26 +239,15 @@
 
     _setFunctionSubtitle: function(linkifier)
     {
-        // Requires that Function.toString() return at least the function's signature.
-        if (this.eventListener.location) {
-            this.subtitleElement.removeChildren();
-            var urlElement;
-            if (this.eventListener.location.scriptId)
-                urlElement = linkifier.linkifyRawLocation(this.eventListener.location);
-            if (!urlElement) {
-                var url = this.eventListener.sourceName;
-                var lineNumber = this.eventListener.location.lineNumber;
-                var columnNumber = 0;
-                urlElement = linkifier.linkifyLocation(url, lineNumber, columnNumber);
-            }
-            this.subtitleElement.appendChild(urlElement);
-        } else {
-            var match = this.eventListener.handlerBody.match(/function ([^\(]+?)\(/);
-            if (match)
-                this.subtitleElement.textContent = match[1];
-            else
-                this.subtitleElement.textContent = WebInspector.UIString("(anonymous function)");
+        this.subtitleElement.removeChildren();
+        var urlElement = linkifier.linkifyRawLocation(this.eventListener.location);
+        if (!urlElement) {
+            var url = this.eventListener.sourceName;
+            var lineNumber = this.eventListener.location.lineNumber;
+            var columnNumber = 0;
+            urlElement = linkifier.linkifyLocation(url, lineNumber, columnNumber);
         }
+        this.subtitleElement.appendChild(urlElement);
     },
 
     __proto__: WebInspector.ObjectPropertiesSection.prototype
diff --git a/Source/devtools/front_end/ExtensionAPI.js b/Source/devtools/front_end/ExtensionAPI.js
index 34d703c..6dd47ae 100644
--- a/Source/devtools/front_end/ExtensionAPI.js
+++ b/Source/devtools/front_end/ExtensionAPI.js
@@ -104,6 +104,10 @@
     };
 }
 
+/**
+ * @param {number} injectedScriptId
+ * @return {!Object}
+ */
 function injectedExtensionAPI(injectedScriptId)
 {
 
@@ -156,7 +160,10 @@
             extensionServer.sendRequest({ command: commands.Unsubscribe, type: this._type });
     },
 
-    _fire: function()
+    /**
+     * @param {...} vararg
+     */
+    _fire: function(vararg)
     {
         var listeners = this._listeners.slice();
         for (var i = 0; i < listeners.length; ++i)
@@ -216,6 +223,9 @@
  */
 function Network()
 {
+    /**
+     * @this {EventSinkImpl}
+     */
     function dispatchRequestEvent(message)
     {
         var request = message.arguments[1];
@@ -239,12 +249,12 @@
             }
             callback(result);
         }
-        return extensionServer.sendRequest({ command: commands.GetHAR }, callback && callbackWrapper);
+        extensionServer.sendRequest({ command: commands.GetHAR }, callback && callbackWrapper);
     },
 
     addRequestHeaders: function(headers)
     {
-        return extensionServer.sendRequest({ command: commands.AddRequestHeaders, headers: headers, extensionId: window.location.hostname });
+        extensionServer.sendRequest({ command: commands.AddRequestHeaders, headers: headers, extensionId: window.location.hostname });
     }
 }
 
@@ -343,6 +353,9 @@
 {
     this._id = id;
 
+    /**
+     * @this {EventSinkImpl}
+     */
     function dispatchShowEvent(message)
     {
         var frameIndex = message.arguments[0];
@@ -357,6 +370,7 @@
 
 /**
  * @constructor
+ * @extends {ExtensionViewImpl}
  */
 function PanelWithSidebarImpl(hostPanelName)
 {
@@ -384,6 +398,47 @@
     __proto__: ExtensionViewImpl.prototype
 }
 
+function declareInterfaceClass(implConstructor)
+{
+    return function()
+    {
+        var impl = { __proto__: implConstructor.prototype };
+        implConstructor.apply(impl, arguments);
+        populateInterfaceClass(this, impl);
+    }
+}
+
+function defineDeprecatedProperty(object, className, oldName, newName)
+{
+    var warningGiven = false;
+    function getter()
+    {
+        if (!warningGiven) {
+            console.warn(className + "." + oldName + " is deprecated. Use " + className + "." + newName + " instead");
+            warningGiven = true;
+        }
+        return object[newName];
+    }
+    object.__defineGetter__(oldName, getter);
+}
+
+function extractCallbackArgument(args)
+{
+    var lastArgument = args[args.length - 1];
+    return typeof lastArgument === "function" ? lastArgument : undefined;
+}
+
+var AuditCategory = declareInterfaceClass(AuditCategoryImpl);
+var AuditResult = declareInterfaceClass(AuditResultImpl);
+var Button = declareInterfaceClass(ButtonImpl);
+var EventSink = declareInterfaceClass(EventSinkImpl);
+var ExtensionPanel = declareInterfaceClass(ExtensionPanelImpl);
+var ExtensionSidebarPane = declareInterfaceClass(ExtensionSidebarPaneImpl);
+var PanelWithSidebar = declareInterfaceClass(PanelWithSidebarImpl);
+var Request = declareInterfaceClass(RequestImpl);
+var Resource = declareInterfaceClass(ResourceImpl);
+var Timeline = declareInterfaceClass(TimelineImpl);
+
 /**
  * @constructor
  * @extends {PanelWithSidebar}
@@ -393,6 +448,10 @@
     PanelWithSidebar.call(this, "elements");
 }
 
+ElementsPanel.prototype = {
+    __proto__: PanelWithSidebar.prototype
+}
+
 /**
  * @constructor
  * @extends {PanelWithSidebar}
@@ -402,6 +461,10 @@
     PanelWithSidebar.call(this, "sources");
 }
 
+SourcesPanel.prototype = {
+    __proto__: PanelWithSidebar.prototype
+}
+
 /**
  * @constructor
  * @extends {ExtensionViewImpl}
@@ -413,6 +476,9 @@
 }
 
 ExtensionPanelImpl.prototype = {
+    /**
+     * @return {!Object}
+     */
     createStatusBarButton: function(iconPath, tooltipText, disabled)
     {
         var id = "button-" + extensionServer.nextObjectId();
@@ -480,7 +546,9 @@
     setPage: function(page)
     {
         extensionServer.sendRequest({ command: commands.SetSidebarPage, id: this._id, page: page });
-    }
+    },
+
+    __proto__: ExtensionViewImpl.prototype
 }
 
 /**
@@ -514,6 +582,9 @@
 }
 
 Audits.prototype = {
+    /**
+     * @return {!AuditCategory}
+     */
     addCategory: function(displayName, resultCount)
     {
         var id = "extension-audit-category-" + extensionServer.nextObjectId();
@@ -529,6 +600,9 @@
  */
 function AuditCategoryImpl(id)
 {
+    /**
+     * @this {EventSinkImpl}
+     */
     function dispatchAuditEvent(request)
     {
         var auditResult = new AuditResult(request.arguments[0]);
@@ -575,6 +649,9 @@
         extensionServer.sendRequest(request);
     },
 
+    /**
+     * @return {!Object}
+     */
     createResult: function()
     {
         return new AuditResultNode(Array.prototype.slice.call(arguments));
@@ -590,11 +667,17 @@
         extensionServer.sendRequest({ command: commands.StopAuditCategoryRun, resultId: this._id });
     },
 
+    /**
+     * @type {!Object.<string, string>}
+     */
     get Severity()
     {
         return apiPrivate.audits.Severity;
     },
 
+    /**
+     * @return {!{type: string, arguments: !Array.<string|number>}}
+     */
     createResourceLink: function(url, lineNumber)
     {
         return {
@@ -603,6 +686,9 @@
         };
     },
 
+    /**
+     * @return {!{type: string, arguments: !Array.<string|number>}}
+     */
     _nodeFactory: function(type)
     {
         return {
@@ -623,6 +709,9 @@
 }
 
 AuditResultNode.prototype = {
+    /**
+     * @return {!Object}
+     */
     addChild: function()
     {
         var node = new AuditResultNode(Array.prototype.slice.call(arguments));
@@ -636,14 +725,22 @@
  */
 function InspectedWindow()
 {
+    /**
+     * @this {EventSinkImpl}
+     */
     function dispatchResourceEvent(message)
     {
         this._fire(new Resource(message.arguments[0]));
     }
+
+    /**
+     * @this {EventSinkImpl}
+     */
     function dispatchResourceContentEvent(message)
     {
         this._fire(new Resource(message.arguments[0]), message.arguments[1]);
     }
+
     this.onResourceAdded = new EventSink(events.ResourceAdded, dispatchResourceEvent);
     this.onResourceContentCommitted = new EventSink(events.ResourceContentCommitted, dispatchResourceContentEvent);
 }
@@ -659,9 +756,12 @@
             console.warn("Passing userAgent as string parameter to inspectedWindow.reload() is deprecated. " +
                          "Use inspectedWindow.reload({ userAgent: value}) instead.");
         }
-        return extensionServer.sendRequest({ command: commands.Reload, options: options });
+        extensionServer.sendRequest({ command: commands.Reload, options: options });
     },
 
+    /**
+     * @return {?Object}
+     */
     eval: function(expression, evaluateOptions)
     {
         var callback = extractCallbackArgument(arguments);
@@ -678,7 +778,8 @@
         };
         if (typeof evaluateOptions === "object")
             request.evaluateOptions = evaluateOptions;
-        return extensionServer.sendRequest(request, callback && callbackWrapper);
+        extensionServer.sendRequest(request, callback && callbackWrapper);
+        return null;
     },
 
     getResources: function(callback)
@@ -691,7 +792,7 @@
         {
             callback(resources.map(wrapResource));
         }
-        return extensionServer.sendRequest({ command: commands.GetPageResources }, callback && callbackWrapper);
+        extensionServer.sendRequest({ command: commands.GetPageResources }, callback && callbackWrapper);
     }
 }
 
@@ -722,12 +823,12 @@
             callback(response.content, response.encoding);
         }
 
-        return extensionServer.sendRequest({ command: commands.GetResourceContent, url: this._url }, callback && callbackWrapper);
+        extensionServer.sendRequest({ command: commands.GetResourceContent, url: this._url }, callback && callbackWrapper);
     },
 
     setContent: function(content, commit, callback)
     {
-        return extensionServer.sendRequest({ command: commands.SetResourceContent, url: this._url, content: content, commit: commit }, callback);
+        extensionServer.sendRequest({ command: commands.SetResourceContent, url: this._url, content: content, commit: commit }, callback);
     }
 }
 
@@ -788,9 +889,12 @@
     {
         if (typeof callback === "function")
             message.requestId = this._registerCallback(callback);
-        return this._port.postMessage(message);
+        this._port.postMessage(message);
     },
 
+    /**
+     * @return {boolean}
+     */
     hasHandler: function(command)
     {
         return !!this._handlers[command];
@@ -806,6 +910,9 @@
         delete this._handlers[command];
     },
 
+    /**
+     * @return {string}
+     */
     nextObjectId: function()
     {
         return injectedScriptId + "_" + ++this._lastObjectId;
@@ -856,47 +963,6 @@
     }
 }
 
-function declareInterfaceClass(implConstructor)
-{
-    return function()
-    {
-        var impl = { __proto__: implConstructor.prototype };
-        implConstructor.apply(impl, arguments);
-        populateInterfaceClass(this, impl);
-    }
-}
-
-function defineDeprecatedProperty(object, className, oldName, newName)
-{
-    var warningGiven = false;
-    function getter()
-    {
-        if (!warningGiven) {
-            console.warn(className + "." + oldName + " is deprecated. Use " + className + "." + newName + " instead");
-            warningGiven = true;
-        }
-        return object[newName];
-    }
-    object.__defineGetter__(oldName, getter);
-}
-
-function extractCallbackArgument(args)
-{
-    var lastArgument = args[args.length - 1];
-    return typeof lastArgument === "function" ? lastArgument : undefined;
-}
-
-var AuditCategory = declareInterfaceClass(AuditCategoryImpl);
-var AuditResult = declareInterfaceClass(AuditResultImpl);
-var Button = declareInterfaceClass(ButtonImpl);
-var EventSink = declareInterfaceClass(EventSinkImpl);
-var ExtensionPanel = declareInterfaceClass(ExtensionPanelImpl);
-var ExtensionSidebarPane = declareInterfaceClass(ExtensionSidebarPaneImpl);
-var PanelWithSidebar = declareInterfaceClass(PanelWithSidebarImpl);
-var Request = declareInterfaceClass(RequestImpl);
-var Resource = declareInterfaceClass(ResourceImpl);
-var Timeline = declareInterfaceClass(TimelineImpl);
-
 // extensionServer is a closure variable defined by the glue below -- make sure we fail if it's not there.
 if (!extensionServer)
     extensionServer = new ExtensionServerClient();
@@ -905,6 +971,56 @@
 }
 
 /**
+ * @suppress {checkVars, checkTypes}
+ */
+function platformExtensionAPI(coreAPI)
+{
+    function getTabId()
+    {
+        return tabId;
+    }
+    chrome = window.chrome || {};
+    // Override chrome.devtools as a workaround for a error-throwing getter being exposed
+    // in extension pages loaded into a non-extension process (only happens for remote client
+    // extensions)
+    var devtools_descriptor = Object.getOwnPropertyDescriptor(chrome, "devtools");
+    if (!devtools_descriptor || devtools_descriptor.get)
+        Object.defineProperty(chrome, "devtools", { value: {}, enumerable: true });
+    // Only expose tabId on chrome.devtools.inspectedWindow, not webInspector.inspectedWindow.
+    chrome.devtools.inspectedWindow = {};
+    chrome.devtools.inspectedWindow.__defineGetter__("tabId", getTabId);
+    chrome.devtools.inspectedWindow.__proto__ = coreAPI.inspectedWindow;
+    chrome.devtools.network = coreAPI.network;
+    chrome.devtools.panels = coreAPI.panels;
+
+    // default to expose experimental APIs for now.
+    if (extensionInfo.exposeExperimentalAPIs !== false) {
+        chrome.experimental = chrome.experimental || {};
+        chrome.experimental.devtools = chrome.experimental.devtools || {};
+
+        var properties = Object.getOwnPropertyNames(coreAPI);
+        for (var i = 0; i < properties.length; ++i) {
+            var descriptor = Object.getOwnPropertyDescriptor(coreAPI, properties[i]);
+            Object.defineProperty(chrome.experimental.devtools, properties[i], descriptor);
+        }
+        chrome.experimental.devtools.inspectedWindow = chrome.devtools.inspectedWindow;
+    }
+    if (extensionInfo.exposeWebInspectorNamespace)
+        window.webInspector = coreAPI;
+}
+
+/**
+ * @param {!ExtensionDescriptor} extensionInfo
+ * @return {string}
+ */
+function buildPlatformExtensionAPI(extensionInfo)
+{
+    return "var extensionInfo = " + JSON.stringify(extensionInfo) + ";" +
+       "var tabId = " + WebInspector._inspectedTabId + ";" +
+       platformExtensionAPI.toString();
+}
+
+/**
  * @param {!ExtensionDescriptor} extensionInfo
  * @return {string}
  */
diff --git a/Source/devtools/front_end/ExtensionAuditCategory.js b/Source/devtools/front_end/ExtensionAuditCategory.js
index e9bfdd9..a83b55c 100644
--- a/Source/devtools/front_end/ExtensionAuditCategory.js
+++ b/Source/devtools/front_end/ExtensionAuditCategory.js
@@ -30,7 +30,7 @@
 
 /**
  * @constructor
- * @extends {WebInspector.AuditCategory}
+ * @implements {WebInspector.AuditCategory}
  * @param {string} extensionOrigin
  * @param {string} id
  * @param {string} displayName
@@ -45,18 +45,24 @@
 }
 
 WebInspector.ExtensionAuditCategory.prototype = {
-    // AuditCategory interface
+    /**
+     * @override
+     */
     get id()
     {
         return this._id;
     },
 
+    /**
+     * @override
+     */
     get displayName()
     {
         return this._displayName;
     },
 
     /**
+     * @override
      * @param {!Array.<!WebInspector.NetworkRequest>} requests
      * @param {function(!WebInspector.AuditRuleResult)} ruleResultCallback
      * @param {function()} categoryDoneCallback
@@ -165,6 +171,7 @@
      * @param {string} expression
      * @param {string} title
      * @param {?Object} evaluateOptions
+     * @return {!Element}
      */
     object: function(expression, title, evaluateOptions)
     {
@@ -184,6 +191,7 @@
      * @this {WebInspector.ExtensionAuditCategoryResults}
      * @param {string} expression
      * @param {?Object} evaluateOptions
+     * @return {!Element}
      */
     node: function(expression, evaluateOptions)
     {
@@ -195,11 +203,12 @@
         {
             if (!nodeId)
                 return;
-            var treeOutline = new WebInspector.ElementsTreeOutline(false, false);
-            treeOutline.rootDOMNode = WebInspector.domAgent.nodeForId(nodeId);
-            treeOutline.element.classList.add("outline-disclosure");
-            treeOutline.setVisible(true);
-            parentElement.appendChild(treeOutline.element);
+            var node = WebInspector.domAgent.nodeForId(nodeId);
+            var renderer = WebInspector.moduleManager.instance(WebInspector.Renderer, node);
+            if (renderer)
+                parentElement.appendChild(renderer.render(node));
+            else
+                console.error("No renderer for node found");
         }
         /**
          * @param {!WebInspector.RemoteObject} remoteObject
diff --git a/Source/devtools/front_end/ExtensionPanel.js b/Source/devtools/front_end/ExtensionPanel.js
index 9f4315e..71eca98 100644
--- a/Source/devtools/front_end/ExtensionPanel.js
+++ b/Source/devtools/front_end/ExtensionPanel.js
@@ -51,6 +51,9 @@
 }
 
 WebInspector.ExtensionPanel.prototype = {
+    /**
+     * @return {!Element}
+     */
     defaultFocusedElement: function()
     {
         return WebInspector.View.prototype.defaultFocusedElement.call(this);
@@ -172,7 +175,7 @@
     setExpression: function(expression, title, evaluateOptions, securityOrigin, callback)
     {
         this._createObjectPropertiesView();
-        return WebInspector.extensionServer.evaluate(expression, true, false, evaluateOptions, securityOrigin, this._onEvaluate.bind(this, title, callback));
+        WebInspector.extensionServer.evaluate(expression, true, false, evaluateOptions, securityOrigin, this._onEvaluate.bind(this, title, callback));
     },
 
     /**
diff --git a/Source/devtools/front_end/ExtensionServer.js b/Source/devtools/front_end/ExtensionServer.js
index a727b7e..af2775e 100644
--- a/Source/devtools/front_end/ExtensionServer.js
+++ b/Source/devtools/front_end/ExtensionServer.js
@@ -28,8 +28,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+
+importScript("ExtensionRegistryStub.js");
+importScript("ExtensionAPI.js");
+importScript("ExtensionAuditCategory.js");
+
 /**
  * @constructor
+ * @implements {WebInspector.ExtensionServerAPI}
  */
 WebInspector.ExtensionServer = function()
 {
@@ -74,11 +80,15 @@
     this._registerHandler(commands.Unsubscribe, this._onUnsubscribe.bind(this));
     this._registerHandler(commands.UpdateButton, this._onUpdateButton.bind(this));
     this._registerHandler(commands.UpdateAuditProgress, this._onUpdateAuditProgress.bind(this));
-
     window.addEventListener("message", this._onWindowMessage.bind(this), false);
+
+    this._initExtensions();
 }
 
 WebInspector.ExtensionServer.prototype = {
+    /**
+     * @return {boolean}
+     */
     hasExtensions: function()
     {
         return !!Object.keys(this._registeredExtensions).length;
@@ -214,7 +224,7 @@
             return this._status.E_EXISTS(id);
 
         var page = this._expandResourcePath(port._extensionOrigin, message.page);
-        var panelDescriptor = new WebInspector.PanelDescriptor(id, message.title, undefined, undefined, new WebInspector.ExtensionPanel(id, page));
+        var panelDescriptor = new WebInspector.ExtensionServerPanelDescriptor(id, message.title, new WebInspector.ExtensionPanel(id, page));
         this._clientObjects[id] = panelDescriptor.panel();
         WebInspector.inspectorView.addPanel(panelDescriptor);
         return this._status.OK();
@@ -275,6 +285,10 @@
         var sidebar = this._clientObjects[message.id];
         if (!sidebar)
             return this._status.E_NOTFOUND(message.id);
+
+        /**
+         * @this {WebInspector.ExtensionServer}
+         */
         function callback(error)
         {
             var result = error ? this._status.E_FAILED(error) : this._status.OK();
@@ -295,10 +309,25 @@
 
     _onOpenResource: function(message)
     {
-        var a = document.createElement("a");
-        a.href = message.url;
-        a.lineNumber = message.lineNumber;
-        return WebInspector.showAnchorLocation(a) ? this._status.OK() : this._status.E_NOTFOUND(message.url);
+        var uiSourceCode = WebInspector.workspace.uiSourceCodeForURL(message.url);
+        if (uiSourceCode) {
+            WebInspector.Revealer.reveal(new WebInspector.UILocation(uiSourceCode, message.lineNumber, 0));
+            return this._status.OK();
+        }
+
+        var resource = WebInspector.resourceForURL(message.url);
+        if (resource) {
+            WebInspector.Revealer.reveal(resource, message.lineNumber);
+            return this._status.OK();
+        }
+
+        var request = WebInspector.networkLog.requestForURL(message.url);
+        if (request) {
+            WebInspector.Revealer.reveal(request);
+            return this._status.OK();
+        }
+
+        return this._status.E_NOTFOUND(message.url);
     },
 
     _onSetOpenResourceHandler: function(message, port)
@@ -346,6 +375,7 @@
          * @param {?Protocol.Error} error
          * @param {?RuntimeAgent.RemoteObject} resultPayload
          * @param {boolean=} wasThrown
+         * @this {WebInspector.ExtensionServer}
          */
         function callback(error, resultPayload, wasThrown)
         {
@@ -453,6 +483,9 @@
     {
         var resources = {};
 
+        /**
+         * @this {WebInspector.ExtensionServer}
+         */
         function pushResourceData(contentProvider)
         {
             if (!resources[contentProvider.contentURL()])
@@ -471,6 +504,7 @@
     {
         /**
          * @param {?string} content
+         * @this {WebInspector.ExtensionServer}
          */
         function onContentAvailable(content)
         {
@@ -505,6 +539,7 @@
     {
         /**
          * @param {?Protocol.Error} error
+         * @this {WebInspector.ExtensionServer}
          */
         function callbackWrapper(error)
         {
@@ -547,6 +582,7 @@
         if (WebInspector.panel("audits").getCategory(category.id))
             return this._status.E_EXISTS(category.id);
         this._clientObjects[message.id] = category;
+        // FIXME: register module manager extension instead of waking up audits module.
         WebInspector.panel("audits").addCategory(category);
     },
 
@@ -604,7 +640,7 @@
             port.postMessage({ command: "callback", requestId: requestId, result: result });
     },
 
-    initExtensions: function()
+    _initExtensions: function()
     {
         this._registerAutosubscriptionHandler(WebInspector.extensionAPI.Events.ConsoleMessageAdded,
             WebInspector.console, WebInspector.ConsoleModel.Events.MessageAdded, this._notifyConsoleMessageAdded);
@@ -614,42 +650,58 @@
             WebInspector.workspace,
             WebInspector.Workspace.Events.UISourceCodeAdded,
             this._notifyResourceAdded);
-        this._registerAutosubscriptionHandler(WebInspector.extensionAPI.Events.PanelObjectSelected + "elements",
-            WebInspector.notifications,
-            WebInspector.ElementsTreeOutline.Events.SelectedNodeChanged,
-            this._notifyElementsSelectionChanged);
+
+        /**
+         * @this {WebInspector.ExtensionServer}
+         */
+        function onElementsSubscriptionStarted()
+        {
+            WebInspector.notifications.addEventListener(WebInspector.NotificationService.Events.SelectedNodeChanged, this._notifyElementsSelectionChanged, this);
+        }
+
+        /**
+         * @this {WebInspector.ExtensionServer}
+         */
+        function onElementsSubscriptionStopped()
+        {
+            WebInspector.notifications.removeEventListener(WebInspector.NotificationService.Events.SelectedNodeChanged, this._notifyElementsSelectionChanged, this);
+        }
+
+        this._registerSubscriptionHandler(WebInspector.extensionAPI.Events.PanelObjectSelected + "elements",
+            onElementsSubscriptionStarted.bind(this), onElementsSubscriptionStopped.bind(this));
+
         this._registerAutosubscriptionHandler(WebInspector.extensionAPI.Events.PanelObjectSelected + "sources",
             WebInspector.notifications,
             WebInspector.SourceFrame.Events.SelectionChanged,
             this._notifySourceFrameSelectionChanged);
-        this._registerAutosubscriptionHandler(WebInspector.extensionAPI.Events.ResourceContentCommitted,
-            WebInspector.workspace,
-            WebInspector.Workspace.Events.UISourceCodeContentCommitted,
-            this._notifyUISourceCodeContentCommitted);
+        this._registerResourceContentCommittedHandler(this._notifyUISourceCodeContentCommitted);
 
+        /**
+         * @this {WebInspector.ExtensionServer}
+         */
         function onTimelineSubscriptionStarted()
         {
             WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.EventTypes.TimelineEventRecorded,
                 this._notifyTimelineEventRecorded, this);
             WebInspector.timelineManager.start();
         }
+
+        /**
+         * @this {WebInspector.ExtensionServer}
+         */
         function onTimelineSubscriptionStopped()
         {
             WebInspector.timelineManager.stop();
             WebInspector.timelineManager.removeEventListener(WebInspector.TimelineManager.EventTypes.TimelineEventRecorded,
                 this._notifyTimelineEventRecorded, this);
         }
+
         this._registerSubscriptionHandler(WebInspector.extensionAPI.Events.TimelineEventRecorded,
             onTimelineSubscriptionStarted.bind(this), onTimelineSubscriptionStopped.bind(this));
 
         WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.InspectedURLChanged,
             this._inspectedURLChanged, this);
 
-        this._initDone = true;
-        if (this._pendingExtensions) {
-            this._pendingExtensions.forEach(this._innerAddExtension, this);
-            delete this._pendingExtensions;
-        }
         InspectorExtensionRegistry.getExtensionsAsync();
     },
 
@@ -710,11 +762,11 @@
     },
 
     /**
-     * @param {!Array.<!ExtensionDescriptor>} extensions
+     * @param {!Array.<!ExtensionDescriptor>} extensionInfos
      */
-    _addExtensions: function(extensions)
+    addExtensions: function(extensionInfos)
     {
-        extensions.forEach(this._addExtension, this);
+        extensionInfos.forEach(this._addExtension, this);
     },
 
     /**
@@ -722,21 +774,6 @@
      */
     _addExtension: function(extensionInfo)
     {
-        if (this._initDone) {
-            this._innerAddExtension(extensionInfo);
-            return;
-        }
-        if (this._pendingExtensions)
-            this._pendingExtensions.push(extensionInfo);
-        else
-            this._pendingExtensions = [extensionInfo];
-    },
-
-    /**
-     * @param {!ExtensionDescriptor} extensionInfo
-     */
-    _innerAddExtension: function(extensionInfo)
-    {
         const urlOriginRegExp = new RegExp("([^:]+:\/\/[^/]*)\/"); // Can't use regexp literal here, MinJS chokes on it.
         var startPage = extensionInfo.startPage;
         var name = extensionInfo.name;
@@ -749,7 +786,7 @@
             }
             var extensionOrigin = originMatch[1];
             if (!this._registeredExtensions[extensionOrigin]) {
-                // See ExtensionAPI.js and ExtensionCommon.js for details.
+                // See ExtensionAPI.js for details.
                 InspectorFrontendHost.setInjectedScriptForOrigin(extensionOrigin, buildExtensionAPIInjectedScript(extensionInfo));
                 this._registeredExtensions[extensionOrigin] = { name: name };
             }
@@ -764,12 +801,6 @@
         return true;
     },
 
-    _onWindowMessage: function(event)
-    {
-        if (event.data === "registerExtension")
-            this._registerExtension(event.origin, event.ports[0]);
-    },
-
     _registerExtension: function(origin, port)
     {
         if (!this._registeredExtensions.hasOwnProperty(origin)) {
@@ -782,6 +813,12 @@
         port.start();
     },
 
+    _onWindowMessage: function(event)
+    {
+        if (event.data === "registerExtension")
+            this._registerExtension(event.origin, event.ports[0]);
+    },
+
     _onmessage: function(event)
     {
         var message = event.data;
@@ -804,8 +841,8 @@
 
     _registerSubscriptionHandler: function(eventTopic, onSubscribeFirst, onUnsubscribeLast)
     {
-        this._subscriptionStartHandlers[eventTopic] =  onSubscribeFirst;
-        this._subscriptionStopHandlers[eventTopic] =  onUnsubscribeLast;
+        this._subscriptionStartHandlers[eventTopic] = onSubscribeFirst;
+        this._subscriptionStopHandlers[eventTopic] = onUnsubscribeLast;
     },
 
     _registerAutosubscriptionHandler: function(eventTopic, eventTarget, frontendEventType, handler)
@@ -815,6 +852,31 @@
             eventTarget.removeEventListener.bind(eventTarget, frontendEventType, handler, this));
     },
 
+    _registerResourceContentCommittedHandler: function(handler)
+    {
+        /**
+         * @this {WebInspector.ExtensionServer}
+         */
+        function addFirstEventListener()
+        {
+            WebInspector.workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeContentCommitted, handler, this);
+            WebInspector.workspace.setHasResourceContentTrackingExtensions(true);
+        }
+
+        /**
+         * @this {WebInspector.ExtensionServer}
+         */
+        function removeLastEventListener()
+        {
+            WebInspector.workspace.setHasResourceContentTrackingExtensions(false);
+            WebInspector.workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeContentCommitted, handler, this);
+        }
+
+        this._registerSubscriptionHandler(WebInspector.extensionAPI.Events.ResourceContentCommitted,
+            addFirstEventListener.bind(this),
+            removeLastEventListener.bind(this));
+    },
+
     _expandResourcePath: function(extensionPath, resourcePath)
     {
         if (!resourcePath)
@@ -848,6 +910,7 @@
      * @param {?Object} options
      * @param {string} securityOrigin
      * @param {function(?string, !RuntimeAgent.RemoteObject, boolean=)} callback
+     * @return {!WebInspector.ExtensionStatus.Record|undefined}
      */
     evaluate: function(expression, exposeCommandLineAPI, returnByValue, options, securityOrigin, callback)
     {
@@ -890,7 +953,7 @@
             if (contextSecurityOrigin) {
                 context = frameContextList.contextBySecurityOrigin(contextSecurityOrigin);
                 if (!context) {
-                    console.warn("The JS context " + contextSecurityOrigin + " was not found in the frame " + frame.url)
+                    console.warn("The JavaScript context " + contextSecurityOrigin + " was not found in the frame " + frame.url)
                     return this._status.E_NOTFOUND(contextSecurityOrigin)
                 }
             } else {
@@ -907,9 +970,54 @@
 
 /**
  * @constructor
+ * @param {string} name
+ * @param {string} title
+ * @param {!WebInspector.Panel} panel
+ * @implements {WebInspector.PanelDescriptor}
+ */
+WebInspector.ExtensionServerPanelDescriptor = function(name, title, panel)
+{
+    this._name = name;
+    this._title = title;
+    this._panel = panel;
+}
+
+WebInspector.ExtensionServerPanelDescriptor.prototype = {
+    /**
+     * @return {string}
+     */
+    name: function()
+    {
+        return this._name;
+    },
+
+    /**
+     * @return {string}
+     */
+    title: function()
+    {
+        return this._title;
+    },
+
+    /**
+     * @return {!WebInspector.Panel}
+     */
+    panel: function()
+    {
+        return this._panel;
+    }
+}
+
+/**
+ * @constructor
  */
 WebInspector.ExtensionStatus = function()
 {
+    /**
+     * @param {string} code
+     * @param {string} description
+     * @return {!WebInspector.ExtensionStatus.Record}
+     */
     function makeStatus(code, description)
     {
         var details = Array.prototype.slice.call(arguments, 2);
@@ -931,20 +1039,13 @@
     this.E_FAILED = makeStatus.bind(null, "E_FAILED", "Operation failed: %s");
 }
 
-WebInspector.addExtensions = function(extensions)
-{
-    WebInspector.extensionServer._addExtensions(extensions);
-}
+/**
+ * @typedef {{code: string, description: string, details: !Array.<*>}}
+ */
+WebInspector.ExtensionStatus.Record;
 
 WebInspector.extensionAPI = {};
 defineCommonExtensionSymbols(WebInspector.extensionAPI);
 
-WebInspector.extensionServer = new WebInspector.ExtensionServer();
-
-window.addExtension = function(page, name)
-{
-    WebInspector.extensionServer._addExtension({
-        startPage: page,
-        name: name,
-    });
-}
+importScript("ExtensionPanel.js");
+importScript("ExtensionView.js");
diff --git a/Source/devtools/front_end/ExtensionServerProxy.js b/Source/devtools/front_end/ExtensionServerProxy.js
new file mode 100644
index 0000000..7c21d63
--- /dev/null
+++ b/Source/devtools/front_end/ExtensionServerProxy.js
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+/**
+ * @interface
+ */
+WebInspector.ExtensionServerAPI = function() { }
+
+WebInspector.ExtensionServerAPI.prototype = {
+    /**
+     * @param {!Array.<!ExtensionDescriptor>} descriptors
+     */
+    addExtensions: function(descriptors) { }
+}
+
+/**
+ * @constructor
+ */
+WebInspector.ExtensionServerProxy = function()
+{
+}
+
+WebInspector.ExtensionServerProxy._ensureExtensionServer = function()
+{
+    if (!WebInspector.extensionServer)
+        WebInspector.extensionServer = WebInspector.moduleManager.instance(WebInspector.ExtensionServerAPI);
+},
+
+WebInspector.ExtensionServerProxy.prototype = {
+    setFrontendReady: function()
+    {
+        this._frontendReady = true;
+        this._pushExtensionsToServer();
+    },
+
+    _addExtensions: function(extensions)
+    {
+        if (extensions.length === 0)
+            return;
+
+        console.assert(!this._pendingExtensions);
+        this._pendingExtensions = extensions;
+        this._pushExtensionsToServer();
+    },
+
+    _pushExtensionsToServer: function()
+    {
+        if (!this._frontendReady || !this._pendingExtensions)
+            return;
+        WebInspector.ExtensionServerProxy._ensureExtensionServer();
+        WebInspector.extensionServer.addExtensions(this._pendingExtensions);
+        delete this._pendingExtensions;
+    }
+}
+
+WebInspector.extensionServerProxy = new WebInspector.ExtensionServerProxy();
+
+WebInspector.addExtensions = function(extensions)
+{
+    WebInspector.extensionServerProxy._addExtensions(extensions);
+}
+
+WebInspector.setInspectedTabId = function(tabId)
+{
+    WebInspector._inspectedTabId = tabId;
+}
diff --git a/Source/devtools/front_end/ExtensionView.js b/Source/devtools/front_end/ExtensionView.js
index 08cad1d..814e660 100644
--- a/Source/devtools/front_end/ExtensionView.js
+++ b/Source/devtools/front_end/ExtensionView.js
@@ -38,7 +38,7 @@
 WebInspector.ExtensionView = function(id, src, className)
 {
     WebInspector.View.call(this);
-    this.element.className = "extension-view";
+    this.element.className = "extension-view fill" // Override flex;
 
     this._id = id;
     this._iframe = document.createElement("iframe");
diff --git a/Source/devtools/front_end/FileManager.js b/Source/devtools/front_end/FileManager.js
index 7dcc17e..08734ec 100644
--- a/Source/devtools/front_end/FileManager.js
+++ b/Source/devtools/front_end/FileManager.js
@@ -124,7 +124,7 @@
      */
     close: function(url)
     {
-        InspectorFrontendHost.close(url);
+        // Currently a no-op.
     },
 
     /**
diff --git a/Source/devtools/front_end/FileSystemProjectDelegate.js b/Source/devtools/front_end/FileSystemProjectDelegate.js
index 0ef0951..01e9f4a 100644
--- a/Source/devtools/front_end/FileSystemProjectDelegate.js
+++ b/Source/devtools/front_end/FileSystemProjectDelegate.js
@@ -55,6 +55,10 @@
 WebInspector.FileSystemProjectDelegate._styleSheetExtensions = ["css", "scss", "sass", "less"].keySet();
 WebInspector.FileSystemProjectDelegate._documentExtensions = ["htm", "html", "asp", "aspx", "phtml", "jsp"].keySet();
 
+/**
+ * @param {string} fileSystemPath
+ * @return {string}
+ */
 WebInspector.FileSystemProjectDelegate.projectId = function(fileSystemPath)
 {
     return "filesystem:" + fileSystemPath;
@@ -164,6 +168,7 @@
         /**
          * @param {boolean} success
          * @param {string=} newName
+         * @this {WebInspector.FileSystemProjectDelegate}
          */
         function innerCallback(success, newName)
         {
@@ -171,14 +176,16 @@
                 callback(false, newName);
                 return;
             }
+            var validNewName = /** @type {string} */ (newName);
+            console.assert(validNewName);
             var slash = filePath.lastIndexOf("/");
             var parentPath = filePath.substring(0, slash);
-            filePath = parentPath + "/" + newName;
+            filePath = parentPath + "/" + validNewName;
             var newURL = this._workspace.urlForPath(this._fileSystem.path(), filePath);
-            var extension = this._extensionForPath(newName);
+            var extension = this._extensionForPath(validNewName);
             var newOriginURL = this._fileSystemURL + filePath
             var newContentType = this._contentTypeForExtension(extension);
-            callback(true, newName, newURL, newOriginURL, newContentType);
+            callback(true, validNewName, newURL, newOriginURL, newContentType);
         }
     },
 
@@ -207,8 +214,8 @@
     },
 
     /**
-     * @param {Array.<string>} queries
-     * @param {Array.<string>} fileQueries
+     * @param {!Array.<string>} queries
+     * @param {!Array.<string>} fileQueries
      * @param {boolean} caseSensitive
      * @param {boolean} isRegex
      * @param {!WebInspector.Progress} progress
@@ -216,13 +223,16 @@
      */
     findFilesMatchingSearchRequest: function(queries, fileQueries, caseSensitive, isRegex, progress, callback)
     {
-        var result = [];
+        var result = null;
         var queriesToRun = queries.slice();
         if (!queriesToRun.length)
             queriesToRun.push("");
         progress.setTotalWork(queriesToRun.length);
         searchNextQuery.call(this);
 
+        /**
+         * @this {WebInspector.FileSystemProjectDelegate}
+         */
         function searchNextQuery()
         {
             if (!queriesToRun.length) {
@@ -235,6 +245,7 @@
 
         /**
          * @param {!Array.<string>} files
+         * @this {WebInspector.FileSystemProjectDelegate}
          */
         function innerCallback(files)
         {
@@ -277,7 +288,7 @@
     /**
      * @param {string} query
      * @param {!WebInspector.Progress} progress
-     * @param {function(Array.<string>)} callback
+     * @param {function(!Array.<string>)} callback
      */
     _searchInPath: function(query, progress, callback)
     {
@@ -287,11 +298,13 @@
 
         /**
          * @param {!Array.<string>} files
+         * @this {WebInspector.FileSystemProjectDelegate}
          */
         function innerCallback(files)
         {
             /**
              * @param {string} fullPath
+             * @this {WebInspector.FileSystemProjectDelegate}
              */
             function trimAndNormalizeFileSystemPath(fullPath)
             {
@@ -446,17 +459,25 @@
 
         /**
          * @param {?string} filePath
+         * @this {WebInspector.FileSystemProjectDelegate}
          */
         function innerCallback(filePath)
         {
+            if (!filePath) {
+                callback(null);
+                return;
+            }
             createFilePath = filePath;
-            if (!filePath || !content) {
+            if (!content) {
                 contentSet.call(this);
                 return;
             }
             this._fileSystem.setFileContent(filePath, content, contentSet.bind(this));
         }
 
+        /**
+         * @this {WebInspector.FileSystemProjectDelegate}
+         */
         function contentSet()
         {
             this._addFile(createFilePath);
@@ -510,14 +531,14 @@
     {
         this.dispatchEventToListeners(WebInspector.ProjectDelegate.Events.Reset, null);
     },
-    
+
     __proto__: WebInspector.Object.prototype
 }
 
 /**
- * @type {?WebInspector.FileSystemProjectDelegate}
+ * @type {!WebInspector.FileSystemProjectDelegate}
  */
-WebInspector.fileSystemProjectDelegate = null;
+WebInspector.fileSystemProjectDelegate;
 
 /**
  * @constructor
@@ -561,6 +582,7 @@
 
     /**
      * @param {!WebInspector.UISourceCode} uiSourceCode
+     * @return {string}
      */
     fileSystemPath: function(uiSourceCode)
     {
@@ -569,7 +591,8 @@
     },
 
     /**
-     * @param {!WebInspector.FileSystemProjectDelegate} fileSystemPath
+     * @param {string} fileSystemPath
+     * @return {!WebInspector.FileSystemProjectDelegate}
      */
     delegate: function(fileSystemPath)
     {
@@ -579,6 +602,6 @@
 }
 
 /**
- * @type {?WebInspector.FileSystemWorkspaceProvider}
+ * @type {!WebInspector.FileSystemWorkspaceProvider}
  */
-WebInspector.fileSystemWorkspaceProvider = null;
+WebInspector.fileSystemWorkspaceProvider;
diff --git a/Source/devtools/front_end/FileSystemView.js b/Source/devtools/front_end/FileSystemView.js
index 0b57300..43a7446 100644
--- a/Source/devtools/front_end/FileSystemView.js
+++ b/Source/devtools/front_end/FileSystemView.js
@@ -30,20 +30,19 @@
 
 /**
  * @constructor
- * @extends {WebInspector.SidebarView}
+ * @extends {WebInspector.SplitView}
  * @param {!WebInspector.FileSystemModel.FileSystem} fileSystem
  */
 WebInspector.FileSystemView = function(fileSystem)
 {
-    WebInspector.SidebarView.call(this, WebInspector.SidebarView.SidebarPosition.Start, "FileSystemViewSidebarWidth");
+    WebInspector.SplitView.call(this, true, false, "FileSystemViewSidebarWidth");
     this.element.classList.add("file-system-view");
     this.element.classList.add("storage-view");
 
     var directoryTreeElement = this.element.createChild("ol", "filesystem-directory-tree");
     this._directoryTree = new TreeOutline(directoryTreeElement);
-    this.sidebarElement.appendChild(directoryTreeElement);
-    this.sidebarElement.classList.add("outline-disclosure");
-    this.sidebarElement.classList.add("sidebar");
+    this.sidebarElement().appendChild(directoryTreeElement);
+    this.sidebarElement().classList.add("outline-disclosure", "sidebar");
 
     var rootItem = new WebInspector.FileSystemView.EntryTreeElement(this, fileSystem.root);
     rootItem.expanded = true;
@@ -86,7 +85,7 @@
         if (this._visibleView)
             this._visibleView.detach();
         this._visibleView = view;
-        view.show(this.mainElement);
+        view.show(this.mainElement());
     },
 
     _refresh: function()
@@ -105,7 +104,7 @@
         this._directoryTree.selectedTreeElement.deleteEntry();
     },
 
-    __proto__: WebInspector.SidebarView.prototype
+    __proto__: WebInspector.SplitView.prototype
 }
 
 /**
@@ -134,6 +133,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function()
     {
diff --git a/Source/devtools/front_end/FileUtils.js b/Source/devtools/front_end/FileUtils.js
index bb05186..fae0b10 100644
--- a/Source/devtools/front_end/FileUtils.js
+++ b/Source/devtools/front_end/FileUtils.js
@@ -312,38 +312,6 @@
 }
 
 /**
- * @param {string} source
- * @param {number=} startIndex
- * @param {number=} lastIndex
- */
-WebInspector.findBalancedCurlyBrackets = function(source, startIndex, lastIndex) {
-    lastIndex = lastIndex || source.length;
-    startIndex = startIndex || 0;
-    var counter = 0;
-    var inString = false;
-
-    for (var index = startIndex; index < lastIndex; ++index) {
-        var character = source[index];
-        if (inString) {
-            if (character === "\\")
-                ++index;
-            else if (character === "\"")
-                inString = false;
-        } else {
-            if (character === "\"")
-                inString = true;
-            else if (character === "{")
-                ++counter;
-            else if (character === "}") {
-                if (--counter === 0)
-                    return index + 1;
-            }
-        }
-    }
-    return -1;
-}
-
-/**
  * @constructor
  * @implements {WebInspector.OutputStream}
  */
@@ -364,6 +332,7 @@
 
         /**
          * @param {boolean} accepted
+         * @this {WebInspector.FileOutputStream}
          */
         function callbackWrapper(accepted)
         {
@@ -394,7 +363,7 @@
     },
 
     /**
-     * @param {?Event} event
+     * @param {!WebInspector.Event} event
      */
     _onAppendDone: function(event)
     {
diff --git a/Source/devtools/front_end/FilterBar.js b/Source/devtools/front_end/FilterBar.js
index f305bcf..a4d10c5 100644
--- a/Source/devtools/front_end/FilterBar.js
+++ b/Source/devtools/front_end/FilterBar.js
@@ -39,7 +39,7 @@
     this._element.className = "hbox";
 
     this._filterButton = new WebInspector.StatusBarButton(WebInspector.UIString("Filter"), "filters-toggle", 3);
-    this._filterButton.element.addEventListener("mousedown", this._handleFilterButtonClick.bind(this), false);
+    this._filterButton.element.addEventListener("click", this._handleFilterButtonClick.bind(this), false);
 
     this._filters = [];
 }
@@ -126,6 +126,21 @@
         this._filtersShown = !this._filtersShown;
         this._updateFilterButton();
         this.dispatchEventToListeners(WebInspector.FilterBar.Events.FiltersToggled, this._filtersShown);
+        if (this._filtersShown) {
+            for (var i = 0; i < this._filters.length; ++i) {
+                if (this._filters[i] instanceof WebInspector.TextFilterUI) {
+                    var textFilterUI = /** @type {!WebInspector.TextFilterUI} */ (this._filters[i]);
+                    textFilterUI.focus();
+                }
+            }
+        }
+    },
+
+    clear: function()
+    {
+        this._element.removeChildren();
+        this._filters = [];
+        this._updateFilterButton();
     },
 
     __proto__: WebInspector.Object.prototype
@@ -247,6 +262,11 @@
         this._valueChanged();
     },
 
+    focus: function()
+    {
+        this._filterInputElement.focus();
+    },
+
     _valueChanged: function() {
         var filterQuery = this.value();
 
@@ -401,7 +421,7 @@
  * @constructor
  * @implements {WebInspector.FilterUI}
  * @extends {WebInspector.Object}
- * @param {!Array.<{value: *, label: string, title: string}>} options
+ * @param {!Array.<!{value: *, label: string, title: string}>} options
  */
 WebInspector.ComboBoxFilterUI = function(options)
 {
@@ -449,6 +469,22 @@
     },
 
     /**
+     * @param {number} index
+     */
+    setSelectedIndex: function(index)
+    {
+        this._filterComboBox.setSelectedIndex(index);
+    },
+
+    /**
+     * @return {number}
+     */
+    selectedIndex: function(index)
+    {
+        return this._filterComboBox.selectedIndex();
+    },
+
+    /**
      * @param {?Event} event
      */
     _filterChanged: function(event)
@@ -512,6 +548,15 @@
         return this._checked;
     },
 
+    /**
+     * @param {boolean} state
+     */
+    setState: function(state)
+    {
+        this._checked = state;
+        this._update();
+    },
+
     _update: function()
     {
         this._checkElement.enableStyleClass("checkbox-filter-checkbox-checked", this._checked);
diff --git a/Source/devtools/front_end/FilteredItemSelectionDialog.js b/Source/devtools/front_end/FilteredItemSelectionDialog.js
index af24791..af6288d 100644
--- a/Source/devtools/front_end/FilteredItemSelectionDialog.js
+++ b/Source/devtools/front_end/FilteredItemSelectionDialog.js
@@ -82,11 +82,14 @@
         var height = Math.max(relativeToElement.offsetHeight * 2 / 3, minHeight);
 
         this.element.style.width = width + "px";
-
+        var container = WebInspector.inspectorView.devtoolsElement();
+        var box = relativeToElement.boxInWindow(window).relativeToElement(container);
         const shadowPadding = 20; // shadow + padding
-        element.positionAt(
-            relativeToElement.totalOffsetLeft() + Math.max((relativeToElement.offsetWidth - width - 2 * shadowPadding) / 2, shadowPadding),
-            relativeToElement.totalOffsetTop() + Math.max((relativeToElement.offsetHeight - height - 2 * shadowPadding) / 2, shadowPadding));
+        var positionX = box.x + Math.max((box.width - width - 2 * shadowPadding) / 2, shadowPadding);
+        positionX = Math.max(shadowPadding, Math.min(container.offsetWidth - width - 2 * shadowPadding, positionX));
+        var positionY = box.y + Math.max((box.height - height - 2 * shadowPadding) / 2, shadowPadding);
+        positionY = Math.max(shadowPadding, Math.min(container.offsetHeight - height - 2 * shadowPadding, positionY));
+        element.positionAt(positionX, positionY, container);
         this._dialogHeight = height;
 
         this._updateShowMatchingItems();
@@ -118,7 +121,8 @@
     {
         if (!this._delegate.itemCount())
             return;
-        this._delegate.selectItem(this._filteredItems[this._selectedIndexInFiltered], this._promptElement.value.trim());
+        var selectedIndex = this._selectedIndexInFiltered < this._filteredItems.length ? this._filteredItems[this._selectedIndexInFiltered] : null;
+        this._delegate.selectItem(selectedIndex, this._promptElement.value.trim());
     },
 
     _itemsLoaded: function()
@@ -196,6 +200,10 @@
             return b - a;
         }
 
+        /**
+         * @param {number} fromIndex
+         * @this {WebInspector.FilteredItemSelectionDialog}
+         */
         function scoreItems(fromIndex)
         {
             var maxWorkItems = 1000;
@@ -452,7 +460,7 @@
     },
 
     /**
-     * @param {number} itemIndex
+     * @param {?number} itemIndex
      * @param {string} promptValue
      */
     selectItem: function(itemIndex, promptValue)
@@ -482,48 +490,42 @@
  * @constructor
  * @extends {WebInspector.SelectionDialogContentProvider}
  * @param {!WebInspector.View} view
- * @param {!WebInspector.ContentProvider} contentProvider
+ * @param {!WebInspector.UISourceCode} uiSourceCode
  * @param {function(number, number)} selectItemCallback
  */
-WebInspector.JavaScriptOutlineDialog = function(view, contentProvider, selectItemCallback)
+WebInspector.JavaScriptOutlineDialog = function(view, uiSourceCode, selectItemCallback)
 {
     WebInspector.SelectionDialogContentProvider.call(this);
 
     this._functionItems = [];
     this._view = view;
     this._selectItemCallback = selectItemCallback;
-    contentProvider.requestContent(this._contentAvailable.bind(this));
+    this._outlineWorker = new Worker("ScriptFormatterWorker.js");
+    this._outlineWorker.onmessage = this._didBuildOutlineChunk.bind(this);
+    this._outlineWorker.postMessage({ method: "javaScriptOutline", params: { content: uiSourceCode.workingCopy() } });
 }
 
 /**
  * @param {!WebInspector.View} view
- * @param {!WebInspector.ContentProvider} contentProvider
+ * @param {!WebInspector.UISourceCode} uiSourceCode
  * @param {function(number, number)} selectItemCallback
  */
-WebInspector.JavaScriptOutlineDialog.show = function(view, contentProvider, selectItemCallback)
+WebInspector.JavaScriptOutlineDialog.show = function(view, uiSourceCode, selectItemCallback)
 {
     if (WebInspector.Dialog.currentInstance())
         return null;
-    var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(new WebInspector.JavaScriptOutlineDialog(view, contentProvider, selectItemCallback));
+    var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(new WebInspector.JavaScriptOutlineDialog(view, uiSourceCode, selectItemCallback));
     WebInspector.Dialog.show(view.element, filteredItemSelectionDialog);
 }
 
 WebInspector.JavaScriptOutlineDialog.prototype = {
     /**
-     * @param {?string} content
+     * @param {!MessageEvent} event
      */
-    _contentAvailable: function(content)
-    {
-        this._outlineWorker = new Worker("ScriptFormatterWorker.js");
-        this._outlineWorker.onmessage = this._didBuildOutlineChunk.bind(this);
-        const method = "outline";
-        this._outlineWorker.postMessage({ method: method, params: { content: content } });
-    },
-
     _didBuildOutlineChunk: function(event)
     {
-        var data = event.data;
-        var chunk = data["chunk"];
+        var data = /** @type {!WebInspector.JavaScriptOutlineDialog.MessageEventData} */ (event.data);
+        var chunk = data.chunk;
         for (var i = 0; i < chunk.length; ++i)
             this._functionItems.push(chunk[i]);
 
@@ -576,11 +578,13 @@
     },
 
     /**
-     * @param {number} itemIndex
+     * @param {?number} itemIndex
      * @param {string} promptValue
      */
     selectItem: function(itemIndex, promptValue)
     {
+        if (itemIndex === null)
+            return;
         var lineNumber = this._functionItems[itemIndex].line;
         if (!isNaN(lineNumber) && lineNumber >= 0)
             this._selectItemCallback(lineNumber, this._functionItems[itemIndex].column);
@@ -620,14 +624,16 @@
     /**
      * @param {?WebInspector.UISourceCode} uiSourceCode
      * @param {number=} lineNumber
+     * @param {number=} columnNumber
      */
-    uiSourceCodeSelected: function(uiSourceCode, lineNumber)
+    uiSourceCodeSelected: function(uiSourceCode, lineNumber, columnNumber)
     {
         // Overridden by subclasses
     },
 
     /**
      * @param {!WebInspector.Project} project
+     * @return {boolean}
      */
     filterProject: function(project)
     {
@@ -678,12 +684,13 @@
      * @param {string} query
      * @param {!Element} titleElement
      * @param {!Element} subtitleElement
+     * @return {!Array.<!Element>}
      */
     renderItem: function(itemIndex, query, titleElement, subtitleElement)
     {
         query = this.rewriteQuery(query);
         var uiSourceCode = this._uiSourceCodes[itemIndex];
-        titleElement.textContent = uiSourceCode.displayName() + (this._queryLineNumber ? this._queryLineNumber : "");
+        titleElement.textContent = uiSourceCode.displayName() + (this._queryLineNumberAndColumnNumber || "");
         subtitleElement.textContent = uiSourceCode.fullDisplayName().trimEnd(100);
 
         var indexes = [];
@@ -702,20 +709,23 @@
     },
 
     /**
-     * @param {number} itemIndex
+     * @param {?number} itemIndex
      * @param {string} promptValue
      */
     selectItem: function(itemIndex, promptValue)
     {
-        if (/^:\d+$/.test(promptValue.trimRight())) {
-            var lineNumber = parseInt(promptValue.trimRight().substring(1), 10) - 1;
-            if (!isNaN(lineNumber) && lineNumber >= 0)
-                this.uiSourceCodeSelected(null, lineNumber);
+        var parsedExpression = promptValue.trim().match(/^([^:]*)(:\d+)?(:\d+)?$/);
+        if (!parsedExpression)
             return;
-        }
-        var lineNumberMatch = promptValue.match(/[^:]+\:([\d]*)$/);
-        var lineNumber = lineNumberMatch ? Math.max(parseInt(lineNumberMatch[1], 10) - 1, 0) : undefined;
-        this.uiSourceCodeSelected(this._uiSourceCodes[itemIndex], lineNumber);
+
+        var lineNumber;
+        var columnNumber;
+        if (parsedExpression[2])
+            lineNumber = parseInt(parsedExpression[2].substr(1), 10) - 1;
+        if (parsedExpression[3])
+            columnNumber = parseInt(parsedExpression[3].substr(1), 10) - 1;
+        var uiSourceCode = itemIndex !== null ? this._uiSourceCodes[itemIndex] : null;
+        this.uiSourceCodeSelected(uiSourceCode, lineNumber, columnNumber);
     },
 
     /**
@@ -727,8 +737,8 @@
         if (!query)
             return query;
         query = query.trim();
-        var lineNumberMatch = query.match(/([^:]+)(\:[\d]*)$/);
-        this._queryLineNumber = lineNumberMatch ? lineNumberMatch[2] : "";
+        var lineNumberMatch = query.match(/^([^:]+)((?::[^:]*){0,2})$/);
+        this._queryLineNumberAndColumnNumber = lineNumberMatch ? lineNumberMatch[2] : "";
         return lineNumberMatch ? lineNumberMatch[1] : query;
     },
 
@@ -769,14 +779,15 @@
     /**
      * @param {?WebInspector.UISourceCode} uiSourceCode
      * @param {number=} lineNumber
+     * @param {number=} columnNumber
      */
-    uiSourceCodeSelected: function(uiSourceCode, lineNumber)
+    uiSourceCodeSelected: function(uiSourceCode, lineNumber, columnNumber)
     {
         if (!uiSourceCode)
             uiSourceCode = this._panel.currentUISourceCode();
         if (!uiSourceCode)
             return;
-        this._panel.showUISourceCode(uiSourceCode, lineNumber);
+        this._panel.showUISourceCode(uiSourceCode, lineNumber, columnNumber);
     },
 
     /**
@@ -790,6 +801,7 @@
 
     /**
      * @param {!WebInspector.Project} project
+     * @return {boolean}
      */
     filterProject: function(project)
     {
@@ -834,14 +846,16 @@
     /**
      * @param {!WebInspector.UISourceCode} uiSourceCode
      * @param {number=} lineNumber
+     * @param {number=} columnNumber
      */
-    uiSourceCodeSelected: function(uiSourceCode, lineNumber)
+    uiSourceCodeSelected: function(uiSourceCode, lineNumber, columnNumber)
     {
         this._callback(uiSourceCode);
     },
 
     /**
      * @param {!WebInspector.Project} project
+     * @return {boolean}
      */
     filterProject: function(project)
     {
@@ -866,3 +880,8 @@
     filteredItemSelectionDialog.renderAsTwoRows();
     WebInspector.Dialog.show(relativeToElement, filteredItemSelectionDialog);
 }
+
+/**
+ * @typedef {{index: number, total: number, chunk: !Array.<!{selectorText: string, lineNumber: number, columnNumber: number}>}}
+ */
+WebInspector.JavaScriptOutlineDialog.MessageEventData;
diff --git a/Source/devtools/front_end/FlameChart.js b/Source/devtools/front_end/FlameChart.js
index 5fff735..33a8b6c 100644
--- a/Source/devtools/front_end/FlameChart.js
+++ b/Source/devtools/front_end/FlameChart.js
@@ -37,21 +37,19 @@
 {
     WebInspector.View.call(this);
     this.registerRequiredCSS("flameChart.css");
-    this.element.className = "fill";
     this.element.id = "cpu-flame-chart";
 
     this._overviewPane = new WebInspector.FlameChart.OverviewPane(dataProvider);
     this._overviewPane.show(this.element);
 
-    this._mainPane = new WebInspector.FlameChart.MainPane(dataProvider, this._overviewPane);
+    this._mainPane = new WebInspector.FlameChart.MainPane(dataProvider, this._overviewPane, false);
     this._mainPane.show(this.element);
     this._mainPane.addEventListener(WebInspector.FlameChart.Events.EntrySelected, this._onEntrySelected, this);
     this._overviewPane._overviewGrid.addEventListener(WebInspector.OverviewGrid.Events.WindowChanged, this._onWindowChanged, this);
-
-    if (!WebInspector.FlameChart._colorGenerator)
-        WebInspector.FlameChart._colorGenerator = new WebInspector.FlameChart.ColorGenerator();
 }
 
+WebInspector.FlameChart.DividersBarHeight = 20;
+
 WebInspector.FlameChart.prototype = {
     /**
      * @param {!WebInspector.Event} event
@@ -94,15 +92,34 @@
 {
 }
 
+/** @typedef {!{
+        maxStackDepth: number,
+        totalTime: number,
+        entryLevels: !Array.<number>,
+        entryTotalTimes: !Array.<number>,
+        entrySelfTimes: !Array.<number>,
+        entryOffsets: !Array.<number>,
+        colorEntryIndexes: !Array.<number>,
+        entryTitles: !Array.<string>,
+        entryDeoptFlags: !Array.<number>
+    }}
+ */
+WebInspector.FlameChart.TimelineData;
+
 WebInspector.FlameChartDataProvider.prototype = {
     /**
-     * @param {!WebInspector.FlameChart.ColorGenerator} colorGenerator
-     * @return {!Object}
+     * @return {?WebInspector.FlameChart.TimelineData}
      */
-    timelineData: function(colorGenerator) { },
+    timelineData: function() { },
+
+    /**
+     * @return {!WebInspector.FlameChart.ColorGenerator}
+     */
+    colorGenerator: function() { },
 
     /**
      * @param {number} entryIndex
+     * @return {?Array.<!{title: string, text: string}>}
      */
     prepareHighlightedEntryInfo: function(entryIndex) { },
 
@@ -114,7 +131,7 @@
 
     /**
      * @param {number} entryIndex
-     * @return {!Object}
+     * @return {?Object}
      */
     entryData: function(entryIndex) { }
 }
@@ -283,17 +300,27 @@
     this._colorPairs = {};
     this._colorIndexes = [];
     this._currentColorIndex = 0;
-    this._colorPairForID("(idle)::0", 50);
-    this._colorPairForID("(program)::0", 50);
-    this._colorPairForID("(garbage collector)::0", 50);
 }
 
 WebInspector.FlameChart.ColorGenerator.prototype = {
     /**
+     * @param {string} id
+     * @param {string|!CanvasGradient} highlighted
+     * @param {string|!CanvasGradient} normal
+     */
+    setColorPairForID: function(id, highlighted, normal)
+    {
+        var colorPair = {index: this._currentColorIndex++, highlighted: highlighted, normal: normal};
+        this._colorPairs[id] = colorPair;
+        this._colorIndexes[colorPair.index] = colorPair;
+    },
+
+    /**
      * @param {!string} id
      * @param {number=} sat
+     * @return {!Object}
      */
-    _colorPairForID: function(id, sat)
+    colorPairForID: function(id, sat)
     {
         if (typeof sat !== "number")
             sat = 100;
@@ -321,7 +348,7 @@
     _createPair: function(index, sat)
     {
         var hue = (index * 7 + 12 * (index % 2)) % 360;
-        return {index: index, highlighted: "hsla(" + hue + ", " + sat + "%, 33%, 0.7)", normal: "hsla(" + hue + ", " + sat + "%, 66%, 0.7)"}
+        return {index: index, highlighted: "hsla(" + hue + ", " + sat + "%, 33%, 0.7)", normal: "hsla(" + hue + ", " + sat + "%, 66%, 0.7)"};
     }
 }
 
@@ -355,6 +382,7 @@
 WebInspector.FlameChart.OverviewPane = function(dataProvider)
 {
     WebInspector.View.call(this);
+    this.element.classList.add("flame-chart-overview-pane");
     this._overviewContainer = this.element.createChild("div", "overview-container");
     this._overviewGrid = new WebInspector.OverviewGrid("flame-chart");
     this._overviewGrid.element.classList.add("fill");
@@ -392,12 +420,15 @@
         var timelineData = this._timelineData();
         if (!timelineData)
             return;
-        this._overviewGrid.setWindow(timeLeft / timelineData._totalTime, timeRight / timelineData._totalTime);
+        this._overviewGrid.setWindow(timeLeft / timelineData.totalTime, timeRight / timelineData.totalTime);
     },
 
+    /**
+     * @return {?WebInspector.FlameChart.TimelineData}
+     */
     _timelineData: function()
     {
-        return this._dataProvider.timelineData(WebInspector.FlameChart._colorGenerator);
+        return this._dataProvider.timelineData();
     },
 
     onResize: function()
@@ -418,14 +449,14 @@
         var timelineData = this._timelineData();
         if (!timelineData)
             return;
+        this._resetCanvas(this._overviewContainer.clientWidth, this._overviewContainer.clientHeight - WebInspector.FlameChart.DividersBarHeight);
         this._overviewCalculator._updateBoundaries(this);
         this._overviewGrid.updateDividers(this._overviewCalculator);
-        this._resetCanvas(this._overviewContainer.clientWidth, this._overviewContainer.clientHeight - 20);
         WebInspector.FlameChart.OverviewPane.drawOverviewCanvas(
             timelineData,
             this._overviewCanvas.getContext("2d"),
             this._overviewContainer.clientWidth,
-            this._overviewContainer.clientHeight - 20
+            this._overviewContainer.clientHeight - WebInspector.FlameChart.DividersBarHeight
         );
     },
 
@@ -444,7 +475,7 @@
 }
 
 /**
- * @param {!Object} timelineData
+ * @param {!WebInspector.FlameChart.TimelineData} timelineData
  * @param {!number} width
  */
 WebInspector.FlameChart.OverviewPane.calculateDrawData = function(timelineData, width)
@@ -467,7 +498,7 @@
 }
 
 /**
- * @param {!Object} timelineData
+ * @param {!WebInspector.FlameChart.TimelineData} timelineData
  * @param {!Object} context
  * @param {!number} width
  * @param {!number} height
@@ -506,24 +537,27 @@
  * @constructor
  * @extends {WebInspector.View}
  * @param {!WebInspector.FlameChartDataProvider} dataProvider
- * @param {!WebInspector.FlameChart.OverviewPaneInterface} overviewPane
+ * @param {?WebInspector.FlameChart.OverviewPaneInterface} overviewPane
+ * @param {boolean} isTopDown
  */
-WebInspector.FlameChart.MainPane = function(dataProvider, overviewPane)
+WebInspector.FlameChart.MainPane = function(dataProvider, overviewPane, isTopDown)
 {
     WebInspector.View.call(this);
+    this.element.classList.add("flame-chart-main-pane");
     this._overviewPane = overviewPane;
-    this._chartContainer = this.element.createChild("div", "chart-container");
+    this._isTopDown = isTopDown;
+
     this._timelineGrid = new WebInspector.TimelineGrid();
-    this._chartContainer.appendChild(this._timelineGrid.element);
+    this.element.appendChild(this._timelineGrid.element);
     this._calculator = new WebInspector.FlameChart.Calculator();
 
-    this._canvas = this._chartContainer.createChild("canvas");
+    this._canvas = this.element.createChild("canvas");
     this._canvas.addEventListener("mousemove", this._onMouseMove.bind(this));
     this._canvas.addEventListener("mousewheel", this._onMouseWheel.bind(this), false);
     this._canvas.addEventListener("click", this._onClick.bind(this), false);
-    WebInspector.installDragHandle(this._canvas, this._startCanvasDragging.bind(this), this._canvasDragging.bind(this), this._endCanvasDragging.bind(this), "col-resize");
+    WebInspector.installDragHandle(this._canvas, this._startCanvasDragging.bind(this), this._canvasDragging.bind(this), this._endCanvasDragging.bind(this), "move", null);
 
-    this._entryInfo = this._chartContainer.createChild("div", "entry-info");
+    this._entryInfo = this.element.createChild("div", "profile-entry-info");
 
     this._dataProvider = dataProvider;
 
@@ -537,9 +571,12 @@
 }
 
 WebInspector.FlameChart.MainPane.prototype = {
+    /**
+     * @return {?WebInspector.FlameChart.TimelineData}
+     */
     _timelineData: function()
     {
-        return this._dataProvider.timelineData(WebInspector.FlameChart._colorGenerator);
+        return this._dataProvider.timelineData();
     },
 
     /**
@@ -567,6 +604,7 @@
         this._dragStartPoint = event.pageX;
         this._dragStartWindowLeft = this._windowLeft;
         this._dragStartWindowRight = this._windowRight;
+        this._canvas.style.cursor = "";
 
         return true;
     },
@@ -588,7 +626,8 @@
         if (windowRight === this._windowRight)
             return;
         windowShift = windowRight - this._dragStartWindowRight;
-        this._overviewPane.setWindow(this._dragStartWindowLeft + windowShift, this._dragStartWindowRight + windowShift);
+        if (this._overviewPane)
+            this._overviewPane.setWindow(this._dragStartWindowLeft + windowShift, this._dragStartWindowRight + windowShift);
         this._wasDragged = true;
     },
 
@@ -629,7 +668,8 @@
         if (this._highlightedEntryIndex === -1)
             return;
         var data = this._dataProvider.entryData(this._highlightedEntryIndex);
-        this.dispatchEventToListeners(WebInspector.FlameChart.Events.EntrySelected, data);
+        if (data)
+            this.dispatchEventToListeners(WebInspector.FlameChart.Events.EntrySelected, data);
     },
 
     /**
@@ -637,6 +677,8 @@
      */
     _onMouseWheel: function(e)
     {
+        if (!this._overviewPane)
+            return;
         if (e.wheelDeltaY) {
             const zoomFactor = 1.1;
             const mouseWheelZoomSpeed = 1 / 120;
@@ -660,7 +702,7 @@
         if (!timelineData)
             return -1;
         var cursorTime = (x + this._pixelWindowLeft - this._paddingLeft) * this._pixelToTime;
-        var cursorLevel = Math.floor((this._canvas.height / window.devicePixelRatio - y) / this._barHeight);
+        var cursorLevel = this._isTopDown ? Math.floor(y / this._barHeight - 1) : Math.floor((this._canvas.height / window.devicePixelRatio - y) / this._barHeight);
 
         var entryOffsets = timelineData.entryOffsets;
         var entryTotalTimes = timelineData.entryTotalTimes;
@@ -706,7 +748,7 @@
         var entryTitles = timelineData.entryTitles;
         var entryDeoptFlags = timelineData.entryDeoptFlags;
 
-        var colorGenerator = WebInspector.FlameChart._colorGenerator;
+        var colorGenerator = this._dataProvider.colorGenerator();
         var titleIndexes = new Uint32Array(timelineData.entryTotalTimes);
         var lastTitleIndex = 0;
         var dotsWidth = context.measureText("\u2026").width;
@@ -718,12 +760,12 @@
         for (var i = 0; i < timelineData.maxStackDepth; ++i)
             marksField.push(new Uint16Array(width));
 
-        var barHeight = this._barHeight;
+        var barHeight = this._isTopDown ? -this._barHeight : this._barHeight;
         var barX = 0;
         var barWidth = 0;
         var barRight = 0;
         var barLevel = 0;
-        var bHeight = height - barHeight;
+        var bHeight = this._isTopDown ? WebInspector.FlameChart.DividersBarHeight : height - this._barHeight;
         context.strokeStyle = "black";
         var colorPair;
         var entryIndex = 0;
@@ -757,7 +799,7 @@
                     context.beginPath();
                     context.fillStyle = colorPair.highlighted;
                 }
-                context.rect(barX, bHeight - barLevel * barHeight, barWidth, barHeight);
+                context.rect(barX, bHeight - barLevel * barHeight, barWidth, this._barHeight);
                 if (entryIndex === this._highlightedEntryIndex) {
                     context.fill();
                     context.beginPath();
@@ -769,7 +811,7 @@
             context.fill();
         }
 
-        var font = (barHeight - 4) + "px " + window.getComputedStyle(this.element, null).getPropertyValue("font-family");
+        var font = (this._barHeight - 4) + "px " + window.getComputedStyle(this.element, null).getPropertyValue("font-family");
         var boldFont = "bold " + font;
         var isBoldFontSelected = false;
         context.font = font;
@@ -777,7 +819,7 @@
         context.fillStyle = "#333";
         this._dotsWidth = context.measureText("\u2026").width;
 
-        var textBaseHeight = bHeight + barHeight - 4;
+        var textBaseHeight = bHeight + this._barHeight - 4;
         for (var i = 0; i < lastTitleIndex; ++i) {
             entryIndex = titleIndexes[i];
             if (isBoldFontSelected) {
@@ -869,7 +911,7 @@
         this._timeWindowLeft = this._windowLeft * this._totalTime;
         this._timeWindowRight = this._windowRight * this._totalTime;
 
-        this._pixelWindowWidth = this._chartContainer.clientWidth - this._paddingLeft;
+        this._pixelWindowWidth = this.element.clientWidth - this._paddingLeft;
         this._totalPixels = Math.floor(this._pixelWindowWidth / this._windowWidth);
         this._pixelWindowLeft = Math.floor(this._totalPixels * this._windowLeft);
         this._pixelWindowRight = Math.floor(this._totalPixels * this._windowRight);
@@ -894,10 +936,16 @@
     update: function()
     {
         this._updateTimerId = 0;
-        if (!this._timelineData())
+        if (!this._timelineData()) {
+            this._timelineGrid.hideDividers();
             return;
+        }
         this._updateBoundaries();
-        this.draw(this._chartContainer.clientWidth, this._chartContainer.clientHeight);
+        if (this._timelineData().entryLevels.length)
+            this._timelineGrid.showDividers();
+        else
+            this._timelineGrid.hideDividers();
+        this.draw(this.element.clientWidth, this.element.clientHeight);
         this._calculator._updateBoundaries(this);
         this._timelineGrid.element.style.width = this.element.clientWidth;
         this._timelineGrid.updateDividers(this._calculator);
diff --git a/Source/devtools/front_end/FontView.js b/Source/devtools/front_end/FontView.js
index 4c36314..ec4e5d1 100644
--- a/Source/devtools/front_end/FontView.js
+++ b/Source/devtools/front_end/FontView.js
@@ -44,6 +44,9 @@
 WebInspector.FontView._measureFontSize = 50;
 
 WebInspector.FontView.prototype = {
+    /**
+     * @return {boolean}
+     */
     hasContent: function()
     {
         return true;
diff --git a/Source/devtools/front_end/HandlerRegistry.js b/Source/devtools/front_end/HandlerRegistry.js
index 46a8430..3ecb48a 100644
--- a/Source/devtools/front_end/HandlerRegistry.js
+++ b/Source/devtools/front_end/HandlerRegistry.js
@@ -31,7 +31,6 @@
 /**
  * @constructor
  * @extends {WebInspector.Object}
- * @implements {WebInspector.ContextMenu.Provider}
  */
 WebInspector.HandlerRegistry = function(setting)
 {
@@ -39,7 +38,8 @@
     this._handlers = {};
     this._setting = setting;
     this._activeHandler = this._setting.get();
-    WebInspector.ContextMenu.registerProvider(this);
+
+    WebInspector.moduleManager.registerModule("handler-registry");
 }
 
 WebInspector.HandlerRegistry.prototype = {
@@ -61,6 +61,7 @@
 
     /**
      * @param {!Object} data
+     * @return {boolean}
      */
     dispatch: function(data)
     {
@@ -70,6 +71,7 @@
     /**
      * @param {string} name
      * @param {!Object} data
+     * @return {boolean}
      */
     dispatchToHandler: function(name, data)
     {
@@ -94,16 +96,6 @@
      * @param {!WebInspector.ContextMenu} contextMenu
      * @param {!Object} target
      */
-    appendApplicableItems: function(event, contextMenu, target)
-    {
-        this._appendContentProviderItems(contextMenu, target);
-        this._appendHrefItems(contextMenu, target);
-    },
-
-    /** 
-     * @param {!WebInspector.ContextMenu} contextMenu
-     * @param {!Object} target
-     */
     _appendContentProviderItems: function(contextMenu, target)
     {
         if (!(target instanceof WebInspector.UISourceCode || target instanceof WebInspector.Resource || target instanceof WebInspector.NetworkRequest))
@@ -137,12 +129,13 @@
         function doSave(forceSaveAs, content)
         {
             var url = contentProvider.contentURL();
-            WebInspector.fileManager.save(url, content, forceSaveAs);
+            WebInspector.fileManager.save(url, /** @type {string} */ (content), forceSaveAs);
             WebInspector.fileManager.close(url);
         }
 
         /**
          * @param {boolean} forceSaveAs
+         * @this {WebInspector.HandlerRegistry}
          */
         function save(forceSaveAs)
         {
@@ -228,8 +221,47 @@
     }
 }
 
+/**
+ * @constructor
+ * @implements {WebInspector.ContextMenu.Provider}
+ */
+WebInspector.HandlerRegistry.ContextMenuProvider = function()
+{
+}
+
+WebInspector.HandlerRegistry.ContextMenuProvider.prototype = {
+    /**
+     * @param {!WebInspector.ContextMenu} contextMenu
+     * @param {!Object} target
+     */
+    appendApplicableItems: function(event, contextMenu, target)
+    {
+        WebInspector.openAnchorLocationRegistry._appendContentProviderItems(contextMenu, target);
+        WebInspector.openAnchorLocationRegistry._appendHrefItems(contextMenu, target);
+    }
+}
 
 /**
- * @type {?WebInspector.HandlerRegistry}
+ * @constructor
+ * @implements {WebInspector.Linkifier.LinkHandler}
  */
-WebInspector.openAnchorLocationRegistry = null;
+WebInspector.HandlerRegistry.LinkHandler = function()
+{
+}
+
+WebInspector.HandlerRegistry.LinkHandler.prototype = {
+    /**
+     * @param {string} url
+     * @param {number=} lineNumber
+     * @return {boolean}
+     */
+    handleLink: function(url, lineNumber)
+    {
+        return WebInspector.openAnchorLocationRegistry.dispatch({ url: url, lineNumber: lineNumber});
+    }
+}
+
+/**
+ * @type {!WebInspector.HandlerRegistry}
+ */
+WebInspector.openAnchorLocationRegistry;
diff --git a/Source/devtools/front_end/HeapSnapshot.js b/Source/devtools/front_end/HeapSnapshot.js
index dc18ce1..287c968 100644
--- a/Source/devtools/front_end/HeapSnapshot.js
+++ b/Source/devtools/front_end/HeapSnapshot.js
@@ -30,6 +30,9 @@
 
 /**
  * @constructor
+ * @param {!Uint32Array} array
+ * @param {number} start
+ * @param {number} end
  */
 WebInspector.HeapSnapshotArraySlice = function(array, start, end)
 {
@@ -39,11 +42,20 @@
 }
 
 WebInspector.HeapSnapshotArraySlice.prototype = {
+    /**
+     * @param {number} index
+     * @return {number}
+     */
     item: function(index)
     {
         return this._array[this._start + index];
     },
 
+    /**
+     * @param {number} start
+     * @param {number=} end
+     * @return {!Uint32Array}
+     */
     slice: function(start, end)
     {
         if (typeof end === "undefined")
@@ -63,57 +75,94 @@
     this.edgeIndex = edgeIndex || 0;
 }
 
+/**
+ * @constructor
+ * @param {string} name
+ * @param {!WebInspector.HeapSnapshotNode.Serialized} node
+ * @param {number} nodeIndex
+ * @param {string} type
+ * @param {number} distance
+ */
+WebInspector.HeapSnapshotEdge.Serialized = function(name, node, nodeIndex, type, distance) {
+    this.name = name;
+    this.node = node;
+    this.nodeIndex = nodeIndex;
+    this.type = type;
+    this.distance = distance;
+};
+
 WebInspector.HeapSnapshotEdge.prototype = {
+    /**
+     * @return {!WebInspector.HeapSnapshotEdge}
+     */
     clone: function()
     {
         return new WebInspector.HeapSnapshotEdge(this._snapshot, this._edges, this.edgeIndex);
     },
 
+    /**
+     * @return {boolean}
+     */
     hasStringName: function()
     {
         throw new Error("Not implemented");
     },
 
+    /**
+     * @return {string}
+     */
     name: function()
     {
         throw new Error("Not implemented");
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotNode}
+     */
     node: function()
     {
         return this._snapshot.createNode(this.nodeIndex());
     },
 
+    /**
+     * @return {number}
+     */
     nodeIndex: function()
     {
         return this._edges.item(this.edgeIndex + this._snapshot._edgeToNodeOffset);
     },
 
+    /**
+     * @return {!Array.<number>}
+     */
     rawEdges: function()
     {
         return this._edges;
     },
 
+    /**
+     * @return {string}
+     */
     toString: function()
     {
         return "HeapSnapshotEdge: " + this.name();
     },
 
+    /**
+     * @return {string}
+     */
     type: function()
     {
         return this._snapshot._edgeTypes[this._type()];
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotEdge.Serialized}
+     */
     serialize: function()
     {
         var node = this.node();
-        return {
-            name: this.name(),
-            node: node.serialize(),
-            nodeIndex: this.nodeIndex(),
-            type: this.type(),
-            distance: node.distance()
-        };
+        return new WebInspector.HeapSnapshotEdge.Serialized(this.name(), node.serialize(), this.nodeIndex(), this.type(), node.distance());
     },
 
     _type: function()
@@ -136,21 +185,33 @@
         this.edge.edgeIndex = 0;
     },
 
+    /**
+     * @return {boolean}
+     */
     hasNext: function()
     {
         return this.edge.edgeIndex < this.edge._edges.length;
     },
 
+    /**
+     * @return {number}
+     */
     index: function()
     {
         return this.edge.edgeIndex;
     },
 
+    /**
+     * @param {number} newIndex
+     */
     setIndex: function(newIndex)
     {
         this.edge.edgeIndex = newIndex;
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotEdge}
+     */
     item: function()
     {
         return this.edge;
@@ -177,37 +238,74 @@
     this.setRetainerIndex(retainerIndex);
 }
 
+/**
+ * @constructor
+ * @param {string} name
+ * @param {!WebInspector.HeapSnapshotNode.Serialized} node
+ * @param {number} nodeIndex
+ * @param {string} type
+ * @param {number} distance
+ */
+WebInspector.HeapSnapshotRetainerEdge.Serialized = function(name, node, nodeIndex, type, distance) {
+    this.name = name;
+    this.node = node;
+    this.nodeIndex = nodeIndex;
+    this.type = type;
+    this.distance = distance;
+}
+
 WebInspector.HeapSnapshotRetainerEdge.prototype = {
+    /**
+     * @return {!WebInspector.HeapSnapshotRetainerEdge}
+     */
     clone: function()
     {
         return new WebInspector.HeapSnapshotRetainerEdge(this._snapshot, this._retainedNodeIndex, this.retainerIndex());
     },
 
+    /**
+     * @return {boolean}
+     */
     hasStringName: function()
     {
         return this._edge().hasStringName();
     },
 
+    /**
+     * @return {string}
+     */
     name: function()
     {
         return this._edge().name();
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotNode}
+     */
     node: function()
     {
         return this._node();
     },
 
+    /**
+     * @return {number}
+     */
     nodeIndex: function()
     {
         return this._nodeIndex;
     },
 
+    /**
+     * @return {number}
+     */
     retainerIndex: function()
     {
         return this._retainerIndex;
     },
 
+    /**
+     * @param {number} newIndex
+     */
     setRetainerIndex: function(newIndex)
     {
         if (newIndex !== this._retainerIndex) {
@@ -216,6 +314,9 @@
         }
     },
 
+    /**
+     * @param {number} edgeIndex
+     */
     set edgeIndex(edgeIndex)
     {
         var retainerIndex = this._firstRetainer + edgeIndex;
@@ -241,23 +342,26 @@
         return this._edgeInstance;
     },
 
+    /**
+     * @return {string}
+     */
     toString: function()
     {
         return this._edge().toString();
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotRetainerEdge.Serialized}
+     */
     serialize: function()
     {
         var node = this.node();
-        return {
-            name: this.name(),
-            node: node.serialize(),
-            nodeIndex: this.nodeIndex(),
-            type: this.type(),
-            distance: node.distance()
-        };
+        return new WebInspector.HeapSnapshotRetainerEdge.Serialized(this.name(), node.serialize(), this.nodeIndex(), this.type(), node.distance());
     },
 
+    /**
+     * @return {string}
+     */
     type: function()
     {
         return this._edge().type();
@@ -278,21 +382,33 @@
         this.retainer.setRetainerIndex(0);
     },
 
+    /**
+     * @return {boolean}
+     */
     hasNext: function()
     {
         return this.retainer.retainerIndex() < this.retainer._retainersCount;
     },
 
+    /**
+     * @return {number}
+     */
     index: function()
     {
         return this.retainer.retainerIndex();
     },
 
+    /**
+     * @param {number} newIndex
+     */
     setIndex: function(newIndex)
     {
         this.retainer.setRetainerIndex(newIndex);
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotRetainerEdge}
+     */
     item: function()
     {
         return this.retainer;
@@ -315,33 +431,71 @@
     this.nodeIndex = nodeIndex;
 }
 
+/**
+ * @constructor
+ * @param {string} id
+ * @param {string} name
+ * @param {number} distance
+ * @param {number|undefined} nodeIndex
+ * @param {number} retainedSize
+ * @param {number} selfSize
+ * @param {string} type
+ */
+WebInspector.HeapSnapshotNode.Serialized = function(id, name, distance, nodeIndex, retainedSize, selfSize, type) {
+    this.id = id;
+    this.name = name;
+    this.distance = distance;
+    this.nodeIndex = nodeIndex;
+    this.retainedSize = retainedSize;
+    this.selfSize = selfSize;
+    this.type = type;
+}
+
 WebInspector.HeapSnapshotNode.prototype = {
+    /**
+     * @return {number}
+     */
     distance: function()
     {
         return this._snapshot._nodeDistances[this.nodeIndex / this._snapshot._nodeFieldCount];
     },
 
+    /**
+     * @return {string}
+     */
     className: function()
     {
         throw new Error("Not implemented");
     },
 
+    /**
+     * @return {number}
+     */
     classIndex: function()
     {
         throw new Error("Not implemented");
     },
 
+    /**
+     * @return {number}
+     */
     dominatorIndex: function()
     {
         var nodeFieldCount = this._snapshot._nodeFieldCount;
         return this._snapshot._dominatorsTree[this.nodeIndex / this._snapshot._nodeFieldCount] * nodeFieldCount;
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotEdgeIterator}
+     */
     edges: function()
     {
         return new WebInspector.HeapSnapshotEdgeIterator(this._snapshot.createEdge(this.rawEdges(), 0));
     },
 
+    /**
+     * @return {number}
+     */
     edgesCount: function()
     {
         return (this._edgeIndexesEnd() - this._edgeIndexesStart()) / this._snapshot._edgeFieldsCount;
@@ -352,54 +506,69 @@
         throw new Error("Not implemented");
     },
 
+    /**
+     * @return {boolean}
+     */
     isRoot: function()
     {
         return this.nodeIndex === this._snapshot._rootNodeIndex;
     },
 
+    /**
+     * @return {string}
+     */
     name: function()
     {
         return this._snapshot._strings[this._name()];
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotArraySlice}
+     */
     rawEdges: function()
     {
         return new WebInspector.HeapSnapshotArraySlice(this._snapshot._containmentEdges, this._edgeIndexesStart(), this._edgeIndexesEnd());
     },
 
+    /**
+     * @return {number}
+     */
     retainedSize: function()
     {
-        var snapshot = this._snapshot;
-        return snapshot._nodes[this.nodeIndex + snapshot._nodeRetainedSizeOffset];
+        return this._snapshot._retainedSizes[this._ordinal()];
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotRetainerEdgeIterator}
+     */
     retainers: function()
     {
         return new WebInspector.HeapSnapshotRetainerEdgeIterator(this._snapshot.createRetainingEdge(this.nodeIndex, 0));
     },
 
+    /**
+     * @return {number}
+     */
     selfSize: function()
     {
         var snapshot = this._snapshot;
         return snapshot._nodes[this.nodeIndex + snapshot._nodeSelfSizeOffset];
     },
 
+    /**
+     * @return {string}
+     */
     type: function()
     {
         return this._snapshot._nodeTypes[this._type()];
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotNode.Serialized}
+     */
     serialize: function()
     {
-        return {
-            id: this.id(),
-            name: this.name(),
-            distance: this.distance(),
-            nodeIndex: this.nodeIndex,
-            retainedSize: this.retainedSize(),
-            selfSize: this.selfSize(),
-            type: this.type(),
-        };
+        return new WebInspector.HeapSnapshotNode.Serialized(this.id(), this.name(), this.distance(), this.nodeIndex, this.retainedSize(), this.selfSize(), this.type());
     },
 
     _name: function()
@@ -450,21 +619,33 @@
         this.node.nodeIndex = this.node._firstNodeIndex;
     },
 
+    /**
+     * @return {boolean}
+     */
     hasNext: function()
     {
         return this.node.nodeIndex < this._nodesLength;
     },
 
+    /**
+     * @return {number}
+     */
     index: function()
     {
         return this.node.nodeIndex;
     },
 
+    /**
+     * @param {number} newIndex
+     */
     setIndex: function(newIndex)
     {
         this.node.nodeIndex = newIndex;
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotNode}
+     */
     item: function()
     {
         return this.node;
@@ -486,10 +667,6 @@
     this._dispatcher = dispatcher;
 }
 
-WebInspector.HeapSnapshotProgress.Event = {
-    Update: "ProgressUpdate"
-};
-
 WebInspector.HeapSnapshotProgress.prototype = {
     /**
      * @param {string} status
@@ -517,7 +694,7 @@
     {
         // May be undefined in tests.
         if (this._dispatcher)
-            this._dispatcher.sendEvent(WebInspector.HeapSnapshotProgress.Event.Update, text);
+            this._dispatcher.sendEvent(WebInspector.HeapSnapshotProgressEvent.Update, text);
     }
 }
 
@@ -528,7 +705,6 @@
  */
 WebInspector.HeapSnapshot = function(profile, progress)
 {
-    this.uid = profile.snapshot.uid;
     this._nodes = profile.nodes;
     this._containmentEdges = profile.edges;
     /** @type {!HeapSnapshotMetainfo} */
@@ -546,15 +722,13 @@
 
     this._init();
 
-    if (WebInspector.HeapSnapshot.enableAllocationProfiler) {
+    if (profile.snapshot.trace_function_count) {
         this._progress.updateStatus("Buiding allocation statistics\u2026");
         this._allocationProfile = new WebInspector.AllocationProfile(profile);
         this._progress.updateStatus("Done");
     }
 }
 
-WebInspector.HeapSnapshot.enableAllocationProfiler = false;
-
 /**
  * @constructor
  */
@@ -577,7 +751,6 @@
 {
     // New format.
     this.title = "";
-    this.uid = 0;
     this.meta = new HeapSnapshotMetainfo();
     this.node_count = 0;
     this.edge_count = 0;
@@ -744,6 +917,9 @@
         return new WebInspector.HeapSnapshotNodeIterator(this.rootNode());
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotNode}
+     */
     rootNode: function()
     {
         return this.createNode(this._rootNodeIndex);
@@ -777,6 +953,7 @@
      * @param {boolean} sortedIndexes
      * @param {string} key
      * @param {string=} filterString
+     * @return {!Object.<string, !WebInspector.HeapSnapshotCommon.Aggregate>}
      */
     aggregates: function(sortedIndexes, key, filterString)
     {
@@ -811,16 +988,26 @@
         return aggregatesByClassName;
     },
 
+    /**
+     * @return {!Array.<!WebInspector.HeapSnapshotCommon.SerializedTraceTop>}
+     */
     allocationTracesTops: function()
     {
         return this._allocationProfile.serializeTraceTops();
     },
 
+    /**
+     * @param {string} nodeId
+     * @return {!WebInspector.HeapSnapshotCommon.AllocationNodeCallers}
+     */
     allocationNodeCallers: function(nodeId)
     {
         return this._allocationProfile.serializeCallers(nodeId);
     },
 
+    /**
+     * @return {!Object.<string, !WebInspector.HeapSnapshotCommon.AggregateForDiff>}
+     */
     aggregatesForDiff: function()
     {
         if (this._aggregatesForDiff)
@@ -1282,19 +1469,16 @@
         var nodeSelfSizeOffset = this._nodeSelfSizeOffset;
         var nodeFieldCount = this._nodeFieldCount;
         var dominatorsTree = this._dominatorsTree;
-        // Reuse now unused edge_count field to store retained size.
-        var nodeRetainedSizeOffset = this._nodeRetainedSizeOffset = this._nodeEdgeCountOffset;
-        delete this._nodeEdgeCountOffset;
+        var retainedSizes = this._retainedSizes = new Float64Array(nodeCount);
 
-        for (var nodeIndex = 0, l = nodes.length; nodeIndex < l; nodeIndex += nodeFieldCount)
-            nodes[nodeIndex + nodeRetainedSizeOffset] = nodes[nodeIndex + nodeSelfSizeOffset];
+        for (var nodeOrdinal = 0; nodeOrdinal < nodeCount; ++nodeOrdinal)
+            retainedSizes[nodeOrdinal] = nodes[nodeOrdinal * nodeFieldCount + nodeSelfSizeOffset];
 
         // Propagate retained sizes for each node excluding root.
         for (var postOrderIndex = 0; postOrderIndex < nodeCount - 1; ++postOrderIndex) {
             var nodeOrdinal = postOrderIndex2NodeOrdinal[postOrderIndex];
-            var nodeIndex = nodeOrdinal * nodeFieldCount;
-            var dominatorIndex = dominatorsTree[nodeOrdinal] * nodeFieldCount;
-            nodes[dominatorIndex + nodeRetainedSizeOffset] += nodes[nodeIndex + nodeRetainedSizeOffset];
+            var dominatorOrdinal = dominatorsTree[nodeOrdinal];
+            retainedSizes[dominatorOrdinal] += retainedSizes[nodeOrdinal];
         }
     },
 
@@ -1359,6 +1543,11 @@
         throw new Error("Not implemented");
     },
 
+    /**
+     * @param {string} baseSnapshotId
+     * @param {!Object.<string, !WebInspector.HeapSnapshotCommon.AggregateForDiff>} baseSnapshotAggregates
+     * @return {!Object.<string, !WebInspector.HeapSnapshotCommon.Diff>}
+     */
     calculateSnapshotDiff: function(baseSnapshotId, baseSnapshotAggregates)
     {
         var snapshotDiff = this._snapshotDiffs[baseSnapshotId];
@@ -1373,7 +1562,7 @@
             if (diff)
                 snapshotDiff[className] = diff;
         }
-        var emptyBaseAggregate = { ids: [], indexes: [], selfSizes: [] };
+        var emptyBaseAggregate = new WebInspector.HeapSnapshotCommon.AggregateForDiff();
         for (var className in aggregates) {
             if (className in baseSnapshotAggregates)
                 continue;
@@ -1384,6 +1573,11 @@
         return snapshotDiff;
     },
 
+    /**
+     * @param {!WebInspector.HeapSnapshotCommon.AggregateForDiff} baseAggregate
+     * @param {!WebInspector.HeapSnapshotCommon.Aggregate} aggregate
+     * @return {?WebInspector.HeapSnapshotCommon.Diff}
+     */
     _calculateDiffForClass: function(baseAggregate, aggregate)
     {
         var baseIds = baseAggregate.ids;
@@ -1394,12 +1588,7 @@
 
         var i = 0, l = baseIds.length;
         var j = 0, m = indexes.length;
-        var diff = { addedCount: 0,
-                     removedCount: 0,
-                     addedSize: 0,
-                     removedSize: 0,
-                     deletedIndexes: [],
-                     addedIndexes: [] };
+        var diff = new WebInspector.HeapSnapshotCommon.Diff();
 
         var nodeB = this.createNode(indexes[j]);
         while (i < l && j < m) {
@@ -1447,6 +1636,10 @@
         return null;
     },
 
+    /**
+     * @param {string} snapshotObjectId
+     * @return {?string}
+     */
     nodeClassName: function(snapshotObjectId)
     {
         var node = this._nodeForSnapshotObjectId(snapshotObjectId);
@@ -1455,6 +1648,24 @@
         return null;
     },
 
+    /**
+     * @param {string} name
+     * @return {!Array.<number>}
+     */
+    idsOfObjectsWithName: function(name)
+    {
+        var ids = [];
+        for (var it = this._allNodes(); it.hasNext(); it.next()) {
+            if (it.item().name() === name)
+                ids.push(it.item().id());
+        }
+        return ids;
+    },
+
+    /**
+     * @param {string} snapshotObjectId
+     * @return {?Array.<string>}
+     */
     dominatorIdsForNode: function(snapshotObjectId)
     {
         var node = this._nodeForSnapshotObjectId(snapshotObjectId);
@@ -1476,6 +1687,11 @@
         return parsedFilter.bind(this);
     },
 
+    /**
+     * @param {number} nodeIndex
+     * @param {boolean} showHiddenData
+     * @return {!WebInspector.HeapSnapshotEdgesProvider}
+     */
     createEdgesProvider: function(nodeIndex, showHiddenData)
     {
         var node = this.createNode(nodeIndex);
@@ -1483,22 +1699,39 @@
         return new WebInspector.HeapSnapshotEdgesProvider(this, filter, node.edges());
     },
 
+    /**
+     * @param {number} nodeIndex
+     * @return {!WebInspector.HeapSnapshotEdgesProvider}
+     */
     createEdgesProviderForTest: function(nodeIndex, filter)
     {
         var node = this.createNode(nodeIndex);
         return new WebInspector.HeapSnapshotEdgesProvider(this, filter, node.edges());
     },
 
+    /**
+     * @param {boolean} showHiddenData
+     * @return {?function(!WebInspector.HeapSnapshotEdge):boolean}
+     */
     retainingEdgesFilter: function(showHiddenData)
     {
         return null;
     },
 
+    /**
+     * @param {boolean} showHiddenData
+     * @return {?function(!WebInspector.HeapSnapshotEdge):boolean}
+     */
     containmentEdgesFilter: function(showHiddenData)
     {
         return null;
     },
 
+    /**
+     * @param {number} nodeIndex
+     * @param {boolean} showHiddenData
+     * @return {!WebInspector.HeapSnapshotEdgesProvider}
+     */
     createRetainingEdgesProvider: function(nodeIndex, showHiddenData)
     {
         var node = this.createNode(nodeIndex);
@@ -1506,6 +1739,11 @@
         return new WebInspector.HeapSnapshotEdgesProvider(this, filter, node.retainers());
     },
 
+    /**
+     * @param {string} baseSnapshotId
+     * @param {string} className
+     * @return {!WebInspector.HeapSnapshotNodesProvider}
+     */
     createAddedNodesProvider: function(baseSnapshotId, className)
     {
         var snapshotDiff = this._snapshotDiffs[baseSnapshotId];
@@ -1513,30 +1751,69 @@
         return new WebInspector.HeapSnapshotNodesProvider(this, null, diffForClass.addedIndexes);
     },
 
+    /**
+     * @param {!Array.<number>} nodeIndexes
+     * @return {!WebInspector.HeapSnapshotNodesProvider}
+     */
     createDeletedNodesProvider: function(nodeIndexes)
     {
         return new WebInspector.HeapSnapshotNodesProvider(this, null, nodeIndexes);
     },
 
+    /**
+     * @return {?function(!WebInspector.HeapSnapshotNode):boolean}
+     */
     classNodesFilter: function()
     {
         return null;
     },
 
+    /**
+     * @param {string} className
+     * @param {string} aggregatesKey
+     * @return {!WebInspector.HeapSnapshotNodesProvider}
+     */
     createNodesProviderForClass: function(className, aggregatesKey)
     {
         return new WebInspector.HeapSnapshotNodesProvider(this, this.classNodesFilter(), this.aggregates(false, aggregatesKey)[className].idxs);
     },
 
+    /**
+     * @param {number} nodeIndex
+     * @return {!WebInspector.HeapSnapshotNodesProvider}
+     */
     createNodesProviderForDominator: function(nodeIndex)
     {
         var node = this.createNode(nodeIndex);
         return new WebInspector.HeapSnapshotNodesProvider(this, null, this._dominatedNodesOfNode(node));
     },
 
+    /**
+     * @return {number}
+     */
+    _maxJsNodeId: function()
+    {
+        var nodeFieldCount = this._nodeFieldCount;
+        var nodes = this._nodes;
+        var nodesLength = nodes.length;
+        var id = 0;
+        for (var nodeIndex = this._nodeIdOffset; nodeIndex < nodesLength; nodeIndex += nodeFieldCount) {
+            var nextId = nodes[nodeIndex];
+            // JS objects have odd ids, skip native objects.
+            if (nextId % 2 === 0)
+                continue;
+            if (id < nextId)
+                id = nextId;
+        }
+        return id;
+    },
+
+    /**
+     * @return {!WebInspector.HeapSnapshotCommon.StaticData}
+     */
     updateStaticData: function()
     {
-        return {nodeCount: this.nodeCount, rootNodeIndex: this._rootNodeIndex, totalSize: this.totalSize, uid: this.uid};
+        return new WebInspector.HeapSnapshotCommon.StaticData(this.nodeCount, this._rootNodeIndex, this.totalSize, this._maxJsNodeId());
     }
 };
 
@@ -1593,11 +1870,17 @@
         this._position = 0;
     },
 
+    /**
+     * @return {boolean}
+     */
     hasNext: function()
     {
         return this._position < this._iterationOrder.length;
     },
 
+    /**
+     * @return {boolean}
+     */
     isEmpty: function()
     {
         if (this._iterationOrder)
@@ -1624,12 +1907,18 @@
         return true;
     },
 
+    /**
+     * @return {*}
+     */
     item: function()
     {
         this._iterator.setIndex(this._iterationOrder[this._position]);
         return this._iterator.item();
     },
 
+    /**
+     * @type {number}
+     */
     get length()
     {
         this._createIterationOrder();
@@ -1644,6 +1933,7 @@
     /**
      * @param {number} begin
      * @param {number} end
+     * @return {!WebInspector.HeapSnapshotCommon.ItemsRange}
      */
     serializeItemsRange: function(begin, end)
     {
@@ -1666,12 +1956,7 @@
         var result = new Array(count);
         for (var i = 0 ; i < count && this.hasNext(); ++i, this.next())
             result[i] = this.item().serialize();
-        result.length = i;
-        result.totalLength = this._iterationOrder.length;
-
-        result.startPosition = startPosition;
-        result.endPosition = this._position;
-        return result;
+        return new WebInspector.HeapSnapshotCommon.ItemsRange(startPosition, this._position, this._iterationOrder.length, result);
     },
 
     sortAll: function()
@@ -1694,11 +1979,6 @@
     }
 }
 
-WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.createComparator = function(fieldNames)
-{
-    return {fieldName1: fieldNames[0], ascending1: fieldNames[1], fieldName2: fieldNames[2], ascending2: fieldNames[3]};
-}
-
 /**
  * @constructor
  * @extends {WebInspector.HeapSnapshotFilteredOrderedIterator}
@@ -1710,6 +1990,13 @@
 }
 
 WebInspector.HeapSnapshotEdgesProvider.prototype = {
+    /**
+     * @param {!WebInspector.HeapSnapshotCommon.ComparatorConfig} comparator
+     * @param {number} leftBound
+     * @param {number} rightBound
+     * @param {number} windowLeft
+     * @param {number} windowRight
+     */
     sort: function(comparator, leftBound, rightBound, windowLeft, windowRight)
     {
         var fieldName1 = comparator.fieldName1;
@@ -1800,6 +2087,10 @@
 }
 
 WebInspector.HeapSnapshotNodesProvider.prototype = {
+    /**
+     * @param {string} snapshotObjectId
+     * @return {number}
+     */
     nodePosition: function(snapshotObjectId)
     {
         this._createIterationOrder();
diff --git a/Source/devtools/front_end/HeapSnapshotCommon.js b/Source/devtools/front_end/HeapSnapshotCommon.js
new file mode 100644
index 0000000..62abea2
--- /dev/null
+++ b/Source/devtools/front_end/HeapSnapshotCommon.js
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+WebInspector.HeapSnapshotProgressEvent = {
+    Update: "ProgressUpdate"
+};
+
+WebInspector.HeapSnapshotCommon = {
+}
+
+/**
+ * @constructor
+ */
+WebInspector.HeapSnapshotCommon.AllocationNodeCallers = function()
+{
+    /** @type {!Array.<!WebInspector.HeapSnapshotCommon.SerializedTraceTop>} */
+    this.nodesWithSingleCaller;
+    /** @type {!Array.<!WebInspector.HeapSnapshotCommon.SerializedTraceTop>} */
+    this.branchingCallers;
+}
+
+/**
+ * @constructor
+ */
+WebInspector.HeapSnapshotCommon.Aggregate = function()
+{
+    /** @type {number} */
+    this.count;
+    /** @type {number} */
+    this.distance;
+    /** @type {number} */
+    this.self;
+    /** @type {number} */
+    this.maxRet;
+    /** @type {number} */
+    this.type;
+    /** @type {string} */
+    this.name;
+    /** @type {!Array.<number>} */
+    this.idxs;
+}
+
+/**
+ * @constructor
+ */
+WebInspector.HeapSnapshotCommon.AggregateForDiff = function() {
+    /** @type {!Array.<number>} */
+    this.indexes = [];
+    /** @type {!Array.<string>} */
+    this.ids = [];
+    /** @type {!Array.<number>} */
+    this.selfSizes = [];
+}
+
+/**
+ * @constructor
+ */
+WebInspector.HeapSnapshotCommon.Diff = function()
+{
+    /** @type {number} */
+    this.addedCount = 0;
+    /** @type {number} */
+    this.removedCount = 0;
+    /** @type {number} */
+    this.addedSize = 0;
+    /** @type {number} */
+    this.removedSize = 0;
+    /** @type {!Array.<number>} */
+    this.deletedIndexes = [];
+    /** @type {!Array.<number>} */
+    this.addedIndexes = [];
+}
+
+/**
+ * @constructor
+ */
+WebInspector.HeapSnapshotCommon.DiffForClass = function()
+{
+    /** @type {number} */
+    this.addedCount;
+    /** @type {number} */
+    this.removedCount;
+    /** @type {number} */
+    this.addedSize;
+    /** @type {number} */
+    this.removedSize;
+    /** @type {!Array.<number>} */
+    this.deletedIndexes;
+    /** @type {!Array.<number>} */
+    this.addedIndexes;
+
+    /** @type {number} */
+    this.countDelta;
+    /** @type {number} */
+    this.sizeDelta;
+}
+
+/**
+ * @constructor
+ */
+WebInspector.HeapSnapshotCommon.ComparatorConfig = function()
+{
+    /** @type {string} */
+    this.fieldName1;
+    /** @type {boolean} */
+    this.ascending1;
+    /** @type {string} */
+    this.fieldName2;
+    /** @type {boolean} */
+    this.ascending2;
+}
+
+/**
+ * @constructor
+ */
+WebInspector.HeapSnapshotCommon.WorkerCommand = function()
+{
+    /** @type {number} */
+    this.callId;
+    /** @type {string} */
+    this.disposition;
+    /** @type {number} */
+    this.objectId;
+    /** @type {number} */
+    this.newObjectId;
+    /** @type {string} */
+    this.methodName;
+    /** @type {!Array.<*>} */
+    this.methodArguments;
+    /** @type {string} */
+    this.source;
+}
+
+/**
+ * @constructor
+ * @param {number} startPosition
+ * @param {number} endPosition
+ * @param {number} totalLength
+ * @param {!Array.<*>} items
+ */
+WebInspector.HeapSnapshotCommon.ItemsRange = function(startPosition, endPosition, totalLength, items)
+{
+    /** @type {number} */
+    this.startPosition = startPosition;
+    /** @type {number} */
+    this.endPosition = endPosition;
+    /** @type {number} */
+    this.totalLength = totalLength;
+    /** @type {!Array.<*>} */
+    this.items = items;
+}
+
+/**
+ * @constructor
+ */
+WebInspector.HeapSnapshotCommon.SerializedTraceTop = function()
+{
+    /** @type {string} */
+    this.id;
+    /** @type {string} */
+    this.name;
+    /** @type {string} */
+    this.scriptName;
+    /** @type {number} */
+    this.line;
+    /** @type {number} */
+    this.column;
+    /** @type {number} */
+    this.count;
+    /** @type {number} */
+    this.size;
+    /** @type {boolean} */
+    this.hasChildren;
+}
+
+/**
+ * @param {number} nodeCount
+ * @param {number} rootNodeIndex
+ * @param {number} totalSize
+ * @param {number} maxJSObjectId
+ * @constructor
+ */
+WebInspector.HeapSnapshotCommon.StaticData = function(nodeCount, rootNodeIndex, totalSize, maxJSObjectId)
+{
+    /** @type {number} */
+    this.nodeCount = nodeCount;
+    /** @type {number} */
+    this.rootNodeIndex = rootNodeIndex;
+    /** @type {number} */
+    this.totalSize = totalSize;
+    /** @type {number} */
+    this.maxJSObjectId = maxJSObjectId;
+}
diff --git a/Source/devtools/front_end/HeapSnapshotDataGrids.js b/Source/devtools/front_end/HeapSnapshotDataGrids.js
index 39048ee..9229ac8 100644
--- a/Source/devtools/front_end/HeapSnapshotDataGrids.js
+++ b/Source/devtools/front_end/HeapSnapshotDataGrids.js
@@ -48,6 +48,7 @@
      * @type {boolean}
      */
     this._populatedAndSorted = false;
+    this._nameFilter = "";
     this.addEventListener("sorting complete", this._sortingComplete, this);
     this.addEventListener(WebInspector.DataGrid.Events.SortingChanged, this.sortingChanged, this);
 }
@@ -65,7 +66,7 @@
         return 100;
     },
 
-    dispose: function()
+    _disposeAllNodes: function()
     {
         var children = this.topLevelNodes();
         for (var i = 0, l = children.length; i < l; ++i)
@@ -97,11 +98,10 @@
     },
 
     /**
-     * @param {!WebInspector.ProfilesPanel} profilesPanel
      * @param {!WebInspector.ContextMenu} contextMenu
      * @param {?Event} event
      */
-    populateContextMenu: function(profilesPanel, contextMenu, event)
+    populateContextMenu: function(contextMenu, event)
     {
         var td = event.target.enclosingNodeOrSelfWithNodeName("td");
         if (!td)
@@ -109,11 +109,11 @@
         var node = td.heapSnapshotNode;
         function revealInDominatorsView()
         {
-                profilesPanel.showObject(node.snapshotNodeId, "Dominators");
+            WebInspector.panels.profiles.showObject(node.snapshotNodeId, "Dominators");
         }
         function revealInSummaryView()
         {
-                profilesPanel.showObject(node.snapshotNodeId, "Summary");
+            WebInspector.panels.profiles.showObject(node.snapshotNodeId, "Summary");
         }
         if(node && node.showRetainingEdges) {
             contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Reveal in Summary view" : "Reveal in Summary View"), revealInSummaryView.bind(this));
@@ -132,6 +132,9 @@
         delete this._lastSortAscending;
     },
 
+    /**
+     * @return {!Array.<!WebInspector.HeapSnapshotGridNode>}
+     */
     topLevelNodes: function()
     {
         return this.rootNode().children;
@@ -153,15 +156,7 @@
         var prevNode = this._highlightedNode;
         this._clearCurrentHighlight();
         this._highlightedNode = node;
-        this._highlightedNode.element.classList.add("highlighted-row");
-        // If highlighted node hasn't changed reinsert it to make the highlight animation restart.
-        if (node === prevNode) {
-            var element = node.element;
-            var parent = element.parentElement;
-            var nextSibling = element.nextSibling;
-            parent.removeChild(element);
-            parent.insertBefore(element, nextSibling);
-        }
+        WebInspector.runCSSAnimationOnce(this._highlightedNode.element, "highlighted-row");
     },
 
     nodeWasDetached: function(node)
@@ -180,12 +175,17 @@
 
     changeNameFilter: function(filter)
     {
-        filter = filter.toLowerCase();
+        this._nameFilter = filter.toLowerCase();
+        this._applyNameFilter();
+    },
+
+    _applyNameFilter: function()
+    {
         var children = this.topLevelNodes();
         for (var i = 0, l = children.length; i < l; ++i) {
             var node = children[i];
             if (node.depth === 0)
-                node.revealed = node._name.toLowerCase().indexOf(filter) !== -1;
+                node.revealed = node._name.toLowerCase().indexOf(this._nameFilter) !== -1;
         }
         this.updateVisibleNodes();
     },
@@ -282,6 +282,9 @@
 }
 
 WebInspector.HeapSnapshotViewportDataGrid.prototype = {
+    /**
+     * @return {!Array.<!WebInspector.HeapSnapshotGridNode>}
+     */
     topLevelNodes: function()
     {
         return this._topLevelNodes;
@@ -377,6 +380,7 @@
 
     removeTopLevelNodes: function()
     {
+        this._disposeAllNodes();
         this.rootNode().removeChildren();
         this._topLevelNodes = [];
     },
@@ -482,7 +486,7 @@
     setDataSource: function(snapshot, nodeIndex)
     {
         this.snapshot = snapshot;
-        var node = new WebInspector.HeapSnapshotNode(snapshot, nodeIndex || snapshot.rootNodeIndex);
+        var node = { nodeIndex: nodeIndex || snapshot.rootNodeIndex };
         var fakeEdge = { node: node };
         this.setRootNode(new WebInspector.HeapSnapshotObjectNode(this, false, fakeEdge, null));
         this.rootNode().sort();
@@ -490,7 +494,9 @@
 
     sortingChanged: function()
     {
-        this.rootNode().sort();
+        var rootNode = this.rootNode();
+        if (rootNode.hasChildren)
+            rootNode.sort();
     },
 
     __proto__: WebInspector.HeapSnapshotSortableDataGrid.prototype
@@ -628,6 +634,10 @@
             return;
         }
 
+        /**
+         * @param {?string} className
+         * @this {WebInspector.HeapSnapshotConstructorsDataGrid}
+         */
         function didGetClassName(className)
         {
             if (!className) {
@@ -680,12 +690,12 @@
             this._requestInProgress = this._nextRequest;
             this._nextRequest = null;
         }
-        this.dispose();
         this.removeTopLevelNodes();
         this.resetSortingCache();
         for (var constructor in aggregates)
             this.appendTopLevelNode(new WebInspector.HeapSnapshotConstructorNode(this, constructor, aggregates[constructor], key));
         this.sortingChanged();
+        this._applyNameFilter();
         this._lastKey = key;
     },
 
@@ -734,10 +744,10 @@
         {id: "object", title: WebInspector.UIString("Constructor"), disclosure: true, sortable: true},
         {id: "addedCount", title: WebInspector.UIString("# New"), width: "72px", sortable: true},
         {id: "removedCount", title: WebInspector.UIString("# Deleted"), width: "72px", sortable: true},
-        {id: "countDelta", title: "# Delta", width: "64px", sortable: true},
+        {id: "countDelta", title: WebInspector.UIString("# Delta"), width: "64px", sortable: true},
         {id: "addedSize", title: WebInspector.UIString("Alloc. Size"), width: "72px", sortable: true, sort: WebInspector.DataGrid.Order.Descending},
         {id: "removedSize", title: WebInspector.UIString("Freed Size"), width: "72px", sortable: true},
-        {id: "sizeDelta", title: "Size Delta", width: "72px", sortable: true}
+        {id: "sizeDelta", title: WebInspector.UIString("Size Delta"), width: "72px", sortable: true}
     ];
     WebInspector.HeapSnapshotViewportDataGrid.call(this, columns);
 }
@@ -776,7 +786,6 @@
     setBaseDataSource: function(baseSnapshot)
     {
         this.baseSnapshot = baseSnapshot;
-        this.dispose();
         this.removeTopLevelNodes();
         this.resetSortingCache();
         if (this.baseSnapshot === this.snapshot) {
@@ -788,9 +797,16 @@
 
     _populateChildren: function()
     {
+        /**
+         * @this {WebInspector.HeapSnapshotDiffDataGrid}
+         */
         function aggregatesForDiffReceived(aggregatesForDiff)
         {
             this.snapshot.calculateSnapshotDiff(this.baseSnapshot.uid, aggregatesForDiff, didCalculateSnapshotDiff.bind(this));
+
+            /**
+             * @this {WebInspector.HeapSnapshotDiffDataGrid}
+             */
             function didCalculateSnapshotDiff(diffByClassName)
             {
                 for (var className in diffByClassName) {
@@ -867,6 +883,9 @@
             return;
         }
 
+        /**
+         * @this {WebInspector.HeapSnapshotDominatorsDataGrid}
+         */
         function didGetDominators(dominatorIds)
         {
             if (!dominatorIds) {
@@ -878,6 +897,9 @@
             expandNextDominator.call(this, dominatorIds, dominatorNode);
         }
 
+        /**
+         * @this {WebInspector.HeapSnapshotDominatorsDataGrid}
+         */
         function expandNextDominator(dominatorIds, dominatorNode)
         {
             if (!dominatorNode) {
@@ -922,6 +944,11 @@
     {
         this._snapshot = snapshot;
         this._snapshot.allocationTracesTops(didReceiveAllocationTracesTops.bind(this));
+
+        /**
+         * @param {!Array.<!WebInspector.DataGrid>} tops
+         * @this {WebInspector.AllocationDataGrid}
+         */
         function didReceiveAllocationTracesTops(tops)
         {
             var root = this.rootNode();
@@ -953,6 +980,11 @@
             return;
         this._populated = true;
         this._dataGrid._snapshot.allocationNodeCallers(this.data.id, didReceiveCallers.bind(this));
+
+        /**
+         * @param {!WebInspector.HeapSnapshotCommon.AllocationNodeCallers} callers
+         * @this {WebInspector.AllocationGridNode}
+         */
         function didReceiveCallers(callers)
         {
             var callersChain = callers.nodesWithSingleCaller;
diff --git a/Source/devtools/front_end/HeapSnapshotGridNodes.js b/Source/devtools/front_end/HeapSnapshotGridNodes.js
index aa1acea..a20d45d 100644
--- a/Source/devtools/front_end/HeapSnapshotGridNodes.js
+++ b/Source/devtools/front_end/HeapSnapshotGridNodes.js
@@ -52,6 +52,15 @@
     PopulateComplete: "PopulateComplete"
 }
 
+/**
+ * @param {!Array.<string>} fieldNames
+ * @return {!WebInspector.HeapSnapshotCommon.ComparatorConfig}
+ */
+WebInspector.HeapSnapshotGridNode.createComparator = function(fieldNames)
+{
+    return /** @type {!WebInspector.HeapSnapshotCommon.ComparatorConfig} */ ({fieldName1: fieldNames[0], ascending1: fieldNames[1], fieldName2: fieldNames[2], ascending2: fieldNames[3]});
+}
+
 WebInspector.HeapSnapshotGridNode.prototype = {
     /**
      * @return {!WebInspector.HeapSnapshotProviderProxy}
@@ -71,6 +80,10 @@
         return this._providerObject;
     },
 
+    /**
+     * @param {string} columnIdentifier
+     * @return {!Element}
+     */
     createCell: function(columnIdentifier)
     {
         var cell = WebInspector.DataGridNode.prototype.createCell.call(this, columnIdentifier);
@@ -87,8 +100,8 @@
 
     dispose: function()
     {
-        if (this._provider())
-            this._provider().dispose();
+        if (this._providerObject)
+            this._providerObject.dispose();
         for (var node = this.children[0]; node; node = node.traverseNextNode(true, this, true))
             if (node.dispose)
                 node.dispose();
@@ -115,6 +128,7 @@
 
     /**
      * @param {number} nodePosition
+     * @return {?WebInspector.DataGridNode}
      */
     childForPosition: function(nodePosition)
     {
@@ -158,6 +172,9 @@
             return;
         this._populated = true;
 
+        /**
+         * @this {WebInspector.HeapSnapshotGridNode}
+         */
         function sorted()
         {
             this._populateChildren();
@@ -174,14 +191,19 @@
     },
 
     /**
-     * @param {?number} fromPosition
-     * @param {?number} toPosition
+     * @param {?number=} fromPosition
+     * @param {?number=} toPosition
+     * @param {function()=} afterPopulate
      */
     _populateChildren: function(fromPosition, toPosition, afterPopulate)
     {
         fromPosition = fromPosition || 0;
         toPosition = toPosition || fromPosition + this._dataGrid.defaultPopulateCount();
         var firstNotSerializedPosition = fromPosition;
+
+        /**
+         * @this {WebInspector.HeapSnapshotGridNode}
+         */
         function serializeNextChunk()
         {
             if (firstNotSerializedPosition >= toPosition)
@@ -190,6 +212,10 @@
             this._provider().serializeItemsRange(firstNotSerializedPosition, end, childrenRetrieved.bind(this));
             firstNotSerializedPosition = end;
         }
+
+        /**
+         * @this {WebInspector.HeapSnapshotGridNode}
+         */
         function insertRetrievedChild(item, insertionIndex)
         {
             if (this._savedChildren) {
@@ -201,27 +227,37 @@
             }
             this.insertChild(this._createChildNode(item), insertionIndex);
         }
+
+        /**
+         * @this {WebInspector.HeapSnapshotGridNode}
+         */
         function insertShowMoreButton(from, to, insertionIndex)
         {
             var button = new WebInspector.ShowMoreDataGridNode(this._populateChildren.bind(this), from, to, this._dataGrid.defaultPopulateCount());
             this.insertChild(button, insertionIndex);
         }
-        function childrenRetrieved(items)
+
+        /**
+         * @param {!WebInspector.HeapSnapshotCommon.ItemsRange} itemsRange
+         * @this {WebInspector.HeapSnapshotGridNode}
+         */
+        function childrenRetrieved(itemsRange)
         {
             var itemIndex = 0;
-            var itemPosition = items.startPosition;
+            var itemPosition = itemsRange.startPosition;
+            var items = itemsRange.items;
             var insertionIndex = 0;
 
             if (!this._retrievedChildrenRanges.length) {
-                if (items.startPosition > 0) {
+                if (itemsRange.startPosition > 0) {
                     this._retrievedChildrenRanges.push({from: 0, to: 0});
-                    insertShowMoreButton.call(this, 0, items.startPosition, insertionIndex++);
+                    insertShowMoreButton.call(this, 0, itemsRange.startPosition, insertionIndex++);
                 }
-                this._retrievedChildrenRanges.push({from: items.startPosition, to: items.endPosition});
+                this._retrievedChildrenRanges.push({from: itemsRange.startPosition, to: itemsRange.endPosition});
                 for (var i = 0, l = items.length; i < l; ++i)
                     insertRetrievedChild.call(this, items[i], insertionIndex++);
-                if (items.endPosition < items.totalLength)
-                    insertShowMoreButton.call(this, items.endPosition, items.totalLength, insertionIndex++);
+                if (itemsRange.endPosition < itemsRange.totalLength)
+                    insertShowMoreButton.call(this, itemsRange.endPosition, itemsRange.totalLength, insertionIndex++);
             } else {
                 var rangeIndex = 0;
                 var found = false;
@@ -234,16 +270,16 @@
                     }
                     insertionIndex += range.to - range.from;
                     // Skip the button if there is one.
-                    if (range.to < items.totalLength)
+                    if (range.to < itemsRange.totalLength)
                         insertionIndex += 1;
                     ++rangeIndex;
                 }
 
-                if (!found || items.startPosition < range.from) {
+                if (!found || itemsRange.startPosition < range.from) {
                     // Update previous button.
-                    this.children[insertionIndex - 1].setEndPosition(items.startPosition);
-                    insertShowMoreButton.call(this, items.startPosition, found ? range.from : items.totalLength, insertionIndex);
-                    range = {from: items.startPosition, to: items.startPosition};
+                    this.children[insertionIndex - 1].setEndPosition(itemsRange.startPosition);
+                    insertShowMoreButton.call(this, itemsRange.startPosition, found ? range.from : itemsRange.totalLength, insertionIndex);
+                    range = {from: itemsRange.startPosition, to: itemsRange.startPosition};
                     if (!found)
                         rangeIndex = this._retrievedChildrenRanges.length;
                     this._retrievedChildrenRanges.splice(rangeIndex, 0, range);
@@ -254,7 +290,7 @@
                 // Also it is always true here that range.from <= itemPosition <= range.to
 
                 // Stretch the range right bound to include all new items.
-                while (range.to < items.endPosition) {
+                while (range.to < itemsRange.endPosition) {
                     // Skip already added nodes.
                     var skipCount = range.to - itemPosition;
                     insertionIndex += skipCount;
@@ -263,9 +299,9 @@
 
                     // We're at the position before button: ...<?node>x<button>
                     var nextRange = this._retrievedChildrenRanges[rangeIndex + 1];
-                    var newEndOfRange = nextRange ? nextRange.from : items.totalLength;
-                    if (newEndOfRange > items.endPosition)
-                        newEndOfRange = items.endPosition;
+                    var newEndOfRange = nextRange ? nextRange.from : itemsRange.totalLength;
+                    if (newEndOfRange > itemsRange.endPosition)
+                        newEndOfRange = itemsRange.endPosition;
                     while (itemPosition < newEndOfRange) {
                         insertRetrievedChild.call(this, items[itemIndex++], insertionIndex++);
                         ++itemPosition;
@@ -279,10 +315,10 @@
                     } else {
                         range.to = newEndOfRange;
                         // Remove or update next button.
-                        if (newEndOfRange === items.totalLength)
+                        if (newEndOfRange === itemsRange.totalLength)
                             this.removeChild(this.children[insertionIndex]);
                         else
-                            this.children[insertionIndex].setStartPosition(items.endPosition);
+                            this.children[insertionIndex].setStartPosition(itemsRange.endPosition);
                     }
                 }
             }
@@ -317,12 +353,19 @@
     sort: function()
     {
         this._dataGrid.recursiveSortingEnter();
+
+        /**
+         * @this {WebInspector.HeapSnapshotGridNode}
+         */
         function afterSort()
         {
             this._saveChildren();
             this.removeChildren();
             this._retrievedChildrenRanges = [];
 
+            /**
+             * @this {WebInspector.HeapSnapshotGridNode}
+             */
             function afterPopulate()
             {
                 for (var i = 0, l = this.children.length; i < l; ++i) {
@@ -375,6 +418,10 @@
 };
 
 WebInspector.HeapSnapshotGenericObjectNode.prototype = {
+    /**
+     * @param {string} columnIdentifier
+     * @return {!Element}
+     */
     createCell: function(columnIdentifier)
     {
         var cell = columnIdentifier !== "object" ? this._createValueCell(columnIdentifier) : this._createObjectCell();
@@ -498,6 +545,9 @@
 
     updateHasChildren: function()
     {
+        /**
+         * @this {WebInspector.HeapSnapshotGenericObjectNode}
+         */
         function isEmptyCallback(isEmpty)
         {
             this.hasChildren = !isEmpty;
@@ -505,6 +555,11 @@
         this._provider().isEmpty(isEmptyCallback.bind(this));
     },
 
+    /**
+     * @param {string} fullName
+     * @param {boolean} hasObjectId
+     * @return {string}
+     */
     shortenWindowURL: function(fullName, hasObjectId)
     {
         var startPos = fullName.indexOf("/");
@@ -586,6 +641,9 @@
         return prefix + childNode._referenceType + "#" + childNode._referenceName;
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotCommon.ComparatorConfig}
+     */
     comparator: function()
     {
         var sortAscending = this._dataGrid.isSortOrderAscending();
@@ -597,7 +655,7 @@
             retainedSize: ["retainedSize", sortAscending, "!edgeName", true],
             distance: ["distance", sortAscending, "_name", true]
         }[sortColumnIdentifier] || ["!edgeName", true, "retainedSize", false];
-        return WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.createComparator(sortFields);
+        return WebInspector.HeapSnapshotGridNode.createComparator(sortFields);
     },
 
     _emptyData: function()
@@ -616,6 +674,7 @@
             break;
         case "internal":
         case "hidden":
+        case "weak":
             nameClass = "console-formatted-null";
             break;
         case "element":
@@ -660,6 +719,9 @@
 };
 
 WebInspector.HeapSnapshotInstanceNode.prototype = {
+    /**
+     * @return {!WebInspector.HeapSnapshotProviderProxy}
+     */
     createProvider: function()
     {
         var showHiddenData = WebInspector.settings.showAdvancedHeapSnapshotProperties.get();
@@ -683,6 +745,9 @@
         return childNode._referenceType + "#" + childNode._referenceName;
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotCommon.ComparatorConfig}
+     */
     comparator: function()
     {
         var sortAscending = this._dataGrid.isSortOrderAscending();
@@ -696,7 +761,7 @@
             shallowSize: ["selfSize", sortAscending, "!edgeName", true],
             retainedSize: ["retainedSize", sortAscending, "!edgeName", true]
         }[sortColumnIdentifier] || ["!edgeName", true, "retainedSize", false];
-        return WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.createComparator(sortFields);
+        return WebInspector.HeapSnapshotGridNode.createComparator(sortFields);
     },
 
     _emptyData: function()
@@ -730,6 +795,9 @@
 
 /**
  * @constructor
+ * @param {string} className
+ * @param {!WebInspector.HeapSnapshotCommon.Aggregate} aggregate
+ * @param {string} aggregatesKey
  * @extends {WebInspector.HeapSnapshotGridNode}
  */
 WebInspector.HeapSnapshotConstructorNode = function(tree, className, aggregate, aggregatesKey)
@@ -759,11 +827,17 @@
      */
     revealNodeBySnapshotObjectId: function(snapshotObjectId, callback)
     {
+        /**
+         * @this {WebInspector.HeapSnapshotConstructorNode}
+         */
         function didExpand()
         {
             this._provider().nodePosition(snapshotObjectId, didGetNodePosition.bind(this));
         }
 
+        /**
+         * @this {WebInspector.HeapSnapshotConstructorNode}
+         */
         function didGetNodePosition(nodePosition)
         {
             if (nodePosition === -1) {
@@ -774,6 +848,9 @@
             }
         }
 
+        /**
+         * @this {WebInspector.HeapSnapshotConstructorNode}
+         */
         function didPopulateChildren(nodePosition)
         {
             var indexOfFirsChildInRange = 0;
@@ -782,7 +859,7 @@
                if (range.from <= nodePosition && nodePosition < range.to) {
                    var childIndex = indexOfFirsChildInRange + nodePosition - range.from;
                    var instanceNode = this.children[childIndex];
-                   this._dataGrid.highlightNode(instanceNode);
+                   this._dataGrid.highlightNode(/** @type {!WebInspector.HeapSnapshotGridNode} */ (instanceNode));
                    callback(true);
                    return;
                }
@@ -794,6 +871,10 @@
         this.expandWithoutPopulate(didExpand.bind(this));
     },
 
+    /**
+     * @param {string} columnIdentifier
+     * @return {!Element}
+     */
     createCell: function(columnIdentifier)
     {
         var cell = columnIdentifier !== "object" ? this._createValueCell(columnIdentifier) : WebInspector.HeapSnapshotGridNode.prototype.createCell.call(this, columnIdentifier);
@@ -807,6 +888,9 @@
         return new WebInspector.HeapSnapshotInstanceNode(this._dataGrid, null, this._dataGrid.snapshot, item);
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotCommon.ComparatorConfig}
+     */
     comparator: function()
     {
         var sortAscending = this._dataGrid.isSortOrderAscending();
@@ -818,7 +902,7 @@
             shallowSize: ["selfSize", sortAscending, "id", true],
             retainedSize: ["retainedSize", sortAscending, "id", true]
         }[sortColumnIdentifier];
-        return WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.createComparator(sortFields);
+        return WebInspector.HeapSnapshotGridNode.createComparator(sortFields);
     },
 
     _childHashForEntity: function(node)
@@ -889,55 +973,84 @@
         callback(false);
     },
 
+    /**
+     * @param {number} beginPosition
+     * @param {number} endPosition
+     * @param {!function(!WebInspector.HeapSnapshotCommon.ItemsRange)} callback
+     */
     serializeItemsRange: function(beginPosition, endPosition, callback)
     {
+        /**
+         * @param {!WebInspector.HeapSnapshotCommon.ItemsRange} items
+         * @this {WebInspector.HeapSnapshotDiffNodesProvider}
+         */
         function didReceiveAllItems(items)
         {
             items.totalLength = this._addedCount + this._removedCount;
             callback(items);
         }
 
-        function didReceiveDeletedItems(addedItems, items)
+        /**
+         * @param {!WebInspector.HeapSnapshotCommon.ItemsRange} addedItems
+         * @param {!WebInspector.HeapSnapshotCommon.ItemsRange} itemsRange
+         * @this {WebInspector.HeapSnapshotDiffNodesProvider}
+         */
+        function didReceiveDeletedItems(addedItems, itemsRange)
         {
-            if (!addedItems.length)
-                addedItems.startPosition = this._addedCount + items.startPosition;
+            var items = itemsRange.items;
+            if (!addedItems.items.length)
+                addedItems.startPosition = this._addedCount + itemsRange.startPosition;
             for (var i = 0; i < items.length; i++) {
                 items[i].isAddedNotRemoved = false;
-                addedItems.push(items[i]);
+                addedItems.items.push(items[i]);
             }
-            addedItems.endPosition = this._addedCount + items.endPosition;
+            addedItems.endPosition = this._addedCount + itemsRange.endPosition;
             didReceiveAllItems.call(this, addedItems);
         }
 
-        function didReceiveAddedItems(items)
+        /**
+         * @param {!WebInspector.HeapSnapshotCommon.ItemsRange} itemsRange
+         * @this {WebInspector.HeapSnapshotDiffNodesProvider}
+         */
+        function didReceiveAddedItems(itemsRange)
         {
+            var items = itemsRange.items;
             for (var i = 0; i < items.length; i++)
                 items[i].isAddedNotRemoved = true;
-            if (items.endPosition < endPosition)
-                return this._deletedNodesProvider.serializeItemsRange(0, endPosition - items.endPosition, didReceiveDeletedItems.bind(this, items));
+            if (itemsRange.endPosition < endPosition)
+                return this._deletedNodesProvider.serializeItemsRange(0, endPosition - itemsRange.endPosition, didReceiveDeletedItems.bind(this, itemsRange));
 
-            items.totalLength = this._addedCount + this._removedCount;
-            didReceiveAllItems.call(this, items);
+            itemsRange.totalLength = this._addedCount + this._removedCount;
+            didReceiveAllItems.call(this, itemsRange);
         }
 
-        if (beginPosition < this._addedCount)
+        if (beginPosition < this._addedCount) {
             this._addedNodesProvider.serializeItemsRange(beginPosition, endPosition, didReceiveAddedItems.bind(this));
-        else
-            this._deletedNodesProvider.serializeItemsRange(beginPosition - this._addedCount, endPosition - this._addedCount, didReceiveDeletedItems.bind(this, []));
+        } else {
+            var emptyRange = new WebInspector.HeapSnapshotCommon.ItemsRange(0, 0, 0, []);
+            this._deletedNodesProvider.serializeItemsRange(beginPosition - this._addedCount, endPosition - this._addedCount, didReceiveDeletedItems.bind(this, emptyRange));
+        }
     },
 
     sortAndRewind: function(comparator, callback)
     {
+        /**
+         * @this {WebInspector.HeapSnapshotDiffNodesProvider}
+         */
         function afterSort()
         {
             this._deletedNodesProvider.sortAndRewind(comparator, callback);
         }
         this._addedNodesProvider.sortAndRewind(comparator, afterSort.bind(this));
-    }
+    },
+
+    __proto__: WebInspector.HeapSnapshotProviderProxy.prototype
 };
 
 /**
  * @constructor
+ * @param {string} className
+ * @param {!WebInspector.HeapSnapshotCommon.DiffForClass} diffForClass
  * @extends {WebInspector.HeapSnapshotGridNode}
  */
 WebInspector.HeapSnapshotDiffNode = function(tree, className, diffForClass)
@@ -962,7 +1075,7 @@
     createProvider: function()
     {
         var tree = this._dataGrid;
-        return  new WebInspector.HeapSnapshotDiffNodesProvider(
+        return new WebInspector.HeapSnapshotDiffNodesProvider(
             tree.snapshot.createAddedNodesProvider(tree.baseSnapshot.uid, this._name),
             tree.baseSnapshot.createDeletedNodesProvider(this._deletedIndexes),
             this._addedCount,
@@ -987,6 +1100,9 @@
         return childNode.snapshotNodeId;
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotCommon.ComparatorConfig}
+     */
     comparator: function()
     {
         var sortAscending = this._dataGrid.isSortOrderAscending();
@@ -1000,7 +1116,7 @@
             removedSize: ["selfSize", sortAscending, "id", true],
             sizeDelta: ["selfSize", sortAscending, "id", true]
         }[sortColumnIdentifier];
-        return WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.createComparator(sortFields);
+        return WebInspector.HeapSnapshotGridNode.createComparator(sortFields);
     },
 
     _signForDelta: function(delta)
@@ -1053,15 +1169,21 @@
 
     /**
      * @param {number} snapshotObjectId
-     * @param {function(?WebInspector.HeapSnapshotDominatorObjectNode)} callback
+     * @param {function(?WebInspector.DataGridNode)} callback
      */
     retrieveChildBySnapshotObjectId: function(snapshotObjectId, callback)
     {
+        /**
+         * @this {WebInspector.HeapSnapshotDominatorObjectNode}
+         */
         function didExpand()
         {
             this._provider().nodePosition(snapshotObjectId, didGetNodePosition.bind(this));
         }
 
+        /**
+         * @this {WebInspector.HeapSnapshotDominatorObjectNode}
+         */
         function didGetNodePosition(nodePosition)
         {
             if (nodePosition === -1) {
@@ -1071,6 +1193,9 @@
                 this._populateChildren(nodePosition, null, didPopulateChildren.bind(this, nodePosition));
         }
 
+        /**
+         * @this {WebInspector.HeapSnapshotDominatorObjectNode}
+         */
         function didPopulateChildren(nodePosition)
         {
             var child = this.childForPosition(nodePosition);
@@ -1098,6 +1223,9 @@
         return childNode.snapshotNodeId;
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotCommon.ComparatorConfig}
+     */
     comparator: function()
     {
         var sortAscending = this._dataGrid.isSortOrderAscending();
@@ -1107,7 +1235,7 @@
             shallowSize: ["selfSize", sortAscending, "id", true],
             retainedSize: ["retainedSize", sortAscending, "id", true]
         }[sortColumnIdentifier];
-        return WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.createComparator(sortFields);
+        return WebInspector.HeapSnapshotGridNode.createComparator(sortFields);
     },
 
     _emptyData: function()
diff --git a/Source/devtools/front_end/HeapSnapshotLoader.js b/Source/devtools/front_end/HeapSnapshotLoader.js
index 2f5aae0..132886f 100644
--- a/Source/devtools/front_end/HeapSnapshotLoader.js
+++ b/Source/devtools/front_end/HeapSnapshotLoader.js
@@ -31,7 +31,6 @@
 /**
  * @constructor
  * @param {!WebInspector.HeapSnapshotWorkerDispatcher} dispatcher
- * @implements {WebInspector.OutputStream}
  */
 WebInspector.HeapSnapshotLoader = function(dispatcher)
 {
@@ -58,11 +57,13 @@
             this._parseStringsArray();
     },
 
+    /**
+     * @return {!WebInspector.JSHeapSnapshot}
+     */
     buildSnapshot: function(constructorName)
     {
         this._progress.updateStatus("Processing snapshot\u2026");
-        var constructor = WebInspector[constructorName];
-        var result = new constructor(this._snapshot, this._progress);
+        var result = new WebInspector.JSHeapSnapshot(this._snapshot, this._progress);
         this._reset();
         return result;
     },
@@ -134,7 +135,7 @@
                 break;
             }
             case "parse-snapshot-info": {
-                var closingBracketIndex = WebInspector.findBalancedCurlyBrackets(this._json);
+                var closingBracketIndex = WebInspector.TextUtils.findBalancedCurlyBrackets(this._json);
                 if (closingBracketIndex === -1)
                     return;
                 this._snapshot.snapshot = /** @type {!HeapSnapshotHeader} */ (JSON.parse(this._json.slice(0, closingBracketIndex)));
@@ -191,7 +192,8 @@
                     return;
                 this._snapshot.edges = this._array;
                 this._array = null;
-                if (WebInspector.HeapSnapshot.enableAllocationProfiler)
+                // If there is allocation info parse it, otherwise jump straight to strings.
+                if (this._snapshot.snapshot.trace_function_count)
                     this._state = "find-trace-function-infos";
                 else
                     this._state = "find-strings";
diff --git a/Source/devtools/front_end/HeapSnapshotProxy.js b/Source/devtools/front_end/HeapSnapshotProxy.js
index dfb921f..af4f4e0 100644
--- a/Source/devtools/front_end/HeapSnapshotProxy.js
+++ b/Source/devtools/front_end/HeapSnapshotProxy.js
@@ -30,138 +30,6 @@
 
 /**
  * @constructor
- * @extends {WebInspector.Object}
- */
-WebInspector.HeapSnapshotWorkerWrapper = function()
-{
-}
-
-WebInspector.HeapSnapshotWorkerWrapper.prototype =  {
-    postMessage: function(message)
-    {
-    },
-    terminate: function()
-    {
-    },
-
-    __proto__: WebInspector.Object.prototype
-}
-
-/**
- * @constructor
- * @extends {WebInspector.HeapSnapshotWorkerWrapper}
- */
-WebInspector.HeapSnapshotRealWorker = function()
-{
-    this._worker = new Worker("HeapSnapshotWorker.js");
-    this._worker.addEventListener("message", this._messageReceived.bind(this), false);
-}
-
-WebInspector.HeapSnapshotRealWorker.prototype = {
-    _messageReceived: function(event)
-    {
-        var message = event.data;
-        this.dispatchEventToListeners("message", message);
-    },
-
-    postMessage: function(message)
-    {
-        this._worker.postMessage(message);
-    },
-
-    terminate: function()
-    {
-        this._worker.terminate();
-    },
-
-    __proto__: WebInspector.HeapSnapshotWorkerWrapper.prototype
-}
-
-
-/**
- * @constructor
- */
-WebInspector.AsyncTaskQueue = function()
-{
-    this._queue = [];
-    this._isTimerSheduled = false;
-}
-
-WebInspector.AsyncTaskQueue.prototype = {
-    /**
-     * @param {function()} task
-     */
-    addTask: function(task)
-    {
-        this._queue.push(task);
-        this._scheduleTimer();
-    },
-
-    _onTimeout: function()
-    {
-        this._isTimerSheduled = false;
-        var queue = this._queue;
-        this._queue = [];
-        for (var i = 0; i < queue.length; i++) {
-            try {
-                queue[i]();
-            } catch (e) {
-                console.error("Exception while running task: " + e.stack);
-            }
-        }
-        this._scheduleTimer();
-    },
-
-    _scheduleTimer: function()
-    {
-        if (this._queue.length && !this._isTimerSheduled) {
-            setTimeout(this._onTimeout.bind(this), 0);
-            this._isTimerSheduled = true;
-        }
-    }
-}
-
-/**
- * @constructor
- * @extends {WebInspector.HeapSnapshotWorkerWrapper}
- */
-WebInspector.HeapSnapshotFakeWorker = function()
-{
-    this._dispatcher = new WebInspector.HeapSnapshotWorkerDispatcher(window, this._postMessageFromWorker.bind(this));
-    this._asyncTaskQueue = new WebInspector.AsyncTaskQueue();
-}
-
-WebInspector.HeapSnapshotFakeWorker.prototype = {
-    postMessage: function(message)
-    {
-        function dispatch()
-        {
-            if (this._dispatcher)
-                this._dispatcher.dispatchMessage({data: message});
-        }
-        this._asyncTaskQueue.addTask(dispatch.bind(this));
-    },
-
-    terminate: function()
-    {
-        this._dispatcher = null;
-    },
-
-    _postMessageFromWorker: function(message)
-    {
-        function send()
-        {
-            this.dispatchEventToListeners("message", message);
-        }
-        this._asyncTaskQueue.addTask(send.bind(this));
-    },
-
-    __proto__: WebInspector.HeapSnapshotWorkerWrapper.prototype
-}
-
-
-/**
- * @constructor
  * @param {function(string, *)} eventHandler
  * @extends {WebInspector.Object}
  */
@@ -172,19 +40,20 @@
     this._nextCallId = 1;
     this._callbacks = [];
     this._previousCallbacks = [];
-    // There is no support for workers in Chromium DRT.
-    this._worker = typeof InspectorTest === "undefined" ? new WebInspector.HeapSnapshotRealWorker() : new WebInspector.HeapSnapshotFakeWorker();
-    this._worker.addEventListener("message", this._messageReceived, this);
+    this._worker = new Worker("HeapSnapshotWorker.js");
+    this._worker.onmessage = this._messageReceived.bind(this);
 }
 
 WebInspector.HeapSnapshotWorkerProxy.prototype = {
     /**
+     * @param {number} profileUid
+     * @param {function(!WebInspector.HeapSnapshotProxy)} snapshotReceivedCallback
      * @return {!WebInspector.HeapSnapshotLoaderProxy}
      */
-    createLoader: function(snapshotConstructorName, proxyConstructor)
+    createLoader: function(profileUid, snapshotReceivedCallback)
     {
         var objectId = this._nextObjectId++;
-        var proxy = new WebInspector.HeapSnapshotLoaderProxy(this, objectId, snapshotConstructorName, proxyConstructor);
+        var proxy = new WebInspector.HeapSnapshotLoaderProxy(this, objectId, profileUid, snapshotReceivedCallback);
         this._postMessage({callId: this._nextCallId++, disposition: "create", objectId: objectId, methodName: "WebInspector.HeapSnapshotLoader"});
         return proxy;
     },
@@ -201,6 +70,13 @@
         this._postMessage({callId: this._nextCallId++, disposition: "dispose", objectId: objectId});
     },
 
+    evaluateForTest: function(script, callback)
+    {
+        var callId = this._nextCallId++;
+        this._callbacks[callId] = callback;
+        this._postMessage({callId: callId, disposition: "evaluateForTest", source: script});
+    },
+
     callGetter: function(callback, objectId, getterName)
     {
         var callId = this._nextCallId++;
@@ -208,12 +84,23 @@
         this._postMessage({callId: callId, disposition: "getter", objectId: objectId, methodName: getterName});
     },
 
+    /**
+     * @param {?function(...[?])} callback
+     * @param {string} objectId
+     * @param {string} methodName
+     * @param {function(new:T, ...[?])} proxyConstructor
+     * @return {?Object}
+     * @template T
+     */
     callFactoryMethod: function(callback, objectId, methodName, proxyConstructor)
     {
         var callId = this._nextCallId++;
         var methodArguments = Array.prototype.slice.call(arguments, 4);
         var newObjectId = this._nextObjectId++;
 
+        /**
+         * @this {WebInspector.HeapSnapshotWorkerProxy}
+         */
         function wrapCallback(remoteResult)
         {
             callback(remoteResult ? new proxyConstructor(this, newObjectId) : null);
@@ -229,6 +116,11 @@
         }
     },
 
+    /**
+     * @param {function(*)} callback
+     * @param {string} objectId
+     * @param {string} methodName
+     */
     callMethod: function(callback, objectId, methodName)
     {
         var callId = this._nextCallId++;
@@ -270,6 +162,9 @@
         return result;
     },
 
+    /**
+     * @param {!MessageEvent} event
+     */
     _messageReceived: function(event)
     {
         var data = event.data;
@@ -281,7 +176,7 @@
         if (data.error) {
             if (data.errorMethodName)
                 WebInspector.log(WebInspector.UIString("An error happened when a call for method '%s' was requested", data.errorMethodName));
-            WebInspector.log(data.errorCallStack);
+            WebInspector.log(data["errorCallStack"]);
             delete this._callbacks[data.callId];
             return;
         }
@@ -303,6 +198,7 @@
 
 /**
  * @constructor
+ * @param {number} objectId
  */
 WebInspector.HeapSnapshotProxyObject = function(worker, objectId)
 {
@@ -311,6 +207,10 @@
 }
 
 WebInspector.HeapSnapshotProxyObject.prototype = {
+    /**
+     * @param {string} workerMethodName
+     * @param {!Array.<*>} args
+     */
     _callWorker: function(workerMethodName, args)
     {
         args.splice(1, 0, this._objectId);
@@ -328,20 +228,35 @@
     },
 
     /**
+     * @param {?function(...[?])} callback
+     * @param {string} methodName
+     * @param {function (new:T, ...[?])} proxyConstructor
      * @param {...*} var_args
+     * @return {?WebInspector.HeapSnapshotProviderProxy}
+     * @template T
      */
     callFactoryMethod: function(callback, methodName, proxyConstructor, var_args)
     {
         return this._callWorker("callFactoryMethod", Array.prototype.slice.call(arguments, 0));
     },
 
+    /**
+     * @param {function(T)|undefined} callback
+     * @param {string} getterName
+     * @return {*}
+     * @template T
+     */
     callGetter: function(callback, getterName)
     {
         return this._callWorker("callGetter", Array.prototype.slice.call(arguments, 0));
     },
 
     /**
+     * @param {function(T)|undefined} callback
+     * @param {string} methodName
      * @param {...*} var_args
+     * @return {*}
+     * @template T
      */
     callMethod: function(callback, methodName, var_args)
     {
@@ -357,25 +272,19 @@
  * @constructor
  * @extends {WebInspector.HeapSnapshotProxyObject}
  * @implements {WebInspector.OutputStream}
+ * @param {number} objectId
+ * @param {number} profileUid
+ * @param {function(!WebInspector.HeapSnapshotProxy)} snapshotReceivedCallback
  */
-WebInspector.HeapSnapshotLoaderProxy = function(worker, objectId, snapshotConstructorName, proxyConstructor)
+WebInspector.HeapSnapshotLoaderProxy = function(worker, objectId, profileUid, snapshotReceivedCallback)
 {
     WebInspector.HeapSnapshotProxyObject.call(this, worker, objectId);
-    this._snapshotConstructorName = snapshotConstructorName;
-    this._proxyConstructor = proxyConstructor;
-    this._pendingSnapshotConsumers = [];
+    this._profileUid = profileUid;
+    this._snapshotReceivedCallback = snapshotReceivedCallback;
 }
 
 WebInspector.HeapSnapshotLoaderProxy.prototype = {
     /**
-     * @param {function(!WebInspector.HeapSnapshotProxy)} callback
-     */
-    addConsumer: function(callback)
-    {
-        this._pendingSnapshotConsumers.push(callback);
-    },
-
-    /**
      * @param {string} chunk
      * @param {function(!WebInspector.OutputStream)=} callback
      */
@@ -389,23 +298,27 @@
      */
     close: function(callback)
     {
+        /**
+         * @this {WebInspector.HeapSnapshotLoaderProxy}
+         */
         function buildSnapshot()
         {
             if (callback)
                 callback();
-            this.callFactoryMethod(updateStaticData.bind(this), "buildSnapshot", this._proxyConstructor, this._snapshotConstructorName);
+            this.callFactoryMethod(updateStaticData.bind(this), "buildSnapshot", WebInspector.HeapSnapshotProxy);
         }
+
+        /**
+         * @param {!WebInspector.HeapSnapshotProxy} snapshotProxy
+         * @this {WebInspector.HeapSnapshotLoaderProxy}
+         */
         function updateStaticData(snapshotProxy)
         {
             this.dispose();
-            snapshotProxy.updateStaticData(notifyPendingConsumers.bind(this));
+            snapshotProxy.setProfileUid(this._profileUid);
+            snapshotProxy.updateStaticData(this._snapshotReceivedCallback.bind(this));
         }
-        function notifyPendingConsumers(snapshotProxy)
-        {
-            for (var i = 0; i < this._pendingSnapshotConsumers.length; ++i)
-                this._pendingSnapshotConsumers[i](snapshotProxy);
-            this._pendingSnapshotConsumers = [];
-        }
+
         this.callMethod(buildSnapshot.bind(this), "close");
     },
 
@@ -416,10 +329,14 @@
 /**
  * @constructor
  * @extends {WebInspector.HeapSnapshotProxyObject}
+ * @param {!WebInspector.HeapSnapshotWorkerProxy} worker
+ * @param {number} objectId
  */
 WebInspector.HeapSnapshotProxy = function(worker, objectId)
 {
     WebInspector.HeapSnapshotProxyObject.call(this, worker, objectId);
+    /** @type {?WebInspector.HeapSnapshotCommon.StaticData} */
+    this._staticData = null;
 }
 
 WebInspector.HeapSnapshotProxy.prototype = {
@@ -448,46 +365,73 @@
         this.callMethod(callback, "dominatorIdsForNode", nodeIndex);
     },
 
+    /**
+     * @param {number} nodeIndex
+     * @param {boolean} showHiddenData
+     * @return {?WebInspector.HeapSnapshotProviderProxy}
+     */
     createEdgesProvider: function(nodeIndex, showHiddenData)
     {
         return this.callFactoryMethod(null, "createEdgesProvider", WebInspector.HeapSnapshotProviderProxy, nodeIndex, showHiddenData);
     },
 
+    /**
+     * @param {number} nodeIndex
+     * @param {boolean} showHiddenData
+     * @return {?WebInspector.HeapSnapshotProviderProxy}
+     */
     createRetainingEdgesProvider: function(nodeIndex, showHiddenData)
     {
         return this.callFactoryMethod(null, "createRetainingEdgesProvider", WebInspector.HeapSnapshotProviderProxy, nodeIndex, showHiddenData);
     },
 
+    /**
+     * @param {string} baseSnapshotId
+     * @param {string} className
+     * @return {?WebInspector.HeapSnapshotProviderProxy}
+     */
     createAddedNodesProvider: function(baseSnapshotId, className)
     {
         return this.callFactoryMethod(null, "createAddedNodesProvider", WebInspector.HeapSnapshotProviderProxy, baseSnapshotId, className);
     },
 
+    /**
+     * @param {!Array.<number>} nodeIndexes
+     * @return {?WebInspector.HeapSnapshotProviderProxy}
+     */
     createDeletedNodesProvider: function(nodeIndexes)
     {
         return this.callFactoryMethod(null, "createDeletedNodesProvider", WebInspector.HeapSnapshotProviderProxy, nodeIndexes);
     },
 
+    /**
+     * @param {function(*):boolean} filter
+     * @return {?WebInspector.HeapSnapshotProviderProxy}
+     */
     createNodesProvider: function(filter)
     {
         return this.callFactoryMethod(null, "createNodesProvider", WebInspector.HeapSnapshotProviderProxy, filter);
     },
 
+    /**
+     * @param {string} className
+     * @param {string} aggregatesKey
+     * @return {?WebInspector.HeapSnapshotProviderProxy}
+     */
     createNodesProviderForClass: function(className, aggregatesKey)
     {
         return this.callFactoryMethod(null, "createNodesProviderForClass", WebInspector.HeapSnapshotProviderProxy, className, aggregatesKey);
     },
 
+    /**
+     * @param {number} nodeIndex
+     * @return {?WebInspector.HeapSnapshotProviderProxy}
+     */
     createNodesProviderForDominator: function(nodeIndex)
     {
         return this.callFactoryMethod(null, "createNodesProviderForDominator", WebInspector.HeapSnapshotProviderProxy, nodeIndex);
     },
 
-    maxJsNodeId: function(callback)
-    {
-        this.callMethod(callback, "maxJsNodeId");
-    },
-
     allocationTracesTops: function(callback)
     {
         this.callMethod(callback, "allocationTracesTops");
@@ -500,7 +444,7 @@
 
     dispose: function()
     {
-        this.disposeWorker();
+        throw new Error("Should never be called");
     },
 
     get nodeCount()
@@ -515,6 +459,10 @@
 
     updateStaticData: function(callback)
     {
+        /**
+         * @param {!WebInspector.HeapSnapshotCommon.StaticData} staticData
+         * @this {WebInspector.HeapSnapshotProxy}
+         */
         function dataReceived(staticData)
         {
             this._staticData = staticData;
@@ -530,7 +478,20 @@
 
     get uid()
     {
-        return this._staticData.uid;
+        return this._profileUid;
+    },
+
+    setProfileUid: function(profileUid)
+    {
+        this._profileUid = profileUid;
+    },
+
+    /**
+     * @return {number}
+     */
+    maxJSObjectId: function()
+    {
+        return this._staticData.maxJSObjectId;
     },
 
     __proto__: WebInspector.HeapSnapshotProxyObject.prototype
@@ -540,6 +501,8 @@
 /**
  * @constructor
  * @extends {WebInspector.HeapSnapshotProxyObject}
+ * @param {!WebInspector.HeapSnapshotWorkerProxy} worker
+ * @param {number} objectId
  */
 WebInspector.HeapSnapshotProviderProxy = function(worker, objectId)
 {
@@ -557,6 +520,11 @@
         this.callMethod(callback, "isEmpty");
     },
 
+    /**
+     * @param {number} startPosition
+     * @param {number} endPosition
+     * @param {function(!WebInspector.HeapSnapshotCommon.ItemsRange)} callback
+     */
     serializeItemsRange: function(startPosition, endPosition, callback)
     {
         this.callMethod(callback, "serializeItemsRange", startPosition, endPosition);
diff --git a/Source/devtools/front_end/HeapSnapshotView.js b/Source/devtools/front_end/HeapSnapshotView.js
index 7768585..ddceec9 100644
--- a/Source/devtools/front_end/HeapSnapshotView.js
+++ b/Source/devtools/front_end/HeapSnapshotView.js
@@ -31,17 +31,16 @@
 /**
  * @constructor
  * @extends {WebInspector.View}
- * @param {!WebInspector.ProfilesPanel} parent
  * @param {!WebInspector.HeapProfileHeader} profile
  */
-WebInspector.HeapSnapshotView = function(parent, profile)
+WebInspector.HeapSnapshotView = function(profile)
 {
     WebInspector.View.call(this);
 
     this.element.classList.add("heap-snapshot-view");
 
-    this.parent = parent;
-    this.parent.addEventListener("profile added", this._onProfileHeaderAdded, this);
+    profile.profileType().addEventListener(WebInspector.HeapSnapshotProfileType.SnapshotReceived, this._onReceivSnapshot, this);
+    profile.profileType().addEventListener(WebInspector.ProfileType.Events.RemoveProfileHeader, this._onProfileHeaderRemoved, this);
 
     if (profile._profileType.id === WebInspector.TrackingHeapSnapshotProfileType.TypeId) {
         this._trackingOverviewGrid = new WebInspector.HeapTrackingOverviewGrid(profile);
@@ -49,85 +48,75 @@
         this._trackingOverviewGrid.show(this.element);
     }
 
-    this.viewsContainer = document.createElement("div");
-    this.viewsContainer.classList.add("views-container");
-    this.element.appendChild(this.viewsContainer);
+    this.viewsContainer = new WebInspector.SplitView(false, true, "heapSnapshotRetainersViewSize", 200, 200);
+    this.viewsContainer.show(this.element);
+    this.viewsContainer.setMainElementConstraints(50, 50);
+    this.viewsContainer.setSidebarElementConstraints(70, 70);
 
     this.containmentView = new WebInspector.View();
-    this.containmentView.element.classList.add("view");
     this.containmentDataGrid = new WebInspector.HeapSnapshotContainmentDataGrid();
     this.containmentDataGrid.element.addEventListener("mousedown", this._mouseDownInContentsGrid.bind(this), true);
     this.containmentDataGrid.show(this.containmentView.element);
     this.containmentDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._selectionChanged, this);
 
     this.constructorsView = new WebInspector.View();
-    this.constructorsView.element.classList.add("view");
-    this.constructorsView.element.appendChild(this._createToolbarWithClassNameFilter());
 
     this.constructorsDataGrid = new WebInspector.HeapSnapshotConstructorsDataGrid();
-    this.constructorsDataGrid.element.classList.add("class-view-grid");
     this.constructorsDataGrid.element.addEventListener("mousedown", this._mouseDownInContentsGrid.bind(this), true);
     this.constructorsDataGrid.show(this.constructorsView.element);
     this.constructorsDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._selectionChanged, this);
 
     this.dataGrid = /** @type {!WebInspector.HeapSnapshotSortableDataGrid} */ (this.constructorsDataGrid);
     this.currentView = this.constructorsView;
-    this.currentView.show(this.viewsContainer);
+    this.currentView.show(this.viewsContainer.mainElement());
 
     this.diffView = new WebInspector.View();
-    this.diffView.element.classList.add("view");
-    this.diffView.element.appendChild(this._createToolbarWithClassNameFilter());
 
     this.diffDataGrid = new WebInspector.HeapSnapshotDiffDataGrid();
-    this.diffDataGrid.element.classList.add("class-view-grid");
     this.diffDataGrid.show(this.diffView.element);
     this.diffDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._selectionChanged, this);
 
     this.dominatorView = new WebInspector.View();
-    this.dominatorView.element.classList.add("view");
     this.dominatorDataGrid = new WebInspector.HeapSnapshotDominatorsDataGrid();
     this.dominatorDataGrid.element.addEventListener("mousedown", this._mouseDownInContentsGrid.bind(this), true);
     this.dominatorDataGrid.show(this.dominatorView.element);
     this.dominatorDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._selectionChanged, this);
 
-    if (WebInspector.HeapSnapshot.enableAllocationProfiler) {
+    if (WebInspector.experimentsSettings.allocationProfiler.isEnabled() && profile.profileType() === WebInspector.ProfileTypeRegistry.instance.trackingHeapSnapshotProfileType) {
         this.allocationView = new WebInspector.View();
-        this.allocationView.element.classList.add("view");
         this.allocationDataGrid = new WebInspector.AllocationDataGrid();
         this.allocationDataGrid.element.addEventListener("mousedown", this._mouseDownInContentsGrid.bind(this), true);
         this.allocationDataGrid.show(this.allocationView.element);
         this.allocationDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._selectionChanged, this);
     }
 
-    this.retainmentViewHeader = document.createElement("div");
-    this.retainmentViewHeader.classList.add("retainers-view-header");
-    WebInspector.installDragHandle(this.retainmentViewHeader, this._startRetainersHeaderDragging.bind(this), this._retainersHeaderDragging.bind(this), this._endRetainersHeaderDragging.bind(this), "row-resize");
-    var retainingPathsTitleDiv = document.createElement("div");
-    retainingPathsTitleDiv.className = "title";
-    var retainingPathsTitle = document.createElement("span");
+    this.retainmentViewHeader = document.createElementWithClass("div", "retainers-view-header");
+    var retainingPathsTitleDiv = this.retainmentViewHeader.createChild("div", "title");
+    var retainingPathsTitle = retainingPathsTitleDiv.createChild("span");
     retainingPathsTitle.textContent = WebInspector.UIString("Object's retaining tree");
-    retainingPathsTitleDiv.appendChild(retainingPathsTitle);
-    this.retainmentViewHeader.appendChild(retainingPathsTitleDiv);
-    this.element.appendChild(this.retainmentViewHeader);
+    this.viewsContainer.hideDefaultResizer();
+    this.viewsContainer.installResizer(this.retainmentViewHeader);
 
     this.retainmentView = new WebInspector.View();
-    this.retainmentView.element.classList.add("view");
     this.retainmentView.element.classList.add("retaining-paths-view");
+    this.retainmentView.element.appendChild(this.retainmentViewHeader);
     this.retainmentDataGrid = new WebInspector.HeapSnapshotRetainmentDataGrid();
     this.retainmentDataGrid.show(this.retainmentView.element);
     this.retainmentDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._inspectedObjectChanged, this);
-    this.retainmentView.show(this.element);
+    this.retainmentView.show(this.viewsContainer.sidebarElement());
     this.retainmentDataGrid.reset();
 
     this.viewSelect = new WebInspector.StatusBarComboBox(this._onSelectedViewChanged.bind(this));
 
-    this.views = [{title: "Summary", view: this.constructorsView, grid: this.constructorsDataGrid},
-                  {title: "Comparison", view: this.diffView, grid: this.diffDataGrid},
-                  {title: "Containment", view: this.containmentView, grid: this.containmentDataGrid}];
+    this.views = [{title: WebInspector.UIString("Summary"), view: this.constructorsView, grid: this.constructorsDataGrid}];
+
+    if (profile.profileType() !== WebInspector.ProfileTypeRegistry.instance.trackingHeapSnapshotProfileType)
+        this.views.push({title: WebInspector.UIString("Comparison"), view: this.diffView, grid: this.diffDataGrid});
+    this.views.push({title: WebInspector.UIString("Containment"), view: this.containmentView, grid: this.containmentDataGrid});
     if (WebInspector.settings.showAdvancedHeapSnapshotProperties.get())
-        this.views.push({title: "Dominators", view: this.dominatorView, grid: this.dominatorDataGrid});
-    if (WebInspector.HeapSnapshot.enableAllocationProfiler)
-        this.views.push({title: "Allocation", view: this.allocationView, grid: this.allocationDataGrid});
+        this.views.push({title: WebInspector.UIString("Dominators"), view: this.dominatorView, grid: this.dominatorDataGrid});
+    if (this.allocationView)
+        this.views.push({title: WebInspector.UIString("Allocation"), view: this.allocationView, grid: this.allocationDataGrid});
     this.views.current = 0;
     for (var i = 0; i < this.views.length; ++i)
         this.viewSelect.createOption(WebInspector.UIString(this.views[i].title));
@@ -135,30 +124,38 @@
     this._profile = profile;
 
     this.baseSelect = new WebInspector.StatusBarComboBox(this._changeBase.bind(this));
-    this.baseSelect.element.classList.add("hidden");
     this._updateBaseOptions();
 
-    this.filterSelect = new WebInspector.StatusBarComboBox(this._changeFilter.bind(this));
+    this._filterSelect = new WebInspector.StatusBarComboBox(this._changeFilter.bind(this));
     this._updateFilterOptions();
 
+    this._classNameFilter = new WebInspector.StatusBarInput("Class filter");
+    this._classNameFilter.setOnChangeHandler(this._onClassFilterChanged.bind(this));
+
     this.selectedSizeText = new WebInspector.StatusBarText("");
 
     this._popoverHelper = new WebInspector.ObjectPopoverHelper(this.element, this._getHoverAnchor.bind(this), this._resolveObjectForPopover.bind(this), undefined, true);
 
+    this._updateSelectorsVisibility();
     this._refreshView();
 }
 
 WebInspector.HeapSnapshotView.prototype = {
     _refreshView: function()
     {
-        this.profile.load(profileCallback.bind(this));
+        this._profile.load(profileCallback.bind(this));
 
+        /**
+         * @this {WebInspector.HeapSnapshotView}
+         */
         function profileCallback(heapSnapshotProxy)
         {
             var list = this._profiles();
             var profileIndex = list.indexOf(this._profile);
             this.baseSelect.setSelectedIndex(Math.max(0, profileIndex - 1));
             this.dataGrid.setDataSource(heapSnapshotProxy);
+            if (this._trackingOverviewGrid)
+                this._trackingOverviewGrid._updateGrid();
         }
     },
 
@@ -171,42 +168,27 @@
             this.constructorsDataGrid.setSelectionRange(minId, maxId);
     },
 
-    dispose: function()
-    {
-        this.parent.removeEventListener("profile added", this._onProfileHeaderAdded, this);
-        this.profile.dispose();
-        if (this.baseProfile)
-            this.baseProfile.dispose();
-        this.containmentDataGrid.dispose();
-        this.constructorsDataGrid.dispose();
-        this.diffDataGrid.dispose();
-        this.dominatorDataGrid.dispose();
-        this.retainmentDataGrid.dispose();
-    },
-
     get statusBarItems()
     {
-        return [this.viewSelect.element, this.baseSelect.element, this.filterSelect.element, this.selectedSizeText.element];
-    },
-
-    get profile()
-    {
-        return this._profile;
-    },
-
-    get baseProfile()
-    {
-        return this._profile.profileType().getProfile(this._baseProfileUid);
+        var result = [this.viewSelect.element, this._classNameFilter.element];
+        if (this._profile.profileType() !== WebInspector.ProfileTypeRegistry.instance.trackingHeapSnapshotProfileType)
+            result.push(this.baseSelect.element, this._filterSelect.element);
+        result.push(this.selectedSizeText.element);
+        return result;
     },
 
     wasShown: function()
     {
         // FIXME: load base and current snapshots in parallel
-        this.profile.load(profileCallback.bind(this));
+        this._profile.load(profileCallback.bind(this));
+
+        /**
+         * @this {WebInspector.HeapSnapshotView}
+         */
         function profileCallback() {
-            this.profile._wasShown();
-            if (this.baseProfile)
-                this.baseProfile.load(function() { });
+            this._profile._wasShown();
+            if (this._baseProfile)
+                this._baseProfile.load(function() { });
         }
     },
 
@@ -218,12 +200,6 @@
             this.helpPopover.hide();
     },
 
-    onResize: function()
-    {
-        var height = this.retainmentView.element.clientHeight;
-        this._updateRetainmentViewHeight(height);
-    },
-
     searchCanceled: function()
     {
         if (this._searchResults) {
@@ -257,6 +233,7 @@
 
         /**
          * @param {boolean} found
+         * @this {WebInspector.HeapSnapshotView}
          */
         function didHighlight(found)
         {
@@ -341,16 +318,25 @@
         this._jumpToSearchResult(this._currentSearchResultIndex);
     },
 
+    /**
+     * @return {boolean}
+     */
     showingFirstSearchResult: function()
     {
         return (this._currentSearchResultIndex === 0);
     },
 
+    /**
+     * @return {boolean}
+     */
     showingLastSearchResult: function()
     {
         return (this._searchResults && this._currentSearchResultIndex === (this._searchResults.length - 1));
     },
 
+    /**
+     * @return {number}
+     */
     currentSearchResultIndex: function() {
         return this._currentSearchResultIndex;
     },
@@ -376,14 +362,14 @@
 
     _changeBase: function()
     {
-        if (this._baseProfileUid === this._profiles()[this.baseSelect.selectedIndex()].uid)
+        if (this._baseProfile=== this._profiles()[this.baseSelect.selectedIndex()])
             return;
 
-        this._baseProfileUid = this._profiles()[this.baseSelect.selectedIndex()].uid;
+        this._baseProfile = this._profiles()[this.baseSelect.selectedIndex()];
         var dataGrid = /** @type {!WebInspector.HeapSnapshotDiffDataGrid} */ (this.dataGrid);
         // Change set base data source only if main data source is already set.
         if (dataGrid.snapshot)
-            this.baseProfile.load(dataGrid.setBaseDataSource.bind(dataGrid));
+            this._baseProfile.load(dataGrid.setBaseDataSource.bind(dataGrid));
 
         if (!this.currentQuery || !this._searchFinishedCallback || !this._searchResults)
             return;
@@ -397,12 +383,12 @@
 
     _changeFilter: function()
     {
-        var profileIndex = this.filterSelect.selectedIndex() - 1;
+        var profileIndex = this._filterSelect.selectedIndex() - 1;
         this.dataGrid.filterSelectIndexChanged(this._profiles(), profileIndex);
 
         WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMetrics.UserAction, {
             action: WebInspector.UserMetrics.UserActionNames.HeapSnapshotFilterChanged,
-            label: this.filterSelect.selectedOption().label
+            label: this._filterSelect.selectedOption().label
         });
 
         if (!this.currentQuery || !this._searchFinishedCallback || !this._searchResults)
@@ -415,22 +401,12 @@
         this.performSearch(this.currentQuery, this._searchFinishedCallback);
     },
 
-    _createToolbarWithClassNameFilter: function()
+    /**
+     * @param {string} value
+     */
+    _onClassFilterChanged: function(value)
     {
-        var toolbar = document.createElement("div");
-        toolbar.classList.add("class-view-toolbar");
-        var classNameFilter = document.createElement("input");
-        classNameFilter.classList.add("class-name-filter");
-        classNameFilter.setAttribute("placeholder", WebInspector.UIString("Class filter"));
-        classNameFilter.addEventListener("keyup", this._changeNameFilter.bind(this, classNameFilter), false);
-        toolbar.appendChild(classNameFilter);
-        return toolbar;
-    },
-
-    _changeNameFilter: function(classNameInputElement)
-    {
-        var filter = classNameInputElement.value;
-        this.dataGrid.changeNameFilter(filter);
+        this.dataGrid.changeNameFilter(value);
     },
 
     /**
@@ -447,7 +423,7 @@
      */
     populateContextMenu: function(contextMenu, event)
     {
-        this.dataGrid.populateContextMenu(this.parent, contextMenu, event);
+        this.dataGrid.populateContextMenu(contextMenu, event);
     },
 
     _selectionChanged: function(event)
@@ -460,7 +436,7 @@
     _inspectedObjectChanged: function(event)
     {
         var selectedNode = event.target.selectedNode;
-        if (!this.profile.fromFile() && selectedNode instanceof WebInspector.HeapSnapshotGenericObjectNode)
+        if (!this._profile.fromFile() && selectedNode instanceof WebInspector.HeapSnapshotGenericObjectNode)
             ConsoleAgent.addInspectedHeapObject(selectedNode.snapshotNodeId);
     },
 
@@ -498,6 +474,9 @@
             return;
         }
 
+        /**
+         * @this {WebInspector.HeapSnapshotView}
+         */
         function dataGridContentShown(event)
         {
             var dataGrid = event.data;
@@ -517,7 +496,11 @@
         if (dataGrid.snapshot)
             return;
 
-        this.profile.load(didLoadSnapshot.bind(this));
+        this._profile.load(didLoadSnapshot.bind(this));
+
+        /**
+         * @this {WebInspector.HeapSnapshotView}
+         */
         function didLoadSnapshot(snapshotProxy)
         {
             if (this.dataGrid !== dataGrid)
@@ -525,12 +508,15 @@
             if (dataGrid.snapshot !== snapshotProxy)
                 dataGrid.setDataSource(snapshotProxy);
             if (dataGrid === this.diffDataGrid) {
-                if (!this._baseProfileUid)
-                    this._baseProfileUid = this._profiles()[this.baseSelect.selectedIndex()].uid;
-                this.baseProfile.load(didLoadBaseSnaphot.bind(this));
+                if (!this._baseProfile)
+                    this._baseProfile = this._profiles()[this.baseSelect.selectedIndex()];
+                this._baseProfile.load(didLoadBaseSnaphot.bind(this));
             }
         }
 
+        /**
+         * @this {WebInspector.HeapSnapshotView}
+         */
         function didLoadBaseSnaphot(baseSnapshotProxy)
         {
             if (this.diffDataGrid.baseSnapshot !== baseSnapshotProxy)
@@ -545,24 +531,14 @@
 
     _updateSelectorsVisibility: function()
     {
-        if (this.currentView === this.diffView)
-            this.baseSelect.element.classList.remove("hidden");
-        else
-            this.baseSelect.element.classList.add("hidden");
+        this.baseSelect.visible = (this.currentView === this.diffView);
+        this._filterSelect.visible = (this.currentView === this.constructorsView);
+        this._classNameFilter.visible = (this.currentView === this.constructorsView || this.currentView === this.diffView);
 
-        if (this.currentView === this.constructorsView) {
-            if (this._trackingOverviewGrid) {
-                this._trackingOverviewGrid.element.classList.remove("hidden");
+        if (this._trackingOverviewGrid) {
+            this._trackingOverviewGrid.element.classList.toggle("hidden", this.currentView !== this.constructorsView);
+            if (this.currentView === this.constructorsView)
                 this._trackingOverviewGrid.update();
-                this.viewsContainer.classList.add("reserve-80px-at-top");
-            }
-            this.filterSelect.element.classList.remove("hidden");
-        } else {
-            this.filterSelect.element.classList.add("hidden");
-            if (this._trackingOverviewGrid) {
-                this._trackingOverviewGrid.element.classList.add("hidden");
-                this.viewsContainer.classList.remove("reserve-80px-at-top");
-            }
         }
     },
 
@@ -576,7 +552,7 @@
         var view = this.views[this.views.current];
         this.currentView = view.view;
         this.dataGrid = view.grid;
-        this.currentView.show(this.viewsContainer);
+        this.currentView.show(this.viewsContainer.mainElement());
         this.refreshVisibleData();
         this.dataGrid.updateWidths();
 
@@ -608,49 +584,11 @@
 
     _resolveObjectForPopover: function(element, showCallback, objectGroupName)
     {
-        if (this.profile.fromFile())
+        if (this._profile.fromFile())
             return;
         element.node.queryObjectContent(showCallback, objectGroupName);
     },
 
-    /**
-     * @return {boolean}
-     */
-    _startRetainersHeaderDragging: function(event)
-    {
-        if (!this.isShowing())
-            return false;
-
-        this._previousDragPosition = event.pageY;
-        return true;
-    },
-
-    _retainersHeaderDragging: function(event)
-    {
-        var height = this.retainmentView.element.clientHeight;
-        height += this._previousDragPosition - event.pageY;
-        this._previousDragPosition = event.pageY;
-        this._updateRetainmentViewHeight(height);
-        event.consume(true);
-    },
-
-    _endRetainersHeaderDragging: function(event)
-    {
-        delete this._previousDragPosition;
-        event.consume();
-    },
-
-    _updateRetainmentViewHeight: function(height)
-    {
-        height = Number.constrain(height, Preferences.minConsoleHeight, this.element.clientHeight - Preferences.minConsoleHeight);
-        this.viewsContainer.style.bottom = (height + this.retainmentViewHeader.clientHeight) + "px";
-        if (this._trackingOverviewGrid && this.currentView === this.constructorsView)
-            this.viewsContainer.classList.add("reserve-80px-at-top");
-        this.retainmentView.element.style.height = height + "px";
-        this.retainmentViewHeader.style.bottom = height + "px";
-        this.currentView.doResize();
-    },
-
     _updateBaseOptions: function()
     {
         var list = this._profiles();
@@ -668,31 +606,49 @@
     {
         var list = this._profiles();
         // We're assuming that snapshots can only be added.
-        if (this.filterSelect.size() - 1 === list.length)
+        if (this._filterSelect.size() - 1 === list.length)
             return;
 
-        if (!this.filterSelect.size())
-            this.filterSelect.createOption(WebInspector.UIString("All objects"));
+        if (!this._filterSelect.size())
+            this._filterSelect.createOption(WebInspector.UIString("All objects"));
 
-        for (var i = this.filterSelect.size() - 1, n = list.length; i < n; ++i) {
+        for (var i = this._filterSelect.size() - 1, n = list.length; i < n; ++i) {
             var title = list[i].title;
             if (!i)
                 title = WebInspector.UIString("Objects allocated before %s", title);
             else
                 title = WebInspector.UIString("Objects allocated between %s and %s", list[i - 1].title, title);
-            this.filterSelect.createOption(title);
+            this._filterSelect.createOption(title);
         }
     },
 
+    _updateControls: function()
+    {
+        this._updateBaseOptions();
+        this._updateFilterOptions();
+    },
+
     /**
      * @param {!WebInspector.Event} event
      */
-    _onProfileHeaderAdded: function(event)
+    _onReceivSnapshot: function(event)
     {
-        if (!event.data || event.data.type !== this._profile.profileType().id)
-            return;
-        this._updateBaseOptions();
-        this._updateFilterOptions();
+        this._updateControls();
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _onProfileHeaderRemoved: function(event)
+    {
+        var profile = event.data;
+        if (this._profile === profile) {
+            this.detach();
+            this._profile.profileType().removeEventListener(WebInspector.ProfileType.Events.AddProfileHeader, this._onReceivSnapshot, this);
+            this._profile.profileType().removeEventListener(WebInspector.ProfileType.Events.RemoveProfileHeader, this._onProfileHeaderRemoved, this);
+        } else {
+            this._updateControls();
+        }
     },
 
     __proto__: WebInspector.View.prototype
@@ -744,19 +700,10 @@
     },
 
     /**
-     * @param {!HeapProfilerAgent.ProfileHeader} profileHeader
-     */
-    addProfileHeader: function(profileHeader)
-    {
-        this._genericCaller("addProfileHeader");
-    },
-
-    /**
      * @override
-     * @param {number} uid
      * @param {string} chunk
      */
-    addHeapSnapshotChunk: function(uid, chunk)
+    addHeapSnapshotChunk: function(chunk)
     {
         this._genericCaller("addHeapSnapshotChunk");
     },
@@ -765,8 +712,9 @@
      * @override
      * @param {number} done
      * @param {number} total
+     * @param {boolean=} finished
      */
-    reportHeapSnapshotProgress: function(done, total)
+    reportHeapSnapshotProgress: function(done, total, finished)
     {
         this._genericCaller("reportHeapSnapshotProgress");
     },
@@ -786,10 +734,12 @@
  * @constructor
  * @extends {WebInspector.ProfileType}
  * @implements {HeapProfilerAgent.Dispatcher}
+ * @param {string=} id
+ * @param {string=} title
  */
-WebInspector.HeapSnapshotProfileType = function()
+WebInspector.HeapSnapshotProfileType = function(id, title)
 {
-    WebInspector.ProfileType.call(this, WebInspector.HeapSnapshotProfileType.TypeId, WebInspector.UIString("Take Heap Snapshot"));
+    WebInspector.ProfileType.call(this, id || WebInspector.HeapSnapshotProfileType.TypeId, title || WebInspector.UIString("Take Heap Snapshot"));
     WebInspector.HeapProfilerDispatcher._dispatcher.register(this);
 }
 
@@ -872,58 +822,51 @@
     {
         if (this.profileBeingRecorded())
             return;
-        this._profileBeingRecorded = new WebInspector.HeapProfileHeader(this, WebInspector.UIString("Snapshotting\u2026"));
+        this._profileBeingRecorded = new WebInspector.HeapProfileHeader(this);
         this.addProfile(this._profileBeingRecorded);
-        HeapProfilerAgent.takeHeapSnapshot(true, callback);
-    },
+        this._profileBeingRecorded.updateStatus(WebInspector.UIString("Snapshotting\u2026"));
 
-    /**
-     * @param {!HeapProfilerAgent.ProfileHeader} profileHeader
-     */
-    addProfileHeader: function(profileHeader)
-    {
-        var profile = this.profileBeingRecorded();
-        if (!profile)
-            return;
-        profile.title = profileHeader.title;
-        profile.uid = profileHeader.uid;
-        profile.maxJSObjectId = profileHeader.maxJSObjectId || 0;
-
-        profile.sidebarElement.mainTitle = profile.title;
-        profile.sidebarElement.subtitle = "";
-        profile.sidebarElement.wait = false;
-
-        this._profileSamples = null;
-        this._profileBeingRecorded = null;
-
-        WebInspector.panels.profiles._showProfile(profile);
-        profile.existingView()._refreshView();
+        /**
+         * @param {?string} error
+         * @this {WebInspector.HeapSnapshotProfileType}
+         */
+        function didTakeHeapSnapshot(error)
+        {
+            var profile = this._profileBeingRecorded;
+            profile.title = WebInspector.UIString("Snapshot %d", profile.uid);
+            profile._finishLoad();
+            this._profileBeingRecorded = null;
+            WebInspector.panels.profiles.showProfile(profile);
+            callback();
+        }
+        HeapProfilerAgent.takeHeapSnapshot(true, didTakeHeapSnapshot.bind(this));
     },
 
     /**
      * @override
-     * @param {number} uid
      * @param {string} chunk
      */
-    addHeapSnapshotChunk: function(uid, chunk)
+    addHeapSnapshotChunk: function(chunk)
     {
-        var profile = this.getProfile(uid);
-        if (profile)
-            profile.transferChunk(chunk);
+        if (!this.profileBeingRecorded())
+            return;
+        this.profileBeingRecorded().transferChunk(chunk);
     },
 
     /**
      * @override
      * @param {number} done
      * @param {number} total
+     * @param {boolean=} finished
      */
-    reportHeapSnapshotProgress: function(done, total)
+    reportHeapSnapshotProgress: function(done, total, finished)
     {
         var profile = this.profileBeingRecorded();
         if (!profile)
             return;
-        profile.sidebarElement.subtitle = WebInspector.UIString("%.0f%", (done / total) * 100);
-        profile.sidebarElement.wait = true;
+        profile.updateStatus(WebInspector.UIString("%.0f%", (done / total) * 100), true);
+        if (finished)
+            profile._prepareToLoad();
     },
 
     /**
@@ -934,17 +877,6 @@
         this._reset();
     },
 
-    /**
-     * @override
-     * @param {!WebInspector.ProfileHeader} profile
-     */
-    removeProfile: function(profile)
-    {
-        if (this._profileBeingRecorded !== profile && !profile.fromFile())
-            HeapProfilerAgent.removeProfile(profile.uid);
-        WebInspector.ProfileType.prototype.removeProfile.call(this, profile);
-    },
-
     _snapshotReceived: function(profile)
     {
         if (this._profileBeingRecorded === profile)
@@ -959,13 +891,10 @@
 /**
  * @constructor
  * @extends {WebInspector.HeapSnapshotProfileType}
- * @param {!WebInspector.ProfilesPanel} profilesPanel
  */
-WebInspector.TrackingHeapSnapshotProfileType = function(profilesPanel)
+WebInspector.TrackingHeapSnapshotProfileType = function()
 {
-    WebInspector.ProfileType.call(this, WebInspector.TrackingHeapSnapshotProfileType.TypeId, WebInspector.UIString("Record Heap Allocations"));
-    this._profilesPanel = profilesPanel;
-    WebInspector.HeapProfilerDispatcher._dispatcher.register(this);
+    WebInspector.HeapSnapshotProfileType.call(this, WebInspector.TrackingHeapSnapshotProfileType.TypeId, WebInspector.UIString("Record Heap Allocations"));
 }
 
 WebInspector.TrackingHeapSnapshotProfileType.TypeId = "HEAP-RECORD";
@@ -1016,10 +945,7 @@
         if (profileSamples.totalTime < timestamp - profileSamples.timestamps[0])
             profileSamples.totalTime *= 2;
         this.dispatchEventToListeners(WebInspector.TrackingHeapSnapshotProfileType.HeapStatsUpdate, this._profileSamples);
-        var profile = this._profileBeingRecorded;
-        profile.sidebarElement.wait = true;
-        if (profile.sidebarElement && !profile.sidebarElement.wait)
-            profile.sidebarElement.wait = true;
+        this._profileBeingRecorded.updateStatus(null, true);
     },
 
     /**
@@ -1058,7 +984,7 @@
     {
         if (this.profileBeingRecorded())
             return;
-        this._profileBeingRecorded = new WebInspector.HeapProfileHeader(this, WebInspector.UIString("Recording\u2026"));
+        this._profileBeingRecorded = new WebInspector.HeapProfileHeader(this);
         this._lastSeenIndex = -1;
         this._profileSamples = {
             'sizes': [],
@@ -1070,13 +996,28 @@
         this._profileBeingRecorded._profileSamples = this._profileSamples;
         this._recording = true;
         this.addProfile(this._profileBeingRecorded);
-        HeapProfilerAgent.startTrackingHeapObjects();
+        this._profileBeingRecorded.updateStatus(WebInspector.UIString("Recording\u2026"));
+        HeapProfilerAgent.startTrackingHeapObjects(WebInspector.experimentsSettings.allocationProfiler.isEnabled());
         this.dispatchEventToListeners(WebInspector.TrackingHeapSnapshotProfileType.TrackingStarted);
     },
 
     _stopRecordingProfile: function()
     {
-        HeapProfilerAgent.stopTrackingHeapObjects(true);
+        var profile = this._profileBeingRecorded;
+        profile.updateStatus(WebInspector.UIString("Snapshotting\u2026"));
+        /**
+         * @param {?string} error
+         * @this {WebInspector.HeapSnapshotProfileType}
+         */
+        function didTakeHeapSnapshot(error)
+        {
+            profile._finishLoad();
+            this._profileSamples = null;
+            this._profileBeingRecorded = null;
+            WebInspector.panels.profiles.showProfile(profile);
+        }
+
+        HeapProfilerAgent.stopTrackingHeapObjects(true, didTakeHeapSnapshot.bind(this));
         this._recording = false;
         this.dispatchEventToListeners(WebInspector.TrackingHeapSnapshotProfileType.TrackingStopped);
     },
@@ -1109,21 +1050,32 @@
         this._lastSeenIndex = -1;
     },
 
+    /**
+     * @override
+     */
+    profileBeingRecordedRemoved: function()
+    {
+        this._stopRecordingProfile();
+        this._profileSamples = null;
+    },
+
     __proto__: WebInspector.HeapSnapshotProfileType.prototype
 }
 
 /**
  * @constructor
  * @extends {WebInspector.ProfileHeader}
- * @param {!WebInspector.ProfileType} type
- * @param {string} title
- * @param {number=} uid
- * @param {number=} maxJSObjectId
+ * @param {!WebInspector.HeapSnapshotProfileType} type
+ * @param {string=} title
  */
-WebInspector.HeapProfileHeader = function(type, title, uid, maxJSObjectId)
+WebInspector.HeapProfileHeader = function(type, title)
 {
-    WebInspector.ProfileHeader.call(this, type, title, uid);
-    this.maxJSObjectId = maxJSObjectId;
+    WebInspector.ProfileHeader.call(this, type, title || WebInspector.UIString("Snapshot %d", type._nextProfileUid));
+    this.maxJSObjectId = -1;
+    /**
+     * @type {?WebInspector.HeapSnapshotWorkerProxy}
+     */
+    this._workerProxy = null;
     /**
      * @type {?WebInspector.OutputStream}
      */
@@ -1132,13 +1084,18 @@
      * @type {?WebInspector.HeapSnapshotProxy}
      */
     this._snapshotProxy = null;
+    /**
+     * @type {?Array.<function(!WebInspector.HeapSnapshotProxy)>}
+     */
+    this._loadCallbacks = [];
     this._totalNumberOfChunks = 0;
-    this._transferHandler = null;
+    this._bufferedWriter = null;
 }
 
 WebInspector.HeapProfileHeader.prototype = {
     /**
      * @override
+     * @return {!WebInspector.ProfileSidebarTreeElement}
      */
     createSidebarTreeElement: function()
     {
@@ -1147,11 +1104,11 @@
 
     /**
      * @override
-     * @param {!WebInspector.ProfilesPanel} profilesPanel
+     * @return {!WebInspector.HeapSnapshotView}
      */
-    createView: function(profilesPanel)
+    createView: function()
     {
-        return new WebInspector.HeapSnapshotView(profilesPanel, this);
+        return new WebInspector.HeapSnapshotView(this);
     },
 
     /**
@@ -1166,53 +1123,49 @@
             callback(this._snapshotProxy);
             return;
         }
+        this._loadCallbacks.push(callback);
+    },
 
-        this._numberOfChunks = 0;
-        if (!this._receiver) {
-            this._setupWorker();
-            this._transferHandler = new WebInspector.BackendSnapshotLoader(this);
-            this.sidebarElement.subtitle = WebInspector.UIString("Loading\u2026");
-            this.sidebarElement.wait = true;
-            this._transferSnapshot();
+    _prepareToLoad: function()
+    {
+        console.assert(!this._receiver, "Already loading");
+        this._setupWorker();
+        this.updateStatus(WebInspector.UIString("Loading\u2026"), true);
+    },
+
+    _finishLoad: function()
+    {
+        this._receiver.close(function() {});
+        if (this._bufferedWriter) {
+            this._bufferedWriter.close(this._didWriteToTempFile.bind(this));
+            this._bufferedWriter = null;
         }
-        var loaderProxy = /** @type {?WebInspector.HeapSnapshotLoaderProxy} */ (this._receiver);
-        console.assert(loaderProxy);
-        loaderProxy.addConsumer(callback);
     },
 
-    _transferSnapshot: function()
+    _didWriteToTempFile: function(tempFile)
     {
-        function finishTransfer()
-        {
-            if (this._transferHandler) {
-                this._transferHandler.finishTransfer();
-                this._totalNumberOfChunks = this._transferHandler._totalNumberOfChunks;
-            }
+        this._tempFile = tempFile;
+        if (!tempFile)
+            this._failedToCreateTempFile = true;
+        if (this._onTempFileReady) {
+            this._onTempFileReady();
+            this._onTempFileReady = null;
         }
-        HeapProfilerAgent.getHeapSnapshot(this.uid, finishTransfer.bind(this));
-    },
-
-    snapshotConstructorName: function()
-    {
-        return "JSHeapSnapshot";
-    },
-
-    snapshotProxyConstructor: function()
-    {
-        return WebInspector.HeapSnapshotProxy;
     },
 
     _setupWorker: function()
     {
+        /**
+         * @this {WebInspector.HeapProfileHeader}
+         */
         function setProfileWait(event)
         {
-            this.sidebarElement.wait = event.data;
+            this.updateStatus(null, event.data);
         }
-        var worker = new WebInspector.HeapSnapshotWorkerProxy(this._handleWorkerEvent.bind(this));
-        worker.addEventListener("wait", setProfileWait, this);
-        var loaderProxy = worker.createLoader(this.snapshotConstructorName(), this.snapshotProxyConstructor());
-        loaderProxy.addConsumer(this._snapshotReceived.bind(this));
-        this._receiver = loaderProxy;
+        console.assert(!this._workerProxy, "HeapSnapshotWorkerProxy already exists");
+        this._workerProxy = new WebInspector.HeapSnapshotWorkerProxy(this._handleWorkerEvent.bind(this));
+        this._workerProxy.addEventListener("wait", setProfileWait, this);
+        this._receiver = this._workerProxy.createLoader(this.uid, this._snapshotReceived.bind(this));
     },
 
     /**
@@ -1221,9 +1174,10 @@
      */
     _handleWorkerEvent: function(eventName, data)
     {
-        if (WebInspector.HeapSnapshotProgress.Event.Update !== eventName)
+        if (WebInspector.HeapSnapshotProgressEvent.Update !== eventName)
             return;
-        this._updateSubtitle(data);
+        var subtitle = /** @type {string} */ (data);
+        this.updateStatus(subtitle);
     },
 
     /**
@@ -1231,26 +1185,17 @@
      */
     dispose: function()
     {
-        if (this._receiver)
-            this._receiver.close();
-        else if (this._snapshotProxy)
-            this._snapshotProxy.dispose();
-        if (this._view) {
-            var view = this._view;
-            this._view = null;
-            view.dispose();
-        }
-    },
-
-    _updateSubtitle: function(value)
-    {
-        this.sidebarElement.subtitle = value;
+        if (this._workerProxy)
+            this._workerProxy.dispose();
+        this.removeTempFile();
+        this._wasDisposed = true;
     },
 
     _didCompleteSnapshotTransfer: function()
     {
-        this.sidebarElement.subtitle = Number.bytesToString(this._snapshotProxy.totalSize);
-        this.sidebarElement.wait = false;
+        if (!this._snapshotProxy)
+            return;
+        this.updateStatus(Number.bytesToString(this._snapshotProxy.totalSize), false);
     },
 
     /**
@@ -1258,31 +1203,34 @@
      */
     transferChunk: function(chunk)
     {
-        this._transferHandler.transferChunk(chunk);
+        if (!this._bufferedWriter)
+            this._bufferedWriter = new WebInspector.BufferedTempFileWriter("heap-profiler", this.uid);
+        this._bufferedWriter.write(chunk);
+
+        ++this._totalNumberOfChunks;
+        this._receiver.write(chunk, function() {});
     },
 
     _snapshotReceived: function(snapshotProxy)
     {
+        if (this._wasDisposed)
+            return;
         this._receiver = null;
-        if (snapshotProxy)
-            this._snapshotProxy = snapshotProxy;
+        this._snapshotProxy = snapshotProxy;
+        this.maxJSObjectId = snapshotProxy.maxJSObjectId();
         this._didCompleteSnapshotTransfer();
-        var worker = /** @type {!WebInspector.HeapSnapshotWorkerProxy} */ (this._snapshotProxy.worker);
-        worker.startCheckingForLongRunningCalls();
+        this._workerProxy.startCheckingForLongRunningCalls();
         this.notifySnapshotReceived();
-
-        function didGetMaxNodeId(id)
-        {
-           this.maxJSObjectId = id;
-        }
-
-        if (this.fromFile())
-            snapshotProxy.maxJsNodeId(didGetMaxNodeId.bind(this));
     },
 
     notifySnapshotReceived: function()
     {
+        for (var i = 0; i < this._loadCallbacks.length; i++)
+            this._loadCallbacks[i](this._snapshotProxy);
+        this._loadCallbacks = null;
         this._profileType._snapshotReceived(this);
+        if (this.canSaveToFile())
+            this.dispatchEventToListeners(WebInspector.ProfileHeader.Events.ProfileReceived);
     },
 
     // Hook point for tests.
@@ -1296,7 +1244,7 @@
      */
     canSaveToFile: function()
     {
-        return !this.fromFile() && !!this._snapshotProxy && !this._receiver;
+        return !this.fromFile() && this._snapshotProxy;
     },
 
     /**
@@ -1308,29 +1256,42 @@
 
         /**
          * @param {boolean} accepted
+         * @this {WebInspector.HeapProfileHeader}
          */
         function onOpen(accepted)
         {
             if (!accepted)
                 return;
-            this._receiver = fileOutputStream;
-            this._transferHandler = new WebInspector.SaveSnapshotHandler(this);
-            this._transferSnapshot();
+            if (this._failedToCreateTempFile) {
+                WebInspector.log("Failed to open temp file with heap snapshot",
+                                 WebInspector.ConsoleMessage.MessageLevel.Error);
+                fileOutputStream.close();
+            } else if (this._tempFile) {
+                var delegate = new WebInspector.SaveSnapshotOutputStreamDelegate(this);
+                this._tempFile.writeToOutputSteam(fileOutputStream, delegate);
+            } else {
+                this._onTempFileReady = onOpen.bind(this, accepted);
+                this._updateSaveProgress(0, 1);
+            }
         }
         this._fileName = this._fileName || "Heap-" + new Date().toISO8601Compact() + this._profileType.fileExtension();
         fileOutputStream.open(this._fileName, onOpen.bind(this));
     },
 
+    _updateSaveProgress: function(value, total)
+    {
+        var percentValue = ((total ? (value / total) : 0) * 100).toFixed(0);
+        this.updateStatus(WebInspector.UIString("Saving\u2026 %d\%", percentValue));
+    },
+
     /**
      * @override
      * @param {!File} file
      */
     loadFromFile: function(file)
     {
-        this.sidebarElement.subtitle = WebInspector.UIString("Loading\u2026");
-        this.sidebarElement.wait = true;
+        this.updateStatus(WebInspector.UIString("Loading\u2026"), true);
         this._setupWorker();
-
         var delegate = new WebInspector.HeapSnapshotLoadFromFileDelegate(this);
         var fileReader = this._createFileReader(file, delegate);
         fileReader.start(this._receiver);
@@ -1344,102 +1305,6 @@
     __proto__: WebInspector.ProfileHeader.prototype
 }
 
-
-/**
- * @constructor
- * @param {!WebInspector.HeapProfileHeader} header
- * @param {string} title
- */
-WebInspector.SnapshotTransferHandler = function(header, title)
-{
-    this._numberOfChunks = 0;
-    this._savedChunks = 0;
-    this._header = header;
-    this._totalNumberOfChunks = 0;
-    this._title = title;
-}
-
-
-WebInspector.SnapshotTransferHandler.prototype = {
-    /**
-     * @param {string} chunk
-     */
-    transferChunk: function(chunk)
-    {
-        ++this._numberOfChunks;
-        this._header._receiver.write(chunk, this._didTransferChunk.bind(this));
-    },
-
-    finishTransfer: function()
-    {
-    },
-
-    _didTransferChunk: function()
-    {
-        this._updateProgress(++this._savedChunks, this._totalNumberOfChunks);
-    },
-
-    _updateProgress: function(value, total)
-    {
-    }
-}
-
-
-/**
- * @constructor
- * @param {!WebInspector.HeapProfileHeader} header
- * @extends {WebInspector.SnapshotTransferHandler}
- */
-WebInspector.SaveSnapshotHandler = function(header)
-{
-    WebInspector.SnapshotTransferHandler.call(this, header, "Saving\u2026 %d\%");
-    this._totalNumberOfChunks = header._totalNumberOfChunks;
-    this._updateProgress(0, this._totalNumberOfChunks);
-}
-
-
-WebInspector.SaveSnapshotHandler.prototype = {
-    _updateProgress: function(value, total)
-    {
-        var percentValue = ((total ? (value / total) : 0) * 100).toFixed(0);
-        this._header._updateSubtitle(WebInspector.UIString(this._title, percentValue));
-        if (value === total) {
-            this._header._receiver.close();
-            this._header._didCompleteSnapshotTransfer();
-        }
-    },
-
-    __proto__: WebInspector.SnapshotTransferHandler.prototype
-}
-
-
-/**
- * @constructor
- * @param {!WebInspector.HeapProfileHeader} header
- * @extends {WebInspector.SnapshotTransferHandler}
- */
-WebInspector.BackendSnapshotLoader = function(header)
-{
-    WebInspector.SnapshotTransferHandler.call(this, header, "Loading\u2026 %d\%");
-}
-
-
-WebInspector.BackendSnapshotLoader.prototype = {
-    finishTransfer: function()
-    {
-        this._header._receiver.close(this._didFinishTransfer.bind(this));
-        this._totalNumberOfChunks = this._numberOfChunks;
-    },
-
-    _didFinishTransfer: function()
-    {
-        console.assert(this._totalNumberOfChunks === this._savedChunks, "Not all chunks were transfered.");
-    },
-
-    __proto__: WebInspector.SnapshotTransferHandler.prototype
-}
-
-
 /**
  * @constructor
  * @implements {WebInspector.OutputStreamDelegate}
@@ -1470,18 +1335,60 @@
      */
     onError: function (reader, e)
     {
+        var subtitle;
         switch(e.target.error.code) {
         case e.target.error.NOT_FOUND_ERR:
-            this._snapshotHeader._updateSubtitle(WebInspector.UIString("'%s' not found.", reader.fileName()));
-        break;
-        case e.target.error.NOT_READABLE_ERR:
-            this._snapshotHeader._updateSubtitle(WebInspector.UIString("'%s' is not readable", reader.fileName()));
-        break;
-        case e.target.error.ABORT_ERR:
+            subtitle = WebInspector.UIString("'%s' not found.", reader.fileName());
             break;
+        case e.target.error.NOT_READABLE_ERR:
+            subtitle = WebInspector.UIString("'%s' is not readable", reader.fileName());
+            break;
+        case e.target.error.ABORT_ERR:
+            return;
         default:
-            this._snapshotHeader._updateSubtitle(WebInspector.UIString("'%s' error %d", reader.fileName(), e.target.error.code));
+            subtitle = WebInspector.UIString("'%s' error %d", reader.fileName(), e.target.error.code);
         }
+        this._snapshotHeader.updateStatus(subtitle);
+    }
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.OutputStreamDelegate}
+ * @param {!WebInspector.HeapProfileHeader} profileHeader
+ */
+WebInspector.SaveSnapshotOutputStreamDelegate = function(profileHeader)
+{
+    this._profileHeader = profileHeader;
+}
+
+WebInspector.SaveSnapshotOutputStreamDelegate.prototype = {
+    onTransferStarted: function()
+    {
+        this._profileHeader._updateSaveProgress(0, 1);
+    },
+
+    onTransferFinished: function()
+    {
+        this._profileHeader._didCompleteSnapshotTransfer();
+    },
+
+    /**
+     * @param {!WebInspector.ChunkedReader} reader
+     */
+    onChunkTransferred: function(reader)
+    {
+        this._profileHeader._updateSaveProgress(reader.loadedSize(), reader.fileSize());
+    },
+
+    /**
+     * @param {!WebInspector.ChunkedReader} reader
+     */
+    onError: function(reader, event)
+    {
+        WebInspector.log("Failed to read heap snapshot from temp file: " + event.message,
+                         WebInspector.ConsoleMessage.MessageLevel.Error);
+        this.onTransferFinished();
     }
 }
 
@@ -1495,6 +1402,7 @@
     WebInspector.View.call(this);
     this.registerRequiredCSS("flameChart.css");
     this.element.id = "heap-recording-view";
+    this.element.classList.add("heap-tracking-overview");
 
     this._overviewContainer = this.element.createChild("div", "overview-container");
     this._overviewGrid = new WebInspector.OverviewGrid("heap-recording");
@@ -1790,6 +1698,7 @@
 
     /**
      * @param {number} time
+     * @return {number}
      */
     computePosition: function(time)
     {
@@ -1806,21 +1715,33 @@
         return Number.secondsToString((value + this._minimumBoundaries) / 1000, hires);
     },
 
+    /**
+     * @return {number}
+     */
     maximumBoundary: function()
     {
         return this._maximumBoundaries;
     },
 
+    /**
+     * @return {number}
+     */
     minimumBoundary: function()
     {
         return this._minimumBoundaries;
     },
 
+    /**
+     * @return {number}
+     */
     zeroTime: function()
     {
         return this._minimumBoundaries;
     },
 
+    /**
+     * @return {number}
+     */
     boundarySpan: function()
     {
         return this._maximumBoundaries - this._minimumBoundaries;
diff --git a/Source/devtools/front_end/HeapSnapshotWorker.js b/Source/devtools/front_end/HeapSnapshotWorker.js
index aadd6cf..bec04b3 100644
--- a/Source/devtools/front_end/HeapSnapshotWorker.js
+++ b/Source/devtools/front_end/HeapSnapshotWorker.js
@@ -29,14 +29,14 @@
  */
 
 WebInspector = {};
-WebInspector.UIString = function(s) { return s; };
 
 importScripts("AllocationProfile.js");
 importScripts("HeapSnapshot.js");
+importScripts("HeapSnapshotCommon.js");
 importScripts("HeapSnapshotLoader.js");
 importScripts("HeapSnapshotWorkerDispatcher.js");
 importScripts("JSHeapSnapshot.js");
-importScripts("FileUtils.js");
+importScripts("TextUtils.js");
 importScripts("UIString.js");
 importScripts("utilities.js");
 
diff --git a/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js b/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js
index 3c17c89..4f3daa7 100644
--- a/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js
+++ b/Source/devtools/front_end/HeapSnapshotWorkerDispatcher.js
@@ -59,7 +59,7 @@
 
     dispatchMessage: function(event)
     {
-        var data = event.data;
+        var data = /** @type {!WebInspector.HeapSnapshotCommon.WorkerCommand } */(event.data);
         var response = {callId: data.callId};
         try {
             switch (data.disposition) {
@@ -91,6 +91,14 @@
                     response.result = object[data.methodName].apply(object, data.methodArguments);
                     break;
                 }
+                case "evaluateForTest": {
+                    try {
+                        response.result = eval(data.source)
+                    } catch (e) {
+                        response.result = e.toString();
+                    }
+                    break;
+                }
             }
         } catch (e) {
             response.error = e.toString();
diff --git a/Source/devtools/front_end/HelpScreen.js b/Source/devtools/front_end/HelpScreen.js
index 36f2425..5c3f227 100644
--- a/Source/devtools/front_end/HelpScreen.js
+++ b/Source/devtools/front_end/HelpScreen.js
@@ -39,7 +39,7 @@
     this.markAsRoot();
     this.registerRequiredCSS("helpScreen.css");
 
-    this.element.className = "help-window-outer";
+    this.element.classList.add("help-window-outer");
     this.element.addEventListener("keydown", this._onKeyDown.bind(this), false);
     this.element.tabIndex = 0;
 
@@ -88,7 +88,7 @@
         if (visibleHelpScreen)
             visibleHelpScreen.hide();
         WebInspector.HelpScreen._visibleScreen = this;
-        this.show(document.body);
+        this.show(WebInspector.inspectorView.devtoolsElement());
         this.focus();
     },
 
@@ -129,29 +129,19 @@
 
 /**
  * @constructor
- * @param {string=} title
- * @param {string=} message
  * @extends {WebInspector.HelpScreen}
  */
-WebInspector.HelpScreenUntilReload = function(title, message)
+WebInspector.RemoteDebuggingTerminatedScreen = function(reason)
 {
-    WebInspector.HelpScreen.call(this, title);
+    WebInspector.HelpScreen.call(this, WebInspector.UIString("Detached from the target"));
     var p = this.contentElement.createChild("p");
     p.classList.add("help-section");
-    p.textContent = message;
-    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this.hide, this);
+    p.createChild("span").textContent = WebInspector.UIString("Remote debugging has been terminated with reason: ");
+    p.createChild("span", "error-message").textContent = reason;
+    p.createChild("br");
+    p.createChild("span").textContent = WebInspector.UIString("Please re-attach to the new target.");
 }
 
-WebInspector.HelpScreenUntilReload.prototype = {
-    /**
-     * @override
-     */
-    willHide: function()
-    {
-        WebInspector.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this.hide, this);
-        WebInspector.HelpScreen.prototype.willHide.call(this);
-    },
-
+WebInspector.RemoteDebuggingTerminatedScreen.prototype = {
     __proto__: WebInspector.HelpScreen.prototype
 }
-
diff --git a/Source/devtools/front_end/HelpScreenUntilReload.js b/Source/devtools/front_end/HelpScreenUntilReload.js
new file mode 100644
index 0000000..44bc479
--- /dev/null
+++ b/Source/devtools/front_end/HelpScreenUntilReload.js
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+/**
+ * @constructor
+ * @param {string=} title
+ * @param {string=} message
+ * @extends {WebInspector.HelpScreen}
+ */
+WebInspector.HelpScreenUntilReload = function(title, message)
+{
+    WebInspector.HelpScreen.call(this, title);
+    var p = this.contentElement.createChild("p");
+    p.classList.add("help-section");
+    p.textContent = message;
+    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this.hide, this);
+}
+
+WebInspector.HelpScreenUntilReload.prototype = {
+    /**
+     * @override
+     */
+    willHide: function()
+    {
+        WebInspector.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this.hide, this);
+        WebInspector.HelpScreen.prototype.willHide.call(this);
+    },
+
+    __proto__: WebInspector.HelpScreen.prototype
+}
diff --git a/Source/devtools/front_end/ImageView.js b/Source/devtools/front_end/ImageView.js
index 6f46fe9..71199a0 100644
--- a/Source/devtools/front_end/ImageView.js
+++ b/Source/devtools/front_end/ImageView.js
@@ -38,6 +38,9 @@
 }
 
 WebInspector.ImageView.prototype = {
+    /**
+     * @return {boolean}
+     */
     hasContent: function()
     {
         return true;
@@ -76,6 +79,9 @@
 
         this.resource.populateImageSource(imagePreviewElement);
 
+        /**
+         * @this {WebInspector.ImageView}
+         */
         function onImageLoad()
         {
             var content = this.resource.content;
diff --git a/Source/devtools/front_end/Images/breakpoint.png b/Source/devtools/front_end/Images/breakpoint.png
new file mode 100644
index 0000000..1eaea29
--- /dev/null
+++ b/Source/devtools/front_end/Images/breakpoint.png
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpoint2.png b/Source/devtools/front_end/Images/breakpoint2.png
deleted file mode 100644
index 6d87745..0000000
--- a/Source/devtools/front_end/Images/breakpoint2.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpoint2_2x.png b/Source/devtools/front_end/Images/breakpoint2_2x.png
deleted file mode 100644
index f77370d..0000000
--- a/Source/devtools/front_end/Images/breakpoint2_2x.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpointBorder.png b/Source/devtools/front_end/Images/breakpointBorder.png
deleted file mode 100644
index f15e02f..0000000
--- a/Source/devtools/front_end/Images/breakpointBorder.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpointConditional.png b/Source/devtools/front_end/Images/breakpointConditional.png
new file mode 100644
index 0000000..8a22283
--- /dev/null
+++ b/Source/devtools/front_end/Images/breakpointConditional.png
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpointConditional2.png b/Source/devtools/front_end/Images/breakpointConditional2.png
deleted file mode 100644
index 87bbc0e..0000000
--- a/Source/devtools/front_end/Images/breakpointConditional2.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpointConditional2_2x.png b/Source/devtools/front_end/Images/breakpointConditional2_2x.png
deleted file mode 100644
index e2aa575..0000000
--- a/Source/devtools/front_end/Images/breakpointConditional2_2x.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpointConditionalBorder.png b/Source/devtools/front_end/Images/breakpointConditionalBorder.png
deleted file mode 100644
index 4bd5806..0000000
--- a/Source/devtools/front_end/Images/breakpointConditionalBorder.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpointConditionalCounterBorder.png b/Source/devtools/front_end/Images/breakpointConditionalCounterBorder.png
deleted file mode 100644
index 897b7a0..0000000
--- a/Source/devtools/front_end/Images/breakpointConditionalCounterBorder.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpointConditional_2x.png b/Source/devtools/front_end/Images/breakpointConditional_2x.png
new file mode 100644
index 0000000..851adfc
--- /dev/null
+++ b/Source/devtools/front_end/Images/breakpointConditional_2x.png
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpointCounterBorder.png b/Source/devtools/front_end/Images/breakpointCounterBorder.png
deleted file mode 100644
index 0b3ea14..0000000
--- a/Source/devtools/front_end/Images/breakpointCounterBorder.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/breakpoint_2x.png b/Source/devtools/front_end/Images/breakpoint_2x.png
new file mode 100644
index 0000000..a227bac
--- /dev/null
+++ b/Source/devtools/front_end/Images/breakpoint_2x.png
Binary files differ
diff --git a/Source/devtools/front_end/Images/glossyHeader.png b/Source/devtools/front_end/Images/glossyHeader.png
deleted file mode 100644
index 6b77999..0000000
--- a/Source/devtools/front_end/Images/glossyHeader.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/glossyHeaderPressed.png b/Source/devtools/front_end/Images/glossyHeaderPressed.png
deleted file mode 100644
index 9a64b7c..0000000
--- a/Source/devtools/front_end/Images/glossyHeaderPressed.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/glossyHeaderSelected.png b/Source/devtools/front_end/Images/glossyHeaderSelected.png
deleted file mode 100644
index f7d615c..0000000
--- a/Source/devtools/front_end/Images/glossyHeaderSelected.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/glossyHeaderSelectedPressed.png b/Source/devtools/front_end/Images/glossyHeaderSelectedPressed.png
deleted file mode 100644
index 75d37fb..0000000
--- a/Source/devtools/front_end/Images/glossyHeaderSelectedPressed.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/namedFlowOverflow.png b/Source/devtools/front_end/Images/namedFlowOverflow.png
deleted file mode 100644
index f966b1a..0000000
--- a/Source/devtools/front_end/Images/namedFlowOverflow.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/programCounterBorder.png b/Source/devtools/front_end/Images/programCounterBorder.png
deleted file mode 100644
index 10b0250..0000000
--- a/Source/devtools/front_end/Images/programCounterBorder.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/regionEmpty.png b/Source/devtools/front_end/Images/regionEmpty.png
deleted file mode 100644
index ed64c22..0000000
--- a/Source/devtools/front_end/Images/regionEmpty.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/regionFit.png b/Source/devtools/front_end/Images/regionFit.png
deleted file mode 100644
index 90d4d50..0000000
--- a/Source/devtools/front_end/Images/regionFit.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/regionOverset.png b/Source/devtools/front_end/Images/regionOverset.png
deleted file mode 100644
index 0738f1b..0000000
--- a/Source/devtools/front_end/Images/regionOverset.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/settingsListRemove.png b/Source/devtools/front_end/Images/settingsListRemove.png
index 315daab..1c30a87 100644
--- a/Source/devtools/front_end/Images/settingsListRemove.png
+++ b/Source/devtools/front_end/Images/settingsListRemove.png
Binary files differ
diff --git a/Source/devtools/front_end/Images/settingsListRemove_2x.png b/Source/devtools/front_end/Images/settingsListRemove_2x.png
index 32eca10..c5ff088 100644
--- a/Source/devtools/front_end/Images/settingsListRemove_2x.png
+++ b/Source/devtools/front_end/Images/settingsListRemove_2x.png
Binary files differ
diff --git a/Source/devtools/front_end/Images/spinner.gif b/Source/devtools/front_end/Images/spinner.gif
deleted file mode 100644
index 5f68c02..0000000
--- a/Source/devtools/front_end/Images/spinner.gif
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/src/breakpoint.svg b/Source/devtools/front_end/Images/src/breakpoint.svg
new file mode 100644
index 0000000..4b5f7070
--- /dev/null
+++ b/Source/devtools/front_end/Images/src/breakpoint.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?><svg height="11" version="1.1" width="26" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+><defs
+/><sodipodi:namedview showgrid="true"
+><inkscape:grid empspacing="5" enabled="true" id="grid2985" snapvisiblegridlinesonly="true" type="xygrid" visible="true"/></sodipodi:namedview
+><path d="m22.8 0.5 2.7 5-2.7 5-22.3 0 0-10z" fill="#698cfe" stroke="#4073f4"/></svg
+>
\ No newline at end of file
diff --git a/Source/devtools/front_end/Images/src/breakpointConditional.svg b/Source/devtools/front_end/Images/src/breakpointConditional.svg
new file mode 100644
index 0000000..97b9913
--- /dev/null
+++ b/Source/devtools/front_end/Images/src/breakpointConditional.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?><svg height="11" version="1.1" width="26" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+><defs
+/><sodipodi:namedview showgrid="true"
+><inkscape:grid empspacing="5" enabled="true" id="grid2985" snapvisiblegridlinesonly="true" type="xygrid" visible="true"/></sodipodi:namedview
+><path d="m22.8 0.5 2.7 5-2.7 5-22.3 0 0-10z" fill="#ef9d0d" stroke="#a36c01"/></svg
+>
\ No newline at end of file
diff --git a/Source/devtools/front_end/Images/src/breakpoints2.svg b/Source/devtools/front_end/Images/src/breakpoints2.svg
deleted file mode 100644
index 0ae7d3d..0000000
--- a/Source/devtools/front_end/Images/src/breakpoints2.svg
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="744.09448819"
-   height="1052.3622047"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.3.1 r9886"
-   sodipodi:docname="breakpoints2.svg"
-   inkscape:export-filename="/usr/local/google/home/lushnikov/Desktop/bp.png"
-   inkscape:export-xdpi="44.838322"
-   inkscape:export-ydpi="44.838322">
-  <defs
-     id="defs4">
-    <linearGradient
-       id="linearGradient4408"
-       osb:paint="solid">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop4410" />
-    </linearGradient>
-    <marker
-       inkscape:stockid="Arrow1Lstart"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Lstart"
-       style="overflow:visible">
-      <path
-         id="path3786"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
-         transform="scale(0.8) translate(12.5,0)" />
-    </marker>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="22.627417"
-     inkscape:cx="26.649581"
-     inkscape:cy="19.595518"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:snap-grids="true"
-     inkscape:snap-page="false"
-     inkscape:window-width="2495"
-     inkscape:window-height="1576"
-     inkscape:window-x="65"
-     inkscape:window-y="24"
-     inkscape:window-maximized="1">
-    <inkscape:grid
-       type="xygrid"
-       id="grid2985"
-       empspacing="5"
-       visible="true"
-       enabled="true"
-       snapvisiblegridlinesonly="true" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       style="fill:#698cfe;fill-opacity:1;fill-rule:nonzero;stroke:#4073f4;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-       d="m 9.52174,1029.3622 38.04348,0 5.434781,10 -5.434781,10 -44.56522,0 0,-6 0,-8 c 0,-1.662 0,-4 0,-6 2.173914,0 4.715218,0 6.52174,0 z"
-       id="rect3816"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccc"
-       inkscape:transform-center-x="-1.0000005" />
-    <path
-       style="fill:#ef9d0d;fill-opacity:1;fill-rule:nonzero;stroke:#a36c01;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-       d="m 9.52174,993.36218 38.04348,0 5.43478,10.00002 -5.43478,10 -44.56522,0 0,-6 0,-8.00002 c 0,-1.662 0,-4 0,-6 2.173912,0 4.715218,0 6.52174,0 z"
-       id="rect3816-2"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccc" />
-  </g>
-</svg>
diff --git a/Source/devtools/front_end/Images/src/optimize_png.hashes b/Source/devtools/front_end/Images/src/optimize_png.hashes
new file mode 100644
index 0000000..bee5f0f
--- /dev/null
+++ b/Source/devtools/front_end/Images/src/optimize_png.hashes
@@ -0,0 +1,6 @@
+{
+    "statusbarButtonGlyphs.svg": "d39a8a0f4e920be140d74419e17eb6c9",
+    "breakpoint.svg": "69cd92d807259c022791112809b97799",
+    "settingsListRemove.svg": "ce9e7c5c5cdaef28e6ee51d9478d5485",
+    "breakpointConditional.svg": "4cf90210b2af2ed84db2f60b07bcde28"
+}
\ No newline at end of file
diff --git a/Source/devtools/front_end/Images/src/settingListRemove.svg b/Source/devtools/front_end/Images/src/settingListRemove.svg
deleted file mode 100644
index c279b00..0000000
--- a/Source/devtools/front_end/Images/src/settingListRemove.svg
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="48"
-   height="16"
-   id="svg5918"
-   version="1.1"
-   inkscape:version="0.48.3.1 r9886"
-   sodipodi:docname="settingListRemove.svg"
-   inkscape:export-filename="/usr/local/google/home/vsevik/chromium/src/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs5920" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="15.839192"
-     inkscape:cx="26.852098"
-     inkscape:cy="0.76985413"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="1055"
-     inkscape:window-height="869"
-     inkscape:window-x="714"
-     inkscape:window-y="142"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata5923">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(0,-1036.3622)">
-    <g
-       id="g5551-9"
-       transform="matrix(0.03826531,-0.03826531,0.03826531,0.03826531,-44.131211,1031.4147)">
-      <g
-         transform="matrix(0.93333336,0,0,0.93333336,26.666656,54.82412)"
-         id="g5535-7-8">
-        <rect
-           style="fill:#8d8d8d;fill-opacity:1;stroke:none"
-           id="rect5225-3-5-6-4-0-95-0"
-           width="40"
-           height="240"
-           x="500"
-           y="732.36218"
-           ry="0" />
-        <rect
-           style="fill:#8d8d8d;fill-opacity:1;stroke:none"
-           id="rect5225-3-5-6-4-0-4-8-6"
-           width="40"
-           height="240"
-           x="-872.36218"
-           y="400"
-           ry="0"
-           transform="matrix(0,-1,1,0,0,0)" />
-      </g>
-      <g
-         transform="translate(348.49752,26.101501)"
-         id="g5539-0-7">
-        <rect
-           style="fill:#cccccc;fill-opacity:1;stroke:none"
-           id="rect5225-3-5-6-4-7-7"
-           width="26"
-           height="214"
-           x="-842.26068"
-           y="51.502476"
-           ry="0"
-           transform="matrix(0,-1,1,0,0,0)" />
-        <rect
-           style="fill:#cccccc;fill-opacity:1;stroke:none"
-           id="rect5225-3-5-6-4-222-3-5"
-           width="26"
-           height="214"
-           x="-171.50247"
-           y="-936.26068"
-           ry="0"
-           transform="scale(-1,-1)" />
-      </g>
-    </g>
-    <g
-       id="g5709-5"
-       transform="matrix(0.0382653,-0.0382653,0.0382653,0.0382653,-28.1312,1031.4147)">
-      <g
-         transform="translate(294.96455,4.0405884)"
-         id="g5689-0">
-        <rect
-           style="fill:#121212;fill-opacity:1;stroke:none"
-           id="rect5225-3-5-6-4-0-1-2"
-           width="37.333336"
-           height="224"
-           x="198.3688"
-           y="734.32159"
-           ry="0" />
-        <rect
-           style="fill:#121212;fill-opacity:1;stroke:none"
-           id="rect5225-3-5-6-4-0-4-7-1"
-           width="37.333336"
-           height="224"
-           x="-864.98822"
-           y="105.03545"
-           ry="0"
-           transform="matrix(0,-1,1,0,0,0)" />
-      </g>
-      <g
-         id="g5685-7">
-        <rect
-           style="fill:#26262f;fill-opacity:0.94117647;stroke:none"
-           id="rect5225-3-5-6-4-6-8"
-           width="26"
-           height="214"
-           x="-868.36218"
-           y="400"
-           ry="0"
-           transform="matrix(0,-1,1,0,0,0)" />
-        <rect
-           style="fill:#26262f;fill-opacity:0.94117647;stroke:none"
-           id="rect5225-3-5-6-4-222-9-0"
-           width="26"
-           height="214"
-           x="-520"
-           y="-962.36218"
-           ry="0"
-           transform="scale(-1,-1)" />
-      </g>
-    </g>
-    <g
-       id="g6585">
-      <rect
-         transform="matrix(0.70710669,-0.70710687,0.70710687,0.70710669,0,0)"
-         ry="0"
-         y="760.69879"
-         x="-711.20154"
-         height="12.12183"
-         width="2.0203052"
-         id="rect5225-3-5-6-4-0-60-7"
-         style="fill:#2e2e2e;fill-opacity:1;stroke:none" />
-      <g
-         transform="matrix(0.0382653,-0.03826531,0.03826531,0.0382653,-12.560872,1026.5897)"
-         id="g5781-6">
-        <rect
-           style="fill:#2e2e2e;fill-opacity:1;stroke:none"
-           id="rect5225-3-5-6-4-0-4-9-7"
-           width="37.333336"
-           height="224"
-           x="-937.68872"
-           y="342.56863"
-           ry="0"
-           transform="matrix(0,-1,1,0,0,0)" />
-      </g>
-      <rect
-         transform="matrix(-0.70710687,-0.70710669,0.70710669,-0.70710687,0,0)"
-         ry="0"
-         y="-716.25226"
-         x="-767.73376"
-         height="11.580677"
-         width="1.4069982"
-         id="rect5225-3-5-6-4-9-6"
-         style="fill:#787878;fill-opacity:1;stroke:none" />
-      <rect
-         transform="matrix(-0.70710669,0.70710687,-0.70710687,-0.70710669,0,0)"
-         ry="0"
-         y="-772.82062"
-         x="709.75842"
-         height="11.580677"
-         width="1.4069982"
-         id="rect5225-3-5-6-4-222-8-6"
-         style="fill:#787878;fill-opacity:1;stroke:none" />
-    </g>
-  </g>
-</svg>
diff --git a/Source/devtools/front_end/Images/src/settingsListRemove.svg b/Source/devtools/front_end/Images/src/settingsListRemove.svg
new file mode 100644
index 0000000..66db651
--- /dev/null
+++ b/Source/devtools/front_end/Images/src/settingsListRemove.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?><svg height="16" version="1.1" width="48" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+><defs
+/><sodipodi:namedview showgrid="false"
+/><path d="M3 4.43 4.43 3 13 11.57 11.57 13z" fill="#8d8d8d"
+/><path d="M4.43 13 3 11.57 11.57 3 13 4.43z" fill="#8d8d8d"
+/><path d="M4.4 12.97 3.41 11.98 11.6 3.79 12.59 4.79z" fill="#ccc"
+/><path d="M12.59 11.98 11.6 12.97 3.41 4.79 4.4 3.79z" fill="#ccc"
+/><path d="m19 4.43 1.43-1.43 8.57 8.57-1.43 1.43z" fill="#121212"
+/><path d="m20.43 13-1.43-1.43 8.57-8.57 1.43 1.43z" fill="#121212"
+/><path d="m20.4 12.97-0.99-0.99 8.19-8.19 0.99 0.99z" fill="#26262f" fill-opacity="0.94"
+/><path d="m28.59 11.98-0.99 0.99-8.19-8.19 0.99-0.99z" fill="#26262f" fill-opacity="0.94"
+/><path d="m35 4.43 1.43-1.43 8.57 8.57-1.43 1.43z" fill="#2e2e2e"
+/><path d="m36.43 13-1.43-1.43 8.57-8.57 1.43 1.43z" fill="#2e2e2e"
+/><path d="m36.4 12.97-0.99-0.99 8.19-8.19 0.99 0.99z" fill="#787878"
+/><path d="m44.59 11.98-0.99 0.99-8.19-8.19 0.99-0.99z" fill="#787878"/></svg
+>
\ No newline at end of file
diff --git a/Source/devtools/front_end/Images/src/statusbarButtonGlyphs.svg b/Source/devtools/front_end/Images/src/statusbarButtonGlyphs.svg
index 8f123ac..9b6648e 100644
--- a/Source/devtools/front_end/Images/src/statusbarButtonGlyphs.svg
+++ b/Source/devtools/front_end/Images/src/statusbarButtonGlyphs.svg
@@ -1,1829 +1,203 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   height="120"
-   id="svg2"
-   version="1.1"
-   width="320"
-   xml:space="preserve"
-   inkscape:version="0.48.3.1 r9886"
-   sodipodi:docname="statusbarButtonGlyphs.svg"
-   inkscape:export-filename="../statusbarButtonGlyphs.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90"><metadata
-   id="metadata3317"><rdf:RDF><cc:Work
-       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
-   pagecolor="#ffffff"
-   bordercolor="#666666"
-   borderopacity="1"
-   objecttolerance="2"
-   gridtolerance="2"
-   guidetolerance="2"
-   inkscape:pageopacity="0"
-   inkscape:pageshadow="2"
-   inkscape:window-width="1518"
-   inkscape:window-height="876"
-   id="namedview3315"
-   showgrid="true"
-   width="640px"
-   inkscape:zoom="22.627417"
-   inkscape:cx="222.67601"
-   inkscape:cy="17.704972"
-   inkscape:window-x="109"
-   inkscape:window-y="93"
-   inkscape:window-maximized="0"
-   inkscape:current-layer="info-message"><inkscape:grid
-     empspacing="2"
-     visible="true"
-     enabled="true"
-     snapvisiblegridlinesonly="true"
-     spacingx="32px"
-     spacingy="24px"
-     type="xygrid"
-     id="grid3327"
-     dotted="false" /></sodipodi:namedview>
-  <defs
-   id="defs6"><linearGradient
-   id="linearGradient4153"><stop
-     style="stop-color:#606eda;stop-opacity:1;"
-     offset="0"
-     id="stop4155" /><stop
-     style="stop-color:#021db2;stop-opacity:1;"
-     offset="1"
-     id="stop4157" /></linearGradient><linearGradient
-   inkscape:collect="always"
-   id="linearGradient5619"><stop
-     style="stop-color:#000000;stop-opacity:1;"
-     offset="0"
-     id="stop5621" /><stop
-     style="stop-color:#000000;stop-opacity:0;"
-     offset="1"
-     id="stop5623" /></linearGradient><linearGradient
-   id="linearGradient5337"><stop
-     style="stop-color:#e59290;stop-opacity:1;"
-     offset="0"
-     id="stop5339" /><stop
-     style="stop-color:#e99890;stop-opacity:1;"
-     offset="1"
-     id="stop5341" /></linearGradient><linearGradient
-   id="linearGradient5329"><stop
-     id="stop5331"
-     offset="0"
-     style="stop-color:#c0544f;stop-opacity:1;" /><stop
-     id="stop5333"
-     offset="1"
-     style="stop-color:#d08481;stop-opacity:1;" /></linearGradient><linearGradient
-   id="linearGradient5667"><stop
-     style="stop-color:#ffa801;stop-opacity:0;"
-     offset="0"
-     id="stop5669" /><stop
-     style="stop-color:#f0fb3d;stop-opacity:1;"
-     offset="1"
-     id="stop5671" /></linearGradient><linearGradient
-   id="linearGradient5655"><stop
-     id="stop5657"
-     offset="0"
-     style="stop-color:#ffbd00;stop-opacity:0.64957267;" /><stop
-     id="stop5659"
-     offset="1"
-     style="stop-color:#ffffff;stop-opacity:0.90598291;" /></linearGradient><linearGradient
-   id="linearGradient5647"><stop
-     style="stop-color:#a16a00;stop-opacity:1;"
-     offset="0"
-     id="stop5649" /><stop
-     style="stop-color:#c68200;stop-opacity:1;"
-     offset="1"
-     id="stop5651" /></linearGradient><linearGradient
-   id="linearGradient5505"><stop
-     style="stop-color:#00d600;stop-opacity:0;"
-     offset="0"
-     id="stop5507" /><stop
-     style="stop-color:#d8fc7b;stop-opacity:0.81196582;"
-     offset="1"
-     id="stop5509" /></linearGradient><linearGradient
-   id="linearGradient5497"><stop
-     id="stop5499"
-     offset="0"
-     style="stop-color:#00ba00;stop-opacity:1;" /><stop
-     id="stop5501"
-     offset="1"
-     style="stop-color:#ffffff;stop-opacity:0.90598291;" /></linearGradient><linearGradient
-   id="linearGradient5489"><stop
-     style="stop-color:#00a104;stop-opacity:1;"
-     offset="0"
-     id="stop5491" /><stop
-     style="stop-color:#00c605;stop-opacity:1;"
-     offset="1"
-     id="stop5493" /></linearGradient><linearGradient
-   id="linearGradient5441"><stop
-     id="stop5443"
-     offset="0"
-     style="stop-color:#ff0000;stop-opacity:0;" /><stop
-     id="stop5445"
-     offset="1"
-     style="stop-color:#f0cb68;stop-opacity:0.70940173;" /></linearGradient><linearGradient
-   id="linearGradient5429"><stop
-     style="stop-color:#e60000;stop-opacity:0.64957267;"
-     offset="0"
-     id="stop5431" /><stop
-     style="stop-color:#ffffff;stop-opacity:0.90598291;"
-     offset="1"
-     id="stop5433" /></linearGradient><linearGradient
-   id="linearGradient5421"><stop
-     style="stop-color:#ff0000;stop-opacity:1;"
-     offset="0"
-     id="stop5423" /><stop
-     style="stop-color:#9f0000;stop-opacity:1;"
-     offset="1"
-     id="stop5425" /></linearGradient><linearGradient
-   id="linearGradient5409"><stop
-     id="stop5411"
-     offset="0"
-     style="stop-color:#a10000;stop-opacity:1;" /><stop
-     id="stop5413"
-     offset="1"
-     style="stop-color:#c60000;stop-opacity:1;" /></linearGradient><linearGradient
-   id="linearGradient5401"><stop
-     style="stop-color:#000000;stop-opacity:1;"
-     offset="0"
-     id="stop5403" /><stop
-     style="stop-color:#000000;stop-opacity:0;"
-     offset="1"
-     id="stop5405" /></linearGradient><linearGradient
-   id="linearGradient5093"><stop
-     style="stop-color:#000000;stop-opacity:1;"
-     offset="0"
-     id="stop5095" /><stop
-     style="stop-color:#5c5c5c;stop-opacity:1;"
-     offset="1"
-     id="stop5097" /></linearGradient><linearGradient
-   id="linearGradient5083"><stop
-     style="stop-color:#000000;stop-opacity:1;"
-     offset="0"
-     id="stop5085" /><stop
-     style="stop-color:#929292;stop-opacity:1;"
-     offset="1"
-     id="stop5087" /></linearGradient><linearGradient
-   id="linearGradient4925"><stop
-     style="stop-color:#ac1f10;stop-opacity:1;"
-     offset="0"
-     id="stop4927" /><stop
-     style="stop-color:#f48f84;stop-opacity:1;"
-     offset="1"
-     id="stop4929" /></linearGradient><linearGradient
-   id="linearGradient4827"><stop
-     id="stop4829"
-     offset="0"
-     style="stop-color:#d7687d;stop-opacity:1;" /><stop
-     id="stop4831"
-     offset="1"
-     style="stop-color:#b21402;stop-opacity:1;" /></linearGradient><linearGradient
-   id="linearGradient4643"><stop
-     style="stop-color:#d76f7d;stop-opacity:1;"
-     offset="0"
-     id="stop4645" /><stop
-     style="stop-color:#b21402;stop-opacity:1;"
-     offset="1"
-     id="stop4647" /></linearGradient>
-    <mask
-   id="mask16" />
-    <clipPath
-   id="clipPath26">
-      <path
-   d="M 0,560 960,560 960,0 0,0 0,560 z"
-   id="path28"
-   inkscape:connector-curvature="0" />
-    </clipPath>
-    <clipPath
-   id="clipPath34">
-      <path
-   d="m 160,296 16.125,0 0,-14 -16.125,0 0,14 z"
-   id="path36"
-   inkscape:connector-curvature="0" />
-    </clipPath>
-    <clipPath
-   id="clipPath50">
-      <path
-   d="m 358,303 22,0 0,-4 -22,0 0,4 z"
-   id="path52"
-   inkscape:connector-curvature="0" />
-    </clipPath>
-    <clipPath
-   id="clipPath64">
-      <path
-   d="m 484.867,399.559 22.705,0 0,-19.118 -22.705,0 0,19.118 z"
-   id="path66"
-   inkscape:connector-curvature="0" />
-    </clipPath>
-    <clipPath
-   id="clipPath96">
-      <path
-   d="M 0,560 960,560 960,0 0,0 0,560 z"
-   id="path98"
-   inkscape:connector-curvature="0" />
-    </clipPath>
-    <clipPath
-   id="clipPath200">
-      <path
-   d="m 662,341 c 0,-9.941 8.059,-18 18,-18 l 0,0 c 9.942,0 18,8.059 18,18 l 0,0 c 0,9.941 -8.058,18 -18,18 l 0,0 c -9.941,0 -18,-8.059 -18,-18"
-   id="path202"
-   inkscape:connector-curvature="0" />
-    </clipPath>
-    <radialGradient
-   cx="0"
-   cy="0"
-   fx="0"
-   fy="0"
-   gradientTransform="matrix(17.999599,0,0,-17.999599,680,340.99951)"
-   gradientUnits="userSpaceOnUse"
-   id="radialGradient208"
-   r="1"
-   spreadMethod="pad">
-      <stop
-   id="stop210"
-   offset="0"
-   style="stop-color:#000000;stop-opacity:1" />
-      <stop
-   id="stop212"
-   offset="1"
-   style="stop-color:#000000;stop-opacity:0" />
-    </radialGradient>
-    <clipPath
-   id="clipPath220">
-      <path
-   d="M 0,560 960,560 960,0 0,0 0,560 z"
-   id="path222"
-   inkscape:connector-curvature="0" />
-    </clipPath>
-  
-    
-    
-    
-    
-    
-    
-    
-    
-    
-  
-      
-    
-      
-    
-      
-    
-      
-    
-      
-    
-      
-    
-      
-    
-      
-    
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-      
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-      
-        
-        
-        
-      <radialGradient
-   inkscape:collect="always"
-   xlink:href="#radialGradient208"
-   id="radialGradient3862"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(17.999599,0,0,-17.999599,680,340.99951)"
-   spreadMethod="pad"
-   cx="0"
-   cy="0"
-   fx="0"
-   fy="0"
-   r="1" /><radialGradient
-   inkscape:collect="always"
-   xlink:href="#radialGradient208"
-   id="radialGradient6632"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(17.999599,0,0,-17.999599,680,340.99951)"
-   spreadMethod="pad"
-   cx="0"
-   cy="0"
-   fx="0"
-   fy="0"
-   r="1" /><radialGradient
-   inkscape:collect="always"
-   xlink:href="#radialGradient208"
-   id="radialGradient6811"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(17.999599,0,0,-17.999599,680,340.99951)"
-   spreadMethod="pad"
-   cx="0"
-   cy="0"
-   fx="0"
-   fy="0"
-   r="1" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4643"
-   id="linearGradient4671"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(-1,0,0,-1,24,0)" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4643"
-   id="linearGradient4759"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(-1,0,0,-1,24,0)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4643"
-   id="linearGradient4769"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(-1,0,0,-1,24,0)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4643"
-   id="linearGradient4785"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(-1,0,0,-1,24,0)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4643"
-   id="linearGradient4807"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(-1,0,0,-1,24,0)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4827"
-   id="linearGradient4825"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(-1,0,0,-1,24,0)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4643"
-   id="linearGradient4833"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(-1,0,0,-1,24,0)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4827"
-   id="linearGradient4857"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(-1,0,0,-1,24,0)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" />
-          
-        <linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4827"
-   id="linearGradient4890"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(-1,0,0,-1,24,0)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" />
-          
-        <linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4643"
-   id="linearGradient4915"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(-1,0,0,-1,24,0)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4925"
-   id="linearGradient4931"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0"
-   gradientUnits="userSpaceOnUse" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4827"
-   id="linearGradient4965"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(0,-0.58333333,-0.58333333,0,120,111)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5083"
-   id="linearGradient5089"
-   x1="113"
-   y1="104"
-   x2="127"
-   y2="104"
-   gradientUnits="userSpaceOnUse" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5093"
-   id="linearGradient5099"
-   x1="113"
-   y1="104"
-   x2="127"
-   y2="104"
-   gradientUnits="userSpaceOnUse" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4827"
-   id="linearGradient5103"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(0,-0.58333333,-0.58333333,0,120,111)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4827"
-   id="linearGradient5281"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(0,-0.58333333,-0.58333333,0,120,111)"
-   x1="0"
-   y1="0"
-   x2="24"
-   y2="0" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5409"
-   id="linearGradient5737"
-   gradientUnits="userSpaceOnUse"
-   x1="227.875"
-   y1="103.15625"
-   x2="235.125"
-   y2="103.15625" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5489"
-   id="linearGradient5743"
-   gradientUnits="userSpaceOnUse"
-   x1="227.875"
-   y1="103.15625"
-   x2="235.125"
-   y2="103.15625" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5497"
-   id="linearGradient5753"
-   gradientUnits="userSpaceOnUse"
-   x1="227.875"
-   y1="103.15625"
-   x2="235.125"
-   y2="103.15625" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5505"
-   id="linearGradient5755"
-   gradientUnits="userSpaceOnUse"
-   x1="227.875"
-   y1="103.15625"
-   x2="235.125"
-   y2="103.15625" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5429"
-   id="linearGradient5767"
-   gradientUnits="userSpaceOnUse"
-   x1="227.875"
-   y1="103.15625"
-   x2="235.125"
-   y2="103.15625" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5441"
-   id="linearGradient5769"
-   gradientUnits="userSpaceOnUse"
-   x1="227.875"
-   y1="103.15625"
-   x2="235.125"
-   y2="103.15625" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5655"
-   id="linearGradient5835"
-   gradientUnits="userSpaceOnUse"
-   x1="227.875"
-   y1="103.15625"
-   x2="235.125"
-   y2="103.15625" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5667"
-   id="linearGradient5837"
-   gradientUnits="userSpaceOnUse"
-   x1="227.875"
-   y1="103.15625"
-   x2="235.125"
-   y2="103.15625" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5329"
-   id="linearGradient5327"
-   x1="113"
-   y1="104"
-   x2="127"
-   y2="104"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(0,-1,1,0,16,224)" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5329"
-   id="linearGradient5335"
-   gradientUnits="userSpaceOnUse"
-   x1="113"
-   y1="104"
-   x2="127"
-   y2="104"
-   gradientTransform="matrix(0,-1,1,0,16,224)" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5337"
-   id="linearGradient5343"
-   x1="96.5"
-   y1="103"
-   x2="109.5"
-   y2="103"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(0,1,-1,0,206,0)" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5329"
-   id="linearGradient5354"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(0,-1,1,0,16,224)"
-   x1="113"
-   y1="104"
-   x2="127"
-   y2="104" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5329"
-   id="linearGradient5356"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(0,-1,1,0,16,224)"
-   x1="113"
-   y1="104"
-   x2="127"
-   y2="104" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5337"
-   id="linearGradient5358"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(0,1,-1,0,206,0)"
-   x1="96.5"
-   y1="103"
-   x2="109.5"
-   y2="103" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5337"
-   id="linearGradient5365"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="matrix(0,1,-1,0,206,0)"
-   x1="96.5"
-   y1="103"
-   x2="109.5"
-   y2="103" /><linearGradient
-   id="linearGradient4827-3"><stop
-     id="stop4829-3"
-     offset="0"
-     style="stop-color:#d7687d;stop-opacity:1;" /><stop
-     id="stop4831-1"
-     offset="1"
-     style="stop-color:#b21402;stop-opacity:1;" /></linearGradient><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient5619"
-   id="linearGradient5627"
-   x1="220.1884"
-   y1="100.38527"
-   x2="223.78215"
-   y2="100.38527"
-   gradientUnits="userSpaceOnUse"
-   gradientTransform="translate(-11.397753,-1.4419419)" /><linearGradient
-   inkscape:collect="always"
-   xlink:href="#linearGradient4153"
-   id="linearGradient5635"
-   x1="113"
-   y1="104"
-   x2="127"
-   y2="104"
-   gradientUnits="userSpaceOnUse" /></defs>
-  
-<g
-   inkscape:groupmode="layer"
-   id="layer1"
-   inkscape:label="grid"
-   style="display:inline"
-   transform="translate(0,-580)" /><g
-   id="g12"
-   transform="matrix(0.50028185,0,0,-0.5104134,-36.680797,258.16231)">
-      <g
-   transform="matrix(639.91985,0,0,143.98197,72.039148,269.00968)"
-   id="g14" />
-    </g><g
-   id="g30"
-   transform="matrix(0.50028185,0,0,-0.5104134,-36.013832,209.91231)">
-          <g
-   id="g32" />
-          <g
-   id="g38">
-            <g
-   style="opacity:0.5"
-   id="g40"
-   clip-path="url(#clipPath34)">
-              <g
-   transform="translate(160,296)"
-   id="g42">
-                <path
-   inkscape:connector-curvature="0"
-   style="fill:#424242;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path44"
-   d="m 0,0 4,-5 0,-9 8,0 0,9 4.125,5 L 0,0 z" />
-              </g>
-            </g>
-          </g>
-        </g><g
-   id="g60"
-   transform="matrix(0.50650085,0,0,-0.52309465,-41.085547,214.0068)">
-          <g
-   id="g62" />
-          <g
-   id="g68">
-            <g
-   style="opacity:0.39999402"
-   id="g70"
-   clip-path="url(#clipPath64)">
-              <g
-   transform="translate(491.5488,386.3623)"
-   id="g72">
-                <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path74"
-   d="M 0,0 -3.618,4.311 -6.682,1.739 -0.254,-5.921 2.58,-3.076 16.023,10.367 13.195,13.196 0,0 z" />
-              </g>
-            </g>
-          </g>
-        </g><path
-   d="M 57,12 53.58829,8 39,8 l 0,8 14.58829,0"
-   id="path78"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" /><path
-   d="M 25,36 21.362197,32 19.570257,32 14,40 21.362197,40 25,36 z"
-   id="path82"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" /><path
-   d="M 7,32 7,40 9.0527005,40 14,32 7,32 z"
-   id="path86"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" /><path
-   d="M 9.668154,44.54737 8.07369,43.22813 18.831348,27.45264 20.42631,28.77187 9.668154,44.54737 z"
-   id="path90"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" /><g
-   transform="matrix(0.5063291,0,0,-0.5063291,16,15.10127)"
-   id="g100">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path102"
-   d="m 0,0 c -3.452,0 -6.25,2.798 -6.25,6.25 0,3.452 2.798,6.25 6.25,6.25 L 0,16 c -5.454,0 -9.875,-4.421 -9.875,-9.875 0,-5.454 4.421,-9.875 9.875,-9.875 5.454,0 9.875,4.421 9.875,9.875 l -3.631,0 C 6.176,2.731 3.41,0 0,0" />
-        </g><g
-   transform="matrix(0.49315069,0,0,-0.5303633,16,5)"
-   id="g104">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path106"
-   d="M 0,0 9.125,-5.657 0,-11.313" />
-        </g><path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path108"
-   d="m 53,37 -10,0 0,-5 10,0 0,5 z m -12,5 14,0 0,-12 -14,0 0,12 z" /><g
-   transform="matrix(0.5,0,0,-0.5,10,57)"
-   id="g110">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path112"
-   d="m 0,0 -4,0 0,-14 0,-4 4,0 18,0 0,4 -18,0 0,14 z" />
-        </g><path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path114"
-   d="m 13,56 7,0 0,5 -7,0 0,-5 z m 7,-2 -7,0 -2,0 0,2 0,5 0,2 2,0 7,0 2,0 0,-2 0,-5 0,-2 -2,0 z" /><g
-   id="g5185"><path
-     d="m 86,33 -8,0 0,-2 8,0 0,2 z"
-     id="path116"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><g
-     id="g118"
-     transform="matrix(0.49494449,0,0,-0.50824235,71.5,31.43731)">
-          <path
-   d="M 0,0 8.485,-8.485 0,-16.971 l 2.829,-2.828 8.485,8.485 2.829,2.829 -2.829,2.828 L 2.829,2.828 0,0 z"
-   id="path120"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g><path
-     d="m 86,37 -6,0 0,-2 6,0 0,2 z"
-     id="path122"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 86,41 -8,0 0,-2 8,0 0,2 z"
-     id="path124"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /></g><g
-   transform="matrix(0.5,0,0,-0.5,80.4375,16.9375)"
-   id="g126">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path128"
-   d="m 0,0 c -4.97,0 -9,4.03 -9,9 0,1.76 0.513,3.397 1.387,4.785 L 4.785,1.387 C 3.397,0.513 1.76,0 0,0 M 9,9 C 9,7.24 8.487,5.603 7.613,4.215 L -4.785,16.613 C -3.397,17.487 -1.76,18 0,18 4.97,18 9,13.97 9,9 M 0.125,21.875 c -7.18,0 -13,-5.82 -13,-13 0,-7.18 5.82,-13 13,-13 7.18,0 13,5.82 13,13 0,7.18 -5.82,13 -13,13" />
-        </g><path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path130"
-   d="m 117,65 -10,0 0,-10 10,0 0,10 z" /><g
-   transform="matrix(0.5,0,0,-0.5,116,37)"
-   id="g132">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path134"
-   d="m 0,0 0,-8 -16,0 0,6 -2,0 0,-6 0,-2 2,0 18,0 0,2 0,8 -2,0 z" />
-        </g><g
-   transform="matrix(0.50647405,0,0,-0.52309465,111.88426,35.90276)"
-   id="g136">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path138"
-   d="m 0,0 -3.618,4.311 -3.064,-2.572 6.428,-7.66 2.835,2.845 13.443,13.443 -2.828,2.829 L 0,0 z" />
-        </g><g
-   transform="matrix(0.47140904,0,0,-0.47140904,149,8.33314)"
-   id="g140">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path142"
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z" />
-        </g><g
-   transform="matrix(0.5,0,0,-0.50757125,46.5,65.23466)"
-   id="g144">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path146"
-   d="m 0,0 c 0.639,-0.265 1.688,-0.478 2.933,-0.478 1.183,0 2.288,0.192 3.067,0.519 l 0,7.744 8,9 0,0.379 -22,0 0,-0.43 8,-9 L 0,0 z m 2.933,-3.478 c -2.31,0 -4.336,0.565 -5.42,1.512 L -3,-1.518 l 0,8.111 -8,9 0,4.571 28,0 0,-4.622 -8,-9 L 9,-1.601 8.381,-2.05 C 7.132,-2.958 5.146,-3.478 2.933,-3.478" />
-        </g><g
-   transform="matrix(0.5263158,0,0,-0.5058169,86,60)"
-   id="g148">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path150"
-   d="m 0,0 -19,9.885 0,-19.77" />
-        </g><g
-   id="g4283"
-   transform="matrix(0.5,0,0,0.5,0,-1)"><g
-     transform="matrix(1.0000001,0,0,-1,-74.000026,414.99999)"
-     id="g46">
-          <g
-   id="g48" />
-          <g
-   id="g54">
-            <g
-   clip-path="url(#clipPath50)"
-   id="g56"
-   style="opacity:0.19999701">
-              <path
-   d="m 380,299 -22,0 0,4 22,0 0,-4 z"
-   id="path58"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-            </g>
-          </g>
-        </g><g
-     id="g152"
-     transform="matrix(1.0000001,0,0,-1,270,110)">
-          <path
-   d="m 0,0 0,2 -2,0 -2,0 0,-2 0,-24 0,-2 2,0 2,0 0,2 -2,0 0,24 2,0 z"
-   id="path154"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g><path
-     d="M 283.99999,116 272,116 l 0,-4.00001 11.99999,0 0,4.00001 z"
-     id="path156"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="M 289.99999,122 278,122 l 0,-4.00001 11.99999,0 0,4.00001 z"
-     id="path158"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 300,127.99999 -12.00001,0 0,-4 12.00001,0 0,4 z"
-     id="path160"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 303.99999,133.99999 -11.99999,0 0,-4 11.99999,0 0,4 z"
-     id="path162"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /></g><g
-   id="g4275"
-   transform="scale(0.5,0.5)"><path
-     d="M 339.99999,134 336,134 l 0,-18 3.99999,0 0,18 z"
-     id="path164"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 346,134 -4,0 0,-22 4,0 0,22 z"
-     id="path166"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 352,134 -4.00001,0 0,-26 4.00001,0 0,26 z"
-     id="path168"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 358,134 -4,0 0,-8 4,0 0,8 z"
-     id="path170"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="M 363.99999,134 360,134 l 0,-18 3.99999,0 0,18 z"
-     id="path172"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 370,134 -4,0 0,-22 4,0 0,22 z"
-     id="path174"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /></g><g
-   id="g4266"
-   transform="scale(0.5,0.5)"><path
-     d="m 416,114 -20,0 0,-4 20,0 0,4 z"
-     id="path176"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 434,114 -10,0 0,-4 10,0 0,4 z"
-     id="path178"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 400,122 -4,0 0,-4.00001 4,0 0,4.00001 z"
-     id="path180"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 426,122 -20.00001,0 0,-4.00001 20.00001,0 0,4.00001 z"
-     id="path182"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 434,122 -4.00001,0 0,-4.00001 4.00001,0 0,4.00001 z"
-     id="path184"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 410,130 -14,0 0,-4 14,0 0,4 z"
-     id="path186"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 434,130 -16,0 0,-4 16,0 0,4 z"
-     id="path188"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /></g><path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path190"
-   d="m 274,64 -7,0 0,-8 7,0 0,8 z m -9,2 14,0 0,-12 -14,0 0,12 z" /><g
-   transform="matrix(0.5,0,0,-0.5,298,12)"
-   id="g192">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path194"
-   d="m 0,0 c 0,-6.627 5.372,-12 12,-12 6.628,0 12,5.373 12,12 C 24,6.627 18.628,12 12,12 5.372,12 0,6.627 0,0" />
-        </g><g
-   clip-path="url(#clipPath200)"
-   id="g198"
-   transform="matrix(0.5,0,0,-0.5,-36,206.5)"
-   style="fill-rule:nonzero">
-        <g
-   id="g204"
-   style="fill-rule:nonzero">
-          <g
-   id="g206"
-   style="fill-rule:nonzero">
-            <path
-   d="m 662,341 c 0,-9.941 8.059,-18 18,-18 l 0,0 c 9.942,0 18,8.059 18,18 l 0,0 c 0,9.941 -8.058,18 -18,18 l 0,0 c -9.941,0 -18,-8.059 -18,-18"
-   id="path214"
-   style="fill:url(#radialGradient6811);fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-          </g>
-        </g>
-      </g><g
-   transform="matrix(0.5,0,0,-0.5,298,36)"
-   id="g224">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path226"
-   d="m 0,0 c 0,-6.627 5.372,-12 12,-12 6.628,0 12,5.373 12,12 C 24,6.627 18.628,12 12,12 5.372,12 0,6.627 0,0" />
-        </g><g
-   transform="matrix(0.50695545,0,0,-0.50695545,239.06259,38.10433)"
-   id="g228">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path230"
-   d="m 0,0 c -3.313,0 -6,2.686 -6,6 0,3.314 2.687,6 6,6 C 3.313,12 6,9.314 6,6 6,2.686 3.313,0 0,0 M 15.657,-6.829 7.613,1.215 C 8.487,2.603 9,4.24 9,6 c 0,4.971 -4.029,9 -9,9 -4.971,0 -9,-4.029 -9,-9 0,-4.971 4.029,-9 9,-9 1.761,0 3.397,0.513 4.785,1.387 l 8.043,-8.044 2.829,2.828 z" />
-        </g><g
-   transform="matrix(0.48874711,0,0,-0.49652038,233.7329,63.76329)"
-   id="g232">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
-   id="path234"
-   d="M 0,0 10.75,6.5 21.625,2 31.75,10.125" />
-        </g><g
-   transform="matrix(0.50028185,0,0,-0.5,231.00056,67)"
-   id="g236">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path238"
-   d="m 0,0 0,26 -2,0 0,-28 1,0 1,0 40,0 0,2 -40,0 z" />
-        </g><g
-   id="g4258"
-   transform="scale(0.5,0.5)"><path
-     d="m 474,22 -8,0 0,-8 8,0 0,8 z"
-     id="path240"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 494,18 -18.00001,0 0,-4 18.00001,0 0,4 z"
-     id="path242"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 494,22 -18.00001,0 0,-2 18.00001,0 0,2 z"
-     id="path244"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 494,30 -18.00001,0 0,-4.000001 18.00001,0 L 494,30 z"
-     id="path246"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 474,34 -8,0 0,-8.000001 8,0 L 474,34 z"
-     id="path248"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     d="m 494,34 -18.00001,0 0,-2 18.00001,0 0,2 z"
-     id="path250"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /></g><g
-   transform="matrix(0.53333335,0,0,-0.53333335,176,38.13333)"
-   id="g252">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path254"
-   d="M 0,0 C -2.209,0 -4,1.791 -4,4 -4,6.209 -2.209,8 0,8 2.209,8 4,6.209 4,4 4,1.791 2.209,0 0,0 M 15,7 9.5,8 12.728,12.485 8.485,16.728 3.875,13.375 3,19 -3,19 -3.75,13.125 -8.485,16.728 -12.728,12.485 -9,7.625 -15,7 l 0,-6 6.25,-0.625 -3.978,-4.86 4.243,-4.243 4.735,3.978 0.75,-6.25 6,0 0.75,6 4.735,-3.728 4.243,4.243 L 9.375,0.125 15,1 15,7 z" />
-        </g><g
-   transform="matrix(0.49058085,0,0,-0.5028495,174.9687,18.62521)"
-   id="g256">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path258"
-   d="M 0,0 C 0,1.788 0.87,2.682 2.61,2.682 3.462,2.682 4.114,2.448 4.563,1.979 5.013,1.513 5.238,0.853 5.238,0 5.238,-0.84 5.009,-1.506 4.555,-1.998 4.099,-2.488 3.45,-2.734 2.61,-2.734 1.77,-2.734 1.124,-2.495 0.674,-2.015 0.225,-1.536 0,-0.863 0,0 m 0.728,5.665 0,1.135 c 0,1.303 0.237,2.386 0.71,3.25 0.474,0.865 1.303,1.758 2.486,2.681 1.409,1.113 2.317,1.977 2.726,2.593 0.408,0.615 0.611,1.349 0.611,2.202 0,0.993 -0.331,1.757 -0.994,2.289 -0.662,0.535 -1.615,0.8 -2.858,0.8 -1.125,0 -2.166,-0.16 -3.125,-0.48 -0.958,-0.32 -1.894,-0.704 -2.806,-1.154 l -1.491,3.125 c 2.403,1.338 4.978,2.007 7.724,2.007 2.32,0 4.16,-0.569 5.521,-1.705 1.362,-1.136 2.043,-2.704 2.043,-4.705 0,-0.888 -0.13,-1.678 -0.39,-2.37 C 10.624,14.64 10.229,13.979 9.703,13.353 9.177,12.725 8.268,11.909 6.978,10.902 5.876,10.038 5.14,9.322 4.767,8.754 4.394,8.186 4.207,7.422 4.207,6.464 l 0,-0.799 -3.479,0 z" />
-        </g><g
-   transform="matrix(0.4940336,0,0,-0.48455482,210.33624,38.32707)"
-   id="g260">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path262"
-   d="m 0,0 c 0,-1.637 0.163,-2.862 0.487,-3.674 0.324,-0.813 0.848,-1.22 1.574,-1.22 1.438,0 2.157,1.631 2.157,4.894 0,3.218 -0.719,4.828 -2.157,4.828 C 1.335,4.828 0.811,4.432 0.487,3.642 0.163,2.851 0,1.637 0,0 m 7.416,0 c 0,-2.526 -0.457,-4.421 -1.369,-5.685 -0.911,-1.263 -2.24,-1.895 -3.986,-1.895 -1.67,0 -2.966,0.651 -3.889,1.953 -0.923,1.301 -1.385,3.177 -1.385,5.627 0,5.02 1.758,7.53 5.274,7.53 1.691,0 3.006,-0.648 3.946,-1.945 C 6.946,4.29 7.416,2.427 7.416,0 M 2.521,16.839 -10.84,-7.25 l -3.198,0 13.364,24.089 3.195,0 z M -15.686,9.622 c 0,-1.637 0.16,-2.855 0.478,-3.658 0.319,-0.801 0.841,-1.202 1.566,-1.202 1.451,0 2.174,1.619 2.174,4.86 0,3.241 -0.723,4.861 -2.174,4.861 -0.725,0 -1.247,-0.4 -1.566,-1.203 -0.318,-0.801 -0.478,-2.021 -0.478,-3.658 m 7.416,0.033 c 0,-2.526 -0.454,-4.424 -1.36,-5.692 -0.906,-1.27 -2.243,-1.904 -4.012,-1.904 -1.67,0 -2.964,0.656 -3.881,1.969 -0.917,1.313 -1.375,3.189 -1.375,5.627 0,5.02 1.752,7.53 5.256,7.53 1.725,0 3.05,-0.651 3.979,-1.952 0.928,-1.302 1.393,-3.161 1.393,-5.578" />
-        </g><g
-   transform="matrix(0.59916115,0,0,-0.5,268.00899,35.993)"
-   id="g264">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path266"
-   d="m 0,0 c 0.7,-0.458 1.185,-0.989 1.452,-1.596 0.268,-0.607 0.4,-1.653 0.4,-3.136 l 0,-2.039 c 0,-0.937 0.077,-1.526 0.231,-1.768 0.153,-0.24 0.443,-0.404 0.871,-0.489 0.104,-0.027 0.256,-0.055 0.461,-0.082 1.051,-0.154 1.577,-0.659 1.577,-1.514 0,-0.418 -0.153,-0.753 -0.459,-1.008 -0.305,-0.255 -0.713,-0.382 -1.221,-0.382 -0.65,0 -1.277,0.106 -1.883,0.317 -0.607,0.212 -1.109,0.502 -1.507,0.871 -0.435,0.395 -0.743,0.907 -0.923,1.533 -0.182,0.626 -0.271,1.698 -0.271,3.218 l 0,1.644 c 0,1.667 -0.768,2.625 -2.306,2.875 -0.066,0.019 -0.111,0.028 -0.139,0.028 -0.444,0.074 -0.772,0.234 -0.986,0.477 -0.214,0.242 -0.319,0.593 -0.319,1.051 0,0.402 0.089,0.719 0.271,0.953 0.18,0.234 0.47,0.402 0.868,0.505 0.176,0.056 0.43,0.116 0.764,0.18 1.23,0.23 1.847,1.144 1.847,2.74 l 0,1.647 c 0,1.413 0.068,2.405 0.209,2.973 0.137,0.569 0.374,1.065 0.708,1.49 0.388,0.472 0.909,0.84 1.561,1.103 0.654,0.263 1.373,0.395 2.16,0.395 0.49,0 0.885,-0.128 1.182,-0.382 0.295,-0.255 0.444,-0.59 0.444,-1.007 0,-0.87 -0.563,-1.394 -1.688,-1.57 C 3.2,9.019 3.127,9.009 3.08,9 2.615,8.926 2.295,8.757 2.118,8.495 1.941,8.231 1.852,7.634 1.852,6.703 l 0,-2.035 C 1.852,3.279 1.714,2.26 1.437,1.611 1.161,0.963 0.682,0.426 0,0" />
-        </g><g
-   transform="matrix(0.59904155,0,0,-0.5,276.98263,35.986)"
-   id="g268">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path270"
-   d="m 0,0 c -0.674,0.425 -1.147,0.961 -1.425,1.608 -0.276,0.647 -0.414,1.664 -0.414,3.051 l 0,2.018 0,0.88 c 0,0.43 -0.112,0.757 -0.336,0.982 -0.222,0.224 -0.595,0.374 -1.115,0.446 -0.679,0.094 -1.13,0.253 -1.353,0.477 -0.224,0.225 -0.336,0.566 -0.336,1.023 0,0.468 0.142,0.832 0.424,1.094 0.283,0.262 0.683,0.393 1.202,0.393 0.685,0 1.325,-0.102 1.916,-0.306 0.593,-0.204 1.088,-0.49 1.487,-0.86 C 0.504,10.39 0.822,9.874 1.008,9.259 1.193,8.644 1.285,7.559 1.285,6.005 l 0,-1.635 C 1.285,2.777 1.921,1.856 3.188,1.609 3.494,1.563 3.729,1.517 3.896,1.472 4.285,1.368 4.572,1.196 4.759,0.956 4.943,0.715 5.037,0.396 5.037,0 5.037,-0.415 4.938,-0.748 4.744,-0.999 4.55,-1.248 4.259,-1.42 3.869,-1.515 3.721,-1.542 3.512,-1.579 3.244,-1.626 1.938,-1.875 1.285,-2.815 1.285,-4.445 l 0,-1.611 c 0,-1.463 -0.068,-2.48 -0.207,-3.048 -0.14,-0.57 -0.375,-1.054 -0.709,-1.452 -0.362,-0.435 -0.882,-0.789 -1.562,-1.063 -0.681,-0.273 -1.392,-0.409 -2.133,-0.409 -0.518,0 -0.923,0.131 -1.215,0.396 -0.292,0.263 -0.438,0.631 -0.438,1.104 0,0.435 0.11,0.763 0.329,0.986 0.218,0.222 0.671,0.389 1.36,0.5 0.566,0.083 0.95,0.236 1.15,0.458 0.201,0.223 0.301,0.579 0.301,1.069 l 0,0.737 0,2.055 c 0,1.481 0.133,2.525 0.401,3.13 C -1.171,-0.988 -0.691,-0.457 0,0" />
-        </g><path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path272"
-   d="m 275.23077,14.69231 -2.15384,0 0,-5.38462 2.15384,0 0,5.38462 z m -4.3077,0 -2.15384,0 0,-5.38462 2.15384,0 0,5.38462 z M 274.92277,5 269.07722,5 265,9.03792 265,14.88238 269.07722,19 274.92277,19 279,14.88238 279,9.03792 274.92277,5 z" /><g
-   transform="matrix(0.5000139,0,0,-0.5,112.03125,15.5)"
-   id="g274">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path276"
-   d="m 0,0 c -3.866,0 -7,3.134 -7,7 0,3.866 3.134,7 7,7 C 3.866,14 7,10.866 7,7 7,3.134 3.866,0 0,0 m -0.062,17 c -4.875,0 -9.251,-1.667 -18,-10 8.624,-8.333 13.125,-10 18,-10 4.874,0 9.25,1.667 17.999,10 C 9.313,15.333 4.812,17 -0.062,17" />
-        </g><g
-   transform="matrix(0.5,0,0,-0.5,110.5,12)"
-   id="g278">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path280"
-   d="M 0,0 C 0,-1.657 1.343,-3 3,-3 4.657,-3 6,-1.657 6,0 6,1.657 4.657,3 3,3 1.343,3 0,1.657 0,0" />
-        </g><g
-   transform="matrix(0.5,0,0,-0.5,139.5,33)"
-   id="g282">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path284"
-   d="M 0,0 18,0 15,-20 3,-20" />
-        </g><g
-   transform="matrix(0.5,0,0,-0.5,147.5,30)"
-   id="g286">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path288"
-   d="m 0,0 -4,0 0,2 -6,0 0,-2 -4,0 c -1.104,0 -2,-0.964 -2,-2 l 0,-2 2,0 14,0 2,0 0,2 C 2,-0.964 1.104,0 0,0" />
-        </g><g
-   transform="matrix(0.5,0,0,-0.5,317,69)"
-   id="g290">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path292"
-   d="M 0,0 0,10 -10,0 0,0 z" />
-        </g><g
-   transform="matrix(0.5,0,0,-0.5,212,13)"
-   id="g294">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path296"
-   d="m 0,0 0,-8 -16,0 0,6 -2,0 0,-6 0,-2 2.428,0 L 2,-10 2,-8 2,0 0,0 z" />
-        </g><g
-   id="g3120"
-   transform="matrix(0.5,0,0,0.5,2,0)"><g
-     transform="matrix(0.84210526,0,0,-1.0116338,42,168)"
-     id="g3114">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path3116"
-   d="m 0,0 -19,9.885 0,-19.77" />
-        </g><path
-     inkscape:connector-curvature="0"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     id="path3118"
-     d="m 22,178 -6,0 0,-20 6,0 0,20 z" /></g><g
-   id="g4303"
-   transform="matrix(0.5,0,0,0.5,1,-1)"><path
-     d="m 92,178 -6,0 0,-16 6,0 0,16 z"
-     id="path3127"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     inkscape:connector-curvature="0"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     id="path3129"
-     d="m 104,178 -6,0 0,-16 6,0 0,16 z" /></g><g
-   id="g4323"
-   transform="scale(0.5,0.5)"><g
-     transform="matrix(0.33333333,0,0,-0.33333333,157,178)"
-     id="g3310">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path3312"
-   d="m 0,0 c 0,-6.627 5.372,-12 12,-12 6.628,0 12,5.373 12,12 C 24,6.627 18.628,12 12,12 5.372,12 0,6.627 0,0" />
-        </g><g
-     id="g4318"><g
-       id="g3314"
-       transform="matrix(0,0.42105263,0.91047041,0,161,172)">
-          <path
-   d="m 0,0 -19,9.885 0,-19.77"
-   id="path3316"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g><path
-       d="m 164,164 -6,0 0,-8 6,0 0,8 z"
-       id="path3318"
-       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-       inkscape:connector-curvature="0" /></g></g><g
-   id="g4363"
-   transform="scale(0.5,0.5)"><g
-     id="g4333"
-     transform="matrix(0.33333333,0,0,-0.33333333,221,178)">
-          <path
-   d="m 0,0 c 0,-6.627 5.372,-12 12,-12 6.628,0 12,5.373 12,12 C 24,6.627 18.628,12 12,12 5.372,12 0,6.627 0,0"
-   id="path4335"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g><g
-     id="g4339"
-     transform="matrix(0,-0.42105263,0.91047041,0,225,156)">
-          <path
-   d="m 0,0 -19,9.885 0,-19.77"
-   id="path4341"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path4351"
-   d="m 0,0 -19,9.885 0,-19.77" /></g><path
-     d="m 228,164 -6,0 0,8 6,0 0,-8 z"
-     id="path4343"
-     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /></g><g
-   id="g4371"
-   transform="matrix(0.5,0,0,0.5,-0.371325,0.98892)"><g
-     transform="matrix(0.33333333,0,0,-0.33333333,285.10972,172.09028)"
-     id="g3386">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path3388"
-   d="m -9.6000008e-8,3.5999999 c 0,-6.627 5.371999996000008,-12 12.000000096000007,-12 6.628,0 12,5.373 12,12 C 24,10.227 18.628,15.6 12,15.6 5.3719999,15.6 -9.6000008e-8,10.227 -9.6000008e-8,3.5999999" />
-        </g><path
-     sodipodi:nodetypes="cc"
-     inkscape:connector-curvature="0"
-     id="path3400"
-     d="m 275.24265,172.08579 c 5.10629,-16.86347 22.80573,-17.45673 27.87622,0"
-     style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><g
-     inkscape:transform-center-y="4.8667427"
-     inkscape:transform-center-x="31.812074"
-     transform="matrix(0.12650103,0.40160031,-0.67542793,0.21275463,304.09531,176.02216)"
-     id="g4357">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path4359"
-   d="m 0,0 -19,9.885 0,-19.77" />
-        <path
-   d="m 0,0 -19,9.885 0,-19.77"
-   id="path4361"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" /></g></g><g
-   id="g4389"
-   transform="matrix(0.36842106,0,0,-0.40465352,12,102)">
-          <path
-   d="m 0,0 -19,9.885 0,-19.77"
-   id="path4391"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g><g
-   transform="matrix(0,0.36842106,0.40465352,0,24,106)"
-   id="g4393">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path4395"
-   d="m 0,0 -19,9.885 0,-19.77" />
-        </g><g
-   id="g4397"
-   transform="matrix(0,-0.36842106,0.40465352,0,8,111)">
-          <path
-   d="m 0,0 -19,9.885 0,-19.77"
-   id="path4399"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g><path
-   d="m 54,105 0,7 -10.000005,0 0,-7 z m 1,8 0,-11 -12,0 0,11 z"
-   id="path4987"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0"
-   sodipodi:nodetypes="cccccccccc" /><rect
-   style="opacity:0.81893005;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="rect4991"
-   width="12"
-   height="3"
-   x="73"
-   y="110"
-   ry="0" /><g
-   id="g6865"
-   transform="matrix(1,0,0,1.0833067,0,-7.5809332)"><g
-     transform="matrix(0.9994799,0,0,0.99934297,0.09079898,0.05570112)"
-     id="g6857"><g
-       id="g6850"><g
-         transform="matrix(0.49680733,0,0,0.49594275,1.1210985,0.73973011)"
-         id="g6083"><rect
-           y="158.80269"
-           x="336.90268"
-           height="22.194668"
-           width="28.194668"
-           id="rect4212"
-           style="fill:none;stroke:#000000;stroke-width:1.93673468;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><g
-           transform="matrix(-0.52631579,0,0,-0.60698027,349.99999,169.90003)"
-           id="g4216">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path4218"
-   d="M -19.118894,9.0253678e-4 0.01315753,9.9733228 l 0,-19.9448405" />
-        </g></g><rect
-         y="78.996201"
-         x="171.99866"
-         height="12.00789"
-         width="1.0005203"
-         id="rect6836"
-         style="fill:#000000;fill-opacity:1;stroke:none" /></g></g></g><g
-   id="g6963"
-   transform="matrix(1,0,0,1.0833067,0,-7.5809087)"><g
-     transform="translate(32.000017,-2.9395427e-4)"
-     id="g6874"><g
-       transform="matrix(0.9994799,0,0,0.99934297,0.09079898,0.05570112)"
-       id="g6876"><g
-         id="g6878"><g
-           transform="matrix(0.49680733,0,0,0.49594275,1.1210985,0.73973011)"
-           id="g6880"><rect
-             y="158.80269"
-             x="336.90268"
-             height="22.194668"
-             width="28.194668"
-             id="rect6882"
-             style="fill:none;stroke:#000000;stroke-width:1.93673468;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><g
-             transform="matrix(-0.52631579,0,0,-0.60698027,349.99999,169.90003)"
-             id="g6884">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path6886"
-   d="M 0.01315753,9.0253678e-4 -19.118894,9.9733228 l 0,-19.9448405" />
-        </g></g><rect
-           y="78.996201"
-           x="171.99866"
-           height="12.00789"
-           width="1.0005203"
-           id="rect6888"
-           style="fill:#000000;fill-opacity:1;stroke:none" /></g></g></g></g><g
-   id="g6954"
-   transform="matrix(1,0,0,1.0833067,0,-7.5809087)"><g
-     id="g6890"
-     transform="translate(64.000017,-2.9395427e-4)"><g
-       id="g6892"
-       transform="matrix(0.9994799,0,0,0.99934297,0.09079898,0.05570112)"><g
-         id="g6894"><g
-           id="g6896"
-           transform="matrix(0.49680733,0,0,0.49594275,1.1210985,0.73973011)"><rect
-             style="fill:none;stroke:#000000;stroke-width:1.93673468;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-             id="rect6898"
-             width="28.194668"
-             height="22.194668"
-             x="336.90268"
-             y="158.80269" /><g
-             id="g6900"
-             transform="matrix(-0.52631579,0,0,-0.60698027,349.99999,169.90003)">
-          
-        </g></g><rect
-           style="fill:#000000;fill-opacity:1;stroke:none"
-           id="rect6904"
-           width="1.0005203"
-           height="12.00789"
-           x="171.99866"
-           y="78.996201" /></g></g></g></g><g
-   transform="matrix(-1,0,0,1.0833067,448.00002,-7.5812271)"
-   id="g6906"><g
-     transform="matrix(0.9994799,0,0,0.99934297,0.09079898,0.05570112)"
-     id="g6908"><g
-       id="g6910"><g
-         transform="matrix(0.49680733,0,0,0.49594275,1.1210985,0.73973011)"
-         id="g6912"><rect
-           y="158.80269"
-           x="336.90268"
-           height="22.194668"
-           width="28.194668"
-           id="rect6914"
-           style="fill:none;stroke:#000000;stroke-width:1.93673468;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><g
-           transform="matrix(-0.52631579,0,0,-0.60698027,349.99999,169.90003)"
-           id="g6916">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path6918"
-   d="M 0.01315753,9.0253678e-4 -19.118894,9.9733228 l 0,-19.9448405" />
-        </g></g><rect
-         y="78.996201"
-         x="171.99866"
-         height="12.00789"
-         width="1.0005203"
-         id="rect6920"
-         style="fill:#000000;fill-opacity:1;stroke:none" /></g></g></g><g
-   id="g6938"
-   transform="matrix(-1,0,0,1.0833067,479.00002,-7.5812271)"><g
-     id="g6940"
-     transform="matrix(0.9994799,0,0,0.99934297,0.09079898,0.05570112)"><g
-       id="g6942"><g
-         id="g6944"
-         transform="matrix(0.49680733,0,0,0.49594275,1.1210985,0.73973011)"><rect
-           style="fill:none;stroke:#000000;stroke-width:1.93673468;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           id="rect6946"
-           width="28.194668"
-           height="22.194668"
-           x="336.90268"
-           y="158.80269" /><g
-           id="g6948"
-           transform="matrix(-0.52631579,0,0,-0.60698027,349.99999,169.90003)">
-          <path
-   d="M -19.118894,9.0253678e-4 0.01315753,9.9733228 l 0,-19.9448405"
-   id="path6950"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g></g><rect
-         style="fill:#000000;fill-opacity:1;stroke:none"
-         id="rect6952"
-         width="1.0005203"
-         height="12.00789"
-         x="171.99866"
-         y="78.996201" /></g></g></g><g
-   id="g5024"
-   transform="translate(-2,-1)"><g
-     id="g4933"><path
-       inkscape:connector-curvature="0"
-       style="fill:url(#linearGradient5103);fill-opacity:1;fill-rule:nonzero;stroke:none"
-       id="path4791"
-       d="m 120,97 c -3.86575,0 -7,3.13367 -7,7 0,3.86633 3.13425,7 7,7 3.86575,0 7,-3.13367 7,-7 0,-3.86633 -3.13425,-7 -7,-7" /></g><path
-     inkscape:connector-curvature="0"
-     style="fill:#f27d82;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     id="path4795"
-     d="m 113.5,104 c 0,3.58963 2.90983,6.5 6.5,6.5 3.59017,0 6.5,-2.91037 6.5,-6.5 0,-3.58963 -2.90983,-6.5 -6.5,-6.5 -3.59017,0 -6.5,2.91037 -6.5,6.5" /><g
-     style="fill:#000000;fill-opacity:0.36444451;stroke:none"
-     transform="matrix(0.32998633,0,0,-0.32998633,123.5,101.9332)"
-     id="g4797">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:0.36444451;fill-rule:nonzero;stroke:none"
-   id="path4799"
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z" />
-        </g><g
-     id="g4801"
-     transform="matrix(0.32998633,0,0,-0.32998633,123.5,101.4332)"
-     style="fill:#ffffff;fill-opacity:1;stroke:none">
-          <path
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z"
-   id="path4803"
-   style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g></g><g
-   id="g5105"
-   transform="translate(-0.99999998,-0.99999868)"><g
-     id="g4875"
-     transform="matrix(0.32998633,0,0,-0.32998633,139.5,101.9332)"
-     style="fill:#000000;fill-opacity:0.24444442;stroke:none">
-          <path
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z"
-   id="path4877"
-   style="fill:#000000;fill-opacity:0.24444442;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g><g
-     style="fill:#676767;fill-opacity:1;stroke:none"
-     transform="matrix(0.32998633,0,0,-0.32998633,139.5,101.4332)"
-     id="g4879">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#676767;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path4881"
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z" />
-        </g></g><g
-   id="g4951"
-   transform="matrix(-1,0,0,-1,223,207)"
-   style="fill:url(#linearGradient5356);fill-opacity:1;fill-rule:nonzero"><path
-     inkscape:connector-curvature="0"
-     style="fill:url(#linearGradient5354);fill-opacity:1;fill-rule:nonzero;stroke:none"
-     id="path4953"
-     d="m 120,97 c -3.86575,0 -7,3.13367 -7,7 0,3.86633 3.13425,7 7,7 3.86575,0 7,-3.13367 7,-7 0,-3.86633 -3.13425,-7 -7,-7" /></g><path
-   inkscape:connector-curvature="0"
-   style="fill:url(#linearGradient5365);fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path4955"
-   d="m 103,96.5 c -3.58963,0 -6.5,2.90983 -6.5,6.5 0,3.59017 2.91037,6.5 6.5,6.5 3.58963,0 6.5,-2.90983 6.5,-6.5 0,-3.59017 -2.91037,-6.5 -6.5,-6.5" /><g
-   style="fill:#993c35;fill-opacity:1;stroke:none"
-   transform="matrix(0.32998633,0,0,-0.32998633,106.5,100.9332)"
-   id="g4957">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#993c35;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path4959"
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z" />
-        </g><g
-   id="g4961"
-   transform="matrix(0.32998633,0,0,-0.32998633,106.5,100.4332)"
-   style="fill:#ffffff;fill-opacity:1;stroke:none">
-          <path
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z"
-   id="path4963"
-   style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g><g
-   id="g5129"
-   transform="translate(-2.5,-1.5)"><path
-     inkscape:connector-curvature="0"
-     style="fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     id="path4998"
-     d="m 145.5,104 c 0,3.58963 2.90983,6.5 6.5,6.5 3.59017,0 6.5,-2.91037 6.5,-6.5 0,-3.58963 -2.90983,-6.5 -6.5,-6.5 -3.59017,0 -6.5,2.91037 -6.5,6.5" /><g
-     style="fill:#000000;fill-opacity:0.37333332;stroke:none"
-     transform="matrix(0.32998633,0,0,-0.32998633,155.5,101.9332)"
-     id="g5000">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:0.37333332;fill-rule:nonzero;stroke:none"
-   id="path5002"
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z" />
-        </g><g
-     id="g5004"
-     transform="matrix(0.32998633,0,0,-0.32998633,155.5,101.4332)"
-     style="fill:#ffffff;fill-opacity:1;stroke:none">
-          <path
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z"
-   id="path5006"
-   style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g></g><g
-   id="g5136"
-   transform="translate(-1.5,-1.5)"><path
-     d="m 161.5,104 c 0,3.58963 2.90983,6.5 6.5,6.5 3.59017,0 6.5,-2.91037 6.5,-6.5 0,-3.58963 -2.90983,-6.5 -6.5,-6.5 -3.59017,0 -6.5,2.91037 -6.5,6.5"
-     id="path5039"
-     style="fill:#9f9f9f;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><g
-     id="g5041"
-     transform="matrix(0.32998633,0,0,-0.32998633,171.5,101.9332)"
-     style="fill:#000000;fill-opacity:0.36444475;stroke:none">
-          <path
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z"
-   id="path5043"
-   style="fill:#000000;fill-opacity:0.36444475;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g><g
-     style="fill:#ffffff;fill-opacity:1;stroke:none"
-     transform="matrix(0.32998633,0,0,-0.32998633,171.5,101.4332)"
-     id="g5045">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path5047"
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z" />
-        </g></g><g
-   transform="translate(45,-1.4999987)"
-   id="g5143"><g
-     style="fill:#000000;fill-opacity:0.24444442;stroke:none"
-     transform="matrix(0.32998633,0,0,-0.32998633,139.5,101.9332)"
-     id="g5145">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#000000;fill-opacity:0.24444442;fill-rule:nonzero;stroke:none"
-   id="path5147"
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z" />
-        </g><g
-     id="g5149"
-     transform="matrix(0.32998633,0,0,-0.32998633,139.5,101.4332)"
-     style="fill:#676767;fill-opacity:1;stroke:none">
-          <path
-   d="M 0,0 -2.828,2.828 -10.606,-4.95 -18.385,2.828 -21.213,0 l 7.778,-7.778 -7.778,-7.779 2.828,-2.828 7.779,7.779 7.778,-7.779 L 0,-15.557 -7.778,-7.778 0,0 z"
-   id="path5151"
-   style="fill:#676767;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g></g><g
-   id="g5165"
-   transform="matrix(0.396371,0,0,-0.47078517,131.64855,116.21248)">
-          <path
-   d="m 0,0 -3.618,4.311 -3.064,-2.572 6.428,-7.66 2.835,2.845 13.443,13.443 -2.828,2.829 L 0,0 z"
-   id="path5167"
-   style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" />
-        </g><path
-   style="fill:none;stroke:#367cf1;stroke-width:1.50000000000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-   d="m 195.75,97.750005 3.5,3.249985 -3.5,3.25001"
-   id="path5212"
-   inkscape:connector-curvature="0"
-   sodipodi:nodetypes="ccc" /><path
-   sodipodi:nodetypes="ccc"
-   inkscape:connector-curvature="0"
-   id="path5214"
-   d="m 195.75,108.75001 3.5,3.24998 -3.5,3.25001"
-   style="fill:none;stroke:#939393;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><g
-   id="g5222"
-   transform="translate(-2,0)"><g
-     style="fill:#bababa;fill-opacity:1"
-     transform="matrix(0.08333333,0,0,-0.08333333,211,101)"
-     id="g5202">
-          <path
-   inkscape:connector-curvature="0"
-   style="fill:#bababa;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path5204"
-   d="m 0,0 c 0,-6.627 5.372,-12 12,-12 6.628,0 12,5.373 12,12 C 24,6.627 18.628,12 12,12 5.372,12 0,6.627 0,0" />
-        </g><path
-     sodipodi:nodetypes="ccc"
-     inkscape:connector-curvature="0"
-     id="path5216"
-     d="m 210.25,97.750006 -3.5,3.249984 3.5,3.25001"
-     style="fill:none;stroke:#bababa;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g><g
-   id="error-message"
-   transform="translate(11.000005,-9.9999998)"><g
-     transform="matrix(0.71428571,0,0,0.71428571,121.28571,36.714286)"
-     id="g5241"><path
-       d="m 120,97 c -3.86575,0 -7,3.13367 -7,7 0,3.86633 3.13425,7 7,7 3.86575,0 7,-3.13367 7,-7 0,-3.86633 -3.13425,-7 -7,-7"
-       id="path5243"
-       style="fill:url(#linearGradient5281);fill-opacity:1;fill-rule:nonzero;stroke:none"
-       inkscape:connector-curvature="0" /></g><path
-     d="m 202.35714,111 c 0,2.56402 2.07845,4.64286 4.64286,4.64286 2.5644,0 4.64285,-2.07884 4.64285,-4.64286 0,-2.56402 -2.07845,-4.64286 -4.64285,-4.64286 -2.56441,0 -4.64286,2.07884 -4.64286,4.64286"
-     id="path5245"
-     style="fill:#eb3941;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /><path
-     inkscape:connector-curvature="0"
-     id="path5264"
-     d="m 205,109 c 4,4 4,4 4,4"
-     style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><path
-     style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 209,109 c -4,4 -4,4 -4,4"
-     id="path5266"
-     inkscape:connector-curvature="0" /><path
-     style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 205,109 c 4,4 4,4 4,4"
-     id="path5268"
-     inkscape:connector-curvature="0" /><path
-     inkscape:connector-curvature="0"
-     id="path5270"
-     d="m 209,109 c -4,4 -4,4 -4,4"
-     style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></g><path
-   sodipodi:nodetypes="cccc"
-   inkscape:connector-curvature="0"
-   id="path5289"
-   d="m 203,116 4,-7.77778 4,7.77778 z"
-   style="fill:none;stroke:#c19600;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><path
-   style="fill:#f4bd00;fill-opacity:1;stroke:#f5be00;stroke-width:1.49999988;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-   d="m 203.01662,116 4,-7.77778 4,7.77778 z"
-   id="path5283"
-   inkscape:connector-curvature="0"
-   sodipodi:nodetypes="cccc" /><text
-   sodipodi:linespacing="125%"
-   id="text5301"
-   y="146.8199"
-   x="161.33199"
-   style="font-size:11.26096152999999944px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ad8601;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Times Bold"
-   xml:space="preserve"
-   transform="scale(1.2629669,0.79178638)"><tspan
-     y="146.8199"
-     x="161.33199"
-     id="tspan5303"
-     sodipodi:role="line">!</tspan></text>
-
-
-
-
-
-<path
-   style="font-size:9.67697048px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Times Bold"
-   sodipodi:nodetypes="cccccccccccc"
-   inkscape:connector-curvature="0"
-   id="path5364"
-   d="m 206,110 2,0 0,2.30275 -0.28334,1.67983 -1.43333,0 L 206,112.30275 206,110 m 0,4.56933 2,0 0,1.43067 -2,0 0,-1" /><text
-   xml:space="preserve"
-   style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
-   x="217.42622"
-   y="110.74906"
-   id="text5307"
-   sodipodi:linespacing="125%"><tspan
-     sodipodi:role="line"
-     id="tspan5309"
-     x="217.42622"
-     y="110.74906" /></text>
-
-
-
-
-
-<g
-   id="g5771"><path
-     sodipodi:type="arc"
-     style="fill:url(#linearGradient5737);fill-opacity:1;fill-rule:nonzero;stroke:none"
-     id="path5449"
-     sodipodi:cx="231.5"
-     sodipodi:cy="103.15625"
-     sodipodi:rx="3.625"
-     sodipodi:ry="3.84375"
-     d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-     transform="matrix(4.4216629e-4,1.3793103,-1.3008129,4.1702167e-4,363.08462,-218.35335)" /><path
-     transform="matrix(1.2413792,-3.9796805e-4,3.7530216e-4,1.1707316,-58.418,-19.676152)"
-     d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-     sodipodi:ry="3.84375"
-     sodipodi:rx="3.625"
-     sodipodi:cy="103.15625"
-     sodipodi:cx="231.5"
-     id="path5451"
-     style="fill:#dd0000;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     sodipodi:type="arc" /><path
-     sodipodi:type="arc"
-     style="fill:url(#linearGradient5767);fill-opacity:1;fill-rule:nonzero;stroke:none"
-     id="path5453"
-     sodipodi:cx="231.5"
-     sodipodi:cy="103.15625"
-     sodipodi:rx="3.625"
-     sodipodi:ry="3.84375"
-     d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-     transform="matrix(-2.0173838e-4,-0.62931035,0.92682926,-2.9712795e-4,133.46895,244.52849)" /><path
-     transform="matrix(1.4094051e-4,0.43965518,0.78048781,-2.5021302e-4,148.48744,2.1206306)"
-     d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-     sodipodi:ry="3.84375"
-     sodipodi:rx="3.625"
-     sodipodi:cy="103.15625"
-     sodipodi:cx="231.5"
-     id="path5455"
-     style="fill:url(#linearGradient5769);fill-opacity:1;fill-rule:nonzero;stroke:none"
-     sodipodi:type="arc" /></g><g
-   id="g5757"><path
-     sodipodi:type="arc"
-     style="fill:url(#linearGradient5743);fill-opacity:1;fill-rule:nonzero;stroke:none"
-     id="path5513"
-     sodipodi:cx="231.5"
-     sodipodi:cy="103.15625"
-     sodipodi:rx="3.625"
-     sodipodi:ry="3.84375"
-     d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-     transform="matrix(-0.01506784,1.3792098,-1.3007182,-0.01421029,377.66542,-216.8212)" /><path
-     transform="matrix(1.2413037,0.01356118,-0.01278943,1.1706604,-46.042497,-22.900348)"
-     d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-     sodipodi:ry="3.84375"
-     sodipodi:rx="3.625"
-     sodipodi:cy="103.15625"
-     sodipodi:cx="231.5"
-     id="path5515"
-     style="fill:#00be00;fill-opacity:1;fill-rule:nonzero;stroke:none"
-     sodipodi:type="arc" /><path
-     sodipodi:type="arc"
-     style="fill:url(#linearGradient5753);fill-opacity:1;fill-rule:nonzero;stroke:none"
-     id="path5517"
-     sodipodi:cx="231.5"
-     sodipodi:cy="103.15625"
-     sodipodi:rx="3.625"
-     sodipodi:ry="3.84375"
-     d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-     transform="matrix(0.00687469,-0.62926454,0.92676181,0.01012483,142.86511,243.44332)" /><path
-     transform="matrix(-0.00480288,0.43962318,0.780431,0.00852617,160.60265,1.1603243)"
-     d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-     sodipodi:ry="3.84375"
-     sodipodi:rx="3.625"
-     sodipodi:cy="103.15625"
-     sodipodi:cx="231.5"
-     id="path5519"
-     style="fill:url(#linearGradient5755);fill-opacity:1;fill-rule:nonzero;stroke:none"
-     sodipodi:type="arc" /></g><path
-   sodipodi:type="arc"
-   style="fill:#e5a600;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path5588"
-   sodipodi:cx="231.5"
-   sodipodi:cy="103.15625"
-   sodipodi:rx="3.625"
-   sodipodi:ry="3.84375"
-   d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-   transform="matrix(4.4216629e-4,1.3793103,-1.3008129,4.1702167e-4,385.08462,-218.35335)" /><path
-   transform="matrix(1.2413792,-3.9796805e-4,3.7530216e-4,1.1707316,-36.418,-19.676152)"
-   d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-   sodipodi:ry="3.84375"
-   sodipodi:rx="3.625"
-   sodipodi:cy="103.15625"
-   sodipodi:cx="231.5"
-   id="path5590"
-   style="fill:#ffbd00;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   sodipodi:type="arc" /><path
-   sodipodi:type="arc"
-   style="fill:url(#linearGradient5835);fill-opacity:1;fill-rule:nonzero;stroke:none"
-   id="path5592"
-   sodipodi:cx="231.5"
-   sodipodi:cy="103.15625"
-   sodipodi:rx="3.625"
-   sodipodi:ry="3.84375"
-   d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-   transform="matrix(-2.0173838e-4,-0.62931035,0.92682926,-2.9712795e-4,155.46895,244.52849)" /><path
-   transform="matrix(1.4094051e-4,0.43965518,0.78048781,-2.5021302e-4,170.44325,2.0764364)"
-   d="m 235.125,103.15625 a 3.625,3.84375 0 1 1 -7.25,0 3.625,3.84375 0 1 1 7.25,0 z"
-   sodipodi:ry="3.84375"
-   sodipodi:rx="3.625"
-   sodipodi:cy="103.15625"
-   sodipodi:cx="231.5"
-   id="path5594"
-   style="fill:url(#linearGradient5837);fill-opacity:1;fill-rule:nonzero;stroke:none"
-   sodipodi:type="arc" /><rect
-   style="fill:#000000;fill-opacity:0.38222225;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none"
-   id="rect4542"
-   width="8"
-   height="12"
-   x="268"
-   y="102"
-   ry="1.6104031"
-   rx="0" /><g
-   id="info-message"
-   transform="translate(11.000005,1.0000002)"><g
-   transform="matrix(0.71428571,0,0,0.71428571,121.28571,36.714286)"
-   id="g5241-7"
-   style="fill:url(#linearGradient5635);fill-opacity:1.0"><path
-     d="m 120,97 c -3.86575,0 -7,3.13367 -7,7 0,3.86633 3.13425,7 7,7 3.86575,0 7,-3.13367 7,-7 0,-3.86633 -3.13425,-7 -7,-7"
-     id="path5243-8"
-     style="fill:url(#linearGradient5635);fill-opacity:1.0;fill-rule:nonzero;stroke:none"
-     inkscape:connector-curvature="0" /></g><path
-   d="m 202.35714,111 c 0,2.56402 2.07845,4.64286 4.64286,4.64286 2.5644,0 4.64285,-2.07884 4.64285,-4.64286 0,-2.56402 -2.07845,-4.64286 -4.64285,-4.64286 -2.56441,0 -4.64286,2.07884 -4.64286,4.64286"
-   id="path5245-1"
-   style="fill:#2a53cd;fill-opacity:1;fill-rule:nonzero;stroke:none"
-   inkscape:connector-curvature="0" /><text
-   xml:space="preserve"
-   style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
-   x="217.52373"
-   y="112.00085"
-   id="text4177"
-   sodipodi:linespacing="125%"
-   transform="translate(-11.000005,-1.0000002)"><tspan
-     sodipodi:role="line"
-     id="tspan4179" /></text>
-
-
-<text
-   xml:space="preserve"
-   style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient5627);fill-opacity:1;stroke:none;font-family:Sans"
-   x="206.81799"
-   y="114.13864"
-   id="text4181"
-   sodipodi:linespacing="125%"><tspan
-     sodipodi:role="line"
-     id="tspan4183"
-     x="206.81799"
-     y="114.13864"
-     style="font-size:9px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr;text-anchor:middle;fill:#ffffff;fill-opacity:1;font-family:Serif;-inkscape-font-specification:Serif Bold">i</tspan></text>
-
-
-</g></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8"?><svg height="144" version="1.1" width="320" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink"
+><sodipodi:namedview showgrid="true"
+><inkscape:grid dotted="false" empspacing="2" enabled="true" id="grid3327" snapvisiblegridlinesonly="true" spacingx="32px" spacingy="24px" type="xygrid" visible="true"/></sodipodi:namedview
+><defs
+><linearGradient id="a"
+><stop offset="0" stop-color="#606eda"
+/><stop offset="1" stop-color="#021db2"/></linearGradient
+><linearGradient id="b"
+><stop offset="0" stop-color="#e59290"
+/><stop offset="1" stop-color="#e99890"/></linearGradient
+><linearGradient id="c"
+><stop offset="0" stop-color="#c0544f"
+/><stop offset="1" stop-color="#d08481"/></linearGradient
+><linearGradient id="d"
+><stop offset="0" stop-color="#ffa801" stop-opacity="0"
+/><stop offset="1" stop-color="#f0fb3d"/></linearGradient
+><linearGradient id="e"
+><stop offset="0" stop-color="#ffbd00" stop-opacity="0.65"
+/><stop offset="1" stop-color="#fff" stop-opacity="0.91"/></linearGradient
+><linearGradient id="f"
+><stop offset="0" stop-color="#00d600" stop-opacity="0"
+/><stop offset="1" stop-color="#d8fc7b" stop-opacity="0.81"/></linearGradient
+><linearGradient id="g"
+><stop offset="0" stop-color="#00ba00"
+/><stop offset="1" stop-color="#fff" stop-opacity="0.91"/></linearGradient
+><linearGradient id="h"
+><stop offset="0" stop-color="#00a104"
+/><stop offset="1" stop-color="#00c605"/></linearGradient
+><linearGradient id="i"
+><stop offset="0" stop-color="#f00" stop-opacity="0"
+/><stop offset="1" stop-color="#f0cb68" stop-opacity="0.71"/></linearGradient
+><linearGradient id="j"
+><stop offset="0" stop-color="#e60000" stop-opacity="0.65"
+/><stop offset="1" stop-color="#fff" stop-opacity="0.91"/></linearGradient
+><linearGradient id="k"
+><stop offset="0" stop-color="#a10000"
+/><stop offset="1" stop-color="#c60000"/></linearGradient
+><linearGradient id="l"
+><stop offset="0" stop-color="#d7687d"
+/><stop offset="1" stop-color="#b21402"/></linearGradient
+><radialGradient cx="0" cy="0" fx="0" fy="0" gradientTransform="matrix(18,0,0,-18,680,341)" gradientUnits="userSpaceOnUse" id="z" r="1" spreadMethod="pad"
+><stop offset="0"
+/><stop offset="1" stop-opacity="0"/></radialGradient
+><radialGradient cx="0" cy="0" fx="0" fy="0" gradientTransform="matrix(9,0,0,9,304,36)" gradientUnits="userSpaceOnUse" id="A" r="1" spreadMethod="pad" xlink:href="#z"
+/><linearGradient gradientTransform="matrix(0,-0.58333333,-0.58333333,0,118,110)" gradientUnits="userSpaceOnUse" id="m" x1="0" x2="24" xlink:href="#l" y1="0" y2="0"
+/><linearGradient gradientTransform="matrix(0,1,-1,0,206,0)" gradientUnits="userSpaceOnUse" id="n" x1="96.5" x2="109.5" xlink:href="#b" y1="103" y2="103"
+/><linearGradient gradientTransform="matrix(0,1,-1,0,207,-17)" gradientUnits="userSpaceOnUse" id="o" x1="113" x2="127" xlink:href="#c" y1="104" y2="104"
+/><linearGradient gradientTransform="matrix(0,-0.41666666,-0.41666666,0,218,106)" gradientUnits="userSpaceOnUse" id="p" x1="0" x2="24" xlink:href="#l" y1="0" y2="0"
+/><linearGradient gradientTransform="matrix(0.71428571,0,0,0.71428571,132.28571,37.714287)" gradientUnits="userSpaceOnUse" id="q" x1="113" x2="127" xlink:href="#a" y1="104" y2="104"
+/><linearGradient gradientTransform="matrix(0,1.3793103,-1.3008129,0,363.08462,-218.35335)" gradientUnits="userSpaceOnUse" id="r" x1="227.875" x2="235.125" xlink:href="#k" y1="103.15625" y2="103.15625"
+/><linearGradient gradientTransform="matrix(0,-0.62931035,0.92682926,0,133.46895,244.52849)" gradientUnits="userSpaceOnUse" id="s" x1="227.875" x2="235.125" xlink:href="#j" y1="103.15625" y2="103.15625"
+/><linearGradient gradientTransform="matrix(0,0.43965518,0.78048781,0,148.48744,2.1206316)" gradientUnits="userSpaceOnUse" id="t" x1="227.875" x2="235.125" xlink:href="#i" y1="103.15625" y2="103.15625"
+/><linearGradient gradientTransform="matrix(-0.01506784,1.3792098,-1.3007182,-0.01421029,377.66542,-216.8212)" gradientUnits="userSpaceOnUse" id="u" x1="227.875" x2="235.125" xlink:href="#h" y1="103.15625" y2="103.15625"
+/><linearGradient gradientTransform="matrix(0.00687469,-0.62926454,0.92676181,0.01012483,142.86511,243.44332)" gradientUnits="userSpaceOnUse" id="v" x1="227.875" x2="235.125" xlink:href="#g" y1="103.15625" y2="103.15625"
+/><linearGradient gradientTransform="matrix(-0.00480288,0.43962318,0.780431,0.00852617,160.60265,1.1603253)" gradientUnits="userSpaceOnUse" id="w" x1="227.875" x2="235.125" xlink:href="#f" y1="103.15625" y2="103.15625"
+/><linearGradient gradientTransform="matrix(0,-0.62931035,0.92682926,0,155.46895,244.52849)" gradientUnits="userSpaceOnUse" id="x" x1="227.875" x2="235.125" xlink:href="#e" y1="103.15625" y2="103.15625"
+/><linearGradient gradientTransform="matrix(0,0.43965518,0.78048781,0,170.44325,2.076437)" gradientUnits="userSpaceOnUse" id="y" x1="227.875" x2="235.125" xlink:href="#d" y1="103.15625" y2="103.15625"/></defs
+><path d="M57 12 53.5 8 39 8l0 8 14.5 0"
+/><path d="m25 36-3.64-4-1.79 0-5.57 8 7.36 0 3.64-4z"
+/><path d="m7 32 0 8 2.05 0 4.95-8-7 0z"
+/><path d="m9.67 44.55-1.59-1.32 10.76-15.78 1.59 1.32-10.76 15.78z"
+/><path d="M16 5L16 7C13.24 7 11 9.24 11 12C11 14.76 13.24 17 16 17C18.76 17 21 14.76 21 12L19.16 12C19.12 13.72 17.73 15.09 16 15.09C14.25 15.09 12.84 13.69 12.84 11.94C12.84 10.19 14.25 8.78 16 8.78L16 11L20.5 8L16 5z"
+/><path d="m53 37-10 0 0-5 10 0 0 5zm-12 5 14 0 0-12-14 0 0 12z"
+/><path d="m10 57-2 0 0 9 11 0 0-2-9 0z"
+/><path d="m13 56 7 0 0 5-7 0zm-2-2 0 9 11 0 0-9z"
+/><path d="m86 33-8 0 0-2 8 0 0 2z"
+/><path d="m71.5 31.44 4.2 4.31-4.2 4.31 1.4 1.44 5.6-5.75L72.9 30z"
+/><path d="m86 37-6 0 0-2 6 0 0 2z"
+/><path d="m86 41-8 0 0-2 8 0 0 2z"
+/><path d="m80.44 16.94c-2.48 0-4.5-2.02-4.5-4.5 0-0.88 0.26-1.7 0.69-2.39l6.2 6.2c-0.69 0.44-1.51 0.69-2.39 0.69m4.5-4.5c0 0.88-0.26 1.7-0.69 2.39l-6.2-6.2c0.69-0.44 1.51-0.69 2.39-0.69 2.48 0 4.5 2.02 4.5 4.5M80.5 6c-3.59 0-6.5 2.91-6.5 6.5 0 3.59 2.91 6.5 6.5 6.5 3.59 0 6.5-2.91 6.5-6.5 0-3.59-2.91-6.5-6.5-6.5"
+/><path d="m117 65-10 0 0-10 10 0 0 10z"
+/><path d="m116 37 0 4-8 0 0-3-1 0 0 3 0 1 10 0 0-5z"
+/><path d="m111.88 35.9-1.83-2.25-1.55 1.34 3.26 4.01 8.24-8.52-1.43-1.48-6.68 6.9z"
+/><path d="M149 8.33 147.67 7 144 10.67 140.33 7 139 8.33l3.67 3.67-3.67 3.67 1.33 1.33 3.67-3.67 3.67 3.67L149 15.67 145.33 12 149 8.33z"
+/><path d="m44 59 2 3 0 4 4 0 0-4 2-3z" fill="#424242" opacity="0.5"
+/><path d="m46.5 65.23c0.32 0.13 0.84 0.24 1.47 0.24 0.59 0 1.14-0.1 1.53-0.26l0-3.93 4-4.57 0-0.19-11 0 0 0.22 4 4.57 0 3.93zM47.97 67C46.81 66.91 45.82 66.71 45 66.01l0-4.12-4-4.57 0-2.32 14 0 0 2.35-4 4.57 0 4.13c-0.92 0.67-2.1 0.94-3.03 0.95"
+/><path d="M86 60 76 55 76 65"
+/><path d="m153 57-11 0 0-2 11 0 0 2z" opacity="0.2"
+/><path d="m135 54 0-1-2 0 0 14 2 0 0-1-1 0 0-12z"
+/><path d="m142 57-6 0 0-2 6 0 0 2z"
+/><path d="m145 60-6 0 0-2 6 0 0 2z"
+/><path d="m150 63-6 0 0-2 6 0 0 2z"
+/><path d="m152 66-6 0 0-2 6 0 0 2z"
+/><path d="m170 67-2 0 0-9 2 0 0 9z"
+/><path d="m173 67-2 0 0-11 2 0 0 11z"
+/><path d="m176 67-2 0 0-13 2 0 0 13z"
+/><path d="m179 67-2 0 0-4 2 0 0 4z"
+/><path d="m182 67-2 0 0-9 2 0 0 9z"
+/><path d="m185 67-2 0 0-11 2 0 0 11z"
+/><path d="m208 57-10 0 0-2 10 0 0 2z"
+/><path d="m217 57-5 0 0-2 5 0 0 2z"
+/><path d="m200 61-2 0 0-2 2 0 0 2z"
+/><path d="m213 61-10 0 0-2 10 0 0 2z"
+/><path d="m217 61-2 0 0-2 2 0 0 2z"
+/><path d="m205 65-7 0 0-2 7 0 0 2z"
+/><path d="m217 65-8 0 0-2 8 0 0 2z"
+/><path d="m274 64-7 0 0-8 7 0 0 8zm-9 2 14 0 0-12-14 0 0 12z"
+/><path d="m298 12c0 3.31 2.69 6 6 6 3.31 0 6-2.69 6-6 0-3.31-2.69-6-6-6-3.31 0-6 2.69-6 6"
+/><path d="m295 36c0 4.97 4.03 9 9 9l0 0c4.97 0 9-4.03 9-9l0 0c0-4.97-4.03-9-9-9l0 0c-4.97 0-9 4.03-9 9" fill="url(#A)"
+/><path d="m298 36c0 3.31 2.69 6 6 6 3.31 0 6-2.69 6-6 0-3.31-2.69-6-6-6-3.31 0-6 2.69-6 6"
+/><path d="M239 30C236.24 30 234 32.24 234 35C234 37.76 236.24 40 239 40C240.03 40 240.96 39.69 241.75 39.16L245.56 43L247 41.56L243.19 37.75C243.71 36.96 244 36.02 244 35C244 32.24 241.76 30 239 30zM239 32C240.66 32 242 33.34 242 35C242 36.66 240.66 38 239 38C237.34 38 236 36.66 236 35C236 33.34 237.34 32 239 32z"
+/><path d="m233.73 63.76 5.25-3.23 5.32 2.23 4.95-4.03" fill="none" stroke="#000" stroke-miterlimit="10" stroke-width="1.48"
+/><path d="m231 67 0-13-1 0 0 14 21 0 0-1z"
+/><path d="m237 11-4 0 0-4 4 0 0 4z"
+/><path d="m247 9-9 0 0-2 9 0 0 2z"
+/><path d="m247 11-9 0 0-1 9 0 0 1z"
+/><path d="m247 15-9 0 0-2 9 0 0 2z"
+/><path d="m237 17-4 0 0-4 4 0 0 4z"
+/><path d="m247 17-9 0 0-1 9 0 0 1z"
+/><path d="m176 38.13c-1.18 0-2.13-0.96-2.13-2.13 0-1.18 0.96-2.13 2.13-2.13 1.18 0 2.13 0.96 2.13 2.13 0 1.18-0.96 2.13-2.13 2.13m8-3.73-2.93-0.53 1.72-2.39-2.26-2.26-2.46 1.79-0.47-3-3.2 0-0.4 3.13-2.53-1.92-2.26 2.26 1.99 2.59-3.2 0.33 0 3.2 3.33 0.33-2.12 2.59 2.26 2.26 2.53-2.12 0.4 3.33 3.2 0 0.4-3.2 2.53 1.99 2.26-2.26L181 38.07l3-0.47 0-3.2z"
+/><path d="m210.33 38.34c0 0.79 0.08 1.39 0.24 1.78 0.16 0.39 0.42 0.59 0.78 0.59 0.71 0 1.07-0.79 1.07-2.37 0-1.56-0.36-2.34-1.07-2.34-0.36 0-0.62 0.19-0.78 0.57-0.16 0.38-0.24 0.97-0.24 1.76m3.66 0c0 1.22-0.23 2.14-0.68 2.75-0.45 0.61-1.11 0.92-1.97 0.92-0.83 0-1.47-0.32-1.92-0.95-0.46-0.63-0.68-1.54-0.68-2.73 0-2.43 0.87-3.65 2.61-3.65 0.84 0 1.49 0.31 1.95 0.94 0.46 0.63 0.7 1.53 0.7 2.71m-2.42-8.16-6.6 11.67-1.58 0 6.6-11.67 1.58 0zm-8.99 3.5c0 0.79 0.08 1.38 0.24 1.77 0.16 0.39 0.42 0.58 0.77 0.58 0.72 0 1.07-0.78 1.07-2.35 0-1.57-0.36-2.36-1.07-2.36-0.36 0-0.62 0.19-0.77 0.58-0.16 0.39-0.24 0.98-0.24 1.77m3.66-0.02c0 1.22-0.22 2.14-0.67 2.76-0.45 0.62-1.11 0.92-1.98 0.92-0.83 0-1.46-0.32-1.92-0.95-0.45-0.64-0.68-1.55-0.68-2.73 0-2.43 0.87-3.65 2.6-3.65 0.85 0 1.51 0.32 1.97 0.95 0.46 0.63 0.69 1.53 0.69 2.7"
+/><path d="m268.01 35.99c0.61 0.28 1.07 0.9 1.07 1.58 0.11 0.85-0.05 1.72 0.12 2.57 0.27 0.54 1 0.28 1.43 0.55 0.49 0.24 0.48 1.01-0.06 1.18-0.56 0.22-1.18 0.08-1.74-0.05-0.71-0.2-1.41-0.72-1.5-1.5-0.18-0.89 0.01-1.8-0.16-2.68-0.22-0.64-0.94-0.9-1.57-0.93-0.58-0.1-0.83-0.94-0.35-1.3 0.51-0.35 1.26-0.14 1.69-0.66 0.44-0.48 0.29-1.18 0.32-1.78 0-0.81-0.02-1.77 0.65-2.34 0.66-0.54 1.58-0.71 2.41-0.63 0.63 0 0.98 0.87 0.4 1.22-0.44 0.37-1.2 0.06-1.51 0.65-0.14 0.56-0.05 1.15-0.07 1.73-0.01 0.75-0.05 1.64-0.72 2.13-0.12 0.1-0.26 0.19-0.4 0.26"
+/><path d="m276.98 35.99c-0.67-0.3-1.08-1.02-1.08-1.75-0.07-0.76 0.03-1.52-0.06-2.28-0.24-0.58-0.98-0.4-1.46-0.59-0.59-0.24-0.48-1.18 0.14-1.31 0.73-0.15 1.52-0.01 2.18 0.32 0.56 0.28 0.95 0.86 0.99 1.48 0.13 0.83-0.03 1.68 0.13 2.5 0.2 0.68 0.94 0.83 1.54 0.9 0.56 0.07 0.86 0.8 0.46 1.21-0.44 0.46-1.2 0.2-1.65 0.66-0.51 0.46-0.4 1.21-0.4 1.83-0.03 0.78 0.06 1.69-0.52 2.3-0.74 0.65-1.8 0.86-2.75 0.68-0.52-0.16-0.69-1.01-0.15-1.25 0.44-0.23 1.02-0.08 1.41-0.45 0.26-0.45 0.09-0.98 0.14-1.47 0.01-0.76-0.07-1.63 0.43-2.26C276.51 36.3 276.75 36.14 276.99 36"
+/><path d="m275 15-2 0 0-6 2 0zm-4 0-2 0 0-6 2 0zm4-10-6 0-4 4 0 6 4 4 6 0 4-4.12 0-5.88z"
+/><path d="m112.03 15.5c-1.93 0-3.5-1.57-3.5-3.5 0-1.93 1.57-3.5 3.5-3.5 1.93 0 3.5 1.57 3.5 3.5 0 1.93-1.57 3.5-3.5 3.5m-0.03-8.5c-2.44 0-4.63 0.83-9 5 4.31 4.17 6.56 5 9 5 2.44 0 4.63-0.83 9-5-4.31-4.17-6.56-5-9-5"
+/><path d="m110.5 12c0 0.83 0.67 1.5 1.5 1.5 0.83 0 1.5-0.67 1.5-1.5 0-0.83-0.67-1.5-1.5-1.5-0.83 0-1.5 0.67-1.5 1.5"
+/><path d="m139.5 33 9 0-1.5 10-6 0"
+/><path d="m147.5 30-2 0 0-1-3 0 0 1-2 0c-0.55 0-1 0.48-1 1l0 1 1 0 7 0 1 0 0-1c0-0.52-0.45-1-1-1"
+/><path d="m317 69 0-5-5 5 5 0z"
+/><path d="m207.88 11.9-1.83-2.26-1.55 1.35 3.26 4.01L216 6.48 214.57 5z" opacity="0.4"
+/><path d="m212 13 0 4-8 0 0-3-1 0 0 4 10 0 0-5z"
+/><path d="m23 84-8-5 0 10"
+/><path d="m13 89-3 0 0-10 3 0 0 10z"
+/><path d="m47 88-3 0 0-8 3 0 0 8z"
+/><path d="m53 88-3 0 0-8 3 0 0 8z"
+/><path d="m78.5 89c0 1.1 0.9 2 2 2 1.1 0 2-0.9 2-2 0-1.1-0.9-2-2-2-1.1 0-2 0.9-2 2"
+/><path d="M79 78L79 82L76 82L80.5 86L85 82L82 82L82 78L79 78z"
+/><path d="m110.5 89c0 1.1 0.9 2 2 2 1.1 0 2-0.9 2-2 0-1.1-0.9-2-2-2-1.1 0-2 0.9-2 2"
+/><path d="M112.5 78L108 82L111 82L111 86L114 86L114 82L117 82L112.5 78z"
+/><path d="m142 86.5c0 1.1 0.9 2 2 2 1.1 0 2-0.9 2-2 0-1.1-0.9-2-2-2-1.1 0-2 0.9-2 2"
+/><path d="m137.25 87.03c2.55-8.43 11.4-8.73 13.94 0" fill="none" stroke="#000" stroke-width="2.5"
+/><path d="m151.68 89-4.54-2.76 6.68-2.1"
+/><path d="m12 102-7-4 0 8"
+/><path d="m24 106 4-7-8 0"
+/><path d="m8 111 4 7-8 0"
+/><path d="m54 105 0 7-10 0 0-7zm1 8 0-11-12 0 0 11z"
+/><rect height="3" opacity="0.82" ry="0" width="12" x="73" y="110"
+/><rect fill="none" height="12" stroke="#000" width="14" x="168.5" y="78.5"
+/><path d="m180 84.5-5-3.25 0 6.5"
+/><rect height="13" width="1" x="172" y="78"
+/><rect fill="none" height="12" stroke="#000" width="14" x="200.5" y="78.5"
+/><path d="m207 84.5 5-3.25 0 6.5"
+/><rect height="13" width="1" x="204" y="78"
+/><rect fill="none" height="12" stroke="#000" width="14" x="232.5" y="78.5"
+/><rect height="13" width="1" x="236" y="78"
+/><rect fill="none" height="12" stroke="#000" width="14" x="264.5" y="78.5"
+/><path d="m272 84.5-5-3.25 0 6.5"
+/><rect height="13" width="1" x="274" y="78"
+/><rect fill="none" height="12" stroke="#000" width="14" x="296.5" y="78.5"
+/><path d="m299 84.5 5-3.25 0 6.5"
+/><rect height="13" width="1" x="306" y="78"
+/><path d="m118 96c-3.87 0-7 3.13-7 7 0 3.87 3.13 7 7 7 3.87 0 7-3.13 7-7 0-3.87-3.13-7-7-7" fill="url(#m)"
+/><path d="m111.5 103c0 3.59 2.91 6.5 6.5 6.5 3.59 0 6.5-2.91 6.5-6.5 0-3.59-2.91-6.5-6.5-6.5-3.59 0-6.5 2.91-6.5 6.5" fill="#f27d82"
+/><path d="m121.5 100.93-0.93-0.93-2.57 2.57-2.57-2.57-0.93 0.93 2.57 2.57L114.5 106.07 115.43 107 118 104.43 120.57 107 121.5 106.07 118.93 103.5 121.5 100.93z" fill-opacity="0.36"
+/><path d="m121.5 100.43-0.93-0.93-2.57 2.57-2.57-2.57-0.93 0.93 2.57 2.57-2.57 2.57 0.93 0.93 2.57-2.57 2.57 2.57 0.93-0.93-2.57-2.57 2.57-2.57z" fill="#fff"
+/><path d="m138.5 100.93-0.93-0.93-2.57 2.57-2.57-2.57-0.93 0.93 2.57 2.57L131.5 106.07 132.43 107 135 104.43 137.57 107 138.5 106.07 135.93 103.5 138.5 100.93z" fill-opacity="0.24"
+/><path d="m138.5 100.43-0.93-0.93-2.57 2.57-2.57-2.57-0.93 0.93 2.57 2.57-2.57 2.57 0.93 0.93 2.57-2.57 2.57 2.57 0.93-0.93-2.57-2.57 2.57-2.57z" fill="#676767"
+/><path d="m103 110c3.87 0 7-3.13 7-7 0-3.87-3.13-7-7-7-3.87 0-7 3.13-7 7 0 3.87 3.13 7 7 7" fill="url(#o)"
+/><path d="m103 96.5c-3.59 0-6.5 2.91-6.5 6.5 0 3.59 2.91 6.5 6.5 6.5 3.59 0 6.5-2.91 6.5-6.5 0-3.59-2.91-6.5-6.5-6.5" fill="url(#n)"
+/><path d="m106.5 100.93-0.93-0.93-2.57 2.57-2.57-2.57-0.93 0.93 2.57 2.57L99.5 106.07 100.43 107 103 104.43 105.57 107 106.5 106.07 103.93 103.5 106.5 100.93z" fill="#993c35"
+/><path d="m106.5 100.43-0.93-0.93-2.57 2.57-2.57-2.57-0.93 0.93 2.57 2.57-2.57 2.57 0.93 0.93 2.57-2.57 2.57 2.57 0.93-0.93-2.57-2.57 2.57-2.57z" fill="#fff"
+/><path d="m143 102.5c0 3.59 2.91 6.5 6.5 6.5 3.59 0 6.5-2.91 6.5-6.5 0-3.59-2.91-6.5-6.5-6.5-3.59 0-6.5 2.91-6.5 6.5" fill="#bebebe"
+/><path d="m153 100.43-0.93-0.93-2.57 2.57L146.93 99.5 146 100.43 148.57 103 146 105.57 146.93 106.5 149.5 103.93 152.07 106.5 153 105.57 150.43 103 153 100.43z" fill-opacity="0.37"
+/><path d="M153 99.93 152.07 99 149.5 101.57 146.93 99 146 99.93 148.57 102.5 146 105.07 146.93 106 149.5 103.43 152.07 106 153 105.07 150.43 102.5 153 99.93z" fill="#fff"
+/><path d="m160 102.5c0 3.59 2.91 6.5 6.5 6.5 3.59 0 6.5-2.91 6.5-6.5 0-3.59-2.91-6.5-6.5-6.5-3.59 0-6.5 2.91-6.5 6.5" fill="#9f9f9f"
+/><path d="m170 100.43-0.93-0.93-2.57 2.57L163.93 99.5 163 100.43 165.57 103 163 105.57 163.93 106.5 166.5 103.93 169.07 106.5 170 105.57 167.43 103 170 100.43z" fill-opacity="0.36"
+/><path d="M170 99.93 169.07 99 166.5 101.57 163.93 99 163 99.93 165.57 102.5 163 105.07 163.93 106 166.5 103.43 169.07 106 170 105.07 167.43 102.5 170 99.93z" fill="#fff"
+/><path d="m184.5 100.43-0.93-0.93-2.57 2.57-2.57-2.57-0.93 0.93 2.57 2.57-2.57 2.57 0.93 0.93 2.57-2.57 2.57 2.57 0.93-0.93-2.57-2.57 2.57-2.57z" fill-opacity="0.24"
+/><path d="m184.5 99.93-0.93-0.93-2.57 2.57-2.57-2.57-0.93 0.93 2.57 2.57L177.5 105.07 178.43 106 181 103.43 183.57 106 184.5 105.07 181.93 102.5 184.5 99.93z" fill="#676767"
+/><path d="m131.65 116.21-1.44-2.03-1.21 1.21 2.55 3.61 6.45-7.67-1.12-1.33z"
+/><path d="m195.75 97.75 3.5 3.25-3.5 3.25" fill="none" stroke="#367cf1" stroke-width="1.5"
+/><path d="m195.75 108.75 3.5 3.25-3.5 3.25" fill="none" stroke="#939393" stroke-width="1.5"
+/><path d="m209 101c0 0.55 0.45 1 1 1 0.55 0 1-0.45 1-1 0-0.55-0.45-1-1-1-0.55 0-1 0.45-1 1" fill="#bababa"
+/><path d="m208.25 97.75-3.5 3.25 3.5 3.25" fill="none" stroke="#bababa" stroke-width="1.5"
+/><path d="m218 96c-2.76 0-5 2.24-5 5 0 2.76 2.24 5 5 5 2.76 0 5-2.24 5-5 0-2.76-2.24-5-5-5" fill="url(#p)"
+/><path d="m213.36 101c0 2.56 2.08 4.64 4.64 4.64 2.56 0 4.64-2.08 4.64-4.64 0-2.56-2.08-4.64-4.64-4.64-2.56 0-4.64 2.08-4.64 4.64" fill="#eb3941"
+/><path d="m216 99 4 4" stroke="#fff"
+/><path d="m220 99-4 4" stroke="#fff"
+/><path d="m203 116 4-8 4 8z" stroke="#c19600" stroke-linejoin="round" stroke-width="2"
+/><path d="m203 116 4-8 4 8z" fill="#f4bd00" stroke="#f5bd00" stroke-linejoin="round" stroke-width="1.5"
+/><path d="m205.75 109.75 2.5 0 0 2.5-0.5 1.75-1.5 0-0.5-1.75 0-2.5m0 5.25 2.5 0 0 1.25-2.5 0" fill="#ad8601"
+/><path d="m206 110 2 0 0 2.25-0.5 1.75-1 0-0.5-1.75 0-2.25m0 5 2 0 0 1-2 0" fill="#fff"
+/><path d="m229 106c-2.76 0-5-2.24-5-5 0-2.76 2.24-5 5-5 2.76 0 5 2.24 5 5 0 2.76-2.24 5-5 5z" fill="url(#r)"
+/><path d="m233.5 101c0 2.49-2.01 4.5-4.5 4.5-2.49 0-4.5-2.01-4.5-4.5 0-2.49 2.01-4.5 4.5-4.5 2.49 0 4.5 2.01 4.5 4.5z" fill="#d00"
+/><path d="m229.03 96.53c1.97 0 3.56 1.02 3.56 2.28 0 1.26-1.59 2.28-3.56 2.28-1.97 0-3.56-1.02-3.56-2.28 0-1.26 1.59-2.28 3.56-2.28z" fill="url(#s)"
+/><path d="m229.03 105.47c1.66 0 3-0.71 3-1.59 0-0.88-1.34-1.59-3-1.59-1.66 0-3 0.71-3 1.59 0 0.88 1.34 1.59 3 1.59z" fill="url(#t)"
+/><path d="m239.95 106c-2.76-0.03-4.98-2.29-4.95-5.05 0.03-2.76 2.29-4.98 5.05-4.95 2.76 0.03 4.98 2.29 4.95 5.05-0.03 2.76-2.29 4.98-5.05 4.95z" fill="url(#u)"
+/><path d="m244.5 101.05c-0.03 2.49-2.06 4.48-4.55 4.45-2.49-0.03-4.48-2.06-4.45-4.55 0.03-2.49 2.06-4.48 4.55-4.45 2.49 0.03 4.48 2.06 4.45 4.55z" fill="#00be00"
+/><path d="m240.08 96.53c1.97 0.02 3.55 1.06 3.54 2.32-0.01 1.26-1.62 2.26-3.59 2.24-1.97-0.02-3.55-1.06-3.54-2.32 0.01-1.26 1.62-2.26 3.59-2.24z" fill="url(#v)"
+/><path d="m239.98 105.41c1.66 0.02 3.01-0.68 3.02-1.56 0.01-0.88-1.33-1.61-2.98-1.63-1.66-0.02-3.01 0.68-3.02 1.56-0.01 0.88 1.33 1.61 2.98 1.63z" fill="url(#w)"
+/><path d="m251 106c-2.76 0-5-2.24-5-5 0-2.76 2.24-5 5-5 2.76 0 5 2.24 5 5 0 2.76-2.24 5-5 5z" fill="#e5a600"
+/><path d="m255.5 101c0 2.49-2.01 4.5-4.5 4.5-2.49 0-4.5-2.01-4.5-4.5 0-2.49 2.01-4.5 4.5-4.5 2.49 0 4.5 2.01 4.5 4.5z" fill="#ffbd00"
+/><path d="m251.03 96.53c1.97 0 3.56 1.02 3.56 2.28 0 1.26-1.59 2.28-3.56 2.28-1.97 0-3.56-1.02-3.56-2.28 0-1.26 1.59-2.28 3.56-2.28z" fill="url(#x)"
+/><path d="m250.99 105.42c1.66 0 3-0.71 3-1.59 0-0.88-1.34-1.59-3-1.59-1.66 0-3 0.71-3 1.59 0 0.88 1.34 1.59 3 1.59z" fill="url(#y)"
+/><rect height="12" rx="0.25" ry="0.25" style="fill-opacity:0.38;stroke-linejoin:round;stroke-miterlimit:0;stroke-width:2;stroke:#000" width="8" x="268" y="102"
+/><path d="m218 107c-2.76 0-5 2.24-5 5 0 2.76 2.24 5 5 5 2.76 0 5-2.24 5-5 0-2.76-2.24-5-5-5" fill="url(#q)"
+/><path d="m213.36 112c0 2.56 2.08 4.64 4.64 4.64 2.56 0 4.64-2.08 4.64-4.64 0-2.56-2.08-4.64-4.64-4.64-2.56 0-4.64 2.08-4.64 4.64" fill="#2a53cd"
+/><path d="m216.93 109.14c-0.03-0.53 0.55-0.97 1.06-0.83 0.5 0.12 0.79 0.73 0.56 1.18-0.2 0.44-0.79 0.61-1.2 0.36C217.09 109.71 216.93 109.43 216.93 109.14zm1.7 5.46c0.22 0 0.45 0 0.67 0 0 0.18 0 0.35 0 0.53-0.96 0-1.93 0-2.89 0 0-0.18 0-0.35 0-0.53 0.22 0 0.44 0 0.66 0 0-1.2 0-2.41 0-3.61-0.22 0-0.44 0-0.66 0 0-0.18 0-0.35 0-0.53 0.74 0 1.48 0 2.22 0 0 1.38 0 2.76 0 4.14z" fill="#fff"
+/><rect height="8" rx="0.25" ry="0.25" style="fill-opacity:0.38;stroke-linejoin:round;stroke-miterlimit:0;stroke-width:2;stroke:#000" width="12" x="298" y="104"
+/><path d="m12.25 125c-0.68 0-1.25 0.57-1.25 1.25l0 9.69 2-3.31 0-5.63 3.38 0 1.19-2-5.31 0zm8.75 3.06-2 3.31 0 5.63-3.38 0-1.19 2 5.31 0c0.68 0 1.25-0.57 1.25-1.25l0-9.69z" stroke-width="2"
+/><path d="m10.75 140.75 10.5-17.5" fill="none" stroke="#000" stroke-width="2"
+/><path d="m46 128 7 0 0 8-7 0 0-8zm9-2-14 0 0 12 14 0 0-12z"/></svg
+>
\ No newline at end of file
diff --git a/Source/devtools/front_end/Images/src/svg2png.hashes b/Source/devtools/front_end/Images/src/svg2png.hashes
new file mode 100644
index 0000000..bee5f0f
--- /dev/null
+++ b/Source/devtools/front_end/Images/src/svg2png.hashes
@@ -0,0 +1,6 @@
+{
+    "statusbarButtonGlyphs.svg": "d39a8a0f4e920be140d74419e17eb6c9",
+    "breakpoint.svg": "69cd92d807259c022791112809b97799",
+    "settingsListRemove.svg": "ce9e7c5c5cdaef28e6ee51d9478d5485",
+    "breakpointConditional.svg": "4cf90210b2af2ed84db2f60b07bcde28"
+}
\ No newline at end of file
diff --git a/Source/devtools/front_end/Images/statusbarButtonGlyphs.png b/Source/devtools/front_end/Images/statusbarButtonGlyphs.png
index c58a9c5..7447e71 100644
--- a/Source/devtools/front_end/Images/statusbarButtonGlyphs.png
+++ b/Source/devtools/front_end/Images/statusbarButtonGlyphs.png
Binary files differ
diff --git a/Source/devtools/front_end/Images/statusbarButtonGlyphs2x.png b/Source/devtools/front_end/Images/statusbarButtonGlyphs2x.png
deleted file mode 100644
index ad4a5b2..0000000
--- a/Source/devtools/front_end/Images/statusbarButtonGlyphs2x.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/statusbarButtonGlyphs_2x.png b/Source/devtools/front_end/Images/statusbarButtonGlyphs_2x.png
new file mode 100644
index 0000000..873377e
--- /dev/null
+++ b/Source/devtools/front_end/Images/statusbarButtonGlyphs_2x.png
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelineHollowPillBlue.png b/Source/devtools/front_end/Images/timelineHollowPillBlue.png
deleted file mode 100644
index ed68e45..0000000
--- a/Source/devtools/front_end/Images/timelineHollowPillBlue.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelineHollowPillGray.png b/Source/devtools/front_end/Images/timelineHollowPillGray.png
deleted file mode 100644
index 12a6662..0000000
--- a/Source/devtools/front_end/Images/timelineHollowPillGray.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelineHollowPillGreen.png b/Source/devtools/front_end/Images/timelineHollowPillGreen.png
deleted file mode 100644
index 7b31b9e..0000000
--- a/Source/devtools/front_end/Images/timelineHollowPillGreen.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelineHollowPillOrange.png b/Source/devtools/front_end/Images/timelineHollowPillOrange.png
deleted file mode 100644
index b76928e..0000000
--- a/Source/devtools/front_end/Images/timelineHollowPillOrange.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelineHollowPillPurple.png b/Source/devtools/front_end/Images/timelineHollowPillPurple.png
deleted file mode 100644
index ce56400..0000000
--- a/Source/devtools/front_end/Images/timelineHollowPillPurple.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelineHollowPillRed.png b/Source/devtools/front_end/Images/timelineHollowPillRed.png
deleted file mode 100644
index 5cc45b8..0000000
--- a/Source/devtools/front_end/Images/timelineHollowPillRed.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelineHollowPillYellow.png b/Source/devtools/front_end/Images/timelineHollowPillYellow.png
deleted file mode 100644
index b62f774..0000000
--- a/Source/devtools/front_end/Images/timelineHollowPillYellow.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelinePillBlue.png b/Source/devtools/front_end/Images/timelinePillBlue.png
deleted file mode 100644
index ad4821d..0000000
--- a/Source/devtools/front_end/Images/timelinePillBlue.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelinePillGray.png b/Source/devtools/front_end/Images/timelinePillGray.png
deleted file mode 100644
index 4b4d182..0000000
--- a/Source/devtools/front_end/Images/timelinePillGray.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelinePillGreen.png b/Source/devtools/front_end/Images/timelinePillGreen.png
deleted file mode 100644
index e6a62a8..0000000
--- a/Source/devtools/front_end/Images/timelinePillGreen.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelinePillOrange.png b/Source/devtools/front_end/Images/timelinePillOrange.png
deleted file mode 100644
index 76c9f56..0000000
--- a/Source/devtools/front_end/Images/timelinePillOrange.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelinePillPurple.png b/Source/devtools/front_end/Images/timelinePillPurple.png
deleted file mode 100644
index b82cbd8..0000000
--- a/Source/devtools/front_end/Images/timelinePillPurple.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelinePillRed.png b/Source/devtools/front_end/Images/timelinePillRed.png
deleted file mode 100644
index d8359fd..0000000
--- a/Source/devtools/front_end/Images/timelinePillRed.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/Images/timelinePillYellow.png b/Source/devtools/front_end/Images/timelinePillYellow.png
deleted file mode 100644
index a5e0d8f..0000000
--- a/Source/devtools/front_end/Images/timelinePillYellow.png
+++ /dev/null
Binary files differ
diff --git a/Source/devtools/front_end/IndexedDBModel.js b/Source/devtools/front_end/IndexedDBModel.js
index 3bec5b1..aa9ec16 100644
--- a/Source/devtools/front_end/IndexedDBModel.js
+++ b/Source/devtools/front_end/IndexedDBModel.js
@@ -266,6 +266,7 @@
         /**
          * @param {?Protocol.Error} error
          * @param {!Array.<string>} databaseNames
+         * @this {WebInspector.IndexedDBModel}
          */
         function callback(error, databaseNames)
         {
@@ -290,6 +291,7 @@
         /**
          * @param {?Protocol.Error} error
          * @param {!IndexedDBAgent.DatabaseWithObjectStores} databaseWithObjectStores
+         * @this {WebInspector.IndexedDBModel}
          */
         function callback(error, databaseWithObjectStores)
         {
@@ -364,6 +366,7 @@
          * @param {?Protocol.Error} error
          * @param {!Array.<!IndexedDBAgent.DataEntry>} dataEntries
          * @param {boolean} hasMore
+         * @this {WebInspector.IndexedDBModel}
          */
         function innerCallback(error, dataEntries, hasMore)
         {
@@ -376,9 +379,9 @@
                 return;
             var entries = [];
             for (var i = 0; i < dataEntries.length; ++i) {
-                var key = WebInspector.RemoteObject.fromPayload(dataEntries[i].key);
-                var primaryKey = WebInspector.RemoteObject.fromPayload(dataEntries[i].primaryKey);
-                var value = WebInspector.RemoteObject.fromPayload(dataEntries[i].value);
+                var key = WebInspector.RemoteObject.fromLocalObject(JSON.parse(dataEntries[i].key));
+                var primaryKey = WebInspector.RemoteObject.fromLocalObject(JSON.parse(dataEntries[i].primaryKey));
+                var value = WebInspector.RemoteObject.fromLocalObject(JSON.parse(dataEntries[i].value));
                 entries.push(new WebInspector.IndexedDBModel.Entry(key, primaryKey, value));
             }
             callback(entries, hasMore);
@@ -418,6 +421,7 @@
 WebInspector.IndexedDBModel.DatabaseId.prototype = {
     /**
      * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
+     * @return {boolean}
      */
     equals: function(databaseId)
     {
diff --git a/Source/devtools/front_end/IndexedDBViews.js b/Source/devtools/front_end/IndexedDBViews.js
index 8c9c7a2..bc15f65 100644
--- a/Source/devtools/front_end/IndexedDBViews.js
+++ b/Source/devtools/front_end/IndexedDBViews.js
@@ -38,7 +38,6 @@
     WebInspector.View.call(this);
     this.registerRequiredCSS("indexedDBViews.css");
 
-    this.element.classList.add("fill");
     this.element.classList.add("indexed-db-database-view");
 
     this._headersListElement = this.element.createChild("ol", "outline-disclosure");
@@ -318,6 +317,7 @@
         /**
          * @param {!Array.<!WebInspector.IndexedDBModel.Entry>} entries
          * @param {boolean} hasMore
+         * @this {WebInspector.IDBDataView}
          */
         function callback(entries, hasMore)
         {
@@ -354,6 +354,9 @@
 
     _clearButtonClicked: function(event)
     {
+        /**
+         * @this {WebInspector.IDBDataView}
+         */
         function cleared() {
             this._clearButton.setEnabled(true);
             this._updateData(true);
diff --git a/Source/devtools/front_end/InplaceEditor.js b/Source/devtools/front_end/InplaceEditor.js
new file mode 100644
index 0000000..655ea88
--- /dev/null
+++ b/Source/devtools/front_end/InplaceEditor.js
@@ -0,0 +1,261 @@
+// 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.
+
+/**
+ * @constructor
+ */
+WebInspector.InplaceEditor = function()
+{
+};
+
+/**
+ * @param {!Element} element
+ * @param {!WebInspector.InplaceEditor.Config=} config
+ * @return {?{cancel: function(), commit: function(), setWidth: function(number)}}
+ */
+WebInspector.InplaceEditor.startEditing = function(element, config)
+{
+    if (config.multiline)
+        return WebInspector.moduleManager.instance(WebInspector.InplaceEditor).startEditing(element, config);
+
+    if (!WebInspector.InplaceEditor._defaultInstance)
+        WebInspector.InplaceEditor._defaultInstance = new WebInspector.InplaceEditor();
+    return WebInspector.InplaceEditor._defaultInstance.startEditing(element, config);
+}
+
+WebInspector.InplaceEditor.prototype = {
+    /**
+     * @return {string}
+     */
+    editorContent: function(editingContext) {
+        var element = editingContext.element;
+        if (element.tagName === "INPUT" && element.type === "text")
+            return element.value;
+
+        return element.textContent;
+    },
+
+    setUpEditor: function(editingContext)
+    {
+        var element = editingContext.element;
+        element.classList.add("editing");
+
+        var oldTabIndex = element.getAttribute("tabIndex");
+        if (typeof oldTabIndex !== "number" || oldTabIndex < 0)
+            element.tabIndex = 0;
+        WebInspector.setCurrentFocusElement(element);
+        editingContext.oldTabIndex = oldTabIndex;
+    },
+
+    closeEditor: function(editingContext)
+    {
+        var element = editingContext.element;
+        element.classList.remove("editing");
+
+        if (typeof editingContext.oldTabIndex !== "number")
+            element.removeAttribute("tabIndex");
+        else
+            element.tabIndex = editingContext.oldTabIndex;
+        element.scrollTop = 0;
+        element.scrollLeft = 0;
+    },
+
+    cancelEditing: function(editingContext)
+    {
+        var element = editingContext.element;
+        if (element.tagName === "INPUT" && element.type === "text")
+            element.value = editingContext.oldText;
+        else
+            element.textContent = editingContext.oldText;
+    },
+
+    augmentEditingHandle: function(editingContext, handle)
+    {
+    },
+
+    /**
+     * @param {!Element} element
+     * @param {!WebInspector.InplaceEditor.Config=} config
+     * @return {?{cancel: function(), commit: function()}}
+     */
+    startEditing: function(element, config)
+    {
+        if (!WebInspector.markBeingEdited(element, true))
+            return null;
+
+        config = config || new WebInspector.InplaceEditor.Config(function() {}, function() {});
+        var editingContext = { element: element, config: config };
+        var committedCallback = config.commitHandler;
+        var cancelledCallback = config.cancelHandler;
+        var pasteCallback = config.pasteHandler;
+        var context = config.context;
+        var isMultiline = config.multiline || false;
+        var moveDirection = "";
+        var self = this;
+
+        /**
+         * @param {?Event} e
+         */
+        function consumeCopy(e)
+        {
+            e.consume();
+        }
+
+        this.setUpEditor(editingContext);
+
+        editingContext.oldText = isMultiline ? config.initialValue : this.editorContent(editingContext);
+
+        /**
+         * @param {?Event=} e
+         */
+        function blurEventListener(e) {
+            if (!isMultiline || !e || !e.relatedTarget || !e.relatedTarget.isSelfOrDescendant(element))
+                editingCommitted.call(element);
+        }
+
+        /** @this {Element} */
+        function cleanUpAfterEditing()
+        {
+            WebInspector.markBeingEdited(element, false);
+
+            element.removeEventListener("blur", blurEventListener, isMultiline);
+            element.removeEventListener("keydown", keyDownEventListener, true);
+            if (pasteCallback)
+                element.removeEventListener("paste", pasteEventListener, true);
+
+            WebInspector.restoreFocusFromElement(element);
+            self.closeEditor(editingContext);
+        }
+
+        /** @this {Element} */
+        function editingCancelled()
+        {
+            self.cancelEditing(editingContext);
+            cleanUpAfterEditing.call(this);
+            cancelledCallback(this, context);
+        }
+
+        /** @this {Element} */
+        function editingCommitted()
+        {
+            cleanUpAfterEditing.call(this);
+
+            committedCallback(this, self.editorContent(editingContext), editingContext.oldText, context, moveDirection);
+        }
+
+        function defaultFinishHandler(event)
+        {
+            var isMetaOrCtrl = WebInspector.isMac() ?
+                event.metaKey && !event.shiftKey && !event.ctrlKey && !event.altKey :
+                event.ctrlKey && !event.shiftKey && !event.metaKey && !event.altKey;
+            if (isEnterKey(event) && (event.isMetaOrCtrlForTest || !isMultiline || isMetaOrCtrl))
+                return "commit";
+            else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code || event.keyIdentifier === "U+001B")
+                return "cancel";
+            else if (!isMultiline && event.keyIdentifier === "U+0009") // Tab key
+                return "move-" + (event.shiftKey ? "backward" : "forward");
+        }
+
+        function handleEditingResult(result, event)
+        {
+            if (result === "commit") {
+                editingCommitted.call(element);
+                event.consume(true);
+            } else if (result === "cancel") {
+                editingCancelled.call(element);
+                event.consume(true);
+            } else if (result && result.startsWith("move-")) {
+                moveDirection = result.substring(5);
+                if (event.keyIdentifier !== "U+0009")
+                    blurEventListener();
+            }
+        }
+
+        function pasteEventListener(event)
+        {
+            var result = pasteCallback(event);
+            handleEditingResult(result, event);
+        }
+
+        function keyDownEventListener(event)
+        {
+            var handler = config.customFinishHandler || defaultFinishHandler;
+            var result = handler(event);
+            handleEditingResult(result, event);
+        }
+
+        element.addEventListener("blur", blurEventListener, isMultiline);
+        element.addEventListener("keydown", keyDownEventListener, true);
+        if (pasteCallback)
+            element.addEventListener("paste", pasteEventListener, true);
+
+        var handle = {
+            cancel: editingCancelled.bind(element),
+            commit: editingCommitted.bind(element)
+        };
+        this.augmentEditingHandle(editingContext, handle);
+        return handle;
+    }
+}
+
+/**
+ * @constructor
+ * @param {function(!Element,string,string,T,string)} commitHandler
+ * @param {function(!Element,T)} cancelHandler
+ * @param {T=} context
+ * @template T
+ */
+WebInspector.InplaceEditor.Config = function(commitHandler, cancelHandler, context)
+{
+    this.commitHandler = commitHandler;
+    this.cancelHandler = cancelHandler
+    this.context = context;
+
+    /**
+     * Handles the "paste" event, return values are the same as those for customFinishHandler
+     * @type {function(!Element)|undefined}
+     */
+    this.pasteHandler;
+
+    /**
+     * Whether the edited element is multiline
+     * @type {boolean|undefined}
+     */
+    this.multiline;
+
+    /**
+     * Custom finish handler for the editing session (invoked on keydown)
+     * @type {function(!Element,*)|undefined}
+     */
+    this.customFinishHandler;
+}
+
+WebInspector.InplaceEditor.Config.prototype = {
+    setPasteHandler: function(pasteHandler)
+    {
+        this.pasteHandler = pasteHandler;
+    },
+
+    /**
+     * @param {string} initialValue
+     * @param {!Object} mode
+     * @param {string} theme
+     * @param {boolean=} lineWrapping
+     * @param {boolean=} smartIndent
+     */
+    setMultilineOptions: function(initialValue, mode, theme, lineWrapping, smartIndent)
+    {
+        this.multiline = true;
+        this.initialValue = initialValue;
+        this.mode = mode;
+        this.theme = theme;
+        this.lineWrapping = lineWrapping;
+        this.smartIndent = smartIndent;
+    },
+
+    setCustomFinishHandler: function(customFinishHandler)
+    {
+        this.customFinishHandler = customFinishHandler;
+    }
+}
diff --git a/Source/devtools/front_end/InspectElementModeController.js b/Source/devtools/front_end/InspectElementModeController.js
index 3b1c994..deb4819 100644
--- a/Source/devtools/front_end/InspectElementModeController.js
+++ b/Source/devtools/front_end/InspectElementModeController.js
@@ -42,6 +42,9 @@
 }
 
 WebInspector.InspectElementModeController.prototype = {
+    /**
+     * @return {boolean}
+     */
     enabled: function()
     {
         return this.toggleSearchButton.toggled;
@@ -59,6 +62,7 @@
 
         /**
          * @param {?Protocol.Error} error
+         * @this {WebInspector.InspectElementModeController}
          */
         function callback(error)
         {
@@ -82,5 +86,5 @@
     }
 }
 
-/** @type {?WebInspector.InspectElementModeController} */
-WebInspector.inspectElementModeController = null;
+/** @type {!WebInspector.InspectElementModeController} */
+WebInspector.inspectElementModeController;
diff --git a/Source/devtools/front_end/InspectorBackend.js b/Source/devtools/front_end/InspectorBackend.js
index 98f24b9..dc22e7e 100644
--- a/Source/devtools/front_end/InspectorBackend.js
+++ b/Source/devtools/front_end/InspectorBackend.js
@@ -234,7 +234,7 @@
             var domainName = method[0];
             var functionName = method[1];
             if (!(domainName in this._domainDispatchers)) {
-                console.error("Protocol Error: the message is for non-existing domain '" + domainName + "'");
+                console.error("Protocol Error: the message " + messageObject.method + " is for non-existing domain '" + domainName + "'");
                 return;
             }
             var dispatcher = this._domainDispatchers[domainName];
@@ -302,6 +302,36 @@
         var schema = JSON.parse(xhr.responseText);
         var code = InspectorBackendClass._generateCommands(schema);
         eval(code);
+    },
+
+    /**
+     * @param {function(T)} clientCallback
+     * @param {string} errorPrefix
+     * @param {function(new:T,S)=} constructor
+     * @param {T=} defaultValue
+     * @return {function(?string, S)}
+     * @template T,S
+     */
+    wrapClientCallback: function(clientCallback, errorPrefix, constructor, defaultValue)
+    {
+        /**
+         * @param {?string} error
+         * @param {S} value
+         * @template S
+         */
+        function callbackWrapper(error, value)
+        {
+            if (error) {
+                console.error(errorPrefix + error);
+                clientCallback(defaultValue);
+                return;
+            }
+            if (constructor)
+                clientCallback(new constructor(value));
+            else
+                clientCallback(value);
+        }
+        return callbackWrapper;
     }
 }
 
diff --git a/Source/devtools/front_end/InspectorFrontendAPI.js b/Source/devtools/front_end/InspectorFrontendAPI.js
index cecb3ae..41671dd 100644
--- a/Source/devtools/front_end/InspectorFrontendAPI.js
+++ b/Source/devtools/front_end/InspectorFrontendAPI.js
@@ -61,7 +61,7 @@
         InspectorFrontendAPI._runOnceLoaded(function() {
             var uiSourceCode = WebInspector.workspace.uiSourceCodeForURL(url);
             if (uiSourceCode) {
-                WebInspector.showPanel("sources").showUISourceCode(uiSourceCode, lineNumber, columnNumber);
+                WebInspector.Revealer.reveal(new WebInspector.UILocation(uiSourceCode, lineNumber, columnNumber));
                 return;
             }
 
@@ -72,7 +72,7 @@
             {
                 var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
                 if (uiSourceCode.url === url) {
-                    WebInspector.showPanel("sources").showUISourceCode(uiSourceCode, lineNumber, columnNumber);
+                    WebInspector.Revealer.reveal(new WebInspector.UILocation(uiSourceCode, lineNumber, columnNumber));
                     WebInspector.workspace.removeEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, listener);
                 }
             }
@@ -108,17 +108,6 @@
         WebInspector.ContextMenu.setUseSoftMenu(useSoftMenu);
     },
 
-    // FIXME: remove this legacy support.
-    setAttachedWindow: function(side)
-    {
-    },
-
-    // FIXME: remove this legacy support.
-    setDockSide: function(side)
-    {
-        WebInspector.dockController.setDockSide(side);
-    },
-
     dispatchMessage: function(messageObject)
     {
         InspectorBackend.dispatch(messageObject);
diff --git a/Source/devtools/front_end/InspectorFrontendHostStub.js b/Source/devtools/front_end/InspectorFrontendHostStub.js
index 2eeca71..25b7749 100644
--- a/Source/devtools/front_end/InspectorFrontendHostStub.js
+++ b/Source/devtools/front_end/InspectorFrontendHostStub.js
@@ -28,25 +28,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/**
- * @param {string} methodName
- */
-function dispatchMethodByName(methodName)
-{
-    var callId = ++lastCallId;
-    var argsArray = Array.prototype.slice.call(arguments, 1);
-    var callback = argsArray[argsArray.length - 1];
-    if (typeof callback === "function") {
-        argsArray.pop();
-        InspectorFrontendHost._callbacks[callId] = callback;
-    }
-
-    var message = { "id": callId, "method": methodName };
-    if (argsArray.length)
-        message.params = argsArray;
-    InspectorFrontendHost.sendMessageToEmbedder(JSON.stringify(message));
-}
-
 if (!window.InspectorFrontendHost) {
 
 /**
@@ -59,16 +40,25 @@
 }
 
 WebInspector.InspectorFrontendHostStub.prototype = {
+    /**
+     * @return {string}
+     */
     getSelectionBackgroundColor: function()
     {
         return "#6e86ff";
     },
 
+    /**
+     * @return {string}
+     */
     getSelectionForegroundColor: function()
     {
         return "#ffffff";
     },
 
+    /**
+     * @return {string}
+     */
     platform: function()
     {
         var match = navigator.userAgent.match(/Windows NT/);
@@ -80,6 +70,9 @@
         return "linux";
     },
 
+    /**
+     * @return {string}
+     */
     port: function()
     {
         return "unknown";
@@ -95,14 +88,22 @@
         this._windowVisible = false;
     },
 
-    requestSetDockSide: function(side)
+    setIsDocked: function(isDocked)
     {
-        InspectorFrontendAPI.setDockSide(side);
     },
 
-    setWindowBounds: function(x, y, width, height, callback)
+    /**
+     * Requests inspected page to be placed atop of the inspector frontend
+     * with passed insets from the frontend sides, respecting minimum size passed.
+     * @param {{top: number, left: number, right: number, bottom: number}} insets
+     * @param {{width: number, height: number}} minSize
+     */
+    setContentsResizingStrategy: function(insets, minSize)
     {
-        callback();
+    },
+
+    inspectElementCompleted: function()
+    {
     },
 
     moveWindowBy: function(x, y)
@@ -113,14 +114,6 @@
     {
     },
 
-    loaded: function()
-    {
-    },
-
-    localizedStringsURL: function()
-    {
-    },
-
     inspectedURLChanged: function(url)
     {
         document.title = WebInspector.UIString(Preferences.applicationTitle, url);
@@ -147,10 +140,6 @@
         WebInspector.log("Saving files is not enabled in hosted mode. Please inspect using chrome://inspect", WebInspector.ConsoleMessage.MessageLevel.Error, true);
     },
 
-    close: function(url)
-    {
-    },
-
     sendMessageToBackend: function(message)
     {
     },
@@ -171,11 +160,6 @@
     {
     },
 
-    supportsFileSystems: function()
-    {
-        return false;
-    },
-
     requestFileSystems: function()
     {
     },
@@ -188,6 +172,11 @@
     {
     },
 
+    /**
+     * @param {string} fileSystemId
+     * @param {string} registeredName
+     * @return {?WebInspector.IsolatedFileSystem}
+     */
     isolatedFileSystem: function(fileSystemId, registeredName)
     {
         return null;
@@ -213,6 +202,29 @@
     {
     },
 
+    /**
+     * @return {number}
+     */
+    zoomFactor: function()
+    {
+        return 1;
+    },
+
+    zoomIn: function()
+    {
+    },
+
+    zoomOut: function()
+    {
+    },
+
+    resetZoom: function()
+    {
+    },
+
+    /**
+     * @return {boolean}
+     */
     isUnderTest: function()
     {
         return false;
@@ -221,59 +233,4 @@
 
 InspectorFrontendHost = new WebInspector.InspectorFrontendHostStub();
 
-} else if (InspectorFrontendHost.sendMessageToEmbedder) {
-  // Install message-based handlers with callbacks.
-    var lastCallId = 0;
-    InspectorFrontendHost._callbacks = [];
-
-    /**
-     * @param {number} id
-     * @param {?string} error
-     */
-    InspectorFrontendHost.embedderMessageAck = function(id, error)
-    {
-        var callback = InspectorFrontendHost._callbacks[id];
-        delete InspectorFrontendHost._callbacks[id];
-        if (callback)
-            callback(error);
-    }
-
-    var methodList = [
-        "addFileSystem",
-        "append",
-        "bringToFront",
-        "closeWindow",
-        "indexPath",
-        "moveWindowBy",
-        "openInNewTab",
-        "removeFileSystem",
-        "requestFileSystems",
-        "requestSetDockSide",
-        "save",
-        "searchInPath",
-        "setWindowBounds",
-        "stopIndexing"
-    ];
-
-    for (var i = 0; i < methodList.length; ++i)
-        InspectorFrontendHost[methodList[i]] = dispatchMethodByName.bind(null, methodList[i]);
-}
-
-/**
- * @constructor
- * @extends {WebInspector.HelpScreen}
- */
-WebInspector.RemoteDebuggingTerminatedScreen = function(reason)
-{
-    WebInspector.HelpScreen.call(this, WebInspector.UIString("Detached from the target"));
-    var p = this.contentElement.createChild("p");
-    p.classList.add("help-section");
-    p.createChild("span").textContent = "Remote debugging has been terminated with reason: ";
-    p.createChild("span", "error-message").textContent = reason;
-    p.createChild("br");
-    p.createChild("span").textContent = "Please re-attach to the new target.";
-}
-
-WebInspector.RemoteDebuggingTerminatedScreen.prototype = {
-    __proto__: WebInspector.HelpScreen.prototype
 }
diff --git a/Source/devtools/front_end/InspectorView.js b/Source/devtools/front_end/InspectorView.js
index 6423760..4aa2e04 100644
--- a/Source/devtools/front_end/InspectorView.js
+++ b/Source/devtools/front_end/InspectorView.js
@@ -36,26 +36,58 @@
 {
     WebInspector.View.call(this);
     this.markAsRoot();
-    this.element.classList.add("fill", "vbox", "inspector-view");
+    this.element.classList.add("fill", "inspector-view");
     this.element.setAttribute("spellcheck", false);
 
+    window.addEventListener("resize", this._onWindowResize.bind(this), true);
+    WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.ZoomChanged, this._onZoomChanged, this);
+
+    // We can use split view either for docking or screencast, but not together.
+    var settingName = WebInspector.queryParamsObject["can_dock"] ? "InspectorView.splitView" : "InspectorView.screencastSplitView";
+    this._splitView = new WebInspector.SplitView(false, true, settingName, 300, 300);
+    this._updateConstraints();
+    WebInspector.dockController.addEventListener(WebInspector.DockController.Events.DockSideChanged, this._updateSplitView.bind(this));
+
+    this._splitView.element.id = "inspector-split-view";
+    this._splitView.show(this.element);
+
+    // Main part of main split is overlay view.
+    this._overlayView = new WebInspector.InspectorView.OverlayView(this._splitView);
+    this._overlayView.show(this._splitView.mainElement());
+
+    // Sidebar of main split is artificial element used for positioning.
+    this._devtoolsView = new WebInspector.ViewWithResizeCallback(this._onDevToolsViewResized.bind(this));
+    this._devtoolsView.show(this._splitView.sidebarElement());
+
+    // DevTools sidebar is a vertical split of panels tabbed pane and a drawer.
+    this._drawerSplitView = new WebInspector.SplitView(false, true, "Inspector.drawerSplitView", 200, 200);
+    this._drawerSplitView.setSidebarElementConstraints(Preferences.minDrawerHeight, Preferences.minDrawerHeight);
+    this._drawerSplitView.setMainElementConstraints(25, 25);
+    this._drawerSplitView.show(this._devtoolsView.element);
+
     this._tabbedPane = new WebInspector.TabbedPane();
-    this._tabbedPane.setRetainTabsOrder(true);
-    this._tabbedPane.show(this.element);
+    this._tabbedPane.setRetainTabOrder(true, WebInspector.moduleManager.orderComparator(WebInspector.Panel, "name", "order"));
+    this._tabbedPane.show(this._drawerSplitView.mainElement());
+    this._drawer = new WebInspector.Drawer(this._drawerSplitView);
 
-    var toolbarElement = document.createElement("div");
-    toolbarElement.className = "toolbar toolbar-background";
+    // Patch tabbed pane header with toolbar actions.
+    this._toolbarElement = document.createElement("div");
+    this._toolbarElement.className = "toolbar toolbar-background";
     var headerElement = this._tabbedPane.headerElement();
-    headerElement.parentElement.insertBefore(toolbarElement, headerElement);
+    headerElement.parentElement.insertBefore(this._toolbarElement, headerElement);
 
-    this._leftToolbarElement = toolbarElement.createChild("div", "toolbar-controls-left");
-    toolbarElement.appendChild(headerElement);
-    this._rightToolbarElement = toolbarElement.createChild("div", "toolbar-controls-right");
+    this._leftToolbarElement = this._toolbarElement.createChild("div", "toolbar-controls-left");
+    this._toolbarElement.appendChild(headerElement);
+    this._rightToolbarElement = this._toolbarElement.createChild("div", "toolbar-controls-right");
 
     this._errorWarningCountElement = this._rightToolbarElement.createChild("div", "hidden");
     this._errorWarningCountElement.id = "error-warning-count";
 
-    this._drawer = new WebInspector.Drawer(this);
+    this._closeButtonToolbarItem = document.createElementWithClass("div", "toolbar-close-button-item");
+    var closeButtonElement = this._closeButtonToolbarItem.createChild("div", "close-button");
+    closeButtonElement.addEventListener("click", WebInspector.close.bind(WebInspector), true);
+    this._rightToolbarElement.appendChild(this._closeButtonToolbarItem);
+
     this.appendToRightToolbar(this._drawer.toggleButtonElement());
 
     this._history = [];
@@ -68,9 +100,39 @@
     this._openBracketIdentifiers = ["U+005B", "U+00DB"].keySet();
     this._closeBracketIdentifiers = ["U+005D", "U+00DD"].keySet();
     this._lastActivePanelSetting = WebInspector.settings.createSetting("lastActivePanel", "elements");
+
+    this._updateSplitView();
+
+    this._loadPanelDesciptors();
 }
 
+WebInspector.InspectorView.Constraints = {
+    OverlayWidth: 50,
+    OverlayHeight: 50,
+    DevToolsWidth: 180,
+    DevToolsHeight: 50
+};
+
+WebInspector.InspectorView.Events = {
+    DevToolsElementBoundingBoxChanged: "DevToolsElementBoundingBoxChanged"
+};
+
 WebInspector.InspectorView.prototype = {
+    _loadPanelDesciptors: function()
+    {
+        WebInspector.startBatchUpdate();
+        WebInspector.moduleManager.extensions(WebInspector.Panel).forEach(processPanelExtensions.bind(this));
+        /**
+         * @param {!WebInspector.ModuleManager.Extension} extension
+         * @this {!WebInspector.InspectorView}
+         */
+        function processPanelExtensions(extension)
+        {
+            this.addPanel(new WebInspector.ModuleManagerExtensionPanelDescriptor(extension));
+        }
+        WebInspector.endBatchUpdate();
+    },
+
     /**
      * @param {!Element} element
      */
@@ -84,15 +146,15 @@
      */
     appendToRightToolbar: function(element)
     {
-        this._rightToolbarElement.appendChild(element);
+        this._rightToolbarElement.insertBefore(element, this._closeButtonToolbarItem);
     },
 
     /**
-     * @return {!WebInspector.Drawer}
+     * @return {!Element}
      */
-    drawer: function()
+    devtoolsElement: function()
     {
-        return this._drawer;
+        return this._devtoolsView.element;
     },
 
     /**
@@ -177,7 +239,7 @@
      */
     closeViewInDrawer: function(id)
     {
-        return this._drawer.closeView(id);
+        this._drawer.closeView(id);
     },
 
     /**
@@ -190,30 +252,26 @@
         this._drawer.showCloseableView(id, title, view);
     },
 
-    /**
-     * @param {string} id
-     * @param {string} title
-     * @param {!WebInspector.ViewFactory} factory
-     */
-    registerViewInDrawer: function(id, title, factory)
+    showDrawer: function()
     {
-        this._drawer.registerView(id, title, factory);
+        this._drawer.showDrawer();
+    },
+
+    /**
+     * @return {boolean}
+     */
+    drawerVisible: function()
+    {
+        return this._drawer.isShowing();
     },
 
     /**
      * @param {string} id
+     * @param {boolean=} immediate
      */
-    unregisterViewInDrawer: function(id)
+    showViewInDrawer: function(id, immediate)
     {
-        this._drawer.unregisterView(id);
-    },
-
-    /**
-     * @param {string} id
-     */
-    showViewInDrawer: function(id)
-    {
-        this._drawer.showView(id);
+        this._drawer.showView(id, immediate);
     },
 
     /**
@@ -226,7 +284,7 @@
 
     closeDrawer: function()
     {
-        this._drawer.hide();
+        this._drawer.closeDrawer();
     },
 
     /**
@@ -252,15 +310,23 @@
         if (!WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event))
             return;
 
+        var keyboardEvent = /** @type {!KeyboardEvent} */ (event);
         // Ctrl/Cmd + 1-9 should show corresponding panel.
         var panelShortcutEnabled = WebInspector.settings.shortcutPanelSwitch.get();
-        if (panelShortcutEnabled && !event.shiftKey && !event.altKey && event.keyCode > 0x30 && event.keyCode < 0x3A) {
-            var panelName = this._tabbedPane.allTabs()[event.keyCode - 0x31];
-            if (panelName) {
-                this.showPanel(panelName);
-                event.consume(true);
+        if (panelShortcutEnabled && !event.shiftKey && !event.altKey) {
+            var panelIndex = -1;
+            if (event.keyCode > 0x30 && event.keyCode < 0x3A)
+                panelIndex = event.keyCode - 0x31;
+            else if (event.keyCode > 0x60 && event.keyCode < 0x6A && keyboardEvent.location === KeyboardEvent.DOM_KEY_LOCATION_NUMPAD)
+                panelIndex = event.keyCode - 0x61;
+            if (panelIndex !== -1) {
+                var panelName = this._tabbedPane.allTabs()[panelIndex];
+                if (panelName) {
+                    this.showPanel(panelName);
+                    event.consume(true);
+                }
+                return;
             }
-            return;
         }
 
         // BUG85312: On French AZERTY keyboards, AltGr-]/[ combinations (synonymous to Ctrl-Alt-]/[ on Windows) are used to enter ]/[,
@@ -350,17 +416,215 @@
         this._historyIterator = this._history.length - 1;
     },
 
+    _onDevToolsViewResized: function()
+    {
+        this.dispatchEventToListeners(WebInspector.InspectorView.Events.DevToolsElementBoundingBoxChanged);
+    },
+
+    _onWindowResize: function()
+    {
+        this.doResize();
+    },
+
+    _updateSplitView: function()
+    {
+        var dockSide = WebInspector.dockController.dockSide();
+        if (dockSide !== WebInspector.DockController.State.Undocked) {
+            var vertical = WebInspector.dockController.isVertical();
+            this._splitView.setVertical(vertical);
+            if (vertical) {
+                // Docked to side.
+                if (dockSide === WebInspector.DockController.State.DockedToRight)
+                    this._overlayView.setMargins(false, true, false, false);
+                else
+                    this._overlayView.setMargins(false, false, false, true);
+                this._splitView.setSecondIsSidebar(dockSide === WebInspector.DockController.State.DockedToRight);
+                this._splitView.uninstallResizer(this._tabbedPane.headerElement());
+                this._splitView.installResizer(this._splitView.resizerElement());
+            } else {
+                // Docked to bottom.
+                this._overlayView.setMargins(false, false, false, false);
+                this._splitView.setSecondIsSidebar(true);
+                this._splitView.installResizer(this._splitView.resizerElement());
+                this._splitView.installResizer(this._tabbedPane.headerElement());
+            }
+            this._splitView.showBoth();
+        } else {
+            this._overlayView.setMargins(false, false, false, false);
+            this._splitView.hideMain();
+            this._splitView.uninstallResizer(this._tabbedPane.headerElement());
+            this._splitView.uninstallResizer(this._splitView.resizerElement());
+        }
+    },
+
+    _onZoomChanged: function(event)
+    {
+        this._updateConstraints();
+        var data = /** @type {{from: number, to: number}} */ (event.data);
+        this._splitView.setSidebarSize(this._splitView.sidebarSize() * data.from / data.to, true);
+        this._overlayView.updateMargins();
+    },
+
+    _updateConstraints: function()
+    {
+        var zoomFactor = WebInspector.zoomManager.zoomFactor();
+        this._splitView.setSidebarElementConstraints(WebInspector.InspectorView.Constraints.DevToolsWidth / zoomFactor,
+            WebInspector.InspectorView.Constraints.DevToolsHeight / zoomFactor);
+        this._splitView.setMainElementConstraints(WebInspector.InspectorView.Constraints.OverlayWidth / zoomFactor,
+            WebInspector.InspectorView.Constraints.OverlayHeight / zoomFactor);
+    },
+
+    /**
+     * @param {!WebInspector.View} view
+     * @param {boolean} vertical
+     */
+    showScreencastView: function(view, vertical)
+    {
+        if (view.parentView() !== this._overlayView)
+            view.show(this._overlayView.element);
+        this._splitView.setVertical(vertical);
+        this._splitView.installResizer(this._splitView.resizerElement());
+        this._splitView.showBoth();
+    },
+
+    hideScreencastView: function()
+    {
+        this._splitView.hideMain();
+    },
+
+    /**
+     * @param {number} errors
+     * @param {number} warnings
+     */
+    setErrorAndWarningCounts: function(errors, warnings)
+    {
+        if (!errors && !warnings) {
+            this._errorWarningCountElement.classList.add("hidden");
+            this._tabbedPane.headerResized();
+            return;
+        }
+
+        this._errorWarningCountElement.classList.remove("hidden");
+        this._errorWarningCountElement.removeChildren();
+
+        if (errors) {
+            var errorImageElement = this._errorWarningCountElement.createChild("div", "error-icon-small");
+            var errorElement = this._errorWarningCountElement.createChild("span");
+            errorElement.id = "error-count";
+            errorElement.textContent = errors;
+        }
+
+        if (warnings) {
+            var warningsImageElement = this._errorWarningCountElement.createChild("div", "warning-icon-small");
+            var warningsElement = this._errorWarningCountElement.createChild("span");
+            warningsElement.id = "warning-count";
+            warningsElement.textContent = warnings;
+        }
+
+        if (errors) {
+            if (warnings) {
+                if (errors == 1) {
+                    if (warnings == 1)
+                        this._errorWarningCountElement.title = WebInspector.UIString("%d error, %d warning", errors, warnings);
+                    else
+                        this._errorWarningCountElement.title = WebInspector.UIString("%d error, %d warnings", errors, warnings);
+                } else if (warnings == 1)
+                    this._errorWarningCountElement.title = WebInspector.UIString("%d errors, %d warning", errors, warnings);
+                else
+                    this._errorWarningCountElement.title = WebInspector.UIString("%d errors, %d warnings", errors, warnings);
+            } else if (errors == 1)
+                this._errorWarningCountElement.title = WebInspector.UIString("%d error", errors);
+            else
+                this._errorWarningCountElement.title = WebInspector.UIString("%d errors", errors);
+        } else if (warnings == 1)
+            this._errorWarningCountElement.title = WebInspector.UIString("%d warning", warnings);
+        else if (warnings)
+            this._errorWarningCountElement.title = WebInspector.UIString("%d warnings", warnings);
+        else
+            this._errorWarningCountElement.title = null;
+
+        this._tabbedPane.headerResized();
+    },
+
+    __proto__: WebInspector.View.prototype
+};
+
+/**
+ * @constructor
+ * @param {!WebInspector.SplitView} splitView
+ * @extends {WebInspector.View}
+ */
+WebInspector.InspectorView.OverlayView = function(splitView)
+{
+    WebInspector.View.call(this);
+    this._margins = {top: 0, left: 0, right: 0, bottom: 0};
+    this._splitView = splitView;
+}
+
+WebInspector.InspectorView.OverlayView.prototype = {
+    /**
+     * @param {boolean} top
+     * @param {boolean} right
+     * @param {boolean} bottom
+     * @param {boolean} left
+     */
+    setMargins: function(top, right, bottom, left)
+    {
+        this._margins = { top: top, right: right, bottom: bottom, left: left };
+        this.updateMargins();
+    },
+
+    updateMargins: function()
+    {
+        var marginValue = Math.round(3 / WebInspector.zoomManager.zoomFactor()) + "px ";
+        var margins = this._margins.top ? marginValue : "0 ";
+        margins += this._margins.right ? marginValue : "0 ";
+        margins += this._margins.bottom ? marginValue : "0 ";
+        margins += this._margins.left ? marginValue : "0 ";
+        this.element.style.margin = margins;
+    },
+
     onResize: function()
     {
-        // FIXME: make drawer a view.
-        this.doResize();
-        this._drawer.resize();
+        var dockSide = WebInspector.dockController.dockSide();
+        if (dockSide !== WebInspector.DockController.State.Undocked) {
+            if (this._setContentsInsetsId)
+                window.cancelAnimationFrame(this._setContentsInsetsId);
+            this._setContentsInsetsId = window.requestAnimationFrame(this._setContentsInsets.bind(this));
+        }
+    },
+
+    _setContentsInsets: function()
+    {
+        delete this._setContentsInsetsId;
+
+        var zoomFactor = WebInspector.zoomManager.zoomFactor();
+        var marginValue = Math.round(3 / zoomFactor);
+        var insets = {
+            top: this._margins.top ? marginValue : 0,
+            left: this._margins.left ? marginValue : 0,
+            right: this._margins.right ? marginValue : 0,
+            bottom: this._margins.bottom ? marginValue : 0};
+
+        var minSize = {
+            width: WebInspector.InspectorView.Constraints.OverlayWidth - Math.round(insets.left * zoomFactor) - Math.round(insets.right * zoomFactor),
+            height: WebInspector.InspectorView.Constraints.OverlayHeight - Math.round(insets.top * zoomFactor) - Math.round(insets.bottom * zoomFactor)};
+
+        insets[this._splitView.sidebarSide()] += this._splitView.desiredSidebarSize();
+
+        var zoomedInsets = {
+            top: Math.round(insets.top * zoomFactor),
+            left: Math.round(insets.left * zoomFactor),
+            bottom: Math.round(insets.bottom * zoomFactor),
+            right: Math.round(insets.right * zoomFactor)};
+
+        InspectorFrontendHost.setContentsResizingStrategy(zoomedInsets, minSize);
     },
 
     __proto__: WebInspector.View.prototype
 }
 
 /**
- * @type {?WebInspector.InspectorView}
+ * @type {!WebInspector.InspectorView}
  */
-WebInspector.inspectorView = null;
+WebInspector.inspectorView;
diff --git a/Source/devtools/front_end/IsolatedFileSystem.js b/Source/devtools/front_end/IsolatedFileSystem.js
index ffa14eb..67a8050 100644
--- a/Source/devtools/front_end/IsolatedFileSystem.js
+++ b/Source/devtools/front_end/IsolatedFileSystem.js
@@ -61,11 +61,11 @@
         msg = "INVALID_STATE_ERR";
         break;
     default:
-        msg = "Unknown Error";
+        msg = WebInspector.UIString("Unknown Error");
         break;
     };
 
-    return "File system error: " + msg;
+    return WebInspector.UIString("File system error: %s", msg);
 }
 
 WebInspector.IsolatedFileSystem.prototype = {
@@ -112,6 +112,7 @@
         var domFileSystem;
         /**
          * @param {?DOMFileSystem} fs
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileSystemLoaded(fs)
         {
@@ -122,6 +123,7 @@
 
         /**
          * @param {!Array.<!FileEntry>} entries
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function innerCallback(entries)
         {
@@ -156,6 +158,7 @@
 
         /**
          * @param {?DOMFileSystem} fs
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileSystemLoaded(fs)
         {
@@ -166,6 +169,7 @@
 
         /**
          * @param {!DirectoryEntry} dirEntry
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function dirEntryLoaded(dirEntry)
         {
@@ -173,17 +177,20 @@
             if (newFileIndex > 1)
                 nameCandidate += newFileIndex;
             ++newFileIndex;
-            dirEntry.getFile(nameCandidate, { create: true, exclusive: true }, fileCreated, fileCreationError);
+            dirEntry.getFile(nameCandidate, { create: true, exclusive: true }, fileCreated, fileCreationError.bind(this));
 
             function fileCreated(entry)
             {
                 callback(entry.fullPath.substr(1));
             }
 
+            /**
+             * @this {WebInspector.IsolatedFileSystem}
+             */
             function fileCreationError(error)
             {
                 if (error.code === FileError.INVALID_MODIFICATION_ERR) {
-                    dirEntryLoaded(dirEntry);
+                    dirEntryLoaded.call(this, dirEntry);
                     return;
                 }
 
@@ -193,6 +200,9 @@
             }
         }
 
+        /**
+         * @this {WebInspector.IsolatedFileSystem}
+         */
         function errorHandler(error)
         {
             var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error);
@@ -213,6 +223,7 @@
 
         /**
          * @param {?DOMFileSystem} fs
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileSystemLoaded(fs)
         {
@@ -223,6 +234,7 @@
 
         /**
          * @param {!FileEntry} fileEntry
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileEntryLoaded(fileEntry)
         {
@@ -235,6 +247,7 @@
 
         /**
          * @param {!FileError} error
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function errorHandler(error)
         {
@@ -296,6 +309,7 @@
 
         /**
          * @param {?DOMFileSystem} fs
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileSystemLoaded(fs)
         {
@@ -306,6 +320,7 @@
 
         /**
          * @param {!FileEntry} entry
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileEntryLoaded(entry)
         {
@@ -330,6 +345,9 @@
             callback(/** @type {string} */ (this.result));
         }
 
+        /**
+         * @this {WebInspector.IsolatedFileSystem}
+         */
         function errorHandler(error)
         {
             if (error.code === FileError.NOT_FOUND_ERR) {
@@ -354,6 +372,7 @@
 
         /**
          * @param {?DOMFileSystem} fs
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileSystemLoaded(fs)
         {
@@ -364,6 +383,7 @@
 
         /**
          * @param {!FileEntry} entry
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileEntryLoaded(entry)
         {
@@ -372,6 +392,7 @@
 
         /**
          * @param {!FileWriter} fileWriter
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileWriterCreated(fileWriter)
         {
@@ -392,6 +413,9 @@
             callback();
         }
 
+        /**
+         * @this {WebInspector.IsolatedFileSystem}
+         */
         function errorHandler(error)
         {
             var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error);
@@ -419,6 +443,7 @@
 
         /**
          * @param {?DOMFileSystem} fs
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileSystemLoaded(fs)
         {
@@ -429,6 +454,7 @@
 
         /**
          * @param {!FileEntry} entry
+         * @this {WebInspector.IsolatedFileSystem}
          */
         function fileEntryLoaded(entry)
         {
@@ -458,6 +484,9 @@
             callback(false);
         }
 
+        /**
+         * @this {WebInspector.IsolatedFileSystem}
+         */
         function newFileEntryLoadErrorHandler(error)
         {
             if (error.code !== FileError.NOT_FOUND_ERR) {
@@ -475,6 +504,9 @@
             callback(true, entry.name);
         }
 
+        /**
+         * @this {WebInspector.IsolatedFileSystem}
+         */
         function errorHandler(error)
         {
             var errorMessage = WebInspector.IsolatedFileSystem.errorMessage(error);
@@ -526,6 +558,10 @@
     {
         domFileSystem.root.getDirectory(path, null, innerCallback.bind(this), errorHandler);
 
+        /**
+         * @param {!DirectoryEntry} dirEntry
+         * @this {WebInspector.IsolatedFileSystem}
+         */
         function innerCallback(dirEntry)
         {
             this._readDirectory(dirEntry, callback)
diff --git a/Source/devtools/front_end/IsolatedFileSystemManager.js b/Source/devtools/front_end/IsolatedFileSystemManager.js
index 08c3e93..b514990 100644
--- a/Source/devtools/front_end/IsolatedFileSystemManager.js
+++ b/Source/devtools/front_end/IsolatedFileSystemManager.js
@@ -39,9 +39,7 @@
     /** @type {!Object.<string, !Array.<function(?DOMFileSystem)>>} */
     this._pendingFileSystemRequests = {};
     this._fileSystemMapping = new WebInspector.FileSystemMapping();
-
-    if (this.supportsFileSystems())
-        this._requestFileSystems();
+    this._requestFileSystems();
 }
 
 /** @typedef {!{fileSystemName: string, rootURL: string, fileSystemPath: string}} */
@@ -61,14 +59,6 @@
         return this._fileSystemMapping;
     },
 
-    /**
-     * @return {boolean}
-     */
-    supportsFileSystems: function()
-    {
-        return InspectorFrontendHost.supportsFileSystems();
-    },
-
     _requestFileSystems: function()
     {
         console.assert(!this._loaded);
@@ -199,9 +189,9 @@
 }
 
 /**
- * @type {?WebInspector.IsolatedFileSystemManager}
+ * @type {!WebInspector.IsolatedFileSystemManager}
  */
-WebInspector.isolatedFileSystemManager = null;
+WebInspector.isolatedFileSystemManager;
 
 /**
  * @constructor
@@ -240,6 +230,6 @@
 }
 
 /**
- * @type {?WebInspector.IsolatedFileSystemDispatcher}
+ * @type {!WebInspector.IsolatedFileSystemDispatcher}
  */
-WebInspector.isolatedFileSystemDispatcher = null;
+WebInspector.isolatedFileSystemDispatcher;
diff --git a/Source/devtools/front_end/JSHeapSnapshot.js b/Source/devtools/front_end/JSHeapSnapshot.js
index fc7a627..7e7b6ba 100644
--- a/Source/devtools/front_end/JSHeapSnapshot.js
+++ b/Source/devtools/front_end/JSHeapSnapshot.js
@@ -48,38 +48,38 @@
 }
 
 WebInspector.JSHeapSnapshot.prototype = {
-    maxJsNodeId: function()
-    {
-        var nodeFieldCount = this._nodeFieldCount;
-        var nodes = this._nodes;
-        var nodesLength = nodes.length;
-        var id = 0;
-        for (var nodeIndex = this._nodeIdOffset; nodeIndex < nodesLength; nodeIndex += nodeFieldCount) {
-            var nextId = nodes[nodeIndex];
-            // JS objects have odd ids, skip native objects.
-            if (nextId % 2 === 0)
-                continue;
-            if (id < nodes[nodeIndex])
-                id = nodes[nodeIndex];
-        }
-        return id;
-    },
-
+    /**
+     * @param {number} nodeIndex
+     * @return {!WebInspector.JSHeapSnapshotNode}
+     */
     createNode: function(nodeIndex)
     {
         return new WebInspector.JSHeapSnapshotNode(this, nodeIndex);
     },
 
+    /**
+     * @param {!Array.<number>} edges
+     * @param {number} edgeIndex
+     * @return {!WebInspector.JSHeapSnapshotEdge}
+     */
     createEdge: function(edges, edgeIndex)
     {
         return new WebInspector.JSHeapSnapshotEdge(this, edges, edgeIndex);
     },
 
+    /**
+     * @param {number} retainedNodeIndex
+     * @param {number} retainerIndex
+     * @return {!WebInspector.JSHeapSnapshotRetainerEdge}
+     */
     createRetainingEdge: function(retainedNodeIndex, retainerIndex)
     {
         return new WebInspector.JSHeapSnapshotRetainerEdge(this, retainedNodeIndex, retainerIndex);
     },
 
+    /**
+     * @return {function(!WebInspector.JSHeapSnapshotNode):boolean}
+     */
     classNodesFilter: function()
     {
         function filter(node)
@@ -89,6 +89,10 @@
         return filter;
     },
 
+    /**
+     * @param {boolean} showHiddenData
+     * @return {function(!WebInspector.HeapSnapshotEdge):boolean}
+     */
     containmentEdgesFilter: function(showHiddenData)
     {
         function filter(edge) {
@@ -101,6 +105,10 @@
         return filter;
     },
 
+    /**
+     * @param {boolean} showHiddenData
+     * @return {function(!WebInspector.HeapSnapshotEdge):boolean}
+     */
     retainingEdgesFilter: function(showHiddenData)
     {
         var containmentEdgesFilter = this.containmentEdgesFilter(showHiddenData);
@@ -239,6 +247,9 @@
         }
     },
 
+    /**
+     * @return {!{map: !Uint32Array, flag: number}}
+     */
     userObjectsMapAndFlag: function()
     {
         return {
@@ -401,12 +412,18 @@
 }
 
 WebInspector.JSHeapSnapshotNode.prototype = {
+    /**
+     * @return {boolean}
+     */
     canBeQueried: function()
     {
         var flags = this._snapshot._flagsOfNode(this);
         return !!(flags & this._snapshot._nodeFlags.canBeQueried);
     },
 
+    /**
+     * @return {boolean}
+     */
     isUserObject: function()
     {
         var flags = this._snapshot._flagsOfNode(this);
@@ -414,6 +431,9 @@
     },
 
 
+    /**
+     * @return {string}
+     */
     name: function() {
         var snapshot = this._snapshot;
         if (this._type() === snapshot._nodeConsStringType) {
@@ -474,6 +494,9 @@
         return name;
     },
 
+    /**
+     * @return {string}
+     */
     className: function()
     {
         var type = this.type();
@@ -490,6 +513,9 @@
         }
     },
 
+    /**
+     * @return {number}
+     */
     classIndex: function()
     {
         var snapshot = this._snapshot;
@@ -500,17 +526,26 @@
         return -1 - type;
     },
 
+    /**
+     * @return {string}
+     */
     id: function()
     {
         var snapshot = this._snapshot;
         return snapshot._nodes[this.nodeIndex + snapshot._nodeIdOffset];
     },
 
+    /**
+     * @return {boolean}
+     */
     isHidden: function()
     {
         return this._type() === this._snapshot._nodeHiddenType;
     },
 
+    /**
+     * @return {boolean}
+     */
     isSynthetic: function()
     {
         return this._type() === this._snapshot._nodeSyntheticType;
@@ -532,6 +567,9 @@
         return this.isSynthetic() && this.name() === "(Document DOM trees)";
     },
 
+    /**
+     * @return {!WebInspector.HeapSnapshotNode.Serialized}
+     */
     serialize: function()
     {
         var result = WebInspector.HeapSnapshotNode.prototype.serialize.call(this);
@@ -559,11 +597,17 @@
 }
 
 WebInspector.JSHeapSnapshotEdge.prototype = {
+    /**
+     * @return {!WebInspector.JSHeapSnapshotEdge}
+     */
     clone: function()
     {
         return new WebInspector.JSHeapSnapshotEdge(this._snapshot, this._edges, this.edgeIndex);
     },
 
+    /**
+     * @return {boolean}
+     */
     hasStringName: function()
     {
         if (!this.isShortcut())
@@ -571,36 +615,57 @@
         return isNaN(parseInt(this._name(), 10));
     },
 
+    /**
+     * @return {boolean}
+     */
     isElement: function()
     {
         return this._type() === this._snapshot._edgeElementType;
     },
 
+    /**
+     * @return {boolean}
+     */
     isHidden: function()
     {
         return this._type() === this._snapshot._edgeHiddenType;
     },
 
+    /**
+     * @return {boolean}
+     */
     isWeak: function()
     {
         return this._type() === this._snapshot._edgeWeakType;
     },
 
+    /**
+     * @return {boolean}
+     */
     isInternal: function()
     {
         return this._type() === this._snapshot._edgeInternalType;
     },
 
+    /**
+     * @return {boolean}
+     */
     isInvisible: function()
     {
         return this._type() === this._snapshot._edgeInvisibleType;
     },
 
+    /**
+     * @return {boolean}
+     */
     isShortcut: function()
     {
         return this._type() === this._snapshot._edgeShortcutType;
     },
 
+    /**
+     * @return {string}
+     */
     name: function()
     {
         if (!this.isShortcut())
@@ -609,6 +674,9 @@
         return isNaN(numName) ? this._name() : numName;
     },
 
+    /**
+     * @return {string}
+     */
     toString: function()
     {
         var name = this.name();
@@ -633,7 +701,7 @@
 
     _hasStringName: function()
     {
-        return !this.isElement() && !this.isHidden() && !this.isWeak();
+        return !this.isElement() && !this.isHidden();
     },
 
     _name: function()
@@ -666,31 +734,49 @@
 }
 
 WebInspector.JSHeapSnapshotRetainerEdge.prototype = {
+    /**
+     * @return {!WebInspector.JSHeapSnapshotRetainerEdge}
+     */
     clone: function()
     {
         return new WebInspector.JSHeapSnapshotRetainerEdge(this._snapshot, this._retainedNodeIndex, this.retainerIndex());
     },
 
+    /**
+     * @return {boolean}
+     */
     isHidden: function()
     {
         return this._edge().isHidden();
     },
 
+    /**
+     * @return {boolean}
+     */
     isInternal: function()
     {
         return this._edge().isInternal();
     },
 
+    /**
+     * @return {boolean}
+     */
     isInvisible: function()
     {
         return this._edge().isInvisible();
     },
 
+    /**
+     * @return {boolean}
+     */
     isShortcut: function()
     {
         return this._edge().isShortcut();
     },
 
+    /**
+     * @return {boolean}
+     */
     isWeak: function()
     {
         return this._edge().isWeak();
diff --git a/Source/devtools/front_end/JavaScriptFormatter.js b/Source/devtools/front_end/JavaScriptFormatter.js
index 79a4a0b..0d41c27 100644
--- a/Source/devtools/front_end/JavaScriptFormatter.js
+++ b/Source/devtools/front_end/JavaScriptFormatter.js
@@ -49,7 +49,7 @@
     },
 
     /**
-     * @return {string}
+     * @return {number}
      */
     _peek: function()
     {
@@ -57,7 +57,7 @@
     },
 
     /**
-     * @return {string}
+     * @return {number}
      */
     _next: function()
     {
@@ -72,7 +72,7 @@
     },
 
     /**
-     * @param {string} token
+     * @param {number} token
      */
     _consume: function(token)
     {
@@ -82,7 +82,7 @@
     },
 
     /**
-     * @param {string} token
+     * @param {number} token
      */
     _expect: function(token)
     {
@@ -106,7 +106,7 @@
     },
 
     /**
-     * @param {string} endToken
+     * @param {number} endToken
      */
     _parseSourceElements: function(endToken)
     {
@@ -1001,6 +1001,7 @@
 
     /**
      * @param {boolean=} forceRegexp
+     * @return {!{comments_before: !Array.<string>, line: number, pos: number, endLine: number, nlb: boolean, token: number, type: string, value: *}}
      */
     next: function(forceRegexp)
     {
@@ -1011,6 +1012,9 @@
         return uglifyToken;
     },
 
+    /**
+     * @return {number}
+     */
     _convertUglifyToken: function(uglifyToken)
     {
         var token = FormatterWorker.JavaScriptTokensByType[uglifyToken.type];
diff --git a/Source/devtools/front_end/JavaScriptSourceFrame.js b/Source/devtools/front_end/JavaScriptSourceFrame.js
index d3174f2..dd1e885 100644
--- a/Source/devtools/front_end/JavaScriptSourceFrame.js
+++ b/Source/devtools/front_end/JavaScriptSourceFrame.js
@@ -72,7 +72,7 @@
 WebInspector.JavaScriptSourceFrame.prototype = {
     _registerShortcuts: function()
     {
-        var shortcutKeys = WebInspector.SourcesPanelDescriptor.ShortcutKeys;
+        var shortcutKeys = WebInspector.ShortcutsScreen.SourcesPanelShortcuts;
         for (var i = 0; i < shortcutKeys.EvaluateSelectionInConsole.length; ++i) {
             var keyDescriptor = shortcutKeys.EvaluateSelectionInConsole[i];
             this.addShortcut(keyDescriptor.key, this._evaluateSelectionInConsole.bind(this));
@@ -131,11 +131,10 @@
     populateLineGutterContextMenu: function(contextMenu, lineNumber)
     {
         contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Continue to here" : "Continue to Here"), this._continueToLine.bind(this, lineNumber));
-
-        var breakpoint = this._breakpointManager.findBreakpoint(this._uiSourceCode, lineNumber);
+        var breakpoint = this._breakpointManager.findBreakpointOnLine(this._uiSourceCode, lineNumber);
         if (!breakpoint) {
             // This row doesn't have a breakpoint: We want to show Add Breakpoint and Add and Edit Breakpoint.
-            contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Add breakpoint" : "Add Breakpoint"), this._setBreakpoint.bind(this, lineNumber, "", true));
+            contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Add breakpoint" : "Add Breakpoint"), this._setBreakpoint.bind(this, lineNumber, 0, "", true));
             contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Add conditional breakpoint…" : "Add Conditional Breakpoint…"), this._editBreakpointCondition.bind(this, lineNumber));
         } else {
             // This row has a breakpoint, we want to show edit and remove breakpoint, and either disable or enable.
@@ -167,6 +166,9 @@
             contextMenu.appendSeparator();
         }
 
+        /**
+         * @this {WebInspector.JavaScriptSourceFrame}
+         */
         function liveEdit()
         {
             var liveEditUISourceCode = WebInspector.liveEditSupport.uiSourceCodeForLiveEdit(this._uiSourceCode);
@@ -217,7 +219,7 @@
             if (!breakpointDecoration)
                 continue;
             this._removeBreakpointDecoration(lineNumber);
-            this._addBreakpointDecoration(lineNumber, breakpointDecoration.condition, breakpointDecoration.enabled, true);
+            this._addBreakpointDecoration(lineNumber, breakpointDecoration.columnNumber, breakpointDecoration.condition, breakpointDecoration.enabled, true);
         }
         this._muted = true;
     },
@@ -249,7 +251,7 @@
             if (isNaN(lineNumber))
                 continue;
             var breakpointDecoration = breakpoints[lineNumberString];
-            this._setBreakpoint(lineNumber, breakpointDecoration.condition, breakpointDecoration.enabled);
+            this._setBreakpoint(lineNumber, breakpointDecoration.columnNumber, breakpointDecoration.condition, breakpointDecoration.enabled);
         }
     },
 
@@ -293,7 +295,9 @@
         var lineNumber = textPosition.startLine;
         var line = this.textEditor.line(lineNumber);
         var tokenContent = line.substring(token.startColumn, token.endColumn + 1);
-        if (token.type !== "javascript-ident" && (token.type !== "javascript-keyword" || tokenContent !== "this"))
+
+        var isIdentifier = token.type.startsWith("js-variable") || token.type.startsWith("js-property") || token.type == "js-def";
+        if (!isIdentifier && (token.type !== "js-keyword" || tokenContent !== "this"))
             return null;
 
         var leftCorner = this.textEditor.cursorPositionToCoordinates(lineNumber, token.startColumn);
@@ -314,6 +318,7 @@
         /**
          * @param {?RuntimeAgent.RemoteObject} result
          * @param {boolean=} wasThrown
+         * @this {WebInspector.JavaScriptSourceFrame}
          */
         function showObjectPopover(result, wasThrown)
         {
@@ -364,15 +369,17 @@
 
     /**
      * @param {number} lineNumber
+     * @param {number} columnNumber
      * @param {string} condition
      * @param {boolean} enabled
      * @param {boolean} mutedWhileEditing
      */
-    _addBreakpointDecoration: function(lineNumber, condition, enabled, mutedWhileEditing)
+    _addBreakpointDecoration: function(lineNumber, columnNumber, condition, enabled, mutedWhileEditing)
     {
         var breakpoint = {
             condition: condition,
-            enabled: enabled
+            enabled: enabled,
+            columnNumber: columnNumber
         };
 
         this.textEditor.setAttribute(lineNumber, "breakpoint", breakpoint);
@@ -412,6 +419,9 @@
         this._conditionElement = this._createConditionElement(lineNumber);
         this.textEditor.addDecoration(lineNumber, this._conditionElement);
 
+        /**
+         * @this {WebInspector.JavaScriptSourceFrame}
+         */
         function finishEditing(committed, element, newText)
         {
             this.textEditor.removeDecoration(lineNumber, this._conditionElement);
@@ -423,11 +433,11 @@
             if (breakpoint)
                 breakpoint.setCondition(newText);
             else
-                this._setBreakpoint(lineNumber, newText, true);
+                this._setBreakpoint(lineNumber, 0, newText, true);
         }
 
-        var config = new WebInspector.EditingConfig(finishEditing.bind(this, true), finishEditing.bind(this, false));
-        WebInspector.startEditing(this._conditionEditorElement, config);
+        var config = new WebInspector.InplaceEditor.Config(finishEditing.bind(this, true), finishEditing.bind(this, false));
+        WebInspector.InplaceEditor.startEditing(this._conditionEditorElement, config);
         this._conditionEditorElement.value = breakpoint ? breakpoint.condition() : "";
         this._conditionEditorElement.select();
     },
@@ -470,6 +480,7 @@
 
         /**
          * @param {!Array.<!DebuggerAgent.Location>} locations
+         * @this {WebInspector.JavaScriptSourceFrame}
          */
         function locationsCallback(locations)
         {
@@ -555,7 +566,7 @@
 
         var breakpoint = /** @type {!WebInspector.BreakpointManager.Breakpoint} */ (event.data.breakpoint);
         if (this.loaded)
-            this._addBreakpointDecoration(uiLocation.lineNumber, breakpoint.condition(), breakpoint.enabled(), false);
+            this._addBreakpointDecoration(uiLocation.lineNumber, uiLocation.columnNumber, breakpoint.condition(), breakpoint.enabled(), false);
     },
 
     _breakpointRemoved: function(event)
@@ -567,7 +578,7 @@
             return;
 
         var breakpoint = /** @type {!WebInspector.BreakpointManager.Breakpoint} */ (event.data.breakpoint);
-        var remainingBreakpoint = this._breakpointManager.findBreakpoint(this._uiSourceCode, uiLocation.lineNumber);
+        var remainingBreakpoint = this._breakpointManager.findBreakpointOnLine(this._uiSourceCode, uiLocation.lineNumber);
         if (!remainingBreakpoint && this.loaded)
             this._removeBreakpointDecoration(uiLocation.lineNumber);
     },
@@ -617,6 +628,11 @@
         }
     },
 
+    beforeFormattedChange: function()
+    {
+        this.clearExecutionLine();
+    },
+
     onTextEditorContentLoaded: function()
     {
         if (typeof this._executionLineNumber === "number")
@@ -661,14 +677,14 @@
      */
     _toggleBreakpoint: function(lineNumber, onlyDisable)
     {
-        var breakpoint = this._breakpointManager.findBreakpoint(this._uiSourceCode, lineNumber);
+        var breakpoint = this._breakpointManager.findBreakpointOnLine(this._uiSourceCode, lineNumber);
         if (breakpoint) {
             if (onlyDisable)
                 breakpoint.setEnabled(!breakpoint.enabled());
             else
                 breakpoint.remove();
         } else
-            this._setBreakpoint(lineNumber, "", true);
+            this._setBreakpoint(lineNumber, 0, "", true);
     },
 
     toggleBreakpointOnCurrentLine: function()
@@ -684,12 +700,13 @@
 
     /**
      * @param {number} lineNumber
+     * @param {number} columnNumber
      * @param {string} condition
      * @param {boolean} enabled
      */
-    _setBreakpoint: function(lineNumber, condition, enabled)
+    _setBreakpoint: function(lineNumber, columnNumber, condition, enabled)
     {
-        this._breakpointManager.setBreakpoint(this._uiSourceCode, lineNumber, condition, enabled);
+        this._breakpointManager.setBreakpoint(this._uiSourceCode, lineNumber, columnNumber, condition, enabled);
 
         WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMetrics.UserAction, {
             action: WebInspector.UserMetrics.UserActionNames.SetBreakpoint,
diff --git a/Source/devtools/front_end/KeyboardShortcut.js b/Source/devtools/front_end/KeyboardShortcut.js
index dae45b1..47e120d 100644
--- a/Source/devtools/front_end/KeyboardShortcut.js
+++ b/Source/devtools/front_end/KeyboardShortcut.js
@@ -59,6 +59,7 @@
     Backspace: { code: 8, name: "\u21a4" },
     Tab: { code: 9, name: { mac: "\u21e5", other: "Tab" } },
     Enter: { code: 13, name: { mac: "\u21a9", other: "Enter" } },
+    Ctrl: { code: 17, name: "Ctrl" },
     Esc: { code: 27, name: { mac: "\u238b", other: "Esc" } },
     Space: { code: 32, name: "Space" },
     PageUp: { code: 33,  name: { mac: "\u21de", other: "PageUp" } },      // also NUM_NORTH_EAST
@@ -71,6 +72,8 @@
     Down: { code: 40, name: "\u2193" },           // also NUM_SOUTH
     Delete: { code: 46, name: "Del" },
     Zero: { code: 48, name: "0" },
+    H: { code: 72, name: "H" },
+    Meta: { code: 91, name: "Meta" },
     F1: { code: 112, name: "F1" },
     F2: { code: 113, name: "F2" },
     F3: { code: 114, name: "F3" },
@@ -89,13 +92,11 @@
     Minus: { code: 189, name: "-" },
     Period: { code: 190, name: "." },
     Slash: { code: 191, name: "/" },
+    QuestionMark: { code: 191, name: "?" },
     Apostrophe: { code: 192, name: "`" },
+    Tilde: { code: 192, name: "Tilde" },
     Backslash: { code: 220, name: "\\" },
     SingleQuote: { code: 222, name: "\'" },
-    H: { code: 72, name: "H" },
-    Ctrl: { code: 17, name: "Ctrl" },
-    Meta: { code: 91, name: "Meta" },
-    Tilde: { code: 192, name: "Tilde" },
     get CtrlOrMeta()
     {
         // "default" command/ctrl key for platform, Command on Mac, Ctrl on other platforms
diff --git a/Source/devtools/front_end/LayerDetailsView.js b/Source/devtools/front_end/LayerDetailsView.js
index cb5a2e7..d7b3e36 100644
--- a/Source/devtools/front_end/LayerDetailsView.js
+++ b/Source/devtools/front_end/LayerDetailsView.js
@@ -30,16 +30,18 @@
 
 /**
  * @constructor
+ * @param {!WebInspector.LayerTreeModel} model
  * @extends {WebInspector.View}
  */
-WebInspector.LayerDetailsView = function()
+WebInspector.LayerDetailsView = function(model)
 {
     WebInspector.View.call(this);
-    this.element.classList.add("fill");
     this.element.classList.add("layer-details-view");
     this._emptyView = new WebInspector.EmptyView(WebInspector.UIString("Select a layer to see its details"));
     this._createTable();
-    this.showLayer(null);
+    this._model = model;
+    this._model.addEventListener(WebInspector.LayerTreeModel.Events.LayerTreeChanged, this._onLayerTreeUpdated, this);
+    this._model.addEventListener(WebInspector.LayerTreeModel.Events.LayerPainted, this._onLayerPainted, this);
 }
 
 /**
@@ -84,21 +86,50 @@
     /**
      * @param {?WebInspector.Layer} layer
      */
-    showLayer: function(layer)
+    setLayer: function(layer)
     {
-        if (!layer) {
+        this._layer = layer;
+        if (this.isShowing())
+            this._update();
+    },
+
+    wasShown: function()
+    {
+        WebInspector.View.prototype.wasShown.call(this);
+        this._update();
+    },
+
+    _onLayerTreeUpdated: function()
+    {
+        if (this.isShowing())
+            this._update();
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _onLayerPainted: function(event)
+    {
+        var layer = /** @type {!WebInspector.Layer} */ (event.data);
+        if (this._layer === layer)
+            this._paintCountCell.textContent = layer.paintCount();
+    },
+
+    _update: function()
+    {
+        if (!this._layer) {
             this._tableElement.remove();
             this._emptyView.show(this.element);
             return;
         }
         this._emptyView.detach();
         this.element.appendChild(this._tableElement);
-        this._positionCell.textContent = WebInspector.UIString("%d,%d", layer.offsetX(), layer.offsetY());
-        this._sizeCell.textContent = WebInspector.UIString("%d × %d", layer.width(), layer.height());
-        this._paintCountCell.textContent = layer.paintCount();
+        this._positionCell.textContent = WebInspector.UIString("%d,%d", this._layer.offsetX(), this._layer.offsetY());
+        this._sizeCell.textContent = WebInspector.UIString("%d × %d", this._layer.width(), this._layer.height());
+        this._paintCountCell.textContent = this._layer.paintCount();
         const bytesPerPixel = 4;
-        this._memoryEstimateCell.textContent = Number.bytesToString(layer.invisible() ? 0 : layer.width() * layer.height() * bytesPerPixel);
-        layer.requestCompositingReasons(this._updateCompositingReasons.bind(this));
+        this._memoryEstimateCell.textContent = Number.bytesToString(this._layer.invisible() ? 0 : this._layer.width() * this._layer.height() * bytesPerPixel);
+        this._layer.requestCompositingReasons(this._updateCompositingReasons.bind(this));
     },
 
     _createTable: function()
@@ -145,13 +176,5 @@
         this._compositingReasonsCell.appendChild(fragment);
     },
 
-    /**
-     * @param {number} paintCount
-     */
-    updatePaintCount: function(paintCount)
-    {
-        this._paintCountCell.textContent = paintCount;
-    },
-
     __proto__: WebInspector.View.prototype
 }
diff --git a/Source/devtools/front_end/LayerTree.js b/Source/devtools/front_end/LayerTree.js
index 7fdd065..518cc75 100644
--- a/Source/devtools/front_end/LayerTree.js
+++ b/Source/devtools/front_end/LayerTree.js
@@ -89,6 +89,7 @@
 
         /**
          * @param {!WebInspector.Layer} layer
+         * @this {WebInspector.LayerTree}
          */
         function updateLayer(layer)
         {
@@ -201,7 +202,7 @@
         var node = nodeId ? WebInspector.domAgent.nodeForId(nodeId) : null;
         var title = document.createDocumentFragment();
         title.createChild("div", "selection");
-        title.appendChild(document.createTextNode(node ? WebInspector.DOMPresentationUtils.appropriateSelectorFor(node, false) :  "#" + layer.id()));
+        title.appendChild(document.createTextNode(node ? WebInspector.DOMPresentationUtils.fullQualifiedSelector(node, false) :  "#" + layer.id()));
         var details = title.createChild("span", "dimmed");
         details.textContent = WebInspector.UIString(" (%d × %d)", layer.width(), layer.height());
         this.title = title;
@@ -209,6 +210,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function()
     {
diff --git a/Source/devtools/front_end/LayerTreeModel.js b/Source/devtools/front_end/LayerTreeModel.js
index 71669f5..2753e10 100644
--- a/Source/devtools/front_end/LayerTreeModel.js
+++ b/Source/devtools/front_end/LayerTreeModel.js
@@ -66,6 +66,10 @@
             return;
         this._enabled = true;
         WebInspector.domAgent.requestDocument(onDocumentAvailable.bind(this));
+
+        /**
+         * @this {WebInspector.LayerTreeModel}
+         */
         function onDocumentAvailable()
         {
             // The agent might have been disabled while we were waiting for the document.
@@ -350,20 +354,17 @@
      */
     requestCompositingReasons: function(callback)
     {
-        /**
-         * @param {?string} error
-         * @param {!Array.<string>} compositingReasons
-         */
-        function callbackWrapper(error, compositingReasons)
-        {
-            if (error) {
-                console.error("LayerTreeAgent.reasonsForCompositingLayer(): " + error);
-                callback([]);
-                return;
-            }
-            callback(compositingReasons);
-        }
-        LayerTreeAgent.compositingReasons(this.id(), callbackWrapper.bind(this));
+        var wrappedCallback = InspectorBackend.wrapClientCallback(callback, "LayerTreeAgent.reasonsForCompositingLayer(): ", undefined, []);
+        LayerTreeAgent.compositingReasons(this.id(), wrappedCallback);
+    },
+
+    /**
+     * @param {function(!WebInspector.PaintProfilerSnapshot=)} callback
+     */
+    requestSnapshot: function(callback)
+    {
+        var wrappedCallback = InspectorBackend.wrapClientCallback(callback, "LayerTreeAgent.makeSnapshot(): ", WebInspector.PaintProfilerSnapshot);
+        LayerTreeAgent.makeSnapshot(this.id(), wrappedCallback);
     },
 
     /**
@@ -373,6 +374,7 @@
     {
         this._lastPaintRect = rect;
         this._paintCount = this.paintCount() + 1;
+        this._image = null;
     },
 
     /**
@@ -384,6 +386,7 @@
         this._parent = null;
         this._paintCount = 0;
         this._layerPayload = layerPayload;
+        this._image = null;
     }
 }
 
diff --git a/Source/devtools/front_end/Layers3DView.js b/Source/devtools/front_end/Layers3DView.js
index 06676b7..0ba03cc 100644
--- a/Source/devtools/front_end/Layers3DView.js
+++ b/Source/devtools/front_end/Layers3DView.js
@@ -36,7 +36,6 @@
 WebInspector.Layers3DView = function(model)
 {
     WebInspector.View.call(this);
-    this.element.classList.add("fill");
     this.element.classList.add("layers-3d-view");
     this._emptyView = new WebInspector.EmptyView(WebInspector.UIString("Not in the composited mode.\nConsider forcing composited mode in Settings."));
     this._model = model;
@@ -48,6 +47,7 @@
     this.element.addEventListener("mousedown", this._onMouseDown.bind(this), false);
     this.element.addEventListener("mouseup", this._onMouseUp.bind(this), false);
     this.element.addEventListener("contextmenu", this._onContextMenu.bind(this), false);
+    this.element.addEventListener("dblclick", this._onDoubleClick.bind(this), false);
     this.element.addEventListener("click", this._onClick.bind(this), false);
     this._elementsByLayerId = {};
     this._rotateX = 0;
@@ -55,6 +55,7 @@
     this._scaleAdjustmentStylesheet = this.element.ownerDocument.head.createChild("style");
     this._scaleAdjustmentStylesheet.disabled = true;
     this._lastOutlinedElement = {};
+    this._layerImage = document.createElement("img");
     WebInspector.settings.showPaintRects.addChangeListener(this._update, this);
 }
 
@@ -71,13 +72,14 @@
  */
 WebInspector.Layers3DView.Events = {
     LayerHovered: "LayerHovered",
-    LayerSelected: "LayerSelected"
+    LayerSelected: "LayerSelected",
+    LayerSnapshotRequested: "LayerSnapshotRequested"
 }
 
 WebInspector.Layers3DView.PaintRectColors = [
-    WebInspector.Color.fromRGBA([0xFF, 0, 0]),
-    WebInspector.Color.fromRGBA([0xFF, 0, 0xFF]),
-    WebInspector.Color.fromRGBA([0, 0, 0xFF])
+    WebInspector.Color.fromRGBA([0, 0x5F, 0, 0x3F]),
+    WebInspector.Color.fromRGBA([0, 0xAF, 0, 0x3F]),
+    WebInspector.Color.fromRGBA([0, 0xFF, 0, 0x3F])
 ]
 
 WebInspector.Layers3DView.prototype = {
@@ -136,6 +138,19 @@
         this._setOutline(WebInspector.Layers3DView.OutlineType.Selected, layer);
     },
 
+    /**
+     * @param {!WebInspector.Layer} layer
+     * @param {string=} imageURL
+     */
+    showImageForLayer: function(layer, imageURL)
+    {
+        var element = this._elementForLayer(layer);
+        this._layerImage.removeAttribute("src");
+        if (imageURL)
+            this._layerImage.src = imageURL;
+        element.appendChild(this._layerImage);
+    },
+
     _scaleToFit: function()
     {
         var root = this._model.contentRoot();
@@ -178,6 +193,10 @@
             return;
         }
         this._emptyView.detach();
+
+        /**
+         * @this {WebInspector.Layers3DView}
+         */
         function updateLayer(layer)
         {
             this._updateLayerElement(this._elementForLayer(layer));
@@ -394,11 +413,25 @@
         contextMenu.show();
     },
 
+    /**
+     * @param {?Event} event
+     */
     _onClick: function(event)
     {
         this.dispatchEventToListeners(WebInspector.Layers3DView.Events.LayerSelected, this._layerFromEventPoint(event));
     },
 
+    /**
+     * @param {?Event} event
+     */
+    _onDoubleClick: function(event)
+    {
+        var layer = this._layerFromEventPoint(event);
+        if (layer)
+            this.dispatchEventToListeners(WebInspector.Layers3DView.Events.LayerSnapshotRequested, layer);
+        event.stopPropagation();
+    },
+
     __proto__: WebInspector.View.prototype
 }
 
diff --git a/Source/devtools/front_end/LayersPanel.js b/Source/devtools/front_end/LayersPanel.js
index b13acee..34680ad 100644
--- a/Source/devtools/front_end/LayersPanel.js
+++ b/Source/devtools/front_end/LayersPanel.js
@@ -32,25 +32,22 @@
 importScript("LayerTree.js");
 importScript("Layers3DView.js");
 importScript("LayerDetailsView.js");
+importScript("PaintProfilerView.js");
 
 /**
  * @constructor
- * @extends {WebInspector.Panel}
+ * @extends {WebInspector.PanelWithSidebarTree}
  */
 WebInspector.LayersPanel = function()
 {
-    WebInspector.Panel.call(this, "layers");
+    WebInspector.PanelWithSidebarTree.call(this, "layers", 225);
     this.registerRequiredCSS("layersPanel.css");
 
-    const initialLayerTreeSidebarWidth = 225;
-    const minimumMainWidthPercent = 0.5;
-    this.createSidebarViewWithTree();
-    this.sidebarElement.classList.add("outline-disclosure");
-    this.sidebarTreeElement.classList.remove("sidebar-tree");
+    this.sidebarElement().classList.add("outline-disclosure");
+    this.sidebarTree.element.classList.remove("sidebar-tree");
 
     this._model = new WebInspector.LayerTreeModel();
     this._model.addEventListener(WebInspector.LayerTreeModel.Events.LayerTreeChanged, this._onLayerTreeUpdated, this);
-    this._model.addEventListener(WebInspector.LayerTreeModel.Events.LayerPainted, this._onLayerPainted, this);
     this._currentlySelectedLayer = null;
     this._currentlyHoveredLayer = null;
 
@@ -58,23 +55,34 @@
     this._layerTree.addEventListener(WebInspector.LayerTree.Events.LayerSelected, this._onLayerSelected, this);
     this._layerTree.addEventListener(WebInspector.LayerTree.Events.LayerHovered, this._onLayerHovered, this);
 
-    this._layerDetailsSplitView = new WebInspector.SplitView(false, "layerDetailsSplitView");
-    this._layerDetailsSplitView.show(this.splitView.mainElement);
+    this._rightSplitView = new WebInspector.SplitView(false, true, "layerDetailsSplitView");
+    this._rightSplitView.show(this.mainElement());
 
     this._layers3DView = new WebInspector.Layers3DView(this._model);
-    this._layers3DView.show(this._layerDetailsSplitView.firstElement());
+    this._layers3DView.show(this._rightSplitView.mainElement());
     this._layers3DView.addEventListener(WebInspector.Layers3DView.Events.LayerSelected, this._onLayerSelected, this);
     this._layers3DView.addEventListener(WebInspector.Layers3DView.Events.LayerHovered, this._onLayerHovered, this);
+    this._layers3DView.addEventListener(WebInspector.Layers3DView.Events.LayerSnapshotRequested, this._onSnapshotRequested, this);
 
-    this._layerDetailsView = new WebInspector.LayerDetailsView();
-    this._layerDetailsView.show(this._layerDetailsSplitView.secondElement());
+    this._tabbedPane = new WebInspector.TabbedPane();
+    this._tabbedPane.show(this._rightSplitView.sidebarElement());
+
+    this._layerDetailsView = new WebInspector.LayerDetailsView(this._model);
+    this._tabbedPane.appendTab(WebInspector.LayersPanel.DetailsViewTabs.Details, WebInspector.UIString("Details"), this._layerDetailsView);
+    this._paintProfilerView = new WebInspector.PaintProfilerView(this._model, this._layers3DView);
+    this._tabbedPane.appendTab(WebInspector.LayersPanel.DetailsViewTabs.Profiler, WebInspector.UIString("Profiler"), this._paintProfilerView);
 }
 
+WebInspector.LayersPanel.DetailsViewTabs = {
+    Details: "details",
+    Profiler: "profiler"
+};
+
 WebInspector.LayersPanel.prototype = {
     wasShown: function()
     {
         WebInspector.Panel.prototype.wasShown.call(this);
-        this.sidebarTreeElement.focus();
+        this.sidebarTree.element.focus();
         this._model.enable();
     },
 
@@ -90,18 +98,6 @@
             this._selectLayer(null);
         if (this._currentlyHoveredLayer && !this._model.layerById(this._currentlyHoveredLayer.id()))
             this._hoverLayer(null);
-        if (this._currentlySelectedLayer)
-            this._layerDetailsView.showLayer(this._currentlySelectedLayer);
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _onLayerPainted: function(event)
-    {
-        var layer = /** @type {!WebInspector.Layer} */ (event.data);
-        if (this._currentlySelectedLayer === layer)
-            this._layerDetailsView.updatePaintCount(this._currentlySelectedLayer.paintCount());
     },
 
     /**
@@ -109,7 +105,7 @@
      */
     _onLayerSelected: function(event)
     {
-        var layer = /** @type WebInspector.Layer */ (event.data);
+        var layer = /** @type {!WebInspector.Layer} */ (event.data);
         this._selectLayer(layer);
     },
 
@@ -123,6 +119,16 @@
     },
 
     /**
+     * @param {!WebInspector.Event} event
+     */
+    _onSnapshotRequested: function(event)
+    {
+        var layer = /** @type {!WebInspector.Layer} */ (event.data);
+        this._tabbedPane.selectTab(WebInspector.LayersPanel.DetailsViewTabs.Profiler);
+        this._paintProfilerView.profile(layer);
+    },
+
+    /**
      * @param {?WebInspector.Layer} layer
      */
     _selectLayer: function(layer)
@@ -137,7 +143,7 @@
             WebInspector.domAgent.hideDOMNodeHighlight();
         this._layerTree.selectLayer(layer);
         this._layers3DView.selectLayer(layer);
-        this._layerDetailsView.showLayer(layer);
+        this._layerDetailsView.setLayer(layer);
     },
 
     /**
@@ -157,5 +163,5 @@
         this._layers3DView.hoverLayer(layer);
     },
 
-    __proto__: WebInspector.Panel.prototype
+    __proto__: WebInspector.PanelWithSidebarTree.prototype
 }
diff --git a/Source/devtools/front_end/Linkifier.js b/Source/devtools/front_end/Linkifier.js
index 8e34d8c..f0c5c0e 100644
--- a/Source/devtools/front_end/Linkifier.js
+++ b/Source/devtools/front_end/Linkifier.js
@@ -53,6 +53,60 @@
     this._liveLocations = [];
 }
 
+/**
+ * @param {!WebInspector.Linkifier.LinkHandler} handler
+ */
+WebInspector.Linkifier.setLinkHandler = function(handler)
+{
+    WebInspector.Linkifier._linkHandler = handler;
+}
+
+/**
+ * @param {string} url
+ * @param {number=} lineNumber
+ * @return {boolean}
+ */
+WebInspector.Linkifier.handleLink = function(url, lineNumber)
+{
+    if (!WebInspector.Linkifier._linkHandler)
+        return false;
+    return WebInspector.Linkifier._linkHandler.handleLink(url, lineNumber)
+}
+
+/**
+ * @param {!Object} revealable
+ * @param {string} text
+ * @param {string} fallbackHref
+ * @param {number=} fallbackLineNumber
+ * @param {string=} title
+ * @param {string=} classes
+ * @return {!Element}
+ */
+WebInspector.Linkifier.linkifyUsingRevealer = function(revealable, text, fallbackHref, fallbackLineNumber, title, classes)
+{
+    var a = document.createElement("a");
+    a.className = (classes || "") + " webkit-html-resource-link";
+    a.textContent = text.trimMiddle(WebInspector.Linkifier.MaxLengthForDisplayedURLs);
+    a.title = title || text;
+    a.href = fallbackHref;
+    a.lineNumber = fallbackLineNumber;
+
+    /**
+     * @param {?Event} event
+     * @this {Object}
+     */
+    function clickHandler(event)
+    {
+        event.consume(true);
+        if (WebInspector.Linkifier.handleLink(fallbackHref, fallbackLineNumber))
+            return;
+
+        WebInspector.Revealer.reveal(this);
+    }
+    a.addEventListener("click", clickHandler.bind(revealable), false);
+    return a;
+}
+
 WebInspector.Linkifier.prototype = {
     /**
      * @param {string} sourceURL
@@ -79,7 +133,7 @@
         var script = WebInspector.debuggerModel.scriptForId(rawLocation.scriptId);
         if (!script)
             return null;
-        var anchor = WebInspector.linkifyURLAsNode("", "", classes, false);
+        var anchor = this._createAnchor(classes);
         var liveLocation = script.createLiveLocation(rawLocation, this._updateAnchor.bind(this, anchor));
         this._liveLocations.push(liveLocation);
         return anchor;
@@ -93,7 +147,7 @@
      */
     linkifyCSSLocation: function(styleSheetId, rawLocation, classes)
     {
-        var anchor = WebInspector.linkifyURLAsNode("", "", classes, false);
+        var anchor = this._createAnchor(classes);
         var liveLocation = WebInspector.cssModel.createLiveLocation(styleSheetId, rawLocation, this._updateAnchor.bind(this, anchor));
         if (!liveLocation)
             return null;
@@ -101,6 +155,31 @@
         return anchor;
     },
 
+    /**
+     * @param {string=} classes
+     * @return {!Element}
+     */
+    _createAnchor: function(classes)
+    {
+        var anchor = document.createElement("a");
+        anchor.className = (classes || "") + " webkit-html-resource-link";
+
+        /**
+         * @param {?Event} event
+         */
+        function clickHandler(event)
+        {
+            event.consume(true);
+            if (!anchor.__uiLocation)
+                return;
+            if (WebInspector.Linkifier.handleLink(anchor.__uiLocation.url(), anchor.__uiLocation.lineNumber))
+                return;
+            WebInspector.Revealer.reveal(anchor.__uiLocation);
+        }
+        anchor.addEventListener("click", clickHandler, false);
+        return anchor;
+    },
+
     reset: function()
     {
         for (var i = 0; i < this._liveLocations.length; ++i)
@@ -114,11 +193,7 @@
      */
     _updateAnchor: function(anchor, uiLocation)
     {
-        anchor.preferredPanel = "sources";
-        anchor.href = sanitizeHref(uiLocation.uiSourceCode.originURL());
-        anchor.uiSourceCode = uiLocation.uiSourceCode;
-        anchor.lineNumber = uiLocation.lineNumber;
-        anchor.columnNumber = uiLocation.columnNumber;
+        anchor.__uiLocation = uiLocation;
         this._formatter.formatLiveAnchor(anchor, uiLocation);
     }
 }
@@ -149,9 +224,7 @@
         if (typeof uiLocation.lineNumber === "number")
             titleText += ":" + (uiLocation.lineNumber + 1);
         anchor.title = titleText;
-    },
-
-    __proto__: WebInspector.LinkifierFormatter.prototype
+    }
 }
 
 /**
@@ -186,3 +259,19 @@
  * @type {number}
  */
 WebInspector.Linkifier.MaxLengthForDisplayedURLs = 150;
+
+/**
+ * @interface
+ */
+WebInspector.Linkifier.LinkHandler = function()
+{
+}
+
+WebInspector.Linkifier.LinkHandler.prototype = {
+    /**
+     * @param {string} url
+     * @param {number=} lineNumber
+     * @return {boolean}
+     */
+    handleLink: function(url, lineNumber) {}
+}
diff --git a/Source/devtools/front_end/LiveEditSupport.js b/Source/devtools/front_end/LiveEditSupport.js
index 3617686..7bc685a 100644
--- a/Source/devtools/front_end/LiveEditSupport.js
+++ b/Source/devtools/front_end/LiveEditSupport.js
@@ -91,12 +91,11 @@
     }
     var compileError = errorData.compileError;
     if (compileError) {
-        var message = "LiveEdit compile failed: " + compileError.message;
-        if (contextScript)
-            message += " at " + contextScript.sourceURL + ":" + compileError.lineNumber + ":" + compileError.columnNumber;
+        var location = contextScript ? WebInspector.UIString(" at %s:%d:%d", contextScript.sourceURL, compileError.lineNumber, compileError.columnNumber) : "";
+        var message = WebInspector.UIString("LiveEdit compile failed: %s%s", compileError.message, location);
         WebInspector.log(message, WebInspector.ConsoleMessage.MessageLevel.Error, false);
     } else {
-        WebInspector.log("Unknown LiveEdit error: " + JSON.stringify(errorData) + "; " + error, warningLevel, false);
+        WebInspector.log(WebInspector.UIString("Unknown LiveEdit error: %s; %s", JSON.stringify(errorData), error), warningLevel, false);
     }
 }
 
@@ -128,6 +127,7 @@
         /**
          * @param {?string} error
          * @param {!DebuggerAgent.SetScriptSourceError=} errorData
+         * @this {WebInspector.LiveEditScriptFile}
          */
         function innerCallback(error, errorData)
         {
@@ -174,5 +174,5 @@
     __proto__: WebInspector.Object.prototype
 }
 
-/** @type {?WebInspector.LiveEditSupport} */
-WebInspector.liveEditSupport = null;
+/** @type {!WebInspector.LiveEditSupport} */
+WebInspector.liveEditSupport;
diff --git a/Source/devtools/front_end/MemoryStatistics.js b/Source/devtools/front_end/MemoryStatistics.js
index 439ebcf..6338354 100644
--- a/Source/devtools/front_end/MemoryStatistics.js
+++ b/Source/devtools/front_end/MemoryStatistics.js
@@ -29,55 +29,112 @@
  */
 
 /**
- * @param {!WebInspector.TimelinePanel} timelinePanel
- * @param {!WebInspector.TimelineModel} model
  * @constructor
- * @extends {WebInspector.View}
+ * @extends {WebInspector.SplitView}
+ * @param {!WebInspector.TimelineView} timelineView
+ * @param {!WebInspector.TimelineModel} model
  */
-WebInspector.MemoryStatistics = function(timelinePanel, model)
+WebInspector.MemoryStatistics = function(timelineView, model)
 {
-    WebInspector.View.call(this);
-    this._timelinePanel = timelinePanel;
+    WebInspector.SplitView.call(this, true, false);
 
-    this.element.classList.add("fill");
-    this._counters = [];
+    this.element.id = "memory-graphs-container";
+
+    this._timelineView = timelineView;
 
     model.addEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._onRecordAdded, this);
-    model.addEventListener(WebInspector.TimelineModel.Events.RecordsCleared, this._onRecordsCleared, this);
 
-    this._memorySidebarView = new WebInspector.SidebarView(WebInspector.SidebarView.SidebarPosition.Start, undefined);
-    this._memorySidebarView.element.id = "memory-graphs-container";
-
-    this._memorySidebarView.addEventListener(WebInspector.SidebarView.EventTypes.Resized, this._sidebarResized.bind(this));
-
-    this._canvasContainer = this._memorySidebarView.mainElement;
-    this._canvasContainer.id = "memory-graphs-canvas-container";
+    this._graphsContainer = this.mainElement();
     this._createCurrentValuesBar();
-    this._canvas = this._canvasContainer.createChild("canvas", "fill");
+    this._canvasView = new WebInspector.ViewWithResizeCallback(this._resize.bind(this));
+    this._canvasView.show(this._graphsContainer);
+    this._canvasContainer = this._canvasView.element;
+    this._canvasContainer.id = "memory-graphs-canvas-container";
+    this._canvas = this._canvasContainer.createChild("canvas");
     this._canvas.id = "memory-counters-graph";
-    this._lastMarkerXPosition = 0;
 
-    this._canvas.addEventListener("mouseover", this._onMouseOver.bind(this), true);
-    this._canvas.addEventListener("mousemove", this._onMouseMove.bind(this), true);
-    this._canvas.addEventListener("mouseout", this._onMouseOut.bind(this), true);
-    this._canvas.addEventListener("click", this._onClick.bind(this), true);
+    this._canvasContainer.addEventListener("mouseover", this._onMouseMove.bind(this), true);
+    this._canvasContainer.addEventListener("mousemove", this._onMouseMove.bind(this), true);
+    this._canvasContainer.addEventListener("mouseout", this._onMouseOut.bind(this), true);
+    this._canvasContainer.addEventListener("click", this._onClick.bind(this), true);
     // We create extra timeline grid here to reuse its event dividers.
     this._timelineGrid = new WebInspector.TimelineGrid();
     this._canvasContainer.appendChild(this._timelineGrid.dividersElement);
 
     // Populate sidebar
-    this._memorySidebarView.sidebarElement.createChild("div", "sidebar-tree sidebar-tree-section").textContent = WebInspector.UIString("COUNTERS");
-    this._counterUI = this._createCounterUIList();
-    this._memorySidebarView.show(this.element);
+    this.sidebarElement().createChild("div", "sidebar-tree sidebar-tree-section").textContent = WebInspector.UIString("COUNTERS");
+    this._createAllCounters();
 }
 
 /**
  * @constructor
- * @param {number} time
+ * @param {string} counterName
  */
-WebInspector.MemoryStatistics.Counter = function(time)
+WebInspector.MemoryStatistics.Counter = function(counterName)
 {
-    this.time = time;
+    this.counterName = counterName;
+    this.times = [];
+    this.values = [];
+}
+
+WebInspector.MemoryStatistics.Counter.prototype = {
+    /**
+     * @param {number} time
+     * @param {!TimelineAgent.Counters} counters
+     */
+    appendSample: function(time, counters)
+    {
+        var value = counters[this.counterName];
+        if (value === undefined)
+            return;
+        if (this.values.length && this.values.peekLast() === value)
+            return;
+        this.times.push(time);
+        this.values.push(value);
+    },
+
+    reset: function()
+    {
+        this.times = [];
+        this.values = [];
+    },
+
+    /**
+     * @param {!WebInspector.TimelineCalculator} calculator
+     */
+    _calculateVisibleIndexes: function(calculator)
+    {
+        // FIXME: these 1000 constants shouldn't be here.
+        var start = calculator.minimumBoundary() * 1000;
+        var end = calculator.maximumBoundary() * 1000;
+
+        // Maximum index of element whose time <= start.
+        this._minimumIndex = Number.constrain(this.times.upperBound(start) - 1, 0, this.times.length - 1);
+
+        // Minimum index of element whose time >= end.
+        this._maximumIndex = Number.constrain(this.times.lowerBound(end), 0, this.times.length - 1);
+
+        // Current window bounds.
+        this._minTime = start;
+        this._maxTime = end;
+    },
+
+    /**
+     * @param {number} width
+     */
+    _calculateXValues: function(width)
+    {
+        if (!this.values.length)
+            return;
+
+        var xFactor = width / (this._maxTime - this._minTime);
+
+        this.x = new Array(this.values.length);
+        this.x[this._minimumIndex] = 0;
+        for (var i = this._minimumIndex + 1; i < this._maximumIndex; i++)
+             this.x[i] = xFactor * (this.times[i] - this._minTime);
+        this.x[this._maximumIndex] = width;
+    }
 }
 
 /**
@@ -125,19 +182,23 @@
 
 /**
  * @constructor
+ * @param {!WebInspector.MemoryStatistics} memoryCountersPane
+ * @param {string} title
+ * @param {string} graphColor
+ * @param {!WebInspector.MemoryStatistics.Counter} counter
  */
-WebInspector.CounterUIBase = function(memoryCountersPane, title, graphColor, valueGetter)
+WebInspector.CounterUIBase = function(memoryCountersPane, title, graphColor, counter)
 {
     this._memoryCountersPane = memoryCountersPane;
-    this.valueGetter = valueGetter;
-    var container = memoryCountersPane._memorySidebarView.sidebarElement.createChild("div", "memory-counter-sidebar-info");
+    this.counter = counter;
+    var container = memoryCountersPane.sidebarElement().createChild("div", "memory-counter-sidebar-info");
     var swatchColor = graphColor;
     this._swatch = new WebInspector.SwatchCheckbox(WebInspector.UIString(title), swatchColor);
     this._swatch.addEventListener(WebInspector.SwatchCheckbox.Events.Changed, this._toggleCounterGraph.bind(this));
     container.appendChild(this._swatch.element);
 
     this._value = null;
-    this.graphColor =graphColor;
+    this.graphColor = graphColor;
     this.strokeColor = graphColor;
     this.graphYValues = [];
 }
@@ -145,21 +206,38 @@
 WebInspector.CounterUIBase.prototype = {
     _toggleCounterGraph: function(event)
     {
-        if (this._swatch.checked)
-            this._value.classList.remove("hidden");
-        else
-            this._value.classList.add("hidden");
+        this._value.classList.toggle("hidden", !this._swatch.checked);
         this._memoryCountersPane.refresh();
     },
 
-    updateCurrentValue: function(countersEntry)
+    /**
+     * @param {number} x
+     * @return {number}
+     */
+    _recordIndexAt: function(x)
     {
-        this._value.textContent = Number.bytesToString(this.valueGetter(countersEntry));
+        return this.counter.x.upperBound(x, null, this.counter._minimumIndex + 1, this.counter._maximumIndex + 1) - 1;
     },
 
-    clearCurrentValueAndMarker: function(ctx)
+    /**
+     * @param {number} x
+     */
+    updateCurrentValue: function(x)
+    {
+        if (!this.visible || !this.counter.values.length)
+            return;
+        var index = this._recordIndexAt(x);
+        this._value.textContent = WebInspector.UIString(this._currentValueLabel, this.counter.values[index]);
+        var y = this.graphYValues[index];
+        this._marker.style.left = x + "px";
+        this._marker.style.top = y + "px";
+        this._marker.classList.remove("hidden");
+    },
+
+    clearCurrentValueAndMarker: function()
     {
         this._value.textContent = "";
+        this._marker.classList.add("hidden");
     },
 
     get visible()
@@ -174,74 +252,11 @@
         throw new Error("Not implemented");
     },
 
-    _createCounterUIList: function()
+    _createAllCounters: function()
     {
         throw new Error("Not implemented");
     },
 
-    _onRecordsCleared: function()
-    {
-        this._counters = [];
-    },
-
-    /**
-     * @param {!WebInspector.TimelineGrid} timelineGrid
-     */
-    setMainTimelineGrid: function(timelineGrid)
-    {
-        this._mainTimelineGrid = timelineGrid;
-    },
-
-    /**
-     * @return {number}
-     */
-    height: function()
-    {
-        return this._memorySidebarView.element.offsetHeight;
-    },
-
-    /**
-     * @param {number} width
-     */
-    setSidebarWidth: function(width)
-    {
-        if (this._ignoreSidebarResize)
-            return;
-        this._ignoreSidebarResize = true;
-        this._memorySidebarView.setSidebarWidth(width);
-        this._ignoreSidebarResize = false;
-    },
-
-    /**
-     * @param {!WebInspector.Event} event
-     */
-    _sidebarResized: function(event)
-    {
-        if (this._ignoreSidebarResize)
-            return;
-        this._ignoreSidebarResize = true;
-        this._timelinePanel.setSidebarWidth(/** @type {number} */(event.data));
-        this._ignoreSidebarResize = false;
-    },
-
-    _canvasHeight: function()
-    {
-        throw new Error("Not implemented");
-    },
-
-    onResize: function()
-    {
-        var width = this._mainTimelineGrid.dividersElement.offsetWidth + 1;
-
-        this._canvas.style.width = width + "px";
-        this._timelineGrid.dividersElement.style.width = width + "px";
-        var parentElement = this._canvas.parentElement;
-
-        this._canvas.width = width;
-        this._canvas.height = parentElement.clientHeight - 15;
-        this.draw();
-    },
-
     /**
      * @param {!WebInspector.Event} event
      */
@@ -250,179 +265,134 @@
         throw new Error("Not implemented");
     },
 
+    reset: function()
+    {
+        for (var i = 0; i < this._counters.length; ++i)
+            this._counters[i].reset();
+
+        for (var i = 0; i < this._counterUI.length; ++i)
+            this._counterUI[i].reset();
+
+        this.refresh();
+    },
+
+    _resize: function()
+    {
+        var parentElement = this._canvas.parentElement;
+        this._canvas.width = parentElement.clientWidth;
+        this._canvas.height = parentElement.clientHeight;
+        this.refresh();
+    },
+
+    setWindowTimes: function()
+    {
+        this.scheduleRefresh();
+    },
+
+    scheduleRefresh: function()
+    {
+        if (this._refreshTimer)
+            return;
+        this._refreshTimer = setTimeout(this.refresh.bind(this), 300);
+    },
+
+    /**
+     * @return {boolean}
+     */
+    supportsGlueParentMode: function()
+    {
+        return true;
+    },
+
     draw: function()
     {
-        this._calculateVisibleIndexes();
-        this._calculateXValues();
+        for (var i = 0; i < this._counters.length; ++i) {
+            this._counters[i]._calculateVisibleIndexes(this._timelineView.calculator);
+            this._counters[i]._calculateXValues(this._canvas.width);
+        }
         this._clear();
-
         this._setVerticalClip(10, this._canvas.height - 20);
     },
 
-    _calculateVisibleIndexes: function()
+    /**
+     * @param {?Event} event
+     */
+    _onClick: function(event)
     {
-        var calculator = this._timelinePanel.calculator;
-        var start = calculator.minimumBoundary() * 1000;
-        var end = calculator.maximumBoundary() * 1000;
-        function comparator(value, sample)
-        {
-            return value - sample.time;
+        var x = event.x - this._canvasContainer.offsetParent.offsetLeft;
+        var minDistance = Infinity;
+        var bestTime;
+        for (var i = 0; i < this._counterUI.length; ++i) {
+            var counterUI = this._counterUI[i];
+            if (!counterUI.counter.times.length)
+                continue;
+            var index = counterUI._recordIndexAt(x);
+            var distance = Math.abs(x - counterUI.counter.x[index]);
+            if (distance < minDistance) {
+                minDistance = distance;
+                bestTime = counterUI.counter.times[index];
+            }
         }
-
-        // Maximum index of element whose time <= start.
-        this._minimumIndex = Number.constrain(this._counters.upperBound(start, comparator) - 1, 0, this._counters.length - 1);
-
-        // Minimum index of element whose time >= end.
-        this._maximumIndex = Number.constrain(this._counters.lowerBound(end, comparator), 0, this._counters.length - 1);
-
-        // Current window bounds.
-        this._minTime = start;
-        this._maxTime = end;
+        if (bestTime !== undefined)
+            this._timelineView.revealRecordAt(bestTime / 1000);
     },
 
     /**
-     * @param {!MouseEvent} event
+     * @param {?Event} event
      */
-     _onClick: function(event)
-    {
-        var x = event.x - event.target.offsetParent.offsetLeft;
-        var i = this._recordIndexAt(x);
-        var counter = this._counters[i];
-        if (counter)
-            this._timelinePanel.revealRecordAt(counter.time / 1000);
-    },
-
-    /**
-     * @param {!MouseEvent} event
-     */
-     _onMouseOut: function(event)
+    _onMouseOut: function(event)
     {
         delete this._markerXPosition;
-
-        var ctx = this._canvas.getContext("2d");
-        this._clearCurrentValueAndMarker(ctx);
+        this._clearCurrentValueAndMarker();
     },
 
-    /**
-     * @param {!CanvasRenderingContext2D} ctx
-     */
-    _clearCurrentValueAndMarker: function(ctx)
+    _clearCurrentValueAndMarker: function()
     {
         for (var i = 0; i < this._counterUI.length; i++)
-            this._counterUI[i].clearCurrentValueAndMarker(ctx);
+            this._counterUI[i].clearCurrentValueAndMarker();
     },
 
     /**
-     * @param {!MouseEvent} event
+     * @param {?Event} event
      */
-     _onMouseOver: function(event)
+    _onMouseMove: function(event)
     {
-        this._onMouseMove(event);
-    },
-
-    /**
-     * @param {!MouseEvent} event
-     */
-     _onMouseMove: function(event)
-    {
-        var x = event.x - event.target.offsetParent.offsetLeft
+        var x = event.x - this._canvasContainer.offsetParent.offsetLeft;
         this._markerXPosition = x;
         this._refreshCurrentValues();
     },
 
     _refreshCurrentValues: function()
     {
-        if (!this._counters.length)
-            return;
         if (this._markerXPosition === undefined)
             return;
-        if (this._maximumIndex === -1)
-            return;
-        var i = this._recordIndexAt(this._markerXPosition);
-
-        this._updateCurrentValue(this._counters[i]);
-
-        this._highlightCurrentPositionOnGraphs(this._markerXPosition, i);
-    },
-
-    _updateCurrentValue: function(counterEntry)
-    {
-        for (var j = 0; j < this._counterUI.length; j++)
-            this._counterUI[j].updateCurrentValue(counterEntry);
-    },
-
-    _recordIndexAt: function(x)
-    {
-        var i;
-        for (i = this._minimumIndex + 1; i <= this._maximumIndex; i++) {
-            var statX = this._counters[i].x;
-            if (x < statX)
-                break;
-        }
-        i--;
-        return i;
-    },
-
-    _highlightCurrentPositionOnGraphs: function(x, index)
-    {
-        var ctx = this._canvas.getContext("2d");
-        this._restoreImageUnderMarker(ctx);
-        this._drawMarker(ctx, x, index);
-    },
-
-    _restoreImageUnderMarker: function(ctx)
-    {
-        throw new Error("Not implemented");
-    },
-
-    _drawMarker: function(ctx, x, index)
-    {
-        throw new Error("Not implemented");
+        for (var i = 0; i < this._counterUI.length; ++i)
+            this._counterUI[i].updateCurrentValue(this._markerXPosition);
     },
 
     refresh: function()
     {
-        this._refreshDividers();
+        delete this._refreshTimer;
+        this._timelineGrid.updateDividers(this._timelineView.calculator);
         this.draw();
         this._refreshCurrentValues();
     },
 
-    _refreshDividers: function()
-    {
-        this._timelineGrid.updateDividers(this._timelinePanel.calculator);
-    },
-
+    /**
+     * @param {number} originY
+     * @param {number} height
+     */
     _setVerticalClip: function(originY, height)
     {
         this._originY = originY;
         this._clippedHeight = height;
     },
 
-    _calculateXValues: function()
-    {
-        if (!this._counters.length)
-            return;
-
-        var width = this._canvas.width;
-        var xFactor = width / (this._maxTime - this._minTime);
-
-        this._counters[this._minimumIndex].x = 0;
-        for (var i = this._minimumIndex + 1; i < this._maximumIndex; i++)
-             this._counters[i].x = xFactor * (this._counters[i].time - this._minTime);
-        this._counters[this._maximumIndex].x = width;
-    },
-
     _clear: function()
     {
         var ctx = this._canvas.getContext("2d");
         ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
-        this._discardImageUnderMarker();
     },
 
-    _discardImageUnderMarker: function()
-    {
-        throw new Error("Not implemented");
-    },
-
-    __proto__: WebInspector.View.prototype
+    __proto__: WebInspector.SplitView.prototype
 }
diff --git a/Source/devtools/front_end/MetricsSidebarPane.js b/Source/devtools/front_end/MetricsSidebarPane.js
index ca55ae1..0e814d8 100644
--- a/Source/devtools/front_end/MetricsSidebarPane.js
+++ b/Source/devtools/front_end/MetricsSidebarPane.js
@@ -67,6 +67,10 @@
             return;
         }
 
+        /**
+         * @param {?WebInspector.CSSStyleDeclaration} style
+         * @this {WebInspector.MetricsSidebarPane}
+         */
         function callback(style)
         {
             if (!style || this.node !== node)
@@ -75,6 +79,10 @@
         }
         WebInspector.cssModel.getComputedStyleAsync(node.id, callback.bind(this));
 
+        /**
+         * @param {?WebInspector.CSSStyleDeclaration} style
+         * @this {WebInspector.MetricsSidebarPane}
+         */
         function inlineStyleCallback(style)
         {
             if (!style || this.node !== node)
@@ -91,6 +99,9 @@
 
     _frameResized: function()
     {
+        /**
+         * @this {WebInspector.MetricsSidebarPane}
+         */
         function refreshContents()
         {
             this._innerUpdate();
@@ -149,6 +160,9 @@
         }
     },
 
+    /**
+     * @param {!WebInspector.CSSStyleDeclaration} style
+     */
     _updateMetrics: function(style)
     {
         // Updating with computed style.
@@ -156,6 +170,13 @@
         metricsElement.className = "metrics";
         var self = this;
 
+        /**
+         * @param {!WebInspector.CSSStyleDeclaration} style
+         * @param {string} name
+         * @param {string} side
+         * @param {string} suffix
+         * @this {WebInspector.MetricsSidebarPane}
+         */
         function createBoxPartElement(style, name, side, suffix)
         {
             var propertyName = (name !== "position" ? name + "-" : "") + side + suffix;
@@ -308,8 +329,8 @@
 
         this._isEditingMetrics = true;
 
-        var config = new WebInspector.EditingConfig(this.editingCommitted.bind(this), this.editingCancelled.bind(this), context);
-        WebInspector.startEditing(targetElement, config);
+        var config = new WebInspector.InplaceEditor.Config(this.editingCommitted.bind(this), this.editingCancelled.bind(this), context);
+        WebInspector.InplaceEditor.startEditing(targetElement, config);
 
         window.getSelection().setBaseAndExtent(targetElement, 0, targetElement, 1);
     },
@@ -318,6 +339,11 @@
     {
         var element = event.currentTarget;
 
+        /**
+         * @param {string} originalValue
+         * @param {string} replacementString
+         * @this {WebInspector.MetricsSidebarPane}
+         */
         function finishHandler(originalValue, replacementString)
         {
             this._applyUserInput(element, replacementString, originalValue, context, false);
diff --git a/Source/devtools/front_end/ModuleManager.js b/Source/devtools/front_end/ModuleManager.js
new file mode 100644
index 0000000..0136c4f
--- /dev/null
+++ b/Source/devtools/front_end/ModuleManager.js
@@ -0,0 +1,387 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+/**
+ * @constructor
+ * @param {!Array.<!WebInspector.ModuleManager.ModuleDescriptor>} descriptors
+ */
+WebInspector.ModuleManager = function(descriptors)
+{
+    /**
+     * @type {!Array.<!WebInspector.ModuleManager.Module>}
+     */
+    this._modules = [];
+    /**
+     * @type {!Object.<string, !WebInspector.ModuleManager.Module>}
+     */
+    this._modulesMap = {};
+    /**
+     * @type {!Array.<!WebInspector.ModuleManager.Extension>}
+     */
+    this._extensions = [];
+
+
+    /**
+     * @type {!Object.<string, !WebInspector.ModuleManager.ModuleDescriptor>}
+     */
+    this._descriptorsMap = {};
+    for (var i = 0; i < descriptors.length; ++i)
+        this._descriptorsMap[descriptors[i]["name"]] = descriptors[i];
+}
+
+WebInspector.ModuleManager.prototype = {
+    /**
+     * @param {!Array.<string>} configuration
+     */
+    registerModules: function(configuration)
+    {
+        for (var i = 0; i < configuration.length; ++i)
+            this.registerModule(configuration[i]);
+    },
+
+    /**
+     * @param {string} moduleName
+     */
+    registerModule: function(moduleName)
+    {
+        if (!this._descriptorsMap[moduleName])
+            throw new Error("Module is not defined: " + moduleName + " " + new Error().stack);
+        var module = new WebInspector.ModuleManager.Module(this, this._descriptorsMap[moduleName]);
+        this._modules.push(module);
+        this._modulesMap[moduleName] = module;
+    },
+
+    /**
+     * @param {string} moduleName
+     */
+    loadModule: function(moduleName)
+    {
+        this._modulesMap[moduleName]._load();
+    },
+
+    /**
+     * @param {string|!Function} type
+     * @param {?Object=} context
+     * @return {!Array.<!WebInspector.ModuleManager.Extension>}
+     */
+    extensions: function(type, context)
+    {
+        /**
+         * @param {!WebInspector.ModuleManager.Extension} extension
+         * @return {boolean}
+         */
+        function filter(extension)
+        {
+            if (extension._type !== type && extension._typeClass !== type)
+                return false;
+            return !context || extension.isApplicable(context);
+        }
+        return this._extensions.filter(filter);
+    },
+
+    /**
+     * @param {string|!Function} type
+     * @param {?Object=} context
+     * @return {?WebInspector.ModuleManager.Extension}
+     */
+    extension: function(type, context)
+    {
+        return this.extensions(type, context)[0] || null;
+    },
+
+    /**
+     * @param {string|!Function} type
+     * @param {?Object=} context
+     * @return {!Array.<!Object>}
+     */
+    instances: function(type, context)
+    {
+        /**
+         * @param {!WebInspector.ModuleManager.Extension} extension
+         * @return {?Object}
+         */
+        function instantiate(extension)
+        {
+            return extension.instance();
+        }
+        return this.extensions(type, context).filter(instantiate).map(instantiate);
+    },
+
+    /**
+     * @param {string|!Function} type
+     * @return {?Object}
+     */
+    instance: function(type, context)
+    {
+        var extension = this.extension(type, context);
+        return extension ? extension.instance() : null;
+    },
+
+    /**
+     * @param {string|!Function} type
+     * @param {string} nameProperty
+     * @param {string} orderProperty
+     * @return {function(string, string):number}
+     */
+    orderComparator: function(type, nameProperty, orderProperty)
+    {
+        var extensions = this.extensions(type);
+        var orderForName = {};
+        for (var i = 0; i < extensions.length; ++i) {
+            var descriptor = extensions[i].descriptor();
+            orderForName[descriptor[nameProperty]] = descriptor[orderProperty];
+        }
+
+        /**
+         * @param {string} name1
+         * @param {string} name2
+         * @return {number}
+         */
+        function result(name1, name2)
+        {
+            if (name1 in orderForName && name2 in orderForName)
+                return orderForName[name1] - orderForName[name2];
+            if (name1 in orderForName)
+                return -1;
+            if (name2 in orderForName)
+                return 1;
+            return name1.compareTo(name2);
+        }
+        return result;
+    }
+}
+
+/**
+ * @constructor
+ */
+WebInspector.ModuleManager.ModuleDescriptor = function()
+{
+    /**
+     * @type {string}
+     */
+    this.name;
+
+    /**
+     * @type {!Array.<!WebInspector.ModuleManager.ExtensionDescriptor>}
+     */
+    this.extensions;
+
+    /**
+     * @type {!Array.<string>}
+     */
+    this.scripts;
+}
+
+/**
+ * @constructor
+ */
+WebInspector.ModuleManager.ExtensionDescriptor = function()
+{
+    /**
+     * @type {string}
+     */
+    this.type;
+
+    /**
+     * @type {string|undefined}
+     */
+    this.className;
+
+    /**
+     * @type {!Array.<string>|undefined}
+     */
+    this.contextTypes;
+}
+
+/**
+ * @constructor
+ * @param {!WebInspector.ModuleManager} manager
+ * @param {!WebInspector.ModuleManager.ModuleDescriptor} descriptor
+ */
+WebInspector.ModuleManager.Module = function(manager, descriptor)
+{
+    this._manager = manager;
+    this._descriptor = descriptor;
+    this._name = descriptor.name;
+    var extensions = /** @type {?Array.<!WebInspector.ModuleManager.ExtensionDescriptor>}*/ (descriptor.extensions);
+    for (var i = 0; extensions && i < extensions.length; ++i)
+        this._manager._extensions.push(new WebInspector.ModuleManager.Extension(this, extensions[i]));
+    this._loaded = false;
+}
+
+WebInspector.ModuleManager.Module.prototype = {
+    /**
+     * @return {string}
+     */
+    name: function()
+    {
+        return this._name;
+    },
+
+    _load: function()
+    {
+        if (this._loaded)
+            return;
+
+        if (this._isLoading) {
+            var oldStackTraceLimit = Error.stackTraceLimit;
+            Error.stackTraceLimit = 50;
+            console.assert(false, "Module " + this._name + " is loaded from itself: " + new Error().stack);
+            Error.stackTraceLimit = oldStackTraceLimit;
+            return;
+        }
+
+        this._isLoading = true;
+        var scripts = this._descriptor.scripts;
+        for (var i = 0; scripts && i < scripts.length; ++i)
+            loadScript(scripts[i]);
+        this._isLoading = false;
+        this._loaded = true;
+    }
+}
+
+/**
+ * @constructor
+ * @param {!WebInspector.ModuleManager.Module} module
+ * @param {!WebInspector.ModuleManager.ExtensionDescriptor} descriptor
+ */
+WebInspector.ModuleManager.Extension = function(module, descriptor)
+{
+    this._module = module;
+    this._descriptor = descriptor;
+
+    this._type = descriptor.type;
+    if (this._type.startsWith("@"))
+        this._typeClass = /** @template T @type function(new:T) */ (window.eval(this._type.substring(1)));
+
+    /**
+     * @type {?string}
+     */
+    this._className = descriptor.className || null;
+}
+
+WebInspector.ModuleManager.Extension.prototype = {
+    /**
+     * @return {!Object}
+     */
+    descriptor: function()
+    {
+        return this._descriptor;
+    },
+
+    /**
+     * @return {!WebInspector.ModuleManager.Module}
+     */
+    module: function()
+    {
+        return this._module;
+    },
+
+    /**
+     * @param {?Object} context
+     * @return {boolean}
+     */
+    isApplicable: function(context)
+    {
+        var contextTypes = /** @type {!Array.<string>|undefined} */ (this._descriptor.contextTypes);
+        if (!contextTypes)
+            return true;
+        for (var i = 0; i < contextTypes.length; ++i) {
+            var contextType = /** @type {!Function} */ (window.eval(contextTypes[i]));
+            if (context instanceof contextType)
+                return true;
+        }
+        return false;
+    },
+
+    /**
+     * @return {?Object}
+     */
+    instance: function()
+    {
+        if (!this._className)
+            return null;
+
+        if (!this._instance) {
+            this._module._load();
+
+            var constructorFunction = window.eval(this._className);
+            if (!(constructorFunction instanceof Function))
+                return null;
+
+            this._instance = new constructorFunction();
+        }
+        return this._instance;
+    }
+}
+
+/**
+ * @interface
+ */
+WebInspector.Renderer = function()
+{
+}
+
+WebInspector.Renderer.prototype = {
+    /**
+     * @param {!Object} object
+     * @return {?Element}
+     */
+    render: function(object) {}
+}
+
+/**
+ * @interface
+ */
+WebInspector.Revealer = function()
+{
+}
+
+/**
+ * @param {?Object} revealable
+ * @param {number=} lineNumber
+ */
+WebInspector.Revealer.reveal = function(revealable, lineNumber)
+{
+    if (!revealable)
+        return;
+    var revealer = WebInspector.moduleManager.instance(WebInspector.Revealer, revealable);
+    if (revealer)
+        revealer.reveal(revealable, lineNumber);
+}
+
+WebInspector.Revealer.prototype = {
+    /**
+     * @param {!Object} object
+     */
+    reveal: function(object) {}
+}
+
+WebInspector.moduleManager = new WebInspector.ModuleManager(allDescriptors);
diff --git a/Source/devtools/front_end/NavigatorOverlayController.js b/Source/devtools/front_end/NavigatorOverlayController.js
deleted file mode 100644
index cdc17b8..0000000
--- a/Source/devtools/front_end/NavigatorOverlayController.js
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2012 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:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
- * OR ITS 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.
- */
-
-/**
- * @constructor
- * @param {!WebInspector.SidebarView} parentSidebarView
- * @param {!WebInspector.View} navigatorView
- * @param {!WebInspector.View} editorView
- */
-WebInspector.NavigatorOverlayController = function(parentSidebarView, navigatorView, editorView)
-{
-    this._parentSidebarView = parentSidebarView;
-    this._navigatorView = navigatorView;
-    this._editorView = editorView;
-
-    this._navigatorSidebarResizeWidgetElement = this._navigatorView.element.createChild("div", "resizer-widget");
-    this._parentSidebarView.installResizer(this._navigatorSidebarResizeWidgetElement);
-
-    this._navigatorShowHideButton = new WebInspector.StatusBarButton(WebInspector.UIString("Hide navigator"), "left-sidebar-show-hide-button scripts-navigator-show-hide-button", 3);
-    this._navigatorShowHideButton.state = "left";
-    this._navigatorShowHideButton.addEventListener("click", this._toggleNavigator, this);
-    parentSidebarView.mainElement.appendChild(this._navigatorShowHideButton.element);
-
-    WebInspector.settings.navigatorHidden = WebInspector.settings.createSetting("navigatorHidden", true);
-    if (WebInspector.settings.navigatorHidden.get())
-        this._toggleNavigator();
-}
-
-WebInspector.NavigatorOverlayController.prototype = {
-    wasShown: function()
-    {
-        window.setTimeout(this._maybeShowNavigatorOverlay.bind(this), 0);
-    },
-
-    _maybeShowNavigatorOverlay: function()
-    {
-        if (WebInspector.settings.navigatorHidden.get() && !WebInspector.settings.navigatorWasOnceHidden.get())
-            this.showNavigatorOverlay();
-    },
-
-    _toggleNavigator: function()
-    {
-        if (this._navigatorShowHideButton.state === "overlay")
-            this._pinNavigator();
-        else if (this._navigatorShowHideButton.state === "right")
-            this.showNavigatorOverlay();
-        else
-            this._hidePinnedNavigator();
-    },
-
-    _hidePinnedNavigator: function()
-    {
-        this._navigatorShowHideButton.state = "right";
-        this._navigatorShowHideButton.title = WebInspector.UIString("Show navigator");
-        this._parentSidebarView.element.appendChild(this._navigatorShowHideButton.element);
-
-        this._editorView.element.classList.add("navigator-hidden");
-        this._navigatorSidebarResizeWidgetElement.classList.add("hidden");
-
-        this._parentSidebarView.hideSidebarElement();
-        this._navigatorView.detach();
-        this._editorView.focus();
-
-        WebInspector.settings.navigatorWasOnceHidden.set(true);
-        WebInspector.settings.navigatorHidden.set(true);
-    },
-
-    _pinNavigator: function()
-    {
-        this._navigatorShowHideButton.state = "left";
-        this._navigatorShowHideButton.title = WebInspector.UIString("Hide navigator");
-
-        this._editorView.element.classList.remove("navigator-hidden");
-        this._navigatorSidebarResizeWidgetElement.classList.remove("hidden");
-        this._editorView.element.appendChild(this._navigatorShowHideButton.element);
-
-        this._innerHideNavigatorOverlay();
-        this._parentSidebarView.showSidebarElement();
-        this._navigatorView.show(this._parentSidebarView.sidebarElement);
-        this._navigatorView.focus();
-        WebInspector.settings.navigatorHidden.set(false);
-    },
-
-    showNavigatorOverlay: function()
-    {
-        if (this._navigatorShowHideButton.state === "overlay")
-            return;
-
-        this._navigatorShowHideButton.state = "overlay";
-        this._navigatorShowHideButton.title = WebInspector.UIString("Pin navigator");
-
-        this._sidebarOverlay = new WebInspector.SidebarOverlay(this._navigatorView, "scriptsPanelNavigatorOverlayWidth", Preferences.minScriptsSidebarWidth);
-        this._boundKeyDown = this._keyDown.bind(this);
-        this._sidebarOverlay.element.addEventListener("keydown", this._boundKeyDown, false);
-
-        var navigatorOverlayResizeWidgetElement = document.createElement("div");
-        navigatorOverlayResizeWidgetElement.classList.add("resizer-widget");
-        this._sidebarOverlay.resizerWidgetElement = navigatorOverlayResizeWidgetElement;
-
-        this._navigatorView.element.appendChild(this._navigatorShowHideButton.element);
-        this._boundContainingElementFocused = this._containingElementFocused.bind(this);
-        this._parentSidebarView.element.addEventListener("mousedown", this._boundContainingElementFocused, false);
-
-        this._sidebarOverlay.show(this._parentSidebarView.element);
-        this._navigatorView.focus();
-    },
-
-    _keyDown: function(event)
-    {
-        if (event.handled)
-            return;
-
-        if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code) {
-            this.hideNavigatorOverlay();
-            event.consume(true);
-        }
-    },
-
-    hideNavigatorOverlay: function()
-    {
-        if (this._navigatorShowHideButton.state !== "overlay")
-            return;
-
-        this._navigatorShowHideButton.state = "right";
-        this._navigatorShowHideButton.title = WebInspector.UIString("Show navigator");
-        this._parentSidebarView.element.appendChild(this._navigatorShowHideButton.element);
-
-        this._innerHideNavigatorOverlay();
-        this._editorView.focus();
-    },
-
-    _innerHideNavigatorOverlay: function()
-    {
-        this._parentSidebarView.element.removeEventListener("mousedown", this._boundContainingElementFocused, false);
-        this._sidebarOverlay.element.removeEventListener("keydown", this._boundKeyDown, false);
-        this._sidebarOverlay.hide();
-    },
-
-    _containingElementFocused: function(event)
-    {
-        if (!event.target.isSelfOrDescendant(this._sidebarOverlay.element))
-            this.hideNavigatorOverlay();
-    },
-    
-    isNavigatorPinned: function()
-    {
-        return this._navigatorShowHideButton.state === "left";
-    },
-    
-    isNavigatorHidden: function()
-    {
-        return this._navigatorShowHideButton.state === "right";
-    }
-}
diff --git a/Source/devtools/front_end/NavigatorView.js b/Source/devtools/front_end/NavigatorView.js
index da6976b..96c5875 100644
--- a/Source/devtools/front_end/NavigatorView.js
+++ b/Source/devtools/front_end/NavigatorView.js
@@ -44,7 +44,6 @@
     scriptsOutlineElement.classList.add("navigator");
     scriptsOutlineElement.appendChild(scriptsTreeElement);
 
-    this.element.classList.add("fill");
     this.element.classList.add("navigator-container");
     this.element.appendChild(scriptsOutlineElement);
     this.setDefaultFocusedElement(this._scriptsTree.element);
@@ -163,7 +162,7 @@
     {
         var node = this._uiSourceCodeNodes.get(uiSourceCode);
         if (!node)
-            return null;
+            return;
         if (this._scriptsTree.selectedTreeElement)
             this._scriptsTree.selectedTreeElement.deselect();
         this._lastSelectedUISourceCode = uiSourceCode;
@@ -240,7 +239,7 @@
     {
         var node = this._uiSourceCodeNodes.get(uiSourceCode);
         if (!node)
-            return null;
+            return;
         node.rename(callback);
     },
 
@@ -426,6 +425,11 @@
     FileSystem: "FileSystem"
 }
 
+/**
+ * @param {!TreeElement} treeElement1
+ * @param {!TreeElement} treeElement2
+ * @return {number}
+ */
 WebInspector.NavigatorTreeOutline._treeElementsCompare = function compare(treeElement1, treeElement2)
 {
     // Insert in the alphabetical order, first domains, then folders, then scripts.
@@ -676,6 +680,7 @@
             this._uiSourceCode.requestContent(callback.bind(this));
         /**
          * @param {?string} content
+         * @this {WebInspector.NavigatorSourceTreeElement}
          */
         function callback(content)
         {
@@ -700,6 +705,9 @@
         }
         setTimeout(rename.bind(this), 300);
 
+        /**
+         * @this {WebInspector.NavigatorSourceTreeElement}
+         */
         function rename()
         {
             if (this._shouldRenameOnMouseDown())
@@ -714,6 +722,9 @@
         return true;
     },
 
+    /**
+     * @return {boolean}
+     */
     onspace: function()
     {
         this._navigatorView._sourceSelected(this.uiSourceCode, true);
@@ -730,6 +741,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     ondblclick: function(event)
     {
@@ -740,6 +752,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onenter: function()
     {
@@ -749,6 +762,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     ondelete: function()
     {
@@ -783,7 +797,7 @@
     /**
      * @return {!TreeElement}
      */
-    treeElement: function() { },
+    treeElement: function() { throw "Not implemented"; },
 
     dispose: function() { },
 
@@ -856,11 +870,11 @@
 
     /**
      * @param {string} id
-     * @return {!WebInspector.NavigatorTreeNode}
+     * @return {?WebInspector.NavigatorTreeNode}
      */
     child: function(id)
     {
-        return this._children.get(id);
+        return this._children.get(id) || null;
     },
 
     /**
@@ -1038,7 +1052,7 @@
         this.parent.treeElement().expand();
         this._treeElement.reveal();
         if (select)
-            this._treeElement.select();
+            this._treeElement.select(true);
     },
 
     /**
@@ -1053,6 +1067,12 @@
         var treeOutlineElement = this._treeElement.treeOutline.element;
         WebInspector.markBeingEdited(treeOutlineElement, true);
 
+        /**
+         * @param {!Element} element
+         * @param {string} newTitle
+         * @param {string} oldTitle
+         * @this {WebInspector.NavigatorUISourceCodeTreeNode}
+         */
         function commitHandler(element, newTitle, oldTitle)
         {
             if (newTitle !== oldTitle) {
@@ -1063,6 +1083,10 @@
             afterEditing.call(this, true);
         }
 
+        /**
+         * @param {boolean} success
+         * @this {WebInspector.NavigatorUISourceCodeTreeNode}
+         */
         function renameCallback(success)
         {
             if (!success) {
@@ -1074,6 +1098,9 @@
             afterEditing.call(this, true);
         }
 
+        /**
+         * @this {WebInspector.NavigatorUISourceCodeTreeNode}
+         */
         function cancelHandler()
         {
             afterEditing.call(this, false);
@@ -1081,6 +1108,7 @@
 
         /**
          * @param {boolean} committed
+         * @this {WebInspector.NavigatorUISourceCodeTreeNode}
          */
         function afterEditing(committed)
         {
@@ -1091,9 +1119,9 @@
                 callback(committed);
         }
 
-        var editingConfig = new WebInspector.EditingConfig(commitHandler.bind(this), cancelHandler.bind(this));
+        var editingConfig = new WebInspector.InplaceEditor.Config(commitHandler.bind(this), cancelHandler.bind(this));
         this.updateTitle(true);
-        WebInspector.startEditing(this._treeElement.titleElement, editingConfig);
+        WebInspector.InplaceEditor.startEditing(this._treeElement.titleElement, editingConfig);
         window.getSelection().setBaseAndExtent(this._treeElement.titleElement, 0, this._treeElement.titleElement, 1);
     },
 
diff --git a/Source/devtools/front_end/NetworkItemView.js b/Source/devtools/front_end/NetworkItemView.js
index e98fafb..2b4f9b5 100644
--- a/Source/devtools/front_end/NetworkItemView.js
+++ b/Source/devtools/front_end/NetworkItemView.js
@@ -123,11 +123,17 @@
 }
 
 WebInspector.RequestContentView.prototype = {
+    /**
+     * @return {boolean}
+     */
     hasContent: function()
     {
         return true;
     },
 
+    /**
+     * @return {!WebInspector.View}
+     */
     get innerView()
     {
         return this._innerView;
@@ -151,6 +157,7 @@
 
         /**
          * @param {?string} content
+         * @this {WebInspector.RequestContentView}
          */
         function callback(content)
         {
@@ -168,6 +175,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     canHighlightPosition: function()
     {
diff --git a/Source/devtools/front_end/NetworkLog.js b/Source/devtools/front_end/NetworkLog.js
index 1867a29..f856f5c 100644
--- a/Source/devtools/front_end/NetworkLog.js
+++ b/Source/devtools/front_end/NetworkLog.js
@@ -134,9 +134,9 @@
 }
 
 /**
- * @type {?WebInspector.NetworkLog}
+ * @type {!WebInspector.NetworkLog}
  */
-WebInspector.networkLog = null;
+WebInspector.networkLog;
 
 /**
  * @constructor
diff --git a/Source/devtools/front_end/NetworkManager.js b/Source/devtools/front_end/NetworkManager.js
index d7cbd62..a4f8c01 100644
--- a/Source/devtools/front_end/NetworkManager.js
+++ b/Source/devtools/front_end/NetworkManager.js
@@ -170,6 +170,8 @@
         networkRequest.statusCode = response.status;
         networkRequest.statusText = response.statusText;
         networkRequest.responseHeaders = this._headersMapToHeadersArray(response.headers);
+        if (response.encodedDataLength >= 0)
+            networkRequest.setTransferSize(response.encodedDataLength);
         if (response.headersText)
             networkRequest.responseHeadersText = response.headersText;
         if (response.requestHeaders) {
@@ -179,6 +181,8 @@
 
         networkRequest.connectionReused = response.connectionReused;
         networkRequest.connectionId = response.connectionId;
+        if (response.remoteIPAddress)
+            networkRequest.setRemoteAddress(response.remoteIPAddress, response.remotePort || -1);
 
         if (response.fromDiskCache)
             networkRequest.cached = true;
@@ -339,13 +343,14 @@
     /**
      * @param {!NetworkAgent.RequestId} requestId
      * @param {!NetworkAgent.Timestamp} finishTime
+     * @param {number} encodedDataLength
      */
-    loadingFinished: function(requestId, finishTime)
+    loadingFinished: function(requestId, finishTime, encodedDataLength)
     {
         var networkRequest = this._inflightRequestsById[requestId];
         if (!networkRequest)
             return;
-        this._finishNetworkRequest(networkRequest, finishTime);
+        this._finishNetworkRequest(networkRequest, finishTime, encodedDataLength);
     },
 
     /**
@@ -363,7 +368,7 @@
         networkRequest.failed = true;
         networkRequest.canceled = canceled;
         networkRequest.localizedFailDescription = localizedDescription;
-        this._finishNetworkRequest(networkRequest, time);
+        this._finishNetworkRequest(networkRequest, time, -1);
     },
 
     /**
@@ -474,7 +479,7 @@
         var networkRequest = this._inflightRequestsById[requestId];
         if (!networkRequest)
             return;
-        this._finishNetworkRequest(networkRequest, time);
+        this._finishNetworkRequest(networkRequest, time, -1);
     },
 
     /**
@@ -491,7 +496,7 @@
         delete originalNetworkRequest.redirects;
         if (previousRedirects.length > 0)
             originalNetworkRequest.redirectSource = previousRedirects[previousRedirects.length - 1];
-        this._finishNetworkRequest(originalNetworkRequest, time);
+        this._finishNetworkRequest(originalNetworkRequest, time, -1);
         var newNetworkRequest = this._createNetworkRequest(requestId, originalNetworkRequest.frameId, originalNetworkRequest.loaderId,
              redirectURL, originalNetworkRequest.documentURL, originalNetworkRequest.initiator);
         newNetworkRequest.redirects = previousRedirects.concat(originalNetworkRequest);
@@ -519,11 +524,14 @@
     /**
      * @param {!WebInspector.NetworkRequest} networkRequest
      * @param {!NetworkAgent.Timestamp} finishTime
+     * @param {number} encodedDataLength
      */
-    _finishNetworkRequest: function(networkRequest, finishTime)
+    _finishNetworkRequest: function(networkRequest, finishTime, encodedDataLength)
     {
         networkRequest.endTime = finishTime;
         networkRequest.finished = true;
+        if (encodedDataLength >= 0)
+            networkRequest.setTransferSize(encodedDataLength);
         this._dispatchEventToListeners(WebInspector.NetworkManager.EventTypes.RequestFinished, networkRequest);
         delete this._inflightRequestsById[networkRequest.requestId];
         delete this._inflightRequestsByURL[networkRequest.url];
@@ -555,6 +563,6 @@
 }
 
 /**
- * @type {?WebInspector.NetworkManager}
+ * @type {!WebInspector.NetworkManager}
  */
-WebInspector.networkManager = null;
+WebInspector.networkManager;
diff --git a/Source/devtools/front_end/NetworkPanel.js b/Source/devtools/front_end/NetworkPanel.js
index dde26e0..2651e26 100644
--- a/Source/devtools/front_end/NetworkPanel.js
+++ b/Source/devtools/front_end/NetworkPanel.js
@@ -49,7 +49,6 @@
 WebInspector.NetworkLogView = function(filterBar, coulmnsVisibilitySetting)
 {
     WebInspector.View.call(this);
-    this.element.classList.add("vbox", "fill");
     this.registerRequiredCSS("networkLogView.css");
     this.registerRequiredCSS("filter.css");
 
@@ -93,7 +92,7 @@
 WebInspector.NetworkLogView.HTTPSchemas = {"http": true, "https": true, "ws": true, "wss": true};
 WebInspector.NetworkLogView._responseHeaderColumns = ["Cache-Control", "Connection", "Content-Encoding", "Content-Length", "ETag", "Keep-Alive", "Last-Modified", "Server", "Vary"];
 WebInspector.NetworkLogView._defaultColumnsVisibility = {
-    method: true, status: true, scheme: false, domain: false, type: true, initiator: true, cookies: false, setCookies: false, size: true, time: true,
+    method: true, status: true, scheme: false, domain: false, remoteAddress: false, type: true, initiator: true, cookies: false, setCookies: false, size: true, time: true,
     "Cache-Control": false, "Connection": false, "Content-Encoding": false, "Content-Length": false, "ETag": false, "Keep-Alive": false, "Last-Modified": false, "Server": false, "Vary": false
 };
 WebInspector.NetworkLogView._defaultRefreshDelay = 500;
@@ -163,6 +162,9 @@
         this._allowPopover = flag;
     },
 
+    /**
+     * @return {!Array.<!Element>}
+     */
     elementsToRestoreScrollPositionsFor: function()
     {
         if (!this._dataGrid) // Not initialized yet.
@@ -186,7 +188,7 @@
     {
         var columns = [];
         columns.push({
-            id: "name", 
+            id: "name",
             titleDOMFragment: this._makeHeaderFragment(WebInspector.UIString("Name"), WebInspector.UIString("Path")),
             title: WebInspector.UIString("Name"),
             sortable: true,
@@ -224,6 +226,14 @@
         });
 
         columns.push({
+            id: "remoteAddress",
+            title: WebInspector.UIString("Remote Address"),
+            sortable: true,
+            weight: 10,
+            align: WebInspector.DataGrid.Align.Right
+        });
+
+        columns.push({
             id: "type",
             title: WebInspector.UIString("Type"),
             sortable: true,
@@ -367,6 +377,7 @@
         this._sortingFunctions.status = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "statusCode", false);
         this._sortingFunctions.scheme = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "scheme", false);
         this._sortingFunctions.domain = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "domain", false);
+        this._sortingFunctions.remoteAddress = WebInspector.NetworkDataGridNode.RemoteAddressComparator;
         this._sortingFunctions.type = WebInspector.NetworkDataGridNode.RequestPropertyComparator.bind(null, "mimeType", false);
         this._sortingFunctions.initiator = WebInspector.NetworkDataGridNode.InitiatorComparator;
         this._sortingFunctions.cookies = WebInspector.NetworkDataGridNode.RequestCookiesCountComparator;
@@ -709,7 +720,7 @@
             this._dataGrid.scrollToLastRow();
     },
 
-    _onRecordButtonClicked: function(e)
+    _onRecordButtonClicked: function()
     {
         if (!this._recordButton.toggled)
             this._reset();
@@ -748,11 +759,6 @@
         return this._requests;
     },
 
-    requestById: function(id)
-    {
-        return this._requestsById[id];
-    },
-
     _onRequestStarted: function(event)
     {
         if (this._recordButton.toggled)
@@ -1002,6 +1008,8 @@
                 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Copy request headers" : "Copy Request Headers"), this._copyRequestHeaders.bind(this, request));
             if (request.responseHeadersText)
                 contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Copy response headers" : "Copy Response Headers"), this._copyResponseHeaders.bind(this, request));
+            if (request.finished)
+                contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Copy response" : "Copy Response"), this._copyResponse.bind(this, request));
             contextMenu.appendItem(WebInspector.UIString("Copy as cURL"), this._copyCurlCommand.bind(this, request));
         }
         contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Copy all as HAR" : "Copy All as HAR"), this._copyAll.bind(this));
@@ -1027,10 +1035,16 @@
         NetworkAgent.replayXHR(requestId);
     },
 
+    _harRequests: function()
+    {
+        var httpRequests = this._requests.filter(WebInspector.NetworkLogView.HTTPRequestsFilter);
+        return httpRequests.filter(WebInspector.NetworkLogView.NonSourceMapRequestsFilter);
+    },
+
     _copyAll: function()
     {
         var harArchive = {
-            log: (new WebInspector.HARLog(this._requests.filter(WebInspector.NetworkLogView.HTTPRequestsFilter))).build()
+            log: (new WebInspector.HARLog(this._harRequests())).build()
         };
         InspectorFrontendHost.copyText(JSON.stringify(harArchive, null, 2));
     },
@@ -1045,6 +1059,17 @@
         InspectorFrontendHost.copyText(request.requestHeadersText());
     },
 
+    _copyResponse: function(request)
+    {
+        function callback(content)
+        {
+            if (request.contentEncoded)
+                content = request.asDataURL();
+            InspectorFrontendHost.copyText(content || "");
+        }
+        request.requestContent(callback);
+    },
+
     _copyResponseHeaders: function(request)
     {
         InspectorFrontendHost.copyText(request.responseHeadersText);
@@ -1066,6 +1091,7 @@
 
         /**
          * @param {boolean} accepted
+         * @this {WebInspector.NetworkLogView}
          */
         function openCallback(accepted)
         {
@@ -1074,7 +1100,7 @@
             var progressIndicator = new WebInspector.ProgressIndicator();
             this._progressBarContainer.appendChild(progressIndicator.element);
             var harWriter = new WebInspector.HARWriter();
-            harWriter.write(stream, this._requests.filter(WebInspector.NetworkLogView.HTTPRequestsFilter), progressIndicator);
+            harWriter.write(stream, this._harRequests(), progressIndicator);
         }
     },
 
@@ -1122,6 +1148,11 @@
                 row.enableStyleClass("offscreen", !rowIsVisible);
                 row.rowIsVisible = rowIsVisible;
             }
+            var rowIsOdd = !!(unfilteredRowIndex & 1);
+            if (rowIsOdd !== row.rowIsOdd) {
+                row.enableStyleClass("odd", rowIsOdd);
+                row.rowIsOdd = rowIsOdd;
+            }
             unfilteredRowIndex++;
         }
     },
@@ -1213,7 +1244,7 @@
      */
     _highlightNthMatchedRequestForSearch: function(matchedRequestIndex, reveal)
     {
-        var request = this.requestById(this._matchedRequests[matchedRequestIndex]);
+        var request = this._requestsById[this._matchedRequests[matchedRequestIndex]];
         if (!request)
             return;
         this._removeAllHighlights();
@@ -1336,7 +1367,7 @@
 
     _highlightNode: function(node)
     {
-        node.element.classList.add("highlighted-row");
+        WebInspector.runCSSAnimationOnce(node.element, "highlighted-row");
         this._highlightedNode = node;
     },
 
@@ -1450,6 +1481,14 @@
     return request.parsedURL.isValid && (request.scheme in WebInspector.NetworkLogView.HTTPSchemas);
 }
 
+/**
+ * @param {!WebInspector.NetworkRequest} request
+ * @return {boolean}
+ */
+WebInspector.NetworkLogView.NonSourceMapRequestsFilter = function(request)
+{
+    return !WebInspector.SourceMap.hasSourceMapRequestHeader(request);
+}
 
 WebInspector.NetworkLogView.EventTypes = {
     ViewCleared: "ViewCleared",
@@ -1471,8 +1510,6 @@
     this.registerRequiredCSS("networkPanel.css");
     this._injectStyles();
 
-    this.element.classList.add("vbox");
-
     this._panelStatusBarElement = this.element.createChild("div", "panel-status-bar");
     this._filterBar = new WebInspector.FilterBar();
     this._filtersContainer = this.element.createChild("div", "network-filters-header hidden");
@@ -1483,9 +1520,9 @@
     this._searchableView.show(this.element);
     this._contentsElement = this._searchableView.element;
 
-    this.createSidebarView(this._contentsElement);
-    this.splitView.element.classList.remove("fill");
-    this.splitView.hideMainElement();
+    this._splitView = new WebInspector.SplitView(true, false, "networkSidebarWidth");
+    this._splitView.show(this._contentsElement);
+    this._splitView.hideMain();
 
     var defaultColumnsVisibility = WebInspector.NetworkLogView._defaultColumnsVisibility;
     var networkLogColumnsVisibilitySetting = WebInspector.settings.createSetting("networkLogColumnsVisibility", defaultColumnsVisibility);
@@ -1496,13 +1533,14 @@
     networkLogColumnsVisibilitySetting.set(columnsVisibility);
 
     this._networkLogView = new WebInspector.NetworkLogView(this._filterBar, networkLogColumnsVisibilitySetting);
-    this._networkLogView.show(this.sidebarElement);
+    this._networkLogView.show(this._splitView.sidebarElement());
 
-    this._viewsContainerElement = this.splitView.mainElement;
+    var viewsContainerView = new WebInspector.View();
+    this._viewsContainerElement = viewsContainerView.element;
     this._viewsContainerElement.id = "network-views";
-    this._viewsContainerElement.classList.add("hidden");
     if (!this._networkLogView.useLargeRows)
         this._viewsContainerElement.classList.add("small");
+    viewsContainerView.show(this._splitView.mainElement());
 
     this._networkLogView.addEventListener(WebInspector.NetworkLogView.EventTypes.ViewCleared, this._onViewCleared, this);
     this._networkLogView.addEventListener(WebInspector.NetworkLogView.EventTypes.RowSizeChanged, this._onRowSizeChanged, this);
@@ -1518,6 +1556,9 @@
     for (var i = 0; i < this._networkLogView.statusBarItems.length; ++i)
         this._panelStatusBarElement.appendChild(this._networkLogView.statusBarItems[i]);
 
+    /**
+     * @this {WebInspector.NetworkPanel}
+     */
     function viewGetter()
     {
         return this.visibleView;
@@ -1533,6 +1574,9 @@
         this.element.enableStyleClass("filters-toggled", toggled);
     },
 
+    /**
+     * @return {!Array.<!Element>}
+     */
     elementsToRestoreScrollPositionsFor: function()
     {
         return this._networkLogView.elementsToRestoreScrollPositionsFor();
@@ -1573,30 +1617,9 @@
         return this._networkLogView.requests;
     },
 
-    requestById: function(id)
-    {
-        return this._networkLogView.requestById(id);
-    },
-
-    _requestByAnchor: function(anchor)
-    {
-        return anchor.requestId ? this.requestById(anchor.requestId) : this._networkLogView._requestsByURL[anchor.href];
-    },
-
     /**
-     * @param {!Element} anchor
-     * @return {boolean}
+     * @param {!WebInspector.NetworkRequest} request
      */
-    showAnchorLocation: function(anchor)
-    {
-        var request = this._requestByAnchor(anchor);
-        if (!request)
-            return false;
-        this.revealAndHighlightRequest(request)
-        WebInspector.inspectorView.setCurrentPanel(this);
-        return true;
-    },
-
     revealAndHighlightRequest: function(request)
     {
         this._toggleGridMode();
@@ -1664,7 +1687,7 @@
         if (this._viewingRequestMode) {
             this._viewingRequestMode = false;
             this.element.classList.remove("viewing-resource");
-            this.splitView.hideMainElement();
+            this._splitView.hideMain();
         }
 
         this._networkLogView.switchToDetailedView();
@@ -1679,7 +1702,7 @@
         this._viewingRequestMode = true;
 
         this.element.classList.add("viewing-resource");
-        this.splitView.showMainElement();
+        this._splitView.showBoth();
         this._networkLogView.allowPopover = false;
         this._networkLogView._allowRequestSelection = true;
         this._networkLogView.switchToBriefView();
@@ -1709,18 +1732,25 @@
         this._networkLogView.searchCanceled();
     },
 
-    /** 
+    /**
      * @param {!WebInspector.ContextMenu} contextMenu
      * @param {!Object} target
+     * @this {WebInspector.NetworkPanel}
      */
     appendApplicableItems: function(event, contextMenu, target)
     {
+        /**
+         * @this {WebInspector.NetworkPanel}
+         */
         function reveal(request)
         {
             WebInspector.inspectorView.setCurrentPanel(this);
             this.revealAndHighlightRequest(request);
         }
 
+        /**
+         * @this {WebInspector.NetworkPanel}
+         */
         function appendRevealItem(request)
         {
             var revealText = WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Reveal in Network panel" : "Reveal in Network Panel");
@@ -1775,6 +1805,44 @@
 
 /**
  * @constructor
+ * @implements {WebInspector.ContextMenu.Provider}
+ */
+WebInspector.NetworkPanel.ContextMenuProvider = function()
+{
+}
+
+WebInspector.NetworkPanel.ContextMenuProvider.prototype = {
+    /**
+     * @param {!WebInspector.ContextMenu} contextMenu
+     * @param {!Object} target
+     */
+    appendApplicableItems: function(event, contextMenu, target)
+    {
+        WebInspector.panel("network").appendApplicableItems(event, contextMenu, target);
+    }
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.Revealer}
+ */
+WebInspector.NetworkPanel.RequestRevealer = function()
+{
+}
+
+WebInspector.NetworkPanel.RequestRevealer.prototype = {
+    /**
+     * @param {!Object} request
+     */
+    reveal: function(request)
+    {
+        if (request instanceof WebInspector.NetworkRequest)
+            /** @type {!WebInspector.NetworkPanel} */ (WebInspector.showPanel("network")).revealAndHighlightRequest(request);
+    }
+}
+
+/**
+ * @constructor
  * @implements {WebInspector.TimelineGrid.Calculator}
  */
 WebInspector.NetworkBaseCalculator = function()
@@ -1782,27 +1850,43 @@
 }
 
 WebInspector.NetworkBaseCalculator.prototype = {
+    /**
+     * @param {number} time
+     * @return {number}
+     */
     computePosition: function(time)
     {
         return (time - this._minimumBoundary) / this.boundarySpan() * this._workingArea;
     },
 
+    /**
+     * @return {!{start: number, middle: number, end: number}}
+     */
     computeBarGraphPercentages: function(item)
     {
         return {start: 0, middle: 0, end: (this._value(item) / this.boundarySpan()) * 100};
     },
 
+    /**
+     * @return {!{left: string, right: string, tooltip: string}}
+     */
     computeBarGraphLabels: function(item)
     {
         const label = this.formatTime(this._value(item));
         return {left: label, right: label, tooltip: label};
     },
 
+    /**
+     * @return {number}
+     */
     boundarySpan: function()
     {
         return this._maximumBoundary - this._minimumBoundary;
     },
 
+    /**
+     * @return {boolean}
+     */
     updateBoundaries: function(item)
     {
         this._minimumBoundary = 0;
@@ -1821,21 +1905,33 @@
         delete this._maximumBoundary;
     },
 
+    /**
+     * @return {number}
+     */
     maximumBoundary: function()
     {
         return this._maximumBoundary;
     },
 
+    /**
+     * @return {number}
+     */
     minimumBoundary: function()
     {
         return this._minimumBoundary;
     },
 
+    /**
+     * @return {number}
+     */
     zeroTime: function()
     {
         return this._minimumBoundary;
     },
 
+    /**
+     * @return {number}
+     */
     _value: function(item)
     {
         return 0;
@@ -1869,6 +1965,10 @@
 }
 
 WebInspector.NetworkTimeCalculator.prototype = {
+    /**
+     * @param {!WebInspector.NetworkRequest} request
+     * @return {!{start: number, middle: number, end: number}}
+     */
     computeBarGraphPercentages: function(request)
     {
         if (request.startTime !== -1)
@@ -1895,6 +1995,9 @@
         return {start: start, middle: middle, end: end};
     },
 
+    /**
+     * @return {number}
+     */
     computePercentageFromEventTime: function(eventTime)
     {
         // This function computes a percentage in terms of the total loading time
@@ -1906,6 +2009,9 @@
         return 0;
     },
 
+    /**
+     * @return {boolean}
+     */
     updateBoundariesForEventTime: function(eventTime)
     {
         if (eventTime === -1 || this.startAtZero)
@@ -1918,6 +2024,9 @@
         return false;
     },
 
+    /**
+     * @return {!{left: string, right: string, tooltip: (string|undefined)}}
+     */
     computeBarGraphLabels: function(request)
     {
         var rightLabel = "";
@@ -1946,6 +2055,9 @@
         return {left: leftLabel, right: rightLabel, tooltip: tooltip};
     },
 
+    /**
+     * @return {boolean}
+     */
     updateBoundaries: function(request)
     {
         var didChange = false;
@@ -1970,6 +2082,9 @@
         return didChange;
     },
 
+    /**
+     * @return {string}
+     */
     formatTime: function(value)
     {
         return Number.secondsToString(value);
@@ -1998,6 +2113,10 @@
 }
 
 WebInspector.NetworkTransferTimeCalculator.prototype = {
+    /**
+     * @param {number} value
+     * @return {string}
+     */
     formatTime: function(value)
     {
         return Number.secondsToString(value);
@@ -2026,6 +2145,10 @@
 }
 
 WebInspector.NetworkTransferDurationCalculator.prototype = {
+    /**
+     * @param {number} value
+     * @return {string}
+     */
     formatTime: function(value)
     {
         return Number.secondsToString(value);
@@ -2064,6 +2187,7 @@
         this._statusCell = this._createDivInTD("status");
         this._schemeCell = this._createDivInTD("scheme");
         this._domainCell = this._createDivInTD("domain");
+        this._remoteAddressCell = this._createDivInTD("remoteAddress");
         this._typeCell = this._createDivInTD("type");
         this._initiatorCell = this._createDivInTD("initiator");
         this._cookiesCell = this._createDivInTD("cookies");
@@ -2087,6 +2211,9 @@
         this._linkifier.reset();
     },
 
+    /**
+     * @return {boolean}
+     */
     isFilteredOut: function()
     {
         return !!this._parentView._filteredOutRequests.get(this._request);
@@ -2176,6 +2303,7 @@
         this._refreshStatusCell();
         this._refreshSchemeCell();
         this._refreshDomainCell();
+        this._refreshRemoteAddressCell();
         this._refreshTypeCell();
         this._refreshInitiatorCell();
         this._refreshCookiesCell();
@@ -2191,11 +2319,19 @@
             this._timelineCell.classList.add("resource-cached");
 
         this._element.classList.add("network-item");
-        this._element.enableStyleClass("network-error-row", this._request.failed || (this._request.statusCode >= 400));
+        this._element.enableStyleClass("network-error-row", this._isFailed());
         this._updateElementStyleClasses(this._element);
     },
 
     /**
+     * @return {boolean}
+     */
+    _isFailed: function()
+    {
+        return !!this._request.failed || (this._request.statusCode >= 400);
+    },
+
+    /**
      * @param {!Element} element
      */
     _updateElementStyleClasses: function(element)
@@ -2244,37 +2380,30 @@
     _refreshStatusCell: function()
     {
         this._statusCell.removeChildren();
+        this._statusCell.enableStyleClass("network-dim-cell", !this._isFailed() && (this._request.cached || !this._request.statusCode));
 
-        if (this._request.failed) {
-            var failText = this._request.canceled ? WebInspector.UIString("(canceled)") : WebInspector.UIString("(failed)");
+        if (this._request.failed && !this._request.canceled) {
+            var failText = WebInspector.UIString("(failed)");
             if (this._request.localizedFailDescription) {
                 this._statusCell.appendChild(document.createTextNode(failText));
                 this._appendSubtitle(this._statusCell, this._request.localizedFailDescription);
                 this._statusCell.title = failText + " " + this._request.localizedFailDescription;
             } else
                 this._statusCell.setTextAndTitle(failText);
-            this._statusCell.classList.add("network-dim-cell");
-            return;
-        }
-
-        this._statusCell.classList.remove("network-dim-cell");
-
-        if (this._request.statusCode) {
+        } else if (this._request.statusCode) {
             this._statusCell.appendChild(document.createTextNode("" + this._request.statusCode));
             this._appendSubtitle(this._statusCell, this._request.statusText);
             this._statusCell.title = this._request.statusCode + " " + this._request.statusText;
-            if (this._request.cached)
-                this._statusCell.classList.add("network-dim-cell");
+        } else if (this._request.parsedURL.isDataURL()) {
+            this._statusCell.setTextAndTitle(WebInspector.UIString("(data)"));
+        } else if (this._request.isPingRequest()) {
+            this._statusCell.setTextAndTitle(WebInspector.UIString("(ping)"));
+        } else if (this._request.canceled) {
+            this._statusCell.setTextAndTitle(WebInspector.UIString("(canceled)"));
+        } else if (this._request.finished) {
+            this._statusCell.setTextAndTitle(WebInspector.UIString("Finished"));
         } else {
-            if (this._request.parsedURL.isDataURL())
-                this._statusCell.setTextAndTitle(WebInspector.UIString("(data)"));
-            else if (this._request.isPingRequest())
-                this._statusCell.setTextAndTitle(WebInspector.UIString("(ping)"));
-            else if (this._request.finished)
-                this._statusCell.setTextAndTitle(WebInspector.UIString("Finished"));
-            else
-                this._statusCell.setTextAndTitle(WebInspector.UIString("(pending)"));
-            this._statusCell.classList.add("network-dim-cell");
+            this._statusCell.setTextAndTitle(WebInspector.UIString("(pending)"));
         }
     },
 
@@ -2288,6 +2417,11 @@
         this._domainCell.setTextAndTitle(this._request.domain);
     },
 
+    _refreshRemoteAddressCell: function()
+    {
+        this._remoteAddressCell.setTextAndTitle(this._request.remoteAddress());
+    },
+
     _refreshTypeCell: function()
     {
         if (this._request.mimeType) {
@@ -2493,6 +2627,17 @@
     return 0;
 }
 
+WebInspector.NetworkDataGridNode.RemoteAddressComparator = function(a, b)
+{
+    var aRemoteAddress = a._request.remoteAddress();
+    var bRemoteAddress = b._request.remoteAddress();
+    if (aRemoteAddress > bRemoteAddress)
+        return 1;
+    if (bRemoteAddress > aRemoteAddress)
+        return -1;
+    return 0;
+}
+
 WebInspector.NetworkDataGridNode.SizeComparator = function(a, b)
 {
     if (b._request.cached && !a._request.cached)
diff --git a/Source/devtools/front_end/NetworkPanelDescriptor.js b/Source/devtools/front_end/NetworkPanelDescriptor.js
deleted file mode 100644
index 58a7223..0000000
--- a/Source/devtools/front_end/NetworkPanelDescriptor.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2012 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:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
- * OR ITS 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.
- */
-
-
-/**
- * @constructor
- * @extends {WebInspector.PanelDescriptor}
- * @implements {WebInspector.ContextMenu.Provider}
- */
-WebInspector.NetworkPanelDescriptor = function()
-{
-    WebInspector.PanelDescriptor.call(this, "network", WebInspector.UIString("Network"), "NetworkPanel", "NetworkPanel.js");
-    WebInspector.ContextMenu.registerProvider(this);
-}
-
-WebInspector.NetworkPanelDescriptor.prototype = {
-    /** 
-     * @param {!WebInspector.ContextMenu} contextMenu
-     * @param {!Object} target
-     */
-    appendApplicableItems: function(event, contextMenu, target)
-    {
-        if (!(target instanceof WebInspector.NetworkRequest || target instanceof WebInspector.Resource || target instanceof WebInspector.UISourceCode))
-            return;
-        this.panel().appendApplicableItems(event, contextMenu, target);
-    },
-
-    __proto__: WebInspector.PanelDescriptor.prototype
-}
diff --git a/Source/devtools/front_end/NetworkRequest.js b/Source/devtools/front_end/NetworkRequest.js
index 69a8295..4301d75 100644
--- a/Source/devtools/front_end/NetworkRequest.js
+++ b/Source/devtools/front_end/NetworkRequest.js
@@ -59,11 +59,14 @@
     this._frames = [];
 
     this._responseHeaderValues = {};
+
+    this._remoteAddress = "";
 }
 
 WebInspector.NetworkRequest.Events = {
     FinishedLoading: "FinishedLoading",
     TimingChanged: "TimingChanged",
+    RemoteAddressChanged: "RemoteAddressChanged",
     RequestHeadersChanged: "RequestHeadersChanged",
     ResponseHeadersChanged: "ResponseHeadersChanged",
 }
@@ -144,6 +147,24 @@
     },
 
     /**
+     * @param {string} ip
+     * @param {number} port
+     */
+    setRemoteAddress: function(ip, port)
+    {
+        this._remoteAddress = ip + ":" + port;
+        this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.RemoteAddressChanged, this);
+    },
+
+    /**
+     * @return {string}
+     */
+    remoteAddress: function()
+    {
+        return this._remoteAddress;
+    },
+
+    /**
      * @return {number}
      */
     get startTime()
@@ -188,6 +209,7 @@
             if (this._responseReceivedTime > x)
                 this._responseReceivedTime = x;
         }
+        this.dispatchEventToListeners(WebInspector.NetworkRequest.Events.TimingChanged, this);
     },
 
     /**
@@ -228,24 +250,7 @@
      */
     get transferSize()
     {
-        if (typeof this._transferSize === "number")
-            return this._transferSize;
-        if (this.statusCode === 304) // Not modified
-            return this.responseHeadersSize;
-        if (this._cached)
-            return 0;
-        // If we did not receive actual transfer size from network
-        // stack, we prefer using Content-Length over resourceSize as
-        // resourceSize may differ from actual transfer size if platform's
-        // network stack performed decoding (e.g. gzip decompression).
-        // The Content-Length, though, is expected to come from raw
-        // response headers and will reflect actual transfer length.
-        // This won't work for chunked content encoding, so fall back to
-        // resourceSize when we don't have Content-Length. This still won't
-        // work for chunks with non-trivial encodings. We need a way to
-        // get actual transfer size from the network stack.
-        var bodySize = Number(this.responseHeaderValue("Content-Length") || this.resourceSize);
-        return this.responseHeadersSize + bodySize;
+        return this._transferSize || 0;
     },
 
     /**
@@ -257,6 +262,14 @@
     },
 
     /**
+     * @param {number} x
+     */
+    setTransferSize: function(x)
+    {
+        this._transferSize = x;
+    },
+
+    /**
      * @return {boolean}
      */
     get finished()
@@ -361,6 +374,9 @@
         return this._parsedURL.displayName;
     },
 
+    /**
+     * @return {string}
+     */
     name: function()
     {
         if (this._name)
@@ -369,6 +385,9 @@
         return this._name;
     },
 
+    /**
+     * @return {string}
+     */
     path: function()
     {
         if (this._path)
@@ -854,6 +873,7 @@
          * @param {?Protocol.Error} error
          * @param {string} content
          * @param {boolean} contentEncoded
+         * @this {WebInspector.NetworkRequest}
          */
         function onResourceContent(error, content, contentEncoded)
         {
diff --git a/Source/devtools/front_end/NetworkUISourceCodeProvider.js b/Source/devtools/front_end/NetworkUISourceCodeProvider.js
index 15fd40f..173dd1c 100644
--- a/Source/devtools/front_end/NetworkUISourceCodeProvider.js
+++ b/Source/devtools/front_end/NetworkUISourceCodeProvider.js
@@ -48,6 +48,10 @@
 WebInspector.NetworkUISourceCodeProvider.prototype = {
     _populate: function()
     {
+        /**
+         * @param {!WebInspector.ResourceTreeFrame} frame
+         * @this {WebInspector.NetworkUISourceCodeProvider}
+         */
         function populateFrame(frame)
         {
             for (var i = 0; i < frame.childFrames.length; ++i)
@@ -91,12 +95,12 @@
     },
 
     /**
-     * @param {!WebInspector.Event} event
+     * @param {!WebInspector.Event|!{data: !WebInspector.Resource}} event
      */
     _resourceAdded: function(event)
     {
         var resource = /** @type {!WebInspector.Resource} */ (event.data);
-        this._addFile(resource.url, resource);
+        this._addFile(resource.url, new WebInspector.NetworkUISourceCodeProvider.FallbackResource(resource));
     },
 
     /**
@@ -136,6 +140,107 @@
 }
 
 /**
- * @type {?WebInspector.SimpleWorkspaceProvider}
+ * @constructor
+ * @implements {WebInspector.ContentProvider}
+ * @param {!WebInspector.Resource} resource
  */
-WebInspector.networkWorkspaceProvider = null;
+WebInspector.NetworkUISourceCodeProvider.FallbackResource = function(resource)
+{
+    this._resource = resource;
+}
+
+WebInspector.NetworkUISourceCodeProvider.FallbackResource.prototype = {
+
+    /**
+     * @return {string}
+     */
+    contentURL: function()
+    {
+        return this._resource.contentURL();
+    },
+
+    /**
+     * @return {!WebInspector.ResourceType}
+     */
+    contentType: function()
+    {
+        return this._resource.contentType();
+    },
+
+    /**
+     * @param {function(?string)} callback
+     */
+    requestContent: function(callback)
+    {
+        /**
+         * @this {WebInspector.NetworkUISourceCodeProvider.FallbackResource}
+         */
+        function loadFallbackContent()
+        {
+            var scripts = WebInspector.debuggerModel.scriptsForSourceURL(this._resource.url);
+            if (!scripts.length) {
+                callback(null);
+                return;
+            }
+
+            var contentProvider;
+            if (this._resource.type === WebInspector.resourceTypes.Document)
+                contentProvider = new WebInspector.ConcatenatedScriptsContentProvider(scripts);
+            else if (this._resource.type === WebInspector.resourceTypes.Script)
+                contentProvider = scripts[0];
+
+            console.assert(contentProvider, "Resource content request failed. " + this._resource.url);
+
+            contentProvider.requestContent(callback);
+        }
+
+        /**
+         * @param {?string} content
+         * @this {WebInspector.NetworkUISourceCodeProvider.FallbackResource}
+         */
+        function requestContentLoaded(content)
+        {
+            if (content)
+                callback(content)
+            else
+                loadFallbackContent.call(this);
+        }
+
+        this._resource.requestContent(requestContentLoaded.bind(this));
+    },
+
+    /**
+     * @param {string} query
+     * @param {boolean} caseSensitive
+     * @param {boolean} isRegex
+     * @param {function(!Array.<!WebInspector.ContentProvider.SearchMatch>)} callback
+     */
+    searchInContent: function(query, caseSensitive, isRegex, callback)
+    {
+        /**
+         * @param {?string} content
+         */
+        function documentContentLoaded(content)
+        {
+            if (content === null) {
+                callback([]);
+                return;
+            }
+
+            var result = WebInspector.ContentProvider.performSearchInContent(content, query, caseSensitive, isRegex);
+            callback(result);
+        }
+
+        if (this.contentType() === WebInspector.resourceTypes.Document) {
+            this.requestContent(documentContentLoaded);
+            return;
+        }
+
+        this._resource.searchInContent(query, caseSensitive, isRegex, callback);
+    }
+}
+
+/**
+ * @type {!WebInspector.SimpleWorkspaceProvider}
+ */
+WebInspector.networkWorkspaceProvider;
diff --git a/Source/devtools/front_end/NotificationService.js b/Source/devtools/front_end/NotificationService.js
new file mode 100644
index 0000000..a6292fe
--- /dev/null
+++ b/Source/devtools/front_end/NotificationService.js
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ */
+
+/**
+ * @constructor
+ * @extends {WebInspector.Object}
+ */
+WebInspector.NotificationService = function() { }
+
+WebInspector.NotificationService.prototype = {
+    __proto__: WebInspector.Object.prototype
+}
+
+WebInspector.NotificationService.Events = {
+    SelectedNodeChanged: "SelectedNodeChanged"
+}
+
+WebInspector.notifications = new WebInspector.NotificationService();
diff --git a/Source/devtools/front_end/OWNERS b/Source/devtools/front_end/OWNERS
index a91bd6e..9917e82 100644
--- a/Source/devtools/front_end/OWNERS
+++ b/Source/devtools/front_end/OWNERS
@@ -1,6 +1,7 @@
 aandrey@chromium.org
 apavlov@chromium.org
 caseq@chromium.org
+dgozman@chromium.org
 loislo@chromium.org
 pfeldman@chromium.org
 vsevik@chromium.org
diff --git a/Source/devtools/front_end/Object.js b/Source/devtools/front_end/Object.js
index 9544e0d..6873a20 100644
--- a/Source/devtools/front_end/Object.js
+++ b/Source/devtools/front_end/Object.js
@@ -183,5 +183,3 @@
      */
     dispatchEventToListeners: function(eventType, eventData) { },
 }
-
-WebInspector.notifications = new WebInspector.Object();
diff --git a/Source/devtools/front_end/ObjectPopoverHelper.js b/Source/devtools/front_end/ObjectPopoverHelper.js
index 5818665..b963706 100644
--- a/Source/devtools/front_end/ObjectPopoverHelper.js
+++ b/Source/devtools/front_end/ObjectPopoverHelper.js
@@ -66,6 +66,7 @@
          * @param {!Element} popoverContentElement
          * @param {?Protocol.Error} error
          * @param {!DebuggerAgent.FunctionDetails} response
+         * @this {WebInspector.ObjectPopoverHelper}
          */
         function didGetDetails(anchorElement, popoverContentElement, error, response)
         {
@@ -95,6 +96,7 @@
          * @param {!WebInspector.RemoteObject} result
          * @param {boolean} wasThrown
          * @param {!Element=} anchorOverride
+         * @this {WebInspector.ObjectPopoverHelper}
          */
         function showObjectPopover(result, wasThrown, anchorOverride)
         {
diff --git a/Source/devtools/front_end/ObjectPropertiesSection.js b/Source/devtools/front_end/ObjectPropertiesSection.js
index 80d21f7..edd37c7 100644
--- a/Source/devtools/front_end/ObjectPropertiesSection.js
+++ b/Source/devtools/front_end/ObjectPropertiesSection.js
@@ -79,6 +79,7 @@
         /**
          * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
          * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
+         * @this {WebInspector.ObjectPropertiesSection}
          */
         function callback(properties, internalProperties)
         {
@@ -160,11 +161,12 @@
     {
         var propertyValue = /** @type {!WebInspector.RemoteObject} */ (this.property.value);
         console.assert(propertyValue);
-        return WebInspector.ObjectPropertyTreeElement.populate(this, propertyValue);
+        WebInspector.ObjectPropertyTreeElement.populate(this, propertyValue);
     },
 
     /**
      * @override
+     * @return {boolean}
      */
     ondblclick: function(event)
     {
@@ -283,6 +285,9 @@
             this.parent.shouldRefreshChildren = true;
     },
 
+    /**
+     * @return {boolean}
+     */
     renderPromptAsBlock: function()
     {
         return false;
@@ -290,12 +295,16 @@
 
     /**
      * @param {!Event=} event
+     * @return {!Array.<!Element|undefined>}
      */
     elementAndValueToEdit: function(event)
     {
         return [this.valueElement, (typeof this.valueElement._originalTextContent === "string") ? this.valueElement._originalTextContent : undefined];
     },
 
+    /**
+     * @param {!Event=} event
+     */
     startEditing: function(event)
     {
         var elementAndValueToEdit = this.elementAndValueToEdit(event);
@@ -318,6 +327,9 @@
 
         this._prompt = new WebInspector.ObjectPropertyPrompt(this.editingCommitted.bind(this, null, elementToEdit.textContent, context.previousContent, context), this.editingCancelled.bind(this, null, context), this.renderPromptAsBlock());
 
+        /**
+         * @this {WebInspector.ObjectPropertyTreeElement}
+         */
         function blurListener()
         {
             this.editingCommitted(null, elementToEdit.textContent, context.previousContent, context);
@@ -355,8 +367,10 @@
 
     editingCommitted: function(element, userInput, previousContent, context)
     {
-        if (userInput === previousContent)
-            return this.editingCancelled(element, context); // nothing changed, so cancel
+        if (userInput === previousContent) {
+            this.editingCancelled(element, context); // nothing changed, so cancel
+            return;
+        }
 
         this.editingEnded(context);
         this.applyExpression(userInput, true);
@@ -366,11 +380,13 @@
     {
         if (isEnterKey(event)) {
             event.consume(true);
-            return this.editingCommitted(null, context.elementToEdit.textContent, context.previousContent, context);
+            this.editingCommitted(null, context.elementToEdit.textContent, context.previousContent, context);
+            return;
         }
         if (event.keyIdentifier === "U+001B") { // Esc
             event.consume();
-            return this.editingCancelled(null, context);
+            this.editingCancelled(null, context);
+            return;
         }
     },
 
@@ -378,6 +394,11 @@
     {
         expression = expression.trim();
         var expressionLength = expression.length;
+
+        /**
+         * @param {?Protocol.Error} error
+         * @this {WebInspector.ObjectPropertyTreeElement}
+         */
         function callback(error)
         {
             if (!updateInterface)
@@ -397,6 +418,9 @@
         this.property.parentObject.setPropertyValue(this.property.name, expression.trim(), callback.bind(this));
     },
 
+    /**
+     * @return {string|undefined}
+     */
     propertyPath: function()
     {
         if ("_cachedPropertyPath" in this)
@@ -580,6 +604,7 @@
         /**
          * @param {?Protocol.Error} error
          * @param {!DebuggerAgent.FunctionDetails} response
+         * @this {WebInspector.FunctionScopeMainTreeElement}
          */
         function didGetDetails(error, response)
         {
@@ -661,7 +686,7 @@
 WebInspector.ScopeTreeElement.prototype = {
     onpopulate: function()
     {
-        return WebInspector.ObjectPropertyTreeElement.populate(this, this._remoteObject);
+        WebInspector.ObjectPropertyTreeElement.populate(this, this._remoteObject);
     },
 
     __proto__: TreeElement.prototype
@@ -706,6 +731,7 @@
  * @param {number} fromIndex
  * @param {number} toIndex
  * @param {boolean} topLevel
+ * @this {WebInspector.ArrayGroupingTreeElement}
  */
 WebInspector.ArrayGroupingTreeElement._populateRanges = function(treeElement, object, fromIndex, toIndex, topLevel)
 {
@@ -721,6 +747,10 @@
     function packRanges(fromIndex, toIndex, bucketThreshold, sparseIterationThreshold)
     {
         var ownPropertyNames = null;
+
+        /**
+         * @this {Object}
+         */
         function doLoop(iterationCallback)
         {
             if (toIndex - fromIndex < sparseIterationThreshold) {
@@ -800,6 +830,7 @@
  * @param {!WebInspector.RemoteObject} object
  * @param {number} fromIndex
  * @param {number} toIndex
+ * @this {WebInspector.ArrayGroupingTreeElement}
  */
 WebInspector.ArrayGroupingTreeElement._populateAsFragment = function(treeElement, object, fromIndex, toIndex)
 {
@@ -862,6 +893,7 @@
 /**
  * @param {!TreeElement|!TreeOutline} treeElement
  * @param {!WebInspector.RemoteObject} object
+ * @this {WebInspector.ArrayGroupingTreeElement}
  */
 WebInspector.ArrayGroupingTreeElement._populateNonIndexProperties = function(treeElement, object)
 {
@@ -887,6 +919,7 @@
     /**
      * @param {?WebInspector.RemoteObject} arrayFragment
      * @param {boolean=} wasThrown
+     * @this {WebInspector.ArrayGroupingTreeElement}
      */
     function processObjectFragment(arrayFragment, wasThrown)
     {
diff --git a/Source/devtools/front_end/OverridesSupport.js b/Source/devtools/front_end/OverridesSupport.js
index 14fce6b..8e3008a 100644
--- a/Source/devtools/front_end/OverridesSupport.js
+++ b/Source/devtools/front_end/OverridesSupport.js
@@ -34,8 +34,11 @@
  */
 WebInspector.OverridesSupport = function()
 {
-    WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._deviceMetricsChanged.bind(this), this);
+    WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._onMainFrameNavigated.bind(this), this);
     this._deviceMetricsOverrideEnabled = false;
+    this._emulateViewportEnabled = false;
+    this._userAgent = "";
+    this.maybeHasActiveOverridesChanged();
 
     WebInspector.settings.overrideUserAgent.addChangeListener(this._userAgentChanged, this);
     WebInspector.settings.userAgent.addChangeListener(this._userAgentChanged, this);
@@ -59,6 +62,7 @@
 
 WebInspector.OverridesSupport.Events = {
     OverridesWarningUpdated: "OverridesWarningUpdated",
+    HasActiveOverridesChanged: "HasActiveOverridesChanged",
 }
 
 /**
@@ -298,7 +302,7 @@
 
 WebInspector.OverridesSupport.GeolocationPosition.clearGeolocationOverride = function()
 {
-    PageAgent.clearGeolocationOverride();
+    GeolocationAgent.clearGeolocationOverride();
 }
 
 /**
@@ -378,6 +382,7 @@
     emulateDevice: function(deviceMetrics, userAgent)
     {
         this._deviceMetricsChangedListenerMuted = true;
+        this._userAgentChangedListenerMuted = true;
         WebInspector.settings.deviceMetrics.set(deviceMetrics);
         WebInspector.settings.userAgent.set(userAgent);
         WebInspector.settings.overrideDeviceMetrics.set(true);
@@ -385,12 +390,15 @@
         WebInspector.settings.emulateTouchEvents.set(true);
         WebInspector.settings.emulateViewport.set(true);
         delete this._deviceMetricsChangedListenerMuted;
+        delete this._userAgentChangedListenerMuted;
         this._deviceMetricsChanged();
+        this._userAgentChanged();
     },
 
     reset: function()
     {
         this._deviceMetricsChangedListenerMuted = true;
+        this._userAgentChangedListenerMuted = true;
         WebInspector.settings.overrideDeviceMetrics.set(false);
         WebInspector.settings.overrideUserAgent.set(false);
         WebInspector.settings.emulateTouchEvents.set(false);
@@ -400,12 +408,15 @@
         WebInspector.settings.emulateViewport.set(false);
         WebInspector.settings.deviceMetrics.set("");
         delete this._deviceMetricsChangedListenerMuted;
+        delete this._userAgentChangedListenerMuted;
         this._deviceMetricsChanged();
+        this._userAgentChanged();
     },
 
     applyInitialOverrides: function()
     {
         this._deviceMetricsChangedListenerMuted = true;
+        this._userAgentChangedListenerMuted = true;
         this._userAgentChanged();
         this._deviceMetricsChanged();
         this._deviceOrientationChanged();
@@ -413,14 +424,20 @@
         this._emulateTouchEventsChanged();
         this._cssMediaChanged();
         delete this._deviceMetricsChangedListenerMuted;
+        delete this._userAgentChangedListenerMuted;
         this._deviceMetricsChanged();
+        this._userAgentChanged();
     },
 
     _userAgentChanged: function()
     {
-        if (WebInspector.isInspectingDevice())
+        if (WebInspector.isInspectingDevice() || this._userAgentChangedListenerMuted)
             return;
-        NetworkAgent.setUserAgentOverride(WebInspector.settings.overrideUserAgent.get() ? WebInspector.settings.userAgent.get() : "");
+        var userAgent = WebInspector.settings.overrideUserAgent.get() ? WebInspector.settings.userAgent.get() : "";
+        NetworkAgent.setUserAgentOverride(userAgent);
+        this._updateUserAgentWarningMessage(this._userAgent !== userAgent ? WebInspector.UIString("You might need to reload the page for proper user agent spoofing and viewport rendering.") : "");
+        this._userAgent = userAgent;
+        this.maybeHasActiveOverridesChanged();
     },
 
     _deviceMetricsChanged: function()
@@ -436,42 +453,51 @@
 
         // Disable override without checks.
         if (dipWidth && dipHeight && WebInspector.isInspectingDevice()) {
-            this._updateWarningMessage(WebInspector.UIString("Screen emulation on the device is not available."));
+            this._updateDeviceMetricsWarningMessage(WebInspector.UIString("Screen emulation on the device is not available."));
             return;
         }
 
         PageAgent.setDeviceMetricsOverride(dipWidth, dipHeight, metrics.deviceScaleFactor, WebInspector.settings.emulateViewport.get(), WebInspector.settings.deviceFitWindow.get(), metrics.textAutosizing, metrics.fontScaleFactor(), apiCallback.bind(this));
+        this.maybeHasActiveOverridesChanged();
 
         /**
-         * param {?Protocol.Error} error
+         * @param {?Protocol.Error} error
+         * @this {WebInspector.OverridesSupport}
          */
         function apiCallback(error)
         {
             if (error) {
-                this._updateWarningMessage(WebInspector.UIString("Screen emulation is not available on this page."));
+                this._updateDeviceMetricsWarningMessage(WebInspector.UIString("Screen emulation is not available on this page."));
                 return;
             }
 
-            var enabled = !!(dipWidth && dipHeight);
-            this._updateWarningMessage(this._deviceMetricsOverrideEnabled !== enabled ?
+            var metricsOverrideEnabled = !!(dipWidth && dipHeight);
+            var viewportEnabled =  WebInspector.settings.emulateViewport.get();
+            this._updateDeviceMetricsWarningMessage(this._deviceMetricsOverrideEnabled !== metricsOverrideEnabled || (metricsOverrideEnabled && this._emulateViewportEnabled != viewportEnabled) ?
                 WebInspector.UIString("You might need to reload the page for proper user agent spoofing and viewport rendering.") : "");
-            this._deviceMetricsOverrideEnabled = enabled;
+            this._deviceMetricsOverrideEnabled = metricsOverrideEnabled;
+            this._emulateViewportEnabled = viewportEnabled;
+            this._deviceMetricsOverrideAppliedForTest();
         }
-        this._revealOverridesTabIfNeeded();
+    },
+
+    _deviceMetricsOverrideAppliedForTest: function()
+    {
+        // Used for sniffing in tests.
     },
 
     _geolocationPositionChanged: function()
     {
         if (!WebInspector.settings.overrideGeolocation.get()) {
-            PageAgent.clearGeolocationOverride();
+            GeolocationAgent.clearGeolocationOverride();
             return;
         }
         var geolocation = WebInspector.OverridesSupport.GeolocationPosition.parseSetting(WebInspector.settings.geolocationOverride.get());
         if (geolocation.error)
-            PageAgent.setGeolocationOverride();
+            GeolocationAgent.setGeolocationOverride();
         else
-            PageAgent.setGeolocationOverride(geolocation.latitude, geolocation.longitude, 150);
-        this._revealOverridesTabIfNeeded();
+            GeolocationAgent.setGeolocationOverride(geolocation.latitude, geolocation.longitude, 150);
+        this.maybeHasActiveOverridesChanged();
     },
 
     _deviceOrientationChanged: function()
@@ -485,7 +511,7 @@
 
         var deviceOrientation = WebInspector.OverridesSupport.DeviceOrientation.parseSetting(WebInspector.settings.deviceOrientationOverride.get());
         PageAgent.setDeviceOrientationOverride(deviceOrientation.alpha, deviceOrientation.beta, deviceOrientation.gamma);
-        this._revealOverridesTabIfNeeded();
+        this.maybeHasActiveOverridesChanged();
     },
 
     _emulateTouchEventsChanged: function()
@@ -494,38 +520,56 @@
             return;
 
         WebInspector.domAgent.emulateTouchEventObjects(WebInspector.settings.emulateTouchEvents.get());
-        this._revealOverridesTabIfNeeded();
+        this.maybeHasActiveOverridesChanged();
     },
 
     _cssMediaChanged: function()
     {
         PageAgent.setEmulatedMedia(WebInspector.settings.overrideCSSMedia.get() ? WebInspector.settings.emulatedCSSMedia.get() : "");
         WebInspector.cssModel.mediaQueryResultChanged();
-        this._revealOverridesTabIfNeeded();
+        this.maybeHasActiveOverridesChanged();
     },
 
-    _anyOverrideIsEnabled: function()
+    /**
+     * @return {boolean}
+     */
+    hasActiveOverrides: function()
     {
-        return WebInspector.settings.overrideUserAgent.get() || WebInspector.settings.overrideDeviceMetrics.get() ||
+        return this._hasActiveOverrides;
+    },
+
+    maybeHasActiveOverridesChanged: function()
+    {
+        var hasActiveOverrides = WebInspector.settings.overrideUserAgent.get() || WebInspector.settings.overrideDeviceMetrics.get() ||
             WebInspector.settings.overrideGeolocation.get() || WebInspector.settings.overrideDeviceOrientation.get() ||
             WebInspector.settings.emulateTouchEvents.get() || WebInspector.settings.overrideCSSMedia.get();
+        if (this._hasActiveOverrides !== hasActiveOverrides) {
+            this._hasActiveOverrides = hasActiveOverrides;
+            this.dispatchEventToListeners(WebInspector.OverridesSupport.Events.HasActiveOverridesChanged);
+        }
     },
 
-    _revealOverridesTabIfNeeded: function()
+    _onMainFrameNavigated: function()
     {
-        if (this._anyOverrideIsEnabled()) {
-            if (!WebInspector.settings.showEmulationViewInDrawer.get())
-                WebInspector.settings.showEmulationViewInDrawer.set(true);
-            WebInspector.inspectorView.showViewInDrawer("emulation");
-        }
+        this._deviceMetricsChanged();
+        this._updateUserAgentWarningMessage("");
     },
 
     /**
      * @param {string} warningMessage
      */
-    _updateWarningMessage: function(warningMessage)
+    _updateDeviceMetricsWarningMessage: function(warningMessage)
     {
-        this._warningMessage = warningMessage;
+        this._deviceMetricsWarningMessage = warningMessage;
+        this.dispatchEventToListeners(WebInspector.OverridesSupport.Events.OverridesWarningUpdated);
+    },
+
+    /**
+     * @param {string} warningMessage
+     */
+    _updateUserAgentWarningMessage: function(warningMessage)
+    {
+        this._userAgentWarningMessage = warningMessage;
         this.dispatchEventToListeners(WebInspector.OverridesSupport.Events.OverridesWarningUpdated);
     },
 
@@ -534,7 +578,7 @@
      */
     warningMessage: function()
     {
-        return this._warningMessage || "";
+        return this._deviceMetricsWarningMessage || this._userAgentWarningMessage || "";
     },
 
     __proto__: WebInspector.Object.prototype
@@ -542,6 +586,6 @@
 
 
 /**
- * @type {?WebInspector.OverridesSupport}
+ * @type {!WebInspector.OverridesSupport}
  */
-WebInspector.overridesSupport = null;
+WebInspector.overridesSupport;
diff --git a/Source/devtools/front_end/OverridesView.js b/Source/devtools/front_end/OverridesView.js
index 86129ec..686e700 100644
--- a/Source/devtools/front_end/OverridesView.js
+++ b/Source/devtools/front_end/OverridesView.js
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012 Google Inc. All rights reserved.
+ * Copyright (C) 2014 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
@@ -37,7 +37,7 @@
     WebInspector.View.call(this);
     this.registerRequiredCSS("overrides.css");
     this.registerRequiredCSS("helpScreen.css");
-    this.element.classList.add("overrides-view", "fill", "vbox");
+    this.element.classList.add("overrides-view");
 
     this._tabbedPane = new WebInspector.TabbedPane();
     this._tabbedPane.shrinkableTabs = false;
@@ -172,7 +172,7 @@
      */
     _createSettingCheckbox: function(name, setting, callback)
     {
-        var checkbox = WebInspector.SettingsTab.createCheckbox(name, setting.get.bind(setting), listener, true);
+        var checkbox = WebInspector.SettingsUI.createCheckbox(name, setting.get.bind(setting), listener, true);
 
         function listener(value)
         {
@@ -192,10 +192,10 @@
                 checkbox.firstChild.checked = setting.get();
         }
         return checkbox;
-    }
-}
+    },
 
-WebInspector.OverridesView.Tab.prototype.__proto__ = WebInspector.View.prototype;
+    __proto__: WebInspector.View.prototype
+}
 
 /**
  * @constructor
@@ -231,7 +231,6 @@
         this._deviceSelectElement.selectedIndex = devices.length - 1;
 
     this._deviceSelectElement.addEventListener("change", this._deviceSelected.bind(this), false);
-    this._deviceSelectElement.addEventListener("dblclick", this._emulateButtonClicked.bind(this), false);
     this._deviceSelectElement.addEventListener("keypress", this._keyPressed.bind(this), false);
     this._deviceSelectElement.disabled = WebInspector.isInspectingDevice();
 
@@ -240,11 +239,11 @@
     emulateButton.textContent = WebInspector.UIString("Emulate");
     emulateButton.addEventListener("click", this._emulateButtonClicked.bind(this), false);
     emulateButton.disabled = WebInspector.isInspectingDevice();
-    this._emulateButton = emulateButton;
 
     var resetButton = buttonsBar.createChild("button", "settings-tab-text-button");
     resetButton.textContent = WebInspector.UIString("Reset");
     resetButton.addEventListener("click", this._resetButtonClicked.bind(this), false);
+    this._resetButton = resetButton;
 
     this._viewportValueLabel = this.element.createChild("div", "overrides-device-value-label");
     this._viewportValueLabel.textContent = WebInspector.UIString("Viewport:");
@@ -255,6 +254,8 @@
     this._userAgentValueElement = this._userAgentLabel.createChild("span", "overrides-device-value");
 
     this._updateValueLabels();
+    WebInspector.overridesSupport.addEventListener(WebInspector.OverridesSupport.Events.HasActiveOverridesChanged, this._hasActiveOverridesChanged, this);
+    this._hasActiveOverridesChanged();
 }
 
 // Third element lists device metrics separated by 'x':
@@ -353,10 +354,10 @@
 ];
 
 WebInspector.OverridesView.DeviceTab._tablets = [
-    ["Amazon Amazon Kindle Fire HD 7\"",
+    ["Amazon Amazon Kindle Fire HD 7\u2033",
      "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire HD Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
      "1280x800x1.5"],
-    ["Amazon Amazon Kindle Fire HD 8.9\"",
+    ["Amazon Amazon Kindle Fire HD 8.9\u2033",
      "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire HD Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
      "1920x1200x1.5"],
     ["Amazon Amazon Kindle Fire",
@@ -366,7 +367,7 @@
      "Mozilla/5.0 (iPad; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5",
      "1024x768x1"],
     ["Apple iPad 3 / 4",
-     "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53",
+     "Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53",
      "2048x1536x2"],
     ["BlackBerry PlayBook",
      "Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+",
@@ -412,6 +413,11 @@
         WebInspector.overridesSupport.reset();
     },
 
+    _hasActiveOverridesChanged: function()
+    {
+        this._resetButton.disabled = !WebInspector.overridesSupport.hasActiveOverrides();
+    },
+
     _deviceSelected: function()
     {
         var option = this._deviceSelectElement.options[this._deviceSelectElement.selectedIndex];
@@ -424,14 +430,14 @@
         var option = this._deviceSelectElement.options[this._deviceSelectElement.selectedIndex];
         var metrics;
         if (option._metrics && (metrics = WebInspector.OverridesSupport.DeviceMetrics.parseSetting(option._metrics)))
-            this._viewportValueElement.textContent = WebInspector.UIString("%s \u00D7 %s, devicePixelRatio = %s", metrics.width, metrics.height, metrics.deviceScaleFactor);
+            this._viewportValueElement.textContent = WebInspector.UIString("%s \xD7 %s, devicePixelRatio = %s", metrics.width, metrics.height, metrics.deviceScaleFactor);
         else
             this._viewportValueElement.textContent = "";
         this._userAgentValueElement.textContent = option._userAgent || "";
-    }
-}
+    },
 
-WebInspector.OverridesView.DeviceTab.prototype.__proto__ = WebInspector.OverridesView.Tab.prototype;
+    __proto__: WebInspector.OverridesView.Tab.prototype
+}
 
 
 /**
@@ -451,7 +457,7 @@
 
     this.element.appendChild(checkbox);
     this.element.appendChild(this._createDeviceMetricsElement(metrics));
-    this.element.appendChild(this._createMediaEmulationElement());
+    this.element.appendChild(this._createMediaEmulationFragment());
 
     var footnote = this.element.createChild("p", "help-footnote");
     var footnoteLink = footnote.createChild("a");
@@ -470,6 +476,7 @@
     {
         if (enabled && !this._widthOverrideElement.value)
             this._widthOverrideElement.focus();
+        this._applyDeviceMetricsUserInput();
     },
 
     _applyDeviceMetricsUserInput: function()
@@ -528,11 +535,15 @@
      */
     _createDeviceMetricsElement: function(metrics)
     {
-        var fieldsetElement = WebInspector.SettingsTab.createSettingFieldset(WebInspector.settings.overrideDeviceMetrics);
-        fieldsetElement.disabled = WebInspector.isInspectingDevice();
+        var fieldsetElement = WebInspector.SettingsUI.createSettingFieldset(WebInspector.settings.overrideDeviceMetrics);
+        if (WebInspector.isInspectingDevice())
+            fieldsetElement.disabled = true;
         fieldsetElement.id = "metrics-override-section";
 
-        function swapDimensionsClicked(event)
+        /**
+         * @this {WebInspector.OverridesView.ViewportTab}
+         */
+        function swapDimensionsClicked()
         {
             var widthValue = this._widthOverrideElement.value;
             this._widthOverrideElement.value = this._heightOverrideElement.value;
@@ -605,12 +616,12 @@
             this._textAutosizingOverrideCheckbox.checked = metrics.textAutosizing || false;
     },
 
-    _createMediaEmulationElement: function()
+    _createMediaEmulationFragment: function()
     {
-        var checkbox = WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("CSS media"), WebInspector.settings.overrideCSSMedia, true);
-        var fieldsetElement = WebInspector.SettingsTab.createSettingFieldset(WebInspector.settings.overrideCSSMedia);
-        fieldsetElement.disabled = WebInspector.isInspectingDevice();
-        checkbox.appendChild(fieldsetElement);
+        var checkbox = WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("CSS media"), WebInspector.settings.overrideCSSMedia, true);
+        var fieldsetElement = WebInspector.SettingsUI.createSettingFieldset(WebInspector.settings.overrideCSSMedia);
+        if (WebInspector.isInspectingDevice())
+            fieldsetElement.disabled = true;
 
         var mediaSelectElement = fieldsetElement.createChild("select");
         var mediaTypes = WebInspector.CSSStyleModel.MediaTypes;
@@ -630,7 +641,10 @@
         }
 
         mediaSelectElement.addEventListener("change", this._emulateMediaChanged.bind(this, mediaSelectElement), false);
-        return checkbox;
+        var fragment = document.createDocumentFragment();
+        fragment.appendChild(checkbox);
+        fragment.appendChild(fieldsetElement);
+        return fragment;
     },
 
     _emulateMediaChanged: function(select)
@@ -645,10 +659,10 @@
             return;
         this._widthOverrideElement.value = this._widthRangeInput.value;
         this._applyDeviceMetricsUserInput();
-    }
-}
+    },
 
-WebInspector.OverridesView.ViewportTab.prototype.__proto__ = WebInspector.OverridesView.Tab.prototype;
+    __proto__: WebInspector.OverridesView.Tab.prototype
+}
 
 
 /**
@@ -666,34 +680,34 @@
 }
 
 WebInspector.OverridesView.UserAgentTab._userAgents = [
-    ["Internet Explorer 10", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"],
-    ["Internet Explorer 9", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"],
-    ["Internet Explorer 8", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"],
-    ["Internet Explorer 7", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"],
-
-    ["Firefox 7 \u2014 Windows", "Mozilla/5.0 (Windows NT 6.1; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"],
-    ["Firefox 7 \u2014 Mac", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"],
-    ["Firefox 4 \u2014 Windows", "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"],
-    ["Firefox 4 \u2014 Mac", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"],
-    ["Firefox 14 \u2014 Android Mobile", "Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0"],
-    ["Firefox 14 \u2014 Android Tablet", "Mozilla/5.0 (Android; Tablet; rv:14.0) Gecko/14.0 Firefox/14.0"],
-
-    ["Chrome \u2014 Android Mobile", "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19"],
-    ["Chrome \u2014 Android Tablet", "Mozilla/5.0 (Linux; Android 4.1.2; Nexus 7 Build/JZ054K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19"],
-
-    ["iPhone \u2014 iOS 7", "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A4449d Safari/9537.53"],
-    ["iPhone \u2014 iOS 6", "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25"],
-    ["iPad \u2014 iOS 7", "Mozilla/5.0 (iPad; CPU OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A501 Safari/9537.53"],
-    ["iPad \u2014 iOS 6", "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25"],
-
-    ["Android 2.3 \u2014 Nexus S", "Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"],
     ["Android 4.0.2 \u2014 Galaxy Nexus", "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"],
-
+    ["Android 2.3 \u2014 Nexus S", "Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"],
+    ["BlackBerry \u2014 BB10", "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.1+ (KHTML, like Gecko) Version/10.0.0.1337 Mobile Safari/537.1+"],
     ["BlackBerry \u2014 PlayBook 2.1", "Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML, like Gecko) Version/7.2.1.0 Safari/536.2+"],
     ["BlackBerry \u2014 9900", "Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.187 Mobile Safari/534.11+"],
-    ["BlackBerry \u2014 BB10", "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.1+ (KHTML, like Gecko) Version/10.0.0.1337 Mobile Safari/537.1+"],
-
+    ["Chrome 31 \u2014 Mac", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"],
+    ["Chrome 31 \u2014 Windows", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36"],
+    ["Chrome \u2014 Android Tablet", "Mozilla/5.0 (Linux; Android 4.1.2; Nexus 7 Build/JZ054K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19"],
+    ["Chrome \u2014 Android Mobile", "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19"],
+    ["Firefox 14 \u2014 Android Mobile", "Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0"],
+    ["Firefox 14 \u2014 Android Tablet", "Mozilla/5.0 (Android; Tablet; rv:14.0) Gecko/14.0 Firefox/14.0"],
+    ["Firefox 4 \u2014 Mac", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"],
+    ["Firefox 4 \u2014 Windows", "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"],
+    ["Firefox 7 \u2014 Mac", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"],
+    ["Firefox 7 \u2014 Windows", "Mozilla/5.0 (Windows NT 6.1; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"],
+    ["Internet Explorer 10", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"],
+    ["Internet Explorer 7", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"],
+    ["Internet Explorer 8", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"],
+    ["Internet Explorer 9", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"],
+    ["iPad \u2014 iOS 7", "Mozilla/5.0 (iPad; CPU OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A501 Safari/9537.53"],
+    ["iPad \u2014 iOS 6", "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25"],
+    ["iPhone \u2014 iOS 7", "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A4449d Safari/9537.53"],
+    ["iPhone \u2014 iOS 6", "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25"],
     ["MeeGo \u2014 Nokia N9", "Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13"],
+    ["Opera 18 \u2014 Mac", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68"],
+    ["Opera 18 \u2014 Windows", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68"],
+    ["Opera 12 \u2014 Mac", "Opera/9.80 (Macintosh; Intel Mac OS X 10.9.1) Presto/2.12.388 Version/12.16"],
+    ["Opera 12 \u2014 Windows", "Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.16"],
 ];
 
 WebInspector.OverridesView.UserAgentTab.prototype = {
@@ -705,8 +719,9 @@
         var userAgent = WebInspector.settings.userAgent.get();
         var userAgents = WebInspector.OverridesView.UserAgentTab._userAgents.concat([[WebInspector.UIString("Other"), "Other"]]);
 
-        var fieldsetElement = WebInspector.SettingsTab.createSettingFieldset(WebInspector.settings.overrideUserAgent);
-        fieldsetElement.disabled = WebInspector.isInspectingDevice();
+        var fieldsetElement = WebInspector.SettingsUI.createSettingFieldset(WebInspector.settings.overrideUserAgent);
+        if (WebInspector.isInspectingDevice())
+            fieldsetElement.disabled = true;
 
         this._selectElement = fieldsetElement.createChild("select");
         fieldsetElement.createChild("br");
@@ -740,12 +755,18 @@
         fieldsetElement.addEventListener("dblclick", textDoubleClicked.bind(this), false);
         this._otherUserAgentElement.addEventListener("blur", textChanged.bind(this), false);
 
+        /**
+         * @this {WebInspector.OverridesView.UserAgentTab}
+         */
         function textDoubleClicked()
         {
             this._selectElement.selectedIndex = userAgents.length - 1;
             this._userAgentChanged();
         }
 
+        /**
+         * @this {WebInspector.OverridesView.UserAgentTab}
+         */
         function textChanged()
         {
             if (WebInspector.settings.userAgent.get() !== this._otherUserAgentElement.value)
@@ -794,10 +815,10 @@
             this._otherUserAgentElement.value = value;
             this._otherUserAgentElement.title = value;
         }
-    }
-}
+    },
 
-WebInspector.OverridesView.UserAgentTab.prototype.__proto__ = WebInspector.OverridesView.Tab.prototype;
+    __proto__: WebInspector.OverridesView.Tab.prototype
+}
 
 
 /**
@@ -864,7 +885,7 @@
      */
     _createGeolocationOverrideElement: function(geolocation)
     {
-        var fieldsetElement = WebInspector.SettingsTab.createSettingFieldset(WebInspector.settings.overrideGeolocation);
+        var fieldsetElement = WebInspector.SettingsUI.createSettingFieldset(WebInspector.settings.overrideGeolocation);
         fieldsetElement.id = "geolocation-override-section";
 
         var tableElement = fieldsetElement.createChild("table");
@@ -961,7 +982,7 @@
      */
     _createDeviceOrientationOverrideElement: function(deviceOrientation)
     {
-        var fieldsetElement = WebInspector.SettingsTab.createSettingFieldset(WebInspector.settings.overrideDeviceOrientation);
+        var fieldsetElement = WebInspector.SettingsUI.createSettingFieldset(WebInspector.settings.overrideDeviceOrientation);
         fieldsetElement.id = "device-orientation-override-section";
         var tableElement = fieldsetElement.createChild("table");
         var rowElement = tableElement.createChild("tr");
@@ -996,7 +1017,7 @@
     _setBoxOrientation: function(deviceOrientation)
     {
         var matrix = new WebKitCSSMatrix();
-        this._boxMatrix = matrix.rotate(deviceOrientation.beta, deviceOrientation.gamma, deviceOrientation.alpha);
+        this._boxMatrix = matrix.rotate(-deviceOrientation.beta, deviceOrientation.gamma, -deviceOrientation.alpha);
         this._boxElement.style.webkitTransform = this._boxMatrix.toString();
     },
 
@@ -1019,7 +1040,7 @@
         this._currentMatrix = rotationMatrix.multiply(this._boxMatrix)
         this._boxElement.style.webkitTransform = this._currentMatrix;
         var eulerAngles = WebInspector.Geometry.EulerAngles.fromRotationMatrix(this._currentMatrix);
-        var newOrientation = new WebInspector.OverridesSupport.DeviceOrientation(eulerAngles.alpha, eulerAngles.beta, eulerAngles.gamma);
+        var newOrientation = new WebInspector.OverridesSupport.DeviceOrientation(-eulerAngles.alpha, -eulerAngles.beta, eulerAngles.gamma);
         this._setDeviceOrientation(newOrientation, WebInspector.OverridesView.SensorsTab.DeviceOrientationModificationSource.UserDrag);
         return false;
     },
diff --git a/Source/devtools/front_end/OverviewGrid.js b/Source/devtools/front_end/OverviewGrid.js
index 8e64b81..7fdce6c 100644
--- a/Source/devtools/front_end/OverviewGrid.js
+++ b/Source/devtools/front_end/OverviewGrid.js
@@ -161,7 +161,7 @@
     this._parentElement = parentElement;
     this._dividersLabelBarElement = dividersLabelBarElement;
 
-    WebInspector.installDragHandle(this._parentElement, this._startWindowSelectorDragging.bind(this), this._windowSelectorDragging.bind(this), this._endWindowSelectorDragging.bind(this), "ew-resize");
+    WebInspector.installDragHandle(this._parentElement, this._startWindowSelectorDragging.bind(this), this._windowSelectorDragging.bind(this), this._endWindowSelectorDragging.bind(this), "ew-resize", null);
     WebInspector.installDragHandle(this._dividersLabelBarElement, this._startWindowDragging.bind(this), this._windowDragging.bind(this), null, "move");
 
     this.windowLeft = 0.0;
@@ -212,7 +212,6 @@
         if (this._enabled === enabled)
             return;
         this._enabled = enabled;
-        this._parentElement.enableStyleClass("resize-enabled", enabled);
     },
 
     /**
diff --git a/Source/devtools/front_end/PaintProfiler.js b/Source/devtools/front_end/PaintProfiler.js
new file mode 100644
index 0000000..46ad15e
--- /dev/null
+++ b/Source/devtools/front_end/PaintProfiler.js
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+/**
+ * @constructor
+ * @param {string} snapshotId
+ */
+WebInspector.PaintProfilerSnapshot = function(snapshotId)
+{
+    this._id = snapshotId;
+}
+
+WebInspector.PaintProfilerSnapshot.prototype = {
+    dispose: function()
+    {
+        LayerTreeAgent.releaseSnapshot(this._id);
+    },
+
+    /**
+     * @param {?number} firstStep
+     * @param {?number} lastStep
+     * @param {function(string=)} callback
+     */
+    requestImage: function(firstStep, lastStep, callback)
+    {
+        var wrappedCallback = InspectorBackend.wrapClientCallback(callback, "LayerTreeAgent.replaySnapshot(): ");
+        LayerTreeAgent.replaySnapshot(this._id, firstStep || undefined, lastStep || undefined, wrappedCallback);
+    },
+
+    /**
+     * @param {function(!Array.<!LayerTreeAgent.PaintProfile>=)} callback
+     */
+    profile: function(callback)
+    {
+        var wrappedCallback = InspectorBackend.wrapClientCallback(callback, "LayerTreeAgent.profileSnapshot(): ");
+        LayerTreeAgent.profileSnapshot(this._id, 5, 1, wrappedCallback);
+    }
+};
diff --git a/Source/devtools/front_end/PaintProfilerView.js b/Source/devtools/front_end/PaintProfilerView.js
new file mode 100644
index 0000000..50e00d5
--- /dev/null
+++ b/Source/devtools/front_end/PaintProfilerView.js
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+/**
+ * @constructor
+ * @param {!WebInspector.LayerTreeModel} model
+ * @param {!WebInspector.Layers3DView} layers3DView
+ * @extends {WebInspector.View}
+ */
+WebInspector.PaintProfilerView = function(model, layers3DView)
+{
+    WebInspector.View.call(this);
+    this.element.classList.add("paint-profiler-view");
+
+    this._model = model;
+    this._layers3DView = layers3DView;
+
+    this._canvas = this.element.createChild("canvas", "fill");
+    this._context = this._canvas.getContext("2d");
+    this._selectionWindow = new WebInspector.OverviewGrid.Window(this.element, this.element);
+    this._selectionWindow.addEventListener(WebInspector.OverviewGrid.Events.WindowChanged, this._onWindowChanged, this);
+
+    this._innerBarWidth = 4 * window.devicePixelRatio;
+    this._minBarHeight = 4 * window.devicePixelRatio;
+    this._barPaddingWidth = 2 * window.devicePixelRatio;
+    this._outerBarWidth = this._innerBarWidth + this._barPaddingWidth;
+
+    this._reset();
+}
+
+WebInspector.PaintProfilerView.prototype = {
+    onResize: function()
+    {
+        this._update();
+    },
+
+    _update: function()
+    {
+        this._canvas.width = this.element.clientWidth * window.devicePixelRatio;
+        this._canvas.height = this.element.clientHeight * window.devicePixelRatio;
+        this._samplesPerBar = 0;
+        if (!this._profiles || !this._profiles.length)
+            return;
+
+        var maxBars = Math.floor((this._canvas.width - 2 * this._barPaddingWidth) / this._outerBarWidth);
+        var sampleCount = this._profiles[0].length;
+        this._samplesPerBar = Math.ceil(sampleCount / maxBars);
+        var barCount = Math.floor(sampleCount / this._samplesPerBar);
+
+        var maxBarTime = 0;
+        var barTimes = [];
+        for (var i = 0, lastBarIndex = 0, lastBarTime = 0; i < sampleCount;) {
+            for (var row = 0; row < this._profiles.length; row++)
+                lastBarTime += this._profiles[row][i];
+            ++i;
+            if (i - lastBarIndex == this._samplesPerBar || i == sampleCount) {
+                // Normalize by total number of samples accumulated.
+                lastBarTime /= this._profiles.length * (i - lastBarIndex);
+                barTimes.push(lastBarTime);
+                if (lastBarTime > maxBarTime)
+                    maxBarTime = lastBarTime;
+                lastBarTime = 0;
+                lastBarIndex = i;
+            }
+        }
+        const paddingHeight = 4 * window.devicePixelRatio;
+        var scale = (this._canvas.height - paddingHeight - this._minBarHeight) / maxBarTime;
+        this._context.fillStyle = "rgba(110, 180, 110, 0.7)";
+        for (var i = 0; i < barTimes.length; ++i)
+            this._renderBar(i, barTimes[i] * scale + this._minBarHeight);
+    },
+
+    /**
+     * @param {number} index
+     * @param {number} height
+     */
+    _renderBar: function(index, height)
+    {
+        var x = this._barPaddingWidth + index * this._outerBarWidth;
+        var y = this._canvas.height - height;
+        this._context.fillRect(x, y, this._innerBarWidth, height);
+    },
+
+    _onWindowChanged: function()
+    {
+        if (this._updateImageTimer)
+            return;
+        this._updateImageTimer = setTimeout(this._updateImage.bind(this), 100);
+    },
+
+    _updateImage: function()
+    {
+        delete this._updateImageTimer;
+        if (!this._profiles || !this._profiles.length)
+            return;
+
+        var screenLeft = this._selectionWindow.windowLeft * this._canvas.width;
+        var screenRight = this._selectionWindow.windowRight * this._canvas.width;
+
+        var barLeft = Math.floor((screenLeft - this._barPaddingWidth) / this._outerBarWidth);
+        var barRight = Math.floor((screenRight - this._barPaddingWidth + this._innerBarWidth)/ this._outerBarWidth);
+
+        var stepLeft = Math.max(0, barLeft * this._samplesPerBar);
+        var stepRight = Math.min(barRight * this._samplesPerBar, this._profiles[0].length);
+        this._snapshot.requestImage(stepLeft, stepRight, this._layers3DView.showImageForLayer.bind(this._layers3DView, this._layer));
+    },
+
+    _reset: function()
+    {
+        this._snapshot = null;
+        this._profiles = null;
+        this._selectionWindow.reset();
+    },
+
+    /**
+     * @param {!WebInspector.Layer} layer
+     */
+    profile: function(layer)
+    {
+        this._reset();
+        this._layer = layer;
+        this._layer.requestSnapshot(onSnapshotDone.bind(this));
+
+        /**
+         * @param {!WebInspector.PaintProfilerSnapshot=} snapshot
+         * @this {WebInspector.PaintProfilerView}
+         */
+        function onSnapshotDone(snapshot)
+        {
+            this._snapshot = snapshot;
+            if (!snapshot) {
+                this._profiles = null;
+                this._update();
+                return;
+            }
+            snapshot.requestImage(null, null, this._layers3DView.showImageForLayer.bind(this._layers3DView, this._layer));
+            snapshot.profile(onProfileDone.bind(this));
+        }
+
+        /**
+         * @param {!Array.<!LayerTreeAgent.PaintProfile>=} profiles
+         * @this {WebInspector.PaintProfilerView}
+         */
+        function onProfileDone(profiles)
+        {
+            this._profiles = profiles;
+            this._update();
+        }
+    },
+
+    __proto__: WebInspector.View.prototype
+};
diff --git a/Source/devtools/front_end/Panel.js b/Source/devtools/front_end/Panel.js
index f8b6ad0..2e95c20 100644
--- a/Source/devtools/front_end/Panel.js
+++ b/Source/devtools/front_end/Panel.js
@@ -40,8 +40,6 @@
     this._panelName = name;
 
     this._shortcuts = /** !Object.<number, function(Event=):boolean> */ ({});
-
-    WebInspector.settings[this._sidebarWidthSettingName()] = WebInspector.settings.createSetting(this._sidebarWidthSettingName(), undefined);
 }
 
 // Should by in sync with style declarations.
@@ -57,9 +55,12 @@
     {
     },
 
+    /**
+     * @return {!Element}
+     */
     defaultFocusedElement: function()
     {
-        return this.sidebarTreeElement || this.element;
+        return this.element;
     },
 
     /**
@@ -85,79 +86,14 @@
     {
     },
 
-    /**
-     * @param {!Element=} parentElement
-     * @param {string=} position
-     * @param {number=} defaultWidth
-     * @param {number=} defaultHeight
-     */
-    createSidebarView: function(parentElement, position, defaultWidth, defaultHeight)
-    {
-        if (this.splitView)
-            return;
-
-        if (!parentElement)
-            parentElement = this.element;
-
-        this.splitView = new WebInspector.SidebarView(position, this._sidebarWidthSettingName(), defaultWidth, defaultHeight);
-        this.splitView.show(parentElement);
-        this.splitView.addEventListener(WebInspector.SidebarView.EventTypes.Resized, this.sidebarResized.bind(this));
-
-        this.sidebarElement = this.splitView.sidebarElement;
-    },
-
-    /**
-     * @param {!Element=} parentElement
-     * @param {string=} position
-     * @param {number=} defaultWidth
-     */
-    createSidebarViewWithTree: function(parentElement, position, defaultWidth)
-    {
-        if (this.splitView)
-            return;
-
-        this.createSidebarView(parentElement, position);
-
-        this.sidebarTreeElement = document.createElement("ol");
-        this.sidebarTreeElement.className = "sidebar-tree";
-        this.splitView.sidebarElement.appendChild(this.sidebarTreeElement);
-        this.splitView.sidebarElement.classList.add("sidebar");
-
-        this.sidebarTree = new TreeOutline(this.sidebarTreeElement);
-        this.sidebarTree.panel = this;
-    },
-
-    _sidebarWidthSettingName: function()
-    {
-        return this._panelName + "SidebarWidth";
-    },
-
     // Should be implemented by ancestors.
-
     get statusBarItems()
     {
     },
 
     /**
-     * @param {!WebInspector.Event} event
+     * @return {!Array.<!Element>}
      */
-    sidebarResized: function(event)
-    {
-    },
-
-    statusBarResized: function()
-    {
-    },
-
-    /**
-     * @param {!Element} anchor
-     * @return {boolean}
-     */
-    showAnchorLocation: function(anchor)
-    {
-        return false;
-    },
-
     elementsToRestoreScrollPositionsFor: function()
     {
         return [];
@@ -209,26 +145,92 @@
 }
 
 /**
+ * @extends {WebInspector.Panel}
+ * @param {number=} defaultWidth
  * @constructor
- * @param {string} name
- * @param {string} title
- * @param {string=} className
- * @param {string=} scriptName
- * @param {!WebInspector.Panel=} panel
  */
-WebInspector.PanelDescriptor = function(name, title, className, scriptName, panel)
+WebInspector.PanelWithSidebarTree = function(name, defaultWidth)
 {
-    this._name = name;
-    this._title = title;
-    this._className = className;
-    this._scriptName = scriptName;
-    this._panel = panel;
+    WebInspector.Panel.call(this, name);
+
+    this._panelSplitView = new WebInspector.SplitView(true, false, this._panelName + "SidebarWidth", defaultWidth || 200);
+    this._panelSplitView.setSidebarElementConstraints(Preferences.minSidebarWidth);
+    this._panelSplitView.show(this.element);
+
+    var sidebarElement = this._panelSplitView.sidebarElement();
+    sidebarElement.classList.add("sidebar");
+    var sidebarTreeElement = sidebarElement.createChild("ol", "sidebar-tree");
+    this.sidebarTree = new TreeOutline(sidebarTreeElement);
+}
+
+WebInspector.PanelWithSidebarTree.prototype = {
+    /**
+     * @return {!Element}
+     */
+    sidebarElement: function()
+    {
+        return this._panelSplitView.sidebarElement();
+    },
+
+    /**
+     * @return {!Element} element
+     */
+    mainElement: function()
+    {
+        return this._panelSplitView.mainElement();
+    },
+
+    /**
+     * @return {!Element}
+     */
+    defaultFocusedElement: function()
+    {
+        return this.sidebarTree.element || this.element;
+    },
+
+    __proto__: WebInspector.Panel.prototype
+}
+
+/**
+ * @interface
+ */
+WebInspector.PanelDescriptor = function()
+{
 }
 
 WebInspector.PanelDescriptor.prototype = {
     /**
      * @return {string}
      */
+    name: function() {},
+
+    /**
+     * @return {string}
+     */
+    title: function() {},
+
+    /**
+     * @return {!WebInspector.Panel}
+     */
+    panel: function() {}
+}
+
+/**
+ * @constructor
+ * @param {!WebInspector.ModuleManager.Extension} extension
+ * @implements {WebInspector.PanelDescriptor}
+ */
+WebInspector.ModuleManagerExtensionPanelDescriptor = function(extension)
+{
+    this._name = extension.descriptor()["name"];
+    this._title = WebInspector.UIString(extension.descriptor()["title"]);
+    this._extension = extension;
+}
+
+WebInspector.ModuleManagerExtensionPanelDescriptor.prototype = {
+    /**
+     * @return {string}
+     */
     name: function()
     {
         return this._name;
@@ -247,21 +249,6 @@
      */
     panel: function()
     {
-        if (this._panel)
-            return this._panel;
-        if (!this._isCreatingPanel) {
-            var oldStackTraceLimit = Error.stackTraceLimit;
-            Error.stackTraceLimit = 50;
-            console.assert(!this._isCreatingPanel, "PanelDescriptor.panel() is called from inside itself: " + new Error().stack);
-            Error.stackTraceLimit = oldStackTraceLimit;
-        }
-        if (this._scriptName)
-            loadScript(this._scriptName);
-        this._isCreatingPanel = true;
-        this._panel = new WebInspector[this._className];
-        delete this._isCreatingPanel;
-        return this._panel;
-    },
-
-    registerShortcuts: function() {}
+        return /** @type {!WebInspector.Panel} */ (this._extension.instance());
+    }
 }
diff --git a/Source/devtools/front_end/ParsedURL.js b/Source/devtools/front_end/ParsedURL.js
index 046094d..89b9bfb 100644
--- a/Source/devtools/front_end/ParsedURL.js
+++ b/Source/devtools/front_end/ParsedURL.js
@@ -238,6 +238,9 @@
         return this._displayName;
     },
 
+    /**
+     * @return {string}
+     */
     dataURLDisplayName: function()
     {
         if (this._dataURLDisplayName)
@@ -248,11 +251,17 @@
         return this._dataURLDisplayName;
     },
 
+    /**
+     * @return {boolean}
+     */
     isAboutBlank: function()
     {
         return this.url === "about:blank";
     },
 
+    /**
+     * @return {boolean}
+     */
     isDataURL: function()
     {
         return this.scheme === "data";
diff --git a/Source/devtools/front_end/PieChart.js b/Source/devtools/front_end/PieChart.js
index 036b4ce..280806d 100644
--- a/Source/devtools/front_end/PieChart.js
+++ b/Source/devtools/front_end/PieChart.js
@@ -70,5 +70,7 @@
         innerSliceElement.style.backgroundColor = color;
         innerSliceElement.style.webkitTransform = "rotate(" + Number(sliceAngle).toFixed(2) + "deg)";
         this._lastAngle += sliceAngle;
+        if (this._lastAngle > 360)
+            console.assert("Pie chard slices are greater than total.");
     }
 }
diff --git a/Source/devtools/front_end/Platform.js b/Source/devtools/front_end/Platform.js
new file mode 100644
index 0000000..f5a545b
--- /dev/null
+++ b/Source/devtools/front_end/Platform.js
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2014 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:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  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.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE AND ITS 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 APPLE OR ITS 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.
+ */
+
+WebInspector.platform = function()
+{
+    if (!WebInspector._platform)
+        WebInspector._platform = InspectorFrontendHost.platform();
+    return WebInspector._platform;
+}
+
+WebInspector.isMac = function()
+{
+    if (typeof WebInspector._isMac === "undefined")
+        WebInspector._isMac = WebInspector.platform() === "mac";
+
+    return WebInspector._isMac;
+}
+
+WebInspector.isWin = function()
+{
+    if (typeof WebInspector._isWin === "undefined")
+        WebInspector._isWin = WebInspector.platform() === "windows";
+
+    return WebInspector._isWin;
+}
+
+WebInspector.PlatformFlavor = {
+    WindowsVista: "windows-vista",
+    MacTiger: "mac-tiger",
+    MacLeopard: "mac-leopard",
+    MacSnowLeopard: "mac-snowleopard",
+    MacLion: "mac-lion"
+}
+
+WebInspector.platformFlavor = function()
+{
+    function detectFlavor()
+    {
+        const userAgent = navigator.userAgent;
+
+        if (WebInspector.platform() === "windows") {
+            var match = userAgent.match(/Windows NT (\d+)\.(?:\d+)/);
+            if (match && match[1] >= 6)
+                return WebInspector.PlatformFlavor.WindowsVista;
+            return null;
+        } else if (WebInspector.platform() === "mac") {
+            var match = userAgent.match(/Mac OS X\s*(?:(\d+)_(\d+))?/);
+            if (!match || match[1] != 10)
+                return WebInspector.PlatformFlavor.MacSnowLeopard;
+            switch (Number(match[2])) {
+                case 4:
+                    return WebInspector.PlatformFlavor.MacTiger;
+                case 5:
+                    return WebInspector.PlatformFlavor.MacLeopard;
+                case 6:
+                    return WebInspector.PlatformFlavor.MacSnowLeopard;
+                case 7:
+                    return WebInspector.PlatformFlavor.MacLion;
+                case 8: // Matches the default version
+                case 9: // Matches the default version
+                default:
+                    return "";
+            }
+        }
+    }
+
+    if (!WebInspector._platformFlavor)
+        WebInspector._platformFlavor = detectFlavor();
+
+    return WebInspector._platformFlavor;
+}
+
+WebInspector.port = function()
+{
+    if (!WebInspector._port)
+        WebInspector._port = InspectorFrontendHost.port();
+
+    return WebInspector._port;
+}
diff --git a/Source/devtools/front_end/PlatformFontsSidebarPane.js b/Source/devtools/front_end/PlatformFontsSidebarPane.js
index 0f79214..29db225 100644
--- a/Source/devtools/front_end/PlatformFontsSidebarPane.js
+++ b/Source/devtools/front_end/PlatformFontsSidebarPane.js
@@ -80,7 +80,7 @@
 
     /**
      * @param {!WebInspector.DOMNode} node
-     * @param {?String} cssFamilyName
+     * @param {?string} cssFamilyName
      * @param {?Array.<!CSSAgent.PlatformFontUsage>} platformFonts
      */
     _refreshUI: function(node, cssFamilyName, platformFonts)
diff --git a/Source/devtools/front_end/Popover.js b/Source/devtools/front_end/Popover.js
index 2deb9e4..042b973 100644
--- a/Source/devtools/front_end/Popover.js
+++ b/Source/devtools/front_end/Popover.js
@@ -153,10 +153,13 @@
 
         // Skinny tooltips are not pretty, their arrow location is not nice.
         preferredWidth = Math.max(preferredWidth, 50);
-        const totalWidth = window.innerWidth;
-        const totalHeight = window.innerHeight;
+        // Position relative to main DevTools element.
+        const container = WebInspector.inspectorView.devtoolsElement();
+        const totalWidth = container.offsetWidth;
+        const totalHeight = container.offsetHeight;
 
         var anchorBox = anchorElement instanceof AnchorBox ? anchorElement : anchorElement.boxInWindow(window);
+        anchorBox = anchorBox.relativeToElement(container);
         var newElementPosition = { x: 0, y: 0, width: preferredWidth + scrollerWidth, height: preferredHeight };
 
         var verticalAlignment;
@@ -215,7 +218,7 @@
         }
 
         this.element.className = "popover custom-popup-vertical-scroll custom-popup-horizontal-scroll " + verticalAlignment + "-" + horizontalAlignment + "-arrow";
-        this.element.positionAt(newElementPosition.x - borderWidth, newElementPosition.y - borderWidth);
+        this.element.positionAt(newElementPosition.x - borderWidth, newElementPosition.y - borderWidth, container);
         this.element.style.width = newElementPosition.width + borderWidth * 2 + "px";
         this.element.style.height = newElementPosition.height + borderWidth * 2 + "px";
     },
@@ -305,6 +308,9 @@
         if (!this._popover || this._hidePopoverTimer)
             return;
 
+        /**
+         * @this {WebInspector.PopoverHelper}
+         */
         function doHide()
         {
             this._hidePopover();
@@ -333,6 +339,9 @@
         }
     },
 
+    /**
+     * @return {boolean}
+     */
     isPopoverVisible: function()
     {
         return !!this._popover;
diff --git a/Source/devtools/front_end/ProfileDataGridTree.js b/Source/devtools/front_end/ProfileDataGridTree.js
index 4711b8f..8ed6aa1 100644
--- a/Source/devtools/front_end/ProfileDataGridTree.js
+++ b/Source/devtools/front_end/ProfileDataGridTree.js
@@ -60,13 +60,11 @@
         var data = {};
 
         if (this._deoptReason) {
-            var div = document.createElement("div");
-            var marker = div.createChild("span");
-            marker.className = "profile-warn-marker";
+            var content = document.createDocumentFragment();
+            var marker = content.createChild("span", "profile-warn-marker");
             marker.title = WebInspector.UIString("Not optimized: %s", this._deoptReason);
-            var functionName = div.createChild("span");
-            functionName.textContent = this.functionName;
-            data["function"] = div;
+            content.createTextChild(this.functionName);
+            data["function"] = content;
         } else
             data["function"] = this.functionName;
 
@@ -203,6 +201,7 @@
 
     /**
      * @param {!WebInspector.ProfileDataGridNode} node
+     * @return {?WebInspector.ProfileDataGridNode}
      */
     findChild: function(node)
     {
diff --git a/Source/devtools/front_end/ProfileLauncherView.js b/Source/devtools/front_end/ProfileLauncherView.js
index df1879f..7689b57 100644
--- a/Source/devtools/front_end/ProfileLauncherView.js
+++ b/Source/devtools/front_end/ProfileLauncherView.js
@@ -47,6 +47,10 @@
 
     this._controlButton = this._contentElement.createChild("button", "control-profiling");
     this._controlButton.addEventListener("click", this._controlButtonClicked.bind(this), false);
+
+    this._loadButton = this._contentElement.createChild("button", "load-profile");
+    this._loadButton.textContent = WebInspector.UIString("Load");
+    this._loadButton.addEventListener("click", this._loadButtonClicked.bind(this), false);
 }
 
 WebInspector.ProfileLauncherView.prototype = {
@@ -70,6 +74,11 @@
         this._panel.toggleRecordButton();
     },
 
+    _loadButtonClicked: function()
+    {
+        this._panel.showLoadFromFileDialog();
+    },
+
     _updateControls: function()
     {
         if (this._isEnabled)
@@ -91,14 +100,12 @@
     profileStarted: function()
     {
         this._isProfiling = true;
-        WebInspector.profileManager.notifyStarted(this._profileTypeId);
         this._updateControls();
     },
 
     profileFinished: function()
     {
         this._isProfiling = false;
-        WebInspector.profileManager.notifyStoped(this._profileTypeId);
         this._updateControls();
     },
 
@@ -154,6 +161,7 @@
         var optionElement = document.createElement("input");
         labelElement.insertBefore(optionElement, labelElement.firstChild);
         this._typeIdToOptionElement[profileType.id] = optionElement;
+        optionElement._profileType = profileType;
         optionElement.type = "radio";
         optionElement.name = "profile-type";
         optionElement.style.hidden = true;
@@ -167,13 +175,12 @@
 
     restoreSelectedProfileType: function()
     {
-        var typeName = WebInspector.settings.selectedProfileType.get();
-        if (!(typeName in this._typeIdToOptionElement))
-            typeName = Object.keys(this._typeIdToOptionElement)[0];
-        this._typeIdToOptionElement[typeName].checked = true;
-        this.dispatchEventToListeners(
-            WebInspector.MultiProfileLauncherView.EventTypes.ProfileTypeSelected,
-            this._panel.getProfileType(typeName));
+        var typeId = WebInspector.settings.selectedProfileType.get();
+        if (!(typeId in this._typeIdToOptionElement))
+            typeId = Object.keys(this._typeIdToOptionElement)[0];
+        this._typeIdToOptionElement[typeId].checked = true;
+        var type = this._typeIdToOptionElement[typeId]._profileType;
+        this.dispatchEventToListeners(WebInspector.MultiProfileLauncherView.EventTypes.ProfileTypeSelected, type);
     },
 
     _controlButtonClicked: function()
@@ -207,14 +214,12 @@
     profileStarted: function()
     {
         this._isProfiling = true;
-        WebInspector.profileManager.notifyStarted(this._profileTypeId);
         this._updateControls();
     },
 
     profileFinished: function()
     {
         this._isProfiling = false;
-        WebInspector.profileManager.notifyStoped(this._profileTypeId);
         this._updateControls();
     },
 
diff --git a/Source/devtools/front_end/ProfilesPanel.js b/Source/devtools/front_end/ProfilesPanel.js
index 55a56ad..44989f7 100644
--- a/Source/devtools/front_end/ProfilesPanel.js
+++ b/Source/devtools/front_end/ProfilesPanel.js
@@ -31,14 +31,16 @@
  */
 WebInspector.ProfileType = function(id, name)
 {
+    WebInspector.Object.call(this);
     this._id = id;
     this._name = name;
     /** @type {!Array.<!WebInspector.ProfileHeader>} */
     this._profiles = [];
-    /** @type {?WebInspector.SidebarSectionTreeElement} */
-    this.treeElement = null;
     /** @type {?WebInspector.ProfileHeader} */
     this._profileBeingRecorded = null;
+    this._nextProfileUid = 1;
+
+    window.addEventListener("unload", this._clearTempStorage.bind(this), false);
 }
 
 WebInspector.ProfileType.Events = {
@@ -126,6 +128,7 @@
         /**
          * @param {!WebInspector.ProfileHeader} profile
          * @return {boolean}
+         * @this {WebInspector.ProfileType}
          */
         function isFinished(profile)
         {
@@ -195,14 +198,17 @@
      */
     removeProfile: function(profile)
     {
-        if (this._profileBeingRecorded === profile)
-            this._profileBeingRecorded = null;
-        for (var i = 0; i < this._profiles.length; ++i) {
-            if (this._profiles[i].uid === profile.uid) {
-                this._profiles.splice(i, 1);
-                break;
-            }
-        }
+        var index = this._profiles.indexOf(profile);
+        if (index === -1)
+            return;
+        this._profiles.splice(index, 1);
+        this._disposeProfile(profile);
+    },
+
+    _clearTempStorage: function()
+    {
+        for (var i = 0; i < this._profiles.length; ++i)
+            this._profiles[i].removeTempFile();
     },
 
     /**
@@ -214,21 +220,31 @@
         return this._profileBeingRecorded;
     },
 
+    profileBeingRecordedRemoved: function()
+    {
+    },
+
     _reset: function()
     {
         var profiles = this._profiles.slice(0);
-        for (var i = 0; i < profiles.length; ++i) {
-            var profile = profiles[i];
-            var view = profile.existingView();
-            if (view) {
-                view.detach();
-                if ("dispose" in view)
-                    view.dispose();
-            }
-            this.dispatchEventToListeners(WebInspector.ProfileType.Events.RemoveProfileHeader, profile);
-        }
-        this.treeElement.removeChildren();
+        for (var i = 0; i < profiles.length; ++i)
+            this._disposeProfile(profiles[i]);
         this._profiles = [];
+
+        this._nextProfileUid = 1;
+    },
+
+    /**
+     * @param {!WebInspector.ProfileHeader} profile
+     */
+    _disposeProfile: function(profile)
+    {
+        this.dispatchEventToListeners(WebInspector.ProfileType.Events.RemoveProfileHeader, profile);
+        profile.dispose();
+        if (this._profileBeingRecorded === profile) {
+            this.profileBeingRecordedRemoved();
+            this._profileBeingRecorded = null;
+        }
     },
 
     __proto__: WebInspector.Object.prototype
@@ -236,19 +252,35 @@
 
 /**
  * @constructor
+ * @extends {WebInspector.Object}
  * @param {!WebInspector.ProfileType} profileType
  * @param {string} title
- * @param {number=} uid
  */
-WebInspector.ProfileHeader = function(profileType, title, uid)
+WebInspector.ProfileHeader = function(profileType, title)
 {
     this._profileType = profileType;
     this.title = title;
-    this.uid = (uid === undefined) ? -1 : uid;
+    this.uid = profileType._nextProfileUid++;
     this._fromFile = false;
 }
 
-WebInspector.ProfileHeader._nextProfileFromFileUid = 1;
+/**
+ * @constructor
+ * @param {?string} subtitle
+ * @param {boolean} wait
+ */
+WebInspector.ProfileHeader.StatusUpdate = function(subtitle, wait)
+{
+    /** @type {?string} */
+    this.subtitle = subtitle;
+    /** @type {boolean} */
+    this.wait = wait;
+}
+
+WebInspector.ProfileHeader.Events = {
+    UpdateStatus: "UpdateStatus",
+    ProfileReceived: "ProfileReceived"
+}
 
 WebInspector.ProfileHeader.prototype = {
     /**
@@ -260,6 +292,15 @@
     },
 
     /**
+     * @param {?string} subtitle
+     * @param {boolean=} wait
+     */
+    updateStatus: function(subtitle, wait)
+    {
+        this.dispatchEventToListeners(WebInspector.ProfileHeader.Events.UpdateStatus, new WebInspector.ProfileHeader.StatusUpdate(subtitle, !!wait));
+    },
+
+    /**
      * Must be implemented by subclasses.
      * @return {!WebInspector.ProfileSidebarTreeElement}
      */
@@ -269,33 +310,19 @@
     },
 
     /**
-     * @return {?WebInspector.View}
-     */
-    existingView: function()
-    {
-        return this._view;
-    },
-
-    /**
-     * @param {!WebInspector.ProfilesPanel} panel
      * @return {!WebInspector.View}
      */
-    view: function(panel)
-    {
-        if (!this._view)
-            this._view = this.createView(panel);
-        return this._view;
-    },
-
-    /**
-     * @param {!WebInspector.ProfilesPanel} panel
-     * @return {!WebInspector.View}
-     */
-    createView: function(panel)
+    createView: function()
     {
         throw new Error("Not implemented.");
     },
 
+    removeTempFile: function()
+    {
+        if (this._tempFile)
+            this._tempFile.remove();
+    },
+
     dispose: function()
     {
     },
@@ -339,53 +366,44 @@
     setFromFile: function()
     {
         this._fromFile = true;
-        this.uid = "From file #" + WebInspector.ProfileHeader._nextProfileFromFileUid++;
-    }
+    },
+
+    __proto__: WebInspector.Object.prototype
 }
 
 /**
  * @constructor
  * @implements {WebInspector.Searchable}
- * @implements {WebInspector.ContextMenu.Provider}
- * @extends {WebInspector.Panel}
- * @param {string=} name
- * @param {!WebInspector.ProfileType=} type
+ * @extends {WebInspector.PanelWithSidebarTree}
  */
-WebInspector.ProfilesPanel = function(name, type)
+WebInspector.ProfilesPanel = function()
 {
-    // If the name is not specified the ProfilesPanel works in multi-profile mode.
-    var singleProfileMode = typeof name !== "undefined";
-    name = name || "profiles";
-    WebInspector.Panel.call(this, name);
+    WebInspector.PanelWithSidebarTree.call(this, "profiles");
     this.registerRequiredCSS("panelEnablerView.css");
     this.registerRequiredCSS("heapProfiler.css");
     this.registerRequiredCSS("profilesPanel.css");
 
-    this.createSidebarViewWithTree();
-
-    this.splitView.mainElement.classList.add("vbox");
-    this.splitView.sidebarElement.classList.add("vbox");
-
     this._searchableView = new WebInspector.SearchableView(this);
-    this._searchableView.show(this.splitView.mainElement);
+
+    var mainView = new WebInspector.View();
+    this._searchableView.show(mainView.element);
+    mainView.show(this.mainElement());
 
     this.profilesItemTreeElement = new WebInspector.ProfilesSidebarTreeElement(this);
     this.sidebarTree.appendChild(this.profilesItemTreeElement);
 
-    this._singleProfileMode = singleProfileMode;
-    this._profileTypesByIdMap = {};
-
     this.profileViews = document.createElement("div");
     this.profileViews.id = "profile-views";
     this.profileViews.classList.add("vbox");
     this._searchableView.element.appendChild(this.profileViews);
 
-    var statusBarContainer = this.splitView.mainElement.createChild("div", "profiles-status-bar");
+    var statusBarContainer = document.createElementWithClass("div", "profiles-status-bar");
+    mainView.element.insertBefore(statusBarContainer, mainView.element.firstChild);
     this._statusBarElement = statusBarContainer.createChild("div", "status-bar");
 
-    var sidebarTreeBox = this.sidebarElement.createChild("div", "profiles-sidebar-tree-box");
-    sidebarTreeBox.appendChild(this.sidebarTreeElement);
-    var statusBarContainerLeft = this.sidebarElement.createChild("div", "profiles-status-bar");
+    this.sidebarElement().classList.add("profiles-sidebar-tree-box");
+    var statusBarContainerLeft = document.createElementWithClass("div", "profiles-status-bar");
+    this.sidebarElement().insertBefore(statusBarContainerLeft, this.sidebarElement().firstChild);
     this._statusBarButtons = statusBarContainerLeft.createChild("div", "status-bar");
 
     this.recordButton = new WebInspector.StatusBarButton("", "record-profile-status-bar-item");
@@ -393,41 +411,74 @@
     this._statusBarButtons.appendChild(this.recordButton.element);
 
     this.clearResultsButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear all profiles."), "clear-status-bar-item");
-    this.clearResultsButton.addEventListener("click", this._clearProfiles, this);
+    this.clearResultsButton.addEventListener("click", this._reset, this);
     this._statusBarButtons.appendChild(this.clearResultsButton.element);
 
     this._profileTypeStatusBarItemsContainer = this._statusBarElement.createChild("div");
     this._profileViewStatusBarItemsContainer = this._statusBarElement.createChild("div");
 
-    if (singleProfileMode) {
-        this._launcherView = this._createLauncherView();
-        this._registerProfileType(/** @type {!WebInspector.ProfileType} */ (type));
-        this._selectedProfileType = type;
-        this._updateProfileTypeSpecificUI();
-    } else {
-        this._launcherView = new WebInspector.MultiProfileLauncherView(this);
-        this._launcherView.addEventListener(WebInspector.MultiProfileLauncherView.EventTypes.ProfileTypeSelected, this._onProfileTypeSelected, this);
+    this._profileGroups = {};
+    this._launcherView = new WebInspector.MultiProfileLauncherView(this);
+    this._launcherView.addEventListener(WebInspector.MultiProfileLauncherView.EventTypes.ProfileTypeSelected, this._onProfileTypeSelected, this);
 
-        this._registerProfileType(new WebInspector.CPUProfileType());
-        this._registerProfileType(new WebInspector.HeapSnapshotProfileType());
-        this._registerProfileType(new WebInspector.TrackingHeapSnapshotProfileType(this));
-        if (!WebInspector.WorkerManager.isWorkerFrontend() && WebInspector.experimentsSettings.canvasInspection.isEnabled())
-            this._registerProfileType(new WebInspector.CanvasProfileType());
-        this._launcherView.restoreSelectedProfileType();
-    }
-
-    this._reset();
+    this._profileToView = [];
+    this._typeIdToSidebarSection = {};
+    var types = WebInspector.ProfileTypeRegistry.instance.profileTypes();
+    for (var i = 0; i < types.length; i++)
+        this._registerProfileType(types[i]);
+    this._launcherView.restoreSelectedProfileType();
+    this.profilesItemTreeElement.select();
+    this._showLauncherView();
 
     this._createFileSelectorElement();
     this.element.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), true);
     this._registerShortcuts();
 
-    WebInspector.ContextMenu.registerProvider(this);
-
     this._configureCpuProfilerSamplingInterval();
     WebInspector.settings.highResolutionCpuProfiling.addChangeListener(this._configureCpuProfilerSamplingInterval, this);
 }
 
+
+/**
+ * @constructor
+ */
+WebInspector.ProfileTypeRegistry = function() {
+    this._profileTypes = [];
+
+    this.cpuProfileType = new WebInspector.CPUProfileType();
+    this._addProfileType(this.cpuProfileType);
+    this.heapSnapshotProfileType = new WebInspector.HeapSnapshotProfileType();
+    this._addProfileType(this.heapSnapshotProfileType);
+    this.trackingHeapSnapshotProfileType = new WebInspector.TrackingHeapSnapshotProfileType();
+    this._addProfileType(this.trackingHeapSnapshotProfileType);
+    HeapProfilerAgent.enable();
+
+    if (!WebInspector.isWorkerFrontend() && WebInspector.experimentsSettings.canvasInspection.isEnabled()) {
+        this.canvasProfileType = new WebInspector.CanvasProfileType();
+        this._addProfileType(this.canvasProfileType);
+    }
+}
+
+WebInspector.ProfileTypeRegistry.prototype = {
+    /**
+     * @param {!WebInspector.ProfileType} profileType
+     */
+    _addProfileType: function(profileType)
+    {
+        this._profileTypes.push(profileType);
+    },
+
+    /**
+     * @return {!Array.<!WebInspector.ProfileType>}
+     */
+    profileTypes: function()
+    {
+        return this._profileTypes;
+    }
+}
+
+
+
 WebInspector.ProfilesPanel.prototype = {
     /**
      * @return {!WebInspector.SearchableView}
@@ -455,8 +506,9 @@
 
     _findProfileTypeByExtension: function(fileName)
     {
-        for (var id in this._profileTypesByIdMap) {
-            var type = this._profileTypesByIdMap[id];
+        var types = WebInspector.ProfileTypeRegistry.instance.profileTypes();
+        for (var i = 0; i < types.length; i++) {
+            var type = types[i];
             var extension = type.fileExtension();
             if (!extension)
                 continue;
@@ -468,7 +520,7 @@
 
     _registerShortcuts: function()
     {
-        this.registerShortcuts(WebInspector.ProfilesPanelDescriptor.ShortcutKeys.StartStopRecording, this.toggleRecordButton.bind(this));
+        this.registerShortcuts(WebInspector.ShortcutsScreen.ProfilesPanelShortcuts.StartStopRecording, this.toggleRecordButton.bind(this));
     },
 
     _configureCpuProfilerSamplingInterval: function()
@@ -492,8 +544,9 @@
         var profileType = this._findProfileTypeByExtension(file.name);
         if (!profileType) {
             var extensions = [];
-            for (var id in this._profileTypesByIdMap) {
-                var extension = this._profileTypesByIdMap[id].fileExtension();
+            var types = WebInspector.ProfileTypeRegistry.instance.profileTypes();
+            for (var i = 0; i < types.length; i++) {
+                var extension = types[i].fileExtension();
                 if (!extension)
                     continue;
                 extensions.push(extension);
@@ -522,13 +575,20 @@
         if (isProfiling) {
             this._launcherView.profileStarted();
             if (type.hasTemporaryView())
-                this._showProfile(type.profileBeingRecorded());
+                this.showProfile(type.profileBeingRecorded());
         } else {
             this._launcherView.profileFinished();
         }
         return true;
     },
 
+    _profileBeingRecordedRemoved: function()
+    {
+        this.recordButton.toggled = false;
+        this.recordButton.title = this._selectedProfileType.buttonTooltip;
+        this._launcherView.profileFinished();
+    },
+
     /**
      * @param {!WebInspector.Event} event
      */
@@ -554,8 +614,9 @@
     {
         WebInspector.Panel.prototype.reset.call(this);
 
-        for (var typeId in this._profileTypesByIdMap)
-            this._profileTypesByIdMap[typeId]._reset();
+        var types = WebInspector.ProfileTypeRegistry.instance.profileTypes();
+        for (var i = 0; i < types.length; i++)
+            types[i]._reset();
 
         delete this.visibleView;
         delete this.currentQuery;
@@ -567,7 +628,7 @@
             this.recordButton.title = this._selectedProfileType.buttonTooltip;
         this._launcherView.profileFinished();
 
-        this.sidebarTreeElement.classList.remove("some-expandable");
+        this.sidebarTree.element.classList.remove("some-expandable");
 
         this._launcherView.detach();
         this.profileViews.removeChildren();
@@ -590,13 +651,6 @@
         this.visibleView = this._launcherView;
     },
 
-    _clearProfiles: function()
-    {
-        ProfilerAgent.clearProfiles();
-        HeapProfilerAgent.clearProfiles();
-        this._reset();
-    },
-
     _garbageCollectButtonClicked: function()
     {
         HeapProfilerAgent.collectGarbage();
@@ -607,23 +661,35 @@
      */
     _registerProfileType: function(profileType)
     {
-        this._profileTypesByIdMap[profileType.id] = profileType;
         this._launcherView.addProfileType(profileType);
-        profileType.treeElement = new WebInspector.SidebarSectionTreeElement(profileType.treeItemTitle, null, true);
-        profileType.treeElement.hidden = !this._singleProfileMode;
-        this.sidebarTree.appendChild(profileType.treeElement);
-        profileType.treeElement.childrenListElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), true);
+        var profileTypeSection = new WebInspector.ProfileTypeSidebarSection(profileType);
+        this._typeIdToSidebarSection[profileType.id] = profileTypeSection
+        this.sidebarTree.appendChild(profileTypeSection);
+        profileTypeSection.childrenListElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), true);
+
+        /**
+         * @this {WebInspector.ProfilesPanel}
+         */
         function onAddProfileHeader(event)
         {
             this._addProfileHeader(event.data);
         }
+
+        /**
+         * @this {WebInspector.ProfilesPanel}
+         */
         function onRemoveProfileHeader(event)
         {
             this._removeProfileHeader(event.data);
         }
+
         profileType.addEventListener(WebInspector.ProfileType.Events.ViewUpdated, this._updateProfileTypeSpecificUI, this);
         profileType.addEventListener(WebInspector.ProfileType.Events.AddProfileHeader, onAddProfileHeader, this);
         profileType.addEventListener(WebInspector.ProfileType.Events.RemoveProfileHeader, onRemoveProfileHeader, this);
+
+        var profiles = profileType.getProfiles();
+        for (var i = 0; i < profiles.length; i++)
+            this._addProfileHeader(profiles[i]);
     },
 
     /**
@@ -645,21 +711,15 @@
         if (this.visibleView instanceof WebInspector.HeapSnapshotView) {
             this.visibleView.populateContextMenu(contextMenu, event);
         }
-        if (element !== this.element || event.srcElement === this.sidebarElement) {
+        if (element !== this.element || event.srcElement === this.sidebarElement()) {
             contextMenu.appendItem(WebInspector.UIString("Load\u2026"), this._fileSelectorElement.click.bind(this._fileSelectorElement));
         }
         contextMenu.show();
     },
 
-    /**
-     * @nosideeffects
-     * @param {string} text
-     * @param {string} profileTypeId
-     * @return {string}
-     */
-    _makeTitleKey: function(text, profileTypeId)
+    showLoadFromFileDialog: function()
     {
-        return escape(text) + '/' + escape(profileTypeId);
+        this._fileSelectorElement.click();
     },
 
     /**
@@ -669,60 +729,9 @@
     {
         var profileType = profile.profileType();
         var typeId = profileType.id;
-        var sidebarParent = profileType.treeElement;
-        sidebarParent.hidden = false;
-        var small = false;
-        var alternateTitle;
-
-        if (!profile.fromFile() && profile.profileType().profileBeingRecorded() !== profile) {
-            var profileTitleKey = this._makeTitleKey(profile.title, typeId);
-            if (!(profileTitleKey in this._profileGroups))
-                this._profileGroups[profileTitleKey] = [];
-
-            var group = this._profileGroups[profileTitleKey];
-            group.push(profile);
-            if (group.length === 2) {
-                // Make a group TreeElement now that there are 2 profiles.
-                group._profilesTreeElement = new WebInspector.ProfileGroupSidebarTreeElement(this, profile.title);
-
-                // Insert at the same index for the first profile of the group.
-                var index = sidebarParent.children.indexOf(group[0]._profilesTreeElement);
-                sidebarParent.insertChild(group._profilesTreeElement, index);
-
-                // Move the first profile to the group.
-                var selected = group[0]._profilesTreeElement.selected;
-                sidebarParent.removeChild(group[0]._profilesTreeElement);
-                group._profilesTreeElement.appendChild(group[0]._profilesTreeElement);
-                if (selected)
-                    group[0]._profilesTreeElement.revealAndSelect();
-
-                group[0]._profilesTreeElement.small = true;
-                group[0]._profilesTreeElement.mainTitle = WebInspector.UIString("Run %d", 1);
-
-                this.sidebarTreeElement.classList.add("some-expandable");
-            }
-
-            if (group.length >= 2) {
-                sidebarParent = group._profilesTreeElement;
-                alternateTitle = WebInspector.UIString("Run %d", group.length);
-                small = true;
-            }
-        }
-
-        var profileTreeElement = profile.createSidebarTreeElement();
-        profile.sidebarElement = profileTreeElement;
-        profileTreeElement.small = small;
-        if (alternateTitle)
-            profileTreeElement.mainTitle = alternateTitle;
-        profile._profilesTreeElement = profileTreeElement;
-
-        sidebarParent.appendChild(profileTreeElement);
+        this._typeIdToSidebarSection[typeId].addProfileHeader(profile);;
         if (!this.visibleView || this.visibleView === this._launcherView)
-            this._showProfile(profile);
-
-        this.dispatchEventToListeners("profile added", {
-            type: typeId
-        });
+            this.showProfile(profile);
     },
 
     /**
@@ -730,35 +739,22 @@
      */
     _removeProfileHeader: function(profile)
     {
-        profile.dispose();
-        profile.profileType().removeProfile(profile);
+        if (profile.profileType()._profileBeingRecorded === profile)
+            this._profileBeingRecordedRemoved();
 
-        var sidebarParent = profile.profileType().treeElement;
-        var profileTitleKey = this._makeTitleKey(profile.title, profile.profileType().id);
-        var group = this._profileGroups[profileTitleKey];
-        if (group) {
-            group.splice(group.indexOf(profile), 1);
-            if (group.length === 1) {
-                // Move the last profile out of its group and remove the group.
-                var index = sidebarParent.children.indexOf(group._profilesTreeElement);
-                sidebarParent.insertChild(group[0]._profilesTreeElement, index);
-                group[0]._profilesTreeElement.small = false;
-                group[0]._profilesTreeElement.mainTitle = group[0].title;
-                sidebarParent.removeChild(group._profilesTreeElement);
-            }
-            if (group.length !== 0)
-                sidebarParent = group._profilesTreeElement;
-            else
-                delete this._profileGroups[profileTitleKey];
-        }
-        sidebarParent.removeChild(profile._profilesTreeElement);
+        var i = this._indexOfViewForProfile(profile);
+        if (i !== -1)
+            this._profileToView.splice(i, 1);
+
+        var profileType = profile.profileType();
+        var typeId = profileType.id;
+        var sectionIsEmpty = this._typeIdToSidebarSection[typeId].removeProfileHeader(profile);
 
         // No other item will be selected if there aren't any other profiles, so
         // make sure that view gets cleared when the last profile is removed.
-        if (!sidebarParent.children.length) {
+        if (sectionIsEmpty) {
             this.profilesItemTreeElement.select();
             this._showLauncherView();
-            sidebarParent.hidden = !this._singleProfileMode;
         }
     },
 
@@ -766,12 +762,12 @@
      * @param {?WebInspector.ProfileHeader} profile
      * @return {?WebInspector.View}
      */
-    _showProfile: function(profile)
+    showProfile: function(profile)
     {
         if (!profile || (profile.profileType().profileBeingRecorded() === profile) && !profile.profileType().hasTemporaryView())
             return null;
 
-        var view = profile.view(this);
+        var view = this._viewForProfile(profile);
         if (view === this.visibleView)
             return view;
 
@@ -779,12 +775,12 @@
 
         view.show(this.profileViews);
 
-        profile._profilesTreeElement._suppressOnSelect = true;
-        profile._profilesTreeElement.revealAndSelect();
-        delete profile._profilesTreeElement._suppressOnSelect;
-
         this.visibleView = view;
 
+        var profileTypeSection = this._typeIdToSidebarSection[profile.profileType().id];
+        var sidebarElement = profileTypeSection.sidebarElementForProfile(profile);
+        sidebarElement.revealAndSelect();
+
         this._profileViewStatusBarItemsContainer.removeChildren();
 
         var statusBarItems = view.statusBarItems;
@@ -801,13 +797,13 @@
      */
     showObject: function(snapshotObjectId, viewName)
     {
-        var heapProfiles = this.getProfileType(WebInspector.HeapSnapshotProfileType.TypeId).getProfiles();
+        var heapProfiles = WebInspector.ProfileTypeRegistry.instance.heapSnapshotProfileType.getProfiles();
         for (var i = 0; i < heapProfiles.length; i++) {
             var profile = heapProfiles[i];
             // FIXME: allow to choose snapshot if there are several options.
             if (profile.maxJSObjectId >= snapshotObjectId) {
-                this._showProfile(profile);
-                var view = profile.view(this);
+                this.showProfile(profile);
+                var view = this._viewForProfile(profile);
                 view.changeView(viewName, function() {
                     function didHighlightObject(found) {
                         if (!found)
@@ -821,38 +817,31 @@
     },
 
     /**
-     * @param {string} typeId
-     * @param {number} uid
+     * @param {!WebInspector.ProfileHeader} profile
+     * @return {!WebInspector.View}
      */
-    getProfile: function(typeId, uid)
+    _viewForProfile: function(profile)
     {
-        return this.getProfileType(typeId).getProfile(uid);
+        var index = this._indexOfViewForProfile(profile);
+        if (index !== -1)
+            return this._profileToView[index].view;
+        var view = profile.createView();
+        view.element.classList.add("profile-view");
+        this._profileToView.push({ profile: profile, view: view});
+        return view;
     },
 
     /**
-     * @param {!WebInspector.View} view
+     * @param {!WebInspector.ProfileHeader} profile
+     * @return {number}
      */
-    showView: function(view)
+    _indexOfViewForProfile: function(profile)
     {
-        this._showProfile(view.profile);
-    },
-
-    /**
-     * @param {string} typeId
-     */
-    getProfileType: function(typeId)
-    {
-        return this._profileTypesByIdMap[typeId];
-    },
-
-    /**
-     * @param {string} typeId
-     * @param {string} uid
-     * @return {?WebInspector.View}
-     */
-    showProfile: function(typeId, uid)
-    {
-        return this._showProfile(this.getProfile(typeId, Number(uid)));
+        for (var i = 0; i < this._profileToView.length; i++) {
+            if (this._profileToView[i].profile === profile)
+                return i;
+        }
+        return -1;
     },
 
     closeVisibleView: function()
@@ -874,6 +863,9 @@
         if (!visibleView)
             return;
 
+        /**
+         * @this {WebInspector.ProfilesPanel}
+         */
         function finishedCallback(view, searchMatches)
         {
             if (!searchMatches)
@@ -910,17 +902,6 @@
         this._searchableView.updateCurrentMatchIndex(this._searchResultsView.currentSearchResultIndex());
     },
 
-    /**
-     * @return {!Array.<!WebInspector.ProfileHeader>}
-     */
-    _getAllProfiles: function()
-    {
-        var profiles = [];
-        for (var typeId in this._profileTypesByIdMap)
-            profiles = profiles.concat(this._profileTypesByIdMap[typeId].getProfiles());
-        return profiles;
-    },
-
     searchCanceled: function()
     {
         if (this._searchResultsView) {
@@ -933,22 +914,14 @@
     },
 
     /**
-     * @param {!WebInspector.ProfileHeader} profile
-     * @param {number} done
-     * @param {number} total
-     */
-    _reportProfileProgress: function(profile, done, total)
-    {
-        profile.sidebarElement.subtitle = WebInspector.UIString("%.0f%", (done / total) * 100);
-        profile.sidebarElement.wait = true;
-    },
-
-    /** 
      * @param {!WebInspector.ContextMenu} contextMenu
      * @param {!Object} target
      */
     appendApplicableItems: function(event, contextMenu, target)
     {
+        if (!(target instanceof WebInspector.RemoteObject))
+            return;
+
         if (WebInspector.inspectorView.currentPanel() !== this)
             return;
 
@@ -957,15 +930,21 @@
         if (!objectId)
             return;
 
-        var heapProfiles = this.getProfileType(WebInspector.HeapSnapshotProfileType.TypeId).getProfiles();
+        var heapProfiles = WebInspector.ProfileTypeRegistry.instance.heapSnapshotProfileType.getProfiles();
         if (!heapProfiles.length)
             return;
 
+        /**
+         * @this {WebInspector.ProfilesPanel}
+         */
         function revealInView(viewName)
         {
             HeapProfilerAgent.getHeapObjectId(objectId, didReceiveHeapObjectId.bind(this, viewName));
         }
 
+        /**
+         * @this {WebInspector.ProfilesPanel}
+         */
         function didReceiveHeapObjectId(viewName, error, result)
         {
             if (WebInspector.inspectorView.currentPanel() !== this)
@@ -974,11 +953,173 @@
                 this.showObject(result, viewName);
         }
 
-        contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Reveal in Dominators view" : "Reveal in Dominators View"), revealInView.bind(this, "Dominators"));
+        if (WebInspector.settings.showAdvancedHeapSnapshotProperties.get())
+            contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Reveal in Dominators view" : "Reveal in Dominators View"), revealInView.bind(this, "Dominators"));
         contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Reveal in Summary view" : "Reveal in Summary View"), revealInView.bind(this, "Summary"));
     },
 
-    __proto__: WebInspector.Panel.prototype
+    __proto__: WebInspector.PanelWithSidebarTree.prototype
+}
+
+
+/**
+ * @constructor
+ * @extends {WebInspector.SidebarSectionTreeElement}
+ * @param {!WebInspector.ProfileType} profileType
+ */
+WebInspector.ProfileTypeSidebarSection = function(profileType)
+{
+    WebInspector.SidebarSectionTreeElement.call(this, profileType.treeItemTitle, null, true);
+    this._profileTreeElements = [];
+    this._profileGroups = {};
+    this.hidden = true;
+}
+
+/**
+ * @constructor
+ */
+WebInspector.ProfileTypeSidebarSection.ProfileGroup = function()
+{
+    this.profileSidebarTreeElements = [];
+    this.sidebarTreeElement = null;
+}
+
+WebInspector.ProfileTypeSidebarSection.prototype = {
+    /**
+     * @param {!WebInspector.ProfileHeader} profile
+     */
+    addProfileHeader: function(profile)
+    {
+        this.hidden = false;
+        var profileType = profile.profileType();
+        var sidebarParent = this;
+        var profileTreeElement = profile.createSidebarTreeElement();
+        this._profileTreeElements.push(profileTreeElement);
+
+        if (!profile.fromFile() && profileType.profileBeingRecorded() !== profile) {
+            var profileTitle = profile.title;
+            var group = this._profileGroups[profileTitle];
+            if (!group) {
+                group = new WebInspector.ProfileTypeSidebarSection.ProfileGroup();
+                this._profileGroups[profileTitle] = group;
+            }
+            group.profileSidebarTreeElements.push(profileTreeElement);
+
+            var groupSize = group.profileSidebarTreeElements.length;
+            if (groupSize === 2) {
+                // Make a group TreeElement now that there are 2 profiles.
+                group.sidebarTreeElement = new WebInspector.ProfileGroupSidebarTreeElement(profile.title);
+
+                var firstProfileTreeElement = group.profileSidebarTreeElements[0];
+                // Insert at the same index for the first profile of the group.
+                var index = this.children.indexOf(firstProfileTreeElement);
+                this.insertChild(group.sidebarTreeElement, index);
+
+                // Move the first profile to the group.
+                var selected = firstProfileTreeElement.selected;
+                this.removeChild(firstProfileTreeElement);
+                group.sidebarTreeElement.appendChild(firstProfileTreeElement);
+                if (selected)
+                    firstProfileTreeElement.revealAndSelect();
+
+                firstProfileTreeElement.small = true;
+                firstProfileTreeElement.mainTitle = WebInspector.UIString("Run %d", 1);
+
+                this.treeOutline.element.classList.add("some-expandable");
+            }
+
+            if (groupSize >= 2) {
+                sidebarParent = group.sidebarTreeElement;
+                profileTreeElement.small = true;
+                profileTreeElement.mainTitle = WebInspector.UIString("Run %d", groupSize);
+            }
+        }
+
+        sidebarParent.appendChild(profileTreeElement);
+    },
+
+    /**
+     * @param {!WebInspector.ProfileHeader} profile
+     * @return {boolean}
+     */
+    removeProfileHeader: function(profile)
+    {
+        var index = this._sidebarElementIndex(profile);
+        if (index === -1)
+            return false;
+        var profileTreeElement = this._profileTreeElements[index];
+        this._profileTreeElements.splice(index, 1);
+
+        var sidebarParent = this;
+        var group = this._profileGroups[profile.title];
+        if (group) {
+            var groupElements = group.profileSidebarTreeElements;
+            groupElements.splice(groupElements.indexOf(profileTreeElement), 1);
+            if (groupElements.length === 1) {
+                // Move the last profile out of its group and remove the group.
+                var pos = sidebarParent.children.indexOf(group.sidebarTreeElement);
+                this.insertChild(groupElements[0], pos);
+                groupElements[0].small = false;
+                groupElements[0].mainTitle = group.sidebarTreeElement.title;
+                this.removeChild(group.sidebarTreeElement);
+            }
+            if (groupElements.length !== 0)
+                sidebarParent = group.sidebarTreeElement;
+        }
+        sidebarParent.removeChild(profileTreeElement);
+        profileTreeElement.dispose();
+
+        if (this.children.length)
+            return false;
+        this.hidden = true;
+        return true;
+    },
+
+    /**
+     * @param {!WebInspector.ProfileHeader} profile
+     * @return {?WebInspector.ProfileSidebarTreeElement}
+     */
+    sidebarElementForProfile: function(profile)
+    {
+        var index = this._sidebarElementIndex(profile);
+        return index === -1 ? null : this._profileTreeElements[index];
+    },
+
+    /**
+     * @param {!WebInspector.ProfileHeader} profile
+     * @return {number}
+     */
+    _sidebarElementIndex: function(profile)
+    {
+        var elements = this._profileTreeElements;
+        for (var i = 0; i < elements.length; i++) {
+            if (elements[i].profile === profile)
+                return i;
+        }
+        return -1;
+    },
+
+    __proto__: WebInspector.SidebarSectionTreeElement.prototype
+}
+
+
+/**
+ * @constructor
+ * @implements {WebInspector.ContextMenu.Provider}
+ */
+WebInspector.ProfilesPanel.ContextMenuProvider = function()
+{
+}
+
+WebInspector.ProfilesPanel.ContextMenuProvider.prototype = {
+    /**
+     * @param {!WebInspector.ContextMenu} contextMenu
+     * @param {!Object} target
+     */
+    appendApplicableItems: function(event, contextMenu, target)
+    {
+        WebInspector.panel("profiles").appendApplicableItems(event, contextMenu, target);
+    }
 }
 
 /**
@@ -990,36 +1131,60 @@
 WebInspector.ProfileSidebarTreeElement = function(profile, className)
 {
     this.profile = profile;
-    WebInspector.SidebarTreeElement.call(this, className, "", "", profile, false);
+    WebInspector.SidebarTreeElement.call(this, className, profile.title, "", profile, false);
     this.refreshTitles();
+    profile.addEventListener(WebInspector.ProfileHeader.Events.UpdateStatus, this._updateStatus, this);
+    if (profile.canSaveToFile())
+        this._createSaveLink();
+    else
+        profile.addEventListener(WebInspector.ProfileHeader.Events.ProfileReceived, this._onProfileReceived, this);
 }
 
 WebInspector.ProfileSidebarTreeElement.prototype = {
+    _createSaveLink: function()
+    {
+        this._saveLinkElement = this.titleContainer.createChild("span", "save-link");
+        this._saveLinkElement.textContent = WebInspector.UIString("Save");
+        this._saveLinkElement.addEventListener("click", this._saveProfile.bind(this), false);
+    },
+
+    _onProfileReceived: function(event)
+    {
+        this._createSaveLink();
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _updateStatus: function(event)
+    {
+        var statusUpdate = event.data;
+        if (statusUpdate.subtitle !== null)
+            this.subtitle = statusUpdate.subtitle;
+        this.wait = !!statusUpdate.wait;
+        this.refreshTitles();
+    },
+
+    dispose: function()
+    {
+        this.profile.removeEventListener(WebInspector.ProfileHeader.Events.UpdateStatus, this._updateStatus, this);
+        this.profile.removeEventListener(WebInspector.ProfileHeader.Events.ProfileReceived, this._onProfileReceived, this);
+    },
+
     onselect: function()
     {
-        if (!this._suppressOnSelect)
-            this.treeOutline.panel._showProfile(this.profile);
+        WebInspector.panels.profiles.showProfile(this.profile);
     },
 
+    /**
+     * @return {boolean}
+     */
     ondelete: function()
     {
-        this.treeOutline.panel._removeProfileHeader(this.profile);
+        this.profile.profileType().removeProfile(this.profile);
         return true;
     },
 
-    get mainTitle()
-    {
-        if (this._mainTitle)
-            return this._mainTitle;
-        return this.profile.title;
-    },
-
-    set mainTitle(x)
-    {
-        this._mainTitle = x;
-        this.refreshTitles();
-    },
-
     /**
      * @param {!Event} event
      * @param {!WebInspector.ProfilesPanel} panel
@@ -1036,27 +1201,30 @@
         contextMenu.show();
     },
 
+    _saveProfile: function(event)
+    {
+        this.profile.saveToFile();
+    },
+
     __proto__: WebInspector.SidebarTreeElement.prototype
 }
 
 /**
  * @constructor
  * @extends {WebInspector.SidebarTreeElement}
- * @param {!WebInspector.ProfilesPanel} panel
  * @param {string} title
  * @param {string=} subtitle
  */
-WebInspector.ProfileGroupSidebarTreeElement = function(panel, title, subtitle)
+WebInspector.ProfileGroupSidebarTreeElement = function(title, subtitle)
 {
     WebInspector.SidebarTreeElement.call(this, "profile-group-sidebar-tree-item", title, subtitle, null, true);
-    this._panel = panel;
 }
 
 WebInspector.ProfileGroupSidebarTreeElement.prototype = {
     onselect: function()
     {
         if (this.children.length > 0)
-            this._panel._showProfile(this.children[this.children.length - 1].profile);
+            WebInspector.panels.profiles.showProfile(this.children[this.children.length - 1].profile);
     },
 
     __proto__: WebInspector.SidebarTreeElement.prototype
@@ -1090,71 +1258,17 @@
 }
 
 
-/**
- * @constructor
- * @extends {WebInspector.ProfilesPanel}
- */
-WebInspector.CPUProfilerPanel = function()
-{
-    WebInspector.ProfilesPanel.call(this, "cpu-profiler", new WebInspector.CPUProfileType());
-}
-
-WebInspector.CPUProfilerPanel.prototype = {
-    __proto__: WebInspector.ProfilesPanel.prototype
-}
-
-
-/**
- * @constructor
- * @extends {WebInspector.ProfilesPanel}
- */
-WebInspector.HeapProfilerPanel = function()
-{
-    var heapSnapshotProfileType = new WebInspector.HeapSnapshotProfileType();
-    WebInspector.ProfilesPanel.call(this, "heap-profiler", heapSnapshotProfileType);
-    this._singleProfileMode = false;
-    this._registerProfileType(new WebInspector.TrackingHeapSnapshotProfileType(this));
-    this._launcherView.addEventListener(WebInspector.MultiProfileLauncherView.EventTypes.ProfileTypeSelected, this._onProfileTypeSelected, this);
-    this._launcherView._profileTypeChanged(heapSnapshotProfileType);
-}
-
-WebInspector.HeapProfilerPanel.prototype = {
-    _createLauncherView: function()
-    {
-        return new WebInspector.MultiProfileLauncherView(this);
-    },
-
-    __proto__: WebInspector.ProfilesPanel.prototype
-}
-
-
-/**
- * @constructor
- * @extends {WebInspector.ProfilesPanel}
- */
-WebInspector.CanvasProfilerPanel = function()
-{
-    WebInspector.ProfilesPanel.call(this, "canvas-profiler", new WebInspector.CanvasProfileType());
-}
-
-WebInspector.CanvasProfilerPanel.prototype = {
-    __proto__: WebInspector.ProfilesPanel.prototype
-}
-
-
 importScript("ProfileDataGridTree.js");
-importScript("AllocationProfile.js");
 importScript("BottomUpProfileDataGridTree.js");
 importScript("CPUProfileView.js");
-importScript("HeapSnapshot.js");
+importScript("HeapSnapshotCommon.js");
+importScript("HeapSnapshotProxy.js");
 importScript("HeapSnapshotDataGrids.js");
 importScript("HeapSnapshotGridNodes.js");
-importScript("HeapSnapshotLoader.js");
-importScript("HeapSnapshotProxy.js");
 importScript("HeapSnapshotView.js");
-importScript("HeapSnapshotWorkerDispatcher.js");
-importScript("JSHeapSnapshot.js");
 importScript("ProfileLauncherView.js");
 importScript("TopDownProfileDataGridTree.js");
 importScript("CanvasProfileView.js");
 importScript("CanvasReplayStateView.js");
+
+WebInspector.ProfileTypeRegistry.instance = new WebInspector.ProfileTypeRegistry();
diff --git a/Source/devtools/front_end/ProfilesPanelDescriptor.js b/Source/devtools/front_end/ProfilesPanelDescriptor.js
deleted file mode 100644
index cd37d52..0000000
--- a/Source/devtools/front_end/ProfilesPanelDescriptor.js
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2013 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:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
- * OR ITS 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.
- */
-
-/**
- * @constructor
- * @extends {WebInspector.PanelDescriptor}
- */
-WebInspector.ProfilesPanelDescriptor = function()
-{
-    WebInspector.PanelDescriptor.call(this, "profiles", WebInspector.UIString("Profiles"), "ProfilesPanel", "ProfilesPanel.js");
-}
-
-WebInspector.ProfilesPanelDescriptor.prototype = {
-    registerShortcuts: function()
-    {
-        var section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Profiles Panel"));
-        section.addAlternateKeys(WebInspector.ProfilesPanelDescriptor.ShortcutKeys.StartStopRecording, WebInspector.UIString("Start/stop recording"));
-    },
-
-    __proto__: WebInspector.PanelDescriptor.prototype
-}
-
-WebInspector.ProfilesPanelDescriptor.ShortcutKeys = {
-    StartStopRecording: [
-        WebInspector.KeyboardShortcut.makeDescriptor("e", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ]
-}
-
-WebInspector.ProfilesPanelDescriptor.ProfileURLRegExp = /webkit-profile:\/\/(.+)\/(.+)/;
-
-/**
- * @param {string} title
- * @return {string}
- */
-WebInspector.ProfilesPanelDescriptor.resolveProfileTitle = function(title)
-{
-    return title;
-}
-
-/**
- * @param {?Event} event
- */
-WebInspector.ProfilesPanelDescriptor._openCPUProfile = function(event)
-{
-    event.preventDefault();
-    var panel = WebInspector.showPanel("profiles");
-    var link = /** @type {!Element} */ (event.target);
-    var view = /** @type {!WebInspector.CPUProfileView} */ (panel.showProfile("CPU", link.profileUID));
-    if (!view)
-        return;
-    if (typeof link.timeLeft === "number" && typeof link.timeRight === "number")
-        view.selectRange(link.timeLeft, link.timeRight);
-}
-
-/**
- * @param {number} uid
- * @param {string} linkText
- * @param {number=} timeLeft
- * @param {number=} timeRight
- * @param {string=} tooltipText
- * @return {!Element}
- */
-WebInspector.ProfilesPanelDescriptor.linkifyCPUProfile = function(uid, linkText, timeLeft, timeRight, tooltipText)
-{
-    var link = document.createElement("a");
-    link.innerText = linkText;
-    link.href = WebInspector.UIString("show CPU profile");
-    link.target = "_blank";
-    if (tooltipText)
-        link.title = tooltipText;
-    link.timeLeft = timeLeft;
-    link.timeRight = timeRight;
-    link.profileUID = uid;
-    link.addEventListener("click", WebInspector.ProfilesPanelDescriptor._openCPUProfile, true);
-    return link;
-}
-
-/**
- * @constructor
- * @extends {WebInspector.Object}
- */
-WebInspector.ProfileManager = function()
-{
-   this._startedProfiles = {};
-};
-
-WebInspector.ProfileManager.EventTypes = {
-    ProfileStarted: "profile-started",
-    ProfileStopped: "profile-stopped"
-};
-
-WebInspector.ProfileManager.prototype = {
-    /**
-     * @param {string} profileTypeId
-     * @return {boolean}
-     */
-    isStarted: function(profileTypeId)
-    {
-        return profileTypeId in this._startedProfiles;
-    },
-
-    /**
-     * @param {string} profileTypeId
-     */
-    notifyStarted: function(profileTypeId)
-    {
-        this._startedProfiles[profileTypeId] = true;
-        this.dispatchEventToListeners(WebInspector.ProfileManager.EventTypes.ProfileStarted, profileTypeId);
-    },
-
-    /**
-     * @param {string} profileTypeId
-     */
-    notifyStoped: function(profileTypeId)
-    {
-        delete this._startedProfiles[profileTypeId];
-        this.dispatchEventToListeners(WebInspector.ProfileManager.EventTypes.ProfileStopped, profileTypeId);
-    },
-
-    __proto__: WebInspector.Object.prototype
-};
-
-/**
- * @type {?WebInspector.ProfileManager}
- */
-WebInspector.profileManager = null;
\ No newline at end of file
diff --git a/Source/devtools/front_end/Progress.js b/Source/devtools/front_end/Progress.js
index ce709eb..dd4b1cc 100644
--- a/Source/devtools/front_end/Progress.js
+++ b/Source/devtools/front_end/Progress.js
@@ -109,6 +109,7 @@
 
     /**
      * @param {number=} weight
+     * @return {!WebInspector.SubProgress}
      */
     createSubProgress: function(weight)
     {
diff --git a/Source/devtools/front_end/ProgressIndicator.js b/Source/devtools/front_end/ProgressIndicator.js
index 58d4616..0224f47 100644
--- a/Source/devtools/front_end/ProgressIndicator.js
+++ b/Source/devtools/front_end/ProgressIndicator.js
@@ -81,6 +81,9 @@
         this.dispatchEventToListeners(WebInspector.Progress.Events.Canceled);
     },
 
+    /**
+     * @return {boolean}
+     */
     isCanceled: function()
     {
         return this._isCanceled;
diff --git a/Source/devtools/front_end/PropertiesSidebarPane.js b/Source/devtools/front_end/PropertiesSidebarPane.js
index 20f69e5..46005f2 100644
--- a/Source/devtools/front_end/PropertiesSidebarPane.js
+++ b/Source/devtools/front_end/PropertiesSidebarPane.js
@@ -50,10 +50,17 @@
 
         WebInspector.RemoteObject.resolveNode(node, WebInspector.PropertiesSidebarPane._objectGroupName, nodeResolved.bind(this));
 
+        /**
+         * @this {WebInspector.PropertiesSidebarPane}
+         */
         function nodeResolved(object)
         {
             if (!object)
                 return;
+
+            /**
+             * @this {WebInspector.PropertiesSidebarPane}
+             */
             function protoList()
             {
                 var proto = this;
@@ -69,6 +76,9 @@
             object.release();
         }
 
+        /**
+         * @this {WebInspector.PropertiesSidebarPane}
+         */
         function nodePrototypesReady(object, wasThrown)
         {
             if (!object || wasThrown)
@@ -76,6 +86,9 @@
             object.getOwnProperties(fillSection.bind(this));
         }
 
+        /**
+         * @this {WebInspector.PropertiesSidebarPane}
+         */
         function fillSection(prototypes)
         {
             if (!prototypes)
diff --git a/Source/devtools/front_end/RemoteObject.js b/Source/devtools/front_end/RemoteObject.js
index 9a856c4..4e0b141 100644
--- a/Source/devtools/front_end/RemoteObject.js
+++ b/Source/devtools/front_end/RemoteObject.js
@@ -185,6 +185,10 @@
      */
     getProperty: function(propertyPath, callback)
     {
+        /**
+         * @param {string} arrayStr
+         * @this {Object}
+         */
         function remoteFunction(arrayStr)
         {
             var result = this;
@@ -259,6 +263,7 @@
          * @param {?Protocol.Error} error
          * @param {!RuntimeAgent.RemoteObject} result
          * @param {boolean=} wasThrown
+         * @this {WebInspector.RemoteObject}
          */
         function evaluatedCallback(error, result, wasThrown)
         {
@@ -521,6 +526,7 @@
         /**
          * @param {?Array.<!WebInspector.RemoteObjectProperty>} properties
          * @param {?Array.<!WebInspector.RemoteObjectProperty>} internalProperties
+         * @this {WebInspector.ScopeRemoteObject}
          */
         function wrappedCallback(properties, internalProperties)
         {
@@ -558,6 +564,7 @@
 
         /**
          * @param {?Protocol.Error} error
+         * @this {WebInspector.ScopeRemoteObject}
          */
         function setVariableValueCallback(error)
         {
@@ -622,9 +629,12 @@
 }
 
 WebInspector.RemoteObjectProperty.prototype = {
+    /**
+     * @return {boolean}
+     */
     isAccessorProperty: function()
     {
-        return this.getter || this.setter;
+        return !!(this.getter || this.setter);
     }
 };
 
@@ -801,6 +811,10 @@
             return [];
         var value = /** @type {!Object} */ (this._value);
 
+        /**
+         * @param {string} propName
+         * @this {WebInspector.LocalJSONObject}
+         */
         function buildProperty(propName)
         {
             return new WebInspector.RemoteObjectProperty(propName, new WebInspector.LocalJSONObject(this._value[propName]));
@@ -867,5 +881,7 @@
         }
 
         callback(result);
-    }
+    },
+
+    __proto__: WebInspector.RemoteObject.prototype
 }
diff --git a/Source/devtools/front_end/RenderingOptionsView.js b/Source/devtools/front_end/RenderingOptionsView.js
index 2c2a393..ddab696 100644
--- a/Source/devtools/front_end/RenderingOptionsView.js
+++ b/Source/devtools/front_end/RenderingOptionsView.js
@@ -38,12 +38,12 @@
     this.registerRequiredCSS("helpScreen.css");
     this.element.classList.add("help-indent-labels");
 
-    var div = this.element.createChild("div", "settings-tab help-content help-container");
-    div.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show paint rectangles"), WebInspector.settings.showPaintRects));
-    div.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show composited layer borders"), WebInspector.settings.showDebugBorders));
-    div.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show FPS meter"), WebInspector.settings.showFPSCounter));
-    div.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Enable continuous page repainting"), WebInspector.settings.continuousPainting));
-    var child = WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show potential scroll bottlenecks"), WebInspector.settings.showScrollBottleneckRects);
+    var div = this.element.createChild("div", "settings-tab help-content help-container help-no-columns");
+    div.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show paint rectangles"), WebInspector.settings.showPaintRects));
+    div.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show composited layer borders"), WebInspector.settings.showDebugBorders));
+    div.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show FPS meter"), WebInspector.settings.showFPSCounter));
+    div.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Enable continuous page repainting"), WebInspector.settings.continuousPainting));
+    var child = WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show potential scroll bottlenecks"), WebInspector.settings.showScrollBottleneckRects);
     child.title = WebInspector.UIString("Shows areas of the page that slow down scrolling:\nTouch and mousewheel event listeners can delay scrolling.\nSome areas need to repaint their content when scrolled.");
     div.appendChild(child);
 }
diff --git a/Source/devtools/front_end/RequestHTMLView.js b/Source/devtools/front_end/RequestHTMLView.js
index 6e7ef88..5d05e9a 100644
--- a/Source/devtools/front_end/RequestHTMLView.js
+++ b/Source/devtools/front_end/RequestHTMLView.js
@@ -42,6 +42,9 @@
 }
 
 WebInspector.RequestHTMLView.prototype = {
+    /**
+     * @return {boolean}
+     */
     hasContent: function()
     {
         return true;
diff --git a/Source/devtools/front_end/RequestHeadersView.js b/Source/devtools/front_end/RequestHeadersView.js
index 30d0b4c..ff401c8 100644
--- a/Source/devtools/front_end/RequestHeadersView.js
+++ b/Source/devtools/front_end/RequestHeadersView.js
@@ -48,6 +48,11 @@
     this._headersTreeOutline = new TreeOutline(this._headersListElement);
     this._headersTreeOutline.expandTreeElementsWhenArrowing = true;
 
+    this._remoteAddressTreeElement = new TreeElement("", null, false);
+    this._remoteAddressTreeElement.selectable = false;
+    this._remoteAddressTreeElement.hidden = true;
+    this._headersTreeOutline.appendChild(this._remoteAddressTreeElement);
+
     this._urlTreeElement = new TreeElement("", null, false);
     this._urlTreeElement.selectable = false;
     this._headersTreeOutline.appendChild(this._urlTreeElement);
@@ -98,6 +103,7 @@
 
     wasShown: function()
     {
+        this._request.addEventListener(WebInspector.NetworkRequest.Events.RemoteAddressChanged, this._refreshRemoteAddress, this);
         this._request.addEventListener(WebInspector.NetworkRequest.Events.RequestHeadersChanged, this._refreshRequestHeaders, this);
         this._request.addEventListener(WebInspector.NetworkRequest.Events.ResponseHeadersChanged, this._refreshResponseHeaders, this);
         this._request.addEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._refreshHTTPInformation, this);
@@ -107,10 +113,12 @@
         this._refreshRequestHeaders();
         this._refreshResponseHeaders();
         this._refreshHTTPInformation();
+        this._refreshRemoteAddress();
     },
 
     willHide: function()
     {
+        this._request.removeEventListener(WebInspector.NetworkRequest.Events.RemoteAddressChanged, this._refreshRemoteAddress, this);
         this._request.removeEventListener(WebInspector.NetworkRequest.Events.RequestHeadersChanged, this._refreshRequestHeaders, this);
         this._request.removeEventListener(WebInspector.NetworkRequest.Events.ResponseHeadersChanged, this._refreshResponseHeaders, this);
         this._request.removeEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._refreshHTTPInformation, this);
@@ -234,6 +242,7 @@
 
         /**
          * @param {?Event} event
+         * @this {WebInspector.RequestHeadersView}
          */
         function toggleViewSource(event)
         {
@@ -281,6 +290,7 @@
 
         /**
          * @param {?Event} event
+         * @this {WebInspector.RequestHeadersView}
          */
         function toggleViewSource(event)
         {
@@ -446,6 +456,15 @@
         this._refreshHeadersTitle(title, headersTreeElement, count);
     },
 
+    _refreshRemoteAddress: function()
+    {
+        var remoteAddress = this._request.remoteAddress();
+        var treeElement = this._remoteAddressTreeElement;
+        treeElement.hidden = !remoteAddress;
+        if (remoteAddress)
+            treeElement.title = this._formatHeader(WebInspector.UIString("Remote Address"), remoteAddress);
+    },
+
     /**
      * @param {?Event} event
      */
diff --git a/Source/devtools/front_end/RequestJSONView.js b/Source/devtools/front_end/RequestJSONView.js
index 153d331..34d4b3d 100644
--- a/Source/devtools/front_end/RequestJSONView.js
+++ b/Source/devtools/front_end/RequestJSONView.js
@@ -78,6 +78,9 @@
 }
 
 WebInspector.RequestJSONView.prototype = {
+    /**
+     * @return {boolean}
+     */
     hasContent: function()
     {
         return true;
diff --git a/Source/devtools/front_end/RequestPreviewView.js b/Source/devtools/front_end/RequestPreviewView.js
index d5237e0..c9eb937 100644
--- a/Source/devtools/front_end/RequestPreviewView.js
+++ b/Source/devtools/front_end/RequestPreviewView.js
@@ -83,7 +83,8 @@
     _createPreviewView: function()
     {
         if (this.request.content) {
-            if (this.request.mimeType === "application/json") {
+            var jsonMediaTypeRE = /^application\/[^;]*\+json/;
+            if (this.request.mimeType === "application/json" || jsonMediaTypeRE.test(this.request.mimeType)) {
                 var jsonView = this._jsonView();
                 if (jsonView)
                     return jsonView;
diff --git a/Source/devtools/front_end/RequestTimingView.js b/Source/devtools/front_end/RequestTimingView.js
index 5662596..d3303f7 100644
--- a/Source/devtools/front_end/RequestTimingView.js
+++ b/Source/devtools/front_end/RequestTimingView.js
@@ -45,6 +45,7 @@
     wasShown: function()
     {
         this._request.addEventListener(WebInspector.NetworkRequest.Events.TimingChanged, this._refresh, this);
+        this._request.addEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._refresh, this);
 
         if (!this._request.timing) {
             if (!this._emptyView) {
@@ -66,6 +67,7 @@
     willHide: function()
     {
         this._request.removeEventListener(WebInspector.NetworkRequest.Events.TimingChanged, this._refresh, this);
+        this._request.removeEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._refresh, this);
     },
 
     _refresh: function()
@@ -97,8 +99,20 @@
         rows.push(row);
     }
 
+    function firstPositive(numbers)
+    {
+        for (var i = 0; i < numbers.length; ++i) {
+            if (numbers[i] > 0)
+                return numbers[i];
+        }
+        return undefined;
+    }
+
     var timing = request.timing;
-    var blocking = timing.dnsStart > 0 ? timing.dnsStart : timing.connectStart > 0 ? timing.connectStart : timing.sendStart;
+    var blocking = firstPositive([timing.dnsStart, timing.connectStart, timing.sendStart]);
+    var endTime = firstPositive([request.endTime, request.responseReceivedTime, timing.requestTime]);
+    var total = (endTime - timing.requestTime) * 1000;
+
     if (blocking > 0)
         addRow(WebInspector.UIString("Blocking"), "blocking", 0, blocking);
 
@@ -116,10 +130,11 @@
 
     addRow(WebInspector.UIString("Sending"), "sending", timing.sendStart, timing.sendEnd);
     addRow(WebInspector.UIString("Waiting"), "waiting", timing.sendEnd, timing.receiveHeadersEnd);
-    addRow(WebInspector.UIString("Receiving"), "receiving", (request.responseReceivedTime - timing.requestTime) * 1000, (request.endTime - timing.requestTime) * 1000);
+
+    if (request.endTime !== -1)
+        addRow(WebInspector.UIString("Receiving"), "receiving", (request.responseReceivedTime - timing.requestTime) * 1000, total);
 
     const chartWidth = 200;
-    var total = (request.endTime - timing.requestTime) * 1000;
     var scale = chartWidth / total;
 
     for (var i = 0; i < rows.length; ++i) {
@@ -156,5 +171,12 @@
 
         tr.appendChild(td);
     }
+
+    if (!request.finished) {
+        var cell = tableElement.createChild("tr").createChild("td", "caution");
+        cell.colSpan = 2;
+        cell.createTextChild(WebInspector.UIString("CAUTION: request is not finished yet!"));
+    }
+
     return tableElement;
 }
diff --git a/Source/devtools/front_end/RequestView.js b/Source/devtools/front_end/RequestView.js
index da13294..fcf7b42 100644
--- a/Source/devtools/front_end/RequestView.js
+++ b/Source/devtools/front_end/RequestView.js
@@ -43,6 +43,9 @@
 }
 
 WebInspector.RequestView.prototype = {
+    /**
+     * @return {boolean}
+     */
     hasContent: function()
     {
         return false;
diff --git a/Source/devtools/front_end/Resource.js b/Source/devtools/front_end/Resource.js
index c67f4ad..01188ed 100644
--- a/Source/devtools/front_end/Resource.js
+++ b/Source/devtools/front_end/Resource.js
@@ -241,6 +241,9 @@
             this._innerRequestContent();
     },
 
+    /**
+     * @return {string}
+     */
     canonicalMimeType: function()
     {
         return this.type.canonicalMimeType() || this.mimeType;
@@ -264,24 +267,10 @@
         }
 
         if (this.type === WebInspector.resourceTypes.Document) {
-            this.requestContent(documentContentLoaded);
+            callback([]);
             return;
         }
 
-        /**
-         * @param {?string} content
-         */
-        function documentContentLoaded(content)
-        {
-            if (content === null) {
-                callback([]);
-                return;
-            }
-
-            var result = WebInspector.ContentProvider.performSearchInContent(content, query, caseSensitive, isRegex);
-            callback(result);
-        }
-
         if (this.frameId)
             PageAgent.searchInResource(this.frameId, this.url, query, caseSensitive, isRegex, callbackWrapper);
         else
@@ -295,6 +284,7 @@
     {
         /**
          * @param {?string} content
+         * @this {WebInspector.Resource}
          */
         function onResourceContent(content)
         {
@@ -325,11 +315,12 @@
          * @param {?Protocol.Error} error
          * @param {?string} content
          * @param {boolean} contentEncoded
+         * @this {WebInspector.Resource}
          */
         function contentLoaded(error, content, contentEncoded)
         {
             if (error || content === null) {
-                loadFallbackContent.call(this, error);
+                replyWithContent.call(this, null, false);
                 return;
             }
             replyWithContent.call(this, content, contentEncoded);
@@ -338,6 +329,7 @@
         /**
          * @param {?string} content
          * @param {boolean} contentEncoded
+         * @this {WebInspector.Resource}
          */
         function replyWithContent(content, contentEncoded)
         {
@@ -354,46 +346,12 @@
          * @param {?Protocol.Error} error
          * @param {string} content
          * @param {boolean} contentEncoded
+         * @this {WebInspector.Resource}
          */
         function resourceContentLoaded(error, content, contentEncoded)
         {
             contentLoaded.call(this, error, content, contentEncoded);
         }
-        
-        /**
-         * @param {?Protocol.Error} error
-         */
-        function loadFallbackContent(error)
-        {
-            var scripts = WebInspector.debuggerModel.scriptsForSourceURL(this.url);
-            if (!scripts.length) {
-                console.error("Resource content request failed: " + error);
-                replyWithContent.call(this, null, false);
-                return;
-            }
-
-            var contentProvider;
-            if (this.type === WebInspector.resourceTypes.Document)
-                contentProvider = new WebInspector.ConcatenatedScriptsContentProvider(scripts);
-            else if (this.type === WebInspector.resourceTypes.Script)
-                contentProvider = scripts[0];
-
-            if (!contentProvider) {
-                console.error("Resource content request failed: " + error);
-                replyWithContent.call(this, null, false);
-                return;
-            }
-
-            contentProvider.requestContent(fallbackContentLoaded.bind(this));
-        }
-
-        /**
-         * @param {?string} content
-         */
-        function fallbackContentLoaded(content)
-        {
-            replyWithContent.call(this, content, false);
-        }
 
         if (this.request) {
             this.request.requestContent(requestContentLoaded.bind(this));
@@ -402,6 +360,7 @@
 
         /**
          * @param {?string} content
+         * @this {WebInspector.Resource}
          */
         function requestContentLoaded(content)
         {
diff --git a/Source/devtools/front_end/ResourceScriptMapping.js b/Source/devtools/front_end/ResourceScriptMapping.js
index ffbbd47..f76c136 100644
--- a/Source/devtools/front_end/ResourceScriptMapping.js
+++ b/Source/devtools/front_end/ResourceScriptMapping.js
@@ -31,14 +31,16 @@
 /**
  * @constructor
  * @implements {WebInspector.ScriptSourceMapping}
+ * @param {!WebInspector.DebuggerModel} debuggerModel
  * @param {!WebInspector.Workspace} workspace
  */
-WebInspector.ResourceScriptMapping = function(workspace)
+WebInspector.ResourceScriptMapping = function(debuggerModel, workspace)
 {
+    this._debuggerModel = debuggerModel;
     this._workspace = workspace;
     this._workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAddedToWorkspace, this);
 
-    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
+    debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
     this._initialize();
 }
 
@@ -50,7 +52,7 @@
     rawLocationToUILocation: function(rawLocation)
     {
         var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (rawLocation);
-        var script = WebInspector.debuggerModel.scriptForId(debuggerModelLocation.scriptId);
+        var script = this._debuggerModel.scriptForId(debuggerModelLocation.scriptId);
         var uiSourceCode = this._workspaceUISourceCodeForScript(script);
         if (!uiSourceCode)
             return null;
@@ -70,7 +72,7 @@
     {
         var scripts = this._scriptsForUISourceCode(uiSourceCode);
         console.assert(scripts.length);
-        return WebInspector.debuggerModel.createRawLocation(scripts[0], lineNumber, columnNumber);
+        return this._debuggerModel.createRawLocation(scripts[0], lineNumber, columnNumber);
     },
 
     /**
@@ -205,6 +207,7 @@
     {
         /**
          * @param {!Array.<!WebInspector.Script>} scripts
+         * @this {WebInspector.ResourceScriptMapping}
          */
         function unbindUISourceCodesForScripts(scripts)
         {
@@ -283,6 +286,7 @@
         /**
          * @param {?string} error
          * @param {!DebuggerAgent.SetScriptSourceError=} errorData
+         * @this {WebInspector.ResourceScriptFile}
          */
         function innerCallback(error, errorData)
         {
@@ -299,9 +303,7 @@
         if (!this._script)
             return;
         var source = this._uiSourceCode.workingCopy();
-        if (this._script.hasSourceURL && !this._sourceEndsWithSourceURL(source))
-            source += "\n //# sourceURL=" + this._script.sourceURL;
-        WebInspector.debuggerModel.setScriptSource(this._script.scriptId, source, innerCallback.bind(this));
+        this._resourceScriptMapping._debuggerModel.setScriptSource(this._script.scriptId, source, innerCallback.bind(this));
     },
 
     /**
@@ -317,29 +319,7 @@
             return false;
         if (typeof this._scriptSource === "undefined")
             return false;
-        return !this._sourceMatchesScriptSource(this._uiSourceCode.workingCopy(), this._scriptSource);
-    },
-
-    /**
-     * @param {string} source
-     * @param {string} scriptSource
-     * @return {boolean}
-     */
-    _sourceMatchesScriptSource: function(source, scriptSource)
-    {
-        if (!scriptSource.startsWith(source))
-            return false;
-        var scriptSourceTail = scriptSource.substr(source.length).trim();
-        return !scriptSourceTail || !!scriptSourceTail.match(/^\/\/[@#]\ssourceURL=\s*(\S*?)\s*$/m);
-    },
-
-    /**
-     * @param {string} source
-     * @return {boolean}
-     */
-    _sourceEndsWithSourceURL: function(source)
-    {
-        return !!source.match(/\/\/[@#]\ssourceURL=\s*(\S*?)\s*$/m);
+        return this._uiSourceCode.workingCopy() !== this._scriptSource;
     },
 
     /**
@@ -410,6 +390,7 @@
 
         /**
          * @param {?string} source
+         * @this {WebInspector.ResourceScriptFile}
          */
         function callback(source)
         {
diff --git a/Source/devtools/front_end/ResourceTreeModel.js b/Source/devtools/front_end/ResourceTreeModel.js
index bffe18a..0134022 100644
--- a/Source/devtools/front_end/ResourceTreeModel.js
+++ b/Source/devtools/front_end/ResourceTreeModel.js
@@ -96,6 +96,9 @@
         this._cachedResourcesProcessed = true;
     },
 
+    /**
+     * @return {boolean}
+     */
     cachedResourcesLoaded: function()
     {
         return this._cachedResourcesProcessed;
@@ -137,11 +140,12 @@
     },
 
     /**
-     * @param {string} securityOrigin
+     * @param {string|undefined} securityOrigin
      */
     _removeSecurityOrigin: function(securityOrigin)
     {
-        console.assert(this._securityOriginFrameCount[securityOrigin]);
+        if (typeof securityOrigin === "undefined")
+            return;
         if (this._securityOriginFrameCount[securityOrigin] === 1) {
             delete this._securityOriginFrameCount[securityOrigin];
             this.dispatchEventToListeners(WebInspector.ResourceTreeModel.EventTypes.SecurityOriginRemoved, securityOrigin);
@@ -165,6 +169,7 @@
     {
         /**
          * @param {!WebInspector.ResourceTreeFrame} frame
+         * @this {WebInspector.ResourceTreeModel}
          */
         function removeOriginForFrame(frame)
         {
@@ -209,17 +214,14 @@
         if (!this._cachedResourcesProcessed)
             return;
         var frame = this._frames[framePayload.id];
-        if (frame) {
-            // Navigation within existing frame.
-            this._removeSecurityOrigin(frame.securityOrigin);
-            frame._navigate(framePayload);
-        } else {
-            // Either a new frame or a main frame navigation to the new backend process.
-            console.error("Navigated unregistered frame.");
+        if (!frame) {
+            // Simulate missed "frameAttached" for a main frame navigation to the new backend process.
+            console.assert(!framePayload.parentId, "Main frame shouldn't have parent frame id.");
             frame = this._frameAttached(framePayload.id, framePayload.parentId || "");
-            if (!frame)
-                return;
+            console.assert(frame);
         }
+        this._removeSecurityOrigin(frame.securityOrigin);
+        frame._navigate(framePayload);
         var addedOrigin = frame.securityOrigin;
 
         if (frame.isMainFrame())
@@ -398,7 +400,7 @@
 
     /**
      * @param {string} url
-     * @return {!WebInspector.Resource}
+     * @return {?WebInspector.Resource}
      */
     resourceForURL: function(url)
     {
@@ -664,7 +666,7 @@
             }
         }
         this._callForFrameResources(filter);
-        return result;
+        return result || null;
     },
 
     /**
@@ -683,6 +685,22 @@
                 return true;
         }
         return false;
+    },
+
+    /**
+     * @return {string}
+     */
+    displayName: function()
+    {
+        if (!this._parentFrame)
+            return WebInspector.UIString("<top frame>");
+        var subtitle = new WebInspector.ParsedURL(this._url).displayName;
+        if (subtitle) {
+            if (!this._name)
+                return subtitle;
+            return this._name + "( " + subtitle + " )";
+        }
+        return WebInspector.UIString("<iframe>");
     }
 }
 
@@ -774,6 +792,6 @@
 }
 
 /**
- * @type {?WebInspector.ResourceTreeModel}
+ * @type {!WebInspector.ResourceTreeModel}
  */
-WebInspector.resourceTreeModel = null;
+WebInspector.resourceTreeModel;
diff --git a/Source/devtools/front_end/ResourceUtils.js b/Source/devtools/front_end/ResourceUtils.js
index b3e8ba0..d7d2c04 100644
--- a/Source/devtools/front_end/ResourceUtils.js
+++ b/Source/devtools/front_end/ResourceUtils.js
@@ -148,7 +148,6 @@
         var urlNode = WebInspector.linkifyURLAsNode(url, title, undefined, isExternal);
         if (typeof lineNumber !== "undefined") {
             urlNode.lineNumber = lineNumber;
-            urlNode.preferredPanel = "sources";
             if (typeof columnNumber !== "undefined")
                 urlNode.columnNumber = columnNumber;
         }
@@ -223,13 +222,12 @@
 WebInspector.linkifyRequestAsNode = function(request)
 {
     var anchor = WebInspector.linkifyURLAsNode(request.url);
-    anchor.preferredPanel = "network";
-    anchor.requestId  = request.requestId;
+    anchor.requestId = request.requestId;
     return anchor;
 }
 
 /**
- * @param {string} content
+ * @param {?string} content
  * @param {string} mimeType
  * @param {boolean} contentEncoded
  * @return {?string}
@@ -237,7 +235,7 @@
 WebInspector.contentAsDataURL = function(content, mimeType, contentEncoded)
 {
     const maxDataUrlSize = 1024 * 1024;
-    if (content == null || content.length > maxDataUrlSize)
+    if (content === null || content.length > maxDataUrlSize)
         return null;
 
     return "data:" + mimeType + (contentEncoded ? ";base64," : ",") + content;
diff --git a/Source/devtools/front_end/ResourceView.js b/Source/devtools/front_end/ResourceView.js
index 0a7b28f..daab09f 100644
--- a/Source/devtools/front_end/ResourceView.js
+++ b/Source/devtools/front_end/ResourceView.js
@@ -41,6 +41,9 @@
 }
 
 WebInspector.ResourceView.prototype = {
+    /**
+     * @return {boolean}
+     */
     hasContent: function()
     {
         return false;
@@ -51,13 +54,14 @@
 
 /**
  * @param {!WebInspector.Resource} resource
+ * @return {boolean}
  */
 WebInspector.ResourceView.hasTextContent = function(resource)
 {
     if (resource.type.isTextType())
         return true; 
     if (resource.type === WebInspector.resourceTypes.Other)
-        return resource.content && !resource.contentEncoded;
+        return !!resource.content && !resource.contentEncoded;
     return false;
 }
 
@@ -110,7 +114,6 @@
 {
     WebInspector.View.call(this);
     this._resource = resource;
-    this.element.classList.add("fill");
     this.element.classList.add("script-view");
     this._content = this.element.createChild("div", "script-view-fallback monospace");
 }
diff --git a/Source/devtools/front_end/ResourcesPanel.js b/Source/devtools/front_end/ResourcesPanel.js
index 25ba46a..b4448d0 100644
--- a/Source/devtools/front_end/ResourcesPanel.js
+++ b/Source/devtools/front_end/ResourcesPanel.js
@@ -39,22 +39,17 @@
 
 /**
  * @constructor
- * @extends {WebInspector.Panel}
+ * @extends {WebInspector.PanelWithSidebarTree}
  */
 WebInspector.ResourcesPanel = function(database)
 {
-    WebInspector.Panel.call(this, "resources");
+    WebInspector.PanelWithSidebarTree.call(this, "resources");
     this.registerRequiredCSS("resourcesPanel.css");
 
     WebInspector.settings.resourcesLastSelectedItem = WebInspector.settings.createSetting("resourcesLastSelectedItem", {});
 
-    this.createSidebarViewWithTree();
-    this.sidebarElement.classList.add("outline-disclosure");
-    this.sidebarElement.classList.add("filter-all");
-    this.sidebarElement.classList.add("children");
-    this.sidebarElement.classList.add("small");
-
-    this.sidebarTreeElement.classList.remove("sidebar-tree");
+    this.sidebarElement().classList.add("filter-all", "children", "small", "outline-disclosure");
+    this.sidebarTree.element.classList.remove("sidebar-tree");
 
     this.resourcesListTreeElement = new WebInspector.StorageCategoryTreeElement(this, WebInspector.UIString("Frames"), "Frames", ["frame-storage-tree-item"]);
     this.sidebarTree.appendChild(this.resourcesListTreeElement);
@@ -82,11 +77,11 @@
         this.sidebarTree.appendChild(this.fileSystemListTreeElement);
     }
 
-    var mainElement = this.splitView.mainElement;
-    this.storageViews = mainElement.createChild("div", "resources-main");
-    var statusBarContainer = mainElement.createChild("div", "resources-status-bar");
+    var mainView = new WebInspector.View();
+    this.storageViews = mainView.element.createChild("div", "resources-main diff-container");
+    var statusBarContainer = mainView.element.createChild("div", "resources-status-bar");
     this.storageViewStatusBarItemsContainer = statusBarContainer.createChild("div", "status-bar");
-    this.storageViews.classList.add("diff-container");
+    mainView.show(this.mainElement());
 
     /** @type {!Map.<!WebInspector.Database, !Object.<string, !WebInspector.DatabaseTableView>>} */
     this._databaseTableViews = new Map();
@@ -103,9 +98,13 @@
     /** @type {!Object.<string, boolean>} */
     this._domains = {};
 
-    this.sidebarElement.addEventListener("mousemove", this._onmousemove.bind(this), false);
-    this.sidebarElement.addEventListener("mouseout", this._onmouseout.bind(this), false);
+    this.sidebarElement().addEventListener("mousemove", this._onmousemove.bind(this), false);
+    this.sidebarElement().addEventListener("mouseout", this._onmouseout.bind(this), false);
 
+    /**
+     * @return {!WebInspector.View}
+     * @this {WebInspector.ResourcesPanel}
+     */
     function viewGetter()
     {
         return this.visibleView;
@@ -219,6 +218,10 @@
         WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.FrameDetached, this._frameDetached, this);
         WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.ResourceAdded, this._resourceAdded, this);
 
+        /**
+         * @param {!WebInspector.ResourceTreeFrame} frame
+         * @this {WebInspector.ResourcesPanel}
+         */
         function populateFrame(frame)
         {
             this._frameAdded({data:frame});
@@ -408,23 +411,10 @@
     },
 
     /**
-     * @param {!Element} anchor
-     * @return {boolean}
-     */
-    showAnchorLocation: function(anchor)
-    {
-        var resource = WebInspector.resourceForURL(anchor.href);
-        if (!resource)
-            return false;
-        this.showResource(resource, anchor.lineNumber);
-        WebInspector.inspectorView.setCurrentPanel(this);
-        return true;
-    },
-
-    /**
      * @param {!WebInspector.Resource} resource
      * @param {number=} line
      * @param {number=} column
+     * @return {boolean}
      */
     showResource: function(resource, line, column)
     {
@@ -771,7 +761,27 @@
         }
     },
 
-    __proto__: WebInspector.Panel.prototype
+    __proto__: WebInspector.PanelWithSidebarTree.prototype
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.Revealer}
+ */
+WebInspector.ResourcesPanel.ResourceRevealer = function()
+{
+}
+
+WebInspector.ResourcesPanel.ResourceRevealer.prototype = {
+    /**
+     * @param {!Object} resource
+     * @param {number=} lineNumber
+     */
+    reveal: function(resource, lineNumber)
+    {
+        if (resource instanceof WebInspector.Resource)
+            /** @type {!WebInspector.ResourcesPanel} */ (WebInspector.showPanel("resources")).showResource(resource, lineNumber);
+    }
 }
 
 /**
@@ -861,6 +871,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -927,6 +938,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -997,6 +1009,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1035,6 +1048,10 @@
         this._treeElementForResource[resource.url] = resourceTreeElement;
     },
 
+    /**
+     * @param {string} url
+     * @return {?WebInspector.Resource}
+     */
     resourceByURL: function(url)
     {
         var treeElement = this._treeElementForResource[url];
@@ -1109,6 +1126,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1119,6 +1137,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     ondblclick: function(event)
     {
@@ -1227,6 +1246,9 @@
         this._updateErrorsAndWarningsBubbles();
     },
 
+    /**
+     * @return {!WebInspector.ResourceSourceFrame}
+     */
     sourceView: function()
     {
         if (!this._sourceView) {
@@ -1263,6 +1285,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1283,6 +1306,10 @@
     {
         this.removeChildren();
 
+        /**
+         * @param {!Array.<string>} tableNames
+         * @this {WebInspector.DatabaseTreeElement}
+         */
         function tableNamesCallback(tableNames)
         {
             var tableNamesLength = tableNames.length;
@@ -1314,6 +1341,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1587,6 +1615,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1655,6 +1684,9 @@
 
     _clearObjectStore: function()
     {
+        /**
+         * @this {WebInspector.IDBObjectStoreTreeElement}
+         */
         function callback() {
             this.update(this._objectStore);
         }
@@ -1713,6 +1745,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1797,6 +1830,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1835,6 +1869,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1888,6 +1923,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1924,6 +1960,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -1981,6 +2018,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
@@ -2018,6 +2056,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     onselect: function(selectedByUser)
     {
diff --git a/Source/devtools/front_end/RevisionHistoryView.js b/Source/devtools/front_end/RevisionHistoryView.js
index 0ca393d..8c4bd31 100644
--- a/Source/devtools/front_end/RevisionHistoryView.js
+++ b/Source/devtools/front_end/RevisionHistoryView.js
@@ -37,7 +37,6 @@
     WebInspector.View.call(this);
     this.registerRequiredCSS("revisionHistory.css");
     this.element.classList.add("revision-history-drawer");
-    this.element.classList.add("fill");
     this.element.classList.add("outline-disclosure");
     this._uiSourceCodeItems = new Map();
 
@@ -46,6 +45,7 @@
 
     /**
      * @param {!WebInspector.UISourceCode} uiSourceCode
+     * @this {WebInspector.RevisionHistoryView}
      */
     function populateRevisions(uiSourceCode)
     {
@@ -221,6 +221,7 @@
 
         /**
          * @param {?string} baseContent
+         * @this {WebInspector.RevisionHistoryTreeElement}
          */
         function step1(baseContent)
         {
@@ -230,6 +231,7 @@
         /**
          * @param {?string} baseContent
          * @param {?string} newContent
+         * @this {WebInspector.RevisionHistoryTreeElement}
          */
         function step2(baseContent, newContent)
         {
diff --git a/Source/devtools/front_end/RuntimeModel.js b/Source/devtools/front_end/RuntimeModel.js
index 8f47781..dcea28e 100644
--- a/Source/devtools/front_end/RuntimeModel.js
+++ b/Source/devtools/front_end/RuntimeModel.js
@@ -81,25 +81,34 @@
         return this._frameIdToContextList[frame.id];
     },
 
+    /**
+     * @param {!WebInspector.Event} event
+     */
     _frameAdded: function(event)
     {
-        var frame = event.data;
+        var frame = /** @type {!WebInspector.ResourceTreeFrame} */ (event.data);
         var context = new WebInspector.FrameExecutionContextList(frame);
         this._frameIdToContextList[frame.id] = context;
         this.dispatchEventToListeners(WebInspector.RuntimeModel.Events.FrameExecutionContextListAdded, context);
     },
 
+    /**
+     * @param {!WebInspector.Event} event
+     */
     _frameNavigated: function(event)
     {
-        var frame = event.data;
+        var frame = /** @type {!WebInspector.ResourceTreeFrame} */ (event.data);
         var context = this._frameIdToContextList[frame.id];
         if (context)
             context._frameNavigated(frame);
     },
 
+    /**
+     * @param {!WebInspector.Event} event
+     */
     _frameDetached: function(event)
     {
-        var frame = event.data;
+        var frame = /** @type {!WebInspector.ResourceTreeFrame} */ (event.data);
         var context = this._frameIdToContextList[frame.id];
         if (!context)
             return;
@@ -116,9 +125,7 @@
     _executionContextCreated: function(context)
     {
         var contextList = this._frameIdToContextList[context.frameId];
-        // FIXME(85708): this should never happen
-        if (!contextList)
-            return;
+        console.assert(contextList);
         contextList._addExecutionContext(new WebInspector.ExecutionContext(context.id, context.name, context.isPageContext));
     },
 
@@ -210,6 +217,9 @@
         else
             this.evaluate(expressionString, "completion", true, true, false, false, evaluated.bind(this));
 
+        /**
+         * @this {WebInspector.RuntimeModel}
+         */
         function evaluated(result, wasThrown)
         {
             if (!result || wasThrown) {
@@ -217,6 +227,10 @@
                 return;
             }
 
+            /**
+             * @param {string} primitiveType
+             * @this {WebInspector.RuntimeModel}
+             */
             function getCompletions(primitiveType)
             {
                 var object;
@@ -247,6 +261,12 @@
                 this.evaluate("(" + getCompletions + ")(\"" + result.type + "\")", "completion", false, true, true, false, receivedPropertyNamesFromEval.bind(this));
         }
 
+        /**
+         * @param {?WebInspector.RemoteObject} notRelevant
+         * @param {boolean} wasThrown
+         * @param {?RuntimeAgent.RemoteObject=} result
+         * @this {WebInspector.RuntimeModel}
+         */
         function receivedPropertyNamesFromEval(notRelevant, wasThrown, result)
         {
             if (result && !wasThrown)
@@ -255,6 +275,9 @@
                 completionsReadyCallback([]);
         }
 
+        /**
+         * @this {WebInspector.RuntimeModel}
+         */
         function receivedPropertyNames(propertyNames)
         {
             RuntimeAgent.releaseObjectGroup("completion");
@@ -326,9 +349,9 @@
 }
 
 /**
- * @type {?WebInspector.RuntimeModel}
+ * @type {!WebInspector.RuntimeModel}
  */
-WebInspector.runtimeModel = null;
+WebInspector.runtimeModel;
 
 /**
  * @constructor
@@ -349,7 +372,6 @@
 
 /**
  * @constructor
- * @extends {WebInspector.Object}
  */
 WebInspector.ExecutionContext = function(id, name, isPageContext)
 {
@@ -376,6 +398,7 @@
 /**
  * @constructor
  * @extends {WebInspector.Object}
+ * @param {!WebInspector.ResourceTreeFrame} frame
  */
 WebInspector.FrameExecutionContextList = function(frame)
 {
@@ -390,6 +413,9 @@
 
 WebInspector.FrameExecutionContextList.prototype =
 {
+    /**
+     * @param {!WebInspector.ResourceTreeFrame} frame
+     */
     _frameNavigated: function(frame)
     {
         this._frame = frame;
@@ -407,11 +433,17 @@
         this.dispatchEventToListeners(WebInspector.FrameExecutionContextList.EventTypes.ContextAdded, this);
     },
 
+    /**
+     * @return {!Array.<!WebInspector.ExecutionContext>}
+     */
     executionContexts: function()
     {
         return this._executionContexts;
     },
 
+    /**
+     * @return {!WebInspector.ExecutionContext}
+     */
     mainWorldContext: function() 
     {
         return this._executionContexts[0];
@@ -419,6 +451,7 @@
 
     /**
      * @param {string} securityOrigin
+     * @return {?WebInspector.ExecutionContext}
      */
     contextBySecurityOrigin: function(securityOrigin)
     {
@@ -427,30 +460,31 @@
             if (!context.isMainWorldContext && context.name === securityOrigin)
                 return context; 
         }
+        return null;
     },
 
+    /**
+     * @return {string}
+     */
     get frameId()
     {
         return this._frame.id;
     },
 
+    /**
+     * @return {string}
+     */
     get url()
     {
         return this._frame.url;
     },
 
+    /**
+     * @return {string}
+     */
     get displayName()
     {
-        if (!this._frame.parentFrame)
-            return "<top frame>";
-        var name = this._frame.name || "";
-        var subtitle = new WebInspector.ParsedURL(this._frame.url).displayName;
-        if (subtitle) {
-            if (!name)
-                return subtitle;
-            return name + "( " + subtitle + " )";
-        }
-        return "<iframe>";
+        return this._frame.displayName();
     },
 
     __proto__: WebInspector.Object.prototype
diff --git a/Source/devtools/front_end/SASSSourceMapping.js b/Source/devtools/front_end/SASSSourceMapping.js
index f8fdcde..f9ffa0f 100644
--- a/Source/devtools/front_end/SASSSourceMapping.js
+++ b/Source/devtools/front_end/SASSSourceMapping.js
@@ -169,6 +169,7 @@
          * @param {number} statusCode
          * @param {!NetworkAgent.Headers} headers
          * @param {string} content
+         * @this {WebInspector.SASSSourceMapping}
          */
         function sassLoadedViaNetwork(error, statusCode, headers, content)
         {
@@ -184,6 +185,7 @@
 
         /**
          * @param {?Date} timestamp
+         * @this {WebInspector.SASSSourceMapping}
          */
         function metadataReceived(timestamp)
         {
@@ -240,7 +242,7 @@
     {
         var cssUISourceCode = this._workspace.uiSourceCodeForURL(cssURL);
         if (!cssUISourceCode) {
-            WebInspector.log(cssURL + " resource missing. Please reload the page.");
+            WebInspector.log(WebInspector.UIString("%s resource missing. Please reload the page.", cssURL));
             callback(cssURL, sassURL, true);
             return;
         }
@@ -272,6 +274,7 @@
          * @param {number} statusCode
          * @param {!NetworkAgent.Headers} headers
          * @param {string} content
+         * @this {WebInspector.SASSSourceMapping}
          */
         function contentLoaded(error, statusCode, headers, content)
         {
@@ -325,6 +328,7 @@
 
         /**
          * @param {?Date} timestamp
+         * @this {WebInspector.SASSSourceMapping}
          */
         function metadataCallback(timestamp)
         {
@@ -349,6 +353,7 @@
 
             /**
              * @param {?string} content
+             * @this {WebInspector.SASSSourceMapping}
              */
             function contentCallback(content)
             {
@@ -430,6 +435,7 @@
 
         /**
          * @param {?WebInspector.SourceMap} sourceMap
+         * @this {WebInspector.SASSSourceMapping}
          */
         function sourceMapLoaded(sourceMap)
         {
@@ -490,6 +496,7 @@
 
         /**
          * @param {?WebInspector.SourceMap} sourceMap
+         * @this {WebInspector.SASSSourceMapping}
          */
         function sourceMapLoaded(sourceMap)
         {
@@ -593,7 +600,7 @@
         this._cssURLsForSASSURL = {};
         /** @type {!Object.<string, !Array.<function(?WebInspector.SourceMap)>>} */
         this._pendingSourceMapLoadingCallbacks = {};
-        /** @type {!Object.<string, {deadlineMs: number, dataByURL: !Object.<string, !{timer: number, previousPoll: number}>}>} */
+        /** @type {!Object.<string, !{deadlineMs: number, dataByURL: !Object.<string, !{timer: number, previousPoll: number}>}>} */
         this._pollDataForSASSURL = {};
         /** @type {!Object.<string, !WebInspector.SourceMap>} */
         this._sourceMapByURL = {};
diff --git a/Source/devtools/front_end/ScreencastView.js b/Source/devtools/front_end/ScreencastView.js
index ad47bce..602c97a 100644
--- a/Source/devtools/front_end/ScreencastView.js
+++ b/Source/devtools/front_end/ScreencastView.js
@@ -32,63 +32,13 @@
  * @constructor
  * @extends {WebInspector.View}
  * @implements {WebInspector.DOMNodeHighlighter}
+ * @param {!Element} statusBarButtonPlaceholder
  */
-WebInspector.ScreencastView = function()
+WebInspector.ScreencastView = function(statusBarButtonPlaceholder)
 {
     WebInspector.View.call(this);
     this.registerRequiredCSS("screencastView.css");
-
-    this.element.classList.add("fill");
-    this.element.classList.add("screencast");
-
-    this._createNavigationBar();
-
-    this._viewportElement = this.element.createChild("div", "screencast-viewport hidden");
-    this._glassPaneElement = this.element.createChild("div", "screencast-glasspane hidden");
-
-    this._canvasElement = this._viewportElement.createChild("canvas");
-    this._canvasElement.tabIndex = 1;
-    this._canvasElement.addEventListener("mousedown", this._handleMouseEvent.bind(this), false);
-    this._canvasElement.addEventListener("mouseup", this._handleMouseEvent.bind(this), false);
-    this._canvasElement.addEventListener("mousemove", this._handleMouseEvent.bind(this), false);
-    this._canvasElement.addEventListener("mousewheel", this._handleMouseEvent.bind(this), false);
-    this._canvasElement.addEventListener("click", this._handleMouseEvent.bind(this), false);
-    this._canvasElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), false);
-    this._canvasElement.addEventListener("keydown", this._handleKeyEvent.bind(this), false);
-    this._canvasElement.addEventListener("keyup", this._handleKeyEvent.bind(this), false);
-    this._canvasElement.addEventListener("keypress", this._handleKeyEvent.bind(this), false);
-
-    this._titleElement = this._viewportElement.createChild("div", "screencast-element-title monospace hidden");
-    this._tagNameElement = this._titleElement.createChild("span", "screencast-tag-name");
-    this._nodeIdElement = this._titleElement.createChild("span", "screencast-node-id");
-    this._classNameElement = this._titleElement.createChild("span", "screencast-class-name");
-    this._titleElement.appendChild(document.createTextNode(" "));
-    this._nodeWidthElement = this._titleElement.createChild("span");
-    this._titleElement.createChild("span", "screencast-px").textContent = "px";
-    this._titleElement.appendChild(document.createTextNode(" \u00D7 "));
-    this._nodeHeightElement = this._titleElement.createChild("span");
-    this._titleElement.createChild("span", "screencast-px").textContent = "px";
-
-    this._imageElement = new Image();
-    this._isCasting = false;
-    this._context = this._canvasElement.getContext("2d");
-    this._checkerboardPattern = this._createCheckerboardPattern(this._context);
-
-    this._shortcuts = /** !Object.<number, function(Event=):boolean> */ ({});
-    this._shortcuts[WebInspector.KeyboardShortcut.makeKey("l", WebInspector.KeyboardShortcut.Modifiers.Ctrl)] = this._focusNavigationBar.bind(this);
-
-    WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.ScreencastFrame, this._screencastFrame, this);
-    WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.ScreencastVisibilityChanged, this._screencastVisibilityChanged, this);
-
-    WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.EventTypes.TimelineStarted, this._onTimeline.bind(this, true), this);
-    WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.EventTypes.TimelineStopped, this._onTimeline.bind(this, false), this);
-    this._timelineActive = WebInspector.timelineManager.isStarted();
-
-    WebInspector.profileManager.addEventListener(WebInspector.ProfileManager.EventTypes.ProfileStarted, this._onProfiler.bind(this, true), this);
-    WebInspector.profileManager.addEventListener(WebInspector.ProfileManager.EventTypes.ProfileStopped, this._onProfiler.bind(this, false), this);
-    this._profilerActive = WebInspector.CPUProfileType && WebInspector.profileManager.isStarted(WebInspector.CPUProfileType.TypeId);
-
-    this._updateGlasspane();
+    this._statusBarButtonPlaceholder = statusBarButtonPlaceholder;
 }
 
 WebInspector.ScreencastView._bordersSize = 40;
@@ -98,6 +48,83 @@
 WebInspector.ScreencastView._HttpRegex = /^https?:\/\/(.+)/;
 
 WebInspector.ScreencastView.prototype = {
+    initialize: function()
+    {
+        this.element.classList.add("screencast");
+
+        this._createNavigationBar();
+
+        this._viewportElement = this.element.createChild("div", "screencast-viewport hidden");
+        this._glassPaneElement = this.element.createChild("div", "screencast-glasspane hidden");
+
+        this._canvasElement = this._viewportElement.createChild("canvas");
+        this._canvasElement.tabIndex = 1;
+        this._canvasElement.addEventListener("mousedown", this._handleMouseEvent.bind(this), false);
+        this._canvasElement.addEventListener("mouseup", this._handleMouseEvent.bind(this), false);
+        this._canvasElement.addEventListener("mousemove", this._handleMouseEvent.bind(this), false);
+        this._canvasElement.addEventListener("mousewheel", this._handleMouseEvent.bind(this), false);
+        this._canvasElement.addEventListener("click", this._handleMouseEvent.bind(this), false);
+        this._canvasElement.addEventListener("contextmenu", this._handleContextMenuEvent.bind(this), false);
+        this._canvasElement.addEventListener("keydown", this._handleKeyEvent.bind(this), false);
+        this._canvasElement.addEventListener("keyup", this._handleKeyEvent.bind(this), false);
+        this._canvasElement.addEventListener("keypress", this._handleKeyEvent.bind(this), false);
+
+        this._titleElement = this._viewportElement.createChild("div", "screencast-element-title monospace hidden");
+        this._tagNameElement = this._titleElement.createChild("span", "screencast-tag-name");
+        this._nodeIdElement = this._titleElement.createChild("span", "screencast-node-id");
+        this._classNameElement = this._titleElement.createChild("span", "screencast-class-name");
+        this._titleElement.appendChild(document.createTextNode(" "));
+        this._nodeWidthElement = this._titleElement.createChild("span");
+        this._titleElement.createChild("span", "screencast-px").textContent = "px";
+        this._titleElement.appendChild(document.createTextNode(" \u00D7 "));
+        this._nodeHeightElement = this._titleElement.createChild("span");
+        this._titleElement.createChild("span", "screencast-px").textContent = "px";
+
+        this._imageElement = new Image();
+        this._isCasting = false;
+        this._context = this._canvasElement.getContext("2d");
+        this._checkerboardPattern = this._createCheckerboardPattern(this._context);
+
+        this._shortcuts = /** !Object.<number, function(Event=):boolean> */ ({});
+        this._shortcuts[WebInspector.KeyboardShortcut.makeKey("l", WebInspector.KeyboardShortcut.Modifiers.Ctrl)] = this._focusNavigationBar.bind(this);
+
+        WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.ScreencastFrame, this._screencastFrame, this);
+        WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.ScreencastVisibilityChanged, this._screencastVisibilityChanged, this);
+
+        WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.EventTypes.TimelineStarted, this._onTimeline.bind(this, true), this);
+        WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.EventTypes.TimelineStopped, this._onTimeline.bind(this, false), this);
+        this._timelineActive = WebInspector.timelineManager.isStarted();
+
+        WebInspector.cpuProfilerModel.addEventListener(WebInspector.CPUProfilerModel.EventTypes.ProfileStarted, this._onProfiler.bind(this, true), this);
+        WebInspector.cpuProfilerModel.addEventListener(WebInspector.CPUProfilerModel.EventTypes.ProfileStopped, this._onProfiler.bind(this, false), this);
+        this._profilerActive = WebInspector.cpuProfilerModel.isRecordingProfile();
+
+        this._updateGlasspane();
+
+        this._currentScreencastState = WebInspector.settings.createSetting("currentScreencastState", "");
+        this._lastScreencastState = WebInspector.settings.createSetting("lastScreencastState", "");
+        this._toggleScreencastButton = new WebInspector.StatusBarStatesSettingButton(
+            "screencast-status-bar-item",
+            ["disabled", "left", "top"],
+            [WebInspector.UIString("Disable screencast."), WebInspector.UIString("Switch to portrait screencast."), WebInspector.UIString("Switch to landscape screencast.")],
+            this._currentScreencastState,
+            this._lastScreencastState,
+            this._toggleScreencastButtonClicked.bind(this));
+        this._statusBarButtonPlaceholder.parentElement.insertBefore(this._toggleScreencastButton.element, this._statusBarButtonPlaceholder);
+        this._statusBarButtonPlaceholder.parentElement.removeChild(this._statusBarButtonPlaceholder);
+    },
+
+    /**
+     * @param {string} state
+     */
+    _toggleScreencastButtonClicked: function(state)
+    {
+        if (state === "disabled")
+            WebInspector.inspectorView.hideScreencastView();
+        else
+            WebInspector.inspectorView.showScreencastView(this, state === "left");
+    },
+
     wasShown: function()
     {
         this._startCasting();
@@ -122,8 +149,8 @@
             this._isCasting = false;
             return;
         }
-        dimensions.width *= WebInspector.zoomFactor();
-        dimensions.height *= WebInspector.zoomFactor();
+        dimensions.width *= WebInspector.zoomManager.zoomFactor();
+        dimensions.height *= WebInspector.zoomManager.zoomFactor();
         PageAgent.startScreencast("jpeg", 80, Math.min(maxImageDimension, dimensions.width), Math.min(maxImageDimension, dimensions.height));
         WebInspector.domAgent.setHighlighter(this);
     },
@@ -201,8 +228,6 @@
      * @private
      */
     _onProfiler: function(on, event) {
-        if (!WebInspector.CPUProfileType || event.data != WebInspector.CPUProfileType.TypeId)
-           return;
         this._profilerActive = on;
         if (this._profilerActive)
             this._stopCasting();
@@ -269,6 +294,7 @@
         /**
          * @param {?Protocol.Error} error
          * @param {number} nodeId
+         * @this {WebInspector.ScreencastView}
          */
         function callback(error, nodeId)
         {
@@ -458,6 +484,7 @@
         /**
          * @param {?Protocol.Error} error
          * @param {!DOMAgent.BoxModel} model
+         * @this {WebInspector.ScreencastView}
          */
         function callback(error, model)
         {
@@ -478,8 +505,10 @@
     _scaleModel: function(model)
     {
         var scale = this._canvasElement.offsetWidth / this._viewport.width;
+
         /**
          * @param {!DOMAgent.Quad} quad
+         * @this {WebInspector.ScreencastView}
          */
         function scaleQuad(quad)
         {
@@ -716,12 +745,13 @@
      * @param {boolean} enabled
      * @param {boolean} inspectShadowDOM
      * @param {!DOMAgent.HighlightConfig} config
-     * @param {function(?Protocol.Error)} callback
+     * @param {function(?Protocol.Error)=} callback
      */
     setInspectModeEnabled: function(enabled, inspectShadowDOM, config, callback)
     {
         this._inspectModeConfig = enabled ? config : null;
-        callback(null);
+        if (callback)
+            callback(null);
     },
 
     /**
diff --git a/Source/devtools/front_end/Script.js b/Source/devtools/front_end/Script.js
index c5ae5be..c1eb311 100644
--- a/Source/devtools/front_end/Script.js
+++ b/Source/devtools/front_end/Script.js
@@ -60,6 +60,17 @@
 
 WebInspector.Script.snippetSourceURLPrefix = "snippets:///";
 
+/**
+ * @param {string} source
+ * @return {string}
+ */
+WebInspector.Script._trimSourceURLComment = function(source)
+{
+    var sourceURLRegex = /\n[\040\t]*\/\/[@#]\ssourceURL=\s*(\S*?)\s*$/mg;
+    return source.replace(sourceURLRegex, "");
+},
+
+
 WebInspector.Script.prototype = {
     /**
      * @return {string}
@@ -94,7 +105,7 @@
          */
         function didGetScriptSource(error, source)
         {
-            this._source = error ? "" : source;
+            this._source = WebInspector.Script._trimSourceURLComment(error ? "" : source);
             callback(this._source);
         }
         if (this.scriptId) {
@@ -137,6 +148,17 @@
     },
 
     /**
+     * @param {string} source
+     * @return {string}
+     */
+    _appendSourceURLCommentIfNeeded: function(source)
+    {
+        if (!this.hasSourceURL)
+            return source;
+        return source + "\n //# sourceURL=" + this.sourceURL;
+    },
+
+    /**
      * @param {string} newSource
      * @param {function(?Protocol.Error, !DebuggerAgent.SetScriptSourceError=, !Array.<!DebuggerAgent.CallFrame>=, !DebuggerAgent.StackTrace=, boolean=)} callback
      */
@@ -161,6 +183,10 @@
                 this.dispatchEventToListeners(WebInspector.Script.Events.ScriptEdited, newSource);
         }
 
+        newSource = WebInspector.Script._trimSourceURLComment(newSource);
+        // We append correct sourceURL to script for consistency only. It's not actually needed for things to work correctly.
+        newSource = this._appendSourceURLCommentIfNeeded(newSource);
+
         if (this.scriptId)
             DebuggerAgent.setScriptSource(this.scriptId, newSource, undefined, didEditScriptSource.bind(this));
         else
diff --git a/Source/devtools/front_end/ScriptFormatterWorker.js b/Source/devtools/front_end/ScriptFormatterWorker.js
index d6d8615..378a9a2 100644
--- a/Source/devtools/front_end/ScriptFormatterWorker.js
+++ b/Source/devtools/front_end/ScriptFormatterWorker.js
@@ -34,18 +34,44 @@
 importScripts("cm/xml.js");
 importScripts("cm/htmlmixed.js");
 WebInspector = {};
-FormatterWorker = {};
-importScripts("CodeMirrorUtils.js");
-
-var onmessage = function(event) {
-    if (!event.data.method)
-        return;
-
-    FormatterWorker[event.data.method](event.data.params);
+FormatterWorker = {
+    /**
+     * @param {string} mimeType
+     * @return {function(string, function(string, ?string, number, number))}
+     */
+    createTokenizer: function(mimeType)
+    {
+        var mode = CodeMirror.getMode({indentUnit: 2}, mimeType);
+        var state = CodeMirror.startState(mode);
+        function tokenize(line, callback)
+        {
+            var stream = new CodeMirror.StringStream(line);
+            while (!stream.eol()) {
+                var style = mode.token(stream, state);
+                var value = stream.current();
+                callback(value, style, stream.start, stream.start + value.length);
+                stream.start = stream.pos;
+            }
+        }
+        return tokenize;
+    }
 };
 
 /**
- * @param {!Object} params
+ * @typedef {{indentString: string, content: string, mimeType: string}}
+ */
+var FormatterParameters;
+
+var onmessage = function(event) {
+    var data = /** @type !{method: string, params: !FormatterParameters} */ (event.data);
+    if (!data.method)
+        return;
+
+    FormatterWorker[data.method](data.params);
+};
+
+/**
+ * @param {!FormatterParameters} params
  */
 FormatterWorker.format = function(params)
 {
@@ -83,12 +109,12 @@
 /**
  * @param {!Object} params
  */
-FormatterWorker.outline = function(params)
+FormatterWorker.javaScriptOutline = function(params)
 {
-    const chunkSize = 100000; // characters per data chunk
-    const totalLength = params.content.length;
-    const lines = params.content.split("\n");
-    const chunkCount = FormatterWorker._chunkCount(totalLength, chunkSize);
+    var chunkSize = 100000; // characters per data chunk
+    var totalLength = params.content.length;
+    var lines = params.content.split("\n");
+    var chunkCount = FormatterWorker._chunkCount(totalLength, chunkSize);
     var outlineChunk = [];
     var previousIdentifier = null;
     var previousToken = null;
@@ -99,22 +125,32 @@
     var isReadingArguments = false;
     var argumentsText = "";
     var currentFunction = null;
-    var tokenizer = WebInspector.CodeMirrorUtils.createTokenizer("text/javascript");
+    var tokenizer = FormatterWorker.createTokenizer("text/javascript");
     for (var i = 0; i < lines.length; ++i) {
         var line = lines[i];
         tokenizer(line, processToken);
     }
 
     /**
+     * @param {?string} tokenType
+     * @return {boolean}
+     */
+    function isJavaScriptIdentifier(tokenType)
+    {
+        if (!tokenType)
+            return false;
+        return tokenType.startsWith("variable") || tokenType.startsWith("property") || tokenType === "def";
+    }
+
+    /**
      * @param {string} tokenValue
-     * @param {string} tokenType
+     * @param {?string} tokenType
      * @param {number} column
      * @param {number} newColumn
      */
     function processToken(tokenValue, tokenType, column, newColumn)
     {
-        tokenType = tokenType ? WebInspector.CodeMirrorUtils.convertTokenType(tokenType) : null;
-        if (tokenType === "javascript-ident") {
+        if (isJavaScriptIdentifier(tokenType)) {
             previousIdentifier = tokenValue;
             if (tokenValue && previousToken === "function") {
                 // A named function: "function f...".
@@ -122,7 +158,7 @@
                 addedFunction = true;
                 previousIdentifier = null;
             }
-        } else if (tokenType === "javascript-keyword") {
+        } else if (tokenType === "keyword") {
             if (tokenValue === "function") {
                 if (previousIdentifier && (previousToken === "=" || previousToken === ":")) {
                     // Anonymous function assigned to an identifier: "...f = function..."
@@ -132,7 +168,7 @@
                     previousIdentifier = null;
                 }
             }
-        } else if (tokenValue === "." && previousTokenType === "javascript-ident")
+        } else if (tokenValue === "." && isJavaScriptIdentifier(previousTokenType))
             previousIdentifier += ".";
         else if (tokenValue === "(" && addedFunction)
             isReadingArguments = true;
@@ -164,6 +200,89 @@
     postMessage({ chunk: outlineChunk, total: chunkCount, index: chunkCount });
 }
 
+FormatterWorker.CSSParserStates = {
+    Initial: "Initial",
+    Selector: "Selector",
+    AtRule: "AtRule",
+};
+
+FormatterWorker.cssOutline = function(params)
+{
+    var chunkSize = 100000; // characters per data chunk
+    var totalLength = params.content.length;
+    var lines = params.content.split("\n");
+    var chunkCount = FormatterWorker._chunkCount(totalLength, chunkSize);
+    var rules = [];
+    var processedChunkCharacters = 0;
+    var currentChunk = 0;
+
+    var state = FormatterWorker.CSSParserStates.Initial;
+    var rule;
+    var property;
+
+    /**
+     * @param {string} tokenValue
+     * @param {?string} tokenType
+     * @param {number} column
+     * @param {number} newColumn
+     */
+    function processToken(tokenValue, tokenType, column, newColumn)
+    {
+        switch (state) {
+        case FormatterWorker.CSSParserStates.Initial:
+            if (tokenType === "qualifier" || tokenType === "builtin" || tokenType === "tag") {
+                rule = {
+                    selectorText: tokenValue,
+                    lineNumber: lineNumber,
+                    columNumber: column,
+                };
+                state = FormatterWorker.CSSParserStates.Selector;
+            } else if (tokenType === "def") {
+                rule = {
+                    atRule: tokenValue,
+                    lineNumber: lineNumber,
+                    columNumber: column,
+                };
+                state = FormatterWorker.CSSParserStates.AtRule;
+            }
+            break;
+        case FormatterWorker.CSSParserStates.Selector:
+            if (tokenValue === "{" && tokenType === null) {
+                rule.selectorText = rule.selectorText.trim();
+                rules.push(rule);
+                state = FormatterWorker.CSSParserStates.Initial;
+            } else {
+                rule.selectorText += tokenValue;
+            }
+            break;
+        case FormatterWorker.CSSParserStates.AtRule:
+            if ((tokenValue === ";" || tokenValue === "{") && tokenType === null) {
+                rule.atRule = rule.atRule.trim();
+                rules.push(rule);
+                state = FormatterWorker.CSSParserStates.Initial;
+            } else {
+                rule.atRule += tokenValue;
+            }
+            break;
+        default:
+            console.assert(false, "Unknown CSS parser state.");
+        }
+        processedChunkCharacters += newColumn - column;
+        if (processedChunkCharacters > chunkSize) {
+            postMessage({ chunk: rules, total: chunkCount, index: currentChunk++ });
+            rules = [];
+            processedChunkCharacters = 0;
+        }
+    }
+    var tokenizer = FormatterWorker.createTokenizer("text/css");
+    var lineNumber;
+    for (lineNumber = 0; lineNumber < lines.length; ++lineNumber) {
+        var line = lines[lineNumber];
+        tokenizer(line, processToken);
+    }
+    postMessage({ chunk: rules, total: chunkCount, index: currentChunk++ });
+}
+
 /**
  * @param {string} content
  * @param {!{original: !Array.<number>, formatted: !Array.<number>}} mapping
@@ -221,6 +340,7 @@
 FormatterWorker.HTMLFormatter.prototype = {
     /**
      * @param {string} content
+     * @return {!{content: string, mapping: {original: !Array.<number>, formatted: !Array.<number>}}}
      */
     format: function(content)
     {
@@ -232,9 +352,13 @@
 
         var scriptOpened = false;
         var styleOpened = false;
-        var tokenizer = WebInspector.CodeMirrorUtils.createTokenizer("text/html");
+        var tokenizer = FormatterWorker.createTokenizer("text/html");
+
+        /**
+         * @this {FormatterWorker.HTMLFormatter}
+         */
         function processToken(tokenValue, tokenType, tokenStart, tokenEnd) {
-            if (tokenType !== "xml-tag")
+            if (tokenType !== "tag")
                 return;
             if (tokenValue.toLowerCase() === "<script") {
                 scriptOpened = true;
@@ -301,7 +425,7 @@
     },
 
     /**
-     * @param {function(string, {formatted: !Array.<number>, original: !Array.<number>}, number, number, string)} formatFunction
+     * @param {function(string, !{formatted: !Array.<number>, original: !Array.<number>}, number, number, string)} formatFunction
      * @param {number} cursor
      */
     _handleSubFormatterEnd: function(formatFunction, cursor)
@@ -327,6 +451,9 @@
     return keys;
 };
 
+/**
+ * @return {!Object}
+ */
 function require()
 {
     return parse;
diff --git a/Source/devtools/front_end/ScriptSnippetModel.js b/Source/devtools/front_end/ScriptSnippetModel.js
index b77e162..2e229e7 100644
--- a/Source/devtools/front_end/ScriptSnippetModel.js
+++ b/Source/devtools/front_end/ScriptSnippetModel.js
@@ -220,6 +220,7 @@
          * @param {?string} error
          * @param {string=} scriptId
          * @param {string=} syntaxErrorMessage
+         * @this {WebInspector.ScriptSnippetModel}
          */
         function compileCallback(error, scriptId, syntaxErrorMessage)
         {
@@ -259,6 +260,7 @@
          * @param {?string} error
          * @param {?RuntimeAgent.RemoteObject} result
          * @param {boolean=} wasThrown
+         * @this {WebInspector.ScriptSnippetModel}
          */
         function runCallback(error, result, wasThrown)
         {
@@ -350,7 +352,7 @@
         for (var i = 0; i < breakpointLocations.length; ++i) {
             var uiLocation = breakpointLocations[i].uiLocation;
             var breakpoint = breakpointLocations[i].breakpoint;
-            WebInspector.breakpointManager.setBreakpoint(uiSourceCode, uiLocation.lineNumber, breakpoint.condition(), breakpoint.enabled());
+            WebInspector.breakpointManager.setBreakpoint(uiSourceCode, uiLocation.lineNumber, uiLocation.columnNumber, breakpoint.condition(), breakpoint.enabled());
         }
     },
 
@@ -581,6 +583,9 @@
      */
     searchInContent: function(query, caseSensitive, isRegex, callback)
     {
+        /**
+         * @this {WebInspector.SnippetContentProvider}
+         */
         function performSearch()
         {
             callback(WebInspector.ContentProvider.performSearchInContent(this._snippet.content, query, caseSensitive, isRegex));
@@ -588,9 +593,7 @@
 
         // searchInContent should call back later.
         window.setTimeout(performSearch.bind(this), 0);
-    },
-
-    __proto__: WebInspector.ContentProvider.prototype
+    }
 }
 
 /**
@@ -685,6 +688,6 @@
 }
 
 /**
- * @type {?WebInspector.ScriptSnippetModel}
+ * @type {!WebInspector.ScriptSnippetModel}
  */
-WebInspector.scriptSnippetModel = null;
+WebInspector.scriptSnippetModel;
diff --git a/Source/devtools/front_end/SearchableView.js b/Source/devtools/front_end/SearchableView.js
index e5dde3c..a938276 100644
--- a/Source/devtools/front_end/SearchableView.js
+++ b/Source/devtools/front_end/SearchableView.js
@@ -39,9 +39,6 @@
     WebInspector.View.call(this);
 
     this._searchProvider = searchable;
-
-    this.element.classList.add("vbox");
-    this.element.style.flex = "auto";
     this.element.addEventListener("keydown", this._onKeyDown.bind(this), false);
 
     this._footerElementContainer = this.element.createChild("div", "inspector-footer status-bar hidden");
@@ -110,7 +107,7 @@
     this._replaceCheckboxElement = this._replaceElement.createChild("input");
     this._replaceCheckboxElement.type = "checkbox";
     this._replaceCheckboxElement.id = "search-replace-trigger";
-    this._replaceCheckboxElement.addEventListener("click", this._updateSecondRowVisibility.bind(this), false);
+    this._replaceCheckboxElement.addEventListener("change", this._updateSecondRowVisibility.bind(this), false);
 
     this._replaceLabelElement = this._replaceElement.createChild("label");
     this._replaceLabelElement.textContent = WebInspector.UIString("Replace");
@@ -180,6 +177,11 @@
     {
         this._shortcuts = {};
 
+        /**
+         * @param {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} shortcuts
+         * @param {function()} handler
+         * @this {WebInspector.SearchableView}
+         */
         function register(shortcuts, handler)
         {
             for (var i = 0; i < shortcuts.length; ++i)
@@ -201,11 +203,11 @@
     },
 
     /**
-     * @param {boolean} canReplace
+     * @param {boolean} replaceable
      */
-    setCanReplace: function(canReplace)
+    setReplaceable: function(replaceable)
     {
-        this._canReplace = canReplace;
+        this._replaceable = replaceable;
     },
 
     /**
@@ -225,6 +227,9 @@
         this._updateSearchMatchesCountAndCurrentMatchIndex(this._searchProvider.currentSearchMatches, currentMatchIndex);
     },
 
+    /**
+     * @return {boolean}
+     */
     isSearchVisible: function()
     {
         return this._searchIsVisible;
@@ -233,7 +238,8 @@
     closeSearch: function()
     {
         this.cancelSearch();
-        WebInspector.setCurrentFocusElement(WebInspector.previousFocusElement());
+        if (WebInspector.currentFocusElement().isDescendant(this._footerElementContainer))
+            WebInspector.setCurrentFocusElement(WebInspector.previousFocusElement());
     },
 
     _toggleSearchBar: function(toggled)
@@ -264,8 +270,8 @@
     handleFindNextShortcut: function()
     {
         if (!this._searchIsVisible)
-            return true;
-        this._searchProvider.jumpToPreviousSearchResult();
+            return false;
+        this._searchProvider.jumpToNextSearchResult();
         return true;
     },
 
@@ -275,8 +281,8 @@
     handleFindPreviousShortcut: function()
     {
         if (!this._searchIsVisible)
-            return true;
-        this._searchProvider.jumpToNextSearchResult();
+            return false;
+        this._searchProvider.jumpToPreviousSearchResult();
         return true;
     },
 
@@ -357,13 +363,8 @@
 
     _updateReplaceVisibility: function()
     {
-        if (!this._searchIsVisible)
-            return;
-
-        if (this._canReplace)
-            this._replaceElement.classList.remove("hidden");
-        else {
-            this._replaceElement.classList.add("hidden");
+        this._replaceElement.enableStyleClass("hidden", !this._replaceable);
+        if (!this._replaceable) {
             this._replaceCheckboxElement.checked = false;
             this._updateSecondRowVisibility();
         }
@@ -461,8 +462,6 @@
 
     _updateSecondRowVisibility: function()
     {
-        if (!this._searchIsVisible)
-            return;
         if (this._replaceCheckboxElement.checked) {
             this._footerElement.classList.add("toolbar-search-replace");
             this._secondRowElement.classList.remove("hidden");
@@ -483,14 +482,14 @@
 
     _replace: function()
     {
-        this._searchProvider.replaceSelectionWith(this._replaceInputElement.value);
+        /** @type {!WebInspector.Replaceable} */ (this._searchProvider).replaceSelectionWith(this._replaceInputElement.value);
         delete this._currentQuery;
         this._performSearch(true, true);
     },
 
     _replaceAll: function()
     {
-        this._searchProvider.replaceAllWith(this._searchInputElement.value, this._replaceInputElement.value);
+        /** @type {!WebInspector.Replaceable} */ (this._searchProvider).replaceAllWith(this._searchInputElement.value, this._replaceInputElement.value);
     },
 
     _onInput: function(event)
@@ -524,5 +523,25 @@
 
     jumpToNextSearchResult: function() { },
 
-    jumpToPreviousSearchResult: function() { },
+    jumpToPreviousSearchResult: function() { }
+}
+
+/**
+ * @interface
+ */
+WebInspector.Replaceable = function()
+{
+}
+
+WebInspector.Replaceable.prototype = {
+    /**
+     * @param {string} text
+     */
+    replaceSelectionWith: function(text) { },
+
+    /**
+     * @param {string} query
+     * @param {string} replacement
+     */
+    replaceAllWith: function(query, replacement) { }
 }
diff --git a/Source/devtools/front_end/Settings.js b/Source/devtools/front_end/Settings.js
index 2b9b891..e495213 100644
--- a/Source/devtools/front_end/Settings.js
+++ b/Source/devtools/front_end/Settings.js
@@ -31,12 +31,9 @@
 
 var Preferences = {
     maxInlineTextChildLength: 80,
-    minConsoleHeight: 75,
+    minDrawerHeight: 25,
     minSidebarWidth: 100,
     minSidebarHeight: 75,
-    minElementsSidebarWidth: 200,
-    minElementsSidebarHeight: 200,
-    minScriptsSidebarWidth: 200,
     applicationTitle: "Developer Tools - %s",
     experimentsEnabled: false
 }
@@ -82,7 +79,6 @@
     this.emulateViewport = this.createSetting("emulateViewport", false);
     this.emulateTouchEvents = this.createSetting("emulateTouchEvents", false);
     this.showShadowDOM = this.createSetting("showShadowDOM", false);
-    this.zoomLevel = this.createSetting("zoomLevel", 0);
     this.savedURLs = this.createSetting("savedURLs", {});
     this.javaScriptDisabled = this.createSetting("javaScriptDisabled", false);
     this.overrideGeolocation = this.createSetting("overrideGeolocation", false);
@@ -96,7 +92,6 @@
     this.textEditorAutoDetectIndent = this.createSetting("textEditorAutoIndentIndent", true);
     this.textEditorAutocompletion = this.createSetting("textEditorAutocompletion", true);
     this.textEditorBracketMatching = this.createSetting("textEditorBracketMatching", true);
-    this.lastDockState = this.createSetting("lastDockState", "");
     this.cssReloadEnabled = this.createSetting("cssReloadEnabled", false);
     this.timelineCaptureStacks = this.createSetting("timelineCaptureStacks", true);
     this.showMetricsRulers = this.createSetting("showMetricsRulers", false);
@@ -113,10 +108,10 @@
     this.showWhitespacesInEditor = this.createSetting("showWhitespacesInEditor", false);
     this.skipStackFramesSwitch = this.createSetting("skipStackFramesSwitch", false);
     this.skipStackFramesPattern = this.createSetting("skipStackFramesPattern", "");
-    this.screencastEnabled = this.createSetting("screencastEnabled", false);
-    this.screencastSidebarWidth = this.createSetting("screencastSidebarWidth", 300);
     this.showEmulationViewInDrawer = this.createSetting("showEmulationViewInDrawer", true);
     this.showRenderingViewInDrawer = this.createSetting("showRenderingViewInDrawer", true);
+    this.pauseOnExceptionEnabled = this.createSetting("pauseOnExceptionEnabled", false);
+    this.pauseOnCaughtException = this.createSetting("pauseOnCaughtException", false);
     this.enableAsyncStackTraces = this.createSetting("enableAsyncStackTraces", false);
 }
 
@@ -144,15 +139,25 @@
         if (!this._registry[key])
             this._registry[key] = new WebInspector.BackendSetting(key, defaultValue, this._eventSupport, window.localStorage, setterCallback);
         return this._registry[key];
+    },
+
+    initializeBackendSettings: function()
+    {
+        this.showPaintRects = WebInspector.settings.createBackendSetting("showPaintRects", false, PageAgent.setShowPaintRects.bind(PageAgent));
+        this.showDebugBorders = WebInspector.settings.createBackendSetting("showDebugBorders", false, PageAgent.setShowDebugBorders.bind(PageAgent));
+        this.continuousPainting = WebInspector.settings.createBackendSetting("continuousPainting", false, PageAgent.setContinuousPaintingEnabled.bind(PageAgent));
+        this.showFPSCounter = WebInspector.settings.createBackendSetting("showFPSCounter", false, PageAgent.setShowFPSCounter.bind(PageAgent));
+        this.showScrollBottleneckRects = WebInspector.settings.createBackendSetting("showScrollBottleneckRects", false, PageAgent.setShowScrollBottleneckRects.bind(PageAgent));
     }
 }
 
 /**
  * @constructor
  * @param {string} name
- * @param {*} defaultValue
+ * @param {V} defaultValue
  * @param {!WebInspector.Object} eventSupport
  * @param {?Storage} storage
+ * @template V
  */
 WebInspector.Setting = function(name, defaultValue, eventSupport, storage)
 {
@@ -186,6 +191,9 @@
         return this._name;
     },
 
+    /**
+     * @return {V}
+     */
     get: function()
     {
         if (typeof this._value !== "undefined")
@@ -237,6 +245,10 @@
 WebInspector.BackendSetting.prototype = {
     set: function(value)
     {
+        /**
+         * @param {?Protocol.Error} error
+         * @this {WebInspector.BackendSetting}
+         */
         function callback(error)
         {
             if (error) {
@@ -262,16 +274,20 @@
     this._enabledForTest = {};
 
     // Add currently running experiments here.
+    this.asyncStackTraces = this._createExperiment("asyncStackTraces", "Enable support for async stack traces");
     this.fileSystemInspection = this._createExperiment("fileSystemInspection", "FileSystem inspection");
     this.canvasInspection = this._createExperiment("canvasInspection ", "Canvas inspection");
-    this.cssRegions = this._createExperiment("cssRegions", "CSS Regions Support");
     this.frameworksDebuggingSupport = this._createExperiment("frameworksDebuggingSupport", "Enable frameworks debugging support");
     this.layersPanel = this._createExperiment("layersPanel", "Show Layers panel");
     this.stepIntoSelection = this._createExperiment("stepIntoSelection", "Show step-in candidates while debugging.");
-    this.openConsoleWithCtrlTilde = this._createExperiment("openConsoleWithCtrlTilde", "Open console with Ctrl/Cmd+Tilde, not Esc");
+    this.doNotOpenDrawerOnEsc = this._createExperiment("doNotOpenDrawerWithEsc", "Do not open drawer on Esc");
     this.showEditorInDrawer = this._createExperiment("showEditorInDrawer", "Show editor in drawer");
     this.gpuTimeline = this._createExperiment("gpuTimeline", "Show GPU data on timeline");
     this.applyCustomStylesheet = this._createExperiment("applyCustomStylesheet", "Allow custom UI themes");
+    this.workersInMainWindow = this._createExperiment("workersInMainWindow", "Show workers in main window");
+    this.dockToLeft = this._createExperiment("dockToLeft", "Enable dock to left mode");
+    this.allocationProfiler = this._createExperiment("allocationProfiler", "Enable JavaScript heap allocation profiler");
+    this.timelineFlameChart = this._createExperiment("timelineFlameChart", "Enable FlameChart mode in Timeline");
 
     this._cleanUpSetting();
 }
@@ -396,7 +412,7 @@
      */
     setEnabled: function(enabled)
     {
-        return this._experimentsSettings.setEnabled(this._name, enabled);
+        this._experimentsSettings.setEnabled(this._name, enabled);
     },
 
     enableForTest: function()
diff --git a/Source/devtools/front_end/SettingsScreen.js b/Source/devtools/front_end/SettingsScreen.js
index 2a6bde3..beee61f 100644
--- a/Source/devtools/front_end/SettingsScreen.js
+++ b/Source/devtools/front_end/SettingsScreen.js
@@ -72,7 +72,7 @@
         regex = new RegExp(text);
     } catch (e) {
     }
-    return regex ? null : "Invalid pattern";
+    return regex ? null : WebInspector.UIString("Invalid pattern");
 }
 
 /**
@@ -85,9 +85,9 @@
 {
     var value = Number(text);
     if (isNaN(value))
-        return "Invalid number format";
+        return WebInspector.UIString("Invalid number format");
     if (value < min || value > max)
-        return "Value is out of range [" + min + ", " + max + "]";
+        return WebInspector.UIString("Value is out of range [%d, %d]", min, max);
     return null;
 }
 
@@ -127,6 +127,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     isClosingKey: function(keyCode)
     {
@@ -157,7 +158,7 @@
 WebInspector.SettingsTab = function(name, id)
 {
     WebInspector.View.call(this);
-    this.element.className = "settings-tab-container";
+    this.element.classList.add("settings-tab-container");
     if (id)
         this.element.id = id;
     var header = this.element.createChild("header");
@@ -165,72 +166,6 @@
     this.containerElement = this.element.createChild("div", "help-container-wrapper").createChild("div", "settings-tab help-content help-container");
 }
 
-/**
- * @param {string} name
- * @param {function(): *} getter
- * @param {function(*)} setter
- * @param {boolean=} omitParagraphElement
- * @param {!Element=} inputElement
- * @param {string=} tooltip
- * @return {!Element}
- */
-WebInspector.SettingsTab.createCheckbox = function(name, getter, setter, omitParagraphElement, inputElement, tooltip)
-{
-    var input = inputElement || document.createElement("input");
-    input.type = "checkbox";
-    input.name = name;
-    input.checked = getter();
-
-    function listener()
-    {
-        setter(input.checked);
-    }
-    input.addEventListener("click", listener, false);
-
-    var label = document.createElement("label");
-    label.appendChild(input);
-    label.appendChild(document.createTextNode(name));
-    if (tooltip)
-        label.title = tooltip;
-
-    if (omitParagraphElement)
-        return label;
-
-    var p = document.createElement("p");
-    p.appendChild(label);
-    return p;
-}
-
-/**
- * @param {string} name
- * @param {!WebInspector.Setting} setting
- * @param {boolean=} omitParagraphElement
- * @param {!Element=} inputElement
- * @param {string=} tooltip
- * @return {!Element}
- */
-WebInspector.SettingsTab.createSettingCheckbox = function(name, setting, omitParagraphElement, inputElement, tooltip)
-{
-    return WebInspector.SettingsTab.createCheckbox(name, setting.get.bind(setting), setting.set.bind(setting), omitParagraphElement, inputElement, tooltip);
-}
-
-/**
- * @param {!WebInspector.Setting} setting
- * @return {!Element}
- */
-WebInspector.SettingsTab.createSettingFieldset = function(setting)
-{
-    var fieldset = document.createElement("fieldset");
-    fieldset.disabled = !setting.get();
-    setting.addChangeListener(settingChanged);
-    return fieldset;
-
-    function settingChanged()
-    {
-        fieldset.disabled = !setting.get();
-    }
-}
-
 WebInspector.SettingsTab.prototype = {
     /**
      *  @param {string=} name
@@ -336,19 +271,22 @@
     WebInspector.SettingsTab.call(this, WebInspector.UIString("General"), "general-tab-content");
 
     var p = this._appendSection();
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Disable cache (while DevTools is open)"), WebInspector.settings.cacheDisabled));
-    var disableJSElement = WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Disable JavaScript"), WebInspector.settings.javaScriptDisabled);
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Disable cache (while DevTools is open)"), WebInspector.settings.cacheDisabled));
+    var disableJSElement = WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Disable JavaScript"), WebInspector.settings.javaScriptDisabled);
     p.appendChild(disableJSElement);
     WebInspector.settings.javaScriptDisabled.addChangeListener(this._javaScriptDisabledChanged, this);
     this._disableJSCheckbox = disableJSElement.getElementsByTagName("input")[0];
     this._updateScriptDisabledCheckbox();
 
     p = this._appendSection(WebInspector.UIString("Appearance"));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show 'Emulation' view in console drawer."), WebInspector.settings.showEmulationViewInDrawer));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show 'Emulation' view in console drawer."), WebInspector.settings.showEmulationViewInDrawer));
     this._appendDrawerNote(p.lastElementChild);
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show 'Rendering' view in console drawer."), WebInspector.settings.showRenderingViewInDrawer));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show 'Rendering' view in console drawer."), WebInspector.settings.showRenderingViewInDrawer));
     this._appendDrawerNote(p.lastElementChild);
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Split panels vertically when docked to right"), WebInspector.settings.splitVerticallyWhenDockedToRight));
+    var splitVerticallyTitle = WebInspector.UIString("Split panels vertically when docked to %s", WebInspector.experimentsSettings.dockToLeft.isEnabled() ? "left or right" : "right");
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(splitVerticallyTitle, WebInspector.settings.splitVerticallyWhenDockedToRight));
+    var panelShortcutTitle = WebInspector.UIString("Enable %s + 1-9 shortcut to switch panels", WebInspector.isMac() ? "Cmd" : "Ctrl");
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(panelShortcutTitle, WebInspector.settings.shortcutPanelSwitch));
 
     p = this._appendSection(WebInspector.UIString("Elements"));
     var colorFormatElement = this._createSelectSetting(WebInspector.UIString("Color format"), [
@@ -358,20 +296,20 @@
             [ "HSL: hsl(300, 80%, 90%)", WebInspector.Color.Format.HSL ]
         ], WebInspector.settings.colorFormat);
     p.appendChild(colorFormatElement);
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show user agent styles"), WebInspector.settings.showUserAgentStyles));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Word wrap"), WebInspector.settings.domWordWrap));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show Shadow DOM"), WebInspector.settings.showShadowDOM));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show rulers"), WebInspector.settings.showMetricsRulers));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show user agent styles"), WebInspector.settings.showUserAgentStyles));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Word wrap"), WebInspector.settings.domWordWrap));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show Shadow DOM"), WebInspector.settings.showShadowDOM));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show rulers"), WebInspector.settings.showMetricsRulers));
 
     p = this._appendSection(WebInspector.UIString("Sources"));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Search in content scripts"), WebInspector.settings.searchInContentScripts));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Enable JS source maps"), WebInspector.settings.jsSourceMapsEnabled));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Search in content scripts"), WebInspector.settings.searchInContentScripts));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Enable JavaScript source maps"), WebInspector.settings.jsSourceMapsEnabled));
 
-    var checkbox = WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Enable CSS source maps"), WebInspector.settings.cssSourceMapsEnabled);
+    var checkbox = WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Enable CSS source maps"), WebInspector.settings.cssSourceMapsEnabled);
     p.appendChild(checkbox);
-    var fieldset = WebInspector.SettingsTab.createSettingFieldset(WebInspector.settings.cssSourceMapsEnabled);
+    var fieldset = WebInspector.SettingsUI.createSettingFieldset(WebInspector.settings.cssSourceMapsEnabled);
     var autoReloadCSSCheckbox = fieldset.createChild("input");
-    fieldset.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Auto-reload generated CSS"), WebInspector.settings.cssReloadEnabled, false, autoReloadCSSCheckbox));
+    fieldset.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Auto-reload generated CSS"), WebInspector.settings.cssReloadEnabled, false, autoReloadCSSCheckbox));
     checkbox.appendChild(fieldset);
 
     var indentationElement = this._createSelectSetting(WebInspector.UIString("Default indentation"), [
@@ -381,13 +319,13 @@
             [ WebInspector.UIString("Tab character"), WebInspector.TextUtils.Indent.TabCharacter ]
         ], WebInspector.settings.textEditorIndent);
     p.appendChild(indentationElement);
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Detect indentation"), WebInspector.settings.textEditorAutoDetectIndent));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Autocompletion"), WebInspector.settings.textEditorAutocompletion));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Bracket matching"), WebInspector.settings.textEditorBracketMatching));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show whitespace characters"), WebInspector.settings.showWhitespacesInEditor));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Detect indentation"), WebInspector.settings.textEditorAutoDetectIndent));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Autocompletion"), WebInspector.settings.textEditorAutocompletion));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Bracket matching"), WebInspector.settings.textEditorBracketMatching));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show whitespace characters"), WebInspector.settings.showWhitespacesInEditor));
     if (WebInspector.experimentsSettings.frameworksDebuggingSupport.isEnabled()) {
-        checkbox = WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Skip stepping through sources with particular names"), WebInspector.settings.skipStackFramesSwitch);
-        fieldset = WebInspector.SettingsTab.createSettingFieldset(WebInspector.settings.skipStackFramesSwitch);
+        checkbox = WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Skip stepping through sources with particular names"), WebInspector.settings.skipStackFramesSwitch);
+        fieldset = WebInspector.SettingsUI.createSettingFieldset(WebInspector.settings.skipStackFramesSwitch);
         fieldset.appendChild(this._createInputSetting(WebInspector.UIString("Pattern"), WebInspector.settings.skipStackFramesPattern, false, 1000, "100px", WebInspector.SettingsScreen.regexValidator));
         checkbox.appendChild(fieldset);
         p.appendChild(checkbox);
@@ -396,27 +334,42 @@
     WebInspector.settings.skipStackFramesPattern.addChangeListener(this._skipStackFramesSwitchOrPatternChanged, this);
 
     p = this._appendSection(WebInspector.UIString("Profiler"));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Show advanced heap snapshot properties"), WebInspector.settings.showAdvancedHeapSnapshotProperties));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("High resolution CPU profiling"), WebInspector.settings.highResolutionCpuProfiling));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Show advanced heap snapshot properties"), WebInspector.settings.showAdvancedHeapSnapshotProperties));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("High resolution CPU profiling"), WebInspector.settings.highResolutionCpuProfiling));
 
     p = this._appendSection(WebInspector.UIString("Console"));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Log XMLHttpRequests"), WebInspector.settings.monitoringXHREnabled));
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Preserve log upon navigation"), WebInspector.settings.preserveConsoleLog));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Log XMLHttpRequests"), WebInspector.settings.monitoringXHREnabled));
+    p.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Preserve log upon navigation"), WebInspector.settings.preserveConsoleLog));
 
-    if (WebInspector.extensionServer.hasExtensions()) {
+    if (WebInspector.openAnchorLocationRegistry.handlerNames.length > 0) {
         var handlerSelector = new WebInspector.HandlerSelector(WebInspector.openAnchorLocationRegistry);
         p = this._appendSection(WebInspector.UIString("Extensions"));
         p.appendChild(this._createCustomSetting(WebInspector.UIString("Open links in"), handlerSelector.element));
     }
 
     p = this._appendSection();
-    var panelShortcutTitle = WebInspector.UIString("Enable %s + 1-9 shortcut to switch panels", WebInspector.isMac() ? "Cmd" : "Ctrl");
-    p.appendChild(WebInspector.SettingsTab.createSettingCheckbox(panelShortcutTitle, WebInspector.settings.shortcutPanelSwitch));
+
+    var restoreDefaults = p.createChild("input", "settings-tab-text-button");
+    restoreDefaults.type = "button";
+    restoreDefaults.value = WebInspector.UIString("Restore defaults and reload");
+    restoreDefaults.addEventListener("click", restoreAndReload);
+
+    function restoreAndReload()
+    {
+        if (window.localStorage)
+            window.localStorage.clear();
+        WebInspector.reload();
+    }
 }
 
 WebInspector.GenericSettingsTab.prototype = {
     _updateScriptDisabledCheckbox: function()
     {
+        /**
+         * @param {?Protocol.Error} error
+         * @param {string} status
+         * @this {WebInspector.GenericSettingsTab}
+         */
         function executionStatusCallback(error, status)
         {
             if (error || !status)
@@ -568,7 +521,7 @@
      */
     _editFileSystem: function(id)
     {
-        WebInspector.EditFileSystemDialog.show(document.body, id);
+        WebInspector.EditFileSystemDialog.show(WebInspector.inspectorView.devtoolsElement(), id);
     },
 
     /**
@@ -837,6 +790,10 @@
         else
             this._ids.push(itemId);
 
+        /**
+         * @param {?Event} event
+         * @this {WebInspector.SettingsList}
+         */
         function removeItemClicked(event)
         {
             removeItemButton.disabled = true;
@@ -1002,6 +959,7 @@
             this._addInputElements[columnId] = inputElement;
             return;
         }
+        var validItemId = itemId;
 
         if (!this._editInputElements[itemId])
             this._editInputElements[itemId] = {};
@@ -1023,16 +981,20 @@
         columnElement.inputElement = inputElement;
         this._editInputElements[itemId][columnId] = inputElement;
 
+        /**
+         * @param {?Event} event
+         * @this {WebInspector.EditableSettingsList}
+         */
         function rowClicked(event)
         {
             if (itemId === this._editingId)
                 return;
             event.consume();
             console.assert(!this._editingId);
-            this._editingId = itemId;
-            var listItem = this.itemForId(itemId);
+            this._editingId = validItemId;
+            var listItem = this.itemForId(validItemId);
             listItem.classList.add("item-editing");
-            var inputElement = event.target.inputElement || this._editInputElements[itemId][this.columns()[0]];
+            var inputElement = event.target.inputElement || this._editInputElements[validItemId][this.columns()[0]];
             inputElement.focus();
             inputElement.select();
         }
@@ -1155,3 +1117,6 @@
 
     __proto__: WebInspector.SettingsList.prototype
 }
+
+/** @type {!WebInspector.SettingsController} */
+WebInspector.settingsController;
diff --git a/Source/devtools/front_end/SettingsUI.js b/Source/devtools/front_end/SettingsUI.js
new file mode 100644
index 0000000..25a4f6b
--- /dev/null
+++ b/Source/devtools/front_end/SettingsUI.js
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+WebInspector.SettingsUI = {}
+
+/**
+ * @param {string} name
+ * @param {function(): *} getter
+ * @param {function(*)} setter
+ * @param {boolean=} omitParagraphElement
+ * @param {!Element=} inputElement
+ * @param {string=} tooltip
+ * @return {!Element}
+ */
+WebInspector.SettingsUI.createCheckbox = function(name, getter, setter, omitParagraphElement, inputElement, tooltip)
+{
+    var input = inputElement || document.createElement("input");
+    input.type = "checkbox";
+    input.name = name;
+    input.checked = getter();
+
+    function listener()
+    {
+        setter(input.checked);
+    }
+    input.addEventListener("change", listener, false);
+
+    var label = document.createElement("label");
+    label.appendChild(input);
+    label.createTextChild(name);
+    if (tooltip)
+        label.title = tooltip;
+
+    if (omitParagraphElement)
+        return label;
+
+    var p = document.createElement("p");
+    p.appendChild(label);
+    return p;
+}
+
+/**
+ * @param {string} name
+ * @param {!WebInspector.Setting} setting
+ * @param {boolean=} omitParagraphElement
+ * @param {!Element=} inputElement
+ * @param {string=} tooltip
+ * @return {!Element}
+ */
+WebInspector.SettingsUI.createSettingCheckbox = function(name, setting, omitParagraphElement, inputElement, tooltip)
+{
+    return WebInspector.SettingsUI.createCheckbox(name, setting.get.bind(setting), setting.set.bind(setting), omitParagraphElement, inputElement, tooltip);
+}
+
+/**
+ * @param {!WebInspector.Setting} setting
+ * @return {!Element}
+ */
+WebInspector.SettingsUI.createSettingFieldset = function(setting)
+{
+    var fieldset = document.createElement("fieldset");
+    fieldset.disabled = !setting.get();
+    setting.addChangeListener(settingChanged);
+    return fieldset;
+
+    function settingChanged()
+    {
+        fieldset.disabled = !setting.get();
+    }
+}
diff --git a/Source/devtools/front_end/ShortcutsScreen.js b/Source/devtools/front_end/ShortcutsScreen.js
index ff8f466..4624557 100644
--- a/Source/devtools/front_end/ShortcutsScreen.js
+++ b/Source/devtools/front_end/ShortcutsScreen.js
@@ -86,9 +86,9 @@
 
 /**
  * We cannot initialize it here as localized strings are not loaded yet.
- * @type {?WebInspector.ShortcutsScreen}
+ * @type {!WebInspector.ShortcutsScreen}
  */
-WebInspector.shortcutsScreen = null;
+WebInspector.shortcutsScreen;
 
 /**
  * @constructor
@@ -97,7 +97,7 @@
 WebInspector.ShortcutsSection = function(name)
 {
     this.name = name;
-    this._lines = /** @type {!Array.<{key: !Node, text: string}>} */ ([]);
+    this._lines = /** @type {!Array.<!{key: !Node, text: string}>} */ ([]);
     this.order = ++WebInspector.ShortcutsSection._sequenceNumber;
 };
 
@@ -211,3 +211,252 @@
         return result;
     }
 }
+
+WebInspector.ShortcutsScreen.registerShortcuts = function()
+{
+    // Elements panel
+    var elementsSection = WebInspector.shortcutsScreen.section(WebInspector.UIString("Elements Panel"));
+
+    var navigate = WebInspector.ShortcutsScreen.ElementsPanelShortcuts.NavigateUp.concat(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.NavigateDown);
+    elementsSection.addRelatedKeys(navigate, WebInspector.UIString("Navigate elements"));
+
+    var expandCollapse = WebInspector.ShortcutsScreen.ElementsPanelShortcuts.Expand.concat(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.Collapse);
+    elementsSection.addRelatedKeys(expandCollapse, WebInspector.UIString("Expand/collapse"));
+
+    elementsSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.EditAttribute, WebInspector.UIString("Edit attribute"));
+    elementsSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.HideElement, WebInspector.UIString("Hide element"));
+    elementsSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.ToggleEditAsHTML, WebInspector.UIString("Toggle edit as HTML"));
+
+    var stylesPaneSection = WebInspector.shortcutsScreen.section(WebInspector.UIString("Styles Pane"));
+
+    var nextPreviousProperty = WebInspector.ShortcutsScreen.ElementsPanelShortcuts.NextProperty.concat(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.PreviousProperty);
+    stylesPaneSection.addRelatedKeys(nextPreviousProperty, WebInspector.UIString("Next/previous property"));
+
+    stylesPaneSection.addRelatedKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.IncrementValue, WebInspector.UIString("Increment value"));
+    stylesPaneSection.addRelatedKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.DecrementValue, WebInspector.UIString("Decrement value"));
+
+    stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.IncrementBy10, WebInspector.UIString("Increment by %f", 10));
+    stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.DecrementBy10, WebInspector.UIString("Decrement by %f", 10));
+
+    stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.IncrementBy100, WebInspector.UIString("Increment by %f", 100));
+    stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.DecrementBy100, WebInspector.UIString("Decrement by %f", 100));
+
+    stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.IncrementBy01, WebInspector.UIString("Increment by %f", 0.1));
+    stylesPaneSection.addAlternateKeys(WebInspector.ShortcutsScreen.ElementsPanelShortcuts.DecrementBy01, WebInspector.UIString("Decrement by %f", 0.1));
+
+
+    // Sources panel
+    var section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Sources Panel"));
+
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.PauseContinue, WebInspector.UIString("Pause/Continue"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepOver, WebInspector.UIString("Step over"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepInto, WebInspector.UIString("Step into"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepIntoSelection, WebInspector.UIString("Step into selection"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepOut, WebInspector.UIString("Step out"));
+
+    var nextAndPrevFrameKeys = WebInspector.ShortcutsScreen.SourcesPanelShortcuts.NextCallFrame.concat(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.PrevCallFrame);
+    section.addRelatedKeys(nextAndPrevFrameKeys, WebInspector.UIString("Next/previous call frame"));
+
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.EvaluateSelectionInConsole, WebInspector.UIString("Evaluate selection in console"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.AddSelectionToWatch, WebInspector.UIString("Add selection to watch"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.GoToMember, WebInspector.UIString("Go to member"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.ToggleBreakpoint, WebInspector.UIString("Toggle breakpoint"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.ToggleComment, WebInspector.UIString("Toggle comment"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.CloseEditorTab, WebInspector.UIString("Close editor tab"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.IncreaseCSSUnitByOne, WebInspector.UIString("Increment CSS unit by 1"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.DecreaseCSSUnitByOne, WebInspector.UIString("Decrement CSS unit by 1"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.IncreaseCSSUnitByTen, WebInspector.UIString("Increment CSS unit by 10"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.DecreaseCSSUnitByTen, WebInspector.UIString("Decrement CSS unit by 10"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.JumpToPreviousLocation, WebInspector.UIString("Jump to previous editing location"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.JumpToNextLocation, WebInspector.UIString("Jump to next editing location"));
+
+    // Timeline panel
+    section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Timeline Panel"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.TimelinePanelShortcuts.StartStopRecording, WebInspector.UIString("Start/stop recording"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.TimelinePanelShortcuts.SaveToFile, WebInspector.UIString("Save timeline data"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.TimelinePanelShortcuts.LoadFromFile, WebInspector.UIString("Load timeline data"));
+
+
+    // Profiles panel
+    section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Profiles Panel"));
+    section.addAlternateKeys(WebInspector.ShortcutsScreen.ProfilesPanelShortcuts.StartStopRecording, WebInspector.UIString("Start/stop recording"));
+}
+
+WebInspector.ShortcutsScreen.ElementsPanelShortcuts = {
+    NavigateUp: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up)
+    ],
+
+    NavigateDown: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down)
+    ],
+
+    Expand: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Right)
+    ],
+
+    Collapse: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Left)
+    ],
+
+    EditAttribute: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Enter)
+    ],
+
+    HideElement: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.H)
+    ],
+
+    ToggleEditAsHTML: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F2)
+    ],
+
+    NextProperty: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Tab)
+    ],
+
+    PreviousProperty: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Tab, WebInspector.KeyboardShortcut.Modifiers.Shift)
+    ],
+
+    IncrementValue: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up)
+    ],
+
+    DecrementValue: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down)
+    ],
+
+    IncrementBy10: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp),
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up, WebInspector.KeyboardShortcut.Modifiers.Shift)
+    ],
+
+    DecrementBy10: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown),
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down, WebInspector.KeyboardShortcut.Modifiers.Shift)
+    ],
+
+    IncrementBy100: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp, WebInspector.KeyboardShortcut.Modifiers.Shift)
+    ],
+
+    DecrementBy100: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown, WebInspector.KeyboardShortcut.Modifiers.Shift)
+    ],
+
+    IncrementBy01: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp, WebInspector.KeyboardShortcut.Modifiers.Alt)
+    ],
+
+    DecrementBy01: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown, WebInspector.KeyboardShortcut.Modifiers.Alt)
+    ]
+};
+
+WebInspector.ShortcutsScreen.SourcesPanelShortcuts = {
+    IncreaseCSSUnitByOne: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up, WebInspector.KeyboardShortcut.Modifiers.Alt)
+    ],
+
+    DecreaseCSSUnitByOne: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down, WebInspector.KeyboardShortcut.Modifiers.Alt)
+    ],
+
+    IncreaseCSSUnitByTen: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp, WebInspector.KeyboardShortcut.Modifiers.Alt)
+    ],
+
+    DecreaseCSSUnitByTen: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown, WebInspector.KeyboardShortcut.Modifiers.Alt)
+    ],
+
+    RunSnippet: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Enter, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ],
+
+    PauseContinue: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F8),
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Backslash, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ],
+
+    StepOver: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F10),
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.SingleQuote, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ],
+
+    StepInto: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F11),
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Semicolon, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ],
+
+    StepIntoSelection: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F11, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta),
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F11, WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ],
+
+    StepOut: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F11, WebInspector.KeyboardShortcut.Modifiers.Shift),
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Semicolon, WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ],
+
+    EvaluateSelectionInConsole: [
+        WebInspector.KeyboardShortcut.makeDescriptor("e", WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.Ctrl)
+    ],
+
+    AddSelectionToWatch: [
+        WebInspector.KeyboardShortcut.makeDescriptor("a", WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.Ctrl)
+    ],
+
+    GoToMember: [
+        WebInspector.KeyboardShortcut.makeDescriptor("o", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta | WebInspector.KeyboardShortcut.Modifiers.Shift)
+    ],
+
+    ToggleBreakpoint: [
+        WebInspector.KeyboardShortcut.makeDescriptor("b", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ],
+
+    NextCallFrame: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Period, WebInspector.KeyboardShortcut.Modifiers.Ctrl)
+    ],
+
+    PrevCallFrame: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Comma, WebInspector.KeyboardShortcut.Modifiers.Ctrl)
+    ],
+
+    ToggleComment: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Slash, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ],
+
+    JumpToPreviousLocation: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Minus, WebInspector.KeyboardShortcut.Modifiers.Alt)
+    ],
+
+    JumpToNextLocation: [
+        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Plus, WebInspector.KeyboardShortcut.Modifiers.Alt)
+    ],
+
+    CloseEditorTab: [
+        WebInspector.KeyboardShortcut.makeDescriptor("w", WebInspector.KeyboardShortcut.Modifiers.Alt)
+    ],
+};
+
+WebInspector.ShortcutsScreen.TimelinePanelShortcuts = {
+    StartStopRecording: [
+        WebInspector.KeyboardShortcut.makeDescriptor("e", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ],
+
+    SaveToFile: [
+        WebInspector.KeyboardShortcut.makeDescriptor("s", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ],
+
+    LoadFromFile: [
+        WebInspector.KeyboardShortcut.makeDescriptor("o", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ]
+};
+
+WebInspector.ShortcutsScreen.ProfilesPanelShortcuts = {
+    StartStopRecording: [
+        WebInspector.KeyboardShortcut.makeDescriptor("e", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
+    ]
+}
diff --git a/Source/devtools/front_end/SidebarPane.js b/Source/devtools/front_end/SidebarPane.js
index 4a07e2a..332f5cb 100644
--- a/Source/devtools/front_end/SidebarPane.js
+++ b/Source/devtools/front_end/SidebarPane.js
@@ -50,6 +50,9 @@
 }
 
 WebInspector.SidebarPane.prototype = {
+    /**
+     * @return {string}
+     */
     title: function()
     {
         return this._title;
@@ -157,7 +160,7 @@
 WebInspector.SidebarPaneStack = function()
 {
     WebInspector.View.call(this);
-    this.element.className = "sidebar-pane-stack fill";
+    this.element.className = "sidebar-pane-stack";
     this.registerRequiredCSS("sidebarPane.css");
 }
 
@@ -180,7 +183,7 @@
 WebInspector.SidebarTabbedPane = function()
 {
     WebInspector.TabbedPane.call(this);
-    this.setRetainTabsOrder(true);
+    this.setRetainTabOrder(true);
     this.element.classList.add("sidebar-tabbed-pane");
     this.registerRequiredCSS("sidebarPane.css");
 }
diff --git a/Source/devtools/front_end/SidebarTreeElement.js b/Source/devtools/front_end/SidebarTreeElement.js
index 10c5e36..c14db7f 100644
--- a/Source/devtools/front_end/SidebarTreeElement.js
+++ b/Source/devtools/front_end/SidebarTreeElement.js
@@ -91,24 +91,14 @@
         this.disclosureButton.className = "disclosure-button";
     }
 
-    if (!this.iconElement) {
-        this.iconElement = document.createElement("img");
-        this.iconElement.className = "icon";
-    }
+    this.iconElement = document.createElementWithClass("img", "icon");
+    this.statusElement = document.createElementWithClass("div", "status");
+    this.titlesElement = document.createElementWithClass("div", "titles");
 
-    this.statusElement = document.createElement("div");
-    this.statusElement.className = "status";
+    this.titleContainer = this.titlesElement.createChild("span", "title-container");
+    this.titleElement = this.titleContainer.createChild("span", "title");
 
-    this.titlesElement = document.createElement("div");
-    this.titlesElement.className = "titles";
-
-    this.titleElement = document.createElement("span");
-    this.titleElement.className = "title";
-    this.titlesElement.appendChild(this.titleElement);
-
-    this.subtitleElement = document.createElement("span");
-    this.subtitleElement.className = "subtitle";
-    this.titlesElement.appendChild(this.subtitleElement);
+    this.subtitleElement = this.titlesElement.createChild("span", "subtitle");
 
     this.className = className;
     this.mainTitle = title;
@@ -180,6 +170,9 @@
         }
     },
 
+    /**
+     * @return {boolean}
+     */
     isEventWithinDisclosureTriangle: function(event)
     {
         return event.target === this.disclosureButton;
diff --git a/Source/devtools/front_end/SidebarView.js b/Source/devtools/front_end/SidebarView.js
deleted file mode 100644
index e6cdff1..0000000
--- a/Source/devtools/front_end/SidebarView.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * 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:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
- * OR ITS 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.
- */
-
-/**
- * @constructor
- * @extends {WebInspector.SplitView}
- * @param {string=} sidebarPosition
- * @param {string=} sidebarWidthSettingName
- * @param {number=} defaultSidebarWidth
- * @param {number=} defaultSidebarHeight
- */
-WebInspector.SidebarView = function(sidebarPosition, sidebarWidthSettingName, defaultSidebarWidth, defaultSidebarHeight)
-{
-    WebInspector.SplitView.call(this, true, sidebarWidthSettingName, defaultSidebarWidth, defaultSidebarHeight);
-
-    this.setSidebarElementConstraints(Preferences.minSidebarWidth, Preferences.minSidebarHeight);
-    this.setMainElementConstraints(0.5, 0.5);
-
-    this.setSecondIsSidebar(sidebarPosition === WebInspector.SidebarView.SidebarPosition.End);
-}
-
-WebInspector.SidebarView.EventTypes = {
-    Resized: "Resized"
-}
-
-/**
- * @enum {string}
- */
-WebInspector.SidebarView.SidebarPosition = {
-    Start: "Start",
-    End: "End"
-}
-
-WebInspector.SidebarView.prototype = {
-    /**
-     * @param {number} width
-     */
-    setSidebarWidth: function(width)
-    {
-        this.setSidebarSize(width);
-    },
-
-    /**
-     * @return {number}
-     */
-    sidebarWidth: function()
-    {
-        return this.sidebarSize();
-    },
-
-    onResize: function()
-    {
-        WebInspector.SplitView.prototype.onResize.call(this);
-        this.dispatchEventToListeners(WebInspector.SidebarView.EventTypes.Resized, this.sidebarWidth());
-    },
-
-    hideMainElement: function()
-    {
-        if (this.isSidebarSecond())
-            this.showOnlySecond();
-        else
-            this.showOnlyFirst();
-    },
-
-    showMainElement: function()
-    {
-        this.showBoth();
-    },
-
-    hideSidebarElement: function()
-    {
-        if (this.isSidebarSecond())
-            this.showOnlyFirst();
-        else
-            this.showOnlySecond();
-    },
-
-    showSidebarElement: function()
-    {
-        this.showBoth();
-    },
-
-    /**
-     * @return {!Array.<!Element>}
-     */
-    elementsToRestoreScrollPositionsFor: function()
-    {
-        return [ this.mainElement, this.sidebarElement ];
-    },
-
-    __proto__: WebInspector.SplitView.prototype
-}
diff --git a/Source/devtools/front_end/SimpleHistoryManager.js b/Source/devtools/front_end/SimpleHistoryManager.js
new file mode 100644
index 0000000..5771e7a
--- /dev/null
+++ b/Source/devtools/front_end/SimpleHistoryManager.js
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+/**
+ * @interface
+ */
+WebInspector.HistoryEntry = function() { }
+
+WebInspector.HistoryEntry.prototype = {
+    /**
+     * @return {boolean}
+     */
+    valid: function() { },
+
+    reveal: function() { }
+};
+
+/**
+ * @constructor
+ * @param {number} historyDepth
+ */
+WebInspector.SimpleHistoryManager = function(historyDepth)
+{
+    this._entries = [];
+    this._activeEntryIndex = -1;
+    this._coalescingReadonly = 0;
+    this._historyDepth = historyDepth;
+}
+
+WebInspector.SimpleHistoryManager.prototype = {
+    readOnlyLock: function()
+    {
+        ++this._coalescingReadonly;
+    },
+
+    releaseReadOnlyLock: function()
+    {
+        --this._coalescingReadonly;
+    },
+
+    /**
+     * @return {boolean}
+     */
+    readOnly: function()
+    {
+        return !!this._coalescingReadonly;
+    },
+
+    /**
+     * @param {!function(!WebInspector.HistoryEntry):boolean} filterOutCallback
+     */
+    filterOut: function(filterOutCallback)
+    {
+        if (this.readOnly())
+            return;
+        var filteredEntries = [];
+        var removedBeforeActiveEntry = 0;
+        for (var i = 0; i < this._entries.length; ++i) {
+            if (!filterOutCallback(this._entries[i])) {
+                filteredEntries.push(this._entries[i]);
+            } else if (i <= this._activeEntryIndex)
+                ++removedBeforeActiveEntry;
+        }
+        this._entries = filteredEntries;
+        this._activeEntryIndex = Math.max(0, this._activeEntryIndex - removedBeforeActiveEntry);
+    },
+
+    /**
+     * @return {boolean}
+     */
+    empty: function()
+    {
+        return !this._entries.length;
+    },
+
+    /**
+     * @return {?WebInspector.HistoryEntry}
+     */
+    active: function()
+    {
+        return this.empty() ? null : this._entries[this._activeEntryIndex];
+    },
+
+    /**
+     * @param {!WebInspector.HistoryEntry} entry
+     */
+    push: function(entry)
+    {
+        if (this.readOnly())
+            return;
+        if (!this.empty())
+            this._entries.splice(this._activeEntryIndex + 1);
+        this._entries.push(entry);
+        if (this._entries.length > this._historyDepth)
+            this._entries.shift();
+        this._activeEntryIndex = this._entries.length - 1;
+    },
+
+    /**
+     * @return {boolean}
+     */
+    rollback: function()
+    {
+        if (this.empty())
+            return false;
+
+        var revealIndex = this._activeEntryIndex - 1;
+        while (revealIndex >= 0 && !this._entries[revealIndex].valid())
+            --revealIndex;
+        if (revealIndex < 0)
+            return false;
+
+        this.readOnlyLock();
+        this._entries[revealIndex].reveal();
+        this.releaseReadOnlyLock();
+
+        this._activeEntryIndex = revealIndex;
+        return true;
+    },
+
+    /**
+     * @return {boolean}
+     */
+    rollover: function()
+    {
+        var revealIndex = this._activeEntryIndex + 1;
+
+        while (revealIndex < this._entries.length && !this._entries[revealIndex].valid())
+            ++revealIndex;
+        if (revealIndex >= this._entries.length)
+            return false;
+
+        this.readOnlyLock();
+        this._entries[revealIndex].reveal();
+        this.releaseReadOnlyLock();
+
+        this._activeEntryIndex = revealIndex;
+        return true;
+    },
+};
diff --git a/Source/devtools/front_end/SourceFrame.js b/Source/devtools/front_end/SourceFrame.js
index a891398..8e0125a 100644
--- a/Source/devtools/front_end/SourceFrame.js
+++ b/Source/devtools/front_end/SourceFrame.js
@@ -31,20 +31,20 @@
 /**
  * @extends {WebInspector.View}
  * @constructor
+ * @implements {WebInspector.Replaceable}
  * @param {!WebInspector.ContentProvider} contentProvider
  */
 WebInspector.SourceFrame = function(contentProvider)
 {
     WebInspector.View.call(this);
     this.element.classList.add("script-view");
-    this.element.classList.add("fill");
 
     this._url = contentProvider.contentURL();
     this._contentProvider = contentProvider;
 
     var textEditorDelegate = new WebInspector.TextEditorDelegateForSourceFrame(this);
 
-    loadScript("CodeMirrorTextEditor.js");
+    WebInspector.moduleManager.loadModule("codemirror");
     this._textEditor = new WebInspector.CodeMirrorTextEditor(this._url, textEditorDelegate);
 
     this._currentSearchResultIndex = -1;
@@ -57,7 +57,6 @@
     this._textEditor.setReadOnly(!this.canEditSource());
 
     this._shortcuts = {};
-    this.addShortcut(WebInspector.KeyboardShortcut.makeKey("s", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta), this._commitEditing.bind(this));
     this.element.addEventListener("keydown", this._handleKeyDown.bind(this), false);
 
     this._sourcePosition = new WebInspector.StatusBarText("", "source-frame-cursor-position");
@@ -92,7 +91,8 @@
 
 WebInspector.SourceFrame.Events = {
     ScrollChanged: "ScrollChanged",
-    SelectionChanged: "SelectionChanged"
+    SelectionChanged: "SelectionChanged",
+    JumpHappened: "JumpHappened"
 }
 
 WebInspector.SourceFrame.prototype = {
@@ -145,6 +145,9 @@
         return [];
     },
 
+    /**
+     * @return {!Element}
+     */
     defaultFocusedElement: function()
     {
         return this._textEditor.defaultFocusedElement();
@@ -155,6 +158,9 @@
         return this._loaded;
     },
 
+    /**
+     * @return {boolean}
+     */
     hasContent: function()
     {
         return true;
@@ -195,6 +201,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     canHighlightPosition: function()
     {
@@ -410,6 +417,10 @@
      */
     performSearch: function(query, shouldJump, callback, currentMatchChangedCallback, searchResultsChangedCallback)
     {
+        /**
+         * @param {string} query
+         * @this {WebInspector.SourceFrame}
+         */
         function doFindSearchMatches(query)
         {
             this._currentSearchResultIndex = -1;
@@ -480,6 +491,9 @@
             this._textEditor.setSelection(range);
     },
 
+    /**
+     * @return {boolean}
+     */
     hasSearchResults: function()
     {
         return this._searchResults.length > 0;
@@ -508,11 +522,17 @@
         this.jumpToSearchResult(currentIndex - 1);
     },
 
+    /**
+     * @return {boolean}
+     */
     showingFirstSearchResult: function()
     {
         return this._searchResults.length &&  this._currentSearchResultIndex === 0;
     },
 
+    /**
+     * @return {boolean}
+     */
     showingLastSearchResult: function()
     {
         return this._searchResults.length && this._currentSearchResultIndex === (this._searchResults.length - 1);
@@ -536,7 +556,7 @@
     /**
      * @param {string} text
      */
-    replaceSearchMatchWith: function(text)
+    replaceSelectionWith: function(text)
     {
         var range = this._searchResults[this._currentSearchResultIndex];
         if (!range)
@@ -713,6 +733,18 @@
     {
     },
 
+    /**
+     * @param {?WebInspector.TextRange} from
+     * @param {?WebInspector.TextRange} to
+     */
+    onJumpToPosition: function(from, to)
+    {
+        this.dispatchEventToListeners(WebInspector.SourceFrame.Events.JumpHappened, {
+            from: from,
+            to: to
+        });
+    },
+
     inheritScrollPositions: function(sourceFrame)
     {
         this._textEditor.inheritScrollPositions(sourceFrame._textEditor);
@@ -727,13 +759,6 @@
     },
 
     /**
-     * @param {string} text
-     */
-    commitEditing: function(text)
-    {
-    },
-
-    /**
      * @param {!WebInspector.TextRange} textRange
      */
     selectionChanged: function(textRange)
@@ -780,16 +805,6 @@
             e.consume(true);
     },
 
-    _commitEditing: function()
-    {
-        if (this._textEditor.readOnly())
-            return false;
-
-        var content = this._textEditor.text();
-        this.commitEditing(content);
-        return true;
-    },
-
     __proto__: WebInspector.View.prototype
 }
 
@@ -851,5 +866,12 @@
         return WebInspector.linkifyURLAsNode(targetLocation || hrefValue, hrefValue, undefined, isExternal);
     },
 
-    __proto__: WebInspector.TextEditorDelegate.prototype
+    /**
+     * @param {?WebInspector.TextRange} from
+     * @param {?WebInspector.TextRange} to
+     */
+    onJumpToPosition: function(from, to)
+    {
+        this._sourceFrame.onJumpToPosition(from, to);
+    }
 }
diff --git a/Source/devtools/front_end/SourceMap.js b/Source/devtools/front_end/SourceMap.js
index f1613a4..64c9b90 100644
--- a/Source/devtools/front_end/SourceMap.js
+++ b/Source/devtools/front_end/SourceMap.js
@@ -29,6 +29,37 @@
  */
 
 /**
+ * @constructor
+ */
+function SourceMapV3()
+{
+    /** @type {number} */ this.version;
+    /** @type {string|undefined} */ this.file;
+    /** @type {!Array.<string>} */ this.sources;
+    /** @type {!Array.<!SourceMapV3.Section>|undefined} */ this.sections;
+    /** @type {string} */ this.mappings;
+    /** @type {string|undefined} */ this.sourceRoot;
+}
+
+/**
+ * @constructor
+ */
+SourceMapV3.Section = function()
+{
+    /** @type {!SourceMapV3} */ this.map;
+    /** @type {!SourceMapV3.Offset} */ this.offset;
+}
+
+/**
+ * @constructor
+ */
+SourceMapV3.Offset = function()
+{
+    /** @type {number} */ this.line;
+    /** @type {number} */ this.column;
+}
+
+/**
  * Implements Source Map V3 model. See http://code.google.com/p/closure-compiler/wiki/SourceMaps
  * for format description.
  * @constructor
@@ -64,6 +95,7 @@
  * @param {string} sourceMapURL
  * @param {string} compiledURL
  * @param {function(?WebInspector.SourceMap)} callback
+ * @this {WebInspector.SourceMap}
  */
 WebInspector.SourceMap.load = function(sourceMapURL, compiledURL, callback)
 {
@@ -161,7 +193,7 @@
     /**
      * @param {number} lineNumber in compiled resource
      * @param {number} columnNumber in compiled resource
-     * @return {?Array.<*>}
+     * @return {?Array.<number|string>}
      */
     findEntry: function(lineNumber, columnNumber)
     {
diff --git a/Source/devtools/front_end/SourcesPanel.js b/Source/devtools/front_end/SourcesPanel.js
index e6023cc..a0910c5 100644
--- a/Source/devtools/front_end/SourcesPanel.js
+++ b/Source/devtools/front_end/SourcesPanel.js
@@ -26,12 +26,13 @@
 
 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("NavigatorOverlayController.js");
 importScript("NavigatorView.js");
 importScript("RevisionHistoryView.js");
 importScript("ScopeChainSidebarPane.js");
@@ -41,12 +42,14 @@
 importScript("TabbedEditorContainer.js");
 importScript("WatchExpressionsSidebarPane.js");
 importScript("WorkersSidebarPane.js");
+importScript("ThreadsToolbar.js");
 
 /**
  * @constructor
  * @implements {WebInspector.TabbedEditorContainerDelegate}
  * @implements {WebInspector.ContextMenu.Provider}
  * @implements {WebInspector.Searchable}
+ * @implements {WebInspector.Replaceable}
  * @extends {WebInspector.Panel}
  * @param {!WebInspector.Workspace=} workspaceForTest
  */
@@ -56,47 +59,54 @@
     this.registerRequiredCSS("sourcesPanel.css");
     this.registerRequiredCSS("textPrompt.css"); // Watch Expressions autocomplete.
 
-    WebInspector.settings.navigatorWasOnceHidden = WebInspector.settings.createSetting("navigatorWasOnceHidden", false);
+    WebInspector.settings.navigatorHidden = WebInspector.settings.createSetting("navigatorHidden", false);
     WebInspector.settings.debuggerSidebarHidden = WebInspector.settings.createSetting("debuggerSidebarHidden", false);
     WebInspector.settings.showEditorInDrawer = WebInspector.settings.createSetting("showEditorInDrawer", true);
 
     this._workspace = workspaceForTest || WebInspector.workspace;
 
+    /**
+     * @return {!WebInspector.View}
+     * @this {WebInspector.SourcesPanel}
+     */
     function viewGetter()
     {
-        return this.visibleView;
+        return this;
     }
     WebInspector.GoToLineDialog.install(this, viewGetter.bind(this));
 
     var helpSection = WebInspector.shortcutsScreen.section(WebInspector.UIString("Sources Panel"));
     this.debugToolbar = this._createDebugToolbar();
+    this._debugToolbarDrawer = this._createDebugToolbarDrawer();
+    this.threadsToolbar = new WebInspector.ThreadsToolbar();
 
     const initialDebugSidebarWidth = 225;
-    const minimumDebugSidebarWidthPercent = 0.5;
-    this.createSidebarView(this.element, WebInspector.SidebarView.SidebarPosition.End, initialDebugSidebarWidth);
-    this.splitView.element.id = "scripts-split-view";
-    this.splitView.setSidebarElementConstraints(Preferences.minScriptsSidebarWidth);
-    this.splitView.setMainElementConstraints(minimumDebugSidebarWidthPercent);
+    this._splitView = new WebInspector.SplitView(true, true, "sourcesSidebarWidth", initialDebugSidebarWidth);
+    this._splitView.setMainElementConstraints(200, 25);
+    this._splitView.setSidebarElementConstraints(200, 25);
+
+    this._splitView.show(this.element);
+    if (WebInspector.settings.debuggerSidebarHidden.get())
+        this._splitView.hideSidebar();
 
     // Create scripts navigator
     const initialNavigatorWidth = 225;
     const minimumViewsContainerWidthPercent = 0.5;
-    this.editorView = new WebInspector.SidebarView(WebInspector.SidebarView.SidebarPosition.Start, "scriptsPanelNavigatorSidebarWidth", initialNavigatorWidth);
+    this.editorView = new WebInspector.SplitView(true, false, "scriptsPanelNavigatorSidebarWidth", initialNavigatorWidth);
+    if (WebInspector.settings.navigatorHidden.get())
+        this.editorView.hideSidebar();
     this.editorView.element.id = "scripts-editor-split-view";
     this.editorView.element.tabIndex = 0;
 
-    this.editorView.setSidebarElementConstraints(Preferences.minScriptsSidebarWidth);
+    this.editorView.setSidebarElementConstraints(Preferences.minSidebarWidth);
     this.editorView.setMainElementConstraints(minimumViewsContainerWidthPercent);
-    this.editorView.show(this.splitView.mainElement);
+    this.editorView.show(this._splitView.mainElement());
 
     this._navigator = new WebInspector.SourcesNavigator();
-    this._navigator.view.show(this.editorView.sidebarElement);
+    this._navigator.view.show(this.editorView.sidebarElement());
 
     var tabbedEditorPlaceholderText = WebInspector.isMac() ? WebInspector.UIString("Hit Cmd+O to open a file") : WebInspector.UIString("Hit Ctrl+O to open a file");
 
-    this.editorView.mainElement.classList.add("vbox");
-    this.editorView.sidebarElement.classList.add("vbox");
-
     this.sourcesView = new WebInspector.SourcesView();
 
     this._searchableView = new WebInspector.SearchableView(this);
@@ -106,8 +116,6 @@
     this._editorContainer = new WebInspector.TabbedEditorContainer(this, "previouslyViewedFiles", tabbedEditorPlaceholderText);
     this._editorContainer.show(this._searchableView.element);
 
-    this._navigatorController = new WebInspector.NavigatorOverlayController(this.editorView, this._navigator.view, this._editorContainer.view);
-
     this._navigator.addEventListener(WebInspector.SourcesNavigator.Events.SourceSelected, this._sourceSelected, this);
     this._navigator.addEventListener(WebInspector.SourcesNavigator.Events.ItemSearchStarted, this._itemSearchStarted, this);
     this._navigator.addEventListener(WebInspector.SourcesNavigator.Events.ItemCreationRequested, this._itemCreationRequested, this);
@@ -118,7 +126,7 @@
 
     this._debugSidebarResizeWidgetElement = document.createElementWithClass("div", "resizer-widget");
     this._debugSidebarResizeWidgetElement.id = "scripts-debug-sidebar-resizer-widget";
-    this.splitView.installResizer(this._debugSidebarResizeWidgetElement);
+    this._splitView.installResizer(this._debugSidebarResizeWidgetElement);
 
     this.sidebarPanes = {};
     this.sidebarPanes.watchExpressions = new WebInspector.WatchExpressionsSidebarPane();
@@ -127,19 +135,33 @@
     this.sidebarPanes.callstack.addEventListener(WebInspector.CallStackSidebarPane.Events.CallFrameRestarted, this._callFrameRestartedInSidebar.bind(this));
 
     this.sidebarPanes.scopechain = new WebInspector.ScopeChainSidebarPane();
-    this.sidebarPanes.jsBreakpoints = new WebInspector.JavaScriptBreakpointsSidebarPane(/** @type {!WebInspector.BreakpointManager} */ (WebInspector.breakpointManager), this._showSourceLocation.bind(this));
+    this.sidebarPanes.jsBreakpoints = new WebInspector.JavaScriptBreakpointsSidebarPane(WebInspector.debuggerModel, WebInspector.breakpointManager, this._showSourceLocation.bind(this));
     this.sidebarPanes.domBreakpoints = WebInspector.domBreakpointsSidebarPane.createProxy(this);
     this.sidebarPanes.xhrBreakpoints = new WebInspector.XHRBreakpointsSidebarPane();
     this.sidebarPanes.eventListenerBreakpoints = new WebInspector.EventListenerBreakpointsSidebarPane();
 
-    if (Capabilities.canInspectWorkers && !WebInspector.WorkerManager.isWorkerFrontend()) {
-        WorkerAgent.enable();
-        this.sidebarPanes.workerList = new WebInspector.WorkersSidebarPane(WebInspector.workerManager);
+    if (Capabilities.canInspectWorkers && !WebInspector.isWorkerFrontend())
+        this.sidebarPanes.workerList = new WebInspector.WorkersSidebarPane();
+
+    /**
+     * @this {WebInspector.SourcesPanel}
+     */
+    function currentSourceFrame()
+    {
+        var uiSourceCode = this.currentUISourceCode();
+        if (!uiSourceCode)
+            return null;
+        return this._sourceFramesByUISourceCode.get(uiSourceCode);
     }
 
+    this._historyManager = new WebInspector.EditingLocationHistoryManager(this, currentSourceFrame.bind(this));
+    this.registerShortcuts(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.JumpToPreviousLocation, this._onJumpToPreviousLocation.bind(this));
+    this.registerShortcuts(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.JumpToNextLocation, this._onJumpToNextLocation.bind(this));
+    this.registerShortcuts(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.CloseEditorTab, this._onCloseEditorTab.bind(this));
+
     this.sidebarPanes.callstack.registerShortcuts(this.registerShortcuts.bind(this));
-    this.registerShortcuts(WebInspector.SourcesPanelDescriptor.ShortcutKeys.GoToMember, this._showOutlineDialog.bind(this));
-    this.registerShortcuts(WebInspector.SourcesPanelDescriptor.ShortcutKeys.ToggleBreakpoint, this._toggleBreakpoint.bind(this));
+    this.registerShortcuts(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.GoToMember, this._showOutlineDialog.bind(this));
+    this.registerShortcuts(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.ToggleBreakpoint, this._toggleBreakpoint.bind(this));
 
     this._extensionSidebarPanes = [];
 
@@ -151,7 +173,7 @@
     this._scriptViewStatusBarItemsContainer.className = "inline-block";
 
     this._scriptViewStatusBarTextContainer = document.createElement("div");
-    this._scriptViewStatusBarTextContainer.className = "inline-block";
+    this._scriptViewStatusBarTextContainer.className = "hbox";
 
     this._statusBarContainerElement = this.sourcesView.element.createChild("div", "sources-status-bar");
     this._statusBarContainerElement.appendChild(this._toggleFormatSourceButton.element);
@@ -167,11 +189,11 @@
     /** @type {!Map.<!WebInspector.UISourceCode, !WebInspector.SourceFrame>} */
     this._sourceFramesByUISourceCode = new Map();
     this._updateDebuggerButtons();
-    this._pauseOnExceptionStateChanged();
+    this._pauseOnExceptionEnabledChanged();
     if (WebInspector.debuggerModel.isPaused())
         this._showDebuggerPausedDetails();
 
-    WebInspector.settings.pauseOnExceptionStateString.addChangeListener(this._pauseOnExceptionStateChanged, this);
+    WebInspector.settings.pauseOnExceptionEnabled.addChangeListener(this._pauseOnExceptionEnabledChanged, this);
     WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerWasEnabled, this._debuggerWasEnabled, this);
     WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerWasDisabled, this._debuggerWasDisabled, this);
     WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
@@ -189,8 +211,6 @@
     this._workspace.addEventListener(WebInspector.Workspace.Events.ProjectWillReset, this._projectWillReset.bind(this), this);
     WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this);
 
-    WebInspector.advancedSearchController.registerSearchScope(new WebInspector.SourcesSearchScope(this._workspace));
-
     this._boundOnKeyUp = this._onKeyUp.bind(this);
     this._boundOnKeyDown = this._onKeyDown.bind(this);
 
@@ -211,6 +231,39 @@
 }
 
 WebInspector.SourcesPanel.prototype = {
+    /**
+     * @param {?Event=} event
+     */
+    _onCloseEditorTab: function(event)
+    {
+        var uiSourceCode = this.currentUISourceCode();
+        if (!uiSourceCode)
+            return false;
+        this._editorContainer.closeFile(uiSourceCode);
+        return true;
+    },
+
+    /**
+     * @param {?Event=} event
+     */
+    _onJumpToPreviousLocation: function(event)
+    {
+        this._historyManager.rollback();
+        return true;
+    },
+
+    /**
+     * @param {?Event=} event
+     */
+    _onJumpToNextLocation: function(event)
+    {
+        this._historyManager.rollover();
+        return true;
+    },
+
+    /**
+     * @return {!Element}
+     */
     defaultFocusedElement: function()
     {
         return this._editorContainer.view.defaultFocusedElement() || this._navigator.view.defaultFocusedElement();
@@ -224,9 +277,8 @@
     wasShown: function()
     {
         WebInspector.inspectorView.closeViewInDrawer("editor");
-        this.sourcesView.show(this.editorView.mainElement);
+        this.sourcesView.show(this.editorView.mainElement());
         WebInspector.Panel.prototype.wasShown.call(this);
-        this._navigatorController.wasShown();
 
         this.element.addEventListener("keydown", this._boundOnKeyDown, false);
         this.element.addEventListener("keyup", this._boundOnKeyUp, false);
@@ -290,6 +342,7 @@
         for (var i = 0; i < uiSourceCodes.length; ++i) {
             this._navigator.removeUISourceCode(uiSourceCodes[i]);
             this._removeSourceFrame(uiSourceCodes[i]);
+            this._historyManager.removeHistoryForSourceCode(uiSourceCodes[i]);
         }
         this._editorContainer.removeUISourceCodes(uiSourceCodes);
     },
@@ -311,20 +364,27 @@
 
         this._paused = true;
         this._waitingToPause = false;
-        this._stepping = false;
 
         this._updateDebuggerButtons();
 
         this.sidebarPanes.callstack.update(details.callFrames, details.asyncStackTrace);
 
+        /**
+         * @param {!Element} element
+         * @this {WebInspector.SourcesPanel}
+         */
         function didCreateBreakpointHitStatusMessage(element)
         {
             this.sidebarPanes.callstack.setStatus(element);
         }
 
+        /**
+         * @param {!WebInspector.UILocation} uiLocation
+         * @this {WebInspector.SourcesPanel}
+         */
         function didGetUILocation(uiLocation)
         {
-            var breakpoint = WebInspector.breakpointManager.findBreakpoint(uiLocation.uiSourceCode, uiLocation.lineNumber);
+            var breakpoint = WebInspector.breakpointManager.findBreakpointOnLine(uiLocation.uiSourceCode, uiLocation.lineNumber);
             if (!breakpoint)
                 return;
             this.sidebarPanes.jsBreakpoints.highlightBreakpoint(breakpoint);
@@ -367,7 +427,6 @@
     {
         this._paused = false;
         this._waitingToPause = false;
-        this._stepping = false;
 
         this._clearInterface();
         this._toggleDebuggerSidebarButton.setEnabled(true);
@@ -421,24 +480,6 @@
     },
 
     /**
-     * @param {!Element} anchor
-     * @return {boolean}
-     */
-    showAnchorLocation: function(anchor)
-    {
-        if (!anchor.uiSourceCode) {
-            var uiSourceCode = WebInspector.workspace.uiSourceCodeForURL(anchor.href);
-            if (uiSourceCode)
-                anchor.uiSourceCode = uiSourceCode;
-        }
-        if (!anchor.uiSourceCode)
-            return false;
-
-        this._showSourceLocation(anchor.uiSourceCode, anchor.lineNumber, anchor.columnNumber);
-        return true;
-    },
-
-    /**
      * @param {!WebInspector.UISourceCode} uiSourceCode
      * @param {number=} lineNumber
      * @param {number=} columnNumber
@@ -499,11 +540,12 @@
     _showSourceLocation: function(uiSourceCode, lineNumber, columnNumber, forceShowInPanel)
     {
         this._showEditor(forceShowInPanel);
+        this._historyManager.updateCurrentState();
         var sourceFrame = this._showFile(uiSourceCode);
         if (typeof lineNumber === "number")
             sourceFrame.highlightPosition(lineNumber, columnNumber);
+        this._historyManager.pushNewState();
         sourceFrame.focus();
-
         WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMetrics.UserAction, {
             action: WebInspector.UserMetrics.UserActionNames.OpenSourceLink,
             url: uiSourceCode.originURL(),
@@ -520,9 +562,11 @@
         var sourceFrame = this._getOrCreateSourceFrame(uiSourceCode);
         if (this._currentUISourceCode === uiSourceCode)
             return sourceFrame;
+
         this._currentUISourceCode = uiSourceCode;
         if (!uiSourceCode.project().isServiceProject())
             this._navigator.revealUISourceCode(uiSourceCode, true);
+
         this._editorContainer.showFile(uiSourceCode);
         this._updateScriptViewStatusBarItems();
 
@@ -557,6 +601,7 @@
         }
         sourceFrame.setHighlighterType(uiSourceCode.highlighterType());
         this._sourceFramesByUISourceCode.put(uiSourceCode, sourceFrame);
+        this._historyManager.trackSourceFrameCursorJumps(sourceFrame);
         return sourceFrame;
     },
 
@@ -641,6 +686,7 @@
 
     _executionLineChanged: function(uiLocation)
     {
+        this._historyManager.updateCurrentState();
         this._clearCurrentExecutionLine();
         this._setExecutionLine(uiLocation);
 
@@ -649,8 +695,11 @@
         if (this._skipExecutionLineRevealing)
             return;
         this._skipExecutionLineRevealing = true;
+
         var sourceFrame = this._showFile(uiSourceCode);
         sourceFrame.revealLine(uiLocation.lineNumber);
+        this._historyManager.pushNewState();
+
         if (sourceFrame.canEditSource())
             sourceFrame.setSelection(WebInspector.TextRange.createFromLocation(uiLocation.lineNumber, 0));
         sourceFrame.focus();
@@ -671,8 +720,8 @@
 
     _editorClosed: function(event)
     {
-        this._navigatorController.hideNavigatorOverlay();
         var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
+        this._historyManager.removeHistoryForSourceCode(uiSourceCode);
 
         if (this._currentUISourceCode === uiSourceCode)
             delete this._currentUISourceCode;
@@ -684,45 +733,46 @@
 
     _editorSelected: function(event)
     {
-        var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
+        var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data.currentFile);
+        var shouldUseHistoryManager = uiSourceCode !== this._currentUISourceCode && event.data.userGesture;
+        if (shouldUseHistoryManager)
+            this._historyManager.updateCurrentState();
         var sourceFrame = this._showFile(uiSourceCode);
-        this._navigatorController.hideNavigatorOverlay();
-        if (!this._navigatorController.isNavigatorPinned())
-            sourceFrame.focus();
-        this._searchableView.setCanReplace(!!sourceFrame && sourceFrame.canEditSource());
+        if (shouldUseHistoryManager)
+            this._historyManager.pushNewState();
+
+        this._searchableView.setReplaceable(!!sourceFrame && sourceFrame.canEditSource());
         this._searchableView.resetSearch();
     },
 
     _sourceSelected: function(event)
     {
         var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data.uiSourceCode);
+
+        var shouldUseHistoryManager = uiSourceCode !== this._currentUISourceCode;
+
+        if (shouldUseHistoryManager)
+            this._historyManager.updateCurrentState();
         var sourceFrame = this._showFile(uiSourceCode);
-        this._navigatorController.hideNavigatorOverlay();
-        if (sourceFrame && (!this._navigatorController.isNavigatorPinned() || event.data.focusSource))
+        if (shouldUseHistoryManager)
+            this._historyManager.pushNewState();
+
+        if (sourceFrame && event.data.focusSource)
             sourceFrame.focus();
     },
 
     _itemSearchStarted: function(event)
     {
         var searchText = /** @type {string} */ (event.data);
-        WebInspector.OpenResourceDialog.show(this, this.editorView.mainElement, searchText);
+        WebInspector.OpenResourceDialog.show(this, this.editorView.mainElement(), searchText);
     },
 
-    _pauseOnExceptionStateChanged: function()
+    _pauseOnExceptionEnabledChanged: function()
     {
-        var pauseOnExceptionsState = WebInspector.settings.pauseOnExceptionStateString.get();
-        switch (pauseOnExceptionsState) {
-        case WebInspector.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions:
-            this._pauseOnExceptionButton.title = WebInspector.UIString("Don't pause on exceptions.\nClick to Pause on all exceptions.");
-            break;
-        case WebInspector.DebuggerModel.PauseOnExceptionsState.PauseOnAllExceptions:
-            this._pauseOnExceptionButton.title = WebInspector.UIString("Pause on all exceptions.\nClick to Pause on uncaught exceptions.");
-            break;
-        case WebInspector.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions:
-            this._pauseOnExceptionButton.title = WebInspector.UIString("Pause on uncaught exceptions.\nClick to Not pause on exceptions.");
-            break;
-        }
-        this._pauseOnExceptionButton.state = pauseOnExceptionsState;
+        var enabled = WebInspector.settings.pauseOnExceptionEnabled.get();
+        this._pauseOnExceptionButton.toggled = enabled;
+        this._pauseOnExceptionButton.title = WebInspector.UIString(enabled ? "Don't pause on exceptions." : "Pause on exceptions.");
+        this._debugToolbarDrawer.enableStyleClass("expanded", enabled);
     },
 
     _updateDebuggerButtons: function()
@@ -763,12 +813,7 @@
 
     _togglePauseOnExceptions: function()
     {
-        var nextStateMap = {};
-        var stateEnum = WebInspector.DebuggerModel.PauseOnExceptionsState;
-        nextStateMap[stateEnum.DontPauseOnExceptions] = stateEnum.PauseOnAllExceptions;
-        nextStateMap[stateEnum.PauseOnAllExceptions] = stateEnum.PauseOnUncaughtExceptions;
-        nextStateMap[stateEnum.PauseOnUncaughtExceptions] = stateEnum.DontPauseOnExceptions;
-        WebInspector.settings.pauseOnExceptionStateString.set(nextStateMap[this._pauseOnExceptionButton.state]);
+        WebInspector.settings.pauseOnExceptionEnabled.set(!this._pauseOnExceptionButton.toggled);
     },
 
     /**
@@ -793,7 +838,6 @@
             this._waitingToPause = false;
             WebInspector.debuggerModel.resume();
         } else {
-            this._stepping = false;
             this._waitingToPause = true;
             // Make sure pauses didn't stick skipped.
             WebInspector.debuggerModel.skipAllPauses(false);
@@ -831,7 +875,6 @@
 
         delete this._skipExecutionLineRevealing;
         this._paused = false;
-        this._stepping = true;
 
         this._clearInterface();
 
@@ -849,7 +892,6 @@
 
         delete this._skipExecutionLineRevealing;
         this._paused = false;
-        this._stepping = true;
 
         this._clearInterface();
 
@@ -881,7 +923,6 @@
 
         delete this._skipExecutionLineRevealing;
         this._paused = false;
-        this._stepping = true;
         this._clearInterface();
         WebInspector.debuggerModel.stepIntoSelection(rawLocation);
     },
@@ -896,7 +937,6 @@
 
         delete this._skipExecutionLineRevealing;
         this._paused = false;
-        this._stepping = true;
 
         this._clearInterface();
 
@@ -926,7 +966,6 @@
 
         delete this._skipExecutionLineRevealing;
         this._paused = false;
-        this._stepping = true;
         this._clearInterface();
         WebInspector.debuggerModel.continueToLocation(rawLocation);
     },
@@ -942,11 +981,11 @@
         this._toggleBreakpointsButton.toggled = !active;
         if (active) {
             this._toggleBreakpointsButton.title = WebInspector.UIString("Deactivate breakpoints.");
-            WebInspector.inspectorView.element.classList.remove("breakpoints-deactivated");
+            this._editorContainer.view.element.classList.remove("breakpoints-deactivated");
             this.sidebarPanes.jsBreakpoints.listElement.classList.remove("breakpoints-list-deactivated");
         } else {
             this._toggleBreakpointsButton.title = WebInspector.UIString("Activate breakpoints.");
-            WebInspector.inspectorView.element.classList.add("breakpoints-deactivated");
+            this._editorContainer.view.element.classList.add("breakpoints-deactivated");
             this.sidebarPanes.jsBreakpoints.listElement.classList.add("breakpoints-list-deactivated");
         }
     },
@@ -954,8 +993,7 @@
     _createDebugToolbar: function()
     {
         var debugToolbar = document.createElement("div");
-        debugToolbar.className = "status-bar";
-        debugToolbar.id = "scripts-debug-toolbar";
+        debugToolbar.className = "scripts-debug-toolbar";
 
         var title, handler;
         var platformSpecificModifier = WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta;
@@ -963,13 +1001,13 @@
         // Run snippet.
         title = WebInspector.UIString("Run snippet (%s).");
         handler = this._runSnippet.bind(this);
-        this._runSnippetButton = this._createButtonAndRegisterShortcuts("scripts-run-snippet", title, handler, WebInspector.SourcesPanelDescriptor.ShortcutKeys.RunSnippet);
+        this._runSnippetButton = this._createButtonAndRegisterShortcuts("scripts-run-snippet", title, handler, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.RunSnippet);
         debugToolbar.appendChild(this._runSnippetButton.element);
         this._runSnippetButton.element.classList.add("hidden");
 
         // Continue.
         handler = this._togglePause.bind(this);
-        this._pauseButton = this._createButtonAndRegisterShortcuts("scripts-pause", "", handler, WebInspector.SourcesPanelDescriptor.ShortcutKeys.PauseContinue);
+        this._pauseButton = this._createButtonAndRegisterShortcuts("scripts-pause", "", handler, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.PauseContinue);
         debugToolbar.appendChild(this._pauseButton.element);
 
         // Long resume.
@@ -980,22 +1018,22 @@
         // Step over.
         title = WebInspector.UIString("Step over next function call (%s).");
         handler = this._stepOverClicked.bind(this);
-        this._stepOverButton = this._createButtonAndRegisterShortcuts("scripts-step-over", title, handler, WebInspector.SourcesPanelDescriptor.ShortcutKeys.StepOver);
+        this._stepOverButton = this._createButtonAndRegisterShortcuts("scripts-step-over", title, handler, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepOver);
         debugToolbar.appendChild(this._stepOverButton.element);
 
         // Step into.
         title = WebInspector.UIString("Step into next function call (%s).");
         handler = this._stepIntoClicked.bind(this);
-        this._stepIntoButton = this._createButtonAndRegisterShortcuts("scripts-step-into", title, handler, WebInspector.SourcesPanelDescriptor.ShortcutKeys.StepInto);
+        this._stepIntoButton = this._createButtonAndRegisterShortcuts("scripts-step-into", title, handler, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepInto);
         debugToolbar.appendChild(this._stepIntoButton.element);
 
         // Step into selection (keyboard shortcut only).
-        this.registerShortcuts(WebInspector.SourcesPanelDescriptor.ShortcutKeys.StepIntoSelection, this._stepIntoSelectionClicked.bind(this))
+        this.registerShortcuts(WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepIntoSelection, this._stepIntoSelectionClicked.bind(this))
 
         // Step out.
         title = WebInspector.UIString("Step out of current function (%s).");
         handler = this._stepOutClicked.bind(this);
-        this._stepOutButton = this._createButtonAndRegisterShortcuts("scripts-step-out", title, handler, WebInspector.SourcesPanelDescriptor.ShortcutKeys.StepOut);
+        this._stepOutButton = this._createButtonAndRegisterShortcuts("scripts-step-out", title, handler, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.StepOut);
         debugToolbar.appendChild(this._stepOutButton.element);
 
         // Toggle Breakpoints
@@ -1005,13 +1043,25 @@
         debugToolbar.appendChild(this._toggleBreakpointsButton.element);
 
         // Pause on Exception
-        this._pauseOnExceptionButton = new WebInspector.StatusBarButton("", "scripts-pause-on-exceptions-status-bar-item", 3);
+        this._pauseOnExceptionButton = new WebInspector.StatusBarButton("", "scripts-pause-on-exceptions-status-bar-item");
         this._pauseOnExceptionButton.addEventListener("click", this._togglePauseOnExceptions, this);
         debugToolbar.appendChild(this._pauseOnExceptionButton.element);
 
         return debugToolbar;
     },
 
+    _createDebugToolbarDrawer: function()
+    {
+        var debugToolbarDrawer = document.createElement("div");
+        debugToolbarDrawer.className = "scripts-debug-toolbar-drawer";
+
+        var label = WebInspector.UIString("Pause On Caught Exceptions");
+        var setting = WebInspector.settings.pauseOnCaughtException;
+        debugToolbarDrawer.appendChild(WebInspector.SettingsUI.createSettingCheckbox(label, setting, true));
+
+        return debugToolbarDrawer;
+    },
+
     /**
      * @param {!WebInspector.StatusBarButton} button
      * @param {string} buttonTitle
@@ -1065,6 +1115,11 @@
         this._searchView = this.visibleView;
         this._searchQuery = query;
 
+        /**
+         * @param {!WebInspector.View} view
+         * @param {number} searchMatches
+         * @this {WebInspector.SourcesPanel}
+         */
         function finishedCallback(view, searchMatches)
         {
             if (!searchMatches)
@@ -1073,11 +1128,18 @@
             this._searchableView.updateSearchMatchesCount(searchMatches);
         }
 
+        /**
+         * @param {number} currentMatchIndex
+         * @this {WebInspector.SourcesPanel}
+         */
         function currentMatchChanged(currentMatchIndex)
         {
             this._searchableView.updateCurrentMatchIndex(currentMatchIndex);
         }
 
+        /**
+         * @this {WebInspector.SourcesPanel}
+         */
         function searchResultsChanged()
         {
             this._searchableView.cancelSearch();
@@ -1097,7 +1159,6 @@
         }
 
         this._searchView.jumpToNextSearchResult();
-        return true;
     },
 
     jumpToPreviousSearchResult: function()
@@ -1120,8 +1181,8 @@
      */
     replaceSelectionWith: function(text)
     {
-        var view = /** @type {!WebInspector.SourceFrame} */ (this.visibleView);
-        view.replaceSearchMatchWith(text);
+        var view = /** @type {!WebInspector.Replaceable} */ (this.visibleView);
+        view.replaceSelectionWith(text);
     },
 
     /**
@@ -1130,7 +1191,7 @@
      */
     replaceAllWith: function(query, text)
     {
-        var view = /** @type {!WebInspector.SourceFrame} */ (this.visibleView);
+        var view = /** @type {!WebInspector.Replaceable} */ (this.visibleView);
         view.replaceAllWith(query, text);
     },
 
@@ -1226,12 +1287,17 @@
 
     _installDebuggerSidebarController: function()
     {
-        this._toggleDebuggerSidebarButton = new WebInspector.StatusBarButton("", "right-sidebar-show-hide-button scripts-debugger-show-hide-button", 3);
-        this._toggleDebuggerSidebarButton.addEventListener("click", clickHandler, this);
+        this._toggleNavigatorSidebarButton = new WebInspector.StatusBarButton("", "left-sidebar-show-hide-button", 3);
+        this._toggleNavigatorSidebarButton.addEventListener("click", navigatorHandler, this);
+        this.sourcesView.element.appendChild(this._toggleNavigatorSidebarButton.element);
+        this._enableNavigatorSidebar(!WebInspector.settings.navigatorHidden.get());
 
-        if (this.splitView.isVertical()) {
+        this._toggleDebuggerSidebarButton = new WebInspector.StatusBarButton("", "right-sidebar-show-hide-button scripts-debugger-show-hide-button", 3);
+        this._toggleDebuggerSidebarButton.addEventListener("click", debuggerHandler, this);
+
+        if (this._splitView.isVertical()) {
             this.editorView.element.appendChild(this._toggleDebuggerSidebarButton.element);
-            this.splitView.mainElement.appendChild(this._debugSidebarResizeWidgetElement);
+            this._splitView.mainElement().appendChild(this._debugSidebarResizeWidgetElement);
         } else {
             this._statusBarContainerElement.appendChild(this._debugSidebarResizeWidgetElement);
             this._statusBarContainerElement.appendChild(this._toggleDebuggerSidebarButton.element);
@@ -1239,7 +1305,18 @@
 
         this._enableDebuggerSidebar(!WebInspector.settings.debuggerSidebarHidden.get());
 
-        function clickHandler()
+        /**
+         * @this {WebInspector.SourcesPanel}
+         */
+        function navigatorHandler()
+        {
+            this._enableNavigatorSidebar(this._toggleNavigatorSidebarButton.state === "right");
+        }
+
+        /**
+         * @this {WebInspector.SourcesPanel}
+         */
+        function debuggerHandler()
         {
             this._enableDebuggerSidebar(this._toggleDebuggerSidebarButton.state === "left");
         }
@@ -1248,14 +1325,28 @@
     /**
      * @param {boolean} show
      */
+    _enableNavigatorSidebar: function(show)
+    {
+        this._toggleNavigatorSidebarButton.state = show ? "left" : "right";
+        this._toggleNavigatorSidebarButton.title = show ? WebInspector.UIString("Hide navigator") : WebInspector.UIString("Show navigator");
+        if (show)
+            this.editorView.showBoth(true);
+        else
+            this.editorView.hideSidebar(true);
+        WebInspector.settings.navigatorHidden.set(!show);
+    },
+
+    /**
+     * @param {boolean} show
+     */
     _enableDebuggerSidebar: function(show)
     {
         this._toggleDebuggerSidebarButton.state = show ? "right" : "left";
         this._toggleDebuggerSidebarButton.title = show ? WebInspector.UIString("Hide debugger") : WebInspector.UIString("Show debugger");
         if (show)
-            this.splitView.showSidebarElement();
+            this._splitView.showBoth(true);
         else
-            this.splitView.hideSidebarElement();
+            this._splitView.hideSidebar(true);
         this._debugSidebarResizeWidgetElement.enableStyleClass("hidden", !show);
         WebInspector.settings.debuggerSidebarHidden.set(!show);
     },
@@ -1269,11 +1360,11 @@
         var path = event.data.path;
         var uiSourceCodeToCopy = event.data.uiSourceCode;
         var filePath;
-        var shouldHideNavigator;
         var uiSourceCode;
 
         /**
          * @param {?string} content
+         * @this {WebInspector.SourcesPanel}
          */
         function contentLoaded(content)
         {
@@ -1287,6 +1378,7 @@
 
         /**
          * @param {string=} content
+         * @this {WebInspector.SourcesPanel}
          */
         function createFile(content)
         {
@@ -1295,6 +1387,7 @@
 
         /**
          * @param {?string} path
+         * @this {WebInspector.SourcesPanel}
          */
         function fileCreated(path)
         {
@@ -1303,21 +1396,15 @@
             filePath = path;
             uiSourceCode = project.uiSourceCode(filePath);
             this._showSourceLocation(uiSourceCode);
-
-            shouldHideNavigator = !this._navigatorController.isNavigatorPinned();
-            if (this._navigatorController.isNavigatorHidden())
-                this._navigatorController.showNavigatorOverlay();
             this._navigator.rename(uiSourceCode, callback.bind(this));
         }
 
         /**
          * @param {boolean} committed
+         * @this {WebInspector.SourcesPanel}
          */
         function callback(committed)
         {
-            if (shouldHideNavigator)
-                this._navigatorController.hideNavigatorOverlay();
-
             if (!committed) {
                 project.deleteFile(uiSourceCode);
                 return;
@@ -1335,19 +1422,14 @@
     _itemRenamingRequested: function(event)
     {
         var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
-
-        var shouldHideNavigator = !this._navigatorController.isNavigatorPinned();
-        if (this._navigatorController.isNavigatorHidden())
-            this._navigatorController.showNavigatorOverlay();
         this._navigator.rename(uiSourceCode, callback.bind(this));
 
         /**
          * @param {boolean} committed
+         * @this {WebInspector.SourcesPanel}
          */
         function callback(committed)
         {
-            if (shouldHideNavigator && committed)
-                this._navigatorController.hideNavigatorOverlay();
             this._recreateSourceFrameIfNeeded(uiSourceCode);
             this._navigator.updateIcon(uiSourceCode);
             this._showSourceLocation(uiSourceCode);
@@ -1377,10 +1459,11 @@
      */
     _mapFileSystemToNetwork: function(uiSourceCode)
     {
-        WebInspector.SelectUISourceCodeForProjectTypeDialog.show(uiSourceCode.name(), WebInspector.projectTypes.Network, mapFileSystemToNetwork.bind(this), this.editorView.mainElement)
+        WebInspector.SelectUISourceCodeForProjectTypeDialog.show(uiSourceCode.name(), WebInspector.projectTypes.Network, mapFileSystemToNetwork.bind(this), this.editorView.mainElement())
 
         /**
          * @param {!WebInspector.UISourceCode} networkUISourceCode
+         * @this {WebInspector.SourcesPanel}
          */
         function mapFileSystemToNetwork(networkUISourceCode)
         {
@@ -1402,10 +1485,11 @@
      */
     _mapNetworkToFileSystem: function(networkUISourceCode)
     {
-        WebInspector.SelectUISourceCodeForProjectTypeDialog.show(networkUISourceCode.name(), WebInspector.projectTypes.FileSystem, mapNetworkToFileSystem.bind(this), this.editorView.mainElement)
+        WebInspector.SelectUISourceCodeForProjectTypeDialog.show(networkUISourceCode.name(), WebInspector.projectTypes.FileSystem, mapNetworkToFileSystem.bind(this), this.editorView.mainElement())
 
         /**
          * @param {!WebInspector.UISourceCode} uiSourceCode
+         * @this {WebInspector.SourcesPanel}
          */
         function mapNetworkToFileSystem(uiSourceCode)
         {
@@ -1454,9 +1538,7 @@
 
         var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (target);
         contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Local modifications\u2026" : "Local Modifications\u2026"), this._showLocalHistory.bind(this, uiSourceCode));
-
-        if (WebInspector.isolatedFileSystemManager.supportsFileSystems())
-            this._appendUISourceCodeMappingItems(contextMenu, uiSourceCode);
+        this._appendUISourceCodeMappingItems(contextMenu, uiSourceCode);
     },
 
     /**
@@ -1474,6 +1556,7 @@
         /**
          * @param {?Protocol.Error} error
          * @param {!DebuggerAgent.FunctionDetails} response
+         * @this {WebInspector.SourcesPanel}
          */
         function didGetDetails(error, response)
         {
@@ -1489,6 +1572,9 @@
             this.showUILocation(uiLocation, true);
         }
 
+        /**
+         * @this {WebInspector.SourcesPanel}
+         */
         function revealFunction()
         {
             DebuggerAgent.getFunctionDetails(remoteObject.objectId, didGetDetails.bind(this));
@@ -1504,13 +1590,12 @@
         var defaultScores = new Map();
         for (var i = 1; i < uiSourceCodes.length; ++i) // Skip current element
             defaultScores.put(uiSourceCodes[i], uiSourceCodes.length - i);
-        WebInspector.OpenResourceDialog.show(this, this.editorView.mainElement, undefined, defaultScores);
+        WebInspector.OpenResourceDialog.show(this, this.editorView.mainElement(), undefined, defaultScores);
     },
 
     _dockSideChanged: function()
     {
-        var dockSide = WebInspector.dockController.dockSide();
-        var vertically = dockSide === WebInspector.DockController.State.DockedToRight && WebInspector.settings.splitVerticallyWhenDockedToRight.get();
+        var vertically = WebInspector.dockController.isVertical() && WebInspector.settings.splitVerticallyWhenDockedToRight.get();
         this._splitVertically(vertically);
     },
 
@@ -1519,52 +1604,66 @@
      */
     _splitVertically: function(vertically)
     {
-        if (this.sidebarPaneView && vertically === !this.splitView.isVertical())
+        if (this.sidebarPaneView && vertically === !this._splitView.isVertical())
             return;
 
         if (this.sidebarPaneView)
             this.sidebarPaneView.detach();
 
-        this.splitView.setVertical(!vertically);
+        this._splitView.setVertical(!vertically);
 
+        // Update resizer widgets.
         if (!vertically) {
-            this.splitView.uninstallResizer(this._statusBarContainerElement);
-            this.sidebarPaneView = new WebInspector.SidebarPaneStack();
-            for (var pane in this.sidebarPanes)
-                this.sidebarPaneView.addPane(this.sidebarPanes[pane]);
-            this._extensionSidebarPanesContainer = this.sidebarPaneView;
-            this.sidebarElement.appendChild(this.debugToolbar);
+            this._splitView.uninstallResizer(this._statusBarContainerElement);
             this.editorView.element.appendChild(this._toggleDebuggerSidebarButton.element);
-            this.splitView.mainElement.appendChild(this._debugSidebarResizeWidgetElement);
+            this._splitView.mainElement().appendChild(this._debugSidebarResizeWidgetElement);
         } else {
-            this.splitView.installResizer(this._statusBarContainerElement);
-            this.sidebarPaneView = new WebInspector.SplitView(true, this.name + "PanelSplitSidebarRatio", 0.5);
-
-            var group1 = new WebInspector.SidebarPaneStack();
-            group1.show(this.sidebarPaneView.firstElement());
-            group1.element.id = "scripts-sidebar-stack-pane";
-            group1.addPane(this.sidebarPanes.callstack);
-            group1.addPane(this.sidebarPanes.jsBreakpoints);
-            group1.addPane(this.sidebarPanes.domBreakpoints);
-            group1.addPane(this.sidebarPanes.xhrBreakpoints);
-            group1.addPane(this.sidebarPanes.eventListenerBreakpoints);
-            if (this.sidebarPanes.workerList)
-                group1.addPane(this.sidebarPanes.workerList);
-
-            var group2 = new WebInspector.SidebarTabbedPane();
-            group2.show(this.sidebarPaneView.secondElement());
-            group2.addPane(this.sidebarPanes.scopechain);
-            group2.addPane(this.sidebarPanes.watchExpressions);
-            this._extensionSidebarPanesContainer = group2;
-            this.sidebarPaneView.firstElement().appendChild(this.debugToolbar);
+            this._splitView.installResizer(this._statusBarContainerElement);
             this._statusBarContainerElement.appendChild(this._debugSidebarResizeWidgetElement);
             this._statusBarContainerElement.appendChild(this._toggleDebuggerSidebarButton.element)
         }
+
+        // Create vertical box with stack.
+        var vbox = new WebInspector.View();
+        vbox.element.appendChild(this._debugToolbarDrawer);
+        vbox.element.appendChild(this.debugToolbar);
+        vbox.element.appendChild(this.threadsToolbar.element);
+        var sidebarPaneStack = new WebInspector.SidebarPaneStack();
+        sidebarPaneStack.element.classList.add("flex-auto");
+        sidebarPaneStack.show(vbox.element);
+
+        if (!vertically) {
+            // Populate the only stack.
+            for (var pane in this.sidebarPanes)
+                sidebarPaneStack.addPane(this.sidebarPanes[pane]);
+            this._extensionSidebarPanesContainer = sidebarPaneStack;
+
+            this.sidebarPaneView = vbox;
+        } else {
+            var splitView = new WebInspector.SplitView(true, true, this.name + "PanelSplitSidebarRatio", 0.5);
+            vbox.show(splitView.mainElement());
+
+            // Populate the left stack.
+            sidebarPaneStack.addPane(this.sidebarPanes.callstack);
+            sidebarPaneStack.addPane(this.sidebarPanes.jsBreakpoints);
+            sidebarPaneStack.addPane(this.sidebarPanes.domBreakpoints);
+            sidebarPaneStack.addPane(this.sidebarPanes.xhrBreakpoints);
+            sidebarPaneStack.addPane(this.sidebarPanes.eventListenerBreakpoints);
+            if (this.sidebarPanes.workerList)
+                sidebarPaneStack.addPane(this.sidebarPanes.workerList);
+
+            var tabbedPane = new WebInspector.SidebarTabbedPane();
+            tabbedPane.show(splitView.sidebarElement());
+            tabbedPane.addPane(this.sidebarPanes.scopechain);
+            tabbedPane.addPane(this.sidebarPanes.watchExpressions);
+            this._extensionSidebarPanesContainer = tabbedPane;
+
+            this.sidebarPaneView = splitView;
+        }
         for (var i = 0; i < this._extensionSidebarPanes.length; ++i)
             this._extensionSidebarPanesContainer.addPane(this._extensionSidebarPanes[i]);
 
-        this.sidebarPaneView.element.id = "scripts-debug-sidebar-contents";
-        this.sidebarPaneView.show(this.splitView.sidebarElement);
+        this.sidebarPaneView.show(this._splitView.sidebarElement());
 
         this.sidebarPanes.scopechain.expand();
         this.sidebarPanes.jsBreakpoints.expand();
@@ -1574,6 +1673,9 @@
             this.sidebarPanes.watchExpressions.expand();
     },
 
+    /**
+     * @return {boolean}
+     */
     canHighlightPosition: function()
     {
         return this.visibleView && this.visibleView.canHighlightPosition();
@@ -1587,7 +1689,9 @@
     {
         if (!this.canHighlightPosition())
             return;
+        this._historyManager.updateCurrentState();
         this.visibleView.highlightPosition(line, column);
+        this._historyManager.pushNewState();
     },
 
     /**
@@ -1621,7 +1725,6 @@
     WebInspector.View.call(this);
     this.registerRequiredCSS("sourcesView.css");
     this.element.id = "sources-panel-sources-view";
-    this.element.classList.add("vbox");
     this.element.addEventListener("dragenter", this._onDragEnter.bind(this), true);
     this.element.addEventListener("dragover", this._onDragOver.bind(this), true);
 }
@@ -1684,9 +1787,46 @@
 {
     WebInspector.View.call(this);
     this.element.id = "drawer-editor-view";
-    this.element.classList.add("vbox");
 }
 
 WebInspector.DrawerEditorView.prototype = {
     __proto__: WebInspector.View.prototype
 }
+
+/**
+ * @constructor
+ * @implements {WebInspector.ContextMenu.Provider}
+ */
+WebInspector.SourcesPanel.ContextMenuProvider = function()
+{
+}
+
+WebInspector.SourcesPanel.ContextMenuProvider.prototype = {
+    /**
+     * @param {!WebInspector.ContextMenu} contextMenu
+     * @param {!Object} target
+     */
+    appendApplicableItems: function(event, contextMenu, target)
+    {
+        WebInspector.panel("sources").appendApplicableItems(event, contextMenu, target);
+    }
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.Revealer}
+ */
+WebInspector.SourcesPanel.UILocationRevealer = function()
+{
+}
+
+WebInspector.SourcesPanel.UILocationRevealer.prototype = {
+    /**
+     * @param {!Object} uiLocation
+     */
+    reveal: function(uiLocation)
+    {
+        if (uiLocation instanceof WebInspector.UILocation)
+            /** @type {!WebInspector.SourcesPanel} */ (WebInspector.panel("sources")).showUILocation(uiLocation);
+    }
+}
diff --git a/Source/devtools/front_end/SourcesPanelDescriptor.js b/Source/devtools/front_end/SourcesPanelDescriptor.js
deleted file mode 100644
index b1bd0dc..0000000
--- a/Source/devtools/front_end/SourcesPanelDescriptor.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2012 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:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
- * OR ITS 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.
- */
-
-/**
- * @constructor
- * @extends {WebInspector.PanelDescriptor}
- * @implements {WebInspector.ContextMenu.Provider}
- */
-WebInspector.SourcesPanelDescriptor = function()
-{
-    WebInspector.PanelDescriptor.call(this, "sources", WebInspector.UIString("Sources"), "SourcesPanel", "SourcesPanel.js");
-    WebInspector.ContextMenu.registerProvider(this);
-}
-
-WebInspector.SourcesPanelDescriptor.prototype = {
-    /**
-     * @param {!WebInspector.ContextMenu} contextMenu
-     * @param {!Object} target
-     */
-    appendApplicableItems: function(event, contextMenu, target)
-    {
-        var hasApplicableItems = target instanceof WebInspector.UISourceCode;
-
-        if (!hasApplicableItems && target instanceof WebInspector.RemoteObject) {
-            var remoteObject = /** @type {!WebInspector.RemoteObject} */ (target);
-            if (remoteObject.type !== "function")
-                return;
-        }
-
-        this.panel().appendApplicableItems(event, contextMenu, target);
-    },
-
-    registerShortcuts: function()
-    {
-        var section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Sources Panel"));
-
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.PauseContinue, WebInspector.UIString("Pause/Continue"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.StepOver, WebInspector.UIString("Step over"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.StepInto, WebInspector.UIString("Step into"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.StepIntoSelection, WebInspector.UIString("Step into selection"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.StepOut, WebInspector.UIString("Step out"));
-
-        var nextAndPrevFrameKeys = WebInspector.SourcesPanelDescriptor.ShortcutKeys.NextCallFrame.concat(WebInspector.SourcesPanelDescriptor.ShortcutKeys.PrevCallFrame);
-        section.addRelatedKeys(nextAndPrevFrameKeys, WebInspector.UIString("Next/previous call frame"));
-
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.EvaluateSelectionInConsole, WebInspector.UIString("Evaluate selection in console"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.AddSelectionToWatch, WebInspector.UIString("Add selection to watch"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.GoToMember, WebInspector.UIString("Go to member"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.ToggleBreakpoint, WebInspector.UIString("Toggle breakpoint"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.ToggleComment, WebInspector.UIString("Toggle comment"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.IncreaseCSSUnitByOne, WebInspector.UIString("Increment CSS unit by 1"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.DecreaseCSSUnitByOne, WebInspector.UIString("Decrement CSS unit by 1"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.IncreaseCSSUnitByTen, WebInspector.UIString("Increment CSS unit by 10"));
-        section.addAlternateKeys(WebInspector.SourcesPanelDescriptor.ShortcutKeys.DecreaseCSSUnitByTen, WebInspector.UIString("Decrement CSS unit by 10"));
-    },
-
-    __proto__: WebInspector.PanelDescriptor.prototype
-}
-
-WebInspector.SourcesPanelDescriptor.ShortcutKeys = {
-    IncreaseCSSUnitByOne: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Up, WebInspector.KeyboardShortcut.Modifiers.Alt)
-    ],
-
-    DecreaseCSSUnitByOne: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Down, WebInspector.KeyboardShortcut.Modifiers.Alt)
-    ],
-
-    IncreaseCSSUnitByTen: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageUp, WebInspector.KeyboardShortcut.Modifiers.Alt)
-    ],
-
-    DecreaseCSSUnitByTen: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.PageDown, WebInspector.KeyboardShortcut.Modifiers.Alt)
-    ],
-
-    RunSnippet: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Enter, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ],
-
-    PauseContinue: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F8),
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Backslash, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ],
-
-    StepOver: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F10),
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.SingleQuote, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ],
-
-    StepInto: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F11),
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Semicolon, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ],
-
-    StepIntoSelection: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F11, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta),
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F11, WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ],
-
-    StepOut: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.F11, WebInspector.KeyboardShortcut.Modifiers.Shift),
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Semicolon, WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ],
-
-    EvaluateSelectionInConsole: [
-        WebInspector.KeyboardShortcut.makeDescriptor("e", WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.Ctrl)
-    ],
-
-    AddSelectionToWatch: [
-        WebInspector.KeyboardShortcut.makeDescriptor("a", WebInspector.KeyboardShortcut.Modifiers.Shift | WebInspector.KeyboardShortcut.Modifiers.Ctrl)
-    ],
-
-    GoToMember: [
-        WebInspector.KeyboardShortcut.makeDescriptor("o", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta | WebInspector.KeyboardShortcut.Modifiers.Shift)
-    ],
-
-    ToggleBreakpoint: [
-        WebInspector.KeyboardShortcut.makeDescriptor("b", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ],
-
-    NextCallFrame: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Period, WebInspector.KeyboardShortcut.Modifiers.Ctrl)
-    ],
-
-    PrevCallFrame: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Comma, WebInspector.KeyboardShortcut.Modifiers.Ctrl)
-    ],
-
-    ToggleComment: [
-        WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Slash, WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-
-    ]
-};
diff --git a/Source/devtools/front_end/SourcesSearchScope.js b/Source/devtools/front_end/SourcesSearchScope.js
index e4a2026..41b6fc1 100644
--- a/Source/devtools/front_end/SourcesSearchScope.js
+++ b/Source/devtools/front_end/SourcesSearchScope.js
@@ -29,14 +29,12 @@
 /**
  * @constructor
  * @implements {WebInspector.SearchScope}
- * @param {!WebInspector.Workspace} workspace
  */
-WebInspector.SourcesSearchScope = function(workspace)
+WebInspector.SourcesSearchScope = function()
 {
     // FIXME: Add title once it is used by search controller.
-    WebInspector.SearchScope.call(this)
     this._searchId = 0;
-    this._workspace = workspace;
+    this._workspace = WebInspector.workspace;
 }
 
 WebInspector.SourcesSearchScope.prototype = {
@@ -139,6 +137,7 @@
 
         /**
          * @param {!string} path
+         * @this {WebInspector.SourcesSearchScope}
          */
         function searchInNextFile(path)
         {
@@ -152,6 +151,9 @@
             uiSourceCode.requestContent(contentLoaded.bind(this, path));
         }
 
+        /**
+         * @this {WebInspector.SourcesSearchScope}
+         */
         function scheduleSearchInNextFileOrFinish()
         {
             if (fileIndex >= files.length) {
@@ -171,6 +173,7 @@
         /**
          * @param {!string} path
          * @param {?string} content
+         * @this {WebInspector.SourcesSearchScope}
          */
         function contentLoaded(path, content)
         {
@@ -210,11 +213,10 @@
 
     /**
      * @param {!WebInspector.SearchConfig} searchConfig
+     * @return {!WebInspector.FileBasedSearchResultsPane}
      */
     createSearchResultsPane: function(searchConfig)
     {
         return new WebInspector.FileBasedSearchResultsPane(searchConfig);
-    },
-
-    __proto__: WebInspector.SearchScope.prototype
+    }
 }
diff --git a/Source/devtools/front_end/Spectrum.js b/Source/devtools/front_end/Spectrum.js
index ce000d8..97c7f50 100644
--- a/Source/devtools/front_end/Spectrum.js
+++ b/Source/devtools/front_end/Spectrum.js
@@ -35,7 +35,7 @@
     WebInspector.View.call(this);
     this.registerRequiredCSS("spectrum.css");
 
-    this.element.className = "spectrum-container";
+    this.element.classList.add("spectrum-container");
     this.element.tabIndex = 0;
 
     var topElement = this.element.createChild("div", "spectrum-top");
@@ -56,6 +56,7 @@
     this._alphaElement.setAttribute("type", "range");
     this._alphaElement.setAttribute("min", "0");
     this._alphaElement.setAttribute("max", "100");
+    this._alphaElement.addEventListener("input", alphaDrag.bind(this), false);
     this._alphaElement.addEventListener("change", alphaDrag.bind(this), false);
 
     var swatchElement = document.createElement("span");
@@ -69,6 +70,12 @@
     WebInspector.Spectrum.draggable(this._sliderElement, hueDrag.bind(this));
     WebInspector.Spectrum.draggable(this._draggerElement, colorDrag.bind(this), colorDragStart.bind(this));
 
+    /**
+     * @param {!Element} element
+     * @param {number} dragX
+     * @param {number} dragY
+     * @this {WebInspector.Spectrum}
+     */
     function hueDrag(element, dragX, dragY)
     {
         this._hsv[0] = (this.slideHeight - dragY) / this.slideHeight;
@@ -78,11 +85,21 @@
 
     var initialHelperOffset;
 
-    function colorDragStart(element, dragX, dragY)
+    /**
+     * @this {WebInspector.Spectrum}
+     */
+    function colorDragStart()
     {
         initialHelperOffset = { x: this._dragHelperElement.offsetLeft, y: this._dragHelperElement.offsetTop };
     }
 
+    /**
+     * @param {!Element} element
+     * @param {number} dragX
+     * @param {number} dragY
+     * @param {!MouseEvent} event
+     * @this {WebInspector.Spectrum}
+     */
     function colorDrag(element, dragX, dragY, event)
     {
         if (event.shiftKey) {
@@ -98,6 +115,9 @@
         this._onchange();
     }
 
+    /**
+     * @this {WebInspector.Spectrum}
+     */
     function alphaDrag()
     {
         this._hsv[3] = this._alphaElement.value / 100;
@@ -111,9 +131,9 @@
 };
 
 /**
- * @param {!Function=} onmove
- * @param {!Function=} onstart
- * @param {!Function=} onstop
+ * @param {function(!Element, number, number, !MouseEvent)=} onmove
+ * @param {function(!Element, !MouseEvent)=} onstart
+ * @param {function(!Element, !MouseEvent)=} onstop
  */
 WebInspector.Spectrum.draggable = function(element, onmove, onstart, onstop) {
 
@@ -124,11 +144,17 @@
     var maxHeight;
     var maxWidth;
 
+    /**
+     * @param {?Event} e
+     */
     function consume(e)
     {
         e.consume(true);
     }
 
+    /**
+     * @param {?Event} e
+     */
     function move(e)
     {
         if (dragging) {
@@ -136,18 +162,22 @@
             var dragY = Math.max(0, Math.min(e.pageY - offset.top + scrollOffset.top, maxHeight));
 
             if (onmove)
-                onmove(element, dragX, dragY, e);
+                onmove(element, dragX, dragY, /** @type {!MouseEvent} */ (e));
         }
     }
 
+    /**
+     * @param {?Event} e
+     */
     function start(e)
     {
-        var rightClick = e.which ? (e.which === 3) : (e.button === 2);
+        var mouseEvent = /** @type {!MouseEvent} */ (e);
+        var rightClick = mouseEvent.which ? (mouseEvent.which === 3) : (mouseEvent.button === 2);
 
         if (!rightClick && !dragging) {
 
             if (onstart)
-                onstart(element, e)
+                onstart(element, mouseEvent);
 
             dragging = true;
             maxHeight = element.clientHeight;
@@ -161,11 +191,14 @@
             doc.addEventListener("mousemove", move, false);
             doc.addEventListener("mouseup", stop, false);
 
-            move(e);
-            consume(e);
+            move(mouseEvent);
+            consume(mouseEvent);
         }
     }
 
+    /**
+     * @param {?Event} e
+     */
     function stop(e)
     {
         if (dragging) {
@@ -175,7 +208,7 @@
             doc.removeEventListener("mouseup", stop, false);
 
             if (onstop)
-                onstop(element, e);
+                onstop(element, /** @type {!MouseEvent} */ (e));
         }
 
         dragging = false;
@@ -312,6 +345,9 @@
         return this._spectrum;
     },
 
+    /**
+     * @return {boolean}
+     */
     toggle: function(element, color, format)
     {
         if (this._popover.isShowing())
@@ -322,6 +358,9 @@
         return this._popover.isShowing();
     },
 
+    /**
+     * @return {boolean}
+     */
     show: function(element, color, format)
     {
         if (this._popover.isShowing()) {
@@ -389,12 +428,14 @@
 
 /**
  * @constructor
+ * @param {boolean=} readOnly
  */
-WebInspector.ColorSwatch = function()
+WebInspector.ColorSwatch = function(readOnly)
 {
     this.element = document.createElement("span");
     this._swatchInnerElement = this.element.createChild("span", "swatch-inner");
-    this.element.title = WebInspector.UIString("Click to open a colorpicker. Shift-click to change color format");
+    var shiftClickMessage = WebInspector.UIString("Shift-click to change color format.");
+    this.element.title = readOnly ? shiftClickMessage : String.sprintf("%s\n%s", WebInspector.UIString("Click to open a colorpicker."), shiftClickMessage);
     this.element.className = "swatch";
     this.element.addEventListener("mousedown", consumeEvent, false);
     this.element.addEventListener("dblclick", consumeEvent, false);
diff --git a/Source/devtools/front_end/SplitView.js b/Source/devtools/front_end/SplitView.js
index f81d98d..096416f 100644
--- a/Source/devtools/front_end/SplitView.js
+++ b/Source/devtools/front_end/SplitView.js
@@ -30,23 +30,37 @@
  * @constructor
  * @extends {WebInspector.View}
  * @param {boolean} isVertical
+ * @param {boolean} secondIsSidebar
  * @param {string=} sidebarSizeSettingName
  * @param {number=} defaultSidebarWidth
  * @param {number=} defaultSidebarHeight
  */
-WebInspector.SplitView = function(isVertical, sidebarSizeSettingName, defaultSidebarWidth, defaultSidebarHeight)
+WebInspector.SplitView = function(isVertical, secondIsSidebar, sidebarSizeSettingName, defaultSidebarWidth, defaultSidebarHeight)
 {
     WebInspector.View.call(this);
 
     this.registerRequiredCSS("splitView.css");
-
     this.element.classList.add("split-view");
-    this.element.classList.add("fill");
 
-    this._firstElement = this.element.createChild("div", "split-view-contents scroll-target split-view-contents-first");
-    this._secondElement = this.element.createChild("div", "split-view-contents scroll-target split-view-contents-second");
+    this._mainView = new WebInspector.View();
+    this._mainView.makeLayoutBoundary();
+    this._mainElement = this._mainView.element;
+    this._mainElement.className = "split-view-contents scroll-target split-view-main vbox"; // Override
+
+    this._sidebarView = new WebInspector.View();
+    this._sidebarView.makeLayoutBoundary();
+    this._sidebarElement = this._sidebarView.element;
+    this._sidebarElement.className = "split-view-contents scroll-target split-view-sidebar vbox"; // Override
 
     this._resizerElement = this.element.createChild("div", "split-view-resizer");
+    if (secondIsSidebar) {
+        this._mainView.show(this.element);
+        this._sidebarView.show(this.element);
+    } else {
+        this._sidebarView.show(this.element);
+        this._mainView.show(this.element);
+    }
+
     this._onDragStartBound = this._onDragStart.bind(this);
     this._resizerElements = [];
 
@@ -58,10 +72,10 @@
     if (0 < this._savedSidebarWidth && this._savedSidebarWidth < 1 &&
         0 < this._savedSidebarHeight && this._savedSidebarHeight < 1)
         this._useFraction = true;
-    
+
     this._sidebarSizeSettingName = sidebarSizeSettingName;
 
-    this.setSecondIsSidebar(true);
+    this.setSecondIsSidebar(secondIsSidebar);
 
     this._innerSetVertical(isVertical);
 
@@ -69,6 +83,10 @@
     this.installResizer(this._resizerElement);
 }
 
+WebInspector.SplitView.Events = {
+    SidebarSizeChanged: "SidebarSizeChanged"
+}
+
 WebInspector.SplitView.prototype = {
     /**
      * @return {boolean}
@@ -106,43 +124,30 @@
         delete this._resizerElementSize;
         this._sidebarSize = -1;
     },
-  
-    _updateLayout: function()
+
+    /**
+     * @param {boolean=} animate
+     */
+    _updateLayout: function(animate)
     {
         delete this._totalSize; // Lazy update.
-        this._innerSetSidebarSize(this._lastSidebarSize());
+        this._innerSetSidebarSize(this._lastSidebarSize(), false, animate);
     },
 
     /**
      * @return {!Element}
      */
-    firstElement: function()
+    mainElement: function()
     {
-        return this._firstElement;
+        return this._mainElement;
     },
 
     /**
      * @return {!Element}
      */
-    secondElement: function()
+    sidebarElement: function()
     {
-        return this._secondElement;
-    },
-
-    /**
-     * @return {!Element}
-     */
-    get mainElement()
-    {
-        return this.isSidebarSecond() ? this.firstElement() : this.secondElement();
-    },
-
-    /**
-     * @return {!Element}
-     */
-    get sidebarElement()
-    {
-        return this.isSidebarSecond() ? this.secondElement() : this.firstElement();
+        return this._sidebarElement;
     },
 
     /**
@@ -158,11 +163,39 @@
      */
     setSecondIsSidebar: function(secondIsSidebar)
     {
-        this.sidebarElement.classList.remove("split-view-sidebar");
-        this.mainElement.classList.remove("split-view-main");
+        this._mainElement.classList.toggle("split-view-contents-first", secondIsSidebar);
+        this._mainElement.classList.toggle("split-view-contents-second", !secondIsSidebar);
+        this._sidebarElement.classList.toggle("split-view-contents-first", !secondIsSidebar);
+        this._sidebarElement.classList.toggle("split-view-contents-second", secondIsSidebar);
+
+        // Make sure second is last in the children array.
+        if (secondIsSidebar) {
+            if (this._sidebarElement.parentElement && this._sidebarElement.nextSibling)
+                this.element.appendChild(this._sidebarElement);
+        } else {
+            if (this._mainElement.parentElement && this._mainElement.nextSibling)
+                this.element.appendChild(this._mainElement);
+        }
+
         this._secondIsSidebar = secondIsSidebar;
-        this.sidebarElement.classList.add("split-view-sidebar");
-        this.mainElement.classList.add("split-view-main");
+    },
+
+    /**
+     * @return {string}
+     */
+    sidebarSide: function()
+    {
+        return this._isVertical ?
+            (this._secondIsSidebar ? "right" : "left") :
+            (this._secondIsSidebar ? "bottom" : "top");
+    },
+
+    /**
+     * @return {number}
+     */
+    desiredSidebarSize: function()
+    {
+        return this._lastSidebarSize();
     },
 
     /**
@@ -173,37 +206,58 @@
         return this._resizerElement;
     },
 
-    showOnlyFirst: function()
+    /**
+     * @param {boolean=} animate
+     */
+    hideMain: function(animate)
     {
-        this._showOnly(this._firstElement, this._secondElement);
-    },
-
-    showOnlySecond: function()
-    {
-        this._showOnly(this._secondElement, this._firstElement);
+        this._showOnly(this._sidebarView, this._mainView, animate);
     },
 
     /**
-     * @param {!Element} sideA
-     * @param {!Element} sideB
+     * @param {boolean=} animate
      */
-    _showOnly: function(sideA, sideB)
+    hideSidebar: function(animate)
     {
-        sideA.classList.remove("hidden");
-        sideA.classList.add("maximized");
-        sideB.classList.add("hidden");
-        sideB.classList.remove("maximized");
-        this._removeAllLayoutProperties();
+        this._showOnly(this._mainView, this._sidebarView, animate);
+    },
+
+    /**
+     * @param {!WebInspector.View} sideToShow
+     * @param {!WebInspector.View} sideToHide
+     * @param {boolean=} animate
+     */
+    _showOnly: function(sideToShow, sideToHide, animate)
+    {
+        this._cancelAnimation();
+
+        /**
+         * @this {WebInspector.SplitView}
+         */
+        function callback()
+        {
+            sideToShow.show(this.element);
+            sideToHide.detach();
+            sideToShow.element.classList.add("maximized");
+            sideToHide.element.classList.remove("maximized");
+            this._removeAllLayoutProperties();
+        }
+
+        if (animate) {
+            this._animate(true, callback.bind(this));
+        } else {
+            callback.call(this);
+            this.doResize();
+        }
 
         this._isShowingOne = true;
         this._sidebarSize = -1;
         this.setResizable(false);
-        this.doResize();
     },
 
     _removeAllLayoutProperties: function()
     {
-        this.sidebarElement.style.removeProperty("flexBasis");
+        this._sidebarElement.style.removeProperty("flexBasis");
 
         this._resizerElement.style.removeProperty("left");
         this._resizerElement.style.removeProperty("right");
@@ -216,17 +270,27 @@
         this._resizerElement.style.removeProperty("margin-bottom");
     },
 
-    showBoth: function()
+    /**
+     * @param {boolean=} animate
+     */
+    showBoth: function(animate)
     {
-        this._firstElement.classList.remove("hidden");
-        this._firstElement.classList.remove("maximized");
-        this._secondElement.classList.remove("hidden");
-        this._secondElement.classList.remove("maximized");
+        if (!this._isShowingOne)
+            animate = false;
+
+        this._cancelAnimation();
+        this._mainElement.classList.remove("maximized");
+        this._sidebarElement.classList.remove("maximized");
+
+        this._mainView.show(this.element);
+        this._sidebarView.show(this.element);
+        // Order views in DOM properly.
+        this.setSecondIsSidebar(this._secondIsSidebar);
 
         this._isShowingOne = false;
         this._sidebarSize = -1;
         this.setResizable(true);
-        this.doResize();
+        this._updateLayout(animate);
     },
 
     /**
@@ -240,10 +304,11 @@
 
     /**
      * @param {number} size
+     * @param {boolean=} ignoreConstraints
      */
-    setSidebarSize: function(size)
+    setSidebarSize: function(size, ignoreConstraints)
     {
-        this._innerSetSidebarSize(size);
+        this._innerSetSidebarSize(size, ignoreConstraints);
         this._saveSidebarSize();
     },
 
@@ -267,15 +332,18 @@
 
     /**
      * @param {number} size
+     * @param {boolean=} ignoreConstraints
+     * @param {boolean=} animate
      */
-    _innerSetSidebarSize: function(size)
+    _innerSetSidebarSize: function(size, ignoreConstraints, animate)
     {
         if (this._isShowingOne) {
             this._sidebarSize = size;
             return;
         }
 
-        size = this._applyConstraints(size);
+        if (!ignoreConstraints)
+            size = this._applyConstraints(size);
         if (this._sidebarSize === size)
             return;
 
@@ -292,10 +360,12 @@
         else
             sizeValue = size + "px";
 
+        this.sidebarElement().style.flexBasis = sizeValue;
+
         if (!this._resizerElementSize)
             this._resizerElementSize = this._isVertical ? this._resizerElement.offsetWidth : this._resizerElement.offsetHeight;
 
-        this.sidebarElement.style.flexBasis = sizeValue;
+        // Position resizer.
         if (this._isVertical) {
             if (this._secondIsSidebar) {
                 this._resizerElement.style.right = sizeValue;
@@ -316,10 +386,93 @@
 
         this._sidebarSize = size;
 
-        // No need to recalculate this._sidebarSize and this._totalSize again.
-        this._muteOnResize = true;
-        this.doResize();
-        delete this._muteOnResize;
+        if (animate) {
+            this._animate(false);
+        } else {
+            // No need to recalculate this._sidebarSize and this._totalSize again.
+            this.doResize();
+            this.dispatchEventToListeners(WebInspector.SplitView.Events.SidebarSizeChanged, this.sidebarSize());
+        }
+    },
+
+    /**
+     * @param {boolean} reverse
+     * @param {function()=} callback
+     */
+    _animate: function(reverse, callback)
+    {
+        var animationTime = 50;
+        this._animationCallback = callback;
+
+        var animatedMarginPropertyName;
+        if (this._isVertical)
+            animatedMarginPropertyName = this._secondIsSidebar ? "margin-right" : "margin-left";
+        else
+            animatedMarginPropertyName = this._secondIsSidebar ? "margin-bottom" : "margin-top";
+
+        var marginFrom = reverse ? "0" : "-" + this._sidebarSize + "px";
+        var marginTo = reverse ? "-" + this._sidebarSize + "px" : "0";
+
+        // This order of things is important.
+        // 1. Resize main element early and force layout.
+        this.element.style.setProperty(animatedMarginPropertyName, marginFrom);
+        if (!reverse) {
+            suppressUnused(this._mainElement.offsetWidth);
+            suppressUnused(this._sidebarElement.offsetWidth);
+        }
+
+        // 2. Issue onresize to the sidebar element, its size won't change.
+        if (!reverse)
+            this._sidebarView.doResize();
+
+        // 3. Configure and run animation
+        this.element.style.setProperty("transition", animatedMarginPropertyName + " " + animationTime + "ms linear");
+
+        var boundAnimationFrame;
+        var startTime;
+        /**
+         * @this {WebInspector.SplitView}
+         */
+        function animationFrame()
+        {
+            delete this._animationFrameHandle;
+
+            if (!startTime) {
+                // Kick animation on first frame.
+                this.element.style.setProperty(animatedMarginPropertyName, marginTo);
+                startTime = window.performance.now();
+            } else if (window.performance.now() < startTime + animationTime) {
+                // Process regular animation frame.
+                this._mainView.doResize();
+            } else {
+                // Complete animation.
+                this._cancelAnimation();
+                this._mainView.doResize();
+                this.dispatchEventToListeners(WebInspector.SplitView.Events.SidebarSizeChanged, this.sidebarSize());
+                return;
+            }
+            this._animationFrameHandle = window.requestAnimationFrame(boundAnimationFrame);
+        }
+        boundAnimationFrame = animationFrame.bind(this);
+        this._animationFrameHandle = window.requestAnimationFrame(boundAnimationFrame);
+    },
+
+    _cancelAnimation: function()
+    {
+        this.element.style.removeProperty("margin-top");
+        this.element.style.removeProperty("margin-right");
+        this.element.style.removeProperty("margin-bottom");
+        this.element.style.removeProperty("margin-left");
+        this.element.style.removeProperty("transition");
+
+        if (this._animationFrameHandle) {
+            window.cancelAnimationFrame(this._animationFrameHandle);
+            delete this._animationFrameHandle;
+        }
+        if (this._animationCallback) {
+            this._animationCallback();
+            delete this._animationCallback;
+        }
     },
 
     /**
@@ -354,21 +507,25 @@
     {
         const minPadding = 20;
         var totalSize = this.totalSize();
-        var from = (this.isVertical() ? this._minimumSidebarWidth : this._minimumSidebarHeight) || 0;
+        var minimumSiderbarSizeContraint = this.isVertical() ? this._minimumSidebarWidth : this._minimumSidebarHeight;
+        var from = minimumSiderbarSizeContraint || 0;
         var fromInPercents = false;
         if (from && from < 1) {
             fromInPercents = true;
             from = Math.round(totalSize * from);
         }
-        from = Math.max(from, minPadding);
+        if (typeof minimumSiderbarSizeContraint !== "number")
+            from = Math.max(from, minPadding);
 
-        var minMainSize = (this.isVertical() ? this._minimumMainWidth : this._minimumMainHeight) || 0;
+        var minimumMainSizeConstraint = this.isVertical() ? this._minimumMainWidth : this._minimumMainHeight;
+        var minMainSize = minimumMainSizeConstraint || 0;
         var toInPercents = false;
         if (minMainSize && minMainSize < 1) {
             toInPercents = true;
             minMainSize = Math.round(totalSize * minMainSize);
         }
-        minMainSize = Math.max(minMainSize, minPadding);
+        if (typeof minimumMainSizeConstraint !== "number")
+            minMainSize = Math.max(minMainSize, minPadding);
 
         var to = totalSize - minMainSize;
         if (from <= to)
@@ -393,8 +550,6 @@
 
     onResize: function()
     {
-        if (this._muteOnResize)
-            return;
         this._updateLayout();
     },
 
@@ -407,7 +562,7 @@
         if (!this._resizable)
             return false;
 
-        this._saveSidebarSizeRecursively();
+        this._saveSidebarSize();
         this._dragOffset = (this._secondIsSidebar ? this.totalSize() - this._sidebarSize : this._sidebarSize) - (this._isVertical ? event.pageX : event.pageY);
         return true;
     },
@@ -429,20 +584,12 @@
     _endResizerDragging: function(event)
     {
         delete this._dragOffset;
-        this._saveSidebarSizeRecursively();
+        this._saveSidebarSize();
     },
 
-    _saveSidebarSizeRecursively: function()
+    hideDefaultResizer: function()
     {
-        /** @this {WebInspector.View} */
-        function doSaveSidebarSizeRecursively()
-        {
-            if (this._saveSidebarSize)
-                this._saveSidebarSize();
-            this._callOnVisibleChildren(doSaveSidebarSizeRecursively);
-        }
-        this._saveSidebarSize();
-        this._callOnVisibleChildren(doSaveSidebarSizeRecursively);
+        this.element.classList.add("split-view-no-resizer");
     },
 
     /**
@@ -452,7 +599,8 @@
     {
         resizerElement.addEventListener("mousedown", this._onDragStartBound, false);
         resizerElement.style.setProperty("cursor", this._isVertical ? "ew-resize" : "ns-resize");
-        this._resizerElements.push(resizerElement);
+        if (this._resizerElements.indexOf(resizerElement) === -1)
+            this._resizerElements.push(resizerElement);
     },
 
     /**
@@ -470,6 +618,9 @@
      */
     _onDragStart: function(event)
     {
+        // Only handle drags of the nodes specified.
+        if (this._resizerElements.indexOf(event.target) === -1)
+            return;
         WebInspector.elementDragStart(this._startResizerDragging.bind(this), this._resizerDragging.bind(this), this._endResizerDragging.bind(this), this._isVertical ? "ew-resize" : "ns-resize", event);
     },
 
diff --git a/Source/devtools/front_end/StackView.js b/Source/devtools/front_end/StackView.js
new file mode 100644
index 0000000..a4c8fa2
--- /dev/null
+++ b/Source/devtools/front_end/StackView.js
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2014 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:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
+ * OR ITS 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.
+ */
+
+/**
+ * @constructor
+ * @extends {WebInspector.View}
+ * @param {boolean} isVertical
+ */
+WebInspector.StackView = function(isVertical)
+{
+    WebInspector.View.call(this);
+    this._isVertical = isVertical;
+    this._currentSplitView = null;
+}
+
+WebInspector.StackView.prototype = {
+    /**
+     * @param {!WebInspector.View} view
+     * @param {string=} sidebarSizeSettingName
+     * @param {number=} defaultSidebarWidth
+     * @param {number=} defaultSidebarHeight
+     * @return {!WebInspector.SplitView}
+     */
+    appendView: function(view, sidebarSizeSettingName, defaultSidebarWidth, defaultSidebarHeight)
+    {
+        var splitView = new WebInspector.SplitView(this._isVertical, true, sidebarSizeSettingName, defaultSidebarWidth, defaultSidebarHeight);
+        view.show(splitView.mainElement());
+        splitView.hideSidebar();
+
+        if (!this._currentSplitView) {
+            splitView.show(this.element);
+        } else {
+            splitView.show(this._currentSplitView.sidebarElement());
+            this._currentSplitView.showBoth();
+        }
+
+        this._currentSplitView = splitView;
+        return splitView;
+    },
+
+    detachChildViews: function()
+    {
+        WebInspector.View.prototype.detachChildViews.call(this);
+        this._currentSplitView = null;
+    },
+
+    __proto__: WebInspector.View.prototype
+}
diff --git a/Source/devtools/front_end/StatusBarButton.js b/Source/devtools/front_end/StatusBarButton.js
index 9653a40..35675dd 100644
--- a/Source/devtools/front_end/StatusBarButton.js
+++ b/Source/devtools/front_end/StatusBarButton.js
@@ -31,12 +31,13 @@
 /**
  * @constructor
  * @extends {WebInspector.Object}
- * @param {!Element} element
+ * @param {string} elementType
  */
-WebInspector.StatusBarItem = function(element)
+WebInspector.StatusBarItem = function(elementType)
 {
-    this.element = element;
+    this.element = document.createElement(elementType);
     this._enabled = true;
+    this._visible = true;
 }
 
 WebInspector.StatusBarItem.prototype = {
@@ -59,6 +60,19 @@
         this.element.disabled = !this._enabled;
     },
 
+    get visible()
+    {
+        return this._visible;
+    },
+
+    set visible(x)
+    {
+        if (this._visible === x)
+            return;
+        this.element.enableStyleClass("hidden", !x);
+        this._visible = x;
+    },
+
     __proto__: WebInspector.Object.prototype
 }
 
@@ -70,7 +84,7 @@
  */
 WebInspector.StatusBarText = function(text, className)
 {
-    WebInspector.StatusBarItem.call(this, document.createElement("span"));
+    WebInspector.StatusBarItem.call(this, "span");
     this.element.className = "status-bar-item status-bar-text";
     if (className)
         this.element.classList.add(className);
@@ -89,6 +103,39 @@
     __proto__: WebInspector.StatusBarItem.prototype
 }
 
+/**
+ * @constructor
+ * @extends {WebInspector.StatusBarItem}
+ * @param {string=} placeholder
+ * @param {number=} width
+ */
+WebInspector.StatusBarInput = function(placeholder, width)
+{
+    WebInspector.StatusBarItem.call(this, "input");
+    this.element.className = "status-bar-item";
+    this.element.addEventListener("input", this._onChangeCallback.bind(this), false);
+    if (width)
+        this.element.style.width = width + "px";
+    if (placeholder)
+        this.element.setAttribute("placeholder", placeholder);
+}
+
+WebInspector.StatusBarInput.prototype = {
+    /**
+     * @param {?function(string)} handler
+     */
+    setOnChangeHandler: function(handler)
+    {
+        this._onChangeHandler = handler;
+    },
+
+    _onChangeCallback: function()
+    {
+        this._onChangeHandler && this._onChangeHandler(this.element.value);
+    },
+
+    __proto__: WebInspector.StatusBarItem.prototype
+}
 
 /**
  * @constructor
@@ -99,7 +146,7 @@
  */
 WebInspector.StatusBarButton = function(title, className, states)
 {
-    WebInspector.StatusBarItem.call(this, document.createElement("button"));
+    WebInspector.StatusBarItem.call(this, "button");
     this.element.className = className + " status-bar-item";
     this.element.addEventListener("click", this._clicked.bind(this), false);
 
@@ -122,7 +169,6 @@
 
     this.title = title;
     this.className = className;
-    this._visible = true;
 }
 
 WebInspector.StatusBarButton.prototype = {
@@ -202,20 +248,6 @@
         this.state = x;
     },
 
-    get visible()
-    {
-        return this._visible;
-    },
-
-    set visible(x)
-    {
-        if (this._visible === x)
-            return;
-
-        this.element.enableStyleClass("hidden", !x);
-        this._visible = x;
-    },
-
     makeLongClickEnabled: function()
     {
         var boundMouseDown = mouseDown.bind(this);
@@ -229,6 +261,10 @@
 
         this._longClickData = { mouseUp: boundMouseUp, mouseDown: boundMouseDown };
 
+        /**
+         * @param {?Event} e
+         * @this {WebInspector.StatusBarButton}
+         */
         function mouseDown(e)
         {
             if (e.which !== 1)
@@ -237,6 +273,10 @@
             this._longClickInterval = setInterval(longClicked.bind(this), 200);
         }
 
+        /**
+         * @param {?Event} e
+         * @this {WebInspector.StatusBarButton}
+         */
         function mouseUp(e)
         {
             if (e.which !== 1)
@@ -247,6 +287,9 @@
             }
         }
 
+        /**
+         * @this {WebInspector.StatusBarButton}
+         */
         function longClicked()
         {
             ++longClicks;
@@ -321,7 +364,7 @@
 
         var hostButtonPosition = this.element.totalOffset();
 
-        var topNotBottom = hostButtonPosition.top < document.documentElement.offsetHeight / 2;
+        var topNotBottom = hostButtonPosition.top + buttonHeight * buttons.length < document.documentElement.offsetHeight;
 
         if (topNotBottom)
             buttons = buttons.reverse();
@@ -387,7 +430,7 @@
  */
 WebInspector.StatusBarComboBox = function(changeHandler, className)
 {
-    WebInspector.StatusBarItem.call(this, document.createElement("span"));
+    WebInspector.StatusBarItem.call(this, "span");
     this.element.className = "status-bar-select-container";
 
     this._selectElement = this.element.createChild("select", "status-bar-item");
@@ -505,7 +548,7 @@
  */
 WebInspector.StatusBarCheckbox = function(title)
 {
-    WebInspector.StatusBarItem.call(this, document.createElement("label"));
+    WebInspector.StatusBarItem.call(this, "label");
     this.element.classList.add("status-bar-item", "checkbox");
     this._checkbox = this.element.createChild("input");
     this._checkbox.type = "checkbox";
@@ -523,3 +566,103 @@
 
     __proto__: WebInspector.StatusBarItem.prototype
 }
+
+/**
+ * @constructor
+ * @extends {WebInspector.StatusBarButton}
+ * @param {string} className
+ * @param {!Array.<string>} states
+ * @param {!Array.<string>} titles
+ * @param {!WebInspector.Setting} currentStateSetting
+ * @param {!WebInspector.Setting} lastStateSetting
+ * @param {?function(string)} stateChangedCallback
+ */
+WebInspector.StatusBarStatesSettingButton = function(className, states, titles, currentStateSetting, lastStateSetting, stateChangedCallback)
+{
+    WebInspector.StatusBarButton.call(this, "", className, states.length);
+
+    var onClickBound = this._onClick.bind(this);
+    this.addEventListener("click", onClickBound, this);
+
+    this._states = states;
+    this._buttons = [];
+    for (var index = 0; index < states.length; index++) {
+        var button = new WebInspector.StatusBarButton(titles[index], className, states.length);
+        button.state = this._states[index];
+        button.addEventListener("click", onClickBound, this);
+        this._buttons.push(button);
+    }
+
+    this._currentStateSetting = currentStateSetting;
+    this._lastStateSetting = lastStateSetting;
+    this._stateChangedCallback = stateChangedCallback;
+    this.setLongClickOptionsEnabled(this._createOptions.bind(this));
+
+    this._currentState = null;
+    this.toggleState(this._defaultState());
+}
+
+WebInspector.StatusBarStatesSettingButton.prototype = {
+    /**
+     * @param {!WebInspector.Event} e
+     */
+    _onClick: function(e)
+    {
+        this.toggleState(e.target.state);
+    },
+
+    /**
+     * @param {string} state
+     */
+    toggleState: function(state)
+    {
+        if (this._currentState === state)
+            return;
+
+        if (this._currentState)
+            this._lastStateSetting.set(this._currentState);
+        this._currentState = state;
+        this._currentStateSetting.set(this._currentState);
+
+        if (this._stateChangedCallback)
+            this._stateChangedCallback(state);
+
+        var defaultState = this._defaultState();
+        this.state = defaultState;
+        this.title = this._buttons[this._states.indexOf(defaultState)].title;
+    },
+
+    /**
+     * @return {string}
+     */
+    _defaultState: function()
+    {
+        // Not yet initialized - load from setting.
+        if (!this._currentState) {
+            var state = this._currentStateSetting.get();
+            return this._states.indexOf(state) >= 0 ? state : this._states[0];
+        }
+
+        var lastState = this._lastStateSetting.get();
+        if (lastState && this._states.indexOf(lastState) >= 0 && lastState != this._currentState)
+            return lastState;
+        if (this._states.length > 1 && this._currentState === this._states[0])
+            return this._states[1];
+        return this._states[0];
+    },
+
+    /**
+     * @return {!Array.<!WebInspector.StatusBarButton>}
+     */
+    _createOptions: function()
+    {
+        var options = [];
+        for (var index = 0; index < this._states.length; index++) {
+            if (this._states[index] !== this.state && this._states[index] !== this._currentState)
+                options.push(this._buttons[index]);
+        }
+        return options;
+    },
+
+    __proto__: WebInspector.StatusBarButton.prototype
+}
diff --git a/Source/devtools/front_end/StyleSheetOutlineDialog.js b/Source/devtools/front_end/StyleSheetOutlineDialog.js
index cfb0ec3..978ddb3 100644
--- a/Source/devtools/front_end/StyleSheetOutlineDialog.js
+++ b/Source/devtools/front_end/StyleSheetOutlineDialog.js
@@ -29,18 +29,17 @@
 /**
  * @constructor
  * @extends {WebInspector.SelectionDialogContentProvider}
- * @param {!WebInspector.View} view
  * @param {!WebInspector.UISourceCode} uiSourceCode
  * @param {function(number, number)} selectItemCallback
  */
-WebInspector.StyleSheetOutlineDialog = function(view, uiSourceCode, selectItemCallback)
+WebInspector.StyleSheetOutlineDialog = function(uiSourceCode, selectItemCallback)
 {
     WebInspector.SelectionDialogContentProvider.call(this);
     this._selectItemCallback = selectItemCallback;
     this._rules = [];
-    this._view = view;
-    this._uiSourceCode = uiSourceCode;
-    this._requestItems();
+    this._outlineWorker = new Worker("ScriptFormatterWorker.js");
+    this._outlineWorker.onmessage = this._didBuildOutlineChunk.bind(this);
+    this._outlineWorker.postMessage({ method: "cssOutline", params: { content: uiSourceCode.workingCopy() } });
 }
 
 /**
@@ -52,13 +51,29 @@
 {
     if (WebInspector.Dialog.currentInstance())
         return null;
-    var delegate = new WebInspector.StyleSheetOutlineDialog(view, uiSourceCode, selectItemCallback);
+    var delegate = new WebInspector.StyleSheetOutlineDialog(uiSourceCode, selectItemCallback);
     var filteredItemSelectionDialog = new WebInspector.FilteredItemSelectionDialog(delegate);
     WebInspector.Dialog.show(view.element, filteredItemSelectionDialog);
 }
 
 WebInspector.StyleSheetOutlineDialog.prototype = {
     /**
+     * @param {!MessageEvent} event
+     */
+    _didBuildOutlineChunk: function(event)
+    {
+        var data = /** @type {!WebInspector.StyleSheetOutlineDialog.MessageEventData} */ (event.data);
+        var chunk = data.chunk;
+        for (var i = 0; i < chunk.length; ++i)
+            this._rules.push(chunk[i]);
+
+        if (data.total === data.index)
+            this.dispose();
+
+        this.refresh();
+    },
+
+    /**
      * @return {number}
      */
     itemCount: function()
@@ -72,7 +87,8 @@
      */
     itemKeyAt: function(itemIndex)
     {
-        return this._rules[itemIndex].selectorText;
+        var rule = this._rules[itemIndex];
+        return rule.selectorText || rule.atRule;
     },
 
     /**
@@ -83,7 +99,7 @@
     itemScoreAt: function(itemIndex, query)
     {
         var rule = this._rules[itemIndex];
-        return -rule.rawLocation.lineNumber;
+        return -rule.lineNumber;
     },
 
     /**
@@ -95,40 +111,9 @@
     renderItem: function(itemIndex, query, titleElement, subtitleElement)
     {
         var rule = this._rules[itemIndex];
-        titleElement.textContent = rule.selectorText;
+        titleElement.textContent = rule.selectorText || rule.atRule;
         this.highlightRanges(titleElement, query);
-        subtitleElement.textContent = ":" + (rule.rawLocation.lineNumber + 1);
-    },
-
-    _requestItems: function()
-    {
-        function didGetAllStyleSheets(error, infos)
-        {
-            if (error)
-                return;
-
-            for (var i = 0; i < infos.length; ++i) {
-                var info = infos[i];
-                if (info.sourceURL === this._uiSourceCode.url) {
-                    WebInspector.CSSStyleSheet.createForId(info.styleSheetId, didGetStyleSheet.bind(this));
-                    return;
-                }
-            }
-        }
-
-        CSSAgent.getAllStyleSheets(didGetAllStyleSheets.bind(this));
-
-        /**
-         * @param {?WebInspector.CSSStyleSheet} styleSheet
-         */
-        function didGetStyleSheet(styleSheet)
-        {
-            if (!styleSheet)
-                return;
-
-            this._rules = styleSheet.rules;
-            this.refresh();
-        }
+        subtitleElement.textContent = ":" + (rule.lineNumber + 1);
     },
 
     /**
@@ -138,10 +123,23 @@
     selectItem: function(itemIndex, promptValue)
     {
         var rule = this._rules[itemIndex];
-        var lineNumber = rule.rawLocation.lineNumber;
+        var lineNumber = rule.lineNumber;
         if (!isNaN(lineNumber) && lineNumber >= 0)
-            this._selectItemCallback(lineNumber, rule.rawLocation.columnNumber);
+            this._selectItemCallback(lineNumber, rule.columnNumber);
+    },
+
+    dispose: function()
+    {
+        if (this._outlineWorker) {
+            this._outlineWorker.terminate();
+            delete this._outlineWorker;
+        }
     },
 
     __proto__: WebInspector.SelectionDialogContentProvider.prototype
 }
+
+/**
+ * @typedef {{index: number, total: number, chunk: !Array.<!{selectorText: ?string, atRule: ?string, lineNumber: number, columnNumber: number}>}}
+ */
+WebInspector.StyleSheetOutlineDialog.MessageEventData;
diff --git a/Source/devtools/front_end/StylesSidebarPane.js b/Source/devtools/front_end/StylesSidebarPane.js
index 997d27e..794093e 100644
--- a/Source/devtools/front_end/StylesSidebarPane.js
+++ b/Source/devtools/front_end/StylesSidebarPane.js
@@ -37,38 +37,6 @@
 {
     WebInspector.SidebarPane.call(this, WebInspector.UIString("Styles"));
 
-    this.settingsSelectElement = document.createElement("select");
-    this.settingsSelectElement.className = "select-settings";
-
-    var option = document.createElement("option");
-    option.value = WebInspector.Color.Format.Original;
-    option.label = WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "As authored" : "As Authored");
-    this.settingsSelectElement.appendChild(option);
-
-    option = document.createElement("option");
-    option.value = WebInspector.Color.Format.HEX;
-    option.label = WebInspector.UIString("Hex Colors");
-    this.settingsSelectElement.appendChild(option);
-
-    option = document.createElement("option");
-    option.value = WebInspector.Color.Format.RGB;
-    option.label = WebInspector.UIString("RGB Colors");
-    this.settingsSelectElement.appendChild(option);
-
-    option = document.createElement("option");
-    option.value = WebInspector.Color.Format.HSL;
-    option.label = WebInspector.UIString("HSL Colors");
-    this.settingsSelectElement.appendChild(option);
-
-    // Prevent section from collapsing.
-    var muteEventListener = function(event) { event.consume(true); };
-
-    this.settingsSelectElement.addEventListener("click", muteEventListener, true);
-    this.settingsSelectElement.addEventListener("change", this._changeSetting.bind(this), false);
-    this._updateColorFormatFilter();
-
-    this.titleElement.appendChild(this.settingsSelectElement);
-
     this._elementStateButton = document.createElement("button");
     this._elementStateButton.className = "pane-title-button element-state";
     this._elementStateButton.title = WebInspector.UIString("Toggle Element State");
@@ -102,7 +70,6 @@
     WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.MediaQueryResultChanged, this._styleSheetOrMediaQueryResultChanged, this);
     WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.AttrModified, this._attributeChanged, this);
     WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.AttrRemoved, this._attributeChanged, this);
-    WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.PseudoStateChanged, this._pseudoStateChanged, this);
     WebInspector.settings.showUserAgentStyles.addChangeListener(this._showUserAgentStylesSettingChanged.bind(this));
     WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.FrameResized, this._frameResized, this);
     this.element.classList.add("styles-pane");
@@ -123,8 +90,7 @@
     "-webkit-media-controls-play-button", "-webkit-media-controls-mute-button", "-webkit-media-controls-timeline",
     "-webkit-media-controls-timeline-container", "-webkit-media-controls-volume-slider",
     "-webkit-media-controls-volume-slider-container", "-webkit-media-controls-current-time-display",
-    "-webkit-media-controls-time-remaining-display", "-webkit-media-controls-seek-back-button", "-webkit-media-controls-seek-forward-button",
-    "-webkit-media-controls-fullscreen-button", "-webkit-media-controls-rewind-button", "-webkit-media-controls-return-to-realtime-button",
+    "-webkit-media-controls-time-remaining-display", "-webkit-media-controls-fullscreen-button",
     "-webkit-media-controls-toggle-closed-captions-button", "-webkit-media-controls-status-display", "-webkit-scrollbar-thumb",
     "-webkit-scrollbar-button", "-webkit-scrollbar-track", "-webkit-scrollbar-track-piece", "-webkit-scrollbar-corner",
     "-webkit-resizer", "-webkit-inner-spin-button", "-webkit-outer-spin-button"
@@ -289,6 +255,10 @@
         if (!node)
             return;
 
+        /**
+         * @param {?WebInspector.CSSStyleDeclaration} computedStyle
+         * @this {WebInspector.StylesSidebarPane}
+         */
         function computedStyleCallback(computedStyle)
         {
             delete this._refreshUpdateInProgress;
@@ -331,6 +301,10 @@
 
         var resultStyles = {};
 
+        /**
+         * @param {?*} matchedResult
+         * @this {WebInspector.StylesSidebarPane}
+         */
         function stylesCallback(matchedResult)
         {
             delete this._rebuildUpdateInProgress;
@@ -358,12 +332,19 @@
             }
         }
 
+        /**
+         * @param {?WebInspector.CSSStyleDeclaration} inlineStyle
+         * @param {?WebInspector.CSSStyleDeclaration} attributesStyle
+         */
         function inlineCallback(inlineStyle, attributesStyle)
         {
             resultStyles.inlineStyle = inlineStyle;
             resultStyles.attributesStyle = attributesStyle;
         }
 
+        /**
+         * @param {?WebInspector.CSSStyleDeclaration} computedStyle
+         */
         function computedCallback(computedStyle)
         {
             resultStyles.computedStyle = computedStyle;
@@ -401,6 +382,9 @@
 
     _frameResized: function()
     {
+        /**
+         * @this {WebInspector.StylesSidebarPane}
+         */
         function refreshContents()
         {
             this._rebuildUpdate();
@@ -426,18 +410,6 @@
         this._rebuildUpdate();
     },
 
-    _pseudoStateChanged: function(event)
-    {
-        // Do not update edited element styles under our feet.
-        if (this._isEditingStyle || this._userOperation)
-            return;
-
-        if (!this._canAffectCurrentStyles(event.data))
-            return;
-
-        this._rebuildUpdate();
-    },
-
     _canAffectCurrentStyles: function(node)
     {
         return this.node && (this.node === node || node.parentNode === this.node.parentNode || node.isAncestor(this.node));
@@ -742,7 +714,6 @@
 
     _colorFormatSettingChanged: function(event)
     {
-        this._updateColorFormatFilter();
         for (var pseudoId in this.sections) {
             var sections = this.sections[pseudoId];
             for (var i = 0; i < sections.length; ++i)
@@ -750,28 +721,6 @@
         }
     },
 
-    _updateColorFormatFilter: function()
-    {
-        // Select the correct color format setting again, since it needs to be selected.
-        var selectedIndex = 0;
-        var value = WebInspector.settings.colorFormat.get();
-        var options = this.settingsSelectElement.options;
-        for (var i = 0; i < options.length; ++i) {
-            if (options[i].value === value) {
-                selectedIndex = i;
-                break;
-            }
-        }
-        this.settingsSelectElement.selectedIndex = selectedIndex;
-    },
-
-    _changeSetting: function(event)
-    {
-        var options = this.settingsSelectElement.options;
-        var selectedOption = options[this.settingsSelectElement.selectedIndex];
-        WebInspector.settings.colorFormat.set(selectedOption.value);
-    },
-
     _createNewRule: function(event)
     {
         event.consume();
@@ -779,9 +728,12 @@
         this.addBlankSection().startEditingSelector();
     },
 
+    /**
+     * @return {!WebInspector.BlankStylePropertiesSection}
+     */
     addBlankSection: function()
     {
-        var blankSection = new WebInspector.BlankStylePropertiesSection(this, this.node ? WebInspector.DOMPresentationUtils.appropriateSelectorFor(this.node, true) : "");
+        var blankSection = new WebInspector.BlankStylePropertiesSection(this, this.node ? WebInspector.DOMPresentationUtils.fullQualifiedSelector(this.node, true) : "");
 
         var elementStyleSection = this.sections[0][1];
         this._sectionsContainer.insertBefore(blankSection.element, elementStyleSection.element.nextSibling);
@@ -823,6 +775,10 @@
         var inputs = [];
         this._elementStatePane.inputs = inputs;
 
+        /**
+         * @param {?Event} event
+         * @this {WebInspector.StylesSidebarPane}
+         */
         function clickListener(event)
         {
             var node = this._validateNode();
@@ -831,6 +787,11 @@
             this._setPseudoClassCallback(node.id, event.target.state, event.target.checked);
         }
 
+        /**
+         * @param {string} state
+         * @return {!Element}
+         * @this {WebInspector.StylesSidebarPane}
+         */
         function createCheckbox(state)
         {
             var td = document.createElement("td");
@@ -917,24 +878,6 @@
 WebInspector.ComputedStyleSidebarPane = function()
 {
     WebInspector.SidebarPane.call(this, WebInspector.UIString("Computed Style"));
-    var showInheritedCheckbox = new WebInspector.Checkbox(WebInspector.UIString("Show inherited"), "sidebar-pane-subtitle");
-    this.titleElement.appendChild(showInheritedCheckbox.element);
-
-    if (WebInspector.settings.showInheritedComputedStyleProperties.get()) {
-        this.bodyElement.classList.add("show-inherited");
-        showInheritedCheckbox.checked = true;
-    }
-
-    function showInheritedToggleFunction()
-    {
-        WebInspector.settings.showInheritedComputedStyleProperties.set(showInheritedCheckbox.checked);
-        if (WebInspector.settings.showInheritedComputedStyleProperties.get())
-            this.bodyElement.classList.add("show-inherited");
-        else
-            this.bodyElement.classList.remove("show-inherited");
-    }
-
-    showInheritedCheckbox.addEventListener(showInheritedToggleFunction.bind(this));
 }
 
 WebInspector.ComputedStyleSidebarPane.prototype = {
@@ -950,6 +893,9 @@
      */
     prepareContent: function(callback)
     {
+        /**
+         * @this {WebInspector.ComputedStyleSidebarPane}
+         */
         function wrappedCallback() {
             this._hasFreshContent = true;
             if (callback)
@@ -1024,7 +970,6 @@
                     // The "linkedStylesheet" case.
                     anchor = WebInspector.linkifyResourceAsNode(media.sourceURL, undefined, "subtitle", media.sourceURL);
                 }
-                anchor.preferredPanel = "sources";
                 anchor.style.float = "right";
                 refElement.appendChild(anchor);
             }
@@ -1076,7 +1021,7 @@
     this._selectorContainer = selectorContainer;
 
     if (isInherited)
-        this.element.classList.add("show-inherited"); // This one is related to inherited rules, not computed style.
+        this.element.classList.add("styles-show-inherited"); // This one is related to inherited rules, not computed style.
 
     if (this.navigable)
         this.element.classList.add("navigable");
@@ -1096,6 +1041,15 @@
         // Overriding with empty body.
     },
 
+    handleClick: function()
+    {
+        // Avoid consuming events.
+    },
+
+    /**
+     * @param {string} propertyName
+     * @return {boolean}
+     */
     isPropertyInherited: function(propertyName)
     {
         if (this.isInherited) {
@@ -1109,6 +1063,7 @@
     /**
      * @param {string} propertyName
      * @param {boolean=} isShorthand
+     * @return {boolean}
      */
     isPropertyOverloaded: function(propertyName, isShorthand)
     {
@@ -1137,6 +1092,9 @@
         return true;
     },
 
+    /**
+     * @return {?WebInspector.StylePropertiesSection}
+     */
     nextEditableSibling: function()
     {
         var curSection = this;
@@ -1153,6 +1111,9 @@
         return (curSection && curSection.editable) ? curSection : null;
     },
 
+    /**
+     * @return {?WebInspector.StylePropertiesSection}
+     */
     previousEditableSibling: function()
     {
         var curSection = this;
@@ -1315,6 +1276,7 @@
 
     /**
      * @param {number=} index
+     * @return {!WebInspector.StylePropertyTreeElement}
      */
     addNewBlankProperty: function(index)
     {
@@ -1338,7 +1300,6 @@
         function linkifyUncopyable(url, line)
         {
             var link = WebInspector.linkifyResourceAsNode(url, line, "", url + ":" + (line + 1));
-            link.preferredPanel = "sources";
             link.classList.add("webkit-html-resource-link");
             link.setAttribute("data-uncopyable", link.textContent);
             link.textContent = "";
@@ -1393,8 +1354,7 @@
             var index = event.target._selectorIndex;
             var styleSheetHeader = WebInspector.cssModel.styleSheetHeaderForId(this.rule.id.styleSheetId);
             var uiLocation = styleSheetHeader.rawLocationToUILocation(this.rule.lineNumberInSource(index), this.rule.columnNumberInSource(index));
-            if (uiLocation)
-                WebInspector.panel("sources").showUILocation(uiLocation);
+            WebInspector.Revealer.reveal(uiLocation);
             return;
         }
         this._startEditingOnMouseEvent();
@@ -1427,8 +1387,8 @@
         element.scrollIntoViewIfNeeded(false);
         element.textContent = element.textContent; // Reset selector marks in group.
 
-        var config = new WebInspector.EditingConfig(this.editingSelectorCommitted.bind(this), this.editingSelectorCancelled.bind(this));
-        WebInspector.startEditing(this._selectorElement, config);
+        var config = new WebInspector.InplaceEditor.Config(this.editingSelectorCommitted.bind(this), this.editingSelectorCancelled.bind(this));
+        WebInspector.InplaceEditor.startEditing(this._selectorElement, config);
 
         window.getSelection().setBaseAndExtent(element, 0, element, 1);
         this._parentPane._isEditingStyle = true;
@@ -1468,11 +1428,16 @@
         if (newContent === oldContent) {
             // Revert to a trimmed version of the selector if need be.
             this._selectorElement.textContent = newContent;
-            return this._moveEditorFromSelector(moveDirection);
+            this._moveEditorFromSelector(moveDirection);
+            return;
         }
 
         var selectedNode = this._parentPane.node;
 
+        /**
+         * @param {!WebInspector.CSSRule} newRule
+         * @this {WebInspector.StylePropertiesSection}
+         */
         function successCallback(newRule)
         {
             var doesAffectSelectedNode = newRule.matchingSelectors.length > 0;
@@ -1493,6 +1458,9 @@
             finishOperationAndMoveEditor.call(this, moveDirection);
         }
 
+        /**
+         * @this {WebInspector.StylePropertiesSection}
+         */
         function finishOperationAndMoveEditor(direction)
         {
             delete this._parentPane._userOperation;
@@ -1537,8 +1505,32 @@
 WebInspector.ComputedStylePropertiesSection = function(stylesPane, styleRule, usedProperties)
 {
     WebInspector.PropertiesSection.call(this, "");
-    this.headerElement.classList.add("hidden");
+
+    var showInheritedCheckbox = new WebInspector.Checkbox(WebInspector.UIString("Show inherited properties"), "sidebar-pane-subtitle");
+    this.headerElement.appendChild(showInheritedCheckbox.element);
+    this._hasFreshContent = false;
+
+    /**
+     * @this {WebInspector.ComputedStylePropertiesSection}
+     */
+    function showInheritedToggleFunction()
+    {
+        var showInherited = showInheritedCheckbox.checked;
+        WebInspector.settings.showInheritedComputedStyleProperties.set(showInherited);
+        if (showInherited)
+            this.element.classList.add("styles-show-inherited");
+        else
+            this.element.classList.remove("styles-show-inherited");
+    }
+
+    showInheritedCheckbox.addEventListener(showInheritedToggleFunction.bind(this));
+
     this.element.className = "styles-section monospace read-only computed-style";
+    if (WebInspector.settings.showInheritedComputedStyleProperties.get()) {
+        this.element.classList.add("styles-show-inherited");
+        showInheritedCheckbox.checked = true;
+    }
+
     this._stylesPane = stylesPane;
     this.styleRule = styleRule;
     this._usedProperties = usedProperties;
@@ -1678,6 +1670,10 @@
             return;
         }
 
+        /**
+         * @param {!WebInspector.CSSRule} newRule
+         * @this {WebInspector.StylePropertiesSection}
+         */
         function successCallback(newRule)
         {
             var doesSelectorAffectSelectedNode = newRule.matchingSelectors.length > 0;
@@ -1776,6 +1772,9 @@
         return this._inherited;
     },
 
+    /**
+     * @return {boolean}
+     */
     hasIgnorableError: function()
     {
         return !this.parsedOk && WebInspector.StylesSidebarPane._ignoreErrorsForProperty(this.property);
@@ -1904,6 +1903,7 @@
         /**
          * @param {string} url
          * @return {!Node}
+         * @this {WebInspector.StylePropertyTreeElementBase}
          */
         function linkifyURL(url)
         {
@@ -1917,9 +1917,9 @@
                 hrefUrl = WebInspector.ParsedURL.completeURL(this._styleRule.sourceURL, hrefUrl);
             else if (this.node())
                 hrefUrl = this.node().resolveURL(hrefUrl);
-            var hasResource = !!WebInspector.resourceForURL(hrefUrl);
+            var hasResource = hrefUrl && !!WebInspector.resourceForURL(hrefUrl);
             // FIXME: WebInspector.linkifyURLAsNode() should really use baseURI.
-            container.appendChild(WebInspector.linkifyURLAsNode(hrefUrl, url, undefined, !hasResource));
+            container.appendChild(WebInspector.linkifyURLAsNode(hrefUrl || url, url, undefined, !hasResource));
             container.appendChild(document.createTextNode(")"));
             return container;
         }
@@ -1975,7 +1975,8 @@
         var spectrumHelper = this.editablePane() && this.editablePane()._spectrumHelper;
         var spectrum = spectrumHelper ? spectrumHelper.spectrum() : null;
 
-        var colorSwatch = new WebInspector.ColorSwatch();
+        var isEditable = !!(this._styleRule && this._styleRule.editable !== false); // |editable| is true by default.
+        var colorSwatch = new WebInspector.ColorSwatch(!isEditable);
         colorSwatch.setColorString(text);
         colorSwatch.element.addEventListener("click", swatchClick.bind(this), false);
 
@@ -1983,6 +1984,10 @@
         var boundSpectrumChanged = spectrumChanged.bind(this);
         var boundSpectrumHidden = spectrumHidden.bind(this);
 
+        /**
+         * @param {!WebInspector.Event} e
+         * @this {WebInspector.StylePropertyTreeElementBase}
+         */
         function spectrumChanged(e)
         {
             var colorString = /** @type {string} */ (e.data);
@@ -1992,6 +1997,10 @@
             this.applyStyleText(nameElement.textContent + ": " + valueElement.textContent, false, false, false);
         }
 
+        /**
+         * @param {!WebInspector.Event} event
+         * @this {WebInspector.StylePropertyTreeElementBase}
+         */
         function spectrumHidden(event)
         {
             if (scrollerElement)
@@ -2011,35 +2020,46 @@
             spectrumHelper.reposition(colorSwatch.element);
         }
 
+        /**
+         * @param {?Event} e
+         * @this {WebInspector.StylePropertyTreeElementBase}
+         */
         function swatchClick(e)
         {
+            e.consume(true);
+
             // Shift + click toggles color formats.
             // Click opens colorpicker, only if the element is not in computed styles section.
             if (!spectrumHelper || e.shiftKey) {
-                changeColorDisplay(e);
-            } else {
-                var visible = spectrumHelper.toggle(colorSwatch.element, color, format);
-
-                if (visible) {
-                    spectrum.displayText = color.toString(format);
-                    this.originalPropertyText = this.property.propertyText;
-                    this.editablePane()._isEditingStyle = true;
-                    spectrum.addEventListener(WebInspector.Spectrum.Events.ColorChanged, boundSpectrumChanged);
-                    spectrumHelper.addEventListener(WebInspector.SpectrumPopupHelper.Events.Hidden, boundSpectrumHidden);
-
-                    scrollerElement = colorSwatch.element.enclosingNodeOrSelfWithClass("scroll-target");
-                    if (scrollerElement)
-                        scrollerElement.addEventListener("scroll", repositionSpectrum, false);
-                    else
-                        console.error("Unable to handle color picker scrolling");
-                }
+                changeColorDisplay();
+                return;
             }
-            e.consume(true);
+
+            if (!isEditable)
+                return;
+
+            var visible = spectrumHelper.toggle(colorSwatch.element, color, format);
+            if (visible) {
+                spectrum.displayText = color.toString(format);
+                this.originalPropertyText = this.property.propertyText;
+                this.editablePane()._isEditingStyle = true;
+                spectrum.addEventListener(WebInspector.Spectrum.Events.ColorChanged, boundSpectrumChanged);
+                spectrumHelper.addEventListener(WebInspector.SpectrumPopupHelper.Events.Hidden, boundSpectrumHidden);
+
+                scrollerElement = colorSwatch.element.enclosingNodeOrSelfWithClass("scroll-target");
+                if (scrollerElement)
+                    scrollerElement.addEventListener("scroll", repositionSpectrum, false);
+                else
+                    console.error("Unable to handle color picker scrolling");
+            }
         }
 
         var colorValueElement = document.createElement("span");
         colorValueElement.textContent = color.toString(format);
 
+        /**
+         * @param {string} curFormat
+         */
         function nextFormat(curFormat)
         {
             // The format loop is as follows:
@@ -2086,7 +2106,7 @@
             }
         }
 
-        function changeColorDisplay(event)
+        function changeColorDisplay()
         {
             do {
                 format = nextFormat(format);
@@ -2213,6 +2233,9 @@
         return this.treeOutline && this.treeOutline.section;
     },
 
+    /**
+     * @param {function()=} userCallback
+     */
     _updatePane: function(userCallback)
     {
         var section = this.section();
@@ -2231,6 +2254,10 @@
     {
         var disabled = !event.target.checked;
 
+        /**
+         * @param {?WebInspector.CSSStyleDeclaration} newStyle
+         * @this {WebInspector.StylePropertyTreeElement}
+         */
         function callback(newStyle)
         {
             if (!newStyle)
@@ -2263,11 +2290,13 @@
         var longhandProperties = this.style.longhandProperties(this.name);
         for (var i = 0; i < longhandProperties.length; ++i) {
             var name = longhandProperties[i].name;
+            var inherited = false;
+            var overloaded = false;
 
             var section = this.section();
             if (section) {
-                var inherited = section.isPropertyInherited(name);
-                var overloaded = section.isPropertyOverloaded(name);
+                inherited = section.isPropertyInherited(name);
+                overloaded = section.isPropertyOverloaded(name);
             }
 
             var liveProperty = this.style.getLiveProperty(name);
@@ -2353,11 +2382,7 @@
     {
         console.assert(this.section().navigable);
         var propertyNameClicked = element === this.nameElement;
-        var uiLocation = this.property.uiLocation(propertyNameClicked);
-        if (!uiLocation)
-            return;
-
-        WebInspector.panel("sources").showUILocation(uiLocation);
+        WebInspector.Revealer.reveal(this.property.uiLocation(propertyNameClicked));
     },
 
     /**
@@ -2438,6 +2463,9 @@
             selectElement.parentElement.classList.add("child-editing");
         selectElement.textContent = selectElement.textContent; // remove color swatch and the like
 
+        /**
+         * @this {WebInspector.StylePropertyTreeElement}
+         */
         function pasteHandler(context, event)
         {
             var data = event.clipboardData.getData("Text");
@@ -2465,6 +2493,9 @@
             this.editingCommitted(event.target.textContent, context, "forward");
         }
 
+        /**
+         * @this {WebInspector.StylePropertyTreeElement}
+         */
         function blurListener(context, event)
         {
             var treeElement = this._parentPane._mouseDownTreeElement;
@@ -2494,7 +2525,7 @@
 
         proxyElement.addEventListener("keydown", this.editingNameValueKeyDown.bind(this, context), false);
         if (isEditingName)
-            proxyElement.addEventListener("paste", pasteHandler.bind(this, context));
+            proxyElement.addEventListener("paste", pasteHandler.bind(this, context), false);
 
         window.getSelection().setBaseAndExtent(selectElement, 0, selectElement, 1);
     },
@@ -2568,6 +2599,9 @@
         if (this._applyFreeFlowStyleTextEditTimer)
             clearTimeout(this._applyFreeFlowStyleTextEditTimer);
 
+        /**
+         * @this {WebInspector.StylePropertyTreeElement}
+         */
         function apply()
         {
             var valueText = this.valueElement.textContent;
@@ -2689,7 +2723,10 @@
             moveToNextCallback.call(this, this._newProperty, false, section);
         }
 
-        // The Callback to start editing the next/previous property/selector.
+        /**
+         * The Callback to start editing the next/previous property/selector.
+         * @this {WebInspector.StylePropertyTreeElement}
+         */
         function moveToNextCallback(alreadyNew, valueChanged, section)
         {
             if (!moveDirection)
@@ -2800,6 +2837,12 @@
         if (updateInterface)
             this._parentPane._userOperation = true;
 
+        /**
+         * @param {function()} userCallback
+         * @param {string} originalPropertyText
+         * @param {?WebInspector.CSSStyleDeclaration} newStyle
+         * @this {WebInspector.StylePropertyTreeElement}
+         */
         function callback(userCallback, originalPropertyText, newStyle)
         {
             if (!newStyle) {
@@ -2837,11 +2880,18 @@
         this.property.setText(styleText, majorChange, overwriteProperty, callback.bind(this, userOperationFinishedCallback.bind(null, this._parentPane, updateInterface), this.originalPropertyText));
     },
 
+    /**
+     * @return {boolean}
+     */
     ondblclick: function()
     {
         return true; // handled
     },
 
+    /**
+     * @param {?Event} event
+     * @return {boolean}
+     */
     isEventWithinDisclosureTriangle: function(event)
     {
         return event.target === this._expandElement;
@@ -2871,6 +2921,10 @@
 }
 
 WebInspector.StylesSidebarPane.CSSPropertyPrompt.prototype = {
+    /**
+     * @param {?Event} event
+     * @return {boolean}
+     */
     onKeyDown: function(event)
     {
         switch (event.keyIdentifier) {
@@ -2880,18 +2934,18 @@
         case "PageDown":
             if (this._handleNameOrValueUpDown(event)) {
                 event.preventDefault();
-                return;
+                return true;
             }
             break;
         case "Enter":
             if (this.autoCompleteElement && !this.autoCompleteElement.textContent.length) {
                 this.tabKeyPressed();
-                return;
+                return true;
             }
             break;
         }
 
-        WebInspector.TextPrompt.prototype.onKeyDown.call(this, event);
+        return WebInspector.TextPrompt.prototype.onKeyDown.call(this, event);
     },
 
     onMouseWheel: function(event)
@@ -2903,7 +2957,10 @@
         WebInspector.TextPrompt.prototype.onMouseWheel.call(this, event);
     },
 
-    /** @override */
+    /**
+     * @override
+     * @return {boolean}
+     */
     tabKeyPressed: function()
     {
         this.acceptAutoComplete();
@@ -2914,9 +2971,15 @@
 
     /**
      * @param {?Event} event
+     * @return {boolean}
      */
     _handleNameOrValueUpDown: function(event)
     {
+        /**
+         * @param {string} originalValue
+         * @param {string} replacementString
+         * @this {WebInspector.StylesSidebarPane.CSSPropertyPrompt}
+         */
         function finishHandler(originalValue, replacementString)
         {
             // Synthesize property text disregarding any comments, custom whitespace etc.
diff --git a/Source/devtools/front_end/StylesSourceMapping.js b/Source/devtools/front_end/StylesSourceMapping.js
index 0b39267..3417068 100644
--- a/Source/devtools/front_end/StylesSourceMapping.js
+++ b/Source/devtools/front_end/StylesSourceMapping.js
@@ -221,6 +221,11 @@
         }
 
         this._isSettingContent = true;
+
+        /**
+         * @param {?Protocol.Error} error
+         * @this {WebInspector.StylesSourceMapping}
+         */
         function callback(error)
         {
             userCallback(error);
@@ -266,39 +271,28 @@
             delete this._updateStyleSheetTextTimer;
         }
 
-        CSSAgent.getStyleSheetText(styleSheetId, callback.bind(this));
-
-        /**
-         * @param {?string} error
-         * @param {string} content
-         */
-        function callback(error, content)
-        {
-            if (!error)
-                this._innerStyleSheetChanged(styleSheetId, content);
-        }
-    },
-
-    /**
-     * @param {!CSSAgent.StyleSheetId} styleSheetId
-     * @param {string} content
-     */
-    _innerStyleSheetChanged: function(styleSheetId, content)
-    {
         var header = this._cssModel.styleSheetHeaderForId(styleSheetId);
         if (!header)
             return;
         var styleSheetURL = header.resourceURL();
         if (!styleSheetURL)
             return;
-
         var uiSourceCode = this._workspace.uiSourceCodeForURL(styleSheetURL)
         if (!uiSourceCode)
             return;
+        header.requestContent(callback.bind(this, uiSourceCode));
 
-        var styleFile = this._styleFiles.get(uiSourceCode);
-        if (styleFile)
-            styleFile.addRevision(content);
+        /**
+         * @param {!WebInspector.UISourceCode} uiSourceCode
+         * @param {?string} content
+         * @this {WebInspector.StylesSourceMapping}
+         */
+        function callback(uiSourceCode, content)
+        {
+            var styleFile = this._styleFiles.get(uiSourceCode);
+            if (styleFile)
+                styleFile.addRevision(content || "");
+        }
     }
 }
 
@@ -317,8 +311,6 @@
 
 WebInspector.StyleFile.updateTimeout = 200;
 
-WebInspector.StyleFile.sourceURLRegex = /\n[\040\t]*\/\*#[\040\t]sourceURL=[\040\t]*([^\s]*)[\040\t]*\*\/[\040\t]*$/m;
-
 WebInspector.StyleFile.prototype = {
     _workingCopyCommitted: function(event)
     {
@@ -372,8 +364,6 @@
     addRevision: function(content)
     {
         this._isAddingRevision = true;
-        if (this._uiSourceCode.project().type() === WebInspector.projectTypes.FileSystem)
-            content = content.replace(WebInspector.StyleFile.sourceURLRegex, "");
         this._uiSourceCode.addRevision(content);
         delete this._isAddingRevision;
     },
diff --git a/Source/devtools/front_end/SuggestBox.js b/Source/devtools/front_end/SuggestBox.js
index a9f3c60..567bb54 100644
--- a/Source/devtools/front_end/SuggestBox.js
+++ b/Source/devtools/front_end/SuggestBox.js
@@ -112,6 +112,12 @@
         this._anchorBox = anchorBox;
         anchorBox = anchorBox || this._anchorElement.boxInWindow(window);
 
+        // Position relative to main DevTools element.
+        var container = WebInspector.inspectorView.devtoolsElement();
+        anchorBox = anchorBox.relativeToElement(container);
+        var totalWidth = container.offsetWidth;
+        var totalHeight = container.offsetHeight;
+
         // Measure the content element box.
         this.contentElement.style.display = "inline-block";
         document.body.appendChild(this.contentElement);
@@ -125,20 +131,20 @@
         const suggestBoxPaddingX = 21;
         const suggestBoxPaddingY = 2;
 
-        var maxWidth = document.body.offsetWidth - anchorBox.x - spacer;
+        var maxWidth = totalWidth - anchorBox.x - spacer;
         var width = Math.min(contentWidth, maxWidth - suggestBoxPaddingX) + suggestBoxPaddingX;
         var paddedWidth = contentWidth + suggestBoxPaddingX;
         var boxX = anchorBox.x;
         if (width < paddedWidth) {
-            // Shift the suggest box to the left to accommodate the content without trimming to the BODY edge.
-            maxWidth = document.body.offsetWidth - spacer;
+            // Shift the suggest box to the left to accommodate the content without trimming to the container edge.
+            maxWidth = totalWidth - spacer;
             width = Math.min(contentWidth, maxWidth - suggestBoxPaddingX) + suggestBoxPaddingX;
-            boxX = document.body.offsetWidth - width;
+            boxX = totalWidth - width;
         }
 
         var boxY;
         var aboveHeight = anchorBox.y;
-        var underHeight = document.body.offsetHeight - anchorBox.y - anchorBox.height;
+        var underHeight = totalHeight - anchorBox.y - anchorBox.height;
 
         var maxHeight = this._maxItemsHeight ? contentHeight * this._maxItemsHeight / this._length : Math.max(underHeight, aboveHeight) - spacer;
         var height = Math.min(contentHeight, maxHeight - suggestBoxPaddingY) + suggestBoxPaddingY;
@@ -154,7 +160,7 @@
             this._element.classList.add("above-anchor");
         }
 
-        this._element.positionAt(boxX, boxY);
+        this._element.positionAt(boxX, boxY, container);
         this._element.style.width = width + "px";
         this._element.style.height = height + "px";
     },
diff --git a/Source/devtools/front_end/TabbedEditorContainer.js b/Source/devtools/front_end/TabbedEditorContainer.js
index ac1393c..8969db7 100644
--- a/Source/devtools/front_end/TabbedEditorContainer.js
+++ b/Source/devtools/front_end/TabbedEditorContainer.js
@@ -111,6 +111,17 @@
     },
 
     /**
+     * @param {!WebInspector.UISourceCode} uiSourceCode
+     */
+    closeFile: function(uiSourceCode)
+    {
+        var tabId = this._tabIds.get(uiSourceCode);
+        if (!tabId)
+            return;
+        this._closeTabs([tabId]);
+    },
+
+    /**
      * @return {!Array.<!WebInspector.UISourceCode>}
      */
     historyUISourceCodes: function()
@@ -183,7 +194,8 @@
         this._currentView = this.visibleView;
         this._addScrollAndSelectionListeners();
 
-        this.dispatchEventToListeners(WebInspector.TabbedEditorContainer.Events.EditorSelected, this._currentFile);
+        var eventData = { currentFile: this._currentFile, userGesture: userGesture };
+        this.dispatchEventToListeners(WebInspector.TabbedEditorContainer.Events.EditorSelected, eventData);
     },
 
     /**
@@ -316,7 +328,11 @@
     _updateHistory: function()
     {
         var tabIds = this._tabbedPane.lastOpenedTabIds(WebInspector.TabbedEditorContainer.maximalPreviouslyViewedFilesCount);
-        
+
+        /**
+         * @param {string} tabId
+         * @this {WebInspector.TabbedEditorContainer}
+         */
         function tabIdToURI(tabId)
         {
             return this._files[tabId].uri();
@@ -535,9 +551,7 @@
         serializedHistoryItem.selectionRange = this.selectionRange;
         serializedHistoryItem.scrollLineNumber = this.scrollLineNumber;
         return serializedHistoryItem;
-    },
-
-    __proto__: WebInspector.Object.prototype
+    }
 }
 
 /**
@@ -694,9 +708,7 @@
         for (var i = 0; i < this._items.length; ++i)
             result.push(this._items[i].url);
         return result;
-    },
-
-    __proto__: WebInspector.Object.prototype
+    }
 }
 
 /**
diff --git a/Source/devtools/front_end/TabbedPane.js b/Source/devtools/front_end/TabbedPane.js
index e27c481..177ed48 100644
--- a/Source/devtools/front_end/TabbedPane.js
+++ b/Source/devtools/front_end/TabbedPane.js
@@ -94,11 +94,13 @@
     },
 
     /**
-     * @param {boolean} retainTabsOrder
+     * @param {boolean} retainTabOrder
+     * @param {function(string, string):number=} tabOrderComparator
      */
-    setRetainTabsOrder: function(retainTabsOrder)
+    setRetainTabOrder: function(retainTabOrder, tabOrderComparator)
     {
-        this._retainTabsOrder = retainTabsOrder;
+        this._retainTabOrder = retainTabOrder;
+        this._tabOrderComparator = tabOrderComparator;
     },
 
     /**
@@ -109,6 +111,14 @@
         return this.visibleView ? this.visibleView.defaultFocusedElement() : null;
     },
 
+    focus: function()
+    {
+        if (this.visibleView)
+            this.visibleView.focus();
+        else
+            WebInspector.View.prototype.focus.call(this);
+    },
+
     /**
      * @return {!Element}
      */
@@ -153,10 +163,25 @@
         tab.setDelegate(this._delegate);
         this._tabsById[id] = tab;
 
-        this._tabs.push(tab);
+        /**
+         * @param {!WebInspector.TabbedPaneTab} tab1
+         * @param {!WebInspector.TabbedPaneTab} tab2
+         * @this {WebInspector.TabbedPane}
+         * @return {number}
+         */
+        function comparator(tab1, tab2)
+        {
+            return this._tabOrderComparator(tab1.id, tab2.id);
+        }
+
+        if (this._retainTabOrder && this._tabOrderComparator)
+            this._tabs.splice(insertionIndexForObjectInListSortedByFunction(tab, this._tabs, comparator.bind(this)), 0, tab);
+        else
+            this._tabs.push(tab);
+
         this._tabsHistory.push(tab);
 
-        if (this._tabsHistory[0] === tab)
+        if (this._tabsHistory[0] === tab && this.isShowing())
             this.selectTab(tab.id, userGesture);
 
         this._updateTabElements();
@@ -269,7 +294,6 @@
 
         var eventData = { tabId: id, view: tab.view, isUserGesture: userGesture };
         this.dispatchEventToListeners(WebInspector.TabbedPane.EventTypes.TabSelected, eventData);
-        return true;
     },
 
     /**
@@ -341,6 +365,18 @@
         this._updateTabElements();
     },
 
+    headerResized: function()
+    {
+        this._updateTabElements();
+    },
+
+    wasShown: function()
+    {
+        var effectiveTab = this._currentTab || this._tabsHistory[0];
+        if (effectiveTab)
+            this.selectTab(effectiveTab.id);
+    },
+
     _updateTabElements: function()
     {
         WebInspector.invokeOnceAfterBatchUpdate(this, this._innerUpdateTabElements);
@@ -410,6 +446,7 @@
         dropDownButton.appendChild(document.createTextNode("\u00bb"));
         this._tabsSelect = dropDownButton.createChild("select", "tabbed-pane-header-tabs-drop-down-select");
         this._tabsSelect.addEventListener("change", this._tabsSelectChanged.bind(this), false);
+        this._tabsSelect.addEventListener("mousedown", consumeEvent, false);
         return dropDownContainer;
     },
 
@@ -452,7 +489,7 @@
         {
             return tab1.title.localeCompare(tab2.title);
         }
-        if (!this._retainTabsOrder)
+        if (!this._retainTabOrder)
             tabsToShow.sort(compareFunction);
 
         var selectedIndex = -1;
@@ -573,7 +610,7 @@
         var totalTabsWidth = 0;
         var tabCount = tabsOrdered.length;
         for (var i = 0; i < tabCount; ++i) {
-            var tab = this._retainTabsOrder ? tabsOrdered[i] : tabsHistory[i];
+            var tab = this._retainTabOrder ? tabsOrdered[i] : tabsHistory[i];
             totalTabsWidth += tab.width();
             var minimalRequiredWidth = totalTabsWidth;
             if (i !== tabCount - 1)
@@ -617,10 +654,11 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     canHighlightPosition: function()
     {
-        return this._currentTab && this._currentTab.view && this._currentTab.view.canHighlightPosition();
+        return !!(this._currentTab && this._currentTab.view && this._currentTab.view.canHighlightPosition());
     },
 
     /**
@@ -904,19 +942,28 @@
 
     _tabContextMenu: function(event)
     {
+        /**
+         * @this {WebInspector.TabbedPaneTab}
+         */
         function close()
         {
             this._closeTabs([this.id]);
         }
   
+        /**
+         * @this {WebInspector.TabbedPaneTab}
+         */
         function closeOthers()
         {
             this._closeTabs(this._tabbedPane.otherTabs(this.id));
         }
   
+        /**
+         * @this {WebInspector.TabbedPaneTab}
+         */
         function closeAll()
         {
-            this._closeTabs(this._tabbedPane.allTabs(this.id));
+            this._closeTabs(this._tabbedPane.allTabs());
         }
   
         var contextMenu = new WebInspector.ContextMenu(event);
diff --git a/Source/devtools/front_end/TempFile.js b/Source/devtools/front_end/TempFile.js
index 42b0583..2c2bcd4 100644
--- a/Source/devtools/front_end/TempFile.js
+++ b/Source/devtools/front_end/TempFile.js
@@ -41,24 +41,43 @@
     this._fileEntry = null;
     this._writer = null;
 
+    /**
+     * @param {!FileSystem} fs
+     * @this {WebInspector.TempFile}
+     */
     function didInitFs(fs)
     {
         fs.root.getDirectory(dirPath, { create: true }, didGetDir.bind(this), boundErrorHandler);
     }
 
+    /**
+     * @param {!DirectoryEntry} dir
+     * @this {WebInspector.TempFile}
+     */
     function didGetDir(dir)
     {
         dir.getFile(name, { create: true }, didCreateFile.bind(this), boundErrorHandler);
     }
 
+    /**
+     * @param {!FileEntry} fileEntry
+     * @this {WebInspector.TempFile}
+     */
     function didCreateFile(fileEntry)
     {
         this._fileEntry = fileEntry;
         fileEntry.createWriter(didCreateWriter.bind(this), boundErrorHandler);
     }
 
+    /**
+     * @param {!FileWriter} writer
+     * @this {WebInspector.TempFile}
+     */
     function didCreateWriter(writer)
     {
+        /**
+         * @this {WebInspector.TempFile}
+         */
         function didTruncate(e)
         {
             this._writer = writer;
@@ -88,43 +107,68 @@
                          WebInspector.ConsoleMessage.MessageLevel.Error);
         callback(null);
     }
+
     var boundErrorHandler = errorHandler.bind(this)
-    window.requestFileSystem(window.TEMPORARY, 10, didInitFs.bind(this), errorHandler.bind(this));
+    /**
+     * @this {WebInspector.TempFile}
+     */
+    function didClearTempStorage()
+    {
+        window.requestFileSystem(window.TEMPORARY, 10, didInitFs.bind(this), boundErrorHandler);
+    }
+    WebInspector.TempFile._ensureTempStorageCleared(didClearTempStorage.bind(this));
 }
 
 WebInspector.TempFile.prototype = {
     /**
      * @param {!string} data
+     * @param {!function(boolean)} callback
      */
-    write: function(data)
+    write: function(data, callback)
     {
         var blob = new Blob([data], {type: 'text/plain'});
         this._writer.onerror = function(e)
         {
             WebInspector.log("Failed to write into a temp file: " + e.message,
                              WebInspector.ConsoleMessage.MessageLevel.Error);
+            callback(false);
+        }
+        this._writer.onwrite = function(e)
+        {
+            callback(true);
         }
         this._writer.write(blob);
+    },
+
+    finishWriting: function()
+    {
         this._writer = null;
     },
 
     /**
-     * @param {!function(?string)} callback
+     * @param {function(?string)} callback
      */
     read: function(callback)
     {
+        /**
+         * @param {!File} file
+         * @this {WebInspector.TempFile}
+         */
         function didGetFile(file)
         {
             var reader = new FileReader();
+
+            /**
+             * @this {FileReader}
+             */
             reader.onloadend = function(e)
             {
-                callback(this.result);
+                callback(/** @type {?string} */ (this.result));
             }
             reader.onerror = function(error)
             {
                 WebInspector.log("Failed to read from temp file: " + error.message,
                                  WebInspector.ConsoleMessage.MessageLevel.Error);
-                callback(null);
             }
             reader.readAsText(file);
         }
@@ -132,7 +176,190 @@
         {
             WebInspector.log("Failed to load temp file: " + error.message,
                               WebInspector.ConsoleMessage.MessageLevel.Error);
+            callback(null);
         }
         this._fileEntry.file(didGetFile.bind(this), didFailToGetFile.bind(this));
+    },
+
+    /**
+     * @param {!WebInspector.OutputStream} outputStream
+     * @param {!WebInspector.OutputStreamDelegate} delegate
+     */
+    writeToOutputSteam: function(outputStream, delegate)
+    {
+        /**
+         * @param {!File} file
+         * @this {WebInspector.TempFile}
+         */
+        function didGetFile(file)
+        {
+            var reader = new WebInspector.ChunkedFileReader(file, 10*1000*1000, delegate);
+            reader.start(outputStream);
+        }
+        function didFailToGetFile(error)
+        {
+            WebInspector.log("Failed to load temp file: " + error.message,
+                             WebInspector.ConsoleMessage.MessageLevel.Error);
+            outputStream.close();
+        }
+        this._fileEntry.file(didGetFile.bind(this), didFailToGetFile.bind(this));
+    },
+
+    remove: function()
+    {
+        if (this._fileEntry)
+            this._fileEntry.remove(function() {});
     }
 }
+
+/**
+ * @constructor
+ * @param {!string} dirPath
+ * @param {!string} name
+ */
+WebInspector.BufferedTempFileWriter = function(dirPath, name)
+{
+    this._chunks = [];
+    this._tempFile = null;
+    this._isWriting = false;
+    this._finishCallback = null;
+    this._isFinished = false;
+    new WebInspector.TempFile(dirPath, name, this._didCreateTempFile.bind(this));
+}
+
+WebInspector.BufferedTempFileWriter.prototype = {
+    /**
+     * @param {!string} data
+     */
+    write: function(data)
+    {
+        if (!this._chunks)
+            return;
+        if (this._finishCallback)
+            throw new Error("Now writes are allowed after close.");
+        this._chunks.push(data);
+        if (this._tempFile && !this._isWriting)
+            this._writeNextChunk();
+    },
+
+    /**
+     * @param {!function(?WebInspector.TempFile)} callback
+     */
+    close: function(callback)
+    {
+        this._finishCallback = callback;
+        if (this._isFinished)
+            callback(this._tempFile);
+        else if (!this._isWriting && !this._chunks.length)
+            this._notifyFinished();
+    },
+
+    _didCreateTempFile: function(tempFile)
+    {
+        this._tempFile = tempFile;
+        if (!tempFile) {
+            this._chunks = null;
+            this._notifyFinished();
+            return;
+        }
+        if (this._chunks.length)
+            this._writeNextChunk();
+    },
+
+    _writeNextChunk: function()
+    {
+        var chunkSize = 0;
+        var endIndex = 0;
+        for (; endIndex < this._chunks.length; endIndex++) {
+            chunkSize += this._chunks[endIndex].length;
+            if (chunkSize > 10 * 1000 * 1000)
+                break;
+        }
+        var chunk = this._chunks.slice(0, endIndex + 1).join("");
+        this._chunks.splice(0, endIndex + 1);
+        this._isWriting = true;
+        this._tempFile.write(chunk, this._didWriteChunk.bind(this));
+    },
+
+    _didWriteChunk: function(success)
+    {
+        this._isWriting = false;
+        if (!success) {
+            this._tempFile = null;
+            this._chunks = null;
+            this._notifyFinished();
+            return;
+        }
+        if (this._chunks.length)
+            this._writeNextChunk();
+        else if (this._finishCallback)
+            this._notifyFinished();
+    },
+
+    _notifyFinished: function()
+    {
+        this._isFinished = true;
+        if (this._tempFile)
+            this._tempFile.finishWriting();
+        if (this._finishCallback)
+            this._finishCallback(this._tempFile);
+    }
+}
+
+/**
+ * @constructor
+ */
+WebInspector.TempStorageCleaner = function()
+{
+    this._worker = new SharedWorker("TempStorageSharedWorker.js", "TempStorage");
+    this._callbacks = [];
+    this._worker.port.onmessage = this._handleMessage.bind(this);
+    this._worker.port.onerror = this._handleError.bind(this);
+}
+
+WebInspector.TempStorageCleaner.prototype = {
+    /**
+     * @param {!function()} callback
+     */
+    ensureStorageCleared: function(callback)
+    {
+        if (this._callbacks)
+            this._callbacks.push(callback);
+        else
+            callback();
+    },
+
+    _handleMessage: function(event)
+    {
+        if (event.data.type === "tempStorageCleared") {
+            if (event.data.error)
+                WebInspector.log(event.data.error, WebInspector.ConsoleMessage.MessageLevel.Error);
+            this._notifyCallbacks();
+        }
+    },
+
+    _handleError: function(event)
+    {
+        WebInspector.log(WebInspector.UIString("Failed to clear temp storage: %s", event.data),
+                         WebInspector.ConsoleMessage.MessageLevel.Error);
+        this._notifyCallbacks();
+    },
+
+    _notifyCallbacks: function()
+    {
+        var callbacks = this._callbacks;
+        this._callbacks = null;
+        for (var i = 0; i < callbacks.length; i++)
+            callbacks[i]();
+    }
+}
+
+/**
+ * @param {!function()} callback
+ */
+WebInspector.TempFile._ensureTempStorageCleared = function(callback)
+{
+    if (!WebInspector.TempFile._storageCleaner)
+        WebInspector.TempFile._storageCleaner = new WebInspector.TempStorageCleaner();
+    WebInspector.TempFile._storageCleaner.ensureStorageCleared(callback);
+}
diff --git a/Source/devtools/front_end/TempStorageSharedWorker.js b/Source/devtools/front_end/TempStorageSharedWorker.js
new file mode 100644
index 0000000..beda631
--- /dev/null
+++ b/Source/devtools/front_end/TempStorageSharedWorker.js
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+var ports = [];
+var isTempStorageCleared = false;
+/**
+ * @type {string}
+ */
+var tempStorageError;
+
+/**
+ * @param {!MessageEvent} event
+ */
+self.onconnect = function(event)
+{
+    var newPort = /** @type {!MessagePort} */ (event.ports[0]);
+    if (isTempStorageCleared) {
+        notifyTempStorageCleared(newPort);
+        return;
+    }
+
+    newPort.onmessage = handleMessage;
+    newPort.onerror = handleError;
+    ports.push(newPort);
+
+    if (ports.length === 1)
+        clearTempStorage();
+}
+
+function clearTempStorage()
+{
+    function didFail(e)
+    {
+        tempStorageError = "Failed to clear temp storage: " + e.message + " " + e.name;
+        console.error(tempStorageError);
+        didClearTempStorage();
+    }
+    /**
+     * @param {!FileSystem} fs
+     */
+    function didGetFS(fs)
+    {
+        fs.root.createReader().readEntries(didReadEntries, didFail);
+    }
+    /**
+     * @param {!Array.<!Entry>} entries
+     */
+    function didReadEntries(entries)
+    {
+        var remainingEntries = entries.length;
+        if (!remainingEntries) {
+            didClearTempStorage();
+            return;
+        }
+        function didDeleteEntry()
+        {
+            if (!--remainingEntries)
+                didClearTempStorage();
+        }
+        function failedToDeleteEntry(e)
+        {
+            tempStorageError = "Failed to delete entry: " + e.message + " " + e.name;
+            console.error(tempStorageError);
+            didDeleteEntry();
+        }
+        for (var i = 0; i < entries.length; i++) {
+            var entry = entries[i];
+            if (entry.isFile)
+                entry.remove(didDeleteEntry, failedToDeleteEntry);
+            else
+                entry.removeRecursively(didDeleteEntry, failedToDeleteEntry);
+        }
+    }
+    self.webkitRequestFileSystem(self.TEMPORARY, 10, didGetFS, didFail);
+}
+
+function didClearTempStorage()
+{
+  isTempStorageCleared = true;
+  for (var i = 0; i < ports.length; i++)
+      notifyTempStorageCleared(ports[i]);
+  ports = null;
+}
+
+/**
+ * @param {!MessagePort} port
+ */
+function notifyTempStorageCleared(port)
+{
+    port.postMessage({
+        type: "tempStorageCleared",
+        error: tempStorageError
+    });
+}
+
+function handleMessage(event)
+{
+    if (event.data.type === "disconnect")
+        removePort(event.target);
+}
+
+function handleError(event)
+{
+    console.error("Error: " + event.data);
+    removePort(event.target);
+}
+
+function removePort(port)
+{
+    if (!ports)
+        return;
+    var index = ports.indexOf(port);
+    ports.splice(index, 1);
+}
diff --git a/Source/devtools/front_end/Tests.js b/Source/devtools/front_end/Tests.js
index 745c6cc..fd7c873 100644
--- a/Source/devtools/front_end/Tests.js
+++ b/Source/devtools/front_end/Tests.js
@@ -611,6 +611,7 @@
 TestSuite.prototype.testPageOverlayUpdate = function()
 {
     var test = this;
+    WebInspector.panel("elements");
 
     function populatePage()
     {
@@ -628,12 +629,12 @@
     {
         test.evaluateInConsole_(populatePage.toString() + "; populatePage();" +
                                 "inspect(document.getElementById('div1'))", function() {});
-        WebInspector.notifications.addEventListener(WebInspector.ElementsTreeOutline.Events.SelectedNodeChanged, step2);
+        WebInspector.notifications.addEventListener(WebInspector.NotificationService.Events.SelectedNodeChanged, step2);
     }
 
     function step2()
     {
-        WebInspector.notifications.removeEventListener(WebInspector.ElementsTreeOutline.Events.SelectedNodeChanged, step2);
+        WebInspector.notifications.removeEventListener(WebInspector.NotificationService.Events.SelectedNodeChanged, step2);
         test.recordTimeline(onTimelineRecorded);
         setTimeout(step3, 500);
     }
@@ -641,12 +642,12 @@
     function step3()
     {
         test.evaluateInConsole_("inspect(document.getElementById('div2'))", function() {});
-        WebInspector.notifications.addEventListener(WebInspector.ElementsTreeOutline.Events.SelectedNodeChanged, step4);
+        WebInspector.notifications.addEventListener(WebInspector.NotificationService.Events.SelectedNodeChanged, step4);
     }
 
     function step4()
     {
-        WebInspector.notifications.removeEventListener(WebInspector.ElementsTreeOutline.Events.SelectedNodeChanged, step4);
+        WebInspector.notifications.removeEventListener(WebInspector.NotificationService.Events.SelectedNodeChanged, step4);
         test.stopTimeline();
     }
 
diff --git a/Source/devtools/front_end/TextEditor.js b/Source/devtools/front_end/TextEditor.js
index 756e5c5..7771e8a 100644
--- a/Source/devtools/front_end/TextEditor.js
+++ b/Source/devtools/front_end/TextEditor.js
@@ -275,6 +275,33 @@
      * @param {?WebInspector.CompletionDictionary} dictionary
      */
     setCompletionDictionary: function(dictionary) { },
+
+    /**
+     * @param {number} lineNumber
+     * @param {number} columnNumber
+     * @return {?WebInspector.TextEditorPositionHandle}
+     */
+    textEditorPositionHandle: function(lineNumber, columnNumber) { }
+}
+
+/**
+ * @interface
+ */
+WebInspector.TextEditorPositionHandle = function()
+{
+}
+
+WebInspector.TextEditorPositionHandle.prototype = {
+    /**
+     * @return {?{lineNumber: number, columnNumber: number}}
+     */
+    resolve: function() { },
+
+    /**
+     * @param {!WebInspector.TextEditorPositionHandle} positionHandle
+     * @return {boolean}
+     */
+    equal: function(positionHandle) { }
 }
 
 /**
@@ -320,5 +347,24 @@
      * @param {boolean} isExternal
      * @return {!Element}
      */
-    createLink: function(hrefValue, isExternal) { }
+    createLink: function(hrefValue, isExternal) { },
+
+    /**
+     * @param {?WebInspector.TextRange} from
+     * @param {?WebInspector.TextRange} to
+     */
+    onJumpToPosition: function(from, to) { }
 }
+
+/**
+ * @interface
+ */
+WebInspector.TokenizerFactory = function() { }
+
+WebInspector.TokenizerFactory.prototype = {
+    /**
+     * @param {string} mimeType
+     * @return {function(string, function(string, ?string, number, number))}
+     */
+    createTokenizer: function(mimeType) { }
+}
\ No newline at end of file
diff --git a/Source/devtools/front_end/TextPrompt.js b/Source/devtools/front_end/TextPrompt.js
index c7100d5..a9c4f3b 100644
--- a/Source/devtools/front_end/TextPrompt.js
+++ b/Source/devtools/front_end/TextPrompt.js
@@ -29,7 +29,7 @@
 
 /**
  * @constructor
- * @extends WebInspector.Object
+ * @extends {WebInspector.Object}
  * @implements {WebInspector.SuggestBoxDelegate}
  * @param {function(!Element, !Range, boolean, function(!Array.<string>, number=))} completions
  * @param {string=} stopCharacters
@@ -74,6 +74,7 @@
      * they should use the result of this method to attach listeners for bubbling events.
      *
      * @param {!Element} element
+     * @return {!Element}
      */
     attach: function(element)
     {
@@ -88,6 +89,7 @@
      *
      * @param {!Element} element
      * @param {function(!Event)} blurListener
+     * @return {!Element}
      */
     attachAndStartEditing: function(element, blurListener)
     {
@@ -98,6 +100,7 @@
 
     /**
      * @param {!Element} element
+     * @return {!Element}
      */
     _attachInternal: function(element)
     {
@@ -213,6 +216,9 @@
 
         this._removeSuggestionAids();
 
+        /**
+         * @this {WebInspector.TextPrompt}
+         */
         function moveBackIfOutside()
         {
             delete this._selectionTimeout;
@@ -254,6 +260,7 @@
 
     /**
      * @param {?Event} event
+     * @return {boolean}
      */
     onKeyDown: function(event)
     {
@@ -505,6 +512,7 @@
             finalSelectionRange.setEnd(prefixTextNode, wordPrefixLength);
             selection.removeAllRanges();
             selection.addRange(finalSelectionRange);
+            this.dispatchEventToListeners(WebInspector.TextPrompt.Events.ItemApplied);
         }
     },
 
@@ -860,6 +868,7 @@
 
     /**
      * @override
+     * @return {boolean}
      */
     defaultKeyHandler: function(event, force)
     {
diff --git a/Source/devtools/front_end/TextRange.js b/Source/devtools/front_end/TextRange.js
index 01b093e..b7b6c05 100644
--- a/Source/devtools/front_end/TextRange.js
+++ b/Source/devtools/front_end/TextRange.js
@@ -96,6 +96,9 @@
         return this.endLine - this.startLine;
     },
 
+    /**
+     * @return {!WebInspector.TextRange}
+     */
     collapseToEnd: function()
     {
         return new WebInspector.TextRange(this.endLine, this.endColumn, this.endLine, this.endColumn);
@@ -151,6 +154,16 @@
     },
 
     /**
+     * @param {!WebInspector.TextRange} other
+     * @return {boolean}
+     */
+    equal: function(other)
+    {
+        return this.startLine === other.startLine && this.endLine === other.endLine &&
+            this.startColumn === other.startColumn && this.endColumn === other.endColumn;
+    },
+
+    /**
      * @param {number} lineOffset
      * @return {!WebInspector.TextRange}
      */
@@ -159,6 +172,9 @@
         return new WebInspector.TextRange(this.startLine + lineOffset, this.startColumn, this.endLine + lineOffset, this.endColumn);
     },
 
+    /**
+     * @return {string}
+     */
     toString: function()
     {
         return JSON.stringify(this);
diff --git a/Source/devtools/front_end/TextUtils.js b/Source/devtools/front_end/TextUtils.js
index 917e91a..b89cf83 100644
--- a/Source/devtools/front_end/TextUtils.js
+++ b/Source/devtools/front_end/TextUtils.js
@@ -100,6 +100,10 @@
         return WebInspector.TextUtils.isOpeningBraceChar(char) || WebInspector.TextUtils.isClosingBraceChar(char);
     },
 
+    /**
+     * @param {string} text
+     * @return {!Array.<string>}
+     */
     textToWords: function(text)
     {
         var words = [];
@@ -116,6 +120,39 @@
             words.push(text.substring(startWord));
         return words;
     },
+
+    /**
+     * @param {string} source
+     * @param {number=} startIndex
+     * @param {number=} lastIndex
+     * @return {number}
+     */
+    findBalancedCurlyBrackets: function(source, startIndex, lastIndex) {
+        lastIndex = lastIndex || source.length;
+        startIndex = startIndex || 0;
+        var counter = 0;
+        var inString = false;
+
+        for (var index = startIndex; index < lastIndex; ++index) {
+            var character = source[index];
+            if (inString) {
+                if (character === "\\")
+                    ++index;
+                else if (character === "\"")
+                    inString = false;
+            } else {
+                if (character === "\"")
+                    inString = true;
+                else if (character === "{")
+                    ++counter;
+                else if (character === "}") {
+                    if (--counter === 0)
+                        return index + 1;
+                }
+            }
+        }
+        return -1;
+    }
 }
 
 WebInspector.TextUtils._SpaceCharRegex = /\s/;
diff --git a/Source/devtools/front_end/ThreadsToolbar.js b/Source/devtools/front_end/ThreadsToolbar.js
new file mode 100644
index 0000000..0473543
--- /dev/null
+++ b/Source/devtools/front_end/ThreadsToolbar.js
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+/**
+ * @constructor
+ */
+WebInspector.ThreadsToolbar = function()
+{
+    this.element = document.createElement("div");
+    this.element.className = "status-bar scripts-debug-toolbar threads-toolbar hidden";
+    this._comboBox = new WebInspector.StatusBarComboBox(this._onComboBoxSelectionChange.bind(this));
+    this.element.appendChild(this._comboBox.element);
+
+    this._reset();
+    if (WebInspector.experimentsSettings.workersInMainWindow.isEnabled()) {
+        WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerAdded, this._workerAdded, this);
+        WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerRemoved, this._workerRemoved, this);
+        WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkersCleared, this._workersCleared, this);
+    }
+}
+
+WebInspector.ThreadsToolbar.prototype = {
+
+    _reset: function()
+    {
+        this._threadIdToOption = {};
+
+        var connectedThreads = WebInspector.workerManager.threadsList();
+        for (var i = 0; i < connectedThreads.length; ++i)  {
+            var threadId = connectedThreads[i];
+            this._addOption(threadId, WebInspector.workerManager.threadUrl(threadId));
+        }
+
+        this._alterVisibility();
+        this._comboBox.select(this._threadIdToOption[WebInspector.workerManager.selectedThreadId()]);
+    },
+
+    /**
+     * @param {number} workerId
+     * @param {string} url
+     */
+    _addOption: function(workerId, url)
+    {
+        var option = this._comboBox.createOption(url, "", String(workerId));
+        this._threadIdToOption[workerId] = option;
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _workerAdded: function(event)
+    {
+        var data = /** @type {{workerId: number, url: string}} */ (event.data);
+        this._addOption(data.workerId, data.url);
+        this._alterVisibility();
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _workerRemoved: function(event)
+    {
+        var data = /** @type {{workerId: number, url: string}} */ (event.data);
+        this._comboBox.removeOption(this._threadIdToOption[data.workerId]);
+        delete this._threadIdToOption[data.workerId];
+        this._alterVisibility();
+    },
+
+    _workersCleared: function()
+    {
+        this._comboBox.removeOptions();
+        this._reset();
+    },
+
+    _onComboBoxSelectionChange: function()
+    {
+        var selectedOption = this._comboBox.selectedOption();
+        if (!selectedOption)
+            return;
+
+        WebInspector.workerManager.setSelectedThreadId(parseInt(selectedOption.value, 10));
+    },
+
+    _alterVisibility: function()
+    {
+        var hidden = this._comboBox.size() === 1;
+        this.element.enableStyleClass("hidden", hidden);
+    }
+
+}
diff --git a/Source/devtools/front_end/TimelineEventOverview.js b/Source/devtools/front_end/TimelineEventOverview.js
index f7dec86..f75e474 100644
--- a/Source/devtools/front_end/TimelineEventOverview.js
+++ b/Source/devtools/front_end/TimelineEventOverview.js
@@ -74,6 +74,9 @@
         for (var i = 1; i < WebInspector.TimelineEventOverview._numberOfStrips; i += 2)
             this._context.fillRect(0.5, i * stripHeight + 0.5, this._canvas.width, stripHeight);
 
+        /**
+         * @this {WebInspector.TimelineEventOverview}
+         */
         function appendRecord(record)
         {
             if (record.type === WebInspector.TimelineModel.RecordType.BeginFrame)
diff --git a/Source/devtools/front_end/TimelineFlameChart.js b/Source/devtools/front_end/TimelineFlameChart.js
new file mode 100644
index 0000000..3484297
--- /dev/null
+++ b/Source/devtools/front_end/TimelineFlameChart.js
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+/**
+ * @constructor
+ * @implements {WebInspector.FlameChartDataProvider}
+ * @param {!WebInspector.TimelineModel} model
+ * @param {!WebInspector.FlameChart.ColorGenerator} colorGenerator
+ * @param {boolean} mainThread
+ */
+WebInspector.TimelineFlameChartDataProvider = function(model, colorGenerator, mainThread)
+{
+    WebInspector.FlameChartDataProvider.call(this);
+    this._model = model;
+    this._mainThread = mainThread;
+    this._colorGenerator = colorGenerator;
+    this._model.addEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._invalidate, this);
+}
+
+WebInspector.TimelineFlameChartDataProvider.prototype = {
+    reset: function()
+    {
+        this._invalidate();
+    },
+
+    _invalidate: function()
+    {
+        this._timelineData = null;
+    },
+
+    /**
+     * @return {!WebInspector.FlameChart.ColorGenerator}
+     */
+    colorGenerator: function()
+    {
+        return this._colorGenerator;
+    },
+
+    /**
+     * @return {!WebInspector.FlameChart.TimelineData}
+     */
+    timelineData: function()
+    {
+        if (!this._timelineData) {
+            this._resetData();
+            WebInspector.TimelinePresentationModel.forAllRecords(this._model.records, this._appendRecord.bind(this));
+        }
+        return this._timelineData;
+    },
+
+    _resetData: function()
+    {
+        this._startTime = 0;
+        this._endTime = 0;
+        this._timelineData = {
+            maxStackDepth: 5,
+            totalTime: 1000,
+            entryLevels: [],
+            entryTotalTimes: [],
+            entrySelfTimes: [],
+            entryOffsets: [],
+            colorEntryIndexes: [],
+            entryTitles: [],
+            entryDeoptFlags: []
+        };
+    },
+
+    _appendRecord: function(record, depth)
+    {
+        var timelineData = this._timelineData;
+
+        this._startTime = this._startTime ? Math.min(this._startTime, record.startTime) : record.startTime;
+        var startTime = this._startTime;
+        var endTime = record.endTime || record.startTime - startTime;
+        this._endTime = Math.max(this._endTime, endTime);
+        timelineData.totalTime = Math.max(1000, this._endTime - this._startTime);
+
+        if (this._mainThread) {
+            if (record.type === WebInspector.TimelineModel.RecordType.GPUTask || !!record.thread)
+                return;
+        } else {
+            if (record.type === WebInspector.TimelineModel.RecordType.Program || !record.thread)
+                return;
+        }
+
+        var index = timelineData.entryTitles.length;
+        timelineData.entryTitles[index] = record.type;
+        timelineData.entryOffsets[index] = record.startTime - startTime;
+        timelineData.entryLevels[index] = depth - 1;
+        timelineData.entryTotalTimes[index] = endTime - record.startTime;
+        timelineData.entryDeoptFlags[index] = 0;
+
+        var colorPair = this._colorGenerator.colorPairForID(WebInspector.TimelinePresentationModel.categoryForRecord(record).name);
+        var indexesForColor = timelineData.colorEntryIndexes[colorPair.index];
+        if (!indexesForColor)
+            indexesForColor = timelineData.colorEntryIndexes[colorPair.index] = [];
+        indexesForColor.push(index);
+
+        timelineData.maxStackDepth = Math.max(timelineData.maxStackDepth, depth + 1);
+    },
+
+    /**
+     * @param {number} entryIndex
+     * @return {?Array.<!{title: string, text: string}>}
+     */
+    prepareHighlightedEntryInfo: function(entryIndex)
+    {
+        return null;
+    },
+
+    /**
+     * @param {number} entryIndex
+     * @return {boolean}
+     */
+    canJumpToEntry: function(entryIndex)
+    {
+        return false;
+    },
+
+    /**
+     * @param {number} entryIndex
+     * @return {?Object}
+     */
+    entryData: function(entryIndex)
+    {
+        return null;
+    }
+}
+
+/**
+ * @constructor
+ * @extends {WebInspector.View}
+ * @param {!WebInspector.TimelinePanel} panel
+ * @param {!WebInspector.TimelineModel} model
+ * @param {!WebInspector.FlameChartDataProvider} dataProvider
+ */
+WebInspector.TimelineFlameChart = function(panel, model, dataProvider)
+{
+    WebInspector.View.call(this);
+    this._panel = panel;
+    this._model = model;
+    this._dataProvider = dataProvider;
+    this._mainView = new WebInspector.FlameChart.MainPane(dataProvider, null, true);
+    this._mainView.show(this.element);
+    this._model.addEventListener(WebInspector.TimelineModel.Events.RecordingStarted, this._onRecordingStarted, this);
+    this._model.addEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._onRecordAdded, this);
+}
+
+/**
+ * @param {!Object.<string, !CanvasGradient>} fillStyles
+ */
+WebInspector.TimelineFlameChart.colorGenerator = function(fillStyles)
+{
+    if (!WebInspector.TimelineFlameChart._colorGenerator) {
+        var colorGenerator = new WebInspector.FlameChart.ColorGenerator();
+        for (var category in fillStyles) {
+            if (fillStyles.hasOwnProperty(category))
+                colorGenerator.setColorPairForID(category, fillStyles[category], fillStyles[category]);
+        }
+        WebInspector.TimelineFlameChart._colorGenerator = colorGenerator;
+    }
+    return WebInspector.TimelineFlameChart._colorGenerator;
+}
+
+WebInspector.TimelineFlameChart.prototype = {
+    reset: function()
+    {
+        this._dataProvider.reset();
+        this._mainView.changeWindow(0, 1);
+    },
+
+    _onRecordingStarted: function()
+    {
+        this._gotFirstRecord = false;
+    },
+
+    _onRecordAdded: function()
+    {
+        if (!this._gotFirstRecord) {
+            this._gotFirstRecord = true;
+            var minimumRecordTime = this._model.minimumRecordTime();
+            this._panel.setWindowTimes(minimumRecordTime, minimumRecordTime + 1000);
+        }
+        this._mainView._scheduleUpdate();
+    },
+
+    /**
+     * @param {number} startTime
+     * @param {number} endTime
+     */
+    setWindowTimes: function(startTime, endTime)
+    {
+        var minimumRecordTime = this._model.minimumRecordTime();
+        var timeRange = this._model.maximumRecordTime() - minimumRecordTime;
+        if (timeRange === 0)
+            this._mainView.changeWindow(0, 1);
+        else
+            this._mainView.changeWindow((startTime - minimumRecordTime) / timeRange, (endTime - minimumRecordTime) / timeRange);
+    },
+
+    /**
+     * @return {boolean}
+     */
+    supportsGlueParentMode: function()
+    {
+        return false;
+    },
+
+    setSidebarSize: function()
+    {
+    },
+
+    /**
+     * @param {!WebInspector.FilterBar} filterBar
+     * @return {boolean}
+     */
+    createUIFilters: function(filterBar)
+    {
+        return false;
+    },
+
+    /**
+     * @return {?WebInspector.View}
+     */
+    searchableView: function()
+    {
+        return null;
+    },
+
+    __proto__: WebInspector.View.prototype
+}
\ No newline at end of file
diff --git a/Source/devtools/front_end/TimelineFrameController.js b/Source/devtools/front_end/TimelineFrameController.js
deleted file mode 100644
index 7baeeca..0000000
--- a/Source/devtools/front_end/TimelineFrameController.js
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-
-/**
- * @constructor
- * @param {!WebInspector.TimelineModel} model
- * @param {!WebInspector.TimelineFrameOverview} frameOverview
- * @param {!WebInspector.TimelinePresentationModel} presentationModel
- */
-WebInspector.TimelineFrameController = function(model, frameOverview, presentationModel)
-{
-    this._lastMainThreadFrame = null;
-    this._lastBackgroundFrame = null;
-    this._model = model;
-    this._frameOverview = frameOverview;
-    this._presentationModel = presentationModel;
-    this._model.addEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._onRecordAdded, this);
-    this._model.addEventListener(WebInspector.TimelineModel.Events.RecordsCleared, this._onRecordsCleared, this);
-
-    this._frameOverview.reset();
-    var records = model.records;
-    for (var i = 0; i < records.length; ++i)
-        this._addRecord(records[i]);
-    this._frameOverview.update();
-}
-
-WebInspector.TimelineFrameController.prototype = {
-    _onRecordAdded: function(event)
-    {
-        this._addRecord(event.data);
-    },
-
-    _onRecordsCleared: function()
-    {
-        this._lastMainThreadFrame = null;
-        this._lastBackgroundFrame = null;
-    },
-
-    _addRecord: function(record)
-    {
-        var records;
-        var programRecord;
-        if (record.type === WebInspector.TimelineModel.RecordType.Program) {
-            programRecord = record;
-            if (this._lastMainThreadFrame)
-                this._lastMainThreadFrame.timeByCategory["other"] += WebInspector.TimelineModel.durationInSeconds(programRecord);
-            records = record["children"] || [];
-        } else
-            records = [record];
-        records.forEach(this._innerAddRecord.bind(this, programRecord));
-    },
-
-    /**
-     * @param {!Object} programRecord
-     * @param {!Object} record
-     */
-    _innerAddRecord: function(programRecord, record)
-    {
-        var isFrameRecord = record.type === WebInspector.TimelineModel.RecordType.BeginFrame;
-        var programTimeCarryover = isFrameRecord && programRecord ? WebInspector.TimelineModel.endTimeInSeconds(programRecord) - WebInspector.TimelineModel.startTimeInSeconds(record) : 0;
-        var lastFrame = record.thread ? this._lastBackgroundFrame : this._lastMainThreadFrame;
-        if (isFrameRecord && lastFrame) {
-            this._flushFrame(lastFrame, record, programTimeCarryover);
-            lastFrame = this._createFrame(record, programTimeCarryover);
-        } else if (record.type === WebInspector.TimelineModel.RecordType.ActivateLayerTree) {
-            if (lastFrame)
-                lastFrame.mainThreadFrameId = record.data.id;
-        } else {
-            if (!lastFrame)
-                lastFrame = this._createFrame(record, programTimeCarryover);
-            if (!record.thread) {
-                WebInspector.TimelineModel.aggregateTimeForRecord(lastFrame.timeByCategory, record);
-                var duration = WebInspector.TimelineModel.durationInSeconds(record);
-                lastFrame.cpuTime += duration;
-                lastFrame.timeByCategory["other"] -= duration;
-            }
-        }
-        if (record.thread)
-            this._lastBackgroundFrame = lastFrame;
-        else
-            this._lastMainThreadFrame = lastFrame;
-    },
-
-    /**
-     * @param {!WebInspector.TimelineFrame} frame
-     * @param {!Object} record
-     * @param {number} programTimeCarryover
-     */
-    _flushFrame: function(frame, record, programTimeCarryover)
-    {
-        frame.endTime = WebInspector.TimelineModel.startTimeInSeconds(record);
-        frame.duration = frame.endTime - frame.startTime;
-        frame.timeByCategory["other"] -= programTimeCarryover;
-        // Alternatively, we could compute CPU time as sum of all Program events.
-        // This way it's a bit more flexible, as it works in case there's no program events.
-        frame.cpuTime += frame.timeByCategory["other"];
-        this._frameOverview.addFrame(frame);
-        this._presentationModel.addFrame(frame);
-    },
-
-    /**
-     * @param {!Object} record
-     * @param {number} programTimeCarryover
-     */
-    _createFrame: function(record, programTimeCarryover)
-    {
-        var frame = new WebInspector.TimelineFrame();
-        frame.startTime = WebInspector.TimelineModel.startTimeInSeconds(record);
-        frame.startTimeOffset = this._model.recordOffsetInSeconds(record);
-        frame.timeByCategory["other"] = programTimeCarryover;
-        frame.isBackground = !!record.thread;
-        frame.id = record.data && record.data["id"];
-        return frame;
-    },
-
-    dispose: function()
-    {
-        this._model.removeEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._onRecordAdded, this);
-        this._model.removeEventListener(WebInspector.TimelineModel.Events.RecordsCleared, this._onRecordsCleared, this);
-    }
-}
-
-/**
- * @constructor
- * @param {!Array.<!WebInspector.TimelineFrame>} frames
- */
-WebInspector.FrameStatistics = function(frames)
-{
-    this.frameCount = frames.length;
-    this.minDuration = Infinity;
-    this.maxDuration = 0;
-    this.timeByCategory = {};
-    this.startOffset = frames[0].startTimeOffset;
-    var lastFrame = frames[this.frameCount - 1];
-    this.endOffset = lastFrame.startTimeOffset + lastFrame.duration;
-
-    var totalDuration = 0;
-    var sumOfSquares = 0;
-    for (var i = 0; i < this.frameCount; ++i) {
-        var duration = frames[i].duration;
-        totalDuration += duration;
-        sumOfSquares += duration * duration;
-        this.minDuration = Math.min(this.minDuration, duration);
-        this.maxDuration = Math.max(this.maxDuration, duration);
-        WebInspector.TimelineModel.aggregateTimeByCategory(this.timeByCategory, frames[i].timeByCategory);
-    }
-    this.average = totalDuration / this.frameCount;
-    var variance = sumOfSquares / this.frameCount - this.average * this.average;
-    this.stddev = Math.sqrt(variance);
-}
-
-/**
- * @constructor
- */
-WebInspector.TimelineFrame = function()
-{
-    this.timeByCategory = {};
-    this.cpuTime = 0;
-    /** @type {string} */
-    this.mainThreadFrameId;
-}
diff --git a/Source/devtools/front_end/TimelineFrameModel.js b/Source/devtools/front_end/TimelineFrameModel.js
new file mode 100644
index 0000000..d4e2029
--- /dev/null
+++ b/Source/devtools/front_end/TimelineFrameModel.js
@@ -0,0 +1,322 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+/**
+ * @constructor
+ * @extends {WebInspector.Object}
+ * @param {!WebInspector.TimelineModel} model
+ */
+WebInspector.TimelineFrameModel = function(model)
+{
+    this._model = model;
+    this._model.addEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._onRecordAdded, this);
+
+    this.reset();
+    var records = model.records;
+    for (var i = 0; i < records.length; ++i)
+        this._addRecord(records[i]);
+}
+
+WebInspector.TimelineFrameModel.Events = {
+    FrameAdded: "FrameAdded"
+}
+
+WebInspector.TimelineFrameModel.prototype = {
+    /**
+     * @return {!Array.<!WebInspector.TimelineFrame>}
+     */
+    frames: function()
+    {
+        return this._frames;
+    },
+
+    reset: function()
+    {
+        this._frames = [];
+        this._lastFrame = null;
+        this._hasThreadedCompositing = false;
+        this._mainFrameCommitted = false;
+        this._mainFrameRequested = false;
+        this._aggregatedMainThreadWork = null;
+        this._mergingBuffer = new WebInspector.TimelineMergingRecordBuffer();
+    },
+
+    _onRecordAdded: function(event)
+    {
+        var record = /** @type {!TimelineAgent.TimelineEvent} */(event.data);
+        this._addRecord(record);
+    },
+
+    /**
+     * @param {!TimelineAgent.TimelineEvent} record
+     */
+    _addRecord: function(record)
+    {
+        var recordTypes = WebInspector.TimelineModel.RecordType;
+        var programRecord = record.type === recordTypes.Program ? record : null;
+
+        // Start collecting main frame
+        if (programRecord) {
+            if (!this._aggregatedMainThreadWork && this._findRecordRecursively([recordTypes.ScheduleStyleRecalculation, recordTypes.InvalidateLayout, recordTypes.BeginFrame], programRecord))
+                this._aggregatedMainThreadWork = {};
+        }
+
+        var records = this._mergingBuffer.process(record.thread, programRecord ? record.children || [] : [record]);
+        for (var i = 0; i < records.length; ++i) {
+            if (records[i].thread)
+                this._addBackgroundRecord(records[i]);
+            else
+                this._addMainThreadRecord(programRecord, records[i]);
+        }
+    },
+
+    /**
+     * @param {!TimelineAgent.TimelineEvent} record
+     */
+    _addBackgroundRecord: function(record)
+    {
+        var recordTypes = WebInspector.TimelineModel.RecordType;
+        if (!this._lastFrame) {
+            if (record.type === recordTypes.BeginFrame || record.type === recordTypes.DrawFrame)
+                this._startBackgroundFrame(record);
+            return;
+        }
+
+        if (record.type === recordTypes.DrawFrame) {
+            // - if it wasn't drawn, it didn't happen!
+            // - only show frames that either did not wait for the main thread frame or had one committed.
+            if (this._mainFrameCommitted || !this._mainFrameRequested)
+                this._startBackgroundFrame(record);
+            this._mainFrameCommitted = false;
+        } else if (record.type === recordTypes.RequestMainThreadFrame) {
+            this._mainFrameRequested = true;
+        } else if (record.type === recordTypes.ActivateLayerTree) {
+            this._mainFrameRequested = false;
+            this._mainFrameCommitted = true;
+            this._lastFrame._addTimeForCategories(this._aggregatedMainThreadWorkToAttachToBackgroundFrame);
+            this._aggregatedMainThreadWorkToAttachToBackgroundFrame = {};
+        }
+        this._lastFrame._addTimeFromRecord(record);
+    },
+
+    /**
+     * @param {?TimelineAgent.TimelineEvent} programRecord
+     * @param {!TimelineAgent.TimelineEvent} record
+     */
+    _addMainThreadRecord: function(programRecord, record)
+    {
+        var recordTypes = WebInspector.TimelineModel.RecordType;
+        if (!this._hasThreadedCompositing) {
+            if (record.type === recordTypes.BeginFrame)
+                this._startMainThreadFrame(record);
+
+            if (!this._lastFrame)
+                return;
+
+            this._lastFrame._addTimeFromRecord(record);
+
+            // Account for "other" time at the same time as the first child.
+            if (programRecord.children[0] === record) {
+                this._deriveOtherTime(programRecord, this._lastFrame.timeByCategory);
+                this._lastFrame._updateCpuTime();
+            }
+            return;
+        }
+
+        if (!this._aggregatedMainThreadWork)
+            return;
+
+        WebInspector.TimelineModel.aggregateTimeForRecord(this._aggregatedMainThreadWork, record);
+        if (programRecord.children[0] === record)
+            this._deriveOtherTime(programRecord, this._aggregatedMainThreadWork);
+
+        if (record.type === recordTypes.CompositeLayers) {
+            this._aggregatedMainThreadWorkToAttachToBackgroundFrame = this._aggregatedMainThreadWork;
+            this._aggregatedMainThreadWork = null;
+        }
+    },
+
+    /**
+     * @param {!TimelineAgent.TimelineEvent} programRecord
+     * @param {!Object} timeByCategory
+     */
+    _deriveOtherTime: function(programRecord, timeByCategory)
+    {
+        var accounted = 0;
+        for (var i = 0; i < programRecord.children.length; ++i)
+            accounted += WebInspector.TimelineModel.durationInSeconds(programRecord.children[i]);
+        var otherTime = WebInspector.TimelineModel.durationInSeconds(programRecord) - accounted;
+        timeByCategory["other"] = (timeByCategory["other"] || 0) + otherTime;
+    },
+
+    /**
+     * @param {!TimelineAgent.TimelineEvent} record
+     */
+    _startBackgroundFrame: function(record)
+    {
+        if (!this._hasThreadedCompositing) {
+            this._lastFrame = null;
+            this._hasThreadedCompositing = true;
+        }
+        if (this._lastFrame)
+            this._flushFrame(this._lastFrame, record);
+
+        this._lastFrame = new WebInspector.TimelineFrame(this, record);
+    },
+
+    /**
+     * @param {!TimelineAgent.TimelineEvent} record
+     */
+    _startMainThreadFrame: function(record)
+    {
+        if (this._lastFrame)
+            this._flushFrame(this._lastFrame, record);
+        this._lastFrame = new WebInspector.TimelineFrame(this, record);
+    },
+
+    /**
+     * @param {!WebInspector.TimelineFrame} frame
+     * @param {!Object} record
+     */
+    _flushFrame: function(frame, record)
+    {
+        frame._setEndTime(WebInspector.TimelineModel.startTimeInSeconds(record));
+        this._frames.push(frame);
+        this.dispatchEventToListeners(WebInspector.TimelineFrameModel.Events.FrameAdded, frame);
+    },
+
+    /**
+     * @param {!Array.<string>} types
+     * @param {!TimelineAgent.TimelineEvent} record
+     * @return {?TimelineAgent.TimelineEvent} record
+     */
+    _findRecordRecursively: function(types, record)
+    {
+        if (types.indexOf(record.type) >= 0)
+            return record;
+        if (!record.children)
+            return null;
+        for (var i = 0; i < record.children.length; ++i) {
+            var result = this._findRecordRecursively(types, record.children[i]);
+            if (result)
+                return result;
+        }
+        return null;
+    },
+
+    dispose: function()
+    {
+        this._model.removeEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._onRecordAdded, this);
+    },
+
+    __proto__: WebInspector.Object.prototype
+}
+
+/**
+ * @constructor
+ * @param {!Array.<!WebInspector.TimelineFrame>} frames
+ */
+WebInspector.FrameStatistics = function(frames)
+{
+    this.frameCount = frames.length;
+    this.minDuration = Infinity;
+    this.maxDuration = 0;
+    this.timeByCategory = {};
+    this.startOffset = frames[0].startTimeOffset;
+    var lastFrame = frames[this.frameCount - 1];
+    this.endOffset = lastFrame.startTimeOffset + lastFrame.duration;
+
+    var totalDuration = 0;
+    var sumOfSquares = 0;
+    for (var i = 0; i < this.frameCount; ++i) {
+        var duration = frames[i].duration;
+        totalDuration += duration;
+        sumOfSquares += duration * duration;
+        this.minDuration = Math.min(this.minDuration, duration);
+        this.maxDuration = Math.max(this.maxDuration, duration);
+        WebInspector.TimelineModel.aggregateTimeByCategory(this.timeByCategory, frames[i].timeByCategory);
+    }
+    this.average = totalDuration / this.frameCount;
+    var variance = sumOfSquares / this.frameCount - this.average * this.average;
+    this.stddev = Math.sqrt(variance);
+}
+
+/**
+ * @constructor
+ * @param {!WebInspector.TimelineFrameModel} model
+ * @param {!Object} record
+ */
+WebInspector.TimelineFrame = function(model, record)
+{
+    this.startTime = WebInspector.TimelineModel.startTimeInSeconds(record);
+    this.startTimeOffset = model._model.recordOffsetInSeconds(record);
+    this.endTime = this.startTime;
+    this.duration = 0;
+    this.timeByCategory = {};
+    this.cpuTime = 0;
+}
+
+WebInspector.TimelineFrame.prototype = {
+    /**
+     * @param {number} endTime
+     */
+    _setEndTime: function(endTime)
+    {
+        this.endTime = endTime;
+        this.duration = this.endTime - this.startTime;
+    },
+
+    /**
+     * @param {!TimelineAgent.TimelineEvent} record
+     */
+    _addTimeFromRecord: function(record)
+    {
+        if (!record.endTime)
+            return;
+        WebInspector.TimelineModel.aggregateTimeForRecord(this.timeByCategory, record);
+        this._updateCpuTime();
+    },
+
+    /**
+     * @param {!Object} timeByCategory
+     */
+    _addTimeForCategories: function(timeByCategory)
+    {
+        WebInspector.TimelineModel.aggregateTimeByCategory(this.timeByCategory, timeByCategory);
+        this._updateCpuTime();
+    },
+
+    _updateCpuTime: function()
+    {
+        this.cpuTime = 0;
+        for (var key in this.timeByCategory)
+            this.cpuTime += this.timeByCategory[key];
+    }
+}
diff --git a/Source/devtools/front_end/TimelineFrameOverview.js b/Source/devtools/front_end/TimelineFrameOverview.js
index 5030de3..51e16c5 100644
--- a/Source/devtools/front_end/TimelineFrameOverview.js
+++ b/Source/devtools/front_end/TimelineFrameOverview.js
@@ -32,11 +32,13 @@
  * @constructor
  * @extends {WebInspector.TimelineOverviewBase}
  * @param {!WebInspector.TimelineModel} model
+ * @param {!WebInspector.TimelineFrameModel} frameModel
  */
-WebInspector.TimelineFrameOverview = function(model)
+WebInspector.TimelineFrameOverview = function(model, frameModel)
 {
     WebInspector.TimelineOverviewBase.call(this, model);
     this.element.id = "timeline-overview-frames";
+    this._frameModel = frameModel;
     this.reset();
 
     this._outerPadding = 4 * window.devicePixelRatio;
@@ -57,14 +59,19 @@
 }
 
 WebInspector.TimelineFrameOverview.prototype = {
+    /**
+     * @return {!Object.<string, !CanvasGradient>}
+     */
+    categoryFillStyles: function()
+    {
+        return this._fillStyles;
+    },
+
     reset: function()
     {
         this._recordsPerBar = 1;
-        /** @type {!Array.<{startTime:number, endTime:number}>} */
+        /** @type {!Array.<!{startTime:number, endTime:number}>} */
         this._barTimes = [];
-        this._mainThreadFrames = [];
-        this._backgroundFrames = [];
-        this._framesById = {};
     },
 
     update: function()
@@ -72,61 +79,18 @@
         this.resetCanvas();
         this._barTimes = [];
 
-        var backgroundFramesHeight = 15;
-        var mainThreadFramesHeight = this._canvas.height - backgroundFramesHeight;
         const minBarWidth = 4 * window.devicePixelRatio;
-        var frameCount = this._backgroundFrames.length || this._mainThreadFrames.length;
-        var framesPerBar = Math.max(1, frameCount * minBarWidth / this._canvas.width);
-
-        var mainThreadVisibleFrames;
-        var backgroundVisibleFrames;
-        if (this._backgroundFrames.length) {
-            backgroundVisibleFrames = this._aggregateFrames(this._backgroundFrames, framesPerBar);
-            mainThreadVisibleFrames = new Array(backgroundVisibleFrames.length);
-            for (var i = 0; i < backgroundVisibleFrames.length; ++i) {
-                var frameId = backgroundVisibleFrames[i].mainThreadFrameId;
-                mainThreadVisibleFrames[i] = frameId && this._framesById[frameId];
-            }
-        } else {
-            mainThreadVisibleFrames = this._aggregateFrames(this._mainThreadFrames, framesPerBar);
-        }
+        var frames = this._frameModel.frames();
+        var framesPerBar = Math.max(1, frames.length * minBarWidth / this._canvas.width);
+        var visibleFrames = this._aggregateFrames(frames, framesPerBar);
 
         this._context.save();
-        this._setCanvasWindow(0, backgroundFramesHeight, this._canvas.width, mainThreadFramesHeight);
-        var scale = (mainThreadFramesHeight - this._topPadding) / this._computeTargetFrameLength(mainThreadVisibleFrames);
-        this._renderBars(mainThreadVisibleFrames, scale, mainThreadFramesHeight);
+        var scale = (this._canvas.height - this._topPadding) / this._computeTargetFrameLength(visibleFrames);
+        this._renderBars(frames, scale, this._canvas.height);
         this._context.fillStyle = this._frameTopShadeGradient;
         this._context.fillRect(0, 0, this._canvas.width, this._topPadding);
-        this._drawFPSMarks(scale, mainThreadFramesHeight);
+        this._drawFPSMarks(scale, this._canvas.height);
         this._context.restore();
-
-        var bottom = backgroundFramesHeight + 0.5;
-        this._context.strokeStyle = "rgba(120, 120, 120, 0.8)";
-        this._context.beginPath();
-        this._context.moveTo(0, bottom);
-        this._context.lineTo(this._canvas.width, bottom);
-        this._context.stroke();
-
-        if (backgroundVisibleFrames) {
-            const targetFPS = 30.0;
-            scale = (backgroundFramesHeight - this._topPadding) / (1.0 / targetFPS);
-            this._renderBars(backgroundVisibleFrames, scale, backgroundFramesHeight);
-        }
-    },
-
-    /**
-     * @param {!WebInspector.TimelineFrame} frame
-     */
-    addFrame: function(frame)
-    {
-        var frames;
-        if (frame.isBackground) {
-            frames = this._backgroundFrames;
-        } else {
-            frames = this._mainThreadFrames;
-            this._framesById[frame.id] = frame;
-        }
-        frames.push(frame);
     },
 
     /**
@@ -162,7 +126,7 @@
 
             for (var lastFrame = Math.min(Math.floor((barNumber + 1) * framesPerBar), frames.length);
                  currentFrame < lastFrame; ++currentFrame) {
-                var duration = this._frameDuration(frames[currentFrame]);
+                var duration = frames[currentFrame].duration;
                 if (!longestFrame || longestDuration < duration) {
                     longestFrame = frames[currentFrame];
                     longestDuration = duration;
@@ -178,15 +142,6 @@
     },
 
     /**
-     * @param {!WebInspector.TimelineFrame} frame
-     */
-    _frameDuration: function(frame)
-    {
-        var relatedFrame = frame.mainThreadFrameId && this._framesById[frame.mainThreadFrameId];
-        return frame.duration + (relatedFrame ? relatedFrame.duration : 0);
-    },
-
-    /**
      * @param {!Array.<!WebInspector.TimelineFrame>} frames
      * @return {number}
      */
@@ -199,9 +154,9 @@
         }
         var medianFrameLength = durations.qselect(Math.floor(durations.length / 2));
 
-        // Optimize appearance for 30fps. However, if at least half frames won't fit at this scale,
-        // fall back to using autoscale.
-        const targetFPS = 30;
+        // Optimize appearance for 30fps, but leave some space so it's evident when a frame overflows.
+        // However, if at least half frames won't fit at this scale, fall back to using autoscale.
+        const targetFPS = 20;
         var result = 1.0 / targetFPS;
         if (result >= medianFrameLength)
             return result;
@@ -294,18 +249,20 @@
     _renderBar: function(left, width, windowHeight, frame, scale)
     {
         var categories = Object.keys(WebInspector.TimelinePresentationModel.categories());
-        if (!categories.length)
-            return;
         var x = Math.floor(left) + 0.5;
         width = Math.floor(width);
 
+        var totalCPUTime = frame.cpuTime;
+        var normalizedScale = scale;
+        if (totalCPUTime > frame.duration)
+            normalizedScale *= frame.duration / totalCPUTime;
+
         for (var i = 0, bottomOffset = windowHeight; i < categories.length; ++i) {
             var category = categories[i];
             var duration = frame.timeByCategory[category];
-
             if (!duration)
                 continue;
-            var height = Math.round(duration * scale);
+            var height = Math.round(duration * normalizedScale);
             var y = Math.floor(bottomOffset - height) + 0.5;
 
             this._context.save();
@@ -338,6 +295,7 @@
     /**
      * @param {number} windowLeft
      * @param {number} windowRight
+     * @return {!{startTime: number, endTime: number}}
      */
     windowTimes: function(windowLeft, windowRight)
     {
@@ -361,6 +319,7 @@
     /**
      * @param {number} startTime
      * @param {number} endTime
+     * @return {!{left: number, right: number}}
      */
     windowBoundaries: function(startTime, endTime)
     {
@@ -368,7 +327,7 @@
             return {left: 0, right: 1};
         /**
          * @param {number} time
-         * @param {{startTime:number, endTime:number}} barTime
+         * @param {!{startTime:number, endTime:number}} barTime
          * @return {number}
          */
         function barStartComparator(time, barTime)
@@ -377,7 +336,7 @@
         }
         /**
          * @param {number} time
-         * @param {{startTime:number, endTime:number}} barTime
+         * @param {!{startTime:number, endTime:number}} barTime
          * @return {number}
          */
         function barEndComparator(time, barTime)
@@ -395,7 +354,7 @@
 
     /**
      * @param {number} time
-     * @param {function(number, {startTime:number, endTime:number}):number} comparator
+     * @param {function(number, !{startTime:number, endTime:number}):number} comparator
      */
     _windowBoundaryFromTime: function(time, comparator)
     {
diff --git a/Source/devtools/front_end/TimelineGrid.js b/Source/devtools/front_end/TimelineGrid.js
index 1eaf3ae..30dfd17 100644
--- a/Source/devtools/front_end/TimelineGrid.js
+++ b/Source/devtools/front_end/TimelineGrid.js
@@ -83,6 +83,9 @@
         this._dividersLabelBarElement.removeChildren();
     },
 
+    /**
+     * @return {boolean}
+     */
     updateDividers: function(calculator)
     {
         const minGridSlicePx = 64; // minimal distance between grid lines.
@@ -195,6 +198,16 @@
         this._eventDividersElement.classList.remove("hidden");
     },
 
+    hideDividers: function()
+    {
+        this._dividersElement.classList.add("hidden");
+    },
+
+    showDividers: function()
+    {
+        this._dividersElement.classList.remove("hidden");
+    },
+
     hideCurtains: function()
     {
         this._leftCurtainElement.classList.add("hidden");
diff --git a/Source/devtools/front_end/TimelineManager.js b/Source/devtools/front_end/TimelineManager.js
index 3a1cc0b..879dc4f 100644
--- a/Source/devtools/front_end/TimelineManager.js
+++ b/Source/devtools/front_end/TimelineManager.js
@@ -57,15 +57,15 @@
 
     /**
      * @param {number=} maxCallStackDepth
-     * @param {boolean=} includeDomCounters
+     * @param {boolean=} includeCounters
      * @param {boolean=} includeGPUEvents
      * @param {function(?Protocol.Error)=} callback
      */
-    start: function(maxCallStackDepth, includeDomCounters, includeGPUEvents, callback)
+    start: function(maxCallStackDepth, includeCounters, includeGPUEvents, callback)
     {
         this._enablementCount++;
         if (this._enablementCount === 1)
-            TimelineAgent.start(maxCallStackDepth, /* bufferEvents */false, includeDomCounters, includeGPUEvents, callback);
+            TimelineAgent.start(maxCallStackDepth, /* bufferEvents */false, includeCounters, includeGPUEvents, callback);
         else if (callback)
             callback(null);
     },
@@ -123,7 +123,7 @@
     {
         if (consoleTimeline) {
             // Wake up timeline panel module.
-            WebInspector.panel("timeline");
+            WebInspector.moduleManager.loadModule("timeline");
         }
         this._started = true;
         this._manager.dispatchEventToListeners(WebInspector.TimelineManager.EventTypes.TimelineStarted, consoleTimeline);
@@ -140,6 +140,6 @@
 }
 
 /**
- * @type {?WebInspector.TimelineManager}
+ * @type {!WebInspector.TimelineManager}
  */
-WebInspector.timelineManager = null;
+WebInspector.timelineManager;
diff --git a/Source/devtools/front_end/TimelineMemoryOverview.js b/Source/devtools/front_end/TimelineMemoryOverview.js
index a99edfa..154fadd 100644
--- a/Source/devtools/front_end/TimelineMemoryOverview.js
+++ b/Source/devtools/front_end/TimelineMemoryOverview.js
@@ -43,13 +43,21 @@
 }
 
 WebInspector.TimelineMemoryOverview.prototype = {
+    resetHeapSizeLabels: function()
+    {
+        this._maxHeapSizeLabel.textContent = "";
+        this._minHeapSizeLabel.textContent = "";
+    },
+
     update: function()
     {
         this.resetCanvas();
 
         var records = this._model.records;
-        if (!records.length)
+        if (!records.length) {
+            this.resetHeapSizeLabels();
             return;
+        }
 
         const lowerOffset = 3;
         var maxUsedHeapSize = 0;
@@ -57,8 +65,10 @@
         var minTime = this._model.minimumRecordTime();
         var maxTime = this._model.maximumRecordTime();
         WebInspector.TimelinePresentationModel.forAllRecords(records, function(r) {
-            maxUsedHeapSize = Math.max(maxUsedHeapSize, r.usedHeapSize || maxUsedHeapSize);
-            minUsedHeapSize = Math.min(minUsedHeapSize, r.usedHeapSize || minUsedHeapSize);
+            if (!r.counters || !r.counters.jsHeapSizeUsed)
+                return;
+            maxUsedHeapSize = Math.max(maxUsedHeapSize, r.counters.jsHeapSizeUsed);
+            minUsedHeapSize = Math.min(minUsedHeapSize, r.counters.jsHeapSizeUsed);
         });
         minUsedHeapSize = Math.min(minUsedHeapSize, maxUsedHeapSize);
 
@@ -69,27 +79,27 @@
 
         var histogram = new Array(width);
         WebInspector.TimelinePresentationModel.forAllRecords(records, function(r) {
-            if (!r.usedHeapSize)
+            if (!r.counters || !r.counters.jsHeapSizeUsed)
                 return;
             var x = Math.round((WebInspector.TimelineModel.endTimeInSeconds(r) - minTime) * xFactor);
-            var y = Math.round((r.usedHeapSize - minUsedHeapSize) * yFactor);
+            var y = (r.counters.jsHeapSizeUsed - minUsedHeapSize) * yFactor;
             histogram[x] = Math.max(histogram[x] || 0, y);
         });
 
-        height++; // +1 so that the border always fit into the canvas area.
-
         var y = 0;
         var isFirstPoint = true;
         var ctx = this._context;
+        ctx.save();
+        ctx.translate(0.5, 0.5);
         ctx.beginPath();
-        ctx.moveTo(0, this._canvas.height);
+        ctx.moveTo(-1, this._canvas.height);
         for (var x = 0; x < histogram.length; x++) {
             if (typeof histogram[x] === "undefined")
                 continue;
             if (isFirstPoint) {
                 isFirstPoint = false;
                 y = histogram[x];
-                ctx.lineTo(0, height - y);
+                ctx.lineTo(-1, height - y);
             }
             ctx.lineTo(x, height - y);
             y = histogram[x];
@@ -97,16 +107,20 @@
         }
         ctx.lineTo(width, height - y);
         ctx.lineTo(width, this._canvas.height);
-        ctx.lineTo(0, this._canvas.height);
+        ctx.lineTo(-1, this._canvas.height);
         ctx.closePath();
 
-        ctx.lineWidth = 0.5;
-        ctx.strokeStyle = "rgba(20,0,0,0.8)";
-        ctx.stroke();
-
-        ctx.fillStyle = "rgba(214,225,254, 0.8);";
+        var gradient = ctx.createLinearGradient(0, 0, 0, height);
+        gradient.addColorStop(0, "rgba(192,204,255,1)");
+        gradient.addColorStop(1, "rgba(192,204,255,0.4)");
+        ctx.fillStyle = gradient;
         ctx.fill();
 
+        ctx.lineWidth = 0.5;
+        ctx.strokeStyle = "#666";
+        ctx.stroke();
+        ctx.restore();
+
         this._maxHeapSizeLabel.textContent = Number.bytesToString(maxUsedHeapSize);
         this._minHeapSizeLabel.textContent = Number.bytesToString(minUsedHeapSize);
     },
diff --git a/Source/devtools/front_end/TimelineModel.js b/Source/devtools/front_end/TimelineModel.js
index e85c0af..656b2c5 100644
--- a/Source/devtools/front_end/TimelineModel.js
+++ b/Source/devtools/front_end/TimelineModel.js
@@ -53,8 +53,10 @@
 
     GPUTask: "GPUTask",
 
+    RequestMainThreadFrame: "RequestMainThreadFrame",
     BeginFrame: "BeginFrame",
     ActivateLayerTree: "ActivateLayerTree",
+    DrawFrame: "DrawFrame",
     ScheduleStyleRecalculation: "ScheduleStyleRecalculation",
     RecalculateStyles: "RecalculateStyles",
     InvalidateLayout: "InvalidateLayout",
@@ -156,15 +158,15 @@
 
 WebInspector.TimelineModel.prototype = {
     /**
-     * @param {boolean=} includeDomCounters
+     * @param {boolean=} includeCounters
      */
-    startRecording: function(includeDomCounters)
+    startRecording: function(includeCounters)
     {
         this._clientInitiatedRecording = true;
         this.reset();
         var maxStackFrames = WebInspector.settings.timelineCaptureStacks.get() ? 30 : 0;
         var includeGPUEvents = WebInspector.experimentsSettings.gpuTimeline.isEnabled();
-        WebInspector.timelineManager.start(maxStackFrames, includeDomCounters, includeGPUEvents, this._fireRecordingStarted.bind(this));
+        WebInspector.timelineManager.start(maxStackFrames, includeCounters, includeGPUEvents, this._fireRecordingStarted.bind(this));
     },
 
     stopRecording: function()
@@ -174,8 +176,11 @@
             return;
         }
 
-        // Console started this one and we are just sniffing it. Initiate recording so that we
-        // could stop it.
+        /**
+         * Console started this one and we are just sniffing it. Initiate recording so that we
+         * could stop it.
+         * @this {WebInspector.TimelineModel}
+         */
         function stopTimeline()
         {
             WebInspector.timelineManager.stop(this._fireRecordingStopped.bind(this));
@@ -285,6 +290,7 @@
 
         /**
          * @param {boolean} accepted
+         * @this {WebInspector.TimelineModel}
          */
         function callback(accepted)
         {
@@ -305,11 +311,17 @@
         this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordsCleared);
     },
 
+    /**
+     * @return {number}
+     */
     minimumRecordTime: function()
     {
         return this._minimumRecordTime;
     },
 
+    /**
+     * @return {number}
+     */
     maximumRecordTime: function()
     {
         return this._maximumRecordTime;
@@ -331,6 +343,7 @@
 
     /**
      * @param {!Object} rawRecord
+     * @return {number}
      */
     recordOffsetInSeconds: function(rawRecord)
     {
@@ -367,7 +380,7 @@
         var index;
         do {
             index = lastIndex;
-            lastIndex = WebInspector.findBalancedCurlyBrackets(data, index);
+            lastIndex = WebInspector.TextUtils.findBalancedCurlyBrackets(data, index);
         } while (lastIndex !== -1)
 
         var json = data.slice(0, index) + "]";
@@ -522,3 +535,45 @@
         stream.write(data.join(separator), this._writeNextChunk.bind(this));
     }
 }
+
+/**
+ * @constructor
+ */
+WebInspector.TimelineMergingRecordBuffer = function()
+{
+    this._backgroundRecordsBuffer = [];
+}
+
+/**
+ * @constructor
+ */
+WebInspector.TimelineMergingRecordBuffer.prototype = {
+    /**
+     * @param {string} thread
+     * @param {!Array.<!TimelineAgent.TimelineEvent>} records
+     * @return {!Array.<!TimelineAgent.TimelineEvent>}
+     */
+    process: function(thread, records)
+    {
+        if (thread) {
+            this._backgroundRecordsBuffer = this._backgroundRecordsBuffer.concat(records);
+            return [];
+        }
+        var outputIndex = 0;
+        var result = new Array(this._backgroundRecordsBuffer.length + records.length);
+        var mainThreadRecord = 0;
+        var backgroundRecord = 0;
+        while  (backgroundRecord < this._backgroundRecordsBuffer.length && mainThreadRecord < records.length) {
+            if (this._backgroundRecordsBuffer[backgroundRecord].startTime < records[mainThreadRecord].startTime)
+                result[outputIndex++] = this._backgroundRecordsBuffer[backgroundRecord++];
+            else
+                result[outputIndex++] = records[mainThreadRecord++];
+        }
+        for (;mainThreadRecord < records.length; ++mainThreadRecord)
+            result[outputIndex++] = records[mainThreadRecord];
+        for (;backgroundRecord < this._backgroundRecordsBuffer.length; ++backgroundRecord)
+            result[outputIndex++] = this._backgroundRecordsBuffer[backgroundRecord];
+        this._backgroundRecordsBuffer = [];
+        return result;
+    }
+};
diff --git a/Source/devtools/front_end/TimelineOverviewPane.js b/Source/devtools/front_end/TimelineOverviewPane.js
index 5287a2e..9c69c1d 100644
--- a/Source/devtools/front_end/TimelineOverviewPane.js
+++ b/Source/devtools/front_end/TimelineOverviewPane.js
@@ -38,8 +38,6 @@
     WebInspector.View.call(this);
     this.element.id = "timeline-overview-pane";
 
-    this._windowStartTime = 0;
-    this._windowEndTime = Infinity;
     this._eventDividers = [];
 
     this._model = model;
@@ -72,39 +70,33 @@
     /**
      * @param {!WebInspector.TimelineOverviewBase} overviewControl
      */
-    willSetOverviewControl: function(overviewControl)
+    setOverviewControl: function(overviewControl)
     {
-        this._sameOverviewControl = this._overviewControl === overviewControl;
-        if (this._sameOverviewControl)
+        if (this._overviewControl === overviewControl)
             return;
-        this._windowTimes = null;
+
+        var windowTimes = null;
+
         if (this._overviewControl) {
-            this._windowTimes = this._overviewControl.windowTimes(this.windowLeft(), this.windowRight());
+            windowTimes = this._overviewControl.windowTimes(this._overviewGrid.windowLeft(), this._overviewGrid.windowRight());
             this._overviewControl.detach();
         }
         this._overviewControl = overviewControl;
         this._overviewControl.show(this._overviewGrid.element);
         this._update();
-    },
-
-    didSetOverviewControl: function()
-    {
-        if (this._sameOverviewControl)
-            return;
-        if (this._windowTimes && this._windowTimes.startTime >= 0)
-            this.setWindowTimes(this._windowTimes.startTime, this._windowTimes.endTime);
-        this._update();
+        if (windowTimes)
+            this.setWindowTimes(windowTimes.startTime, windowTimes.endTime);
     },
 
     _update: function()
     {
         delete this._refreshTimeout;
 
-        this._updateWindow();
         this._overviewCalculator.setWindow(this._model.minimumRecordTime(), this._model.maximumRecordTime());
         this._overviewCalculator.setDisplayWindow(0, this._overviewGrid.clientWidth());
-
-        this._overviewControl.update();
+        this._updateWindow();
+        if (this._overviewControl)
+            this._overviewControl.update();
         this._overviewGrid.updateDividers(this._overviewCalculator);
         this._updateEventDividers();
     },
@@ -127,15 +119,6 @@
         this._overviewGrid.addEventDividers(dividers);
     },
 
-    /**
-     * @param {!WebInspector.TimelineFrame} frame
-     */
-    zoomToFrame: function(frame)
-    {
-        this.setWindowTimes(frame.startTime, frame.endTime);
-        this.dispatchEventToListeners(WebInspector.TimelineOverviewPane.Events.WindowChanged);
-    },
-
     _onRecordAdded: function(event)
     {
         var record = event.data;
@@ -151,50 +134,32 @@
 
     _reset: function()
     {
-        this._windowStartTime = 0;
-        this._windowEndTime = Infinity;
         this._overviewCalculator.reset();
         this._overviewGrid.reset();
         this._overviewGrid.setResizeEnabled(false);
         this._eventDividers = [];
         this._overviewGrid.updateDividers(this._overviewCalculator);
-        this._overviewControl.reset();
+        if (this._overviewControl)
+            this._overviewControl.reset();
         this._update();
     },
 
-    windowStartTime: function()
-    {
-        return this._windowStartTime || this._model.minimumRecordTime();
-    },
-
-    windowEndTime: function()
-    {
-        return this._windowEndTime < Infinity ? this._windowEndTime : this._model.maximumRecordTime();
-    },
-
-    windowLeft: function()
-    {
-        return this._overviewGrid.windowLeft();
-    },
-
-    windowRight: function()
-    {
-        return this._overviewGrid.windowRight();
-    },
-
-    _onWindowChanged: function()
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _onWindowChanged: function(event)
     {
         if (this._ignoreWindowChangedEvent)
             return;
-        var times = this._overviewControl.windowTimes(this.windowLeft(), this.windowRight());
-        this._windowStartTime = times.startTime;
-        this._windowEndTime = times.endTime;
-        this.dispatchEventToListeners(WebInspector.TimelineOverviewPane.Events.WindowChanged);
+        var windowTimes = this._overviewControl.windowTimes(this._overviewGrid.windowLeft(), this._overviewGrid.windowRight());
+        this._windowStartTime = windowTimes.startTime;
+        this._windowEndTime = windowTimes.endTime;
+        this.dispatchEventToListeners(WebInspector.TimelineOverviewPane.Events.WindowChanged, windowTimes);
     },
 
     /**
-     * @param {!Number} startTime
-     * @param {!Number} endTime
+     * @param {number} startTime
+     * @param {number} endTime
      */
     setWindowTimes: function(startTime, endTime)
     {
@@ -235,12 +200,16 @@
 WebInspector.TimelineOverviewCalculator.prototype = {
     /**
      * @param {number} time
+     * @return {number}
      */
     computePosition: function(time)
     {
         return (time - this._minimumBoundary) / this.boundarySpan() * this._workingArea + this.paddingLeft;
     },
 
+    /**
+     * @return {!{start: number, end: number}}
+     */
     computeBarGraphPercentages: function(record)
     {
         var start = (WebInspector.TimelineModel.startTimeInSeconds(record) - this._minimumBoundary) / this.boundarySpan() * 100;
@@ -283,21 +252,33 @@
         return Number.secondsToString(value, hires);
     },
 
+    /**
+     * @return {number}
+     */
     maximumBoundary: function()
     {
         return this._maximumBoundary;
     },
 
+    /**
+     * @return {number}
+     */
     minimumBoundary: function()
     {
         return this._minimumBoundary;
     },
 
+    /**
+     * @return {number}
+     */
     zeroTime: function()
     {
         return this._minimumBoundary;
     },
 
+    /**
+     * @return {number}
+     */
     boundarySpan: function()
     {
         return this._maximumBoundary - this._minimumBoundary;
@@ -312,7 +293,6 @@
 WebInspector.TimelineOverviewBase = function(model)
 {
     WebInspector.View.call(this);
-    this.element.classList.add("fill");
 
     this._model = model;
     this._canvas = this.element.createChild("canvas", "fill");
@@ -326,6 +306,7 @@
     /**
      * @param {number} windowLeft
      * @param {number} windowRight
+     * @return {!{startTime: number, endTime: number}}
      */
     windowTimes: function(windowLeft, windowRight)
     {
@@ -340,6 +321,7 @@
     /**
      * @param {number} startTime
      * @param {number} endTime
+     * @return {!{left: number, right: number}}
      */
     windowBoundaries: function(startTime, endTime)
     {
@@ -360,24 +342,3 @@
 
     __proto__: WebInspector.View.prototype
 }
-
-/**
- * @constructor
- * @implements {WebInspector.TimelinePresentationModel.Filter}
- * @param {!WebInspector.TimelineOverviewPane} pane
- */
-WebInspector.TimelineWindowFilter = function(pane)
-{
-    this._pane = pane;
-}
-
-WebInspector.TimelineWindowFilter.prototype = {
-    /**
-     * @param {!WebInspector.TimelinePresentationModel.Record} record
-     * @return {boolean}
-     */
-    accept: function(record)
-    {
-        return record.lastChildEndTime >= this._pane._windowStartTime && record.startTime <= this._pane._windowEndTime;
-    }
-}
diff --git a/Source/devtools/front_end/TimelinePanel.js b/Source/devtools/front_end/TimelinePanel.js
index 01deccb..8315c06 100644
--- a/Source/devtools/front_end/TimelinePanel.js
+++ b/Source/devtools/front_end/TimelinePanel.js
@@ -30,19 +30,20 @@
  */
 
 importScript("MemoryStatistics.js");
-importScript("DOMCountersGraph.js");
+importScript("CountersGraph.js");
 importScript("PieChart.js");
 importScript("TimelineModel.js");
 importScript("TimelineOverviewPane.js");
 importScript("TimelinePresentationModel.js");
-importScript("TimelineFrameController.js");
+importScript("TimelineFrameModel.js");
 importScript("TimelineEventOverview.js");
 importScript("TimelineFrameOverview.js");
 importScript("TimelineMemoryOverview.js");
+importScript("TimelineFlameChart.js");
+importScript("TimelineView.js");
 
 /**
  * @constructor
- * @implements {WebInspector.Searchable}
  * @extends {WebInspector.Panel}
  */
 WebInspector.TimelinePanel = function()
@@ -50,151 +51,66 @@
     WebInspector.Panel.call(this, "timeline");
     this.registerRequiredCSS("timelinePanel.css");
     this.registerRequiredCSS("filter.css");
-    this.element.classList.add("vbox");
     this.element.addEventListener("contextmenu", this._contextMenu.bind(this), false);
 
+    this._windowStartTime = 0;
+    this._windowEndTime = Infinity;
+
     // Create model.
     this._model = new WebInspector.TimelineModel();
-    this._calculator = new WebInspector.TimelineCalculator(this._model);
-    this._model.addEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._onTimelineEventRecorded, this);
-    this._model.addEventListener(WebInspector.TimelineModel.Events.RecordsCleared, this._onRecordsCleared, this);
     this._model.addEventListener(WebInspector.TimelineModel.Events.RecordingStarted, this._onRecordingStarted, this);
     this._model.addEventListener(WebInspector.TimelineModel.Events.RecordingStopped, this._onRecordingStopped, this);
+    this._model.addEventListener(WebInspector.TimelineModel.Events.RecordsCleared, this._onRecordsCleared, this);
 
     this._presentationModeSetting = WebInspector.settings.createSetting("timelineOverviewMode", WebInspector.TimelinePanel.Mode.Events);
     this._glueRecordsSetting = WebInspector.settings.createSetting("timelineGlueRecords", false);
 
     this._createStatusBarItems();
 
+    this._topPane = new WebInspector.SplitView(true, false);
+    this._topPane.element.id = "timeline-overview-panel";
+    this._topPane.show(this.element);
+    this._topPane.addEventListener(WebInspector.SplitView.Events.SidebarSizeChanged, this._sidebarResized, this);
+    this._topPane.setResizable(false);
     this._createPresentationSelector();
 
     // Create top overview component.
     this._overviewPane = new WebInspector.TimelineOverviewPane(this._model);
-    this._overviewPane.addEventListener(WebInspector.TimelineOverviewPane.Events.WindowChanged, this._windowChanged.bind(this));
-    this._overviewPane.show(this._presentationSelector.element);
+    this._overviewPane.addEventListener(WebInspector.TimelineOverviewPane.Events.WindowChanged, this._onWindowChanged.bind(this));
+    this._overviewPane.show(this._topPane.mainElement());
 
-    // Create presentation model.
-    this._presentationModel = new WebInspector.TimelinePresentationModel();
-    this._presentationModel.addFilter(new WebInspector.TimelineWindowFilter(this._overviewPane));
-    this._presentationModel.addFilter(new WebInspector.TimelineCategoryFilter());
-    this._presentationModel.addFilter(this._durationFilter);
-    this._presentationModel.setGlueRecords(this._glueParentButton.toggled);
+    this._createFileSelector();
+    this._registerShortcuts();
 
-    this._frameMode = false;
-    this._boundariesAreValid = true;
-    this._scrollTop = 0;
-
-    // Create layout componets.
-
-    //  -------------------------------
-    // |            Overview           |
-    // |-------------------------------|
-    // |    |           |              |
-    // |    |  Records  |              |
-    // |    |           |    Details   |
-    // |----------------|              |
-    // |    |  Memory   |              |
-    //  -------------------------------
+    WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.WillReloadPage, this._willReloadPage, this);
+    WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.Load, this._loadEventFired, this);
 
     // Create top level properties splitter.
-    this._detailsSplitView = new WebInspector.SplitView(false, "timeline-details");
-    this._detailsSplitView.element.classList.remove("fill");
+    this._detailsSplitView = new WebInspector.SplitView(false, true, "timeline-details");
     this._detailsSplitView.element.classList.add("timeline-details-split");
-    this._detailsSplitView.sidebarElement.classList.add("timeline-details");
-    this._detailsSplitView.show(this.element);
-    this._detailsSplitView.mainElement.classList.add("vbox");
+    this._detailsSplitView.sidebarElement().classList.add("timeline-details");
     this._detailsSplitView.setMainElementConstraints(undefined, 40);
     this._detailsView = new WebInspector.TimelineDetailsView();
-    this._detailsView.show(this._detailsSplitView.sidebarElement);
     this._detailsSplitView.installResizer(this._detailsView.titleElement());
+    this._detailsView.show(this._detailsSplitView.sidebarElement());
+
+    this._stackView = new WebInspector.StackView(false);
+    this._stackView.show(this._detailsSplitView.mainElement());
+    this._stackView.element.classList.add("timeline-view-stack");
 
     WebInspector.dockController.addEventListener(WebInspector.DockController.Events.DockSideChanged, this._dockSideChanged.bind(this));
     WebInspector.settings.splitVerticallyWhenDockedToRight.addChangeListener(this._dockSideChanged.bind(this));
     this._dockSideChanged();
 
-    // Create memory splitter as a left child of properties.
-    this._searchableView = new WebInspector.SearchableView(this);
-    this._searchableView.show(this._detailsSplitView.mainElement);
-
-    this._timelineMemorySplitter = new WebInspector.SplitView(false, "timeline-memory");
-    this._timelineMemorySplitter.element.classList.remove("fill");
-    this._timelineMemorySplitter.element.classList.add("timeline-memory-split");
-    this._timelineMemorySplitter.show(this._searchableView.element);
-    if (this._presentationModeSetting.get() !== WebInspector.TimelinePanel.Mode.Memory)
-        this._timelineMemorySplitter.showOnlyFirst();
-
-    // Create records sidebar as a top memory splitter child.
-    this._sidebarView = new WebInspector.SidebarView(WebInspector.SidebarView.SidebarPosition.Start, "timeline-split");
-    this._sidebarView.addEventListener(WebInspector.SidebarView.EventTypes.Resized, this._sidebarResized, this);
-    this._sidebarView.setSecondIsSidebar(false);
-    this._sidebarView.show(this._timelineMemorySplitter.mainElement);
-    this._containerElement = this._sidebarView.element;
-    this._containerElement.tabIndex = 0;
-    this._containerElement.id = "timeline-container";
-    this._containerElement.addEventListener("scroll", this._onScroll.bind(this), false);
-
-    // Create memory statistics as a bottom memory splitter child.
-    this._memoryStatistics = new WebInspector.DOMCountersGraph(this, this._model);
-    this._memoryStatistics.show(this._timelineMemorySplitter.sidebarElement);
-    this._timelineMemorySplitter.installResizer(this._memoryStatistics.resizeElement());
-
-    // Create records list in the records sidebar.
-    this._sidebarView.sidebarElement.classList.add("vbox");
-    this._sidebarView.sidebarElement.createChild("div", "timeline-records-title").textContent = WebInspector.UIString("RECORDS");
-    this._sidebarListElement = this._sidebarView.sidebarElement.createChild("div", "timeline-records-list");
-
-    // Create grid in the records main area.
-    this._gridContainer = new WebInspector.ViewWithResizeCallback(this._onViewportResize.bind(this));
-    this._gridContainer.element.classList.add("fill");
-    this._gridContainer.element.id = "resources-container-content";
-    this._gridContainer.show(this._sidebarView.mainElement);
-    this._timelineGrid = new WebInspector.TimelineGrid();
-    this._itemsGraphsElement = this._timelineGrid.itemsGraphsElement;
-    this._itemsGraphsElement.id = "timeline-graphs";
-    this._gridContainer.element.appendChild(this._timelineGrid.element);
-    this._timelineGrid.gridHeaderElement.id = "timeline-grid-header";
-    this._timelineGrid.gridHeaderElement.classList.add("fill");
-    this._memoryStatistics.setMainTimelineGrid(this._timelineGrid);
-    this._timelineMemorySplitter.mainElement.appendChild(this._timelineGrid.gridHeaderElement);
-
-    // Create gap elements
-    this._topGapElement = this._itemsGraphsElement.createChild("div", "timeline-gap");
-    this._graphRowsElement = this._itemsGraphsElement.createChild("div");
-    this._bottomGapElement = this._itemsGraphsElement.createChild("div", "timeline-gap");
-    this._expandElements = this._itemsGraphsElement.createChild("div");
-    this._expandElements.id = "orphan-expand-elements";
-
-    this._popoverHelper = new WebInspector.PopoverHelper(this.element, this._getPopoverAnchor.bind(this), this._showPopover.bind(this));
-
-    this.element.addEventListener("mousemove", this._mouseMove.bind(this), false);
-    this.element.addEventListener("mouseout", this._mouseOut.bind(this), false);
-    this.element.addEventListener("keydown", this._keyDown.bind(this), false);
-
-    this._expandOffset = 15;
-
-    // Create gpu tasks containers.
-    this._mainThreadTasks = /** @type {!Array.<!TimelineAgent.TimelineEvent>} */ ([]);
-    this._gpuTasks = /** @type {!Array.<!TimelineAgent.TimelineEvent>} */ ([]);
-    var utilizationStripsElement = this._timelineGrid.gridHeaderElement.createChild("div", "timeline-utilization-strips vbox");
-    this._cpuBarsElement = utilizationStripsElement.createChild("div", "timeline-utilization-strip");
-    if (WebInspector.experimentsSettings.gpuTimeline.isEnabled())
-        this._gpuBarsElement = utilizationStripsElement.createChild("div", "timeline-utilization-strip gpu");
-
-    this._createFileSelector();
-    this._registerShortcuts();
-    this._allRecordsCount = 0;
-
-    WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.WillReloadPage, this._willReloadPage, this);
-    WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.Load, this._loadEventFired, this);
-
-    this._createOverviewControls();
     this._selectPresentationMode(this._presentationModeSetting.get());
+    this._detailsSplitView.show(this.element);
 }
 
 WebInspector.TimelinePanel.Mode = {
     Events: "Events",
     Frames: "Frames",
-    Memory: "Memory"
+    Memory: "Memory",
+    FlameChart: "FlameChart"
 };
 
 // Define row and header height, should be in sync with styles for timeline graphs.
@@ -204,96 +120,150 @@
 WebInspector.TimelinePanel.durationFilterPresetsMs = [0, 1, 15];
 
 WebInspector.TimelinePanel.prototype = {
+    _dockSideChanged: function()
+    {
+        var dockSide = WebInspector.dockController.dockSide();
+        var vertically = false;
+        if (dockSide === WebInspector.DockController.State.DockedToBottom)
+            vertically = true;
+        else
+            vertically = !WebInspector.settings.splitVerticallyWhenDockedToRight.get();
+        this._detailsSplitView.setVertical(vertically);
+        this._detailsView.setVertical(vertically);
+    },
+
+    /**
+     * @param {string} title
+     * @param {!DocumentFragment} content
+     */
+    setDetailsContent: function(title, content)
+    {
+        this._detailsView.setContent(title, content);
+    },
+
+    /**
+     * @return {number}
+     */
+    windowStartTime: function()
+    {
+        if (this._windowStartTime)
+            return this._windowStartTime;
+        if (this._model.minimumRecordTime() != -1)
+            return this._model.minimumRecordTime();
+        return 0;
+    },
+
+    /**
+     * @return {number}
+     */
+    windowEndTime: function()
+    {
+        if (this._windowEndTime < Infinity)
+            return this._windowEndTime;
+        if (this._model.maximumRecordTime() != -1)
+            return this._model.maximumRecordTime();
+        return Infinity;
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _sidebarResized: function(event)
+    {
+        var width = /** @type {number} */ (event.data);
+        this._topPane.setSidebarSize(width);
+        for (var i = 0; i < this._currentViews.length; ++i)
+            this._currentViews[i].setSidebarSize(width);
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _onWindowChanged: function(event)
+    {
+        this._windowStartTime = event.data.startTime;
+        this._windowEndTime = event.data.endTime;
+        for (var i = 0; i < this._currentViews.length; ++i)
+            this._currentViews[i].setWindowTimes(this._windowStartTime, this._windowEndTime);
+    },
+
+    /**
+     * @param {number} windowStartTime
+     * @param {number} windowEndTime
+     */
+    setWindowTimes: function(windowStartTime, windowEndTime)
+    {
+        this._windowStartTime = windowStartTime;
+        this._windowEndTime = windowEndTime;
+        this._overviewPane.setWindowTimes(windowStartTime, windowEndTime);
+    },
+
+    /**
+     * @param {string} mode
+     */
+    _viewsForMode: function(mode)
+    {
+        var views = this._viewsMap[mode];
+        if (!views) {
+            var timelineView = new WebInspector.TimelineView(this, this._model, this._glueRecordsSetting, mode);
+            views = {
+                mainViews: [timelineView]
+            };
+            switch (mode) {
+            case WebInspector.TimelinePanel.Mode.Events:
+                views.overviewView = new WebInspector.TimelineEventOverview(this._model);
+                break;
+            case WebInspector.TimelinePanel.Mode.Frames:
+                this._frameModel = timelineView.frameModel;
+                views.overviewView = new WebInspector.TimelineFrameOverview(this._model, timelineView.frameModel);
+                break;
+            case WebInspector.TimelinePanel.Mode.Memory:
+                views.overviewView = new WebInspector.TimelineMemoryOverview(this._model);
+                var memoryStatistics = new WebInspector.CountersGraph(timelineView, this._model);
+                views.mainViews.push(memoryStatistics);
+                break;
+            case WebInspector.TimelinePanel.Mode.FlameChart:
+                this._frameModel = new WebInspector.TimelineFrameModel(this._model)
+                views.overviewView = new WebInspector.TimelineFrameOverview(this._model, this._frameModel);
+                var colorGenerator = WebInspector.TimelineFlameChart.colorGenerator(views.overviewView.categoryFillStyles());
+                var dataProviderMain = new WebInspector.TimelineFlameChartDataProvider(this._model, colorGenerator, true);
+                var dataProviderBackground = new WebInspector.TimelineFlameChartDataProvider(this._model, colorGenerator, false);
+                views.mainViews = [
+                    new WebInspector.TimelineFlameChart(this, this._model, dataProviderMain),
+                    new WebInspector.TimelineFlameChart(this, this._model, dataProviderBackground)
+                ];
+                break;
+            default:
+                console.assert(false, "Unknown mode: " + mode);
+            }
+            for (var i = 0; i < views.mainViews.length; ++i)
+                views.mainViews[i].addEventListener(WebInspector.SplitView.Events.SidebarSizeChanged, this._sidebarResized, this);
+            this._viewsMap[mode] = views;
+        }
+        return views;
+    },
+
     _createPresentationSelector: function()
     {
-        this._presentationSelector = new WebInspector.View();
-        this._presentationSelector.element.classList.add("hbox");
-        this._presentationSelector.element.id = "timeline-overview-panel";
-        this._presentationSelector.show(this.element);
+        this._viewsMap = {};
 
-        this._topPaneSidebarElement = this._presentationSelector.element.createChild("div");
-        this._topPaneSidebarElement.id = "timeline-overview-sidebar";
+        var topPaneSidebarElement = this._topPane.sidebarElement();
+        topPaneSidebarElement.id = "timeline-overview-sidebar";
 
-        var overviewTreeElement = this._topPaneSidebarElement.createChild("ol", "sidebar-tree vbox");
+        var overviewTreeElement = topPaneSidebarElement.createChild("ol", "sidebar-tree vbox");
         var topPaneSidebarTree = new TreeOutline(overviewTreeElement);
 
         this._overviewItems = {};
-        this._overviewItems[WebInspector.TimelinePanel.Mode.Events] = new WebInspector.SidebarTreeElement("timeline-overview-sidebar-events",
-            WebInspector.UIString("Events"));
-        this._overviewItems[WebInspector.TimelinePanel.Mode.Frames] = new WebInspector.SidebarTreeElement("timeline-overview-sidebar-frames",
-            WebInspector.UIString("Frames"));
-        this._overviewItems[WebInspector.TimelinePanel.Mode.Memory] = new WebInspector.SidebarTreeElement("timeline-overview-sidebar-memory",
-            WebInspector.UIString("Memory"));
-
-        for (var mode in this._overviewItems) {
+        for (var mode in WebInspector.TimelinePanel.Mode) {
+            if (mode === WebInspector.TimelinePanel.Mode.FlameChart && !WebInspector.experimentsSettings.timelineFlameChart.isEnabled())
+                continue;
+            this._overviewItems[mode] = new WebInspector.SidebarTreeElement("timeline-overview-sidebar-" + mode.toLowerCase(), WebInspector.UIString(mode));
             var item = this._overviewItems[mode];
             item.onselect = this._onModeChanged.bind(this, mode);
             topPaneSidebarTree.appendChild(item);
         }
     },
 
-    get calculator()
-    {
-        return this._calculator;
-    },
-
-    defaultFocusedElement: function()
-    {
-        return this.element;
-    },
-
-    /**
-     * @return {!WebInspector.SearchableView}
-     */
-    searchableView: function()
-    {
-        return this._searchableView;
-    },
-
-    /**
-     * @param {!WebInspector.FilterBar} filterBar
-     * @return {boolean}
-     */
-    _createFilters: function(filterBar)
-    {
-        this._textFilter = new WebInspector.TextFilterUI();
-        this._textFilter.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._textFilterChanged, this);
-        filterBar.addFilter(this._textFilter);
-
-        var durationOptions = [];
-        for (var presetIndex = 0; presetIndex < WebInspector.TimelinePanel.durationFilterPresetsMs.length; ++presetIndex) {
-            var durationMs = WebInspector.TimelinePanel.durationFilterPresetsMs[presetIndex];
-            var durationOption = {};
-            if (!durationMs) {
-                durationOption.label = WebInspector.UIString("All");
-                durationOption.title = WebInspector.UIString("Show all records");
-            } else {
-                durationOption.label = WebInspector.UIString("\u2265 %dms", durationMs);
-                durationOption.title = WebInspector.UIString("Hide records shorter than %dms", durationMs);
-            }
-            durationOption.value = durationMs;
-            durationOptions.push(durationOption);
-        }
-        this._durationFilter = new WebInspector.TimelineIsLongFilter();
-        this._durationComboBoxFilter = new WebInspector.ComboBoxFilterUI(durationOptions);
-        this._durationComboBoxFilter.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._durationFilterChanged, this);
-        filterBar.addFilter(this._durationComboBoxFilter);
-
-        this._categoryFilters = {};
-        var categoryTypes = [];
-        var categories = WebInspector.TimelinePresentationModel.categories();
-        for (var categoryName in categories) {
-            var category = categories[categoryName];
-            if (category.overviewStripGroupIndex < 0)
-                continue;
-            var filter = new WebInspector.CheckboxFilterUI(category.name, category.title);
-            filter.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._categoriesFilterChanged.bind(this, category.name), this);
-            filterBar.addFilter(filter);
-            this._categoryFilters[category.name] = filter;
-        }
-        return true;
-    },
-
     _createStatusBarItems: function()
     {
         var panelStatusBarElement = this.element.createChild("div", "panel-status-bar");
@@ -305,7 +275,7 @@
         panelStatusBarElement.appendChild(this.toggleTimelineButton.element);
 
         this.clearButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear"), "clear-status-bar-item");
-        this.clearButton.addEventListener("click", this._clearPanel, this);
+        this.clearButton.addEventListener("click", this._onClearButtonClick, this);
         this._statusBarButtons.push(this.clearButton);
         panelStatusBarElement.appendChild(this.clearButton.element);
 
@@ -323,62 +293,65 @@
         this._statusBarButtons.push(this._glueParentButton);
         panelStatusBarElement.appendChild(this._glueParentButton.element);
 
-        panelStatusBarElement.appendChild(WebInspector.SettingsTab.createSettingCheckbox(WebInspector.UIString("Capture stacks"), WebInspector.settings.timelineCaptureStacks, true, undefined,
+        panelStatusBarElement.appendChild(WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Capture stacks"), WebInspector.settings.timelineCaptureStacks, true, undefined,
                                                WebInspector.UIString("Capture JavaScript stack on every timeline event")));
 
         this._statusTextContainer = panelStatusBarElement.createChild("div");
-        this.recordsCounter = new WebInspector.StatusBarText("");
+        this.recordsCounter = new WebInspector.StatusBarText("", "timeline-records-counter");
         this._statusTextContainer.appendChild(this.recordsCounter.element);
 
         this._miscStatusBarItems = panelStatusBarElement.createChild("div", "status-bar-item");
 
-        var hasFilters = this._createFilters(this._filterBar);
-        this._filterBar.filterButton().setEnabled(hasFilters);
         this._filtersContainer = this.element.createChild("div", "timeline-filters-header hidden");
         this._filtersContainer.appendChild(this._filterBar.filtersElement());
         this._filterBar.addEventListener(WebInspector.FilterBar.Events.FiltersToggled, this._onFiltersToggled, this);
     },
 
-    _textFilterChanged: function(event)
+    _updateFiltersBar: function()
     {
-        var searchQuery = this._textFilter.value();
-        this._presentationModel.setSearchFilter(null);
-        delete this._searchFilter;
-
-        function cleanRecord(record)
-        {
-            delete record.clicked;
-        }
-        WebInspector.TimelinePresentationModel.forAllRecords(this._presentationModel.rootRecord().children, cleanRecord);
-
-        this.searchCanceled();
-        if (searchQuery) {
-            this._searchFilter = new WebInspector.TimelineSearchFilter(createPlainTextSearchRegex(searchQuery, "i"));
-            this._presentationModel.setSearchFilter(this._searchFilter);
-        }
-        this._invalidateAndScheduleRefresh(true, true);
+        this._filterBar.clear();
+        var hasFilters = this._currentViews[0].createUIFilters(this._filterBar);
+        this._filterBar.filterButton().setEnabled(hasFilters);
     },
 
-    _durationFilterChanged: function()
+    /**
+     * @return {!Element}
+     */
+    defaultFocusedElement: function()
     {
-        var duration = this._durationComboBoxFilter.value();
-        var minimumRecordDuration = +duration / 1000.0;
-        this._durationFilter.setMinimumRecordDuration(minimumRecordDuration);
-        this._invalidateAndScheduleRefresh(true, true);
+        return this.element;
     },
 
-    _categoriesFilterChanged: function(name, event)
+    /**
+     * @return {!WebInspector.SearchableView}
+     */
+    searchableView: function()
     {
-        var categories = WebInspector.TimelinePresentationModel.categories();
-        categories[name].hidden = !this._categoryFilters[name].checked();
-        this._invalidateAndScheduleRefresh(true, true);
+        return this._currentViews[0].searchableView();
     },
 
     _onFiltersToggled: function(event)
     {
         var toggled = /** @type {boolean} */ (event.data);
         this._filtersContainer.enableStyleClass("hidden", !toggled);
-        this.onResize();
+        this.doResize();
+    },
+
+    /**
+     * @return {?WebInspector.ProgressIndicator}
+     */
+    _prepareToLoadTimeline: function()
+    {
+        if (this._operationInProgress)
+            return null;
+        if (this._recordingInProgress()) {
+            this.toggleTimelineButton.toggled = false;
+            this._stopRecording();
+        }
+        var progressIndicator = new WebInspector.ProgressIndicator();
+        progressIndicator.addEventListener(WebInspector.ProgressIndicator.Events.Done, this._setOperationInProgress.bind(this, null));
+        this._setOperationInProgress(progressIndicator);
+        return progressIndicator;
     },
 
     /**
@@ -389,7 +362,7 @@
         this._operationInProgress = !!indicator;
         for (var i = 0; i < this._statusBarButtons.length; ++i)
             this._statusBarButtons[i].setEnabled(!this._operationInProgress);
-        this._glueParentButton.setEnabled(!this._operationInProgress && !this._frameController);
+        this._glueParentButton.setEnabled(!this._operationInProgress && !this._glueMode);
         this._statusTextContainer.enableStyleClass("hidden", !!indicator);
         this._miscStatusBarItems.removeChildren();
         if (indicator)
@@ -398,9 +371,9 @@
 
     _registerShortcuts: function()
     {
-        this.registerShortcuts(WebInspector.TimelinePanelDescriptor.ShortcutKeys.StartStopRecording, this._toggleTimelineButtonClicked.bind(this));
-        this.registerShortcuts(WebInspector.TimelinePanelDescriptor.ShortcutKeys.SaveToFile, this._saveToFile.bind(this));
-        this.registerShortcuts(WebInspector.TimelinePanelDescriptor.ShortcutKeys.LoadFromFile, this._selectFileToLoad.bind(this));
+        this.registerShortcuts(WebInspector.ShortcutsScreen.TimelinePanelShortcuts.StartStopRecording, this._toggleTimelineButtonClicked.bind(this));
+        this.registerShortcuts(WebInspector.ShortcutsScreen.TimelinePanelShortcuts.SaveToFile, this._saveToFile.bind(this));
+        this.registerShortcuts(WebInspector.ShortcutsScreen.TimelinePanelShortcuts.LoadFromFile, this._selectFileToLoad.bind(this));
     },
 
     _createFileSelector: function()
@@ -462,131 +435,6 @@
         this._model.loadFromURL(url, progressIndicator);
     },
 
-    _dockSideChanged: function()
-    {
-        var dockSide = WebInspector.dockController.dockSide();
-        var vertically = false;
-        if (dockSide === WebInspector.DockController.State.DockedToBottom)
-            vertically = true;
-        else
-            vertically = !WebInspector.settings.splitVerticallyWhenDockedToRight.get();
-        this._detailsSplitView.setVertical(vertically);
-        this._detailsView.setVertical(vertically);
-    },
-
-    /**
-     * @return {?WebInspector.ProgressIndicator}
-     */
-    _prepareToLoadTimeline: function()
-    {
-        if (this._operationInProgress)
-            return null;
-        if (this._recordingInProgress()) {
-            this.toggleTimelineButton.toggled = false;
-            this._stopRecording();
-        }
-        var progressIndicator = new WebInspector.ProgressIndicator();
-        progressIndicator.addEventListener(WebInspector.ProgressIndicator.Events.Done, this._setOperationInProgress.bind(this, null));
-        this._setOperationInProgress(progressIndicator);
-        return progressIndicator;
-    },
-
-    _rootRecord: function()
-    {
-        return this._presentationModel.rootRecord();
-    },
-
-    _updateRecordsCounter: function(recordsInWindowCount)
-    {
-        this.recordsCounter.setText(WebInspector.UIString("%d of %d records shown", recordsInWindowCount, this._allRecordsCount));
-    },
-
-    _updateFrameStatistics: function(frames)
-    {
-        this._lastFrameStatistics = frames.length ? new WebInspector.FrameStatistics(frames) : null;
-    },
-
-    _updateEventDividers: function()
-    {
-        this._timelineGrid.removeEventDividers();
-        var clientWidth = this._graphRowsElementWidth;
-        var dividers = [];
-        var eventDividerRecords = this._presentationModel.eventDividerRecords();
-
-        for (var i = 0; i < eventDividerRecords.length; ++i) {
-            var record = eventDividerRecords[i];
-            var positions = this._calculator.computeBarGraphWindowPosition(record);
-            var dividerPosition = Math.round(positions.left);
-            if (dividerPosition < 0 || dividerPosition >= clientWidth || dividers[dividerPosition])
-                continue;
-            var divider = WebInspector.TimelinePresentationModel.createEventDivider(record.type, record.title);
-            divider.style.left = dividerPosition + "px";
-            dividers[dividerPosition] = divider;
-        }
-        this._timelineGrid.addEventDividers(dividers);
-    },
-
-    _updateFrameBars: function(frames)
-    {
-        var clientWidth = this._graphRowsElementWidth;
-        if (this._frameContainer)
-            this._frameContainer.removeChildren();
-        else {
-            const frameContainerBorderWidth = 1;
-            this._frameContainer = document.createElement("div");
-            this._frameContainer.classList.add("fill");
-            this._frameContainer.classList.add("timeline-frame-container");
-            this._frameContainer.style.height = WebInspector.TimelinePanel.rowHeight + frameContainerBorderWidth + "px";
-            this._frameContainer.addEventListener("dblclick", this._onFrameDoubleClicked.bind(this), false);
-        }
-
-        var dividers = [ this._frameContainer ];
-
-        for (var i = 0; i < frames.length; ++i) {
-            var frame = frames[i];
-            var frameStart = this._calculator.computePosition(frame.startTime);
-            var frameEnd = this._calculator.computePosition(frame.endTime);
-
-            var frameStrip = document.createElement("div");
-            frameStrip.className = "timeline-frame-strip";
-            var actualStart = Math.max(frameStart, 0);
-            var width = frameEnd - actualStart;
-            frameStrip.style.left = actualStart + "px";
-            frameStrip.style.width = width + "px";
-            frameStrip._frame = frame;
-
-            const minWidthForFrameInfo = 60;
-            if (width > minWidthForFrameInfo)
-                frameStrip.textContent = Number.secondsToString(frame.endTime - frame.startTime, true);
-
-            this._frameContainer.appendChild(frameStrip);
-
-            if (actualStart > 0) {
-                var frameMarker = WebInspector.TimelinePresentationModel.createEventDivider(WebInspector.TimelineModel.RecordType.BeginFrame);
-                frameMarker.style.left = frameStart + "px";
-                dividers.push(frameMarker);
-            }
-        }
-        this._timelineGrid.addEventDividers(dividers);
-    },
-
-    _onFrameDoubleClicked: function(event)
-    {
-        var frameBar = event.target.enclosingNodeOrSelfWithClass("timeline-frame-strip");
-        if (!frameBar)
-            return;
-        this._overviewPane.zoomToFrame(frameBar._frame);
-    },
-
-    _createOverviewControls: function()
-    {
-        this._overviewControls = {};
-        this._overviewControls[WebInspector.TimelinePanel.Mode.Events] = new WebInspector.TimelineEventOverview(this._model);
-        this._frameOverviewControl = new WebInspector.TimelineFrameOverview(this._model);
-        this._overviewControls[WebInspector.TimelinePanel.Mode.Frames] = this._frameOverviewControl;
-        this._overviewControls[WebInspector.TimelinePanel.Mode.Memory] = new WebInspector.TimelineMemoryOverview(this._model);
-    },
-
     _selectPresentationMode: function(mode)
     {
         if (!this._overviewItems[mode])
@@ -596,36 +444,23 @@
 
     _onModeChanged: function(mode)
     {
-        this._overviewPane.willSetOverviewControl(this._overviewControls[mode]);
-
-        var shouldShowMemory = mode === WebInspector.TimelinePanel.Mode.Memory;
-        var frameMode = mode === WebInspector.TimelinePanel.Mode.Frames;
+        this.element.classList.remove("timeline-" + this._presentationModeSetting.get().toLowerCase() + "-view");
         this._presentationModeSetting.set(mode);
-        if (frameMode !== this._frameMode) {
-            this._frameMode = frameMode;
-            this._glueParentButton.setEnabled(!frameMode);
-            this._presentationModel.setGlueRecords(this._glueParentButton.toggled && !frameMode);
-            this._repopulateRecords();
-
-            if (frameMode) {
-                this.element.classList.add("timeline-frame-overview");
-                this.recordsCounter.element.classList.add("hidden");
-                this._frameController = new WebInspector.TimelineFrameController(this._model, this._frameOverviewControl, this._presentationModel);
-            } else {
-                this._frameController.dispose();
-                this._frameController = null;
-                this.element.classList.remove("timeline-frame-overview");
-                this.recordsCounter.element.classList.remove("hidden");
-            }
+        this.element.classList.add("timeline-" + mode.toLowerCase() + "-view");
+        this._stackView.detachChildViews();
+        var views = this._viewsForMode(mode);
+        this._currentViews = views.mainViews;
+        this._updateFiltersBar();
+        this._glueMode = true;
+        for (var i = 0; i < this._currentViews.length; ++i) {
+            var view = this._currentViews[i];
+            view.setWindowTimes(this.windowStartTime(), this.windowEndTime());
+            this._stackView.appendView(view, "timeline-view");
+            this._glueMode = this._glueMode && view.supportsGlueParentMode();
         }
-
-        if (shouldShowMemory)
-            this._timelineMemorySplitter.showBoth();
-        else
-            this._timelineMemorySplitter.showOnlyFirst();
-        this.onResize();
-        this._updateSelectionDetails();
-        this._overviewPane.didSetOverviewControl();
+        this._overviewControl = views.overviewView;
+        this._overviewPane.setOverviewControl(this._overviewControl);
+        this._glueParentButton.setEnabled(this._glueMode);
     },
 
     /**
@@ -668,103 +503,22 @@
     {
         var newValue = !this._glueParentButton.toggled;
         this._glueParentButton.toggled = newValue;
-        this._presentationModel.setGlueRecords(newValue);
         this._glueRecordsSetting.set(newValue);
-        this._repopulateRecords();
     },
 
-    _repopulateRecords: function()
-    {
-        this._resetPanel();
-        this._automaticallySizeWindow = false;
-        var records = this._model.records;
-        for (var i = 0; i < records.length; ++i)
-            this._innerAddRecordToTimeline(records[i]);
-        this._invalidateAndScheduleRefresh(false, false);
-    },
-
-    _onTimelineEventRecorded: function(event)
-    {
-        if (this._innerAddRecordToTimeline(/** @type {!TimelineAgent.TimelineEvent} */(event.data)))
-            this._invalidateAndScheduleRefresh(false, false);
-    },
-
-    /**
-     * @param {!TimelineAgent.TimelineEvent} record
-     * @return {boolean}
-     */
-    _innerAddRecordToTimeline: function(record)
-    {
-        if (record.type === WebInspector.TimelineModel.RecordType.Program)
-            this._mainThreadTasks.push(record);
-
-        if (record.type === WebInspector.TimelineModel.RecordType.GPUTask) {
-            this._gpuTasks.push(record);
-            return WebInspector.TimelineModel.startTimeInSeconds(record) < this._overviewPane.windowEndTime();
-        }
-
-        var records = this._presentationModel.addRecord(record);
-        this._allRecordsCount += records.length;
-        var hasVisibleRecords = false;
-        var presentationModel = this._presentationModel;
-        function checkVisible(record)
-        {
-            hasVisibleRecords |= presentationModel.isVisible(record);
-        }
-        WebInspector.TimelinePresentationModel.forAllRecords(records, checkVisible);
-
-        function isAdoptedRecord(record)
-        {
-            return record.parent !== presentationModel.rootRecord;
-        }
-        // Tell caller update is necessary either if we added a visible record or if we re-parented a record.
-        return hasVisibleRecords || records.some(isAdoptedRecord);
-    },
-
-    _sidebarResized: function()
-    {
-        var width = this._sidebarView.sidebarWidth();
-        this._topPaneSidebarElement.style.flexBasis = width + "px";
-        if (this._presentationModeSetting.get() === WebInspector.TimelinePanel.Mode.Memory)
-            this._memoryStatistics.setSidebarWidth(width);
-        this._timelineGrid.gridHeaderElement.style.left = width + "px";
-    },
-
-    /**
-     * @param {number} width
-     */
-    setSidebarWidth: function(width)
-    {
-        if (this._presentationModeSetting.get() === WebInspector.TimelinePanel.Mode.Memory)
-            this._sidebarView.setSidebarWidth(width);
-    },
-
-    _onViewportResize: function()
-    {
-        this._resize(this._sidebarView.sidebarWidth());
-    },
-
-    /**
-     * @param {number} sidebarWidth
-     */
-    _resize: function(sidebarWidth)
-    {
-        this._closeRecordDetails();
-        this._graphRowsElementWidth = this._graphRowsElement.offsetWidth;
-        this._containerElementHeight = this._containerElement.clientHeight;
-        this._timelineGrid.gridHeaderElement.style.width = this._itemsGraphsElement.offsetWidth + "px";
-        this._scheduleRefresh(false, true);
-    },
-
-    _clearPanel: function()
+    _onClearButtonClick: function()
     {
         this._model.reset();
     },
 
     _onRecordsCleared: function()
     {
-        this._resetPanel();
-        this._invalidateAndScheduleRefresh(true, true);
+        this.setWindowTimes(0, Infinity);
+        if (this._frameModel)
+            this._frameModel.reset();
+        for (var i = 0; i < this._currentViews.length; ++i)
+            this._currentViews[i].reset();
+        this._overviewControl.reset();
     },
 
     _onRecordingStarted: function()
@@ -784,755 +538,6 @@
         this.toggleTimelineButton.toggled = false;
     },
 
-    _resetPanel: function()
-    {
-        this._presentationModel.reset();
-        this._boundariesAreValid = false;
-        this._adjustScrollPosition(0);
-        this._closeRecordDetails();
-        this._allRecordsCount = 0;
-        this._automaticallySizeWindow = true;
-        this._mainThreadTasks = [];
-        this._gpuTasks = [];
-    },
-
-    elementsToRestoreScrollPositionsFor: function()
-    {
-        return [this._containerElement];
-    },
-
-    wasShown: function()
-    {
-        WebInspector.Panel.prototype.wasShown.call(this);
-        if (!WebInspector.TimelinePanel._categoryStylesInitialized) {
-            WebInspector.TimelinePanel._categoryStylesInitialized = true;
-            this._injectCategoryStyles();
-        }
-        this._overviewPane.willSetOverviewControl(this._overviewControls[this._presentationModeSetting.get()]);
-        this._onViewportResize();
-        this._refresh();
-    },
-
-    willHide: function()
-    {
-        this._closeRecordDetails();
-        WebInspector.Panel.prototype.willHide.call(this);
-    },
-
-    _onScroll: function(event)
-    {
-        this._closeRecordDetails();
-        this._scrollTop = this._containerElement.scrollTop;
-        var dividersTop = Math.max(0, this._scrollTop);
-        this._timelineGrid.setScrollAndDividerTop(this._scrollTop, dividersTop);
-        this._scheduleRefresh(true, true);
-    },
-
-    /**
-     * @param {boolean} preserveBoundaries
-     * @param {boolean} userGesture
-     */
-    _invalidateAndScheduleRefresh: function(preserveBoundaries, userGesture)
-    {
-        this._presentationModel.invalidateFilteredRecords();
-        delete this._searchResults;
-        this._scheduleRefresh(preserveBoundaries, userGesture);
-    },
-
-    /**
-     * @param {?WebInspector.TimelinePresentationModel.Record} record
-     */
-    _selectRecord: function(record)
-    {
-        if (record === this._lastSelectedRecord)
-            return;
-
-        // Remove selection rendering.
-        if (this._lastSelectedRecord) {
-            var listRow = /** @type {!WebInspector.TimelineRecordListRow} */ (this._lastSelectedRecord.getUserObject("WebInspector.TimelineRecordListRow"));
-            if (listRow)
-                listRow.renderAsSelected(false);
-            var graphRow = /** @type {!WebInspector.TimelineRecordGraphRow} */ (this._lastSelectedRecord.getUserObject("WebInspector.TimelineRecordGraphRow"));
-            if (graphRow)
-                graphRow.renderAsSelected(false);
-        }
-
-        if (!record) {
-            this._updateSelectionDetails();
-            return;
-        }
-
-        this._revealRecord(record);
-        this._lastSelectedRecord = record;
-        var listRow = /** @type {!WebInspector.TimelineRecordListRow} */ (record.getUserObject("WebInspector.TimelineRecordListRow"));
-        listRow.renderAsSelected(true);
-        var graphRow = /** @type {!WebInspector.TimelineRecordListRow} */ (record.getUserObject("WebInspector.TimelineRecordGraphRow"));
-        graphRow.renderAsSelected(true);
-
-        record.generatePopupContent(showCallback.bind(this));
-
-        /**
-         * @param {!DocumentFragment} element
-         */
-        function showCallback(element)
-        {
-            this._detailsView.setContent(record.title, element);
-        }
-    },
-
-    _updateSelectionDetails: function()
-    {
-        var startTime = this._overviewPane.windowStartTime() * 1000;
-        var endTime = this._overviewPane.windowEndTime() * 1000;
-        // Return early in case 0 selection window.
-        if (startTime < 0)
-            return;
-
-        var aggregatedStats = {};
-
-        /**
-         * @param {number} value
-         * @param {!TimelineAgent.TimelineEvent} task
-         * @return {number}
-         */
-        function compareEndTime(value, task)
-        {
-            return value < task.endTime ? -1 : 1;
-        }
-
-        /**
-         * @param {!TimelineAgent.TimelineEvent} rawRecord
-         */
-        function aggregateTimeForRecordWithinWindow(rawRecord)
-        {
-            if (!rawRecord.endTime || rawRecord.endTime < startTime || rawRecord.startTime > endTime)
-                return;
-
-            var childrenTime = 0;
-            var children = rawRecord.children || [];
-            for (var i = 0; i < children.length; ++i) {
-                var child = children[i];
-                if (!child.endTime || child.endTime < startTime || child.startTime > endTime)
-                    continue;
-                childrenTime += Math.min(endTime, child.endTime) - Math.max(startTime, child.startTime);
-                aggregateTimeForRecordWithinWindow(child);
-            }
-            var categoryName = WebInspector.TimelinePresentationModel.categoryForRecord(rawRecord).name;
-            var ownTime = Math.min(endTime, rawRecord.endTime) - Math.max(startTime, rawRecord.startTime) - childrenTime;
-            aggregatedStats[categoryName] = (aggregatedStats[categoryName] || 0) + ownTime / 1000;
-        }
-
-        var taskIndex = insertionIndexForObjectInListSortedByFunction(startTime, this._mainThreadTasks, compareEndTime);
-        for (; taskIndex < this._mainThreadTasks.length; ++taskIndex) {
-            var task = this._mainThreadTasks[taskIndex];
-            if (task.startTime > endTime)
-                break;
-            aggregateTimeForRecordWithinWindow(task);
-        }
-
-        var aggregatedTotal = 0;
-        for (var categoryName in aggregatedStats)
-            aggregatedTotal += aggregatedStats[categoryName];
-        aggregatedStats["idle"] = Math.max(0, (endTime - startTime) / 1000 - aggregatedTotal);
-
-        var fragment = document.createDocumentFragment();
-        var pie = WebInspector.TimelinePresentationModel.generatePieChart(aggregatedStats);
-        fragment.appendChild(pie.element);
-
-        if (this._frameMode && this._lastFrameStatistics) {
-            var title = WebInspector.UIString("%s \u2013 %s (%d frames)", Number.secondsToString(this._lastFrameStatistics.startOffset, true), Number.secondsToString(this._lastFrameStatistics.endOffset, true), this._lastFrameStatistics.frameCount);
-            fragment.appendChild(WebInspector.TimelinePresentationModel.generatePopupContentForFrameStatistics(this._lastFrameStatistics));
-        } else {
-            var title = WebInspector.UIString("%s \u2013 %s", this._calculator.formatTime(0, true), this._calculator.formatTime(this._calculator.boundarySpan(), true));
-        }
-        this._detailsView.setContent(title, fragment);
-    },
-
-    _windowChanged: function()
-    {
-        this._invalidateAndScheduleRefresh(false, true);
-        this._selectRecord(null);
-    },
-
-    /**
-     * @param {boolean} preserveBoundaries
-     * @param {boolean} userGesture
-     */
-    _scheduleRefresh: function(preserveBoundaries, userGesture)
-    {
-        this._closeRecordDetails();
-        this._boundariesAreValid &= preserveBoundaries;
-
-        if (!this.isShowing())
-            return;
-
-        if (preserveBoundaries || userGesture)
-            this._refresh();
-        else {
-            if (!this._refreshTimeout)
-                this._refreshTimeout = setTimeout(this._refresh.bind(this), 300);
-        }
-    },
-
-    _refresh: function()
-    {
-        if (this._refreshTimeout) {
-            clearTimeout(this._refreshTimeout);
-            delete this._refreshTimeout;
-        }
-
-        this._timelinePaddingLeft = this._expandOffset;
-        this._calculator.setWindow(this._overviewPane.windowStartTime(), this._overviewPane.windowEndTime());
-        this._calculator.setDisplayWindow(this._timelinePaddingLeft, this._graphRowsElementWidth);
-
-        var recordsInWindowCount = this._refreshRecords();
-        this._updateRecordsCounter(recordsInWindowCount);
-        if (!this._boundariesAreValid) {
-            this._updateEventDividers();
-            var frames = this._frameController && this._presentationModel.filteredFrames(this._overviewPane.windowStartTime(), this._overviewPane.windowEndTime());
-            if (frames) {
-                this._updateFrameStatistics(frames);
-                const maxFramesForFrameBars = 30;
-                if  (frames.length && frames.length < maxFramesForFrameBars) {
-                    this._timelineGrid.removeDividers();
-                    this._updateFrameBars(frames);
-                } else
-                    this._timelineGrid.updateDividers(this._calculator);
-            } else
-                this._timelineGrid.updateDividers(this._calculator);
-            this._refreshAllUtilizationBars();
-        }
-        if (this._presentationModeSetting.get() === WebInspector.TimelinePanel.Mode.Memory)
-            this._memoryStatistics.refresh();
-        this._boundariesAreValid = true;
-    },
-
-    revealRecordAt: function(time)
-    {
-        var recordToReveal;
-        function findRecordToReveal(record)
-        {
-            if (record.containsTime(time)) {
-                recordToReveal = record;
-                return true;
-            }
-            // If there is no record containing the time than use the latest one before that time.
-            if (!recordToReveal || record.endTime < time && recordToReveal.endTime < record.endTime)
-                recordToReveal = record;
-            return false;
-        }
-        WebInspector.TimelinePresentationModel.forAllRecords(this._presentationModel.rootRecord().children, null, findRecordToReveal);
-
-        // The record ends before the window left bound so scroll to the top.
-        if (!recordToReveal) {
-            this._containerElement.scrollTop = 0;
-            return;
-        }
-
-        this._revealRecord(recordToReveal, true);
-    },
-
-    /**
-     * @param {boolean=} highlight
-     */
-    _revealRecord: function(recordToReveal, highlight)
-    {
-        // Expand all ancestors.
-        for (var parent = recordToReveal.parent; parent !== this._rootRecord(); parent = parent.parent) {
-            if (!parent.collapsed)
-                continue;
-            this._presentationModel.invalidateFilteredRecords();
-            parent.collapsed = false;
-        }
-        var recordsInWindow = this._presentationModel.filteredRecords();
-        var index = recordsInWindow.indexOf(recordToReveal);
-        if (highlight)
-            this._recordToHighlight = recordToReveal;
-
-        var itemOffset = index * WebInspector.TimelinePanel.rowHeight;
-        var visibleTop = this._scrollTop - WebInspector.TimelinePanel.headerHeight;
-        var visibleBottom = visibleTop + this._containerElementHeight - WebInspector.TimelinePanel.rowHeight;
-        if (itemOffset < visibleTop)
-            this._containerElement.scrollTop = itemOffset;
-        else if (itemOffset > visibleBottom)
-            this._containerElement.scrollTop = itemOffset - this._containerElementHeight + WebInspector.TimelinePanel.headerHeight + WebInspector.TimelinePanel.rowHeight;
-        else if (highlight)
-            this._refresh();
-    },
-
-    _refreshRecords: function()
-    {
-        var recordsInWindow = this._presentationModel.filteredRecords();
-
-        // Calculate the visible area.
-        var visibleTop = this._scrollTop;
-        var visibleBottom = visibleTop + this._containerElementHeight;
-
-        var rowHeight = WebInspector.TimelinePanel.rowHeight;
-        var headerHeight = WebInspector.TimelinePanel.headerHeight;
-
-        // Convert visible area to visible indexes. Always include top-level record for a visible nested record.
-        var startIndex = Math.max(0, Math.min(Math.floor((visibleTop - headerHeight) / rowHeight), recordsInWindow.length - 1));
-        var endIndex = Math.min(recordsInWindow.length, Math.ceil(visibleBottom / rowHeight));
-        var lastVisibleLine = Math.max(0, Math.floor((visibleBottom - headerHeight) / rowHeight));
-        if (this._automaticallySizeWindow && recordsInWindow.length > lastVisibleLine) {
-            this._automaticallySizeWindow = false;
-            // If we're at the top, always use real timeline start as a left window bound so that expansion arrow padding logic works.
-            var windowStartTime = startIndex ? recordsInWindow[startIndex].startTime : this._model.minimumRecordTime();
-            this._overviewPane.setWindowTimes(windowStartTime, recordsInWindow[Math.max(0, lastVisibleLine - 1)].endTime);
-            recordsInWindow = this._presentationModel.filteredRecords();
-            endIndex = Math.min(recordsInWindow.length, lastVisibleLine);
-        }
-
-        // Resize gaps first.
-        this._topGapElement.style.height = (startIndex * rowHeight) + "px";
-        this._sidebarView.sidebarElement.firstChild.style.flexBasis = (startIndex * rowHeight + headerHeight) + "px";
-        this._bottomGapElement.style.height = (recordsInWindow.length - endIndex) * rowHeight + "px";
-        var rowsHeight = headerHeight + recordsInWindow.length * rowHeight;
-        var totalHeight = Math.max(this._containerElementHeight, rowsHeight);
-
-        this._sidebarView.firstElement().style.height = totalHeight + "px";
-        this._sidebarView.secondElement().style.height = totalHeight + "px";
-        this._sidebarView.resizerElement().style.height = totalHeight + "px";
-
-        // Update visible rows.
-        var listRowElement = this._sidebarListElement.firstChild;
-        var width = this._graphRowsElementWidth;
-        this._itemsGraphsElement.removeChild(this._graphRowsElement);
-        var graphRowElement = this._graphRowsElement.firstChild;
-        var scheduleRefreshCallback = this._invalidateAndScheduleRefresh.bind(this, true, true);
-        var selectRecordCallback = this._selectRecord.bind(this);
-        this._itemsGraphsElement.removeChild(this._expandElements);
-        this._expandElements.removeChildren();
-
-        var highlightedRecord = this._recordToHighlight;
-        delete this._recordToHighlight;
-        var highlightedListRowElement;
-        var highlightedGraphRowElement;
-
-        for (var i = 0; i < endIndex; ++i) {
-            var record = recordsInWindow[i];
-
-            if (i < startIndex) {
-                var lastChildIndex = i + record.visibleChildrenCount;
-                if (lastChildIndex >= startIndex && lastChildIndex < endIndex) {
-                    var expandElement = new WebInspector.TimelineExpandableElement(this._expandElements);
-                    var positions = this._calculator.computeBarGraphWindowPosition(record);
-                    expandElement._update(record, i, positions.left - this._expandOffset, positions.width);
-                }
-            } else {
-                if (!listRowElement) {
-                    listRowElement = new WebInspector.TimelineRecordListRow(selectRecordCallback, scheduleRefreshCallback).element;
-                    this._sidebarListElement.appendChild(listRowElement);
-                }
-                if (!graphRowElement) {
-                    graphRowElement = new WebInspector.TimelineRecordGraphRow(this._itemsGraphsElement, selectRecordCallback, scheduleRefreshCallback).element;
-                    this._graphRowsElement.appendChild(graphRowElement);
-                }
-
-                if (highlightedRecord === record) {
-                    highlightedListRowElement = listRowElement;
-                    highlightedGraphRowElement = graphRowElement;
-                }
-
-                listRowElement.row.update(record, visibleTop);
-                graphRowElement.row.update(record, this._calculator, this._expandOffset, i);
-                if (this._lastSelectedRecord === record) {
-                    listRowElement.row.renderAsSelected(true);
-                    graphRowElement.row.renderAsSelected(true);
-                }
-
-                listRowElement = listRowElement.nextSibling;
-                graphRowElement = graphRowElement.nextSibling;
-            }
-        }
-
-        // Remove extra rows.
-        while (listRowElement) {
-            var nextElement = listRowElement.nextSibling;
-            listRowElement.row.dispose();
-            listRowElement = nextElement;
-        }
-        while (graphRowElement) {
-            var nextElement = graphRowElement.nextSibling;
-            graphRowElement.row.dispose();
-            graphRowElement = nextElement;
-        }
-
-        this._itemsGraphsElement.insertBefore(this._graphRowsElement, this._bottomGapElement);
-        this._itemsGraphsElement.appendChild(this._expandElements);
-        this._adjustScrollPosition(recordsInWindow.length * rowHeight + headerHeight);
-        this._updateSearchHighlight(false, true);
-
-        if (highlightedListRowElement) {
-            highlightedListRowElement.classList.add("highlighted-timeline-record");
-            highlightedGraphRowElement.classList.add("highlighted-timeline-record");
-        }
-
-        return recordsInWindow.length;
-    },
-
-    _refreshAllUtilizationBars: function()
-    {
-        this._refreshUtilizationBars(WebInspector.UIString("CPU"), this._mainThreadTasks, this._cpuBarsElement);
-        if (WebInspector.experimentsSettings.gpuTimeline.isEnabled())
-            this._refreshUtilizationBars(WebInspector.UIString("GPU"), this._gpuTasks, this._gpuBarsElement);
-    },
-
-    /**
-     * @param {string} name
-     * @param {!Array.<!TimelineAgent.TimelineEvent>} tasks
-     * @param {?Element} container
-     */
-    _refreshUtilizationBars: function(name, tasks, container)
-    {
-        if (!container)
-            return;
-
-        const barOffset = 3;
-        const minGap = 3;
-
-        var minWidth = WebInspector.TimelineCalculator._minWidth;
-        var widthAdjustment = minWidth / 2;
-
-        var width = this._graphRowsElementWidth;
-        var boundarySpan = this._overviewPane.windowEndTime() - this._overviewPane.windowStartTime();
-        var scale = boundarySpan / (width - minWidth - this._timelinePaddingLeft);
-        var startTime = (this._overviewPane.windowStartTime() - this._timelinePaddingLeft * scale) * 1000;
-        var endTime = startTime + width * scale * 1000;
-
-        /**
-         * @param {number} value
-         * @param {!TimelineAgent.TimelineEvent} task
-         * @return {number}
-         */
-        function compareEndTime(value, task)
-        {
-            return value < task.endTime ? -1 : 1;
-        }
-
-        var taskIndex = insertionIndexForObjectInListSortedByFunction(startTime, tasks, compareEndTime);
-
-        var foreignStyle = "gpu-task-foreign";
-        var element = container.firstChild;
-        var lastElement;
-        var lastLeft;
-        var lastRight;
-
-        for (; taskIndex < tasks.length; ++taskIndex) {
-            var task = tasks[taskIndex];
-            if (task.startTime > endTime)
-                break;
-
-            var left = Math.max(0, this._calculator.computePosition(WebInspector.TimelineModel.startTimeInSeconds(task)) + barOffset - widthAdjustment);
-            var right = Math.min(width, this._calculator.computePosition(WebInspector.TimelineModel.endTimeInSeconds(task)) + barOffset + widthAdjustment);
-
-            if (lastElement) {
-                var gap = Math.floor(left) - Math.ceil(lastRight);
-                if (gap < minGap) {
-                    if (!task.data["foreign"])
-                        lastElement.classList.remove(foreignStyle);
-                    lastRight = right;
-                    lastElement._tasksInfo.lastTaskIndex = taskIndex;
-                    continue;
-                }
-                lastElement.style.width = (lastRight - lastLeft) + "px";
-            }
-
-            if (!element)
-                element = container.createChild("div", "timeline-graph-bar");
-            element.style.left = left + "px";
-            element._tasksInfo = {name: name, tasks: tasks, firstTaskIndex: taskIndex, lastTaskIndex: taskIndex};
-            if (task.data["foreign"])
-                element.classList.add(foreignStyle);
-            lastLeft = left;
-            lastRight = right;
-            lastElement = element;
-            element = element.nextSibling;
-        }
-
-        if (lastElement)
-            lastElement.style.width = (lastRight - lastLeft) + "px";
-
-        while (element) {
-            var nextElement = element.nextSibling;
-            element._tasksInfo = null;
-            container.removeChild(element);
-            element = nextElement;
-        }
-    },
-
-    _adjustScrollPosition: function(totalHeight)
-    {
-        // Prevent the container from being scrolled off the end.
-        if ((this._scrollTop + this._containerElementHeight) > totalHeight + 1)
-            this._containerElement.scrollTop = (totalHeight - this._containerElement.offsetHeight);
-    },
-
-    _getPopoverAnchor: function(element)
-    {
-        var anchor = element.enclosingNodeOrSelfWithClass("timeline-graph-bar");
-        if (anchor && anchor._tasksInfo)
-            return anchor;
-        return element.enclosingNodeOrSelfWithClass("timeline-frame-strip");
-    },
-
-    _mouseOut: function()
-    {
-        this._hideQuadHighlight();
-    },
-
-    /**
-     * @param {?Event} e
-     */
-    _mouseMove: function(e)
-    {
-        var rowElement = e.target.enclosingNodeOrSelfWithClass("timeline-tree-item");
-        if (rowElement && rowElement.row && rowElement.row._record.highlightQuad && !this._recordingInProgress())
-            this._highlightQuad(rowElement.row._record.highlightQuad);
-        else
-            this._hideQuadHighlight();
-
-        var taskBarElement = e.target.enclosingNodeOrSelfWithClass("timeline-graph-bar");
-        if (taskBarElement && taskBarElement._tasksInfo) {
-            var offset = taskBarElement.offsetLeft;
-            this._timelineGrid.showCurtains(offset >= 0 ? offset : 0, taskBarElement.offsetWidth);
-        } else
-            this._timelineGrid.hideCurtains();
-    },
-
-    /**
-     * @param {?Event} event
-     */
-    _keyDown: function(event)
-    {
-        if (!this._lastSelectedRecord || event.shiftKey || event.metaKey || event.ctrlKey)
-            return;
-
-        var record = this._lastSelectedRecord;
-        var recordsInWindow = this._presentationModel.filteredRecords();
-        var index = recordsInWindow.indexOf(record);
-        if (index === -1)
-            index = 0;
-
-        switch (event.keyIdentifier) {
-        case "Left":
-            if (record.parent) {
-                if ((!record.expandable || record.collapsed) && record.parent !== this._presentationModel.rootRecord()) {
-                    this._selectRecord(record.parent);
-                } else {
-                    record.collapsed = true;
-                    record.clicked = true;
-                    this._invalidateAndScheduleRefresh(true, true);
-                }
-            }
-            event.consume(true);
-            break;
-        case "Up":
-            if (--index < 0)
-                break;
-            this._selectRecord(recordsInWindow[index]);
-            event.consume(true);
-            break;
-        case "Right":
-            if (record.expandable && record.collapsed) {
-                record.collapsed = false;
-                record.clicked = true;
-                this._invalidateAndScheduleRefresh(true, true);
-            } else {
-                if (++index >= recordsInWindow.length)
-                    break;
-                this._selectRecord(recordsInWindow[index]);
-            }
-            event.consume(true);
-            break;
-        case "Down":
-            if (++index >= recordsInWindow.length)
-                break;
-            this._selectRecord(recordsInWindow[index]);
-            event.consume(true);
-            break;
-        }
-    },
-
-    /**
-     * @param {!Array.<number>} quad
-     */
-    _highlightQuad: function(quad)
-    {
-        if (this._highlightedQuad === quad)
-            return;
-        this._highlightedQuad = quad;
-        DOMAgent.highlightQuad(quad, WebInspector.Color.PageHighlight.Content.toProtocolRGBA(), WebInspector.Color.PageHighlight.ContentOutline.toProtocolRGBA());
-    },
-
-    _hideQuadHighlight: function()
-    {
-        if (this._highlightedQuad) {
-            delete this._highlightedQuad;
-            DOMAgent.hideHighlight();
-        }
-    },
-
-    /**
-     * @param {!Element} anchor
-     * @param {!WebInspector.Popover} popover
-     */
-    _showPopover: function(anchor, popover)
-    {
-        if (anchor.classList.contains("timeline-frame-strip")) {
-            var frame = anchor._frame;
-            popover.show(WebInspector.TimelinePresentationModel.generatePopupContentForFrame(frame), anchor);
-        } else {
-            if (anchor.row && anchor.row._record)
-                anchor.row._record.generatePopupContent(showCallback);
-            else if (anchor._tasksInfo)
-                popover.show(this._presentationModel.generateMainThreadBarPopupContent(anchor._tasksInfo), anchor, null, null, WebInspector.Popover.Orientation.Bottom);
-        }
-
-        function showCallback(popupContent)
-        {
-            popover.show(popupContent, anchor);
-        }
-    },
-
-    _closeRecordDetails: function()
-    {
-        this._popoverHelper.hidePopover();
-    },
-
-    _injectCategoryStyles: function()
-    {
-        var style = document.createElement("style");
-        var categories = WebInspector.TimelinePresentationModel.categories();
-
-        style.textContent = Object.values(categories).map(WebInspector.TimelinePresentationModel.createStyleRuleForCategory).join("\n");
-        document.head.appendChild(style);
-    },
-
-    jumpToNextSearchResult: function()
-    {
-        if (!this._searchResults || !this._searchResults.length)
-            return;
-        var index = this._selectedSearchResult ? this._searchResults.indexOf(this._selectedSearchResult) : -1;
-        this._jumpToSearchResult(index + 1);
-    },
-
-    jumpToPreviousSearchResult: function()
-    {
-        if (!this._searchResults || !this._searchResults.length)
-            return;
-        var index = this._selectedSearchResult ? this._searchResults.indexOf(this._selectedSearchResult) : 0;
-        this._jumpToSearchResult(index - 1);
-    },
-
-    _jumpToSearchResult: function(index)
-    {
-        this._selectSearchResult((index + this._searchResults.length) % this._searchResults.length);
-        this._highlightSelectedSearchResult(true);
-    },
-
-    _selectSearchResult: function(index)
-    {
-        this._selectedSearchResult = this._searchResults[index];
-        this._searchableView.updateCurrentMatchIndex(index);
-    },
-
-    _highlightSelectedSearchResult: function(revealRecord)
-    {
-        this._clearHighlight();
-        if (this._searchFilter)
-            return;
-
-        var record = this._selectedSearchResult;
-        if (!record)
-            return;
-
-        for (var element = this._sidebarListElement.firstChild; element; element = element.nextSibling) {
-            if (element.row._record === record) {
-                element.row.highlight(this._searchRegExp, this._highlightDomChanges);
-                return;
-            }
-        }
-
-        if (revealRecord)
-            this._revealRecord(record, true);
-    },
-
-    _clearHighlight: function()
-    {
-        if (this._highlightDomChanges)
-            WebInspector.revertDomChanges(this._highlightDomChanges);
-        this._highlightDomChanges = [];
-    },
-
-    /**
-     * @param {boolean} revealRecord
-     * @param {boolean} shouldJump
-     */
-    _updateSearchHighlight: function(revealRecord, shouldJump)
-    {
-        if (this._searchFilter || !this._searchRegExp) {
-            this._clearHighlight();
-            return;
-        }
-
-        if (!this._searchResults)
-            this._updateSearchResults(shouldJump);
-        this._highlightSelectedSearchResult(revealRecord);
-    },
-
-    _updateSearchResults: function(shouldJump)
-    {
-        var searchRegExp = this._searchRegExp;
-        if (!searchRegExp)
-            return;
-
-        var matches = [];
-        var presentationModel = this._presentationModel;
-
-        function processRecord(record)
-        {
-            if (presentationModel.isVisible(record) && WebInspector.TimelineRecordListRow.testContentMatching(record, searchRegExp))
-                matches.push(record);
-            return false;
-        }
-        WebInspector.TimelinePresentationModel.forAllRecords(presentationModel.rootRecord().children, processRecord);
-
-        var matchesCount = matches.length;
-        if (matchesCount) {
-            this._searchResults = matches;
-            this._searchableView.updateSearchMatchesCount(matchesCount);
-
-            var selectedIndex = matches.indexOf(this._selectedSearchResult);
-            if (shouldJump && selectedIndex === -1)
-                selectedIndex = 0;
-            this._selectSearchResult(selectedIndex);
-        } else {
-            this._searchableView.updateSearchMatchesCount(0);
-            delete this._selectedSearchResult;
-        }
-    },
-
-    searchCanceled: function()
-    {
-        this._clearHighlight();
-        delete this._searchResults;
-        delete this._selectedSearchResult;
-        delete this._searchRegExp;
-    },
-
-    /**
-     * @param {string} query
-     * @param {boolean} shouldJump
-     */
-    performSearch: function(query, shouldJump)
-    {
-        this._searchRegExp = createPlainTextSearchRegex(query, "i");
-        delete this._searchResults;
-        this._updateSearchHighlight(true, shouldJump);
-    },
-
     /**
      * @param {!WebInspector.Event} event
      */
@@ -1558,454 +563,12 @@
 
 /**
  * @constructor
- * @param {!WebInspector.TimelineModel} model
- * @implements {WebInspector.TimelineGrid.Calculator}
- */
-WebInspector.TimelineCalculator = function(model)
-{
-    this._model = model;
-}
-
-WebInspector.TimelineCalculator._minWidth = 5;
-
-WebInspector.TimelineCalculator.prototype = {
-    /**
-     * @param {number} time
-     */
-    computePosition: function(time)
-    {
-        return (time - this._minimumBoundary) / this.boundarySpan() * this._workingArea + this.paddingLeft;
-    },
-
-    computeBarGraphPercentages: function(record)
-    {
-        var start = (record.startTime - this._minimumBoundary) / this.boundarySpan() * 100;
-        var end = (record.startTime + record.selfTime - this._minimumBoundary) / this.boundarySpan() * 100;
-        var endWithChildren = (record.lastChildEndTime - this._minimumBoundary) / this.boundarySpan() * 100;
-        var cpuWidth = record.coalesced ? endWithChildren - start : record.cpuTime / this.boundarySpan() * 100;
-        return {start: start, end: end, endWithChildren: endWithChildren, cpuWidth: cpuWidth};
-    },
-
-    computeBarGraphWindowPosition: function(record)
-    {
-        var percentages = this.computeBarGraphPercentages(record);
-        var widthAdjustment = 0;
-
-        var left = this.computePosition(record.startTime);
-        var width = (percentages.end - percentages.start) / 100 * this._workingArea;
-        if (width < WebInspector.TimelineCalculator._minWidth) {
-            widthAdjustment = WebInspector.TimelineCalculator._minWidth - width;
-            width = WebInspector.TimelineCalculator._minWidth;
-        }
-        var widthWithChildren = (percentages.endWithChildren - percentages.start) / 100 * this._workingArea + widthAdjustment;
-        var cpuWidth = percentages.cpuWidth / 100 * this._workingArea + widthAdjustment;
-        if (percentages.endWithChildren > percentages.end)
-            widthWithChildren += widthAdjustment;
-        return {left: left, width: width, widthWithChildren: widthWithChildren, cpuWidth: cpuWidth};
-    },
-
-    setWindow: function(minimumBoundary, maximumBoundary)
-    {
-        this._minimumBoundary = minimumBoundary;
-        this._maximumBoundary = maximumBoundary;
-    },
-
-    /**
-     * @param {number} paddingLeft
-     * @param {number} clientWidth
-     */
-    setDisplayWindow: function(paddingLeft, clientWidth)
-    {
-        this._workingArea = clientWidth - WebInspector.TimelineCalculator._minWidth - paddingLeft;
-        this.paddingLeft = paddingLeft;
-    },
-
-    /**
-     * @param {number} value
-     * @param {boolean=} hires
-     * @return {string}
-     */
-    formatTime: function(value, hires)
-    {
-        return Number.secondsToString(value + this._minimumBoundary - this._model.minimumRecordTime(), hires);
-    },
-
-    maximumBoundary: function()
-    {
-        return this._maximumBoundary;
-    },
-
-    minimumBoundary: function()
-    {
-        return this._minimumBoundary;
-    },
-
-    zeroTime: function()
-    {
-        return this._model.minimumRecordTime();
-    },
-
-    boundarySpan: function()
-    {
-        return this._maximumBoundary - this._minimumBoundary;
-    }
-}
-
-/**
- * @constructor
- * @param {function(!WebInspector.TimelinePresentationModel.Record)} selectRecord
- * @param {function()} scheduleRefresh
- */
-WebInspector.TimelineRecordListRow = function(selectRecord, scheduleRefresh)
-{
-    this.element = document.createElement("div");
-    this.element.row = this;
-    this.element.style.cursor = "pointer";
-    this.element.addEventListener("click", this._onClick.bind(this), false);
-    this.element.addEventListener("mouseover", this._onMouseOver.bind(this), false);
-    this.element.addEventListener("mouseout", this._onMouseOut.bind(this), false);
-
-    // Warning is float right block, it goes first.
-    this._warningElement = this.element.createChild("div", "timeline-tree-item-warning hidden");
-
-    this._expandArrowElement = this.element.createChild("div", "timeline-tree-item-expand-arrow");
-    this._expandArrowElement.addEventListener("click", this._onExpandClick.bind(this), false);
-    var iconElement = this.element.createChild("span", "timeline-tree-icon");
-    this._typeElement = this.element.createChild("span", "type");
-
-    this._dataElement = this.element.createChild("span", "data dimmed");
-    this._scheduleRefresh = scheduleRefresh;
-    this._selectRecord = selectRecord;
-}
-
-WebInspector.TimelineRecordListRow.prototype = {
-    update: function(record, offset)
-    {
-        this._record = record;
-        this._offset = offset;
-
-        this.element.className = "timeline-tree-item timeline-category-" + record.category.name;
-        var paddingLeft = 5;
-        var step = -3;
-        for (var currentRecord = record.parent ? record.parent.parent : null; currentRecord; currentRecord = currentRecord.parent)
-            paddingLeft += 12 / (Math.max(1, step++));
-        this.element.style.paddingLeft = paddingLeft + "px";
-        if (record.isBackground)
-            this.element.classList.add("background");
-
-        this._typeElement.textContent = record.title;
-
-        if (this._dataElement.firstChild)
-            this._dataElement.removeChildren();
-
-        this._warningElement.enableStyleClass("hidden", !record.hasWarnings() && !record.childHasWarnings());
-        this._warningElement.enableStyleClass("timeline-tree-item-child-warning", record.childHasWarnings() && !record.hasWarnings());
-
-        if (record.detailsNode())
-            this._dataElement.appendChild(record.detailsNode());
-        this._expandArrowElement.enableStyleClass("parent", record.children && record.children.length);
-        this._expandArrowElement.enableStyleClass("expanded", record.visibleChildrenCount);
-        this._record.setUserObject("WebInspector.TimelineRecordListRow", this);
-    },
-
-    highlight: function(regExp, domChanges)
-    {
-        var matchInfo = this.element.textContent.match(regExp);
-        if (matchInfo)
-            WebInspector.highlightSearchResult(this.element, matchInfo.index, matchInfo[0].length, domChanges);
-    },
-
-    dispose: function()
-    {
-        this.element.remove();
-    },
-
-    /**
-     * @param {!Event} event
-     */
-    _onExpandClick: function(event)
-    {
-        this._record.collapsed = !this._record.collapsed;
-        this._record.clicked = true;
-        this._scheduleRefresh();
-        event.consume(true);
-    },
-
-    /**
-     * @param {?Event} event
-     */
-    _onClick: function(event)
-    {
-        this._selectRecord(this._record);
-    },
-
-    /**
-     * @param {boolean} selected
-     */
-    renderAsSelected: function(selected)
-    {
-        this.element.enableStyleClass("selected", selected);
-    },
-
-    /**
-     * @param {?Event} event
-     */
-    _onMouseOver: function(event)
-    {
-        this.element.classList.add("hovered");
-        var graphRow = /** @type {!WebInspector.TimelineRecordGraphRow} */ (this._record.getUserObject("WebInspector.TimelineRecordGraphRow"));
-        graphRow.element.classList.add("hovered");
-    },
-
-    /**
-     * @param {?Event} event
-     */
-    _onMouseOut: function(event)
-    {
-        this.element.classList.remove("hovered");
-        var graphRow = /** @type {!WebInspector.TimelineRecordGraphRow} */ (this._record.getUserObject("WebInspector.TimelineRecordGraphRow"));
-        graphRow.element.classList.remove("hovered");
-    }
-}
-
-/**
- * @param {!WebInspector.TimelinePresentationModel.Record} record
- * @param {!RegExp} regExp
- */
-WebInspector.TimelineRecordListRow.testContentMatching = function(record, regExp)
-{
-    var toSearchText = record.title;
-    if (record.detailsNode())
-        toSearchText += " " + record.detailsNode().textContent;
-    return regExp.test(toSearchText);
-}
-
-/**
- * @constructor
- * @param {function(!WebInspector.TimelinePresentationModel.Record)} selectRecord
- * @param {function()} scheduleRefresh
- */
-WebInspector.TimelineRecordGraphRow = function(graphContainer, selectRecord, scheduleRefresh)
-{
-    this.element = document.createElement("div");
-    this.element.row = this;
-    this.element.addEventListener("mouseover", this._onMouseOver.bind(this), false);
-    this.element.addEventListener("mouseout", this._onMouseOut.bind(this), false);
-    this.element.addEventListener("click", this._onClick.bind(this), false);
-
-    this._barAreaElement = document.createElement("div");
-    this._barAreaElement.className = "timeline-graph-bar-area";
-    this.element.appendChild(this._barAreaElement);
-
-    this._barWithChildrenElement = document.createElement("div");
-    this._barWithChildrenElement.className = "timeline-graph-bar with-children";
-    this._barWithChildrenElement.row = this;
-    this._barAreaElement.appendChild(this._barWithChildrenElement);
-
-    this._barCpuElement = document.createElement("div");
-    this._barCpuElement.className = "timeline-graph-bar cpu"
-    this._barCpuElement.row = this;
-    this._barAreaElement.appendChild(this._barCpuElement);
-
-    this._barElement = document.createElement("div");
-    this._barElement.className = "timeline-graph-bar";
-    this._barElement.row = this;
-    this._barAreaElement.appendChild(this._barElement);
-
-    this._expandElement = new WebInspector.TimelineExpandableElement(graphContainer);
-
-    this._selectRecord = selectRecord;
-    this._scheduleRefresh = scheduleRefresh;
-}
-
-WebInspector.TimelineRecordGraphRow.prototype = {
-    update: function(record, calculator, expandOffset, index)
-    {
-        this._record = record;
-        this.element.className = "timeline-graph-side timeline-category-" + record.category.name;
-        if (record.isBackground)
-            this.element.classList.add("background");
-
-        var barPosition = calculator.computeBarGraphWindowPosition(record);
-        this._barWithChildrenElement.style.left = barPosition.left + "px";
-        this._barWithChildrenElement.style.width = barPosition.widthWithChildren + "px";
-        this._barElement.style.left = barPosition.left + "px";
-        this._barElement.style.width = barPosition.width + "px";
-        this._barCpuElement.style.left = barPosition.left + "px";
-        this._barCpuElement.style.width = barPosition.cpuWidth + "px";
-        this._expandElement._update(record, index, barPosition.left - expandOffset, barPosition.width);
-
-        this._record.setUserObject("WebInspector.TimelineRecordGraphRow", this);
-    },
-
-    /**
-     * @param {?Event} event
-     */
-    _onClick: function(event)
-    {
-        // check if we click arrow and expand if yes.
-        if (this._expandElement._arrow.containsEventPoint(event))
-            this._expand();
-        this._selectRecord(this._record);
-    },
-
-    /**
-     * @param {boolean} selected
-     */
-    renderAsSelected: function(selected)
-    {
-        this.element.enableStyleClass("selected", selected);
-    },
-
-    _expand: function()
-    {
-        this._record.collapsed = !this._record.collapsed;
-        this._record.clicked = true;
-        this._scheduleRefresh();
-    },
-
-    /**
-     * @param {?Event} event
-     */
-    _onMouseOver: function(event)
-    {
-        this.element.classList.add("hovered");
-        var listRow = /** @type {!WebInspector.TimelineRecordListRow} */ (this._record.getUserObject("WebInspector.TimelineRecordListRow"));
-        listRow.element.classList.add("hovered");
-    },
-
-    /**
-     * @param {?Event} event
-     */
-    _onMouseOut: function(event)
-    {
-        this.element.classList.remove("hovered");
-        var listRow = /** @type {!WebInspector.TimelineRecordListRow} */ (this._record.getUserObject("WebInspector.TimelineRecordListRow"));
-        listRow.element.classList.remove("hovered");
-    },
-
-    dispose: function()
-    {
-        this.element.remove();
-        this._expandElement._dispose();
-    }
-}
-
-/**
- * @constructor
- */
-WebInspector.TimelineExpandableElement = function(container)
-{
-    this._element = container.createChild("div", "timeline-expandable");
-    this._element.createChild("div", "timeline-expandable-left");
-    this._arrow = this._element.createChild("div", "timeline-expandable-arrow");
-}
-
-WebInspector.TimelineExpandableElement.prototype = {
-    _update: function(record, index, left, width)
-    {
-        const rowHeight = WebInspector.TimelinePanel.rowHeight;
-        if (record.visibleChildrenCount || record.expandable) {
-            this._element.style.top = index * rowHeight + "px";
-            this._element.style.left = left + "px";
-            this._element.style.width = Math.max(12, width + 25) + "px";
-            if (!record.collapsed) {
-                this._element.style.height = (record.visibleChildrenCount + 1) * rowHeight + "px";
-                this._element.classList.add("timeline-expandable-expanded");
-                this._element.classList.remove("timeline-expandable-collapsed");
-            } else {
-                this._element.style.height = rowHeight + "px";
-                this._element.classList.add("timeline-expandable-collapsed");
-                this._element.classList.remove("timeline-expandable-expanded");
-            }
-            this._element.classList.remove("hidden");
-        } else
-            this._element.classList.add("hidden");
-    },
-
-    _dispose: function()
-    {
-        this._element.remove();
-    }
-}
-
-/**
- * @constructor
- * @implements {WebInspector.TimelinePresentationModel.Filter}
- */
-WebInspector.TimelineCategoryFilter = function()
-{
-}
-
-WebInspector.TimelineCategoryFilter.prototype = {
-    /**
-     * @param {!WebInspector.TimelinePresentationModel.Record} record
-     * @return {boolean}
-     */
-    accept: function(record)
-    {
-        return !record.category.hidden && record.type !== WebInspector.TimelineModel.RecordType.BeginFrame;
-    }
-}
-
-/**
- * @constructor
- * @implements {WebInspector.TimelinePresentationModel.Filter}
- */
-WebInspector.TimelineIsLongFilter = function()
-{
-    this._minimumRecordDuration = 0;
-}
-
-WebInspector.TimelineIsLongFilter.prototype = {
-    /**
-     * @param {number} value
-     */
-    setMinimumRecordDuration: function(value)
-    {
-        this._minimumRecordDuration = value;
-    },
-
-    /**
-     * @param {!WebInspector.TimelinePresentationModel.Record} record
-     * @return {boolean}
-     */
-    accept: function(record)
-    {
-        return this._minimumRecordDuration ? ((record.lastChildEndTime - record.startTime) >= this._minimumRecordDuration) : true;
-    }
-}
-
-/**
- * @param {!RegExp} regExp
- * @constructor
- * @implements {WebInspector.TimelinePresentationModel.Filter}
- */
-WebInspector.TimelineSearchFilter = function(regExp)
-{
-    this._regExp = regExp;
-}
-
-WebInspector.TimelineSearchFilter.prototype = {
-    /**
-     * @param {!WebInspector.TimelinePresentationModel.Record} record
-     * @return {boolean}
-     */
-    accept: function(record)
-    {
-        return WebInspector.TimelineRecordListRow.testContentMatching(record, this._regExp);
-    }
-}
-
-/**
- * @constructor
  * @extends {WebInspector.View}
  */
 WebInspector.TimelineDetailsView = function()
 {
     WebInspector.View.call(this);
-    this.element = document.createElement("div");
-    this.element.className = "timeline-details-view fill vbox";
+    this.element.classList.add("timeline-details-view");
     this._titleElement = this.element.createChild("div", "timeline-details-view-title");
     this._titleElement.textContent = WebInspector.UIString("DETAILS");
     this._contentElement = this.element.createChild("div", "timeline-details-view-body");
diff --git a/Source/devtools/front_end/TimelinePanelDescriptor.js b/Source/devtools/front_end/TimelinePanelDescriptor.js
deleted file mode 100644
index 55af813..0000000
--- a/Source/devtools/front_end/TimelinePanelDescriptor.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2012 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:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
- * OR ITS 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.
- */
-
-/**
- * @constructor
- * @extends {WebInspector.PanelDescriptor}
- */
-WebInspector.TimelinePanelDescriptor = function()
-{
-    WebInspector.PanelDescriptor.call(this, "timeline", WebInspector.UIString("Timeline"), "TimelinePanel", "TimelinePanel.js");
-}
-
-WebInspector.TimelinePanelDescriptor.prototype = {
-    registerShortcuts: function()
-    {
-        var section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Timeline Panel"));
-        section.addAlternateKeys(WebInspector.TimelinePanelDescriptor.ShortcutKeys.StartStopRecording, WebInspector.UIString("Start/stop recording"));
-        section.addAlternateKeys(WebInspector.TimelinePanelDescriptor.ShortcutKeys.SaveToFile, WebInspector.UIString("Save timeline data"));
-        section.addAlternateKeys(WebInspector.TimelinePanelDescriptor.ShortcutKeys.LoadFromFile, WebInspector.UIString("Load timeline data"));
-    },
-
-    __proto__: WebInspector.PanelDescriptor.prototype
-}
-
-WebInspector.TimelinePanelDescriptor.ShortcutKeys = {
-    StartStopRecording: [
-        WebInspector.KeyboardShortcut.makeDescriptor("e", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ],
-
-    SaveToFile: [
-        WebInspector.KeyboardShortcut.makeDescriptor("s", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ],
-
-    LoadFromFile: [
-        WebInspector.KeyboardShortcut.makeDescriptor("o", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta)
-    ]
-}
diff --git a/Source/devtools/front_end/TimelinePresentationModel.js b/Source/devtools/front_end/TimelinePresentationModel.js
index 3ebd2f1..d87adb6 100644
--- a/Source/devtools/front_end/TimelinePresentationModel.js
+++ b/Source/devtools/front_end/TimelinePresentationModel.js
@@ -57,7 +57,7 @@
 };
 
 /**
- * @return {!Object.<string, {title: string, category: !WebInspector.TimelineCategory}>}
+ * @return {!Object.<string, !{title: string, category: !WebInspector.TimelineCategory}>}
  */
 WebInspector.TimelinePresentationModel._initRecordStyles = function()
 {
@@ -118,7 +118,7 @@
 
 /**
  * @param {!Object} record
- * @return {{title: string, category: !WebInspector.TimelineCategory}}
+ * @return {!{title: string, category: !WebInspector.TimelineCategory}}
  */
 WebInspector.TimelinePresentationModel.recordStyle = function(record)
 {
@@ -155,8 +155,8 @@
 
 /**
  * @param {!Array.<*>} recordsArray
- * @param {?function(*)} preOrderCallback
- * @param {function(*)=} postOrderCallback
+ * @param {?function(*)|?function(*,number)} preOrderCallback
+ * @param {function(*)|function(*,number)=} postOrderCallback
  */
 WebInspector.TimelinePresentationModel.forAllRecords = function(recordsArray, preOrderCallback, postOrderCallback)
 {
@@ -168,15 +168,15 @@
         var records = entry.array;
         if (entry.index < records.length) {
              var record = records[entry.index];
-             if (preOrderCallback && preOrderCallback(record))
+             if (preOrderCallback && preOrderCallback(record, stack.length))
                  return;
              if (record.children)
                  stack.push({array: record.children, index: 0, record: record});
-             else if (postOrderCallback && postOrderCallback(record))
+             else if (postOrderCallback && postOrderCallback(record, stack.length))
                 return;
              ++entry.index;
         } else {
-            if (entry.record && postOrderCallback && postOrderCallback(entry.record))
+            if (entry.record && postOrderCallback && postOrderCallback(entry.record, stack.length))
                 return;
             stack.pop();
         }
@@ -235,10 +235,13 @@
 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.MarkDOMContent] = 1;
 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.MarkLoad] = 1;
 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.MarkFirstPaint] = 1;
+WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.GPUTask] = 1;
 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.ScheduleStyleRecalculation] = 1;
 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.InvalidateLayout] = 1;
-WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.GPUTask] = 1;
+WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.RequestMainThreadFrame] = 1;
 WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.ActivateLayerTree] = 1;
+WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.DrawFrame] = 1;
+WebInspector.TimelinePresentationModel._hiddenRecords[WebInspector.TimelineModel.RecordType.BeginFrame] = 1;
 
 WebInspector.TimelinePresentationModel.prototype = {
     /**
@@ -257,16 +260,14 @@
         this._searchFilter = filter;
     },
 
+    /**
+     * @return {!WebInspector.TimelinePresentationModel.Record}
+     */
     rootRecord: function()
     {
         return this._rootRecord;
     },
 
-    frames: function()
-    {
-        return this._frames;
-    },
-
     reset: function()
     {
         this._linkifier.reset();
@@ -278,18 +279,12 @@
         this._eventDividerRecords = [];
         this._timeRecords = {};
         this._timeRecordStack = [];
-        this._frames = [];
         this._minimumRecordTime = -1;
         this._layoutInvalidateStack = {};
         this._lastScheduleStyleRecalculation = {};
         this._webSocketCreateRecords = {};
         this._coalescingBuckets = {};
-    },
-
-    addFrame: function(frame)
-    {
-        if (!frame.isBackground)
-            this._frames.push(frame);
+        this._mergingBuffer = new WebInspector.TimelineMergingRecordBuffer();
     },
 
     /**
@@ -300,15 +295,15 @@
     {
         if (this._minimumRecordTime === -1 || record.startTime < this._minimumRecordTime)
             this._minimumRecordTime = WebInspector.TimelineModel.startTimeInSeconds(record);
-
         var records;
         if (record.type === WebInspector.TimelineModel.RecordType.Program)
             records = this._foldSyncTimeRecords(record.children || []);
         else
             records = [record];
-        var result = Array(records.length);
-        for (var i = 0; i < records.length; ++i)
-            result[i] = this._innerAddRecord(this._rootRecord, records[i]);
+        var mergedRecords = this._mergingBuffer.process(record.thread, records);
+        var result = new Array(mergedRecords.length);
+        for (var i = 0; i < mergedRecords.length; ++i)
+            result[i] = this._innerAddRecord(this._rootRecord, mergedRecords[i]);
         return result;
     },
 
@@ -380,12 +375,9 @@
         }
 
         formattedRecord.calculateAggregatedStats();
-
-        if (parentRecord.coalesced) {
-            WebInspector.TimelineModel.aggregateTimeByCategory(parentRecord._aggregatedStats, formattedRecord._aggregatedStats);
-            if (parentRecord.startTime > formattedRecord.startTime)
-                parentRecord._record.startTime = record.startTime;
-        } else if (origin)
+        if (parentRecord.coalesced)
+            this._updateCoalescingParent(formattedRecord);
+        else if (origin)
             this._updateAncestorStats(formattedRecord);
 
         origin = formattedRecord.origin();
@@ -475,6 +467,21 @@
     },
 
     /**
+     * @param {!WebInspector.TimelinePresentationModel.Record} record
+     */
+    _updateCoalescingParent: function(record)
+    {
+        var parentRecord = record.parent;
+        WebInspector.TimelineModel.aggregateTimeByCategory(parentRecord._aggregatedStats, record._aggregatedStats);
+        if (parentRecord.startTime > record._record.startTime)
+            parentRecord._record.startTime = record._record.startTime;
+        if (parentRecord.endTime < record._record.endTime) {
+            parentRecord._record.endTime = record._record.endTime;
+            parentRecord.lastChildEndTime = parentRecord.endTime;
+        }
+    },
+
+    /**
      * @param {!Array.<!TimelineAgent.TimelineEvent>} records
      */
     _foldSyncTimeRecords: function(records)
@@ -565,6 +572,9 @@
         delete this._filteredRecords;
     },
 
+    /**
+     * @return {!Array.<!WebInspector.TimelinePresentationModel.Record>}
+     */
     filteredRecords: function()
     {
         if (this._filteredRecords)
@@ -624,28 +634,17 @@
         return recordsInWindow;
     },
 
-    filteredFrames: function(startTime, endTime)
-    {
-        function compareStartTime(value, object)
-        {
-            return value - object.startTime;
-        }
-        function compareEndTime(value, object)
-        {
-            return value - object.endTime;
-        }
-        var firstFrame = insertionIndexForObjectInListSortedByFunction(startTime, this._frames, compareStartTime);
-        var lastFrame = insertionIndexForObjectInListSortedByFunction(endTime, this._frames, compareEndTime);
-        while (lastFrame < this._frames.length && this._frames[lastFrame].endTime <= endTime)
-            ++lastFrame;
-        return this._frames.slice(firstFrame, lastFrame);
-    },
-
+    /**
+     * @return {!Array.<!WebInspector.TimelinePresentationModel.Record>}
+     */
     eventDividerRecords: function()
     {
         return this._eventDividerRecords;
     },
 
+    /**
+     * @return {boolean}
+     */
     isVisible: function(record)
     {
         for (var i = 0; i < this._filters.length; ++i) {
@@ -656,7 +655,7 @@
     },
 
     /**
-     * @param {{tasks: !Array.<{startTime: number, endTime: number}>, firstTaskIndex: number, lastTaskIndex: number}} info
+     * @param {!{name: string, tasks: !Array.<!{startTime: number, endTime: number}>, firstTaskIndex: number, lastTaskIndex: number}} info
      * @return {!Element}
      */
     generateMainThreadBarPopupContent: function(info)
@@ -705,10 +704,7 @@
     this._children = [];
     if (!hidden && parentRecord) {
         this.parent = parentRecord;
-        if (this.isBackground)
-            WebInspector.TimelinePresentationModel.insertRetrospectiveRecord(parentRecord, this);
-        else
-            parentRecord.children.push(this);
+        parentRecord.children.push(this);
     }
     if (origin)
         this._origin = origin;
@@ -974,8 +970,11 @@
      */
     get title()
     {
-        return this.type === WebInspector.TimelineModel.RecordType.TimeStamp ? this._record.data["message"] :
-            WebInspector.TimelinePresentationModel.recordStyle(this._record).title;
+        if (this.type === WebInspector.TimelineModel.RecordType.TimeStamp)
+            return this._record.data["message"];
+        if (WebInspector.TimelinePresentationModel.isEventDivider(this))
+            return WebInspector.UIString("%s at %s", WebInspector.TimelinePresentationModel.recordStyle(this._record).title, Number.secondsToString(this._startTimeOffset, true));
+        return WebInspector.TimelinePresentationModel.recordStyle(this._record).title;
     },
 
     /**
@@ -997,7 +996,7 @@
     /**
      * @return {boolean}
      */
-    get isBackground()
+    isBackground: function()
     {
         return !!this._record.thread;
     },
@@ -1037,9 +1036,9 @@
     /**
      * @return {number}
      */
-    get usedHeapSize()
+    get jsHeapSizeUsed()
     {
-        return this._record.usedHeapSize;
+        return this._record.counters ? this._record.counters.jsHeapSizeUsed : 0;
     },
 
     /**
@@ -1052,6 +1051,9 @@
         return null;
     },
 
+    /**
+     * @return {boolean}
+     */
     containsTime: function(time)
     {
         return this.startTime <= time && time <= this.endTime;
@@ -1069,6 +1071,10 @@
             WebInspector.domAgent.pushNodeByBackendIdToFrontend(this._relatedBackendNodeId, barrier.createCallback(this._setRelatedNode.bind(this)));
 
         barrier.callWhenDone(callbackWrapper.bind(this));
+
+        /**
+         * @this {WebInspector.TimelinePresentationModel.Record}
+         */
         function callbackWrapper()
         {
             callback(this._generatePopupContentSynchronously());
@@ -1120,18 +1126,10 @@
     _generatePopupContentSynchronously: function()
     {
         var fragment = document.createDocumentFragment();
-        var pie = WebInspector.TimelinePresentationModel.generatePieChart(this._aggregatedStats, this.category.name);
-        // Insert self time.
-        if (!this.coalesced && this._children.length) {
-            pie.pieChart.addSlice(this._selfTime, this.category.fillColorStop1);
-            var rowElement = document.createElement("div");
-            pie.footerElement.insertBefore(rowElement, pie.footerElement.firstChild);
-            rowElement.createChild("div", "timeline-aggregated-category timeline-" + this.category.name);
-            rowElement.createTextChild(WebInspector.UIString("%s %s (Self)", Number.secondsToString(this._selfTime, true), this.category.title));
-        }
-        fragment.appendChild(pie.element);
-
-        var contentHelper = new WebInspector.TimelineDetailsContentHelper(true);
+        if (!this.coalesced && this._children.length)
+            fragment.appendChild(WebInspector.TimelinePresentationModel.generatePieChart(this._aggregatedStats, this.category, this._selfTime));
+        else
+            fragment.appendChild(WebInspector.TimelinePresentationModel.generatePieChart(this._aggregatedStats));
 
         if (this.coalesced)
             return fragment;
@@ -1143,6 +1141,10 @@
         var callStackLabel;
         var relatedNodeLabel;
 
+        var contentHelper = new WebInspector.TimelineDetailsContentHelper(true);
+        contentHelper.appendTextRow(WebInspector.UIString("Self Time"), Number.secondsToString(this._selfTime, true));
+        contentHelper.appendTextRow(WebInspector.UIString("Start Time"), Number.secondsToString(this._startTimeOffset));
+
         switch (this.type) {
             case recordTypes.GCEvent:
                 contentHelper.appendTextRow(WebInspector.UIString("Collected"), Number.bytesToString(this.data["usedHeapSizeDelta"]));
@@ -1265,13 +1267,13 @@
         if (this.scriptName && this.type !== recordTypes.FunctionCall)
             contentHelper.appendElementRow(WebInspector.UIString("Function Call"), this._linkifyLocation(this.scriptName, this.scriptLine, 0));
 
-        if (this.usedHeapSize) {
+        if (this.jsHeapSizeUsed) {
             if (this.usedHeapSizeDelta) {
                 var sign = this.usedHeapSizeDelta > 0 ? "+" : "-";
-                contentHelper.appendTextRow(WebInspector.UIString("Used Heap Size"),
-                    WebInspector.UIString("%s (%s%s)", Number.bytesToString(this.usedHeapSize), sign, Number.bytesToString(Math.abs(this.usedHeapSizeDelta))));
+                contentHelper.appendTextRow(WebInspector.UIString("Used JavaScript Heap Size"),
+                    WebInspector.UIString("%s (%s%s)", Number.bytesToString(this.jsHeapSizeUsed), sign, Number.bytesToString(Math.abs(this.usedHeapSizeDelta))));
             } else if (this.category === WebInspector.TimelinePresentationModel.categories().scripting)
-                contentHelper.appendTextRow(WebInspector.UIString("Used Heap Size"), Number.bytesToString(this.usedHeapSize));
+                contentHelper.appendTextRow(WebInspector.UIString("Used JavaScript Heap Size"), Number.bytesToString(this.jsHeapSizeUsed));
         }
 
         if (this.callSiteStackTrace)
@@ -1291,18 +1293,14 @@
     },
 
     /**
-     * @param {!WebInspector.DOMAgent} node
+     * @param {!WebInspector.DOMNode} node
      */
     _createNodeAnchor: function(node)
     {
         var span = document.createElement("span");
         span.classList.add("node-link");
-        span.addEventListener("click", onClick, false);
+        span.addEventListener("click", WebInspector.Revealer.reveal.bind(WebInspector.Revealer, node, undefined), false);
         WebInspector.DOMPresentationUtils.decorateNodeLabel(node, span);
-        function onClick()
-        {
-            WebInspector.showPanel("elements").revealAndSelectNode(node.id);
-        }
         return span;
     },
 
@@ -1522,38 +1520,56 @@
 
 /**
  * @param {!Object} aggregatedStats
- * @param {string=} firstCategoryName
- * @return {{pieChart: !WebInspector.PieChart, element: !Element, footerElement: !Element}}
+ * @param {!WebInspector.TimelineCategory=} selfCategory
+ * @param {number=} selfTime
+ * @return {!Element}
  */
-WebInspector.TimelinePresentationModel.generatePieChart = function(aggregatedStats, firstCategoryName)
+WebInspector.TimelinePresentationModel.generatePieChart = function(aggregatedStats, selfCategory, selfTime)
 {
     var element = document.createElement("div");
     element.className = "timeline-aggregated-info";
 
     var total = 0;
-    var categoryNames = [];
-    if (firstCategoryName)
-        categoryNames.push(firstCategoryName);
-    for (var categoryName in WebInspector.TimelinePresentationModel.categories()) {
-        if (aggregatedStats[categoryName]) {
-            total += aggregatedStats[categoryName];
-            if (firstCategoryName !== categoryName)
-                categoryNames.push(categoryName);
-        }
-    }
+    for (var categoryName in aggregatedStats)
+        total += aggregatedStats[categoryName];
 
     var pieChart = new WebInspector.PieChart(total);
     element.appendChild(pieChart.element);
     var footerElement = element.createChild("div", "timeline-aggregated-info-legend");
 
-    for (var i = 0; i < categoryNames.length; ++i) {
-        var category = WebInspector.TimelinePresentationModel.categories()[categoryNames[i]];
-        pieChart.addSlice(aggregatedStats[category.name], category.fillColorStop0);
+    // In case of self time, first add self, then children of the same category.
+    if (selfCategory && selfTime) {
+        // Self.
+        pieChart.addSlice(selfTime, selfCategory.fillColorStop1);
         var rowElement = footerElement.createChild("div");
-        rowElement.createChild("div", "timeline-aggregated-category timeline-" + category.name);
-        rowElement.createTextChild(WebInspector.UIString("%s %s", Number.secondsToString(aggregatedStats[category.name], true), category.title));
+        rowElement.createChild("div", "timeline-aggregated-category timeline-" + selfCategory.name);
+        rowElement.createTextChild(WebInspector.UIString("%s %s (Self)", Number.secondsToString(selfTime, true), selfCategory.title));
+
+        // Children of the same category.
+        var categoryTime = aggregatedStats[selfCategory.name];
+        var value = categoryTime - selfTime;
+        if (value > 0) {
+            pieChart.addSlice(value, selfCategory.fillColorStop0);
+            rowElement = footerElement.createChild("div");
+            rowElement.createChild("div", "timeline-aggregated-category timeline-" + selfCategory.name);
+            rowElement.createTextChild(WebInspector.UIString("%s %s (Children)", Number.secondsToString(value, true), selfCategory.title));
+        }
     }
-    return { pieChart: pieChart, element: element, footerElement: footerElement };
+
+    // Add other categories.
+    for (var categoryName in WebInspector.TimelinePresentationModel.categories()) {
+        var category = WebInspector.TimelinePresentationModel.categories()[categoryName];
+         if (category === selfCategory)
+             continue;
+         var value = aggregatedStats[category.name];
+         if (!value)
+             continue;
+         pieChart.addSlice(value, category.fillColorStop0);
+         var rowElement = footerElement.createChild("div");
+         rowElement.createChild("div", "timeline-aggregated-category timeline-" + category.name);
+         rowElement.createTextChild(WebInspector.UIString("%s %s", Number.secondsToString(value, true), category.title));
+    }
+    return element;
 }
 
 WebInspector.TimelinePresentationModel.generatePopupContentForFrame = function(frame)
@@ -1565,7 +1581,6 @@
     contentHelper.appendTextRow(WebInspector.UIString("Duration"), durationText);
     contentHelper.appendTextRow(WebInspector.UIString("FPS"), Math.floor(1 / durationInSeconds));
     contentHelper.appendTextRow(WebInspector.UIString("CPU time"), Number.secondsToString(frame.cpuTime, true));
-    contentHelper.appendTextRow(WebInspector.UIString("Thread"), frame.isBackground ? WebInspector.UIString("background") : WebInspector.UIString("main"));
     contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"),
         WebInspector.TimelinePresentationModel._generateAggregatedInfo(frame.timeByCategory));
     return contentHelper.contentTable();
@@ -1633,7 +1648,7 @@
         ".timeline-details-view .timeline-" + category.name + ", " +
         ".timeline-category-" + category.name + " .timeline-tree-icon"
 
-    return selector + " { background-image: -webkit-linear-gradient(" +
+    return selector + " { background-image: linear-gradient(" +
        category.fillColorStop0 + ", " + category.fillColorStop1 + " 25%, " + category.fillColorStop1 + " 25%, " + category.fillColorStop1 + ");" +
        " border-color: " + category.borderColor +
        "}";
@@ -1762,6 +1777,9 @@
 }
 
 WebInspector.TimelinePopupContentHelper.prototype = {
+    /**
+     * @return {!Element}
+     */
     contentTable: function()
     {
         return this._contentTable;
@@ -1805,7 +1823,7 @@
         row.appendChild(titleCell);
         var cell = document.createElement("td");
         cell.className = "details";
-        if (content instanceof Element)
+        if (content instanceof Node)
             cell.appendChild(content);
         else
             cell.createTextChild(content || "");
@@ -1846,7 +1864,7 @@
         var rowElement = this.element.createChild("div", "timeline-details-view-row");
         rowElement.createChild("span", "timeline-details-view-row-title").textContent = WebInspector.UIString("%s: ", title);
         var valueElement = rowElement.createChild("span", "timeline-details-view-row-details" + (this._monospaceValues ? " monospace" : ""));
-        if (content instanceof Element)
+        if (content instanceof Node)
             valueElement.appendChild(content);
         else
             valueElement.createTextChild(content || "");
diff --git a/Source/devtools/front_end/TimelineView.js b/Source/devtools/front_end/TimelineView.js
new file mode 100644
index 0000000..f3fa5ba
--- /dev/null
+++ b/Source/devtools/front_end/TimelineView.js
@@ -0,0 +1,1748 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ * Copyright (C) 2012 Intel 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.
+ */
+
+/**
+ * @constructor
+ * @implements {WebInspector.Searchable}
+ * @extends {WebInspector.View}
+ * @param {!WebInspector.TimelinePanel} panel
+ * @param {!WebInspector.TimelineModel} model
+ * @param {!WebInspector.Setting} glueRecordsSetting
+ * @param {string} mode
+ */
+WebInspector.TimelineView = function(panel, model, glueRecordsSetting, mode)
+{
+    WebInspector.View.call(this);
+    this.element.classList.add("timeline-view");
+    this.element.classList.add("hbox");
+
+    this._panel = panel;
+    this._model = model;
+    this._currentMode = mode;
+    this._calculator = new WebInspector.TimelineCalculator(this._model);
+    this._model.addEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._onTimelineEventRecorded, this);
+
+    // Create presentation model.
+    this._presentationModel = new WebInspector.TimelinePresentationModel();
+    this._durationFilter = new WebInspector.TimelineIsLongFilter();
+    this._windowFilter = new WebInspector.TimelineWindowFilter();
+
+    this._presentationModel.addFilter(this._windowFilter);
+    this._presentationModel.addFilter(new WebInspector.TimelineCategoryFilter());
+    this._presentationModel.addFilter(this._durationFilter);
+
+    this._frameMode = mode === WebInspector.TimelinePanel.Mode.Frames;
+    this._boundariesAreValid = true;
+    this._scrollTop = 0;
+
+    this._searchableView = new WebInspector.SearchableView(this);
+    this._searchableView.element.classList.add("searchable-view");
+
+    this._recordsView = this._createRecordsView();
+    this._recordsView.addEventListener(WebInspector.SplitView.Events.SidebarSizeChanged, this._sidebarResized, this);
+    this._recordsView.show(this._searchableView.element);
+    this._searchableView.element.appendChild(this._timelineGrid.gridHeaderElement);
+
+    this._popoverHelper = new WebInspector.PopoverHelper(this.element, this._getPopoverAnchor.bind(this), this._showPopover.bind(this));
+
+    this.element.addEventListener("mousemove", this._mouseMove.bind(this), false);
+    this.element.addEventListener("mouseout", this._mouseOut.bind(this), false);
+    this.element.addEventListener("keydown", this._keyDown.bind(this), false);
+
+    this._expandOffset = 15;
+
+    this._allRecordsCount = 0;
+
+    this._presentationModel.setGlueRecords(glueRecordsSetting.get());
+    this._glueRecordsSetting = glueRecordsSetting;
+    this._glueRecordsSetting.addChangeListener(this._onGlueRecordsSettingChanged, this);
+
+    if (mode === WebInspector.TimelinePanel.Mode.Frames) {
+        this.frameModel = new WebInspector.TimelineFrameModel(this._model);
+        this._presentationModel.setGlueRecords(false);
+    }
+
+    this._searchableView.show(this.element);
+}
+
+WebInspector.TimelineView.commonUIFilters = function()
+{
+    var filters = WebInspector.TimelineView._commonUIFilters;
+    if (filters)
+        return filters;
+
+    filters = {};
+    filters._textFilterUI = new WebInspector.TextFilterUI();
+
+    var durationOptions = [];
+    for (var presetIndex = 0; presetIndex < WebInspector.TimelinePanel.durationFilterPresetsMs.length; ++presetIndex) {
+        var durationMs = WebInspector.TimelinePanel.durationFilterPresetsMs[presetIndex];
+        var durationOption = {};
+        if (!durationMs) {
+            durationOption.label = WebInspector.UIString("All");
+            durationOption.title = WebInspector.UIString("Show all records");
+        } else {
+            durationOption.label = WebInspector.UIString("\u2265 %dms", durationMs);
+            durationOption.title = WebInspector.UIString("Hide records shorter than %dms", durationMs);
+        }
+        durationOption.value = durationMs;
+        durationOptions.push(durationOption);
+    }
+    filters._durationFilterUI = new WebInspector.ComboBoxFilterUI(durationOptions);
+
+    filters._categoryFiltersUI = {};
+    var categoryTypes = [];
+    var categories = WebInspector.TimelinePresentationModel.categories();
+    for (var categoryName in categories) {
+        var category = categories[categoryName];
+        if (category.overviewStripGroupIndex < 0)
+            continue;
+        var filter = new WebInspector.CheckboxFilterUI(category.name, category.title);
+        filters._categoryFiltersUI[category.name] = filter;
+    }
+    WebInspector.TimelineView._commonUIFilters = filters;
+    return filters;
+}
+
+WebInspector.TimelineView.prototype = {
+    /**
+     * @return {!WebInspector.SplitView}
+     */
+    _createRecordsView: function()
+    {
+        var recordsView = new WebInspector.SplitView(true, false, "timeline-split");
+        this._containerElement = recordsView.element;
+        this._containerElement.tabIndex = 0;
+        this._containerElement.id = "timeline-container";
+        this._containerElement.addEventListener("scroll", this._onScroll.bind(this), false);
+
+        // Create records list in the records sidebar.
+        recordsView.sidebarElement().createChild("div", "timeline-records-title").textContent = WebInspector.UIString("RECORDS");
+        this._sidebarListElement = recordsView.sidebarElement().createChild("div", "timeline-records-list");
+
+        // Create grid in the records main area.
+        this._gridContainer = new WebInspector.ViewWithResizeCallback(this._onViewportResize.bind(this));
+        this._gridContainer.element.id = "resources-container-content";
+        this._gridContainer.show(recordsView.mainElement());
+        this._timelineGrid = new WebInspector.TimelineGrid();
+        this._itemsGraphsElement = this._timelineGrid.itemsGraphsElement;
+        this._itemsGraphsElement.id = "timeline-graphs";
+        this._gridContainer.element.appendChild(this._timelineGrid.element);
+        this._timelineGrid.gridHeaderElement.id = "timeline-grid-header";
+        this._timelineGrid.gridHeaderElement.classList.add("fill");
+
+        // Create gap elements
+        this._topGapElement = this._itemsGraphsElement.createChild("div", "timeline-gap");
+        this._graphRowsElement = this._itemsGraphsElement.createChild("div");
+        this._bottomGapElement = this._itemsGraphsElement.createChild("div", "timeline-gap");
+        this._expandElements = this._itemsGraphsElement.createChild("div");
+        this._expandElements.id = "orphan-expand-elements";
+
+        // Create gpu tasks containers.
+        /** @type {!Array.<!TimelineAgent.TimelineEvent>} */
+        this._mainThreadTasks =  ([]);
+        /** @type {!Array.<!TimelineAgent.TimelineEvent>} */
+        this._gpuTasks = ([]);
+        var utilizationStripsElement = this._timelineGrid.gridHeaderElement.createChild("div", "timeline-utilization-strips vbox");
+        this._cpuBarsElement = utilizationStripsElement.createChild("div", "timeline-utilization-strip");
+        if (WebInspector.experimentsSettings.gpuTimeline.isEnabled())
+            this._gpuBarsElement = utilizationStripsElement.createChild("div", "timeline-utilization-strip gpu");
+
+        return recordsView;
+    },
+
+    /**
+     * @return {!WebInspector.SearchableView}
+     */
+    searchableView: function()
+    {
+        return this._searchableView;
+    },
+
+    /**
+     * @return {boolean}
+     */
+    supportsGlueParentMode: function()
+    {
+        return !this._frameMode;
+    },
+
+    _onGlueRecordsSettingChanged: function()
+    {
+        this._presentationModel.setGlueRecords(this._glueRecordsSetting.get());
+        this._repopulateRecords();
+    },
+
+    get calculator()
+    {
+        return this._calculator;
+    },
+
+    /**
+     * @param {!WebInspector.FilterBar} filterBar
+     * @return {boolean}
+     */
+    createUIFilters: function(filterBar)
+    {
+        var filters = this._filters;
+        if (!filters) {
+            this._filters = WebInspector.TimelineView.commonUIFilters();
+            filters = this._filters;
+
+            filters._textFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._textFilterChanged, this);
+            filters._durationFilterUI.addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._durationFilterChanged, this);
+            for (var categoryName in filters._categoryFiltersUI)
+                filters._categoryFiltersUI[categoryName].addEventListener(WebInspector.FilterUI.Events.FilterChanged, this._categoriesFilterChanged.bind(this, categoryName), this);
+        }
+
+        filterBar.addFilter(filters._textFilterUI);
+        filterBar.addFilter(filters._durationFilterUI);
+        for (var categoryName in filters._categoryFiltersUI)
+            filterBar.addFilter(filters._categoryFiltersUI[categoryName]);
+
+        return true;
+    },
+
+    _textFilterChanged: function(event)
+    {
+        var searchQuery = this._filters._textFilterUI.value();
+        this._presentationModel.setSearchFilter(null);
+        delete this._searchFilter;
+
+        function cleanRecord(record)
+        {
+            delete record.clicked;
+        }
+        WebInspector.TimelinePresentationModel.forAllRecords(this._presentationModel.rootRecord().children, cleanRecord);
+
+        this.searchCanceled();
+        if (searchQuery) {
+            this._searchFilter = new WebInspector.TimelineSearchFilter(createPlainTextSearchRegex(searchQuery, "i"));
+            this._presentationModel.setSearchFilter(this._searchFilter);
+        }
+        this._invalidateAndScheduleRefresh(true, true);
+    },
+
+    _durationFilterChanged: function()
+    {
+        var duration = this._filters._durationFilterUI.value();
+        var minimumRecordDuration = +duration / 1000.0;
+        this._durationFilter.setMinimumRecordDuration(minimumRecordDuration);
+        this._invalidateAndScheduleRefresh(true, true);
+    },
+
+    _categoriesFilterChanged: function(name, event)
+    {
+        var categories = WebInspector.TimelinePresentationModel.categories();
+        categories[name].hidden = !this._filters._categoryFiltersUI[name].checked();
+        this._invalidateAndScheduleRefresh(true, true);
+    },
+
+    _rootRecord: function()
+    {
+        return this._presentationModel.rootRecord();
+    },
+
+    _updateRecordsCounter: function(recordsInWindowCount)
+    {
+        this._panel.recordsCounter.setText(WebInspector.UIString("%d of %d records shown", recordsInWindowCount, this._allRecordsCount));
+    },
+
+    _updateFrameStatistics: function(frames)
+    {
+        this._lastFrameStatistics = frames.length ? new WebInspector.FrameStatistics(frames) : null;
+    },
+
+    _updateEventDividers: function()
+    {
+        this._timelineGrid.removeEventDividers();
+        var clientWidth = this._graphRowsElementWidth;
+        var dividers = [];
+        var eventDividerRecords = this._presentationModel.eventDividerRecords();
+
+        for (var i = 0; i < eventDividerRecords.length; ++i) {
+            var record = eventDividerRecords[i];
+            var positions = this._calculator.computeBarGraphWindowPosition(record);
+            var dividerPosition = Math.round(positions.left);
+            if (dividerPosition < 0 || dividerPosition >= clientWidth || dividers[dividerPosition])
+                continue;
+            var divider = WebInspector.TimelinePresentationModel.createEventDivider(record.type, record.title);
+            divider.style.left = dividerPosition + "px";
+            dividers[dividerPosition] = divider;
+        }
+        this._timelineGrid.addEventDividers(dividers);
+    },
+
+    _updateFrameBars: function(frames)
+    {
+        var clientWidth = this._graphRowsElementWidth;
+        if (this._frameContainer)
+            this._frameContainer.removeChildren();
+        else {
+            const frameContainerBorderWidth = 1;
+            this._frameContainer = document.createElement("div");
+            this._frameContainer.classList.add("fill");
+            this._frameContainer.classList.add("timeline-frame-container");
+            this._frameContainer.style.height = WebInspector.TimelinePanel.rowHeight + frameContainerBorderWidth + "px";
+            this._frameContainer.addEventListener("dblclick", this._onFrameDoubleClicked.bind(this), false);
+        }
+
+        var dividers = [];
+
+        for (var i = 0; i < frames.length; ++i) {
+            var frame = frames[i];
+            var frameStart = this._calculator.computePosition(frame.startTime);
+            var frameEnd = this._calculator.computePosition(frame.endTime);
+
+            var frameStrip = document.createElement("div");
+            frameStrip.className = "timeline-frame-strip";
+            var actualStart = Math.max(frameStart, 0);
+            var width = frameEnd - actualStart;
+            frameStrip.style.left = actualStart + "px";
+            frameStrip.style.width = width + "px";
+            frameStrip._frame = frame;
+
+            const minWidthForFrameInfo = 60;
+            if (width > minWidthForFrameInfo)
+                frameStrip.textContent = Number.secondsToString(frame.endTime - frame.startTime, true);
+
+            this._frameContainer.appendChild(frameStrip);
+
+            if (actualStart > 0) {
+                var frameMarker = WebInspector.TimelinePresentationModel.createEventDivider(WebInspector.TimelineModel.RecordType.BeginFrame);
+                frameMarker.style.left = frameStart + "px";
+                dividers.push(frameMarker);
+            }
+        }
+        this._timelineGrid.addEventDividers(dividers);
+        this._timelineGrid.gridHeaderElement.appendChild(this._frameContainer);
+    },
+
+    /**
+     * @param {number} startTime
+     * @param {number} endTime
+     * @return {!Array.<!WebInspector.TimelineFrame>}
+     */
+    _filteredFrames: function(startTime, endTime)
+    {
+        if (!this.frameModel)
+            return [];
+        function compareStartTime(value, object)
+        {
+            return value - object.startTime;
+        }
+        function compareEndTime(value, object)
+        {
+            return value - object.endTime;
+        }
+        var frames = this.frameModel.frames();
+        var firstFrame = insertionIndexForObjectInListSortedByFunction(startTime, frames, compareStartTime);
+        var lastFrame = insertionIndexForObjectInListSortedByFunction(endTime, frames, compareEndTime);
+        while (lastFrame < frames.length && frames[lastFrame].endTime <= endTime)
+            ++lastFrame;
+        return frames.slice(firstFrame, lastFrame);
+    },
+
+
+    _onFrameDoubleClicked: function(event)
+    {
+        var frameBar = event.target.enclosingNodeOrSelfWithClass("timeline-frame-strip");
+        if (!frameBar)
+            return;
+        this._panel.setWindowTimes(frameBar._frame.startTime, frameBar._frame.endTime);
+    },
+
+    _repopulateRecords: function()
+    {
+        this._resetView();
+        this._automaticallySizeWindow = false;
+        var records = this._model.records;
+        for (var i = 0; i < records.length; ++i)
+            this._innerAddRecordToTimeline(records[i]);
+        this._invalidateAndScheduleRefresh(false, false);
+    },
+
+    _onTimelineEventRecorded: function(event)
+    {
+        if (this._innerAddRecordToTimeline(/** @type {!TimelineAgent.TimelineEvent} */(event.data)))
+            this._invalidateAndScheduleRefresh(false, false);
+    },
+
+    /**
+     * @param {!TimelineAgent.TimelineEvent} record
+     * @return {boolean}
+     */
+    _innerAddRecordToTimeline: function(record)
+    {
+        if (record.type === WebInspector.TimelineModel.RecordType.Program)
+            this._mainThreadTasks.push(record);
+
+        if (record.type === WebInspector.TimelineModel.RecordType.GPUTask) {
+            this._gpuTasks.push(record);
+            return WebInspector.TimelineModel.startTimeInSeconds(record) < this._panel.windowEndTime();
+        }
+
+        var records = this._presentationModel.addRecord(record);
+        this._allRecordsCount += records.length;
+        var hasVisibleRecords = false;
+        var presentationModel = this._presentationModel;
+        function checkVisible(record)
+        {
+            hasVisibleRecords |= presentationModel.isVisible(record);
+        }
+        WebInspector.TimelinePresentationModel.forAllRecords(records, checkVisible);
+
+        function isAdoptedRecord(record)
+        {
+            return record.parent !== presentationModel.rootRecord;
+        }
+        // Tell caller update is necessary either if we added a visible record or if we re-parented a record.
+        return hasVisibleRecords || records.some(isAdoptedRecord);
+    },
+
+    /**
+     * @param {number} width
+     */
+    setSidebarSize: function(width)
+    {
+        this._recordsView.setSidebarSize(width);
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _sidebarResized: function(event)
+    {
+        this.dispatchEventToListeners(WebInspector.SplitView.Events.SidebarSizeChanged, event.data);
+    },
+
+    _onViewportResize: function()
+    {
+        this._resize(this._recordsView.sidebarSize());
+    },
+
+    /**
+     * @param {number} sidebarWidth
+     */
+    _resize: function(sidebarWidth)
+    {
+        this._closeRecordDetails();
+        this._graphRowsElementWidth = this._graphRowsElement.offsetWidth;
+        this._containerElementHeight = this._containerElement.clientHeight;
+        this._timelineGrid.gridHeaderElement.style.left = sidebarWidth + "px";
+        this._timelineGrid.gridHeaderElement.style.width = this._itemsGraphsElement.offsetWidth + "px";
+        this._scheduleRefresh(false, true);
+    },
+
+    _resetView: function()
+    {
+        this._presentationModel.reset();
+        this._boundariesAreValid = false;
+        this._adjustScrollPosition(0);
+        this._closeRecordDetails();
+        this._allRecordsCount = 0;
+        this._automaticallySizeWindow = true;
+        this._mainThreadTasks = [];
+        this._gpuTasks = [];
+    },
+
+    reset: function()
+    {
+        this._resetView();
+        this._windowFilter.reset();
+        this._invalidateAndScheduleRefresh(true, true);
+        this._updateSelectionDetails();
+    },
+
+    /**
+     * @return {!Array.<!Element>}
+     */
+    elementsToRestoreScrollPositionsFor: function()
+    {
+        return [this._containerElement];
+    },
+
+    wasShown: function()
+    {
+        WebInspector.View.prototype.wasShown.call(this);
+
+        this._repopulateRecords();
+        this._updateSelectionDetails();
+
+        if (!WebInspector.TimelinePanel._categoryStylesInitialized) {
+            WebInspector.TimelinePanel._categoryStylesInitialized = true;
+            this._injectCategoryStyles();
+        }
+        this._onViewportResize();
+        this._refresh();
+    },
+
+    willHide: function()
+    {
+        this._closeRecordDetails();
+        WebInspector.View.prototype.willHide.call(this);
+    },
+
+    _onScroll: function(event)
+    {
+        this._closeRecordDetails();
+        this._scrollTop = this._containerElement.scrollTop;
+        var dividersTop = Math.max(0, this._scrollTop);
+        this._timelineGrid.setScrollAndDividerTop(this._scrollTop, dividersTop);
+        this._scheduleRefresh(true, true);
+    },
+
+    /**
+     * @param {boolean} preserveBoundaries
+     * @param {boolean} userGesture
+     */
+    _invalidateAndScheduleRefresh: function(preserveBoundaries, userGesture)
+    {
+        this._presentationModel.invalidateFilteredRecords();
+        delete this._searchResults;
+        this._scheduleRefresh(preserveBoundaries, userGesture);
+    },
+
+    /**
+     * @param {?WebInspector.TimelinePresentationModel.Record} record
+     */
+    _selectRecord: function(record)
+    {
+        if (record === this._lastSelectedRecord)
+            return;
+
+        // Remove selection rendering.
+        if (this._lastSelectedRecord) {
+            var listRow = /** @type {!WebInspector.TimelineRecordListRow} */ (this._lastSelectedRecord.getUserObject("WebInspector.TimelineRecordListRow"));
+            if (listRow)
+                listRow.renderAsSelected(false);
+            var graphRow = /** @type {!WebInspector.TimelineRecordGraphRow} */ (this._lastSelectedRecord.getUserObject("WebInspector.TimelineRecordGraphRow"));
+            if (graphRow)
+                graphRow.renderAsSelected(false);
+        }
+
+        if (!record) {
+            this._updateSelectionDetails();
+            return;
+        }
+
+        this._lastSelectedRecord = record;
+        this._revealRecord(record);
+        var listRow = /** @type {!WebInspector.TimelineRecordListRow} */ (record.getUserObject("WebInspector.TimelineRecordListRow"));
+        if (listRow)
+            listRow.renderAsSelected(true);
+        var graphRow = /** @type {!WebInspector.TimelineRecordListRow} */ (record.getUserObject("WebInspector.TimelineRecordGraphRow"));
+        if (graphRow)
+            graphRow.renderAsSelected(true);
+
+        record.generatePopupContent(showCallback.bind(this));
+
+        /**
+         * @param {!DocumentFragment} element
+         * @this {WebInspector.TimelineView}
+         */
+        function showCallback(element)
+        {
+            this._panel.setDetailsContent(record.title, element);
+        }
+    },
+
+    _updateSelectionDetails: function()
+    {
+        var startTime = this._panel.windowStartTime() * 1000;
+        var endTime = this._panel.windowEndTime() * 1000;
+        // Return early in case 0 selection window.
+        if (startTime < 0)
+            return;
+
+        var aggregatedStats = {};
+
+        /**
+         * @param {number} value
+         * @param {!TimelineAgent.TimelineEvent} task
+         * @return {number}
+         */
+        function compareEndTime(value, task)
+        {
+            return value < task.endTime ? -1 : 1;
+        }
+
+        /**
+         * @param {!TimelineAgent.TimelineEvent} rawRecord
+         */
+        function aggregateTimeForRecordWithinWindow(rawRecord)
+        {
+            if (!rawRecord.endTime || rawRecord.endTime < startTime || rawRecord.startTime > endTime)
+                return;
+
+            var childrenTime = 0;
+            var children = rawRecord.children || [];
+            for (var i = 0; i < children.length; ++i) {
+                var child = children[i];
+                if (!child.endTime || child.endTime < startTime || child.startTime > endTime)
+                    continue;
+                childrenTime += Math.min(endTime, child.endTime) - Math.max(startTime, child.startTime);
+                aggregateTimeForRecordWithinWindow(child);
+            }
+            var categoryName = WebInspector.TimelinePresentationModel.categoryForRecord(rawRecord).name;
+            var ownTime = Math.min(endTime, rawRecord.endTime) - Math.max(startTime, rawRecord.startTime) - childrenTime;
+            aggregatedStats[categoryName] = (aggregatedStats[categoryName] || 0) + ownTime / 1000;
+        }
+
+        var taskIndex = insertionIndexForObjectInListSortedByFunction(startTime, this._mainThreadTasks, compareEndTime);
+        for (; taskIndex < this._mainThreadTasks.length; ++taskIndex) {
+            var task = this._mainThreadTasks[taskIndex];
+            if (task.startTime > endTime)
+                break;
+            aggregateTimeForRecordWithinWindow(task);
+        }
+
+        var aggregatedTotal = 0;
+        for (var categoryName in aggregatedStats)
+            aggregatedTotal += aggregatedStats[categoryName];
+        aggregatedStats["idle"] = Math.max(0, (endTime - startTime) / 1000 - aggregatedTotal);
+
+        var fragment = document.createDocumentFragment();
+        fragment.appendChild(WebInspector.TimelinePresentationModel.generatePieChart(aggregatedStats));
+
+        if (this._frameMode && this._lastFrameStatistics) {
+            var title = WebInspector.UIString("%s \u2013 %s (%d frames)", Number.secondsToString(this._lastFrameStatistics.startOffset, true), Number.secondsToString(this._lastFrameStatistics.endOffset, true), this._lastFrameStatistics.frameCount);
+            fragment.appendChild(WebInspector.TimelinePresentationModel.generatePopupContentForFrameStatistics(this._lastFrameStatistics));
+        } else {
+            var title = WebInspector.UIString("%s \u2013 %s", this._calculator.formatTime(0, true), this._calculator.formatTime(this._calculator.boundarySpan(), true));
+        }
+        this._panel.setDetailsContent(title, fragment);
+    },
+
+    /**
+     * @param {number} startTime
+     * @param {number} endTime
+     */
+    setWindowTimes: function(startTime, endTime)
+    {
+        this._windowFilter.setWindowTimes(startTime, endTime);
+        this._invalidateAndScheduleRefresh(false, true);
+        this._selectRecord(null);
+    },
+
+    /**
+     * @param {boolean} preserveBoundaries
+     * @param {boolean} userGesture
+     */
+    _scheduleRefresh: function(preserveBoundaries, userGesture)
+    {
+        this._closeRecordDetails();
+        this._boundariesAreValid &= preserveBoundaries;
+
+        if (!this.isShowing())
+            return;
+
+        if (preserveBoundaries || userGesture)
+            this._refresh();
+        else {
+            if (!this._refreshTimeout)
+                this._refreshTimeout = setTimeout(this._refresh.bind(this), 300);
+        }
+    },
+
+    _refresh: function()
+    {
+        if (this._refreshTimeout) {
+            clearTimeout(this._refreshTimeout);
+            delete this._refreshTimeout;
+        }
+        var windowStartTime = this._panel.windowStartTime();
+        var windowEndTime = this._panel.windowEndTime();
+        this._timelinePaddingLeft = this._expandOffset;
+        this._calculator.setWindow(windowStartTime, windowEndTime);
+        this._calculator.setDisplayWindow(this._timelinePaddingLeft, this._graphRowsElementWidth);
+
+        var recordsInWindowCount = this._refreshRecords();
+        this._updateRecordsCounter(recordsInWindowCount);
+        if (!this._boundariesAreValid) {
+            this._updateEventDividers();
+            var frames = this._filteredFrames(windowStartTime, windowEndTime);
+            if (frames) {
+                this._updateFrameStatistics(frames);
+                const maxFramesForFrameBars = 30;
+                if  (frames.length && frames.length < maxFramesForFrameBars) {
+                    this._timelineGrid.removeDividers();
+                    this._updateFrameBars(frames);
+                } else {
+                    if (this._frameContainer)
+                        this._frameContainer.remove();
+                    this._timelineGrid.updateDividers(this._calculator);
+                }
+            } else
+                this._timelineGrid.updateDividers(this._calculator);
+            this._refreshAllUtilizationBars();
+        }
+        this._boundariesAreValid = true;
+    },
+
+    revealRecordAt: function(time)
+    {
+        var recordToReveal;
+        function findRecordToReveal(record)
+        {
+            if (record.containsTime(time)) {
+                recordToReveal = record;
+                return true;
+            }
+            // If there is no record containing the time than use the latest one before that time.
+            if (!recordToReveal || record.endTime < time && recordToReveal.endTime < record.endTime)
+                recordToReveal = record;
+            return false;
+        }
+        WebInspector.TimelinePresentationModel.forAllRecords(this._presentationModel.rootRecord().children, null, findRecordToReveal);
+
+        // The record ends before the window left bound so scroll to the top.
+        if (!recordToReveal) {
+            this._containerElement.scrollTop = 0;
+            return;
+        }
+
+        this._selectRecord(recordToReveal);
+    },
+
+    /**
+     * @param {!WebInspector.TimelinePresentationModel.Record} recordToReveal
+     */
+    _revealRecord: function(recordToReveal)
+    {
+        var needRefresh = false;
+        // Expand all ancestors.
+        for (var parent = recordToReveal.parent; parent !== this._rootRecord(); parent = parent.parent) {
+            if (!parent.collapsed)
+                continue;
+            this._presentationModel.invalidateFilteredRecords();
+            parent.collapsed = false;
+            needRefresh = true;
+        }
+        var recordsInWindow = this._presentationModel.filteredRecords();
+        var index = recordsInWindow.indexOf(recordToReveal);
+
+        var itemOffset = index * WebInspector.TimelinePanel.rowHeight;
+        var visibleTop = this._scrollTop - WebInspector.TimelinePanel.headerHeight;
+        var visibleBottom = visibleTop + this._containerElementHeight - WebInspector.TimelinePanel.rowHeight;
+        if (itemOffset < visibleTop)
+            this._containerElement.scrollTop = itemOffset;
+        else if (itemOffset > visibleBottom)
+            this._containerElement.scrollTop = itemOffset - this._containerElementHeight + WebInspector.TimelinePanel.headerHeight + WebInspector.TimelinePanel.rowHeight;
+        else if (needRefresh)
+            this._refreshRecords();
+    },
+
+    _refreshRecords: function()
+    {
+        var recordsInWindow = this._presentationModel.filteredRecords();
+
+        // Calculate the visible area.
+        var visibleTop = this._scrollTop;
+        var visibleBottom = visibleTop + this._containerElementHeight;
+
+        var rowHeight = WebInspector.TimelinePanel.rowHeight;
+        var headerHeight = WebInspector.TimelinePanel.headerHeight;
+
+        // Convert visible area to visible indexes. Always include top-level record for a visible nested record.
+        var startIndex = Math.max(0, Math.min(Math.floor((visibleTop - headerHeight) / rowHeight), recordsInWindow.length - 1));
+        var endIndex = Math.min(recordsInWindow.length, Math.ceil(visibleBottom / rowHeight));
+        var lastVisibleLine = Math.max(0, Math.floor((visibleBottom - headerHeight) / rowHeight));
+        if (this._automaticallySizeWindow && recordsInWindow.length > lastVisibleLine) {
+            this._automaticallySizeWindow = false;
+            this._selectRecord(null);
+            // If we're at the top, always use real timeline start as a left window bound so that expansion arrow padding logic works.
+            var windowStartTime = startIndex ? recordsInWindow[startIndex].startTime : this._model.minimumRecordTime();
+            var windowEndTime = recordsInWindow[Math.max(0, lastVisibleLine - 1)].endTime;
+            this._panel.setWindowTimes(windowStartTime, windowEndTime);
+            this._windowFilter.setWindowTimes(windowStartTime, windowEndTime);
+            recordsInWindow = this._presentationModel.filteredRecords();
+            endIndex = Math.min(recordsInWindow.length, lastVisibleLine);
+        }
+
+        // Resize gaps first.
+        this._topGapElement.style.height = (startIndex * rowHeight) + "px";
+        this._recordsView.sidebarElement().firstElementChild.style.flexBasis = (startIndex * rowHeight + headerHeight) + "px";
+        this._bottomGapElement.style.height = (recordsInWindow.length - endIndex) * rowHeight + "px";
+        var rowsHeight = headerHeight + recordsInWindow.length * rowHeight;
+        var totalHeight = Math.max(this._containerElementHeight, rowsHeight);
+
+        this._recordsView.mainElement().style.height = totalHeight + "px";
+        this._recordsView.sidebarElement().style.height = totalHeight + "px";
+        this._recordsView.resizerElement().style.height = totalHeight + "px";
+
+        // Update visible rows.
+        var listRowElement = this._sidebarListElement.firstChild;
+        var width = this._graphRowsElementWidth;
+        this._itemsGraphsElement.removeChild(this._graphRowsElement);
+        var graphRowElement = this._graphRowsElement.firstChild;
+        var scheduleRefreshCallback = this._invalidateAndScheduleRefresh.bind(this, true, true);
+        var selectRecordCallback = this._selectRecord.bind(this);
+        this._itemsGraphsElement.removeChild(this._expandElements);
+        this._expandElements.removeChildren();
+
+        for (var i = 0; i < endIndex; ++i) {
+            var record = recordsInWindow[i];
+
+            if (i < startIndex) {
+                var lastChildIndex = i + record.visibleChildrenCount;
+                if (lastChildIndex >= startIndex && lastChildIndex < endIndex) {
+                    var expandElement = new WebInspector.TimelineExpandableElement(this._expandElements);
+                    var positions = this._calculator.computeBarGraphWindowPosition(record);
+                    expandElement._update(record, i, positions.left - this._expandOffset, positions.width);
+                }
+            } else {
+                if (!listRowElement) {
+                    listRowElement = new WebInspector.TimelineRecordListRow(selectRecordCallback, scheduleRefreshCallback).element;
+                    this._sidebarListElement.appendChild(listRowElement);
+                }
+                if (!graphRowElement) {
+                    graphRowElement = new WebInspector.TimelineRecordGraphRow(this._itemsGraphsElement, selectRecordCallback, scheduleRefreshCallback).element;
+                    this._graphRowsElement.appendChild(graphRowElement);
+                }
+
+                listRowElement.row.update(record, visibleTop);
+                graphRowElement.row.update(record, this._calculator, this._expandOffset, i);
+                if (this._lastSelectedRecord === record) {
+                    listRowElement.row.renderAsSelected(true);
+                    graphRowElement.row.renderAsSelected(true);
+                }
+
+                listRowElement = listRowElement.nextSibling;
+                graphRowElement = graphRowElement.nextSibling;
+            }
+        }
+
+        // Remove extra rows.
+        while (listRowElement) {
+            var nextElement = listRowElement.nextSibling;
+            listRowElement.row.dispose();
+            listRowElement = nextElement;
+        }
+        while (graphRowElement) {
+            var nextElement = graphRowElement.nextSibling;
+            graphRowElement.row.dispose();
+            graphRowElement = nextElement;
+        }
+
+        this._itemsGraphsElement.insertBefore(this._graphRowsElement, this._bottomGapElement);
+        this._itemsGraphsElement.appendChild(this._expandElements);
+        this._adjustScrollPosition(recordsInWindow.length * rowHeight + headerHeight);
+        this._updateSearchHighlight(false, true);
+
+        return recordsInWindow.length;
+    },
+
+    _refreshAllUtilizationBars: function()
+    {
+        this._refreshUtilizationBars(WebInspector.UIString("CPU"), this._mainThreadTasks, this._cpuBarsElement);
+        if (WebInspector.experimentsSettings.gpuTimeline.isEnabled())
+            this._refreshUtilizationBars(WebInspector.UIString("GPU"), this._gpuTasks, this._gpuBarsElement);
+    },
+
+    /**
+     * @param {string} name
+     * @param {!Array.<!TimelineAgent.TimelineEvent>} tasks
+     * @param {?Element} container
+     */
+    _refreshUtilizationBars: function(name, tasks, container)
+    {
+        if (!container)
+            return;
+
+        const barOffset = 3;
+        const minGap = 3;
+
+        var minWidth = WebInspector.TimelineCalculator._minWidth;
+        var widthAdjustment = minWidth / 2;
+
+        var width = this._graphRowsElementWidth;
+        var boundarySpan = this._panel.windowEndTime() - this._panel.windowStartTime();
+        var scale = boundarySpan / (width - minWidth - this._timelinePaddingLeft);
+        var startTime = (this._panel.windowStartTime() - this._timelinePaddingLeft * scale) * 1000;
+        var endTime = startTime + width * scale * 1000;
+
+        /**
+         * @param {number} value
+         * @param {!TimelineAgent.TimelineEvent} task
+         * @return {number}
+         */
+        function compareEndTime(value, task)
+        {
+            return value < task.endTime ? -1 : 1;
+        }
+
+        var taskIndex = insertionIndexForObjectInListSortedByFunction(startTime, tasks, compareEndTime);
+
+        var foreignStyle = "gpu-task-foreign";
+        var element = container.firstChild;
+        var lastElement;
+        var lastLeft;
+        var lastRight;
+
+        for (; taskIndex < tasks.length; ++taskIndex) {
+            var task = tasks[taskIndex];
+            if (task.startTime > endTime)
+                break;
+
+            var left = Math.max(0, this._calculator.computePosition(WebInspector.TimelineModel.startTimeInSeconds(task)) + barOffset - widthAdjustment);
+            var right = Math.min(width, this._calculator.computePosition(WebInspector.TimelineModel.endTimeInSeconds(task)) + barOffset + widthAdjustment);
+
+            if (lastElement) {
+                var gap = Math.floor(left) - Math.ceil(lastRight);
+                if (gap < minGap) {
+                    if (!task.data["foreign"])
+                        lastElement.classList.remove(foreignStyle);
+                    lastRight = right;
+                    lastElement._tasksInfo.lastTaskIndex = taskIndex;
+                    continue;
+                }
+                lastElement.style.width = (lastRight - lastLeft) + "px";
+            }
+
+            if (!element)
+                element = container.createChild("div", "timeline-graph-bar");
+            element.style.left = left + "px";
+            element._tasksInfo = {name: name, tasks: tasks, firstTaskIndex: taskIndex, lastTaskIndex: taskIndex};
+            if (task.data["foreign"])
+                element.classList.add(foreignStyle);
+            lastLeft = left;
+            lastRight = right;
+            lastElement = element;
+            element = element.nextSibling;
+        }
+
+        if (lastElement)
+            lastElement.style.width = (lastRight - lastLeft) + "px";
+
+        while (element) {
+            var nextElement = element.nextSibling;
+            element._tasksInfo = null;
+            container.removeChild(element);
+            element = nextElement;
+        }
+    },
+
+    _adjustScrollPosition: function(totalHeight)
+    {
+        // Prevent the container from being scrolled off the end.
+        if ((this._scrollTop + this._containerElementHeight) > totalHeight + 1)
+            this._containerElement.scrollTop = (totalHeight - this._containerElement.offsetHeight);
+    },
+
+    _getPopoverAnchor: function(element)
+    {
+        var anchor = element.enclosingNodeOrSelfWithClass("timeline-graph-bar");
+        if (anchor && anchor._tasksInfo)
+            return anchor;
+        return element.enclosingNodeOrSelfWithClass("timeline-frame-strip");
+    },
+
+    _mouseOut: function()
+    {
+        this._hideQuadHighlight();
+    },
+
+    /**
+     * @param {?Event} e
+     */
+    _mouseMove: function(e)
+    {
+        var rowElement = e.target.enclosingNodeOrSelfWithClass("timeline-tree-item");
+        if (rowElement && rowElement.row && rowElement.row._record.highlightQuad)
+            this._highlightQuad(rowElement.row._record.highlightQuad);
+        else
+            this._hideQuadHighlight();
+
+        var taskBarElement = e.target.enclosingNodeOrSelfWithClass("timeline-graph-bar");
+        if (taskBarElement && taskBarElement._tasksInfo) {
+            var offset = taskBarElement.offsetLeft;
+            this._timelineGrid.showCurtains(offset >= 0 ? offset : 0, taskBarElement.offsetWidth);
+        } else
+            this._timelineGrid.hideCurtains();
+    },
+
+    /**
+     * @param {?Event} event
+     */
+    _keyDown: function(event)
+    {
+        if (!this._lastSelectedRecord || event.shiftKey || event.metaKey || event.ctrlKey)
+            return;
+
+        var record = this._lastSelectedRecord;
+        var recordsInWindow = this._presentationModel.filteredRecords();
+        var index = recordsInWindow.indexOf(record);
+        var recordsInPage = Math.floor(this._containerElementHeight / WebInspector.TimelinePanel.rowHeight);
+        var rowHeight = WebInspector.TimelinePanel.rowHeight;
+
+        if (index === -1)
+            index = 0;
+
+        switch (event.keyIdentifier) {
+        case "Left":
+            if (record.parent) {
+                if ((!record.expandable || record.collapsed) && record.parent !== this._presentationModel.rootRecord()) {
+                    this._selectRecord(record.parent);
+                } else {
+                    record.collapsed = true;
+                    record.clicked = true;
+                    this._invalidateAndScheduleRefresh(true, true);
+                }
+            }
+            event.consume(true);
+            break;
+        case "Up":
+            if (--index < 0)
+                break;
+            this._selectRecord(recordsInWindow[index]);
+            event.consume(true);
+            break;
+        case "Right":
+            if (record.expandable && record.collapsed) {
+                record.collapsed = false;
+                record.clicked = true;
+                this._invalidateAndScheduleRefresh(true, true);
+            } else {
+                if (++index >= recordsInWindow.length)
+                    break;
+                this._selectRecord(recordsInWindow[index]);
+            }
+            event.consume(true);
+            break;
+        case "Down":
+            if (++index >= recordsInWindow.length)
+                break;
+            this._selectRecord(recordsInWindow[index]);
+            event.consume(true);
+            break;
+        case "PageUp":
+            index = Math.max(0, index - recordsInPage);
+            this._scrollTop = Math.max(0, this._scrollTop - recordsInPage * rowHeight);
+            this._containerElement.scrollTop = this._scrollTop;
+            this._selectRecord(recordsInWindow[index]);
+            event.consume(true);
+            break;
+        case "PageDown":
+            index = Math.min(recordsInWindow.length - 1, index + recordsInPage);
+            this._scrollTop = Math.min(this._containerElement.scrollHeight - this._containerElementHeight, this._scrollTop + recordsInPage * rowHeight);
+            this._containerElement.scrollTop = this._scrollTop;
+            this._selectRecord(recordsInWindow[index]);
+            event.consume(true);
+            break;
+        case "Home":
+            index = 0;
+            this._selectRecord(recordsInWindow[index]);
+            event.consume(true);
+            break;
+        case "End":
+            index = recordsInWindow.length - 1;
+            this._selectRecord(recordsInWindow[index]);
+            event.consume(true);
+            break;
+        }
+    },
+
+    /**
+     * @param {!Array.<number>} quad
+     */
+    _highlightQuad: function(quad)
+    {
+        if (this._highlightedQuad === quad)
+            return;
+        this._highlightedQuad = quad;
+        DOMAgent.highlightQuad(quad, WebInspector.Color.PageHighlight.Content.toProtocolRGBA(), WebInspector.Color.PageHighlight.ContentOutline.toProtocolRGBA());
+    },
+
+    _hideQuadHighlight: function()
+    {
+        if (this._highlightedQuad) {
+            delete this._highlightedQuad;
+            DOMAgent.hideHighlight();
+        }
+    },
+
+    /**
+     * @param {!Element} anchor
+     * @param {!WebInspector.Popover} popover
+     */
+    _showPopover: function(anchor, popover)
+    {
+        if (anchor.classList.contains("timeline-frame-strip")) {
+            var frame = anchor._frame;
+            popover.show(WebInspector.TimelinePresentationModel.generatePopupContentForFrame(frame), anchor);
+        } else {
+            if (anchor.row && anchor.row._record)
+                anchor.row._record.generatePopupContent(showCallback);
+            else if (anchor._tasksInfo)
+                popover.show(this._presentationModel.generateMainThreadBarPopupContent(anchor._tasksInfo), anchor, null, null, WebInspector.Popover.Orientation.Bottom);
+        }
+
+        function showCallback(popupContent)
+        {
+            popover.show(popupContent, anchor);
+        }
+    },
+
+    _closeRecordDetails: function()
+    {
+        this._popoverHelper.hidePopover();
+    },
+
+    _injectCategoryStyles: function()
+    {
+        var style = document.createElement("style");
+        var categories = WebInspector.TimelinePresentationModel.categories();
+
+        style.textContent = Object.values(categories).map(WebInspector.TimelinePresentationModel.createStyleRuleForCategory).join("\n");
+        document.head.appendChild(style);
+    },
+
+    jumpToNextSearchResult: function()
+    {
+        if (!this._searchResults || !this._searchResults.length)
+            return;
+        var index = this._selectedSearchResult ? this._searchResults.indexOf(this._selectedSearchResult) : -1;
+        this._jumpToSearchResult(index + 1);
+    },
+
+    jumpToPreviousSearchResult: function()
+    {
+        if (!this._searchResults || !this._searchResults.length)
+            return;
+        var index = this._selectedSearchResult ? this._searchResults.indexOf(this._selectedSearchResult) : 0;
+        this._jumpToSearchResult(index - 1);
+    },
+
+    _jumpToSearchResult: function(index)
+    {
+        this._selectSearchResult((index + this._searchResults.length) % this._searchResults.length);
+        this._highlightSelectedSearchResult(true);
+    },
+
+    _selectSearchResult: function(index)
+    {
+        this._selectedSearchResult = this._searchResults[index];
+        this._searchableView.updateCurrentMatchIndex(index);
+    },
+
+    /**
+     * @param {boolean} selectRecord
+     */
+    _highlightSelectedSearchResult: function(selectRecord)
+    {
+        this._clearHighlight();
+        if (this._searchFilter)
+            return;
+
+        var record = this._selectedSearchResult;
+        if (!record)
+            return;
+
+        if (selectRecord)
+            this._selectRecord(record);
+
+        for (var element = this._sidebarListElement.firstChild; element; element = element.nextSibling) {
+            if (element.row._record === record) {
+                element.row.highlight(this._searchRegExp, this._highlightDomChanges);
+                break;
+            }
+        }
+    },
+
+    _clearHighlight: function()
+    {
+        if (this._highlightDomChanges)
+            WebInspector.revertDomChanges(this._highlightDomChanges);
+        this._highlightDomChanges = [];
+    },
+
+    /**
+     * @param {boolean} revealRecord
+     * @param {boolean} shouldJump
+     */
+    _updateSearchHighlight: function(revealRecord, shouldJump)
+    {
+        if (this._searchFilter || !this._searchRegExp) {
+            this._clearHighlight();
+            return;
+        }
+
+        if (!this._searchResults)
+            this._updateSearchResults(shouldJump);
+        this._highlightSelectedSearchResult(revealRecord);
+    },
+
+    _updateSearchResults: function(shouldJump)
+    {
+        var searchRegExp = this._searchRegExp;
+        if (!searchRegExp)
+            return;
+
+        var matches = [];
+        var presentationModel = this._presentationModel;
+
+        function processRecord(record)
+        {
+            if (presentationModel.isVisible(record) && WebInspector.TimelineRecordListRow.testContentMatching(record, searchRegExp))
+                matches.push(record);
+            return false;
+        }
+        WebInspector.TimelinePresentationModel.forAllRecords(presentationModel.rootRecord().children, processRecord);
+
+        var matchesCount = matches.length;
+        if (matchesCount) {
+            this._searchResults = matches;
+            this._searchableView.updateSearchMatchesCount(matchesCount);
+
+            var selectedIndex = matches.indexOf(this._selectedSearchResult);
+            if (shouldJump && selectedIndex === -1)
+                selectedIndex = 0;
+            this._selectSearchResult(selectedIndex);
+        } else {
+            this._searchableView.updateSearchMatchesCount(0);
+            delete this._selectedSearchResult;
+        }
+    },
+
+    searchCanceled: function()
+    {
+        this._clearHighlight();
+        delete this._searchResults;
+        delete this._selectedSearchResult;
+        delete this._searchRegExp;
+    },
+
+    /**
+     * @param {string} query
+     * @param {boolean} shouldJump
+     */
+    performSearch: function(query, shouldJump)
+    {
+        this._searchRegExp = createPlainTextSearchRegex(query, "i");
+        delete this._searchResults;
+        this._updateSearchHighlight(true, shouldJump);
+    },
+
+    __proto__: WebInspector.View.prototype
+}
+
+/**
+ * @constructor
+ * @param {!WebInspector.TimelineModel} model
+ * @implements {WebInspector.TimelineGrid.Calculator}
+ */
+WebInspector.TimelineCalculator = function(model)
+{
+    this._model = model;
+}
+
+WebInspector.TimelineCalculator._minWidth = 5;
+
+WebInspector.TimelineCalculator.prototype = {
+    /**
+     * @param {number} time
+     * @return {number}
+     */
+    computePosition: function(time)
+    {
+        return (time - this._minimumBoundary) / this.boundarySpan() * this._workingArea + this.paddingLeft;
+    },
+
+    /**
+     * @return {!{start: number, end: number, endWithChildren: number, cpuWidth: number}}
+     */
+    computeBarGraphPercentages: function(record)
+    {
+        var start = (record.startTime - this._minimumBoundary) / this.boundarySpan() * 100;
+        var end = (record.startTime + record.selfTime - this._minimumBoundary) / this.boundarySpan() * 100;
+        var endWithChildren = (record.lastChildEndTime - this._minimumBoundary) / this.boundarySpan() * 100;
+        var cpuWidth = record.coalesced ? endWithChildren - start : record.cpuTime / this.boundarySpan() * 100;
+        return {start: start, end: end, endWithChildren: endWithChildren, cpuWidth: cpuWidth};
+    },
+
+    /**
+     * @return {!{left: number, width: number, widthWithChildren: number, cpuWidth: number}}
+     */
+    computeBarGraphWindowPosition: function(record)
+    {
+        var percentages = this.computeBarGraphPercentages(record);
+        var widthAdjustment = 0;
+
+        var left = this.computePosition(record.startTime);
+        var width = (percentages.end - percentages.start) / 100 * this._workingArea;
+        if (width < WebInspector.TimelineCalculator._minWidth) {
+            widthAdjustment = WebInspector.TimelineCalculator._minWidth - width;
+            width = WebInspector.TimelineCalculator._minWidth;
+        }
+        var widthWithChildren = (percentages.endWithChildren - percentages.start) / 100 * this._workingArea + widthAdjustment;
+        var cpuWidth = percentages.cpuWidth / 100 * this._workingArea + widthAdjustment;
+        if (percentages.endWithChildren > percentages.end)
+            widthWithChildren += widthAdjustment;
+        return {left: left, width: width, widthWithChildren: widthWithChildren, cpuWidth: cpuWidth};
+    },
+
+    setWindow: function(minimumBoundary, maximumBoundary)
+    {
+        this._minimumBoundary = minimumBoundary;
+        this._maximumBoundary = maximumBoundary;
+    },
+
+    /**
+     * @param {number} paddingLeft
+     * @param {number} clientWidth
+     */
+    setDisplayWindow: function(paddingLeft, clientWidth)
+    {
+        this._workingArea = clientWidth - WebInspector.TimelineCalculator._minWidth - paddingLeft;
+        this.paddingLeft = paddingLeft;
+    },
+
+    /**
+     * @param {number} value
+     * @param {boolean=} hires
+     * @return {string}
+     */
+    formatTime: function(value, hires)
+    {
+        return Number.secondsToString(value + this._minimumBoundary - this._model.minimumRecordTime(), hires);
+    },
+
+    /**
+     * @return {number}
+     */
+    maximumBoundary: function()
+    {
+        return this._maximumBoundary;
+    },
+
+    /**
+     * @return {number}
+     */
+    minimumBoundary: function()
+    {
+        return this._minimumBoundary;
+    },
+
+    /**
+     * @return {number}
+     */
+    zeroTime: function()
+    {
+        return this._model.minimumRecordTime();
+    },
+
+    /**
+     * @return {number}
+     */
+    boundarySpan: function()
+    {
+        return this._maximumBoundary - this._minimumBoundary;
+    }
+}
+
+/**
+ * @constructor
+ * @param {function(!WebInspector.TimelinePresentationModel.Record)} selectRecord
+ * @param {function()} scheduleRefresh
+ */
+WebInspector.TimelineRecordListRow = function(selectRecord, scheduleRefresh)
+{
+    this.element = document.createElement("div");
+    this.element.row = this;
+    this.element.style.cursor = "pointer";
+    this.element.addEventListener("click", this._onClick.bind(this), false);
+    this.element.addEventListener("mouseover", this._onMouseOver.bind(this), false);
+    this.element.addEventListener("mouseout", this._onMouseOut.bind(this), false);
+
+    // Warning is float right block, it goes first.
+    this._warningElement = this.element.createChild("div", "timeline-tree-item-warning hidden");
+
+    this._expandArrowElement = this.element.createChild("div", "timeline-tree-item-expand-arrow");
+    this._expandArrowElement.addEventListener("click", this._onExpandClick.bind(this), false);
+    var iconElement = this.element.createChild("span", "timeline-tree-icon");
+    this._typeElement = this.element.createChild("span", "type");
+
+    this._dataElement = this.element.createChild("span", "data dimmed");
+    this._scheduleRefresh = scheduleRefresh;
+    this._selectRecord = selectRecord;
+}
+
+WebInspector.TimelineRecordListRow.prototype = {
+    update: function(record, offset)
+    {
+        this._record = record;
+        this._offset = offset;
+
+        this.element.className = "timeline-tree-item timeline-category-" + record.category.name;
+        var paddingLeft = 5;
+        var step = -3;
+        for (var currentRecord = record.parent ? record.parent.parent : null; currentRecord; currentRecord = currentRecord.parent)
+            paddingLeft += 12 / (Math.max(1, step++));
+        this.element.style.paddingLeft = paddingLeft + "px";
+        if (record.isBackground())
+            this.element.classList.add("background");
+
+        this._typeElement.textContent = record.title;
+
+        if (this._dataElement.firstChild)
+            this._dataElement.removeChildren();
+
+        this._warningElement.enableStyleClass("hidden", !record.hasWarnings() && !record.childHasWarnings());
+        this._warningElement.enableStyleClass("timeline-tree-item-child-warning", record.childHasWarnings() && !record.hasWarnings());
+
+        if (record.detailsNode())
+            this._dataElement.appendChild(record.detailsNode());
+        this._expandArrowElement.enableStyleClass("parent", record.children && record.children.length);
+        this._expandArrowElement.enableStyleClass("expanded", record.visibleChildrenCount);
+        this._record.setUserObject("WebInspector.TimelineRecordListRow", this);
+    },
+
+    highlight: function(regExp, domChanges)
+    {
+        var matchInfo = this.element.textContent.match(regExp);
+        if (matchInfo)
+            WebInspector.highlightSearchResult(this.element, matchInfo.index, matchInfo[0].length, domChanges);
+    },
+
+    dispose: function()
+    {
+        this.element.remove();
+    },
+
+    /**
+     * @param {!Event} event
+     */
+    _onExpandClick: function(event)
+    {
+        this._record.collapsed = !this._record.collapsed;
+        this._record.clicked = true;
+        this._scheduleRefresh();
+        event.consume(true);
+    },
+
+    /**
+     * @param {?Event} event
+     */
+    _onClick: function(event)
+    {
+        this._selectRecord(this._record);
+    },
+
+    /**
+     * @param {boolean} selected
+     */
+    renderAsSelected: function(selected)
+    {
+        this.element.enableStyleClass("selected", selected);
+    },
+
+    /**
+     * @param {?Event} event
+     */
+    _onMouseOver: function(event)
+    {
+        this.element.classList.add("hovered");
+        var graphRow = /** @type {!WebInspector.TimelineRecordGraphRow} */ (this._record.getUserObject("WebInspector.TimelineRecordGraphRow"));
+        graphRow.element.classList.add("hovered");
+    },
+
+    /**
+     * @param {?Event} event
+     */
+    _onMouseOut: function(event)
+    {
+        this.element.classList.remove("hovered");
+        var graphRow = /** @type {!WebInspector.TimelineRecordGraphRow} */ (this._record.getUserObject("WebInspector.TimelineRecordGraphRow"));
+        graphRow.element.classList.remove("hovered");
+    }
+}
+
+/**
+ * @param {!WebInspector.TimelinePresentationModel.Record} record
+ * @param {!RegExp} regExp
+ */
+WebInspector.TimelineRecordListRow.testContentMatching = function(record, regExp)
+{
+    var toSearchText = record.title;
+    if (record.detailsNode())
+        toSearchText += " " + record.detailsNode().textContent;
+    return regExp.test(toSearchText);
+}
+
+/**
+ * @constructor
+ * @param {function(!WebInspector.TimelinePresentationModel.Record)} selectRecord
+ * @param {function()} scheduleRefresh
+ */
+WebInspector.TimelineRecordGraphRow = function(graphContainer, selectRecord, scheduleRefresh)
+{
+    this.element = document.createElement("div");
+    this.element.row = this;
+    this.element.addEventListener("mouseover", this._onMouseOver.bind(this), false);
+    this.element.addEventListener("mouseout", this._onMouseOut.bind(this), false);
+    this.element.addEventListener("click", this._onClick.bind(this), false);
+
+    this._barAreaElement = document.createElement("div");
+    this._barAreaElement.className = "timeline-graph-bar-area";
+    this.element.appendChild(this._barAreaElement);
+
+    this._barWithChildrenElement = document.createElement("div");
+    this._barWithChildrenElement.className = "timeline-graph-bar with-children";
+    this._barWithChildrenElement.row = this;
+    this._barAreaElement.appendChild(this._barWithChildrenElement);
+
+    this._barCpuElement = document.createElement("div");
+    this._barCpuElement.className = "timeline-graph-bar cpu"
+    this._barCpuElement.row = this;
+    this._barAreaElement.appendChild(this._barCpuElement);
+
+    this._barElement = document.createElement("div");
+    this._barElement.className = "timeline-graph-bar";
+    this._barElement.row = this;
+    this._barAreaElement.appendChild(this._barElement);
+
+    this._expandElement = new WebInspector.TimelineExpandableElement(graphContainer);
+
+    this._selectRecord = selectRecord;
+    this._scheduleRefresh = scheduleRefresh;
+}
+
+WebInspector.TimelineRecordGraphRow.prototype = {
+    update: function(record, calculator, expandOffset, index)
+    {
+        this._record = record;
+        this.element.className = "timeline-graph-side timeline-category-" + record.category.name;
+        if (record.isBackground())
+            this.element.classList.add("background");
+
+        var barPosition = calculator.computeBarGraphWindowPosition(record);
+        this._barWithChildrenElement.style.left = barPosition.left + "px";
+        this._barWithChildrenElement.style.width = barPosition.widthWithChildren + "px";
+        this._barElement.style.left = barPosition.left + "px";
+        this._barElement.style.width = barPosition.width + "px";
+        this._barCpuElement.style.left = barPosition.left + "px";
+        this._barCpuElement.style.width = barPosition.cpuWidth + "px";
+        this._expandElement._update(record, index, barPosition.left - expandOffset, barPosition.width);
+
+        this._record.setUserObject("WebInspector.TimelineRecordGraphRow", this);
+    },
+
+    /**
+     * @param {?Event} event
+     */
+    _onClick: function(event)
+    {
+        // check if we click arrow and expand if yes.
+        if (this._expandElement._arrow.containsEventPoint(event))
+            this._expand();
+        this._selectRecord(this._record);
+    },
+
+    /**
+     * @param {boolean} selected
+     */
+    renderAsSelected: function(selected)
+    {
+        this.element.enableStyleClass("selected", selected);
+    },
+
+    _expand: function()
+    {
+        this._record.collapsed = !this._record.collapsed;
+        this._record.clicked = true;
+        this._scheduleRefresh();
+    },
+
+    /**
+     * @param {?Event} event
+     */
+    _onMouseOver: function(event)
+    {
+        this.element.classList.add("hovered");
+        var listRow = /** @type {!WebInspector.TimelineRecordListRow} */ (this._record.getUserObject("WebInspector.TimelineRecordListRow"));
+        listRow.element.classList.add("hovered");
+    },
+
+    /**
+     * @param {?Event} event
+     */
+    _onMouseOut: function(event)
+    {
+        this.element.classList.remove("hovered");
+        var listRow = /** @type {!WebInspector.TimelineRecordListRow} */ (this._record.getUserObject("WebInspector.TimelineRecordListRow"));
+        listRow.element.classList.remove("hovered");
+    },
+
+    dispose: function()
+    {
+        this.element.remove();
+        this._expandElement._dispose();
+    }
+}
+
+/**
+ * @constructor
+ */
+WebInspector.TimelineExpandableElement = function(container)
+{
+    this._element = container.createChild("div", "timeline-expandable");
+    this._element.createChild("div", "timeline-expandable-left");
+    this._arrow = this._element.createChild("div", "timeline-expandable-arrow");
+}
+
+WebInspector.TimelineExpandableElement.prototype = {
+    _update: function(record, index, left, width)
+    {
+        const rowHeight = WebInspector.TimelinePanel.rowHeight;
+        if (record.visibleChildrenCount || record.expandable) {
+            this._element.style.top = index * rowHeight + "px";
+            this._element.style.left = left + "px";
+            this._element.style.width = Math.max(12, width + 25) + "px";
+            if (!record.collapsed) {
+                this._element.style.height = (record.visibleChildrenCount + 1) * rowHeight + "px";
+                this._element.classList.add("timeline-expandable-expanded");
+                this._element.classList.remove("timeline-expandable-collapsed");
+            } else {
+                this._element.style.height = rowHeight + "px";
+                this._element.classList.add("timeline-expandable-collapsed");
+                this._element.classList.remove("timeline-expandable-expanded");
+            }
+            this._element.classList.remove("hidden");
+        } else
+            this._element.classList.add("hidden");
+    },
+
+    _dispose: function()
+    {
+        this._element.remove();
+    }
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.TimelinePresentationModel.Filter}
+ */
+WebInspector.TimelineCategoryFilter = function()
+{
+}
+
+WebInspector.TimelineCategoryFilter.prototype = {
+    /**
+     * @param {!WebInspector.TimelinePresentationModel.Record} record
+     * @return {boolean}
+     */
+    accept: function(record)
+    {
+        return !record.category.hidden;
+    }
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.TimelinePresentationModel.Filter}
+ */
+WebInspector.TimelineIsLongFilter = function()
+{
+    this._minimumRecordDuration = 0;
+}
+
+WebInspector.TimelineIsLongFilter.prototype = {
+    /**
+     * @param {number} value
+     */
+    setMinimumRecordDuration: function(value)
+    {
+        this._minimumRecordDuration = value;
+    },
+
+    /**
+     * @param {!WebInspector.TimelinePresentationModel.Record} record
+     * @return {boolean}
+     */
+    accept: function(record)
+    {
+        return this._minimumRecordDuration ? ((record.lastChildEndTime - record.startTime) >= this._minimumRecordDuration) : true;
+    }
+}
+
+/**
+ * @param {!RegExp} regExp
+ * @constructor
+ * @implements {WebInspector.TimelinePresentationModel.Filter}
+ */
+WebInspector.TimelineSearchFilter = function(regExp)
+{
+    this._regExp = regExp;
+}
+
+WebInspector.TimelineSearchFilter.prototype = {
+    /**
+     * @param {!WebInspector.TimelinePresentationModel.Record} record
+     * @return {boolean}
+     */
+    accept: function(record)
+    {
+        return WebInspector.TimelineRecordListRow.testContentMatching(record, this._regExp);
+    }
+}
+
+/**
+ * @constructor
+ * @implements {WebInspector.TimelinePresentationModel.Filter}
+ */
+WebInspector.TimelineWindowFilter = function()
+{
+    this.reset();
+}
+
+WebInspector.TimelineWindowFilter.prototype = {
+    reset: function()
+    {
+        this._windowStartTime = 0;
+        this._windowEndTime = Infinity;
+    },
+
+    setWindowTimes: function(windowStartTime, windowEndTime)
+    {
+        this._windowStartTime = windowStartTime;
+        this._windowEndTime = windowEndTime;
+    },
+
+    /**
+     * @param {!WebInspector.TimelinePresentationModel.Record} record
+     * @return {boolean}
+     */
+    accept: function(record)
+    {
+        return record.lastChildEndTime >= this._windowStartTime && record.startTime <= this._windowEndTime;
+    }
+}
diff --git a/Source/devtools/front_end/TracingAgent.js b/Source/devtools/front_end/TracingAgent.js
index 864c637..e7ad664 100644
--- a/Source/devtools/front_end/TracingAgent.js
+++ b/Source/devtools/front_end/TracingAgent.js
@@ -64,7 +64,7 @@
     },
 
     /**
-     * @return {!Array.<{cat: string, args: !Object, ph: string, ts: number}>}
+     * @return {!Array.<!{cat: string, args: !Object, ph: string, ts: number}>}
      */
     events: function()
     {
@@ -109,6 +109,6 @@
 }
 
 /**
- * @type {?WebInspector.TracingAgent}
+ * @type {!WebInspector.TracingAgent}
  */
-WebInspector.tracingAgent = null;
+WebInspector.tracingAgent;
diff --git a/Source/devtools/front_end/UISourceCode.js b/Source/devtools/front_end/UISourceCode.js
index 776269b..ed06b75 100644
--- a/Source/devtools/front_end/UISourceCode.js
+++ b/Source/devtools/front_end/UISourceCode.js
@@ -169,11 +169,12 @@
          * @param {string=} newURL
          * @param {string=} newOriginURL
          * @param {!WebInspector.ResourceType=} newContentType
+         * @this {WebInspector.UISourceCode}
          */
         function innerCallback(success, newName, newURL, newOriginURL, newContentType)
         {
             if (success)
-                this._updateName(newName, newURL, newOriginURL, newContentType);
+                this._updateName(/** @type {string} */ (newName), /** @type {string} */ (newURL), /** @type {string} */ (newOriginURL), /** @type {!WebInspector.ResourceType} */ (newContentType));
             callback(success);
         }
     },
@@ -273,6 +274,7 @@
 
         /**
          * @param {?string} updatedContent
+         * @this {WebInspector.UISourceCode}
          */
         function contentLoaded(updatedContent)
         {
@@ -358,11 +360,12 @@
      */
     _saveURLWithFileManager: function(forceSaveAs, content)
     {
-        WebInspector.fileManager.save(this._url, content, forceSaveAs, callback.bind(this));
+        WebInspector.fileManager.save(this._url, /** @type {string} */ (content), forceSaveAs, callback.bind(this));
         WebInspector.fileManager.close(this._url);
 
         /**
          * @param {boolean} accepted
+         * @this {WebInspector.UISourceCode}
          */
         function callback(accepted)
         {
@@ -393,7 +396,7 @@
     {
         if (this._savedWithFileManager || this.project().canSetFileContent() || !this._isEditable)
             return false;
-        if (WebInspector.extensionServer.hasSubscribers(WebInspector.extensionAPI.Events.ResourceContentCommitted))
+        if (this._project.workspace().hasResourceContentTrackingExtensions())
             return false;
         return !!this._hasCommittedChanges;
     },
@@ -700,6 +703,7 @@
 
     /**
      * @param {!WebInspector.UILocation} uiLocation
+     * @return {!WebInspector.UILocation}
      */
     overrideLocation: function(uiLocation)
     {
@@ -927,7 +931,7 @@
      */
     uiLocation: function()
     {
-        // Should be overridden by subclasses.
+        throw "Not implemented";
     },
 
     dispose: function()
@@ -1026,7 +1030,8 @@
     revertToThis: function()
     {
         /**
-         * @param {?string} content
+         * @param {string} content
+         * @this {WebInspector.Revision}
          */
         function revert(content)
         {
@@ -1053,7 +1058,7 @@
     },
 
     /**
-     * @param {function(?string)} callback
+     * @param {function(string)} callback
      */
     requestContent: function(callback)
     {
@@ -1096,6 +1101,9 @@
         }
         historyItems.push({url: url, loaderId: loaderId, timestamp: timestamp, key: key});
 
+        /**
+         * @this {WebInspector.Revision}
+         */
         function persist()
         {
             window.localStorage[key] = this._content;
diff --git a/Source/devtools/front_end/UISourceCodeFrame.js b/Source/devtools/front_end/UISourceCodeFrame.js
index 76a4911..4781422 100644
--- a/Source/devtools/front_end/UISourceCodeFrame.js
+++ b/Source/devtools/front_end/UISourceCodeFrame.js
@@ -42,9 +42,24 @@
     this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyChanged, this._onWorkingCopyChanged, this);
     this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._onWorkingCopyCommitted, this);
     this._updateStyle();
+    this.addShortcut(WebInspector.KeyboardShortcut.makeKey("s", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta), this._commitEditing.bind(this));
 }
 
 WebInspector.UISourceCodeFrame.prototype = {
+    _commitEditing: function()
+    {
+        this.commitEditing();
+        return true;
+    },
+
+    /**
+     * @return {!WebInspector.UISourceCode}
+     */
+    uiSourceCode: function()
+    {
+        return this._uiSourceCode;
+    },
+
     _enableAutocompletionIfNeeded: function()
     {
         this.textEditor.setCompletionDictionary(WebInspector.settings.textEditorAutocompletion.get() ? new WebInspector.SampleCompletionDictionary() : null);
@@ -86,10 +101,7 @@
         this._uiSourceCode.checkContentUpdated();
     },
 
-    /**
-     * @param {string} text
-     */
-    commitEditing: function(text)
+    commitEditing: function()
     {
         if (!this._uiSourceCode.isDirty())
             return;
@@ -120,11 +132,14 @@
         }
     },
 
+    beforeFormattedChange: function() { },
+
     /**
      * @param {!WebInspector.Event} event
      */
     _onFormattedChanged: function(event)
     {
+        this.beforeFormattedChange();
         var content = /** @type {string} */ (event.data.content);
         this._textEditor.setReadOnly(this._uiSourceCode.formatted());
         var selection = this._textEditor.selection();
diff --git a/Source/devtools/front_end/UIUtils.js b/Source/devtools/front_end/UIUtils.js
index 45a9992..9b88482 100644
--- a/Source/devtools/front_end/UIUtils.js
+++ b/Source/devtools/front_end/UIUtils.js
@@ -34,11 +34,14 @@
  * @param {?function(!MouseEvent): boolean} elementDragStart
  * @param {function(!MouseEvent)} elementDrag
  * @param {?function(!MouseEvent)} elementDragEnd
- * @param {string} cursor
+ * @param {!string} cursor
+ * @param {?string=} hoverCursor
  */
-WebInspector.installDragHandle = function(element, elementDragStart, elementDrag, elementDragEnd, cursor)
+WebInspector.installDragHandle = function(element, elementDragStart, elementDrag, elementDragEnd, cursor, hoverCursor)
 {
     element.addEventListener("mousedown", WebInspector.elementDragStart.bind(WebInspector, elementDragStart, elementDrag, elementDragEnd, cursor), false);
+    if (hoverCursor !== null)
+        element.style.cursor = hoverCursor || cursor;
 }
 
 /**
@@ -161,95 +164,6 @@
     }
 }
 
-WebInspector.animateStyle = function(animations, duration, callback)
-{
-    var startTime = new Date().getTime();
-    var hasCompleted = false;
-
-    const animationsLength = animations.length;
-    const propertyUnit = {opacity: ""};
-    const defaultUnit = "px";
-
-    // Pre-process animations.
-    for (var i = 0; i < animationsLength; ++i) {
-        var animation = animations[i];
-        var element = null, start = null, end = null, key = null;
-        for (key in animation) {
-            if (key === "element")
-                element = animation[key];
-            else if (key === "start")
-                start = animation[key];
-            else if (key === "end")
-                end = animation[key];
-        }
-
-        if (!element || !end)
-            continue;
-
-        if (!start) {
-            var computedStyle = element.ownerDocument.defaultView.getComputedStyle(element);
-            start = {};
-            for (key in end)
-                start[key] = parseInt(computedStyle.getPropertyValue(key), 10);
-            animation.start = start;
-        } else
-            for (key in start)
-                element.style.setProperty(key, start[key] + (key in propertyUnit ? propertyUnit[key] : defaultUnit));
-    }
-
-    function animateLoop()
-    {
-        if (hasCompleted)
-            return;
-
-        var complete = new Date().getTime() - startTime;
-
-        // Make style changes.
-        for (var i = 0; i < animationsLength; ++i) {
-            var animation = animations[i];
-            var element = animation.element;
-            var start = animation.start;
-            var end = animation.end;
-            if (!element || !end)
-                continue;
-
-            var style = element.style;
-            for (key in end) {
-                var endValue = end[key];
-                if (complete < duration) {
-                    var startValue = start[key];
-                    // Linear animation.
-                    var newValue = startValue + (endValue - startValue) * complete / duration;
-                    style.setProperty(key, newValue + (key in propertyUnit ? propertyUnit[key] : defaultUnit));
-                } else
-                    style.setProperty(key, endValue + (key in propertyUnit ? propertyUnit[key] : defaultUnit));
-            }
-        }
-
-        // End condition.
-        if (complete >= duration)
-            hasCompleted = true;
-        if (callback)
-            callback(hasCompleted);
-        if (!hasCompleted)
-            window.requestAnimationFrame(animateLoop);
-    }
-
-    function forceComplete()
-    {
-        if (hasCompleted)
-            return;
-
-        duration = 0;
-        animateLoop();
-    }
-
-    window.requestAnimationFrame(animateLoop);
-    return {
-        forceComplete: forceComplete
-    };
-}
-
 WebInspector.isBeingEdited = function(element)
 {
     if (element.classList.contains("text-prompt") || element.nodeName === "INPUT" || element.nodeName === "TEXTAREA")
@@ -284,66 +198,6 @@
     return true;
 }
 
-/**
- * @constructor
- * @param {function(!Element,string,string,*,string)} commitHandler
- * @param {function(!Element,*)} cancelHandler
- * @param {*=} context
- */
-WebInspector.EditingConfig = function(commitHandler, cancelHandler, context)
-{
-    this.commitHandler = commitHandler;
-    this.cancelHandler = cancelHandler
-    this.context = context;
-
-    /**
-     * Handles the "paste" event, return values are the same as those for customFinishHandler
-     * @type {function(!Element)|undefined}
-     */
-    this.pasteHandler;
-
-    /** 
-     * Whether the edited element is multiline
-     * @type {boolean|undefined}
-     */
-    this.multiline;
-
-    /**
-     * Custom finish handler for the editing session (invoked on keydown)
-     * @type {function(!Element,*)|undefined}
-     */
-    this.customFinishHandler;
-}
-
-WebInspector.EditingConfig.prototype = {
-    setPasteHandler: function(pasteHandler)
-    {
-        this.pasteHandler = pasteHandler;
-    },
-
-    /**
-     * @param {string} initialValue
-     * @param {!Object} mode
-     * @param {string} theme
-     * @param {boolean=} lineWrapping
-     * @param {boolean=} smartIndent
-     */
-    setMultilineOptions: function(initialValue, mode, theme, lineWrapping, smartIndent)
-    {
-        this.multiline = true;
-        this.initialValue = initialValue;
-        this.mode = mode;
-        this.theme = theme;
-        this.lineWrapping = lineWrapping;
-        this.smartIndent = smartIndent;
-    },
-
-    setCustomFinishHandler: function(customFinishHandler)
-    {
-        this.customFinishHandler = customFinishHandler;
-    }
-}
-
 WebInspector.CSSNumberRegex = /^(-?(?:\d+(?:\.\d+)?|\.\d+))$/;
 
 WebInspector.StyleValueDelimiters = " \xA0\t\n\"':;,/()";
@@ -529,198 +383,6 @@
     return false;
 }
 
-/** 
- * @param {!Element} element
- * @param {!WebInspector.EditingConfig=} config
- * @return {?{cancel: function(), commit: function(), codeMirror: !CodeMirror, setWidth: function(number)}}
- */
-WebInspector.startEditing = function(element, config)
-{
-    if (!WebInspector.markBeingEdited(element, true))
-        return null;
-
-    config = config || new WebInspector.EditingConfig(function() {}, function() {});
-    var committedCallback = config.commitHandler;
-    var cancelledCallback = config.cancelHandler;
-    var pasteCallback = config.pasteHandler;
-    var context = config.context;
-    var isMultiline = config.multiline || false;
-    var oldText = isMultiline ? config.initialValue : getContent(element);
-    var moveDirection = "";
-    var oldTabIndex;
-    var codeMirror;
-    var cssLoadView;
-
-    /**
-     * @param {?Event} e
-     */
-    function consumeCopy(e)
-    {
-        e.consume();
-    }
-
-    if (isMultiline) {
-        loadScript("CodeMirrorTextEditor.js");
-        cssLoadView = new WebInspector.CodeMirrorCSSLoadView();
-        cssLoadView.show(element);
-        WebInspector.setCurrentFocusElement(element);
-        element.addEventListener("copy", consumeCopy, false);
-        codeMirror = window.CodeMirror(element, {
-            mode: config.mode,
-            lineWrapping: config.lineWrapping,
-            smartIndent: config.smartIndent,
-            autofocus: true,
-            theme: config.theme,
-            value: oldText
-        });
-        codeMirror.getWrapperElement().classList.add("source-code");
-        codeMirror.on("cursorActivity", function(cm) {
-            cm.display.cursor.scrollIntoViewIfNeeded(false);
-        });
-    } else {
-        element.classList.add("editing");
-
-        oldTabIndex = element.getAttribute("tabIndex");
-        if (typeof oldTabIndex !== "number" || oldTabIndex < 0)
-            element.tabIndex = 0;
-        WebInspector.setCurrentFocusElement(element);
-    }
-
-    /**
-     * @param {number} width
-     */
-    function setWidth(width)
-    {
-        const padding = 30;
-        codeMirror.getWrapperElement().style.width = (width - codeMirror.getWrapperElement().offsetLeft - padding) + "px";
-        codeMirror.refresh();
-    }
-
-    /**
-     * @param {?Event=} e
-     */
-    function blurEventListener(e) {
-        if (!isMultiline || !e || !e.relatedTarget || !e.relatedTarget.isSelfOrDescendant(element))
-            editingCommitted.call(element);
-    }
-
-    function getContent(element) {
-        if (isMultiline)
-            return codeMirror.getValue();
-
-        if (element.tagName === "INPUT" && element.type === "text")
-            return element.value;
-
-        return element.textContent;
-    }
-
-    /** @this {Element} */
-    function cleanUpAfterEditing()
-    {
-        WebInspector.markBeingEdited(element, false);
-
-        element.removeEventListener("blur", blurEventListener, isMultiline);
-        element.removeEventListener("keydown", keyDownEventListener, true);
-        if (pasteCallback)
-            element.removeEventListener("paste", pasteEventListener, true);
-
-        WebInspector.restoreFocusFromElement(element);
-
-        if (isMultiline) {
-            element.removeEventListener("copy", consumeCopy, false);
-            cssLoadView.detach();
-            return;
-        }
-
-        this.classList.remove("editing");
-        
-        if (typeof oldTabIndex !== "number")
-            element.removeAttribute("tabIndex");
-        else
-            this.tabIndex = oldTabIndex;
-        this.scrollTop = 0;
-        this.scrollLeft = 0;
-    }
-
-    /** @this {Element} */
-    function editingCancelled()
-    {
-        if (isMultiline)
-            codeMirror.setValue(oldText);
-        else {
-            if (this.tagName === "INPUT" && this.type === "text")
-                this.value = oldText;
-            else
-                this.textContent = oldText;
-        }
-
-        cleanUpAfterEditing.call(this);
-
-        cancelledCallback(this, context);
-    }
-
-    /** @this {Element} */
-    function editingCommitted()
-    {
-        cleanUpAfterEditing.call(this);
-
-        committedCallback(this, getContent(this), oldText, context, moveDirection);
-    }
-
-    function defaultFinishHandler(event)
-    {
-        var isMetaOrCtrl = WebInspector.isMac() ?
-            event.metaKey && !event.shiftKey && !event.ctrlKey && !event.altKey :
-            event.ctrlKey && !event.shiftKey && !event.metaKey && !event.altKey;
-        if (isEnterKey(event) && (event.isMetaOrCtrlForTest || !isMultiline || isMetaOrCtrl))
-            return "commit";
-        else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code || event.keyIdentifier === "U+001B")
-            return "cancel";
-        else if (!isMultiline && event.keyIdentifier === "U+0009") // Tab key
-            return "move-" + (event.shiftKey ? "backward" : "forward");
-    }
-
-    function handleEditingResult(result, event)
-    {
-        if (result === "commit") {
-            editingCommitted.call(element);
-            event.consume(true);
-        } else if (result === "cancel") {
-            editingCancelled.call(element);
-            event.consume(true);
-        } else if (result && result.startsWith("move-")) {
-            moveDirection = result.substring(5);
-            if (event.keyIdentifier !== "U+0009")
-                blurEventListener();
-        }
-    }
-
-    function pasteEventListener(event)
-    {
-        var result = pasteCallback(event);
-        handleEditingResult(result, event);
-    }
-
-    function keyDownEventListener(event)
-    {
-        var handler = config.customFinishHandler || defaultFinishHandler;
-        var result = handler(event);
-        handleEditingResult(result, event);
-    }
-
-    element.addEventListener("blur", blurEventListener, isMultiline);
-    element.addEventListener("keydown", keyDownEventListener, true);
-    if (pasteCallback)
-        element.addEventListener("paste", pasteEventListener, true);
-
-    return {
-        cancel: editingCancelled.bind(element),
-        commit: editingCommitted.bind(element),
-        codeMirror: codeMirror, // For testing.
-        setWidth: setWidth
-    };
-}
-
 /**
  * @param {number} seconds
  * @param {boolean=} higherResolution
@@ -806,84 +468,6 @@
     return WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Copy link address" : "Copy Link Address");
 }
 
-WebInspector.platform = function()
-{
-    if (!WebInspector._platform)
-        WebInspector._platform = InspectorFrontendHost.platform();
-    return WebInspector._platform;
-}
-
-WebInspector.isMac = function()
-{
-    if (typeof WebInspector._isMac === "undefined")
-        WebInspector._isMac = WebInspector.platform() === "mac";
-
-    return WebInspector._isMac;
-}
-
-WebInspector.isWin = function()
-{
-    if (typeof WebInspector._isWin === "undefined")
-        WebInspector._isWin = WebInspector.platform() === "windows";
-
-    return WebInspector._isWin;
-}
-
-WebInspector.PlatformFlavor = {
-    WindowsVista: "windows-vista",
-    MacTiger: "mac-tiger",
-    MacLeopard: "mac-leopard",
-    MacSnowLeopard: "mac-snowleopard",
-    MacLion: "mac-lion",
-    MacMountainLion: "mac-mountain-lion"
-}
-
-WebInspector.platformFlavor = function()
-{
-    function detectFlavor()
-    {
-        const userAgent = navigator.userAgent;
-
-        if (WebInspector.platform() === "windows") {
-            var match = userAgent.match(/Windows NT (\d+)\.(?:\d+)/);
-            if (match && match[1] >= 6)
-                return WebInspector.PlatformFlavor.WindowsVista;
-            return null;
-        } else if (WebInspector.platform() === "mac") {
-            var match = userAgent.match(/Mac OS X\s*(?:(\d+)_(\d+))?/);
-            if (!match || match[1] != 10)
-                return WebInspector.PlatformFlavor.MacSnowLeopard;
-            switch (Number(match[2])) {
-                case 4:
-                    return WebInspector.PlatformFlavor.MacTiger;
-                case 5:
-                    return WebInspector.PlatformFlavor.MacLeopard;
-                case 6:
-                    return WebInspector.PlatformFlavor.MacSnowLeopard;
-                case 7:
-                    return WebInspector.PlatformFlavor.MacLion;
-                case 8:
-                    return WebInspector.PlatformFlavor.MacMountainLion;
-                default:
-                    return "";
-            }
-        }
-    }
-
-    if (!WebInspector._platformFlavor)
-        WebInspector._platformFlavor = detectFlavor();
-
-    return WebInspector._platformFlavor;
-}
-
-WebInspector.port = function()
-{
-    if (!WebInspector._port)
-        WebInspector._port = InspectorFrontendHost.port();
-
-    return WebInspector._port;
-}
-
 WebInspector.installPortStyles = function()
 {
     var platform = WebInspector.platform();
@@ -1023,9 +607,29 @@
 
 /**
  * @param {!Element} element
+ * @param {string} className
+ */
+WebInspector.runCSSAnimationOnce = function(element, className)
+{
+    function animationEndCallback()
+    {
+        element.classList.remove(className);
+        element.removeEventListener("animationend", animationEndCallback, false);
+    }
+
+    if (element.classList.contains(className))
+        element.classList.remove(className);
+
+    element.addEventListener("animationend", animationEndCallback, false);
+    element.classList.add(className);
+}
+
+/**
+ * @param {!Element} element
  * @param {!Array.<!WebInspector.SourceRange>} resultRanges
  * @param {string} styleClass
  * @param {!Array.<!Object>=} changes
+ * @return {!Array.<!Element>}
  */
 WebInspector.highlightRangesWithStyleClass = function(element, resultRanges, styleClass, changes)
 {
@@ -1181,26 +785,11 @@
     methods.put(method);
 }
 
-/**
- * This bogus view is needed to load/unload CodeMirror-related CSS on demand.
- *
- * @constructor
- * @extends {WebInspector.View}
- */
-WebInspector.CodeMirrorCSSLoadView = function()
-{
-    WebInspector.View.call(this);
-    this.element.classList.add("hidden");
-    this.registerRequiredCSS("cm/codemirror.css");
-    this.registerRequiredCSS("cm/cmdevtools.css");
-}
-
-WebInspector.CodeMirrorCSSLoadView.prototype = {
-    __proto__: WebInspector.View.prototype
-}
-
 ;(function() {
 
+/**
+ * @this {Window}
+ */
 function windowLoaded()
 {
     window.addEventListener("focus", WebInspector._windowFocused, false);
diff --git a/Source/devtools/front_end/View.js b/Source/devtools/front_end/View.js
index bfd7547..84168b5 100644
--- a/Source/devtools/front_end/View.js
+++ b/Source/devtools/front_end/View.js
@@ -31,6 +31,7 @@
 WebInspector.View = function()
 {
     this.element = document.createElement("div");
+    this.element.className = "view";
     this.element.__view = this;
     this._visible = true;
     this._isRoot = false;
@@ -52,6 +53,11 @@
         this._isRoot = true;
     },
 
+    makeLayoutBoundary: function()
+    {
+        this._isLayoutBoundary = true;
+    },
+
     /**
      * @return {?WebInspector.View}
      */
@@ -60,6 +66,9 @@
         return this._parentView;
     },
 
+    /**
+     * @return {boolean}
+     */
     isShowing: function()
     {
         return this._isShowing;
@@ -141,6 +150,41 @@
         this._callOnVisibleChildren(this._processOnResize);
     },
 
+    _processDiscardCachedSize: function()
+    {
+        if (this._isLayoutBoundary) {
+            this.element.style.removeProperty("width");
+            this.element.style.removeProperty("height");
+        }
+        this._callOnVisibleChildren(this._processDiscardCachedSize);
+    },
+
+    _cacheSize: function()
+    {
+        this._prepareCacheSize();
+        this._applyCacheSize();
+    },
+
+    _prepareCacheSize: function()
+    {
+        if (this._isLayoutBoundary) {
+            this._cachedOffsetWidth = this.element.offsetWidth;
+            this._cachedOffsetHeight = this.element.offsetHeight;
+        }
+        this._callOnVisibleChildren(this._prepareCacheSize);
+    },
+
+    _applyCacheSize: function()
+    {
+        if (this._isLayoutBoundary) {
+            this.element.style.setProperty("width", this._cachedOffsetWidth + "px");
+            this.element.style.setProperty("height", this._cachedOffsetHeight + "px");
+            delete this._cachedOffsetWidth;
+            delete this._cachedOffsetHeight;
+        }
+        this._callOnVisibleChildren(this._applyCacheSize);
+    },
+
     /**
      * @param {function(this:WebInspector.View)} notification
      */
@@ -209,8 +253,10 @@
                 WebInspector.View._originalAppendChild.call(parentElement, this.element);
         }
 
-        if (this._parentIsShowing())
+        if (this._parentIsShowing()) {
             this._processWasShown();
+            this._cacheSize();
+        }
     },
 
     /**
@@ -222,8 +268,10 @@
         if (!parentElement)
             return;
 
-        if (this._parentIsShowing())
+        if (this._parentIsShowing()) {
+            this._processDiscardCachedSize();
             this._processWillHide();
+        }
 
         if (this._hideOnDetach && !overrideHideOnDetach) {
             this.element.classList.remove("visible");
@@ -258,6 +306,9 @@
             children[i].detach();
     },
 
+    /**
+     * @return {!Array.<!Element>}
+     */
     elementsToRestoreScrollPositionsFor: function()
     {
         return [this.element];
@@ -285,6 +336,9 @@
         }
     },
 
+    /**
+     * @return {boolean}
+     */
     canHighlightPosition: function()
     {
         return false;
@@ -300,7 +354,13 @@
 
     doResize: function()
     {
-        this._processOnResize();
+        if (!this.isShowing())
+            return;
+        this._processDiscardCachedSize();
+        // No matter what notification we are in, dispatching onResize is not needed.
+        if (!this._inNotification())
+            this._callOnVisibleChildren(this._processOnResize);
+        this._cacheSize();
     },
 
     registerRequiredCSS: function(cssFile)
@@ -483,21 +543,6 @@
 }
 
 /**
- * @interface
- */
-WebInspector.ViewFactory = function()
-{
-}
-
-WebInspector.ViewFactory.prototype = {
-    /**
-     * @param {string=} id
-     * @return {?WebInspector.View}
-     */
-    createView: function(id) {}
-}
-
-/**
  * @constructor
  * @extends {WebInspector.View}
  * @param {function()} resizeCallback
@@ -517,16 +562,15 @@
     __proto__: WebInspector.View.prototype
 }
 
-
 Element.prototype.appendChild = function(child)
 {
-    WebInspector.View._assert(!child.__view, "Attempt to add view via regular DOM operation.");
+    WebInspector.View._assert(!child.__view || child.parentElement === this, "Attempt to add view via regular DOM operation.");
     return WebInspector.View._originalAppendChild.call(this, child);
 }
 
 Element.prototype.insertBefore = function(child, anchor)
 {
-    WebInspector.View._assert(!child.__view, "Attempt to add view via regular DOM operation.");
+    WebInspector.View._assert(!child.__view || child.parentElement === this, "Attempt to add view via regular DOM operation.");
     return WebInspector.View._originalInsertBefore.call(this, child, anchor);
 }
 
diff --git a/Source/devtools/front_end/WatchExpressionsSidebarPane.js b/Source/devtools/front_end/WatchExpressionsSidebarPane.js
index 06effd0..5cea2a4 100644
--- a/Source/devtools/front_end/WatchExpressionsSidebarPane.js
+++ b/Source/devtools/front_end/WatchExpressionsSidebarPane.js
@@ -136,11 +136,21 @@
 WebInspector.WatchExpressionsSection.NewWatchExpression = "\xA0";
 
 WebInspector.WatchExpressionsSection.prototype = {
+    /**
+     * @param {?Event=} e
+     */
     update: function(e)
     {
         if (e)
             e.consume();
 
+        /***
+         * @param {string} expression
+         * @param {number} watchIndex
+         * @param {?WebInspector.RemoteObject} result
+         * @param {boolean} wasThrown
+         * @this {WebInspector.WatchExpressionsSection}
+         */
         function appendResult(expression, watchIndex, result, wasThrown)
         {
             if (!result)
@@ -256,6 +266,9 @@
         this.update();
     },
 
+    /**
+     * @return {?TreeElement}
+     */
     findAddedTreeElement: function()
     {
         var children = this.propertiesTreeOutline.children;
@@ -263,8 +276,12 @@
             if (children[i].property.name === WebInspector.WatchExpressionsSection.NewWatchExpression)
                 return children[i];
         }
+        return null;
     },
 
+    /**
+     * @return {number}
+     */
     saveExpressions: function()
     {
         var toSave = [];
@@ -420,6 +437,9 @@
         this.treeOutline.section.updateExpression(this, null);
     },
 
+    /**
+     * @return {boolean}
+     */
     renderPromptAsBlock: function()
     {
         return true;
@@ -427,6 +447,7 @@
 
     /**
      * @param {!Event=} event
+     * @return {!Array.<!Element|string>}
      */
     elementAndValueToEdit: function(event)
     {
diff --git a/Source/devtools/front_end/WorkerFrontendManager.js b/Source/devtools/front_end/WorkerFrontendManager.js
new file mode 100644
index 0000000..0d81236
--- /dev/null
+++ b/Source/devtools/front_end/WorkerFrontendManager.js
@@ -0,0 +1,205 @@
+
+/*
+ * Copyright (C) 2014 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.
+ */
+
+/**
+ * @constructor
+ */
+WebInspector.WorkerFrontendManager = function()
+{
+    this._workerIdToWindow = {};
+
+    WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerAdded, this._workerAdded, this);
+    WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerRemoved, this._workerRemoved, this);
+    WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkersCleared, this._workersCleared, this);
+    WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.MessageFromWorker, this._sendMessageToWorkerInspector, this);
+    WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerDisconnected, this._disconnectedFromWorker, this);
+
+    window.addEventListener("message", this._handleMessage.bind(this), true);
+}
+
+WebInspector.WorkerFrontendManager.prototype = {
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _workerAdded: function(event)
+    {
+        var data = /** @type {{workerId: number, url: string, inspectorConnected: boolean}} */ (event.data);
+
+        if (data.inspectorConnected)
+            this._openInspectorWindow(data.workerId, true);
+    },
+
+    /**
+     * @param {!WebInspector.Event} event
+     */
+    _workerRemoved: function(event)
+    {
+        var data = /** @type {{workerId: number, url: string}} */ (event.data);
+
+        this.closeWorkerInspector(data.workerId);
+    },
+
+    _workersCleared: function()
+    {
+        for (var workerId in this._workerIdToWindow)
+            this.closeWorkerInspector(workerId);
+    },
+
+    _handleMessage: function(event)
+    {
+        var data = /** @type {{workerId: string, command: string, message: !Object}} */ (event.data);
+        var workerId = data["workerId"];
+        workerId = parseInt(workerId, 10);
+        var command = data.command;
+        var message = data.message;
+
+        if (command == "sendMessageToBackend")
+            WorkerAgent.sendMessageToWorker(workerId, message);
+    },
+
+    _sendMessageToWorkerInspector: function(event)
+    {
+        var data = (event.data);
+
+        var workerInspectorWindow = this._workerIdToWindow[data.workerId];
+        if (workerInspectorWindow)
+            workerInspectorWindow.postMessage(data.message, "*");
+    },
+
+    openWorkerInspector: function(workerId)
+    {
+        var existingInspector = this._workerIdToWindow[workerId];
+        if (existingInspector) {
+            existingInspector.focus();
+            return;
+        }
+
+        this._openInspectorWindow(workerId, false);
+        WorkerAgent.connectToWorker(workerId);
+    },
+
+    _openInspectorWindow: function(workerId, workerIsPaused)
+    {
+        var search = window.location.search;
+        var hash = window.location.hash;
+        var url = window.location.href;
+        // Make sure hash is in rear
+        url = url.replace(hash, "");
+        url += (search ? "&dedicatedWorkerId=" : "?dedicatedWorkerId=") + workerId;
+        if (workerIsPaused)
+            url += "&workerPaused=true";
+        url = url.replace("docked=true&", "");
+        url = url.replace("can_dock=true&", "");
+        url += hash;
+        var width = WebInspector.settings.workerInspectorWidth.get();
+        var height = WebInspector.settings.workerInspectorHeight.get();
+        // Set location=0 just to make sure the front-end will be opened in a separate window, not in new tab.
+        var workerInspectorWindow = window.open(url, undefined, "location=0,width=" + width + ",height=" + height);
+        workerInspectorWindow.addEventListener("resize", this._onWorkerInspectorResize.bind(this, workerInspectorWindow), false);
+        this._workerIdToWindow[workerId] = workerInspectorWindow;
+        workerInspectorWindow.addEventListener("beforeunload", this._workerInspectorClosing.bind(this, workerId), true);
+
+        // Listen to beforeunload in detached state and to the InspectorClosing event in case of attached inspector.
+        window.addEventListener("unload", this._pageInspectorClosing.bind(this), true);
+    },
+
+    closeWorkerInspector: function(workerId)
+    {
+        var workerInspectorWindow = this._workerIdToWindow[workerId];
+        if (workerInspectorWindow)
+            workerInspectorWindow.close();
+    },
+
+    _onWorkerInspectorResize: function(workerInspectorWindow)
+    {
+        var doc = workerInspectorWindow.document;
+        WebInspector.settings.workerInspectorWidth.set(doc.width);
+        WebInspector.settings.workerInspectorHeight.set(doc.height);
+    },
+
+    _workerInspectorClosing: function(workerId, event)
+    {
+        if (event.target.location.href === "about:blank")
+            return;
+        if (this._ignoreWorkerInspectorClosing)
+            return;
+        delete this._workerIdToWindow[workerId];
+        WorkerAgent.disconnectFromWorker(workerId);
+    },
+
+    _disconnectedFromWorker: function()
+    {
+        var screen = new WebInspector.WorkerTerminatedScreen();
+        WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, screen.hide, screen);
+        screen.showModal();
+    },
+
+    _pageInspectorClosing: function()
+    {
+        this._ignoreWorkerInspectorClosing = true;
+        for (var workerId in this._workerIdToWindow) {
+            this._workerIdToWindow[workerId].close();
+            WorkerAgent.disconnectFromWorker(parseInt(workerId, 10));
+        }
+    }
+
+}
+/**
+ * @type {?WebInspector.WorkerFrontendManager}
+ */
+WebInspector.workerFrontendManager = null;
+
+/**
+ * @constructor
+ * @extends {WebInspector.HelpScreen}
+ */
+WebInspector.WorkerTerminatedScreen = function()
+{
+    WebInspector.HelpScreen.call(this, WebInspector.UIString("Inspected worker terminated"));
+    var p = this.contentElement.createChild("p");
+    p.classList.add("help-section");
+    p.textContent = WebInspector.UIString("Inspected worker has terminated. Once it restarts we will attach to it automatically.");
+}
+
+WebInspector.WorkerTerminatedScreen.prototype = {
+    /**
+     * @override
+     */
+    willHide: function()
+    {
+        WebInspector.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this.hide, this);
+        WebInspector.HelpScreen.prototype.willHide.call(this);
+    },
+
+    __proto__: WebInspector.HelpScreen.prototype
+}
+
diff --git a/Source/devtools/front_end/WorkerManager.js b/Source/devtools/front_end/WorkerManager.js
index baaf0f9..abcbc1b 100644
--- a/Source/devtools/front_end/WorkerManager.js
+++ b/Source/devtools/front_end/WorkerManager.js
@@ -31,199 +31,101 @@
 /**
  * @constructor
  * @extends {WebInspector.Object}
+ * @param {boolean} canInspectWorkers
  */
-WebInspector.WorkerManager = function()
+WebInspector.WorkerManager = function(canInspectWorkers)
 {
-    this._workerIdToWindow = {};
-    InspectorBackend.registerWorkerDispatcher(new WebInspector.WorkerDispatcher(this));
-}
-
-WebInspector.WorkerManager.isWorkerFrontend = function()
-{
-    return !!WebInspector.queryParamsObject["dedicatedWorkerId"] ||
-           !!WebInspector.queryParamsObject["isSharedWorker"];
-}
-
-WebInspector.WorkerManager.isDedicatedWorkerFrontend = function()
-{
-    return !!WebInspector.queryParamsObject["dedicatedWorkerId"];
-}
-
-WebInspector.WorkerManager.loaded = function()
-{
-    var workerId = WebInspector.queryParamsObject["dedicatedWorkerId"];
-    if (workerId)
-        WebInspector.WorkerManager._initializeDedicatedWorkerFrontend(workerId);
-    else
-        WebInspector.workerManager = new WebInspector.WorkerManager();
-}
-
-WebInspector.WorkerManager.loadCompleted = function()
-{
-    // Make sure script execution of dedicated worker is resumed and then paused
-    // on the first script statement in case we autoattached to it.
-    if (WebInspector.queryParamsObject["workerPaused"]) {
-        DebuggerAgent.pause();
-        RuntimeAgent.run(calculateTitle);
-    } else if (WebInspector.WorkerManager.isWorkerFrontend())
-        calculateTitle();
-
-    function calculateTitle()
-    {
-        WebInspector.WorkerManager._calculateWorkerInspectorTitle();
-    }
-
-    if (WebInspector.workerManager)
-        WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, WebInspector.workerManager._mainFrameNavigated, WebInspector.workerManager);
-}
-
-WebInspector.WorkerManager._initializeDedicatedWorkerFrontend = function(workerId)
-{
-    function receiveMessage(event)
-    {
-        var message = event.data;
-        InspectorBackend.dispatch(message);
-    }
-    window.addEventListener("message", receiveMessage, true);
-
-
-    InspectorBackend.sendMessageObjectToBackend = function(message)
-    {
-        window.opener.postMessage({workerId: workerId, command: "sendMessageToBackend", message: message}, "*");
-    }
-}
-
-WebInspector.WorkerManager._calculateWorkerInspectorTitle = function()
-{
-    var expression = "location.href";
-    if (WebInspector.queryParamsObject["isSharedWorker"])
-        expression += " + (this.name ? ' (' + this.name + ')' : '')";
-    RuntimeAgent.evaluate.invoke({expression:expression, doNotPauseOnExceptionsAndMuteConsole:true, returnByValue: true}, evalCallback.bind(this));
-    
-    /**
-     * @param {?Protocol.Error} error
-     * @param {!RuntimeAgent.RemoteObject} result
-     * @param {boolean=} wasThrown
-     */
-    function evalCallback(error, result, wasThrown)
-    {
-        if (error || wasThrown) {
-            console.error(error);
-            return;
-        }
-        InspectorFrontendHost.inspectedURLChanged(result.value);
+    this._reset();
+    if (canInspectWorkers) {
+        WorkerAgent.enable();
+        InspectorBackend.registerWorkerDispatcher(new WebInspector.WorkerDispatcher(this));
+        WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.MainFrameNavigated, this._mainFrameNavigated, this);
     }
 }
 
 WebInspector.WorkerManager.Events = {
-    WorkerAdded: "worker-added",
-    WorkerRemoved: "worker-removed",
-    WorkersCleared: "workers-cleared",
+    WorkerAdded: "WorkerAdded",
+    WorkerRemoved: "WorkerRemoved",
+    WorkersCleared: "WorkersCleared",
+    WorkerSelectionChanged: "WorkerSelectionChanged",
+    WorkerDisconnected: "WorkerDisconnected",
+    MessageFromWorker: "MessageFromWorker",
 }
 
+WebInspector.WorkerManager.MainThreadId = 0;
+
 WebInspector.WorkerManager.prototype = {
+
+    _reset: function()
+    {
+        /** @type {!Object.<number, string>} */
+        this._threadUrlByThreadId = {};
+        this._threadUrlByThreadId[WebInspector.WorkerManager.MainThreadId] = WebInspector.UIString("Thread: Main");
+        this._threadsList = [WebInspector.WorkerManager.MainThreadId];
+        this._selectedThreadId = WebInspector.WorkerManager.MainThreadId;
+    },
+
     _workerCreated: function(workerId, url, inspectorConnected)
-     {
-        if (inspectorConnected)
-            this._openInspectorWindow(workerId, true);
+    {
+        this._threadsList.push(workerId);
+        this._threadUrlByThreadId[workerId] = url;
         this.dispatchEventToListeners(WebInspector.WorkerManager.Events.WorkerAdded, {workerId: workerId, url: url, inspectorConnected: inspectorConnected});
      },
 
     _workerTerminated: function(workerId)
-     {
-        this.closeWorkerInspector(workerId);
+    {
+        this._threadsList.remove(workerId);
+        delete this._threadUrlByThreadId[workerId];
         this.dispatchEventToListeners(WebInspector.WorkerManager.Events.WorkerRemoved, workerId);
-     },
-
-    _sendMessageToWorkerInspector: function(workerId, message)
-    {
-        var workerInspectorWindow = this._workerIdToWindow[workerId];
-        if (workerInspectorWindow)
-            workerInspectorWindow.postMessage(message, "*");
     },
 
-    openWorkerInspector: function(workerId)
+    _dispatchMessageFromWorker: function(workerId, message)
     {
-        var existingInspector = this._workerIdToWindow[workerId];
-        if (existingInspector) {
-            existingInspector.focus();
-            return;
-        }
-
-        this._openInspectorWindow(workerId, false);
-        WorkerAgent.connectToWorker(workerId);
-    },
-
-    _openInspectorWindow: function(workerId, workerIsPaused)
-    {
-        var search = window.location.search;
-        var hash = window.location.hash;
-        var url = window.location.href;
-        // Make sure hash is in rear
-        url = url.replace(hash, "");
-        url += (search ? "&dedicatedWorkerId=" : "?dedicatedWorkerId=") + workerId;
-        if (workerIsPaused)
-            url += "&workerPaused=true";
-        url = url.replace("docked=true&", "");
-        url = url.replace("can_dock=true&", "");
-        url += hash;
-        var width = WebInspector.settings.workerInspectorWidth.get();
-        var height = WebInspector.settings.workerInspectorHeight.get();
-        // Set location=0 just to make sure the front-end will be opened in a separate window, not in new tab.
-        var workerInspectorWindow = window.open(url, undefined, "location=0,width=" + width + ",height=" + height);
-        workerInspectorWindow.addEventListener("resize", this._onWorkerInspectorResize.bind(this, workerInspectorWindow), false);
-        this._workerIdToWindow[workerId] = workerInspectorWindow;
-        workerInspectorWindow.addEventListener("beforeunload", this._workerInspectorClosing.bind(this, workerId), true);
-
-        // Listen to beforeunload in detached state and to the InspectorClosing event in case of attached inspector.
-        window.addEventListener("unload", this._pageInspectorClosing.bind(this), true);
-    },
-
-    closeWorkerInspector: function(workerId)
-    {
-        var workerInspectorWindow = this._workerIdToWindow[workerId];
-        if (workerInspectorWindow)
-            workerInspectorWindow.close();
-    },
-
-    _mainFrameNavigated: function(event)
-    {
-        for (var workerId in this._workerIdToWindow)
-            this.closeWorkerInspector(workerId);
-        this.dispatchEventToListeners(WebInspector.WorkerManager.Events.WorkersCleared);
-    },
-
-    _pageInspectorClosing: function()
-    {
-        this._ignoreWorkerInspectorClosing = true;
-        for (var workerId in this._workerIdToWindow) {
-            this._workerIdToWindow[workerId].close();
-            WorkerAgent.disconnectFromWorker(parseInt(workerId, 10));
-        }
-    },
-
-    _onWorkerInspectorResize: function(workerInspectorWindow)
-    {
-        var doc = workerInspectorWindow.document;
-        WebInspector.settings.workerInspectorWidth.set(doc.width);
-        WebInspector.settings.workerInspectorHeight.set(doc.height);
-    },
-
-    _workerInspectorClosing: function(workerId, event)
-    {
-        if (event.target.location.href === "about:blank")
-            return;
-        if (this._ignoreWorkerInspectorClosing)
-            return;
-        delete this._workerIdToWindow[workerId];
-        WorkerAgent.disconnectFromWorker(workerId);
+        this.dispatchEventToListeners(WebInspector.WorkerManager.Events.MessageFromWorker, {workerId: workerId, message: message})
     },
 
     _disconnectedFromWorker: function()
     {
-        var screen = new WebInspector.WorkerTerminatedScreen();
-        WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, screen.hide, screen);
-        screen.showModal();
+        this.dispatchEventToListeners(WebInspector.WorkerManager.Events.WorkerDisconnected)
+    },
+
+    _mainFrameNavigated: function(event)
+    {
+        this._reset();
+        this.dispatchEventToListeners(WebInspector.WorkerManager.Events.WorkersCleared);
+    },
+
+    /**
+     * @return {!Array.<number>}
+     */
+    threadsList: function()
+    {
+        return this._threadsList;
+    },
+
+    /**
+     * @param {number} threadId
+     * @return {string}
+     */
+    threadUrl: function(threadId)
+    {
+        return this._threadUrlByThreadId[threadId];
+    },
+
+    /**
+     * @param {number} threadId
+     */
+    setSelectedThreadId: function(threadId)
+    {
+        this._selectedThreadId = threadId;
+    },
+
+    /**
+     * @return {number}
+     */
+    selectedThreadId: function()
+    {
+        return this._selectedThreadId;
     },
 
     __proto__: WebInspector.Object.prototype
@@ -236,20 +138,9 @@
 WebInspector.WorkerDispatcher = function(workerManager)
 {
     this._workerManager = workerManager;
-    window.addEventListener("message", this._receiveMessage.bind(this), true);
 }
 
 WebInspector.WorkerDispatcher.prototype = {
-    _receiveMessage: function(event)
-    {
-        var workerId = event.data["workerId"];
-        workerId = parseInt(workerId, 10);
-        var command = event.data.command;
-        var message = event.data.message;
-
-        if (command == "sendMessageToBackend")
-            WorkerAgent.sendMessageToWorker(workerId, message);
-    },
 
     workerCreated: function(workerId, url, inspectorConnected)
     {
@@ -263,7 +154,7 @@
 
     dispatchMessageFromWorker: function(workerId, message)
     {
-        this._workerManager._sendMessageToWorkerInspector(workerId, message);
+        this._workerManager._dispatchMessageFromWorker(workerId, message);
     },
 
     disconnectedFromWorker: function()
@@ -273,26 +164,6 @@
 }
 
 /**
- * @constructor
- * @extends {WebInspector.HelpScreen}
+ * @type {!WebInspector.WorkerManager}
  */
-WebInspector.WorkerTerminatedScreen = function()
-{
-    WebInspector.HelpScreen.call(this, WebInspector.UIString("Inspected worker terminated"));
-    var p = this.contentElement.createChild("p");
-    p.classList.add("help-section");
-    p.textContent = WebInspector.UIString("Inspected worker has terminated. Once it restarts we will attach to it automatically.");
-}
-
-WebInspector.WorkerTerminatedScreen.prototype = {
-    /**
-     * @override
-     */
-    willHide: function()
-    {
-        WebInspector.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this.hide, this);
-        WebInspector.HelpScreen.prototype.willHide.call(this);
-    },
-
-    __proto__: WebInspector.HelpScreen.prototype
-}
+WebInspector.workerManager;
\ No newline at end of file
diff --git a/Source/devtools/front_end/WorkersSidebarPane.js b/Source/devtools/front_end/WorkersSidebarPane.js
index bf16b7a..8a4663a 100644
--- a/Source/devtools/front_end/WorkersSidebarPane.js
+++ b/Source/devtools/front_end/WorkersSidebarPane.js
@@ -30,19 +30,9 @@
 
 /**
  * @constructor
- */
-WebInspector.Worker = function(id, url, shared)
-{
-    this.id = id;
-    this.url = url;
-    this.shared = shared;
-}
-
-/**
- * @constructor
  * @extends {WebInspector.SidebarPane}
  */
-WebInspector.WorkersSidebarPane = function(workerManager)
+WebInspector.WorkersSidebarPane = function()
 {
     WebInspector.SidebarPane.call(this, WebInspector.UIString("Workers"));
 
@@ -70,17 +60,25 @@
     this.bodyElement.appendChild(this._workerListElement);
 
     this._idToWorkerItem = {};
-    this._workerManager = workerManager;
 
-    workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerAdded, this._workerAdded, this);
-    workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerRemoved, this._workerRemoved, this);
-    workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkersCleared, this._workersCleared, this);
+    var threadList = WebInspector.workerManager.threadsList();
+    for (var i = 0; i < threadList.length; ++i) {
+        var threadId = threadList[i];
+        if (threadId === WebInspector.WorkerManager.MainThreadId)
+            continue;
+
+        this._addWorker(threadId, WebInspector.workerManager.threadUrl(threadId));
+    }
+
+    WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerAdded, this._workerAdded, this);
+    WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkerRemoved, this._workerRemoved, this);
+    WebInspector.workerManager.addEventListener(WebInspector.WorkerManager.Events.WorkersCleared, this._workersCleared, this);
 }
 
 WebInspector.WorkersSidebarPane.prototype = {
     _workerAdded: function(event)
     {
-        this._addWorker(event.data.workerId, event.data.url, event.data.inspectorConnected);
+        this._addWorker(event.data.workerId, event.data.url);
     },
 
     _workerRemoved: function(event)
@@ -95,7 +93,7 @@
         this._workerListElement.removeChildren();
     },
 
-    _addWorker: function(workerId, url, inspectorConnected)
+    _addWorker: function(workerId, url)
     {
         var item = this._workerListElement.createChild("div", "dedicated-worker-item");
         var link = item.createChild("a");
@@ -109,7 +107,7 @@
     _workerItemClicked: function(workerId, event)
     {
         event.preventDefault();
-        this._workerManager.openWorkerInspector(workerId);
+        WebInspector.workerFrontendManager.openWorkerInspector(workerId);
     },
 
     _autoattachToWorkersClicked: function(event)
diff --git a/Source/devtools/front_end/Workspace.js b/Source/devtools/front_end/Workspace.js
index 681dda3..d95a934 100644
--- a/Source/devtools/front_end/Workspace.js
+++ b/Source/devtools/front_end/Workspace.js
@@ -148,8 +148,8 @@
     searchInFileContent: function(path, query, caseSensitive, isRegex, callback) { },
 
     /**
-     * @param {Array.<string>} queries
-     * @param {Array.<string>} fileQueries
+     * @param {!Array.<string>} queries
+     * @param {!Array.<string>} fileQueries
      * @param {boolean} caseSensitive
      * @param {boolean} isRegex
      * @param {!WebInspector.Progress} progress
@@ -171,7 +171,7 @@
  */
 WebInspector.Project = function(workspace, projectDelegate)
 {
-    /** @type {!Object.<string, {uiSourceCode: !WebInspector.UISourceCode, index: number}>} */
+    /** @type {!Object.<string, !{uiSourceCode: !WebInspector.UISourceCode, index: number}>} */
     this._uiSourceCodesMap = {};
     /** @type {!Array.<!WebInspector.UISourceCode>} */
     this._uiSourceCodesList = [];
@@ -265,6 +265,14 @@
     },
 
     /**
+     * @return {!WebInspector.Workspace}
+     */
+    workspace: function()
+    {
+        return this._workspace;
+    },
+
+    /**
      * @param {string} path
      * @return {?WebInspector.UISourceCode}
      */
@@ -333,6 +341,7 @@
 
         /**
          * @param {?string} content
+         * @this {WebInspector.Project}
          */
         function onSetContent(content)
         {
@@ -369,6 +378,7 @@
          * @param {string=} newURL
          * @param {string=} newOriginURL
          * @param {!WebInspector.ResourceType=} newContentType
+         * @this {WebInspector.Project}
          */
         function innerCallback(success, newName, newURL, newOriginURL, newContentType)
         {
@@ -448,8 +458,8 @@
     },
 
     /**
-     * @param {Array.<string>} queries
-     * @param {Array.<string>} fileQueries
+     * @param {!Array.<string>} queries
+     * @param {!Array.<string>} fileQueries
      * @param {boolean} caseSensitive
      * @param {boolean} isRegex
      * @param {!WebInspector.Progress} progress
@@ -493,6 +503,7 @@
     this._fileSystemMapping = fileSystemMapping;
     /** @type {!Object.<string, !WebInspector.Project>} */
     this._projects = {};
+    this._hasResourceContentTrackingExtensions = false;
 }
 
 WebInspector.Workspace.Events = {
@@ -629,8 +640,6 @@
      */
     hasMappingForURL: function(url)
     {
-        if (!InspectorFrontendHost.supportsFileSystems())
-            return false;
         return this._fileSystemMapping.hasMappingForURL(url);
     },
 
@@ -652,8 +661,6 @@
      */
     uiSourceCodeForURL: function(url)
     {
-        if (!InspectorFrontendHost.supportsFileSystems())
-            return this._networkUISourceCodeForURL(url);
         var file = this._fileSystemMapping.fileForURL(url);
         if (!file)
             return this._networkUISourceCodeForURL(url);
@@ -696,10 +703,26 @@
         WebInspector.suggestReload();
     },
 
+    /**
+     * @param {boolean} hasExtensions
+     */
+    setHasResourceContentTrackingExtensions: function(hasExtensions)
+    {
+        this._hasResourceContentTrackingExtensions = hasExtensions;
+    },
+
+    /**
+     * @return {boolean}
+     */
+    hasResourceContentTrackingExtensions: function()
+    {
+        return this._hasResourceContentTrackingExtensions;
+    },
+
     __proto__: WebInspector.Object.prototype
 }
 
 /**
- * @type {?WebInspector.Workspace}
+ * @type {!WebInspector.Workspace}
  */
-WebInspector.workspace = null;
+WebInspector.workspace;
diff --git a/Source/devtools/front_end/WorkspaceController.js b/Source/devtools/front_end/WorkspaceController.js
index 588f89f..9ae5d89 100644
--- a/Source/devtools/front_end/WorkspaceController.js
+++ b/Source/devtools/front_end/WorkspaceController.js
@@ -56,6 +56,9 @@
             return;
         this._fileSystemRefreshTimeout = setTimeout(refreshFileSystems.bind(this), 1000);
 
+        /**
+         * @this {WebInspector.WorkspaceController}
+         */
         function refreshFileSystems()
         {
             delete this._fileSystemRefreshTimeout;
@@ -65,9 +68,3 @@
         }
     }
 }
-
-/**
- * @type {?WebInspector.WorkspaceController}
- */
-WebInspector.workspaceController = null;
-
diff --git a/Source/devtools/front_end/ZoomManager.js b/Source/devtools/front_end/ZoomManager.js
new file mode 100644
index 0000000..83aa496
--- /dev/null
+++ b/Source/devtools/front_end/ZoomManager.js
@@ -0,0 +1,42 @@
+// 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.
+
+/**
+ * @constructor
+ * @extends {WebInspector.Object}
+ */
+WebInspector.ZoomManager = function()
+{
+    this._zoomFactor = InspectorFrontendHost.zoomFactor();
+    window.addEventListener("resize", this._onWindowResize.bind(this), true);
+};
+
+WebInspector.ZoomManager.Events = {
+    ZoomChanged: "ZoomChanged"
+};
+
+WebInspector.ZoomManager.prototype = {
+    /**
+     * @return {number}
+     */
+    zoomFactor: function()
+    {
+        return this._zoomFactor;
+    },
+
+    _onWindowResize: function()
+    {
+        var oldZoomFactor = this._zoomFactor;
+        this._zoomFactor = InspectorFrontendHost.zoomFactor();
+        if (oldZoomFactor !== this._zoomFactor)
+            this.dispatchEventToListeners(WebInspector.ZoomManager.Events.ZoomChanged, {from: oldZoomFactor, to: this._zoomFactor});
+    },
+
+    __proto__: WebInspector.Object.prototype
+};
+
+/**
+ * @type {!WebInspector.ZoomManager}
+ */
+WebInspector.zoomManager;
diff --git a/Source/devtools/front_end/auditsPanel.css b/Source/devtools/front_end/auditsPanel.css
index 28b9300..9231fcf 100644
--- a/Source/devtools/front_end/auditsPanel.css
+++ b/Source/devtools/front_end/auditsPanel.css
@@ -85,13 +85,13 @@
 
 .audit-launcher-view button:active {
     background-color: rgb(215, 215, 215);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 194)), to(rgb(239, 239, 239)));
+    background-image: linear-gradient(to bottom, rgb(194, 194, 194), rgb(239, 239, 239));
 }
 
 .panel-enabler-view.audit-launcher-view label {
     padding: 0 0 5px 0;
     margin: 0;
-    -webkit-flex: none;
+    display: flex;
 }
 
 .panel-enabler-view.audit-launcher-view label.disabled {
@@ -100,6 +100,8 @@
 
 .audit-launcher-view input[type="checkbox"] {
     margin-left: 0;
+    height: 14px;
+    width: 14px;
 }
 
 .audit-result-view {
@@ -120,7 +122,7 @@
 .audit-result-view .severity-warning,
 .audit-result-view .severity-info {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     display: inline-block;
     width: 10px;
     height: 10px;
@@ -133,7 +135,7 @@
 .audit-result-view .severity-severe,
 .audit-result-view .severity-warning,
 .audit-result-view .severity-info {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -152,7 +154,7 @@
 .audit-result-tree li.parent::before {
     -webkit-user-select: none;
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     opacity: 0.5;
     float: left;
     width: 8px;
@@ -167,7 +169,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .audit-result-tree li.parent::before {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
diff --git a/Source/devtools/front_end/cm/clike.js b/Source/devtools/front_end/cm/clike.js
index 3fcc1a7..f6626cd 100644
--- a/Source/devtools/front_end/cm/clike.js
+++ b/Source/devtools/front_end/cm/clike.js
@@ -158,7 +158,8 @@
     electricChars: "{}",
     blockCommentStart: "/*",
     blockCommentEnd: "*/",
-    lineComment: "//"
+    lineComment: "//",
+    fold: "brace"
   };
 });
 
diff --git a/Source/devtools/front_end/cm/cmdevtools.css b/Source/devtools/front_end/cm/cmdevtools.css
index 8d9501c..4856186 100644
--- a/Source/devtools/front_end/cm/cmdevtools.css
+++ b/Source/devtools/front_end/cm/cmdevtools.css
@@ -52,7 +52,7 @@
 .cm-breakpoint .CodeMirror-linenumber {
   color: white;
   border-width: 1px 4px 1px 1px !important;
-  -webkit-border-image: url(Images/breakpoint2.png) 1 4 1 1;
+  -webkit-border-image: url(Images/breakpoint.png) 1 4 1 1;
   margin: 0px 0px 0px 3px !important;
   padding-right: 3px;
   padding-left: 1px;
@@ -61,15 +61,15 @@
 }
 
 .cm-breakpoint.cm-breakpoint-conditional .CodeMirror-linenumber {
-  -webkit-border-image: url(Images/breakpointConditional2.png) 1 4 1 1;
+  -webkit-border-image: url(Images/breakpointConditional.png) 1 4 1 1;
 }
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .cm-breakpoint .CodeMirror-linenumber {
-  -webkit-border-image: url(Images/breakpoint2_2x.png) 2 8 2 2;
+  -webkit-border-image: url(Images/breakpoint_2x.png) 2 8 2 2;
 }
 .cm-breakpoint.cm-breakpoint-conditional .CodeMirror-linenumber {
-  -webkit-border-image: url(Images/breakpointConditional2_2x.png) 2 8 2 2;
+  -webkit-border-image: url(Images/breakpointConditional_2x.png) 2 8 2 2;
 }
 } /* media */
 
diff --git a/Source/devtools/front_end/cm/codemirror.css b/Source/devtools/front_end/cm/codemirror.css
index 4e300b2..23eaf74 100644
--- a/Source/devtools/front_end/cm/codemirror.css
+++ b/Source/devtools/front_end/cm/codemirror.css
@@ -74,7 +74,6 @@
 .cm-s-default .cm-string {color: #a11;}
 .cm-s-default .cm-string-2 {color: #f50;}
 .cm-s-default .cm-meta {color: #555;}
-.cm-s-default .cm-error {color: #f00;}
 .cm-s-default .cm-qualifier {color: #555;}
 .cm-s-default .cm-builtin {color: #30a;}
 .cm-s-default .cm-bracket {color: #997;}
@@ -91,6 +90,7 @@
 .cm-em {font-style: italic;}
 .cm-link {text-decoration: underline;}
 
+.cm-s-default .cm-error {color: #f00;}
 .cm-invalidchar {color: #f00;}
 
 div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
diff --git a/Source/devtools/front_end/cm/codemirror.js b/Source/devtools/front_end/cm/codemirror.js
index a14ce53..c7a5c6d 100644
--- a/Source/devtools/front_end/cm/codemirror.js
+++ b/Source/devtools/front_end/cm/codemirror.js
@@ -7,9 +7,14 @@
   // Crude, but necessary to handle a number of hard-to-feature-detect
   // bugs and behavior differences.
   var gecko = /gecko\/\d/i.test(navigator.userAgent);
-  var ie = /MSIE \d/.test(navigator.userAgent);
-  var ie_lt8 = ie && (document.documentMode == null || document.documentMode < 8);
-  var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);
+  // IE11 currently doesn't count as 'ie', since it has almost none of
+  // the same bugs as earlier versions. Use ie_gt10 to handle
+  // incompatibilities in that version.
+  var old_ie = /MSIE \d/.test(navigator.userAgent);
+  var ie_lt8 = old_ie && (document.documentMode == null || document.documentMode < 8);
+  var ie_lt9 = old_ie && (document.documentMode == null || document.documentMode < 9);
+  var ie_gt10 = /Trident\/([7-9]|\d{2,})\./.test(navigator.userAgent);
+  var ie = old_ie || ie_gt10;
   var webkit = /WebKit\//.test(navigator.userAgent);
   var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent);
   var chrome = /Chrome\//.test(navigator.userAgent);
@@ -31,7 +36,7 @@
   if (opera_version && opera_version >= 15) { opera = false; webkit = true; }
   // Some browsers use the wrong event properties to signal cmd/ctrl on OS X
   var flipCtrlCmd = mac && (qtwebkit || opera && (opera_version == null || opera_version < 12.11));
-  var captureMiddleClick = gecko || (ie && !ie_lt9);
+  var captureMiddleClick = gecko || (old_ie && !ie_lt9);
 
   // Optimize some code when these features are not used
   var sawReadOnlySpans = false, sawCollapsedSpans = false;
@@ -57,7 +62,8 @@
                   overlays: [],
                   modeGen: 0,
                   overwrite: false, focused: false,
-                  suppressEdits: false, pasteIncoming: false,
+                  suppressEdits: false,
+                  pasteIncoming: false, cutIncoming: false,
                   draggingText: false,
                   highlight: new Delayed()};
 
@@ -71,7 +77,7 @@
 
     // Override magic textarea content restore that IE sometimes does
     // on our hidden textarea on reload
-    if (ie) setTimeout(bind(resetInput, this, true), 20);
+    if (old_ie) setTimeout(bind(resetInput, this, true), 20);
 
     registerEventHandlers(this);
     // IE throws unspecified error in certain cases, when
@@ -191,6 +197,10 @@
 
   function loadMode(cm) {
     cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);
+    resetModeState(cm);
+  }
+
+  function resetModeState(cm) {
     cm.doc.iter(function(line) {
       if (line.stateAfter) line.stateAfter = null;
       if (line.styles) line.styles = null;
@@ -240,7 +250,6 @@
     var map = keyMap[cm.options.keyMap], style = map.style;
     cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") +
       (style ? " cm-keymap-" + style : "");
-    cm.state.disableInput = map.disableInput;
   }
 
   function themeChanged(cm) {
@@ -309,7 +318,7 @@
       options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]);
     } else if (found > -1 && !options.lineNumbers) {
       options.gutters = options.gutters.slice(0);
-      options.gutters.splice(i, 1);
+      options.gutters.splice(found, 1);
     }
   }
 
@@ -328,8 +337,9 @@
     if (needsV) {
       d.scrollbarV.style.display = "block";
       d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0";
+      // A bug in IE8 can cause this value to be negative, so guard it.
       d.scrollbarV.firstChild.style.height =
-        (scrollHeight - d.scroller.clientHeight + d.scrollbarV.clientHeight) + "px";
+        Math.max(0, scrollHeight - d.scroller.clientHeight + d.scrollbarV.clientHeight) + "px";
     } else {
       d.scrollbarV.style.display = "";
       d.scrollbarV.firstChild.style.height = "0";
@@ -353,8 +363,10 @@
       d.gutterFiller.style.width = d.gutters.offsetWidth + "px";
     } else d.gutterFiller.style.display = "";
 
-    if (mac_geLion && scrollbarWidth(d.measure) === 0)
+    if (mac_geLion && scrollbarWidth(d.measure) === 0) {
       d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? "18px" : "12px";
+      d.scrollbarV.style.pointerEvents = d.scrollbarH.style.pointerEvents = "none";
+    }
   }
 
   function visibleLines(display, doc, viewPort) {
@@ -409,14 +421,14 @@
   function updateDisplay(cm, changes, viewPort, forced) {
     var oldFrom = cm.display.showingFrom, oldTo = cm.display.showingTo, updated;
     var visible = visibleLines(cm.display, cm.doc, viewPort);
-    for (;;) {
+    for (var first = true;; first = false) {
       var oldWidth = cm.display.scroller.clientWidth;
       if (!updateDisplayInner(cm, changes, visible, forced)) break;
       updated = true;
       changes = [];
       updateSelection(cm);
       updateScrollbars(cm);
-      if (cm.options.lineWrapping && oldWidth != cm.display.scroller.clientWidth) {
+      if (first && cm.options.lineWrapping && oldWidth != cm.display.scroller.clientWidth) {
         forced = true;
         continue;
       }
@@ -444,7 +456,7 @@
   // updates.
   function updateDisplayInner(cm, changes, visible, forced) {
     var display = cm.display, doc = cm.doc;
-    if (!display.wrapper.clientWidth) {
+    if (!display.wrapper.offsetWidth) {
       display.showingFrom = display.showingTo = doc.first;
       display.viewOffset = 0;
       return;
@@ -529,6 +541,7 @@
     }
     display.showingFrom = from; display.showingTo = to;
 
+    display.gutters.style.height = "";
     updateHeightsInViewport(cm);
     updateViewOffset(cm);
 
@@ -711,9 +724,9 @@
     if (bgClass)
       wrap.insertBefore(elt("div", null, bgClass + " CodeMirror-linebackground"), wrap.firstChild);
     if (cm.options.lineNumbers || markers) {
-      var gutterWrap = wrap.insertBefore(elt("div", null, null, "position: absolute; left: " +
+      var gutterWrap = wrap.insertBefore(elt("div", null, "CodeMirror-gutter-wrapper", "position: absolute; left: " +
                                              (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"),
-                                         wrap.firstChild);
+                                         lineElement);
       if (cm.options.fixedGutter) (wrap.alignable || (wrap.alignable = [])).push(gutterWrap);
       if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
         wrap.lineNumber = gutterWrap.appendChild(
@@ -904,7 +917,7 @@
     doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.showingTo + 500), function(line) {
       if (doc.frontier >= cm.display.showingFrom) { // Visible
         var oldStyles = line.styles;
-        line.styles = highlightLine(cm, line, state);
+        line.styles = highlightLine(cm, line, state, true);
         var ischange = !oldStyles || oldStyles.length != line.styles.length;
         for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];
         if (ischange) {
@@ -913,7 +926,7 @@
         }
         line.stateAfter = copyState(doc.mode, state);
       } else {
-        processLine(cm, line, state);
+        processLine(cm, line.text, state);
         line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;
       }
       ++doc.frontier;
@@ -935,8 +948,9 @@
   // smallest indentation, which tends to need the least context to
   // parse correctly.
   function findStartLine(cm, n, precise) {
-    var minindent, minline, doc = cm.doc, maxScan = cm.doc.mode.innerMode ? 1000 : 100;
-    for (var search = n, lim = n - maxScan; search > lim; --search) {
+    var minindent, minline, doc = cm.doc;
+    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
+    for (var search = n; search > lim; --search) {
       if (search <= doc.first) return doc.first;
       var line = getLine(doc, search - 1);
       if (line.stateAfter && (!precise || search <= doc.frontier)) return search;
@@ -956,11 +970,12 @@
     if (!state) state = startState(doc.mode);
     else state = copyState(doc.mode, state);
     doc.iter(pos, n, function(line) {
-      processLine(cm, line, state);
+      processLine(cm, line.text, state);
       var save = pos == n - 1 || pos % 5 == 0 || pos >= display.showingFrom && pos < display.showingTo;
       line.stateAfter = save ? copyState(doc.mode, state) : null;
       ++pos;
     });
+    if (precise) doc.frontier = pos;
     return state;
   }
 
@@ -1001,7 +1016,7 @@
       var memo = cache[i];
       if (memo.text == line.text && memo.markedSpans == line.markedSpans &&
           cm.display.scroller.clientWidth == memo.width &&
-          memo.classes == line.textClass + "|" + line.bgClass + "|" + line.wrapClass)
+          memo.classes == line.textClass + "|" + line.wrapClass)
         return memo;
     }
   }
@@ -1021,7 +1036,7 @@
     var cache = cm.display.measureLineCache;
     var memo = {text: line.text, width: cm.display.scroller.clientWidth,
                 markedSpans: line.markedSpans, measure: measure,
-                classes: line.textClass + "|" + line.bgClass + "|" + line.wrapClass};
+                classes: line.textClass + "|" + line.wrapClass};
     if (cache.length == 16) cache[++cm.display.measureLineCachePos % 16] = memo;
     else cache.push(memo);
     return measure;
@@ -1045,7 +1060,7 @@
     // doesn't work when wrapping is on, but in that case the
     // situation is slightly better, since IE does cache line-wrapping
     // information and only recomputes per-line.
-    if (ie && !ie_lt8 && !cm.options.lineWrapping && pre.childNodes.length > 100) {
+    if (old_ie && !ie_lt8 && !cm.options.lineWrapping && pre.childNodes.length > 100) {
       var fragment = document.createDocumentFragment();
       var chunk = 10, n = pre.childNodes.length;
       for (var i = 0, chunks = Math.ceil(n / chunk); i < chunks; ++i) {
@@ -1105,7 +1120,7 @@
         }
       }
       if (!rect) rect = data[i] = measureRect(getRect(node));
-      if (cur.measureRight) rect.right = getRect(cur.measureRight).left;
+      if (cur.measureRight) rect.right = getRect(cur.measureRight).left - outer.left;
       if (cur.leftSide) rect.leftSide = measureRect(getRect(cur.leftSide));
     }
     removeChildren(cm.display.measure);
@@ -1281,7 +1296,7 @@
       if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {
         var ch = x < fromX || x - fromX <= toX - x ? from : to;
         var xDiff = x - (ch == from ? fromX : toX);
-        while (isExtendingChar.test(lineObj.text.charAt(ch))) ++ch;
+        while (isExtendingChar(lineObj.text.charAt(ch))) ++ch;
         var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,
                               xDiff < 0 ? -1 : xDiff ? 1 : 0);
         return pos;
@@ -1379,11 +1394,14 @@
     }
     if (!updated && op.selectionChanged) updateSelection(cm);
     if (op.updateScrollPos) {
-      display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = newScrollPos.scrollTop;
-      display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = newScrollPos.scrollLeft;
+      var top = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, newScrollPos.scrollTop));
+      var left = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, newScrollPos.scrollLeft));
+      display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = top;
+      display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = left;
       alignHorizontally(cm);
       if (op.scrollToPos)
-        scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos), op.scrollToPosMargin);
+        scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos.from),
+                          clipPos(cm.doc, op.scrollToPos.to), op.scrollToPos.margin);
     } else if (newScrollPos) {
       scrollCursorIntoView(cm);
     }
@@ -1470,7 +1488,7 @@
   // supported or compatible enough yet to rely on.)
   function readInput(cm) {
     var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc, sel = doc.sel;
-    if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.state.disableInput) return false;
+    if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.options.disableInput) return false;
     if (cm.state.pasteIncoming && cm.state.fakedLastChar) {
       input.value = input.value.substring(0, input.value.length - 1);
       cm.state.fakedLastChar = false;
@@ -1488,22 +1506,32 @@
     var same = 0, l = Math.min(prevInput.length, text.length);
     while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same;
     var from = sel.from, to = sel.to;
+    var inserted = text.slice(same);
     if (same < prevInput.length)
       from = Pos(from.line, from.ch - (prevInput.length - same));
     else if (cm.state.overwrite && posEq(from, to) && !cm.state.pasteIncoming)
-      to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + (text.length - same)));
+      to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + inserted.length));
 
     var updateInput = cm.curOp.updateInput;
-    var changeEvent = {from: from, to: to, text: splitLines(text.slice(same)),
-                       origin: cm.state.pasteIncoming ? "paste" : "+input"};
+    var changeEvent = {from: from, to: to, text: splitLines(inserted),
+                       origin: cm.state.pasteIncoming ? "paste" : cm.state.cutIncoming ? "cut" : "+input"};
     makeChange(cm.doc, changeEvent, "end");
     cm.curOp.updateInput = updateInput;
     signalLater(cm, "inputRead", cm, changeEvent);
+    if (inserted && !cm.state.pasteIncoming && cm.options.electricChars &&
+        cm.options.smartIndent && sel.head.ch < 100) {
+      var electric = cm.getModeAt(sel.head).electricChars;
+      if (electric) for (var i = 0; i < electric.length; i++)
+        if (inserted.indexOf(electric.charAt(i)) > -1) {
+          indentLine(cm, sel.head.line, "smart");
+          break;
+        }
+    }
 
     if (text.length > 1000 || text.indexOf("\n") > -1) input.value = cm.display.prevInput = "";
     else cm.display.prevInput = text;
     if (withOp) endOperation(cm);
-    cm.state.pasteIncoming = false;
+    cm.state.pasteIncoming = cm.state.cutIncoming = false;
     return true;
   }
 
@@ -1538,7 +1566,7 @@
   function registerEventHandlers(cm) {
     var d = cm.display;
     on(d.scroller, "mousedown", operation(cm, onMouseDown));
-    if (ie)
+    if (old_ie)
       on(d.scroller, "dblclick", operation(cm, function(e) {
         if (signalDOMEvent(cm, e)) return;
         var pos = posFromMouse(cm, e);
@@ -1601,11 +1629,11 @@
     }
     setTimeout(unregister, 5000);
 
-    on(d.input, "keyup", operation(cm, function(e) {
-      if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
-      if (e.keyCode == 16) cm.doc.sel.shift = false;
-    }));
-    on(d.input, "input", bind(fastPoll, cm));
+    on(d.input, "keyup", operation(cm, onKeyUp));
+    on(d.input, "input", function() {
+      if (ie && !ie_lt9 && cm.display.inputHasSelection) cm.display.inputHasSelection = null;
+      fastPoll(cm);
+    });
     on(d.input, "keydown", operation(cm, onKeyDown));
     on(d.input, "keypress", operation(cm, onKeyPress));
     on(d.input, "focus", bind(onFocus, cm));
@@ -1641,21 +1669,22 @@
       fastPoll(cm);
     });
 
-    function prepareCopy() {
+    function prepareCopy(e) {
       if (d.inaccurateSelection) {
         d.prevInput = "";
         d.inaccurateSelection = false;
         d.input.value = cm.getSelection();
         selectInput(d.input);
       }
+      if (e.type == "cut") cm.state.cutIncoming = true;
     }
     on(d.input, "cut", prepareCopy);
     on(d.input, "copy", prepareCopy);
 
     // Needed to handle Tab key in KHTML
     if (khtml) on(d.sizer, "mouseup", function() {
-        if (document.activeElement == d.input) d.input.blur();
-        focusInput(cm);
+      if (document.activeElement == d.input) d.input.blur();
+      focusInput(cm);
     });
   }
 
@@ -1739,6 +1768,9 @@
           e_preventDefault(e2);
           extendSelection(cm.doc, start);
           focusInput(cm);
+          // Work around unexplainable focus problem in IE9 (#2127)
+          if (old_ie && !ie_lt9)
+            setTimeout(function() {document.body.focus(); focusInput(cm);}, 20);
         }
       });
       // Let the drag handler handle this.
@@ -1813,7 +1845,7 @@
     }
 
     var move = operation(cm, function(e) {
-      if (!ie && !e_button(e)) done(e);
+      if (!old_ie && !e_button(e)) done(e);
       else extend(e);
     });
     var up = operation(cm, done);
@@ -1895,7 +1927,6 @@
           if (cm.state.draggingText) replaceRange(cm.doc, "", curFrom, curTo, "paste");
           cm.replaceSelection(text, null, "paste");
           focusInput(cm);
-          onFocus(cm);
         }
       }
       catch(e){}
@@ -1959,7 +1990,7 @@
   // know one. These don't have to be accurate -- the result of them
   // being wrong would just be a slight flicker on the first wheel
   // scroll (if it is large enough).
-  if (ie) wheelPixelsPerUnit = -.53;
+  if (old_ie) wheelPixelsPerUnit = -.53;
   else if (gecko) wheelPixelsPerUnit = 15;
   else if (chrome) wheelPixelsPerUnit = -.7;
   else if (safari) wheelPixelsPerUnit = -1/3;
@@ -2108,12 +2139,18 @@
     return handled;
   }
 
+  function onKeyUp(e) {
+    var cm = this;
+    if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
+    if (e.keyCode == 16) cm.doc.sel.shift = false;
+  }
+
   var lastStoppedKey = null;
   function onKeyDown(e) {
     var cm = this;
     if (!cm.state.focused) onFocus(cm);
     if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
-    if (ie && e.keyCode == 27) e.returnValue = false;
+    if (old_ie && e.keyCode == 27) e.returnValue = false;
     var code = e.keyCode;
     // IE does strange things with escape.
     cm.doc.sel.shift = code == 16 || e.shiftKey;
@@ -2134,10 +2171,6 @@
     if (opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}
     if (((opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return;
     var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
-    if (this.options.electricChars && this.doc.mode.electricChars &&
-        this.options.smartIndent && !isReadOnly(this) &&
-        this.doc.mode.electricChars.indexOf(ch) > -1)
-      setTimeout(operation(cm, function() {indentLine(cm, cm.doc.sel.to.line, "smart");}), 75);
     if (handleCharBinding(cm, e, ch)) return;
     if (ie && !ie_lt9) cm.display.inputHasSelection = null;
     fastPoll(cm);
@@ -2176,13 +2209,17 @@
 
     var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
     if (!pos || opera) return; // Opera is difficult.
-    if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to))
+
+    // Reset the current text selection only if the click is done outside of the selection
+    // and 'resetSelectionOnContextMenu' option is true.
+    var reset = cm.options.resetSelectionOnContextMenu;
+    if (reset && (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to)))
       operation(cm, setSelection)(cm.doc, pos, pos);
 
     var oldCSS = display.input.style.cssText;
     display.inputDiv.style.position = "absolute";
     display.input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) +
-      "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: white; outline: none;" +
+      "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: transparent; outline: none;" +
       "border-width: 0; outline: none; overflow: hidden; opacity: .05; -ms-opacity: .05; filter: alpha(opacity=5);";
     focusInput(cm);
     resetInput(cm, true);
@@ -2204,10 +2241,10 @@
 
       // Try to detect the user choosing select-all
       if (display.input.selectionStart != null) {
-        if (!ie || ie_lt9) prepareSelectAllHack();
+        if (!old_ie || ie_lt9) prepareSelectAllHack();
         clearTimeout(detectingSelectAll);
         var i = 0, poll = function(){
-          if (display.prevInput == " " && display.input.selectionStart == 0)
+          if (display.prevInput == "\u200b" && display.input.selectionStart == 0)
             operation(cm, commands.selectAll)(cm);
           else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500);
           else resetInput(cm);
@@ -2216,7 +2253,7 @@
       }
     }
 
-    if (ie && !ie_lt9) prepareSelectAllHack();
+    if (old_ie && !ie_lt9) prepareSelectAllHack();
     if (captureMiddleClick) {
       e_stop(e);
       var mouseup = function() {
@@ -2326,6 +2363,7 @@
   }
 
   function makeChangeNoReadonly(doc, change, selUpdate) {
+    if (change.text.length == 1 && change.text[0] == "" && posEq(change.from, change.to)) return;
     var selAfter = computeSelAfterChange(doc, change, selUpdate);
     addToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);
 
@@ -2488,6 +2526,7 @@
 
   function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}
   function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}
+  function cmp(a, b) {return a.line - b.line || a.ch - b.ch;}
   function copyPos(x) {return Pos(x.line, x.ch);}
 
   // SELECTION
@@ -2626,28 +2665,31 @@
   // SCROLLING
 
   function scrollCursorIntoView(cm) {
-    var coords = scrollPosIntoView(cm, cm.doc.sel.head, cm.options.cursorScrollMargin);
+    var coords = scrollPosIntoView(cm, cm.doc.sel.head, null, cm.options.cursorScrollMargin);
     if (!cm.state.focused) return;
     var display = cm.display, box = getRect(display.sizer), doScroll = null;
     if (coords.top + box.top < 0) doScroll = true;
     else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false;
     if (doScroll != null && !phantom) {
-      var hidden = display.cursor.style.display == "none";
-      if (hidden) {
-        display.cursor.style.display = "";
-        display.cursor.style.left = coords.left + "px";
-        display.cursor.style.top = (coords.top - display.viewOffset) + "px";
-      }
-      display.cursor.scrollIntoView(doScroll);
-      if (hidden) display.cursor.style.display = "none";
+      var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " +
+                           (coords.top - display.viewOffset) + "px; height: " +
+                           (coords.bottom - coords.top + scrollerCutOff) + "px; left: " +
+                           coords.left + "px; width: 2px;");
+      cm.display.lineSpace.appendChild(scrollNode);
+      scrollNode.scrollIntoView(doScroll);
+      cm.display.lineSpace.removeChild(scrollNode);
     }
   }
 
-  function scrollPosIntoView(cm, pos, margin) {
+  function scrollPosIntoView(cm, pos, end, margin) {
     if (margin == null) margin = 0;
     for (;;) {
       var changed = false, coords = cursorCoords(cm, pos);
-      var scrollPos = calculateScrollPos(cm, coords.left, coords.top - margin, coords.left, coords.bottom + margin);
+      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);
+      var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left),
+                                         Math.min(coords.top, endCoords.top) - margin,
+                                         Math.max(coords.left, endCoords.left),
+                                         Math.max(coords.bottom, endCoords.bottom) + margin);
       var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
       if (scrollPos.scrollTop != null) {
         setScrollTop(cm, scrollPos.scrollTop);
@@ -2718,7 +2760,10 @@
     var tabSize = cm.options.tabSize;
     var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
     var curSpaceString = line.text.match(/^\s*/)[0], indentation;
-    if (how == "smart") {
+    if (!aggressive && !/\S/.test(line.text)) {
+      indentation = 0;
+      how = "not";
+    } else if (how == "smart") {
       indentation = cm.doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
       if (indentation == Pass) {
         if (!aggressive) return;
@@ -2744,6 +2789,8 @@
 
     if (indentString != curSpaceString)
       replaceRange(cm.doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
+    else if (doc.sel.head.line == n && doc.sel.head.ch < curSpaceString.length)
+      setSelection(doc, Pos(n, curSpaceString.length), Pos(n, curSpaceString.length), 1);
     line.stateAfter = null;
   }
 
@@ -2844,7 +2891,7 @@
 
   CodeMirror.prototype = {
     constructor: CodeMirror,
-    focus: function(){window.focus(); focusInput(this); onFocus(this); fastPoll(this);},
+    focus: function(){window.focus(); focusInput(this); fastPoll(this);},
 
     setOption: function(option, value) {
       var options = this.options, old = options[option];
@@ -2898,7 +2945,7 @@
     }),
     indentSelection: operation(null, function(how) {
       var sel = this.doc.sel;
-      if (posEq(sel.from, sel.to)) return indentLine(this, sel.from.line, how);
+      if (posEq(sel.from, sel.to)) return indentLine(this, sel.from.line, how, true);
       var e = sel.to.line - (sel.to.ch ? 0 : 1);
       for (var i = sel.from.line; i <= e; ++i) indentLine(this, i, how);
     }),
@@ -2943,11 +2990,31 @@
     },
 
     getHelper: function(pos, type) {
-      if (!helpers.hasOwnProperty(type)) return;
+      return this.getHelpers(pos, type)[0];
+    },
+
+    getHelpers: function(pos, type) {
+      var found = [];
+      if (!helpers.hasOwnProperty(type)) return helpers;
       var help = helpers[type], mode = this.getModeAt(pos);
-      return mode[type] && help[mode[type]] ||
-        mode.helperType && help[mode.helperType] ||
-        help[mode.name];
+      if (typeof mode[type] == "string") {
+        if (help[mode[type]]) found.push(help[mode[type]]);
+      } else if (mode[type]) {
+        for (var i = 0; i < mode[type].length; i++) {
+          var val = help[mode[type][i]];
+          if (val) found.push(val);
+        }
+      } else if (mode.helperType && help[mode.helperType]) {
+        found.push(help[mode.helperType]);
+      } else if (help[mode.name]) {
+        found.push(help[mode.name]);
+      }
+      for (var i = 0; i < help._global.length; i++) {
+        var cur = help._global[i];
+        if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)
+          found.push(cur.val);
+      }
+      return found;
     },
 
     getStateAfter: function(line, precise) {
@@ -3093,8 +3160,13 @@
     },
 
     triggerOnKeyDown: operation(null, onKeyDown),
+    triggerOnKeyPress: operation(null, onKeyPress),
+    triggerOnKeyUp: operation(null, onKeyUp),
 
-    execCommand: function(cmd) {return commands[cmd](this);},
+    execCommand: function(cmd) {
+      if (commands.hasOwnProperty(cmd))
+        return commands[cmd](this);
+    },
 
     findPosH: function(from, amount, unit, visually) {
       var dir = 1;
@@ -3136,14 +3208,18 @@
     },
 
     moveV: operation(null, function(dir, unit) {
-      var sel = this.doc.sel;
-      var pos = cursorCoords(this, sel.head, "div");
-      if (sel.goalColumn != null) pos.left = sel.goalColumn;
-      var target = findPosV(this, pos, dir, unit);
-
-      if (unit == "page") addToScrollPos(this, 0, charCoords(this, target, "div").top - pos.top);
+      var sel = this.doc.sel, target, goal;
+      if (sel.shift || sel.extend || posEq(sel.from, sel.to)) {
+        var pos = cursorCoords(this, sel.head, "div");
+        if (sel.goalColumn != null) pos.left = sel.goalColumn;
+        target = findPosV(this, pos, dir, unit);
+        if (unit == "page") addToScrollPos(this, 0, charCoords(this, target, "div").top - pos.top);
+        goal = pos.left;
+      } else {
+        target = dir < 0 ? sel.from : sel.to;
+      }
       extendSelection(this.doc, target, target, dir);
-      sel.goalColumn = pos.left;
+      if (goal != null) sel.goalColumn = goal;
     }),
 
     toggleOverwrite: function(value) {
@@ -3153,7 +3229,7 @@
       else
         this.display.cursor.className = this.display.cursor.className.replace(" CodeMirror-overwrite", "");
     },
-    hasFocus: function() { return this.state.focused; },
+    hasFocus: function() { return document.activeElement == this.display.input; },
 
     scrollTo: operation(null, function(x, y) {
       updateScrollPos(this, x, y);
@@ -3165,17 +3241,23 @@
               clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co};
     },
 
-    scrollIntoView: operation(null, function(pos, margin) {
-      if (typeof pos == "number") pos = Pos(pos, 0);
+    scrollIntoView: operation(null, function(range, margin) {
+      if (range == null) range = {from: this.doc.sel.head, to: null};
+      else if (typeof range == "number") range = {from: Pos(range, 0), to: null};
+      else if (range.from == null) range = {from: range, to: null};
+      if (!range.to) range.to = range.from;
       if (!margin) margin = 0;
-      var coords = pos;
 
-      if (!pos || pos.line != null) {
-        this.curOp.scrollToPos = pos ? clipPos(this.doc, pos) : this.doc.sel.head;
-        this.curOp.scrollToPosMargin = margin;
-        coords = cursorCoords(this, this.curOp.scrollToPos);
+      var coords = range;
+      if (range.from.line != null) {
+        this.curOp.scrollToPos = {from: range.from, to: range.to, margin: margin};
+        coords = {from: cursorCoords(this, range.from),
+                  to: cursorCoords(this, range.to)};
       }
-      var sPos = calculateScrollPos(this, coords.left, coords.top - margin, coords.right, coords.bottom + margin);
+      var sPos = calculateScrollPos(this, Math.min(coords.from.left, coords.to.left),
+                                    Math.min(coords.from.top, coords.to.top) - margin,
+                                    Math.max(coords.from.right, coords.to.right),
+                                    Math.max(coords.from.bottom, coords.to.bottom) + margin);
       updateScrollPos(this, sPos.scrollLeft, sPos.scrollTop);
     }),
 
@@ -3188,16 +3270,19 @@
       if (this.options.lineWrapping)
         this.display.measureLineCache.length = this.display.measureLineCachePos = 0;
       this.curOp.forceUpdate = true;
+      signal(this, "refresh", this);
     }),
 
     operation: function(f){return runInOp(this, f);},
 
     refresh: operation(null, function() {
-      var badHeight = this.display.cachedTextHeight == null;
+      var oldHeight = this.display.cachedTextHeight;
       clearCaches(this);
       updateScrollPos(this, this.doc.scrollLeft, this.doc.scrollTop);
       regChange(this);
-      if (badHeight) estimateLineHeights(this);
+      if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)
+        estimateLineHeights(this);
+      signal(this, "refresh", this);
     }),
 
     swapDoc: operation(null, function(doc) {
@@ -3207,6 +3292,7 @@
       clearCaches(this);
       resetInput(this, true);
       updateScrollPos(this, doc.scrollLeft, doc.scrollTop);
+      signalLater(this, "swapDoc", this, old);
       return old;
     }),
 
@@ -3246,12 +3332,18 @@
   option("indentWithTabs", false);
   option("smartIndent", true);
   option("tabSize", 4, function(cm) {
-    loadMode(cm);
+    resetModeState(cm);
     clearCaches(cm);
     regChange(cm);
   }, true);
+  option("specialChars", /[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\ufeff]/g, function(cm, val) {
+    cm.options.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
+    cm.refresh();
+  }, true);
+  option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true);
   option("electricChars", true);
   option("rtlMoveVisually", !windows);
+  option("wholeLineUpdateBefore", true);
 
   option("theme", "default", function(cm) {
     themeChanged(cm);
@@ -3281,10 +3373,19 @@
   option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true);
   option("showCursorWhenSelecting", false, updateSelection, true);
 
+  option("resetSelectionOnContextMenu", true);
+
   option("readOnly", false, function(cm, val) {
-    if (val == "nocursor") {onBlur(cm); cm.display.input.blur();}
-    else if (!val) resetInput(cm, true);
+    if (val == "nocursor") {
+      onBlur(cm);
+      cm.display.input.blur();
+      cm.display.disabled = true;
+    } else {
+      cm.display.disabled = false;
+      if (!val) resetInput(cm, true);
+    }
   });
+  option("disableInput", false, function(cm, val) {if (!val) resetInput(cm, true);}, true);
   option("dragDrop", true);
 
   option("cursorBlinkRate", 530);
@@ -3292,12 +3393,13 @@
   option("cursorHeight", 1);
   option("workTime", 100);
   option("workDelay", 100);
-  option("flattenSpans", true);
+  option("flattenSpans", true, resetModeState, true);
+  option("addModeClass", false, resetModeState, true);
   option("pollInterval", 100);
   option("undoDepth", 40, function(cm, val){cm.doc.history.undoDepth = val;});
   option("historyEventDelay", 500);
   option("viewportMargin", 10, function(cm){cm.refresh();}, true);
-  option("maxHighlightLength", 10000, function(cm){loadMode(cm); cm.refresh();}, true);
+  option("maxHighlightLength", 10000, resetModeState, true);
   option("crudeMeasuringFrom", 10000);
   option("moveInputWithCursor", true, function(cm, val) {
     if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0;
@@ -3354,6 +3456,9 @@
       }
     }
     modeObj.name = spec.name;
+    if (spec.helperType) modeObj.helperType = spec.helperType;
+    if (spec.modeProps) for (var prop in spec.modeProps)
+      modeObj[prop] = spec.modeProps[prop];
 
     return modeObj;
   };
@@ -3384,9 +3489,13 @@
 
   var helpers = CodeMirror.helpers = {};
   CodeMirror.registerHelper = function(type, name, value) {
-    if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {};
+    if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []};
     helpers[type][name] = value;
   };
+  CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
+    CodeMirror.registerHelper(type, name, value);
+    helpers[type]._global.push({pred: predicate, val: value});
+  };
 
   // UTILITIES
 
@@ -3491,7 +3600,9 @@
     indentAuto: function(cm) {cm.indentSelection("smart");},
     indentMore: function(cm) {cm.indentSelection("add");},
     indentLess: function(cm) {cm.indentSelection("subtract");},
-    insertTab: function(cm) {cm.replaceSelection("\t", "end", "+input");},
+    insertTab: function(cm) {
+      cm.replaceSelection("\t", "end", "+input");
+    },
     defaultTab: function(cm) {
       if (cm.somethingSelected()) cm.indentSelection("add");
       else cm.replaceSelection("\t", "end", "+input");
@@ -3517,7 +3628,8 @@
   keyMap.basic = {
     "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
     "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
-    "Delete": "delCharAfter", "Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto",
+    "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
+    "Tab": "defaultTab", "Shift-Tab": "indentAuto",
     "Enter": "newlineAndIndent", "Insert": "toggleOverwrite"
   };
   // Note that the save and find-related commands aren't defined by
@@ -3663,11 +3775,12 @@
     this.string = string;
     this.tabSize = tabSize || 8;
     this.lastColumnPos = this.lastColumnValue = 0;
+    this.lineStart = 0;
   }
 
   StringStream.prototype = {
     eol: function() {return this.pos >= this.string.length;},
-    sol: function() {return this.pos == 0;},
+    sol: function() {return this.pos == this.lineStart;},
     peek: function() {return this.string.charAt(this.pos) || undefined;},
     next: function() {
       if (this.pos < this.string.length)
@@ -3700,9 +3813,12 @@
         this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
         this.lastColumnPos = this.start;
       }
-      return this.lastColumnValue;
+      return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);
     },
-    indentation: function() {return countColumn(this.string, null, this.tabSize);},
+    indentation: function() {
+      return countColumn(this.string, null, this.tabSize) -
+        (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);
+    },
     match: function(pattern, consume, caseInsensitive) {
       if (typeof pattern == "string") {
         var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
@@ -3718,7 +3834,12 @@
         return match;
       }
     },
-    current: function(){return this.string.slice(this.start, this.pos);}
+    current: function(){return this.string.slice(this.start, this.pos);},
+    hideFirstChars: function(n, inner) {
+      this.lineStart += n;
+      try { return inner(); }
+      finally { this.lineStart -= n; }
+    }
   };
   CodeMirror.StringStream = StringStream;
 
@@ -3770,7 +3891,7 @@
     if (withOp) endOperation(cm);
   };
 
-  TextMarker.prototype.find = function() {
+  TextMarker.prototype.find = function(bothSides) {
     var from, to;
     for (var i = 0; i < this.lines.length; ++i) {
       var line = this.lines[i];
@@ -3781,7 +3902,7 @@
         if (span.to != null) to = Pos(found, span.to);
       }
     }
-    if (this.type == "bookmark") return from;
+    if (this.type == "bookmark" && !bothSides) return from;
     return from && {from: from, to: to};
   };
 
@@ -3818,37 +3939,40 @@
     }
   };
 
+  var nextMarkerId = 0;
+
   function markText(doc, from, to, options, type) {
     if (options && options.shared) return markTextShared(doc, from, to, options, type);
     if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type);
 
     var marker = new TextMarker(doc, type);
-    if (type == "range" && !posLess(from, to)) return marker;
     if (options) copyObj(options, marker);
+    if (posLess(to, from) || posEq(from, to) && marker.clearWhenEmpty !== false)
+      return marker;
     if (marker.replacedWith) {
       marker.collapsed = true;
       marker.replacedWith = elt("span", [marker.replacedWith], "CodeMirror-widget");
       if (!options.handleMouseEvents) marker.replacedWith.ignoreEvents = true;
     }
-    if (marker.collapsed) sawCollapsedSpans = true;
+    if (marker.collapsed) {
+      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
+          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
+        throw new Error("Inserting collapsed marker partially overlapping an existing one");
+      sawCollapsedSpans = true;
+    }
 
     if (marker.addToHistory)
       addToHistory(doc, {from: from, to: to, origin: "markText"},
                    {head: doc.sel.head, anchor: doc.sel.anchor}, NaN);
 
-    var curLine = from.line, size = 0, collapsedAtStart, collapsedAtEnd, cm = doc.cm, updateMaxLine;
+    var curLine = from.line, cm = doc.cm, updateMaxLine;
     doc.iter(curLine, to.line + 1, function(line) {
       if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(doc, line) == cm.display.maxLine)
         updateMaxLine = true;
       var span = {from: null, to: null, marker: marker};
-      size += line.text.length;
-      if (curLine == from.line) {span.from = from.ch; size -= from.ch;}
-      if (curLine == to.line) {span.to = to.ch; size -= line.text.length - to.ch;}
-      if (marker.collapsed) {
-        if (curLine == to.line) collapsedAtEnd = collapsedSpanAt(line, to.ch);
-        if (curLine == from.line) collapsedAtStart = collapsedSpanAt(line, from.ch);
-        else updateLineHeight(line, 0);
-      }
+      if (curLine == from.line) span.from = from.ch;
+      if (curLine == to.line) span.to = to.ch;
+      if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0);
       addMarkedSpan(line, span);
       ++curLine;
     });
@@ -3864,9 +3988,7 @@
         doc.clearHistory();
     }
     if (marker.collapsed) {
-      if (collapsedAtStart != collapsedAtEnd)
-        throw new Error("Inserting collapsed marker overlapping an existing one");
-      marker.size = size;
+      marker.id = ++nextMarkerId;
       marker.atomic = true;
     }
     if (cm) {
@@ -3939,7 +4061,7 @@
     if (old) for (var i = 0, nw; i < old.length; ++i) {
       var span = old[i], marker = span.marker;
       var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
-      if (startsBefore || marker.type == "bookmark" && span.from == startCh && (!isInsert || !span.marker.insertLeft)) {
+      if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
         var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);
         (nw || (nw = [])).push({from: span.from,
                                 to: endsAfter ? null : span.to,
@@ -3953,7 +4075,7 @@
     if (old) for (var i = 0, nw; i < old.length; ++i) {
       var span = old[i], marker = span.marker;
       var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
-      if (endsAfter || marker.type == "bookmark" && span.from == endCh && (!isInsert || span.marker.insertLeft)) {
+      if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
         var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);
         (nw || (nw = [])).push({from: startsBefore ? null : span.from - endCh,
                                 to: span.to == null ? null : span.to - endCh,
@@ -4003,13 +4125,9 @@
         }
       }
     }
-    if (sameLine && first) {
-      // Make sure we didn't create any zero-length spans
-      for (var i = 0; i < first.length; ++i)
-        if (first[i].from != null && first[i].from == first[i].to && first[i].marker.type != "bookmark")
-          first.splice(i--, 1);
-      if (!first.length) first = null;
-    }
+    // Make sure we didn't create any zero-length spans
+    if (first) first = clearEmptySpans(first);
+    if (last && last != first) last = clearEmptySpans(last);
 
     var newMarkers = [first];
     if (!sameLine) {
@@ -4026,6 +4144,16 @@
     return newMarkers;
   }
 
+  function clearEmptySpans(spans) {
+    for (var i = 0; i < spans.length; ++i) {
+      var span = spans[i];
+      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
+        spans.splice(i--, 1);
+    }
+    if (!spans.length) return null;
+    return spans;
+  }
+
   function mergeOldSpans(doc, change) {
     var old = getOldSpans(doc, change);
     var stretched = stretchSpansOverChange(doc, change);
@@ -4076,20 +4204,48 @@
     return parts;
   }
 
-  function collapsedSpanAt(line, ch) {
+  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }
+  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }
+
+  function compareCollapsedMarkers(a, b) {
+    var lenDiff = a.lines.length - b.lines.length;
+    if (lenDiff != 0) return lenDiff;
+    var aPos = a.find(), bPos = b.find();
+    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);
+    if (fromCmp) return -fromCmp;
+    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);
+    if (toCmp) return toCmp;
+    return b.id - a.id;
+  }
+
+  function collapsedSpanAtSide(line, start) {
     var sps = sawCollapsedSpans && line.markedSpans, found;
     if (sps) for (var sp, i = 0; i < sps.length; ++i) {
       sp = sps[i];
-      if (!sp.marker.collapsed) continue;
-      if ((sp.from == null || sp.from < ch) &&
-          (sp.to == null || sp.to > ch) &&
-          (!found || found.width < sp.marker.width))
+      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
+          (!found || compareCollapsedMarkers(found, sp.marker) < 0))
         found = sp.marker;
     }
     return found;
   }
-  function collapsedSpanAtStart(line) { return collapsedSpanAt(line, -1); }
-  function collapsedSpanAtEnd(line) { return collapsedSpanAt(line, line.text.length + 1); }
+  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); }
+  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); }
+
+  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
+    var line = getLine(doc, lineNo);
+    var sps = sawCollapsedSpans && line.markedSpans;
+    if (sps) for (var i = 0; i < sps.length; ++i) {
+      var sp = sps[i];
+      if (!sp.marker.collapsed) continue;
+      var found = sp.marker.find(true);
+      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);
+      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);
+      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue;
+      if (fromCmp <= 0 && (cmp(found.to, from) || extraRight(sp.marker) - extraLeft(marker)) > 0 ||
+          fromCmp >= 0 && (cmp(found.from, to) || extraLeft(sp.marker) - extraRight(marker)) < 0)
+        return true;
+    }
+  }
 
   function visualLine(doc, line) {
     var merged;
@@ -4119,6 +4275,7 @@
     for (var sp, i = 0; i < line.markedSpans.length; ++i) {
       sp = line.markedSpans[i];
       if (sp.marker.collapsed && !sp.marker.replacedWith && sp.from == span.to &&
+          (sp.to == null || sp.to != span.from) &&
           (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
           lineIsHiddenInner(doc, line, sp)) return true;
     }
@@ -4212,6 +4369,7 @@
     this.height = estimateHeight ? estimateHeight(this) : 1;
   };
   eventMixin(Line);
+  Line.prototype.lineNo = function() { return lineNo(this); };
 
   function updateLine(line, text, markedSpans, estimateHeight) {
     line.text = text;
@@ -4232,7 +4390,7 @@
   // Run the given mode's parser over a line, update the styles
   // array, which contains alternating fragments of text and CSS
   // classes.
-  function runMode(cm, text, mode, state, f) {
+  function runMode(cm, text, mode, state, f, forceToEnd) {
     var flattenSpans = mode.flattenSpans;
     if (flattenSpans == null) flattenSpans = cm.options.flattenSpans;
     var curStart = 0, curStyle = null;
@@ -4241,11 +4399,16 @@
     while (!stream.eol()) {
       if (stream.pos > cm.options.maxHighlightLength) {
         flattenSpans = false;
+        if (forceToEnd) processLine(cm, text, state, stream.pos);
         stream.pos = text.length;
         style = null;
       } else {
         style = mode.token(stream, state);
       }
+      if (cm.options.addModeClass) {
+        var mName = CodeMirror.innerMode(mode, state).mode.name;
+        if (mName) style = "m-" + (style ? mName + " " + style : mName);
+      }
       if (!flattenSpans || curStyle != style) {
         if (curStart < stream.start) f(stream.start, curStyle);
         curStart = stream.start; curStyle = style;
@@ -4260,12 +4423,14 @@
     }
   }
 
-  function highlightLine(cm, line, state) {
+  function highlightLine(cm, line, state, forceToEnd) {
     // A styles array always starts with a number identifying the
     // mode/overlays that it is based on (for easy invalidation).
     var st = [cm.state.modeGen];
     // Compute the base array of styles
-    runMode(cm, line.text, cm.doc.mode, state, function(end, style) {st.push(end, style);});
+    runMode(cm, line.text, cm.doc.mode, state, function(end, style) {
+      st.push(end, style);
+    }, forceToEnd);
 
     // Run overlays, adjust style array.
     for (var o = 0; o < cm.state.overlays.length; ++o) {
@@ -4304,21 +4469,22 @@
 
   // Lightweight form of highlight -- proceed over this line and
   // update state, but don't save a style array.
-  function processLine(cm, line, state) {
+  function processLine(cm, text, state, startAt) {
     var mode = cm.doc.mode;
-    var stream = new StringStream(line.text, cm.options.tabSize);
-    if (line.text == "" && mode.blankLine) mode.blankLine(state);
+    var stream = new StringStream(text, cm.options.tabSize);
+    stream.start = stream.pos = startAt || 0;
+    if (text == "" && mode.blankLine) mode.blankLine(state);
     while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) {
       mode.token(stream, state);
       stream.start = stream.pos;
     }
   }
 
-  var styleToClassCache = {};
+  var styleToClassCache = {}, styleToClassCacheWithMode = {};
   function interpretTokenStyle(style, builder) {
     if (!style) return null;
     for (;;) {
-      var lineClass = style.match(/(?:^|\s)line-(background-)?(\S+)/);
+      var lineClass = style.match(/(?:^|\s+)line-(background-)?(\S+)/);
       if (!lineClass) break;
       style = style.slice(0, lineClass.index) + style.slice(lineClass.index + lineClass[0].length);
       var prop = lineClass[1] ? "bgClass" : "textClass";
@@ -4327,8 +4493,10 @@
       else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(builder[prop]))
         builder[prop] += " " + lineClass[2];
     }
-    return styleToClassCache[style] ||
-      (styleToClassCache[style] = "cm-" + style.replace(/ +/g, " cm-"));
+    if (/^\s*$/.test(style)) return null;
+    var cache = builder.cm.options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;
+    return cache[style] ||
+      (cache[style] = style.replace(/\S+/g, "cm-$&"));
   }
 
   function buildLineContent(cm, realLine, measure, copyWidgets) {
@@ -4345,7 +4513,7 @@
       builder.measure = line == realLine && measure;
       builder.pos = 0;
       builder.addToken = builder.measure ? buildTokenMeasure : buildToken;
-      if ((ie || webkit) && cm.getOption("lineWrapping"))
+      if ((old_ie || webkit) && cm.getOption("lineWrapping"))
         builder.addToken = buildTokenSplitSpaces(builder.addToken);
       var next = insertLineContent(line, builder, getLineStyles(cm, line));
       if (measure && line == realLine && !builder.measuredSomething) {
@@ -4382,17 +4550,23 @@
     return builder;
   }
 
-  var tokenSpecialChars = /[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\uFEFF]/g;
+  function defaultSpecialCharPlaceholder(ch) {
+    var token = elt("span", "\u2022", "cm-invalidchar");
+    token.title = "\\u" + ch.charCodeAt(0).toString(16);
+    return token;
+  }
+
   function buildToken(builder, text, style, startStyle, endStyle, title) {
     if (!text) return;
-    if (!tokenSpecialChars.test(text)) {
+    var special = builder.cm.options.specialChars;
+    if (!special.test(text)) {
       builder.col += text.length;
       var content = document.createTextNode(text);
     } else {
       var content = document.createDocumentFragment(), pos = 0;
       while (true) {
-        tokenSpecialChars.lastIndex = pos;
-        var m = tokenSpecialChars.exec(text);
+        special.lastIndex = pos;
+        var m = special.exec(text);
         var skipped = m ? m.index - pos : text.length - pos;
         if (skipped) {
           content.appendChild(document.createTextNode(text.slice(pos, pos + skipped)));
@@ -4405,8 +4579,7 @@
           content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
           builder.col += tabWidth;
         } else {
-          var token = elt("span", "\u2022", "cm-invalidchar");
-          token.title = "\\u" + m[0].charCodeAt(0).toString(16);
+          var token = builder.cm.options.specialCharPlaceholder(m[0]);
           content.appendChild(token);
           builder.col += 1;
         }
@@ -4426,13 +4599,12 @@
   function buildTokenMeasure(builder, text, style, startStyle, endStyle) {
     var wrapping = builder.cm.options.lineWrapping;
     for (var i = 0; i < text.length; ++i) {
-      var ch = text.charAt(i), start = i == 0;
-      if (ch >= "\ud800" && ch < "\udbff" && i < text.length - 1) {
-        ch = text.slice(i, i + 2);
-        ++i;
-      } else if (i && wrapping && spanAffectsWrapping(text, i)) {
+      var start = i == 0, to = i + 1;
+      while (to < text.length && isExtendingChar(text.charAt(to))) ++to;
+      var ch = text.slice(i, to);
+      i = to - 1;
+      if (i && wrapping && spanAffectsWrapping(text, i))
         builder.pre.appendChild(elt("wbr"));
-      }
       var old = builder.measure[builder.pos];
       var span = builder.measure[builder.pos] =
         buildToken(builder, ch, style,
@@ -4441,7 +4613,7 @@
       // In IE single-space nodes wrap differently than spaces
       // embedded in larger text nodes, except when set to
       // white-space: normal (issue #1268).
-      if (ie && wrapping && ch == " " && i && !/\s/.test(text.charAt(i - 1)) &&
+      if (old_ie && wrapping && ch == " " && i && !/\s/.test(text.charAt(i - 1)) &&
           i < text.length - 1 && !/\s/.test(text.charAt(i + 1)))
         span.style.whiteSpace = "normal";
       builder.pos += ch.length;
@@ -4457,7 +4629,7 @@
       return out;
     }
     return function(builder, text, style, startStyle, endStyle, title) {
-      return inner(builder, text.replace(/ {3,}/, split), style, startStyle, endStyle, title);
+      return inner(builder, text.replace(/ {3,}/g, split), style, startStyle, endStyle, title);
     };
   }
 
@@ -4509,7 +4681,7 @@
             if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle;
             if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle;
             if (m.title && !title) title = m.title;
-            if (m.collapsed && (!collapsed || collapsed.marker.size < m.size))
+            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
               collapsed = sp;
           } else if (sp.from > pos && nextChange > sp.from) {
             nextChange = sp.from;
@@ -4559,7 +4731,8 @@
     var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;
 
     // First adjust the line structure
-    if (from.ch == 0 && to.ch == 0 && lastText == "") {
+    if (from.ch == 0 && to.ch == 0 && lastText == "" &&
+        (!doc.cm || doc.cm.options.wholeLineUpdateBefore)) {
       // This is a whole-line replace. Treated specially to make
       // sure line objects move the way they are supposed to.
       for (var i = 0, e = text.length - 1, added = []; i < e; ++i)
@@ -4841,10 +5014,11 @@
     clearHistory: function() {this.history = makeHistory(this.history.maxGeneration);},
 
     markClean: function() {
-      this.cleanGeneration = this.changeGeneration();
+      this.cleanGeneration = this.changeGeneration(true);
     },
-    changeGeneration: function() {
-      this.history.lastOp = this.history.lastOrigin = null;
+    changeGeneration: function(forceSplit) {
+      if (forceSplit)
+        this.history.lastOp = this.history.lastOrigin = null;
       return this.history.generation;
     },
     isClean: function (gen) {
@@ -4866,7 +5040,8 @@
     },
     setBookmark: function(pos, options) {
       var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
-                      insertLeft: options && options.insertLeft};
+                      insertLeft: options && options.insertLeft,
+                      clearWhenEmpty: false};
       pos = clipPos(this, pos);
       return markText(this, pos, pos, realOpts, "bookmark");
     },
@@ -5147,10 +5322,10 @@
              anchorBefore: doc.sel.anchor, headBefore: doc.sel.head,
              anchorAfter: selAfter.anchor, headAfter: selAfter.head};
       hist.done.push(cur);
-      hist.generation = ++hist.maxGeneration;
       while (hist.done.length > hist.undoDepth)
         hist.done.shift();
     }
+    hist.generation = ++hist.maxGeneration;
     hist.lastTime = time;
     hist.lastOp = opId;
     hist.lastOrigin = change.origin;
@@ -5446,7 +5621,8 @@
     return true;
   }
 
-  var isExtendingChar = /[\u0300-\u036F\u0483-\u0487\u0488-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\uA66F\uA670-\uA672\uA674-\uA67D\uA69F\udc00-\udfff]/;
+  var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
+  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); }
 
   // DOM UTILITIES
 
@@ -5519,7 +5695,7 @@
         if (/\w/.test(str.charAt(i - 2)) && /[^\-?\.]/.test(str.charAt(i))) return true;
         if (i > 2 && /[\d\.,]/.test(str.charAt(i - 2)) && /[\d\.,]/.test(str.charAt(i))) return false;
       }
-      return /[~!#%&*)=+}\]|\"\.>,:;][({[<]|-[^\-?\.\u2010-\u201f\u2026]|\?[\w~`@#$%\^&*(_=+{[|><]|…[\w~`@#$%\^&*(_=+{[><]/.test(str.slice(i - 1, i + 1));
+      return /[~!#%&*)=+}\]\\|\"\.>,:;][({[<]|-[^\-?\.\u2010-\u201f\u2026]|\?[\w~`@#$%\^&*(_=+{[|><]|\u2026[\w~`@#$%\^&*(_=+{[><]/.test(str.slice(i - 1, i + 1));
     };
 
   var knownScrollbarWidth;
@@ -5587,14 +5763,14 @@
   var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
                   19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
                   36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
-                  46: "Delete", 59: ";", 91: "Mod", 92: "Mod", 93: "Mod", 109: "-", 107: "=", 127: "Delete",
-                  186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
-                  221: "]", 222: "'", 63276: "PageUp", 63277: "PageDown", 63275: "End", 63273: "Home",
-                  63234: "Left", 63232: "Up", 63235: "Right", 63233: "Down", 63302: "Insert", 63272: "Delete"};
+                  46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 107: "=", 109: "-", 127: "Delete",
+                  173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
+                  221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
+                  63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"};
   CodeMirror.keyNames = keyNames;
   (function() {
     // Number keys
-    for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i);
+    for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i);
     // Alphabetic keys
     for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);
     // Function keys
@@ -5651,29 +5827,29 @@
   }
   var bidiOther;
   function getBidiPartAt(order, pos) {
+    bidiOther = null;
     for (var i = 0, found; i < order.length; ++i) {
       var cur = order[i];
-      if (cur.from < pos && cur.to > pos) { bidiOther = null; return i; }
-      if (cur.from == pos || cur.to == pos) {
+      if (cur.from < pos && cur.to > pos) return i;
+      if ((cur.from == pos || cur.to == pos)) {
         if (found == null) {
           found = i;
         } else if (compareBidiLevel(order, cur.level, order[found].level)) {
-          bidiOther = found;
+          if (cur.from != cur.to) bidiOther = found;
           return i;
         } else {
-          bidiOther = i;
+          if (cur.from != cur.to) bidiOther = i;
           return found;
         }
       }
     }
-    bidiOther = null;
     return found;
   }
 
   function moveInLine(line, pos, dir, byUnit) {
     if (!byUnit) return pos + dir;
     do pos += dir;
-    while (pos > 0 && isExtendingChar.test(line.text.charAt(pos)));
+    while (pos > 0 && isExtendingChar(line.text.charAt(pos)));
     return pos;
   }
 
@@ -5708,7 +5884,7 @@
 
   function moveLogically(line, start, dir, byUnit) {
     var target = start + dir;
-    if (byUnit) while (target > 0 && isExtendingChar.test(line.text.charAt(target))) target += dir;
+    if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir;
     return target < 0 || target > line.text.length ? null : target;
   }
 
@@ -5800,7 +5976,7 @@
         if (type == ",") types[i] = "N";
         else if (type == "%") {
           for (var end = i + 1; end < len && types[end] == "%"; ++end) {}
-          var replace = (i && types[i-1] == "!") || (end < len - 1 && types[end] == "1") ? "1" : "N";
+          var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N";
           for (var j = i; j < end; ++j) types[j] = replace;
           i = end - 1;
         }
@@ -5825,7 +6001,7 @@
         if (isNeutral.test(types[i])) {
           for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {}
           var before = (i ? types[i-1] : outerType) == "L";
-          var after = (end < len - 1 ? types[end] : outerType) == "L";
+          var after = (end < len ? types[end] : outerType) == "L";
           var replace = before || after ? "L" : "R";
           for (var j = i; j < end; ++j) types[j] = replace;
           i = end - 1;
@@ -5875,7 +6051,7 @@
 
   // THE END
 
-  CodeMirror.version = "3.16.1";
+  CodeMirror.version = "3.21.1";
 
   return CodeMirror;
 })();
diff --git a/Source/devtools/front_end/cm/coffeescript.js b/Source/devtools/front_end/cm/coffeescript.js
index 509d920..e8bfe48 100644
--- a/Source/devtools/front_end/cm/coffeescript.js
+++ b/Source/devtools/front_end/cm/coffeescript.js
@@ -2,346 +2,353 @@
  * Link to the project's GitHub page:
  * https://github.com/pickhardt/coffeescript-codemirror-mode
  */
-CodeMirror.defineMode('coffeescript', function(conf) {
-    var ERRORCLASS = 'error';
+CodeMirror.defineMode("coffeescript", function(conf) {
+  var ERRORCLASS = "error";
 
-    function wordRegexp(words) {
-        return new RegExp("^((" + words.join(")|(") + "))\\b");
+  function wordRegexp(words) {
+    return new RegExp("^((" + words.join(")|(") + "))\\b");
+  }
+
+  var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?)/;
+  var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/;
+  var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/;
+  var properties = /^(@|this\.)[_A-Za-z$][_A-Za-z$0-9]*/;
+
+  var wordOperators = wordRegexp(["and", "or", "not",
+                                  "is", "isnt", "in",
+                                  "instanceof", "typeof"]);
+  var indentKeywords = ["for", "while", "loop", "if", "unless", "else",
+                        "switch", "try", "catch", "finally", "class"];
+  var commonKeywords = ["break", "by", "continue", "debugger", "delete",
+                        "do", "in", "of", "new", "return", "then",
+                        "this", "throw", "when", "until"];
+
+  var keywords = wordRegexp(indentKeywords.concat(commonKeywords));
+
+  indentKeywords = wordRegexp(indentKeywords);
+
+
+  var stringPrefixes = /^('{3}|\"{3}|['\"])/;
+  var regexPrefixes = /^(\/{3}|\/)/;
+  var commonConstants = ["Infinity", "NaN", "undefined", "null", "true", "false", "on", "off", "yes", "no"];
+  var constants = wordRegexp(commonConstants);
+
+  // Tokenizers
+  function tokenBase(stream, state) {
+    // Handle scope changes
+    if (stream.sol()) {
+      if (state.scope.align === null) state.scope.align = false;
+      var scopeOffset = state.scope.offset;
+      if (stream.eatSpace()) {
+        var lineOffset = stream.indentation();
+        if (lineOffset > scopeOffset && state.scope.type == "coffee") {
+          return "indent";
+        } else if (lineOffset < scopeOffset) {
+          return "dedent";
+        }
+        return null;
+      } else {
+        if (scopeOffset > 0) {
+          dedent(stream, state);
+        }
+      }
+    }
+    if (stream.eatSpace()) {
+      return null;
     }
 
-    var singleOperators = new RegExp("^[\\+\\-\\*/%&|\\^~<>!\?]");
-    var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\},:`=;\\.]');
-    var doubleOperators = new RegExp("^((\->)|(\=>)|(\\+\\+)|(\\+\\=)|(\\-\\-)|(\\-\\=)|(\\*\\*)|(\\*\\=)|(\\/\\/)|(\\/\\=)|(==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//))");
-    var doubleDelimiters = new RegExp("^((\\.\\.)|(\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))");
-    var tripleDelimiters = new RegExp("^((\\.\\.\\.)|(//=)|(>>=)|(<<=)|(\\*\\*=))");
-    var identifiers = new RegExp("^[_A-Za-z$][_A-Za-z$0-9]*");
-    var properties = new RegExp("^(@|this\.)[_A-Za-z$][_A-Za-z$0-9]*");
+    var ch = stream.peek();
 
-    var wordOperators = wordRegexp(['and', 'or', 'not',
-                                    'is', 'isnt', 'in',
-                                    'instanceof', 'typeof']);
-    var indentKeywords = ['for', 'while', 'loop', 'if', 'unless', 'else',
-                          'switch', 'try', 'catch', 'finally', 'class'];
-    var commonKeywords = ['break', 'by', 'continue', 'debugger', 'delete',
-                          'do', 'in', 'of', 'new', 'return', 'then',
-                          'this', 'throw', 'when', 'until'];
-
-    var keywords = wordRegexp(indentKeywords.concat(commonKeywords));
-
-    indentKeywords = wordRegexp(indentKeywords);
-
-
-    var stringPrefixes = new RegExp("^('{3}|\"{3}|['\"])");
-    var regexPrefixes = new RegExp("^(/{3}|/)");
-    var commonConstants = ['Infinity', 'NaN', 'undefined', 'null', 'true', 'false', 'on', 'off', 'yes', 'no'];
-    var constants = wordRegexp(commonConstants);
-
-    // Tokenizers
-    function tokenBase(stream, state) {
-        // Handle scope changes
-        if (stream.sol()) {
-            var scopeOffset = state.scopes[0].offset;
-            if (stream.eatSpace()) {
-                var lineOffset = stream.indentation();
-                if (lineOffset > scopeOffset) {
-                    return 'indent';
-                } else if (lineOffset < scopeOffset) {
-                    return 'dedent';
-                }
-                return null;
-            } else {
-                if (scopeOffset > 0) {
-                    dedent(stream, state);
-                }
-            }
-        }
-        if (stream.eatSpace()) {
-            return null;
-        }
-
-        var ch = stream.peek();
-
-        // Handle docco title comment (single line)
-        if (stream.match("####")) {
-            stream.skipToEnd();
-            return 'comment';
-        }
-
-        // Handle multi line comments
-        if (stream.match("###")) {
-            state.tokenize = longComment;
-            return state.tokenize(stream, state);
-        }
-
-        // Single line comment
-        if (ch === '#') {
-            stream.skipToEnd();
-            return 'comment';
-        }
-
-        // Handle number literals
-        if (stream.match(/^-?[0-9\.]/, false)) {
-            var floatLiteral = false;
-            // Floats
-            if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) {
-              floatLiteral = true;
-            }
-            if (stream.match(/^-?\d+\.\d*/)) {
-              floatLiteral = true;
-            }
-            if (stream.match(/^-?\.\d+/)) {
-              floatLiteral = true;
-            }
-
-            if (floatLiteral) {
-                // prevent from getting extra . on 1..
-                if (stream.peek() == "."){
-                    stream.backUp(1);
-                }
-                return 'number';
-            }
-            // Integers
-            var intLiteral = false;
-            // Hex
-            if (stream.match(/^-?0x[0-9a-f]+/i)) {
-              intLiteral = true;
-            }
-            // Decimal
-            if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) {
-                intLiteral = true;
-            }
-            // Zero by itself with no other piece of number.
-            if (stream.match(/^-?0(?![\dx])/i)) {
-              intLiteral = true;
-            }
-            if (intLiteral) {
-                return 'number';
-            }
-        }
-
-        // Handle strings
-        if (stream.match(stringPrefixes)) {
-            state.tokenize = tokenFactory(stream.current(), 'string');
-            return state.tokenize(stream, state);
-        }
-        // Handle regex literals
-        if (stream.match(regexPrefixes)) {
-            if (stream.current() != '/' || stream.match(/^.*\//, false)) { // prevent highlight of division
-                state.tokenize = tokenFactory(stream.current(), 'string-2');
-                return state.tokenize(stream, state);
-            } else {
-                stream.backUp(1);
-            }
-        }
-
-        // Handle operators and delimiters
-        if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) {
-            return 'punctuation';
-        }
-        if (stream.match(doubleOperators)
-            || stream.match(singleOperators)
-            || stream.match(wordOperators)) {
-            return 'operator';
-        }
-        if (stream.match(singleDelimiters)) {
-            return 'punctuation';
-        }
-
-        if (stream.match(constants)) {
-            return 'atom';
-        }
-
-        if (stream.match(keywords)) {
-            return 'keyword';
-        }
-
-        if (stream.match(identifiers)) {
-            return 'variable';
-        }
-
-        if (stream.match(properties)) {
-            return 'property';
-        }
-
-        // Handle non-detected items
-        stream.next();
-        return ERRORCLASS;
+    // Handle docco title comment (single line)
+    if (stream.match("####")) {
+      stream.skipToEnd();
+      return "comment";
     }
 
-    function tokenFactory(delimiter, outclass) {
-        var singleline = delimiter.length == 1;
-        return function(stream, state) {
-            while (!stream.eol()) {
-                stream.eatWhile(/[^'"\/\\]/);
-                if (stream.eat('\\')) {
-                    stream.next();
-                    if (singleline && stream.eol()) {
-                        return outclass;
-                    }
-                } else if (stream.match(delimiter)) {
-                    state.tokenize = tokenBase;
-                    return outclass;
-                } else {
-                    stream.eat(/['"\/]/);
-                }
-            }
-            if (singleline) {
-                if (conf.mode.singleLineStringErrors) {
-                    outclass = ERRORCLASS;
-                } else {
-                    state.tokenize = tokenBase;
-                }
-            }
+    // Handle multi line comments
+    if (stream.match("###")) {
+      state.tokenize = longComment;
+      return state.tokenize(stream, state);
+    }
+
+    // Single line comment
+    if (ch === "#") {
+      stream.skipToEnd();
+      return "comment";
+    }
+
+    // Handle number literals
+    if (stream.match(/^-?[0-9\.]/, false)) {
+      var floatLiteral = false;
+      // Floats
+      if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) {
+        floatLiteral = true;
+      }
+      if (stream.match(/^-?\d+\.\d*/)) {
+        floatLiteral = true;
+      }
+      if (stream.match(/^-?\.\d+/)) {
+        floatLiteral = true;
+      }
+
+      if (floatLiteral) {
+        // prevent from getting extra . on 1..
+        if (stream.peek() == "."){
+          stream.backUp(1);
+        }
+        return "number";
+      }
+      // Integers
+      var intLiteral = false;
+      // Hex
+      if (stream.match(/^-?0x[0-9a-f]+/i)) {
+        intLiteral = true;
+      }
+      // Decimal
+      if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) {
+        intLiteral = true;
+      }
+      // Zero by itself with no other piece of number.
+      if (stream.match(/^-?0(?![\dx])/i)) {
+        intLiteral = true;
+      }
+      if (intLiteral) {
+        return "number";
+      }
+    }
+
+    // Handle strings
+    if (stream.match(stringPrefixes)) {
+      state.tokenize = tokenFactory(stream.current(), "string");
+      return state.tokenize(stream, state);
+    }
+    // Handle regex literals
+    if (stream.match(regexPrefixes)) {
+      if (stream.current() != "/" || stream.match(/^.*\//, false)) { // prevent highlight of division
+        state.tokenize = tokenFactory(stream.current(), "string-2");
+        return state.tokenize(stream, state);
+      } else {
+        stream.backUp(1);
+      }
+    }
+
+    // Handle operators and delimiters
+    if (stream.match(operators) || stream.match(wordOperators)) {
+      return "operator";
+    }
+    if (stream.match(delimiters)) {
+      return "punctuation";
+    }
+
+    if (stream.match(constants)) {
+      return "atom";
+    }
+
+    if (stream.match(keywords)) {
+      return "keyword";
+    }
+
+    if (stream.match(identifiers)) {
+      return "variable";
+    }
+
+    if (stream.match(properties)) {
+      return "property";
+    }
+
+    // Handle non-detected items
+    stream.next();
+    return ERRORCLASS;
+  }
+
+  function tokenFactory(delimiter, outclass) {
+    var singleline = delimiter.length == 1;
+    return function(stream, state) {
+      while (!stream.eol()) {
+        stream.eatWhile(/[^'"\/\\]/);
+        if (stream.eat("\\")) {
+          stream.next();
+          if (singleline && stream.eol()) {
             return outclass;
-        };
-    }
-
-    function longComment(stream, state) {
-        while (!stream.eol()) {
-            stream.eatWhile(/[^#]/);
-            if (stream.match("###")) {
-                state.tokenize = tokenBase;
-                break;
-            }
-            stream.eatWhile("#");
-        }
-        return "comment";
-    }
-
-    function indent(stream, state, type) {
-        type = type || 'coffee';
-        var indentUnit = 0;
-        if (type === 'coffee') {
-            for (var i = 0; i < state.scopes.length; i++) {
-                if (state.scopes[i].type === 'coffee') {
-                    indentUnit = state.scopes[i].offset + conf.indentUnit;
-                    break;
-                }
-            }
+          }
+        } else if (stream.match(delimiter)) {
+          state.tokenize = tokenBase;
+          return outclass;
         } else {
-            indentUnit = stream.column() + stream.current().length;
+          stream.eat(/['"\/]/);
         }
-        state.scopes.unshift({
-            offset: indentUnit,
-            type: type
-        });
-    }
-
-    function dedent(stream, state) {
-        if (state.scopes.length == 1) return;
-        if (state.scopes[0].type === 'coffee') {
-            var _indent = stream.indentation();
-            var _indent_index = -1;
-            for (var i = 0; i < state.scopes.length; ++i) {
-                if (_indent === state.scopes[i].offset) {
-                    _indent_index = i;
-                    break;
-                }
-            }
-            if (_indent_index === -1) {
-                return true;
-            }
-            while (state.scopes[0].offset !== _indent) {
-                state.scopes.shift();
-            }
-            return false;
+      }
+      if (singleline) {
+        if (conf.mode.singleLineStringErrors) {
+          outclass = ERRORCLASS;
         } else {
-            state.scopes.shift();
-            return false;
+          state.tokenize = tokenBase;
         }
-    }
-
-    function tokenLexer(stream, state) {
-        var style = state.tokenize(stream, state);
-        var current = stream.current();
-
-        // Handle '.' connected identifiers
-        if (current === '.') {
-            style = state.tokenize(stream, state);
-            current = stream.current();
-            if (style === 'variable') {
-                return 'variable';
-            } else {
-                return ERRORCLASS;
-            }
-        }
-
-        // Handle scope changes.
-        if (current === 'return') {
-            state.dedent += 1;
-        }
-        if (((current === '->' || current === '=>') &&
-                  !state.lambda &&
-                  state.scopes[0].type == 'coffee' &&
-                  stream.peek() === '')
-               || style === 'indent') {
-            indent(stream, state);
-        }
-        var delimiter_index = '[({'.indexOf(current);
-        if (delimiter_index !== -1) {
-            indent(stream, state, '])}'.slice(delimiter_index, delimiter_index+1));
-        }
-        if (indentKeywords.exec(current)){
-            indent(stream, state);
-        }
-        if (current == 'then'){
-            dedent(stream, state);
-        }
-
-
-        if (style === 'dedent') {
-            if (dedent(stream, state)) {
-                return ERRORCLASS;
-            }
-        }
-        delimiter_index = '])}'.indexOf(current);
-        if (delimiter_index !== -1) {
-            if (dedent(stream, state)) {
-                return ERRORCLASS;
-            }
-        }
-        if (state.dedent > 0 && stream.eol() && state.scopes[0].type == 'coffee') {
-            if (state.scopes.length > 1) state.scopes.shift();
-            state.dedent -= 1;
-        }
-
-        return style;
-    }
-
-    var external = {
-        startState: function(basecolumn) {
-            return {
-              tokenize: tokenBase,
-              scopes: [{offset:basecolumn || 0, type:'coffee'}],
-              lastToken: null,
-              lambda: false,
-              dedent: 0
-          };
-        },
-
-        token: function(stream, state) {
-            var style = tokenLexer(stream, state);
-
-            state.lastToken = {style:style, content: stream.current()};
-
-            if (stream.eol() && stream.lambda) {
-                state.lambda = false;
-            }
-
-            return style;
-        },
-
-        indent: function(state) {
-            if (state.tokenize != tokenBase) {
-                return 0;
-            }
-
-            return state.scopes[0].offset;
-        },
-
-        lineComment: "#"
+      }
+      return outclass;
     };
-    return external;
+  }
+
+  function longComment(stream, state) {
+    while (!stream.eol()) {
+      stream.eatWhile(/[^#]/);
+      if (stream.match("###")) {
+        state.tokenize = tokenBase;
+        break;
+      }
+      stream.eatWhile("#");
+    }
+    return "comment";
+  }
+
+  function indent(stream, state, type) {
+    type = type || "coffee";
+    var offset = 0, align = false, alignOffset = null;
+    for (var scope = state.scope; scope; scope = scope.prev) {
+      if (scope.type === "coffee") {
+        offset = scope.offset + conf.indentUnit;
+        break;
+      }
+    }
+    if (type !== "coffee") {
+      align = null;
+      alignOffset = stream.column() + stream.current().length;
+    } else if (state.scope.align) {
+      state.scope.align = false;
+    }
+    state.scope = {
+      offset: offset,
+      type: type,
+      prev: state.scope,
+      align: align,
+      alignOffset: alignOffset
+    };
+  }
+
+  function dedent(stream, state) {
+    if (!state.scope.prev) return;
+    if (state.scope.type === "coffee") {
+      var _indent = stream.indentation();
+      var matched = false;
+      for (var scope = state.scope; scope; scope = scope.prev) {
+        if (_indent === scope.offset) {
+          matched = true;
+          break;
+        }
+      }
+      if (!matched) {
+        return true;
+      }
+      while (state.scope.prev && state.scope.offset !== _indent) {
+        state.scope = state.scope.prev;
+      }
+      return false;
+    } else {
+      state.scope = state.scope.prev;
+      return false;
+    }
+  }
+
+  function tokenLexer(stream, state) {
+    var style = state.tokenize(stream, state);
+    var current = stream.current();
+
+    // Handle "." connected identifiers
+    if (current === ".") {
+      style = state.tokenize(stream, state);
+      current = stream.current();
+      if (/^\.[\w$]+$/.test(current)) {
+        return "variable";
+      } else {
+        return ERRORCLASS;
+      }
+    }
+
+    // Handle scope changes.
+    if (current === "return") {
+      state.dedent += 1;
+    }
+    if (((current === "->" || current === "=>") &&
+         !state.lambda &&
+         !stream.peek())
+        || style === "indent") {
+      indent(stream, state);
+    }
+    var delimiter_index = "[({".indexOf(current);
+    if (delimiter_index !== -1) {
+      indent(stream, state, "])}".slice(delimiter_index, delimiter_index+1));
+    }
+    if (indentKeywords.exec(current)){
+      indent(stream, state);
+    }
+    if (current == "then"){
+      dedent(stream, state);
+    }
+
+
+    if (style === "dedent") {
+      if (dedent(stream, state)) {
+        return ERRORCLASS;
+      }
+    }
+    delimiter_index = "])}".indexOf(current);
+    if (delimiter_index !== -1) {
+      while (state.scope.type == "coffee" && state.scope.prev)
+        state.scope = state.scope.prev;
+      if (state.scope.type == current)
+        state.scope = state.scope.prev;
+    }
+    if (state.dedent > 0 && stream.eol() && state.scope.type == "coffee") {
+      if (state.scope.prev) state.scope = state.scope.prev;
+      state.dedent -= 1;
+    }
+
+    return style;
+  }
+
+  var external = {
+    startState: function(basecolumn) {
+      return {
+        tokenize: tokenBase,
+        scope: {offset:basecolumn || 0, type:"coffee", prev: null, align: false},
+        lastToken: null,
+        lambda: false,
+        dedent: 0
+      };
+    },
+
+    token: function(stream, state) {
+      var fillAlign = state.scope.align === null && state.scope;
+      if (fillAlign && stream.sol()) fillAlign.align = false;
+
+      var style = tokenLexer(stream, state);
+      if (fillAlign && style && style != "comment") fillAlign.align = true;
+
+      state.lastToken = {style:style, content: stream.current()};
+
+      if (stream.eol() && stream.lambda) {
+        state.lambda = false;
+      }
+
+      return style;
+    },
+
+    indent: function(state, text) {
+      if (state.tokenize != tokenBase) return 0;
+      var scope = state.scope;
+      var closer = text && "])}".indexOf(text.charAt(0)) > -1;
+      if (closer) while (scope.type == "coffee" && scope.prev) scope = scope.prev;
+      var closes = closer && scope.type === text.charAt(0);
+      if (scope.align)
+        return scope.alignOffset - (closes ? 1 : 0);
+      else
+        return (closes ? scope.prev : scope).offset;
+    },
+
+    lineComment: "#",
+    fold: "indent"
+  };
+  return external;
 });
 
-CodeMirror.defineMIME('text/x-coffeescript', 'coffeescript');
+CodeMirror.defineMIME("text/x-coffeescript", "coffeescript");
diff --git a/Source/devtools/front_end/cm/comment.js b/Source/devtools/front_end/cm/comment.js
index 5975b0b..cd2123e 100644
--- a/Source/devtools/front_end/cm/comment.js
+++ b/Source/devtools/front_end/cm/comment.js
@@ -96,9 +96,8 @@
       for (var i = start; i <= end; ++i) {
         var line = self.getLine(i);
         var found = line.indexOf(lineString);
-        if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1;
         if (found == -1 && (i != end || i == start) && nonWS.test(line)) break lineComment;
-        if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment;
+        if (i != start && found > -1 && nonWS.test(line.slice(0, found))) break lineComment;
         lines.push(line);
       }
       self.operation(function() {
@@ -125,10 +124,7 @@
       endLine = self.getLine(--end);
       close = endLine.lastIndexOf(endString);
     }
-    if (open == -1 || close == -1 ||
-        !/comment/.test(self.getTokenTypeAt(Pos(start, open + 1))) ||
-        !/comment/.test(self.getTokenTypeAt(Pos(end, close + 1))))
-      return false;
+    if (open == -1 || close == -1) return false;
 
     self.operation(function() {
       self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)),
diff --git a/Source/devtools/front_end/cm/css.js b/Source/devtools/front_end/cm/css.js
index 6ad37f4..d8c30cf 100644
--- a/Source/devtools/front_end/cm/css.js
+++ b/Source/devtools/front_end/cm/css.js
@@ -1,11 +1,9 @@
-CodeMirror.defineMode("css", function(config) {
-  return CodeMirror.getMode(config, "text/css");
-});
-
-CodeMirror.defineMode("css-base", function(config, parserConfig) {
+CodeMirror.defineMode("css", function(config, parserConfig) {
   "use strict";
 
-  var indentUnit = config.indentUnit,
+  if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css");
+
+  var indentUnit = config.indentUnit || config.tabSize || 2,
       hooks = parserConfig.hooks || {},
       atMediaTypes = parserConfig.atMediaTypes || {},
       atMediaFeatures = parserConfig.atMediaFeatures || {},
@@ -39,7 +37,7 @@
       stream.match(/^\s*\w*/);
       return ret("keyword", "important");
     }
-    else if (/\d/.test(ch)) {
+    else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) {
       stream.eatWhile(/[\w.%]/);
       return ret("number", "unit");
     }
@@ -252,7 +250,6 @@
       // Push/pop context stack
       if (type == "{") {
         if (context == "@media" || context == "@mediaType") {
-          state.stack.pop();
           state.stack[state.stack.length-1] = "@media{";
         }
         else {
@@ -261,35 +258,57 @@
         }
       }
       else if (type == "}") {
-        var lastState = state.stack[state.stack.length - 1];
-        if (lastState == "interpolation") style = "operator";
-        state.stack.pop();
-        if (context == "propertyValue") state.stack.pop();
+        if (context == "interpolation") style = "operator";
+        // Pop off end of array until { is reached
+        while(state.stack.length){
+          var removed = state.stack.pop();
+          if(removed.indexOf("{") > -1 || removed == "block" || removed == "rule"){
+            break;
+          }
+        }
       }
       else if (type == "interpolation") state.stack.push("interpolation");
       else if (type == "@media") state.stack.push("@media");
       else if (type == "@import") state.stack.push("@import");
       else if (context == "@media" && /\b(keyword|attribute)\b/.test(style))
-        state.stack.push("@mediaType");
-      else if (context == "@mediaType" && stream.current() == ",") state.stack.pop();
-      else if (context == "@mediaType" && type == "(") state.stack.push("@mediaType(");
-      else if (context == "@mediaType(" && type == ")") state.stack.pop();
+        state.stack[state.stack.length-1] = "@mediaType";
+      else if (context == "@mediaType" && stream.current() == ",")
+        state.stack[state.stack.length-1] = "@media";
+      else if (type == "(") {
+        if (context == "@media" || context == "@mediaType") {
+          // Make sure @mediaType is used to avoid error on {
+          state.stack[state.stack.length-1] = "@mediaType";
+          state.stack.push("@mediaType(");
+        }
+        else state.stack.push("(");
+      }
+      else if (type == ")") {
+        // Pop off end of array until ( is reached
+        while(state.stack.length){
+          var removed = state.stack.pop();
+          if(removed.indexOf("(") > -1){
+            break;
+          }
+        }
+      }
       else if (type == ":" && state.lastToken == "property") state.stack.push("propertyValue");
       else if (context == "propertyValue" && type == ";") state.stack.pop();
       else if (context == "@import" && type == ";") state.stack.pop();
+
       return state.lastToken = style;
     },
 
     indent: function(state, textAfter) {
       var n = state.stack.length;
       if (/^\}/.test(textAfter))
-        n -= state.stack[state.stack.length-1] == "propertyValue" ? 2 : 1;
+        n -= state.stack[n-1] == "propertyValue" ? 2 : 1;
       return state.baseIndent + n * indentUnit;
     },
 
     electricChars: "}",
     blockCommentStart: "/*",
-    blockCommentEnd: "*/"
+    blockCommentEnd: "*/",
+    fold: "brace"
   };
 });
 
@@ -350,8 +369,8 @@
     "drop-initial-before-align", "drop-initial-size", "drop-initial-value",
     "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis",
     "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap",
-    "float", "float-offset", "font", "font-feature-settings", "font-family",
-    "font-kerning", "font-language-override", "font-size", "font-size-adjust",
+    "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings",
+    "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust",
     "font-stretch", "font-style", "font-synthesis", "font-variant",
     "font-variant-alternates", "font-variant-caps", "font-variant-east-asian",
     "font-variant-ligatures", "font-variant-numeric", "font-variant-position",
@@ -375,25 +394,27 @@
     "page", "page-break-after", "page-break-before", "page-break-inside",
     "page-policy", "pause", "pause-after", "pause-before", "perspective",
     "perspective-origin", "pitch", "pitch-range", "play-during", "position",
-    "presentation-level", "punctuation-trim", "quotes", "rendering-intent",
-    "resize", "rest", "rest-after", "rest-before", "richness", "right",
-    "rotation", "rotation-point", "ruby-align", "ruby-overhang",
-    "ruby-position", "ruby-span", "size", "speak", "speak-as", "speak-header",
+    "presentation-level", "punctuation-trim", "quotes", "region-break-after",
+    "region-break-before", "region-break-inside", "region-fragment",
+    "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness",
+    "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang",
+    "ruby-position", "ruby-span", "shape-inside", "shape-outside", "size",
+    "speak", "speak-as", "speak-header",
     "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set",
     "tab-size", "table-layout", "target", "target-name", "target-new",
     "target-position", "text-align", "text-align-last", "text-decoration",
     "text-decoration-color", "text-decoration-line", "text-decoration-skip",
     "text-decoration-style", "text-emphasis", "text-emphasis-color",
     "text-emphasis-position", "text-emphasis-style", "text-height",
-    "text-indent", "text-justify", "text-outline", "text-shadow",
-    "text-space-collapse", "text-transform", "text-underline-position",
+    "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow",
+    "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position",
     "text-wrap", "top", "transform", "transform-origin", "transform-style",
     "transition", "transition-delay", "transition-duration",
     "transition-property", "transition-timing-function", "unicode-bidi",
     "vertical-align", "visibility", "voice-balance", "voice-duration",
     "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress",
     "voice-volume", "volume", "white-space", "widows", "width", "word-break",
-    "word-spacing", "word-wrap", "z-index",
+    "word-spacing", "word-wrap", "z-index", "zoom",
     // SVG-specific
     "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color",
     "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events",
@@ -416,7 +437,7 @@
     "darkslateblue", "darkslategray", "darkturquoise", "darkviolet",
     "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick",
     "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite",
-    "gold", "goldenrod", "gray", "green", "greenyellow", "honeydew",
+    "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew",
     "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender",
     "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral",
     "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink",
@@ -439,22 +460,22 @@
     "above", "absolute", "activeborder", "activecaption", "afar",
     "after-white-space", "ahead", "alias", "all", "all-scroll", "alternate",
     "always", "amharic", "amharic-abegede", "antialiased", "appworkspace",
-    "arabic-indic", "armenian", "asterisks", "auto", "avoid", "background",
-    "backwards", "baseline", "below", "bidi-override", "binary", "bengali",
-    "blink", "block", "block-axis", "bold", "bolder", "border", "border-box",
-    "both", "bottom", "bounding-box", "break-all", "break-word", "button", "button-bevel",
+    "arabic-indic", "armenian", "asterisks", "auto", "avoid", "avoid-column", "avoid-page",
+    "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary",
+    "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box",
+    "both", "bottom", "break", "break-all", "break-word", "button", "button-bevel",
     "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "cambodian",
     "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret",
     "cell", "center", "checkbox", "circle", "cjk-earthly-branch",
     "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote",
-    "col-resize", "collapse", "compact", "condensed", "contain", "content",
+    "col-resize", "collapse", "column", "compact", "condensed", "contain", "content",
     "content-box", "context-menu", "continuous", "copy", "cover", "crop",
     "cross", "crosshair", "currentcolor", "cursive", "dashed", "decimal",
     "decimal-leading-zero", "default", "default-button", "destination-atop",
     "destination-in", "destination-out", "destination-over", "devanagari",
     "disc", "discard", "document", "dot-dash", "dot-dot-dash", "dotted",
     "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out",
-    "element", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede",
+    "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede",
     "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er",
     "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er",
     "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et",
@@ -470,7 +491,7 @@
     "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite",
     "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis",
     "inline-block", "inline-table", "inset", "inside", "intrinsic", "invert",
-    "italic", "justify", "kannada", "katakana", "katakana-iroha", "khmer",
+    "italic", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer",
     "landscape", "lao", "large", "larger", "left", "level", "lighter",
     "line-through", "linear", "lines", "list-item", "listbox", "listitem",
     "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian",
@@ -489,11 +510,11 @@
     "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap",
     "ns-resize", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote",
     "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset",
-    "outside", "overlay", "overline", "padding", "padding-box", "painted",
-    "paused", "persian", "plus-darker", "plus-lighter", "pointer", "portrait",
-    "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button",
-    "radio", "read-only", "read-write", "read-write-plaintext-only", "relative",
-    "repeat", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba",
+    "outside", "outside-shape", "overlay", "overline", "padding", "padding-box",
+    "painted", "page", "paused", "persian", "plus-darker", "plus-lighter", "pointer",
+    "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button",
+    "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region",
+    "relative", "repeat", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba",
     "ridge", "right", "round", "row-resize", "rtl", "run-in", "running",
     "s-resize", "sans-serif", "scroll", "scrollbar", "se-resize", "searchfield",
     "searchfield-cancel-button", "searchfield-decoration",
@@ -564,7 +585,7 @@
         return false;
       }
     },
-    name: "css-base"
+    name: "css"
   });
 
   CodeMirror.defineMIME("text/x-scss", {
@@ -575,6 +596,12 @@
     valueKeywords: valueKeywords,
     allowNested: true,
     hooks: {
+      ":": function(stream) {
+        if (stream.match(/\s*{/)) {
+          return [null, "{"];
+        }
+        return false;
+      },
       "$": function(stream) {
         stream.match(/^[\w-]+/);
         if (stream.peek() == ":") {
@@ -582,6 +609,11 @@
         }
         return ["variable", "variable"];
       },
+      ",": function(stream, state) {
+        if (state.stack[state.stack.length - 1] == "propertyValue" && stream.match(/^ *\$/, false)) {
+          return ["operator", ";"];
+        }
+      },
       "/": function(stream, state) {
         if (stream.eat("/")) {
           stream.skipToEnd();
@@ -602,6 +634,6 @@
         }
       }
     },
-    name: "css-base"
+    name: "css"
   });
 })();
diff --git a/Source/devtools/front_end/cm/headlesscodemirror.js b/Source/devtools/front_end/cm/headlesscodemirror.js
index 7caca5c..3433e8d 100644
--- a/Source/devtools/front_end/cm/headlesscodemirror.js
+++ b/Source/devtools/front_end/cm/headlesscodemirror.js
@@ -1,83 +1,155 @@
+// Content of the function is equal to runmode-standalone.js file
+// from CodeMirror distribution
 (function(window) {
-  window.CodeMirror = {};
+/* Just enough of CodeMirror to run runMode under node.js */
 
-  function splitLines(string){ return string.split(/\r?\n|\r/); };
+window.CodeMirror = {};
 
-  function StringStream(string) {
-    this.pos = this.start = 0;
-    this.string = string;
-  }
-  StringStream.prototype = {
-    eol: function() {return this.pos >= this.string.length;},
-    sol: function() {return this.pos == 0;},
-    peek: function() {return this.string.charAt(this.pos) || null;},
-    next: function() {
-      if (this.pos < this.string.length)
-        return this.string.charAt(this.pos++);
-    },
-    eat: function(match) {
-      var ch = this.string.charAt(this.pos);
-      if (typeof match == "string") var ok = ch == match;
-      else var ok = ch && (match.test ? match.test(ch) : match(ch));
-      if (ok) {++this.pos; return ch;}
-    },
-    eatWhile: function(match) {
-      var start = this.pos;
-      while (this.eat(match)){}
-      return this.pos > start;
-    },
-    eatSpace: function() {
-      var start = this.pos;
-      while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;
-      return this.pos > start;
-    },
-    skipToEnd: function() {this.pos = this.string.length;},
-    skipTo: function(ch) {
-      var found = this.string.indexOf(ch, this.pos);
-      if (found > -1) {this.pos = found; return true;}
-    },
-    backUp: function(n) {this.pos -= n;},
-    column: function() {return this.start;},
-    indentation: function() {return 0;},
-    match: function(pattern, consume, caseInsensitive) {
-      if (typeof pattern == "string") {
-        var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
-        var substr = this.string.substr(this.pos, pattern.length);
-        if (cased(substr) == cased(pattern)) {
-          if (consume !== false) this.pos += pattern.length;
-          return true;
-        }
-      } else {
-        var match = this.string.slice(this.pos).match(pattern);
-        if (match && match.index > 0) return null;
-        if (match && consume !== false) this.pos += match[0].length;
-        return match;
+(function() {
+"use strict";
+
+function splitLines(string){ return string.split(/\r?\n|\r/); };
+
+function StringStream(string) {
+  this.pos = this.start = 0;
+  this.string = string;
+  this.lineStart = 0;
+}
+StringStream.prototype = {
+  eol: function() {return this.pos >= this.string.length;},
+  sol: function() {return this.pos == 0;},
+  peek: function() {return this.string.charAt(this.pos) || null;},
+  next: function() {
+    if (this.pos < this.string.length)
+      return this.string.charAt(this.pos++);
+  },
+  eat: function(match) {
+    var ch = this.string.charAt(this.pos);
+    if (typeof match == "string") var ok = ch == match;
+    else var ok = ch && (match.test ? match.test(ch) : match(ch));
+    if (ok) {++this.pos; return ch;}
+  },
+  eatWhile: function(match) {
+    var start = this.pos;
+    while (this.eat(match)){}
+    return this.pos > start;
+  },
+  eatSpace: function() {
+    var start = this.pos;
+    while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;
+    return this.pos > start;
+  },
+  skipToEnd: function() {this.pos = this.string.length;},
+  skipTo: function(ch) {
+    var found = this.string.indexOf(ch, this.pos);
+    if (found > -1) {this.pos = found; return true;}
+  },
+  backUp: function(n) {this.pos -= n;},
+  column: function() {return this.start - this.lineStart;},
+  indentation: function() {return 0;},
+  match: function(pattern, consume, caseInsensitive) {
+    if (typeof pattern == "string") {
+      var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
+      var substr = this.string.substr(this.pos, pattern.length);
+      if (cased(substr) == cased(pattern)) {
+        if (consume !== false) this.pos += pattern.length;
+        return true;
       }
-    },
-    current: function(){return this.string.slice(this.start, this.pos);}
-  };
-  CodeMirror.StringStream = StringStream;
+    } else {
+      var match = this.string.slice(this.pos).match(pattern);
+      if (match && match.index > 0) return null;
+      if (match && consume !== false) this.pos += match[0].length;
+      return match;
+    }
+  },
+  current: function(){return this.string.slice(this.start, this.pos);},
+  hideFirstChars: function(n, inner) {
+    this.lineStart += n;
+    try { return inner(); }
+    finally { this.lineStart -= n; }
+  }
+};
+CodeMirror.StringStream = StringStream;
 
-  CodeMirror.startState = function (mode, a1, a2) {
-    return mode.startState ? mode.startState(a1, a2) : true;
-  };
+CodeMirror.startState = function (mode, a1, a2) {
+  return mode.startState ? mode.startState(a1, a2) : true;
+};
 
-  var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};
-  CodeMirror.defineMode = function (name, mode) { modes[name] = mode; };
-  CodeMirror.defineMIME = function (mime, spec) { mimeModes[mime] = spec; };
-  CodeMirror.defineMode("null", function() {
+var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};
+CodeMirror.defineMode = function (name, mode) { modes[name] = mode; };
+CodeMirror.defineMIME = function (mime, spec) { mimeModes[mime] = spec; };
+CodeMirror.resolveMode = function(spec) {
+  if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
+    spec = mimeModes[spec];
+  } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
+    spec = mimeModes[spec.name];
+  }
+  if (typeof spec == "string") return {name: spec};
+  else return spec || {name: "null"};
+};
+CodeMirror.getMode = function (options, spec) {
+  spec = CodeMirror.resolveMode(spec);
+  var mfactory = modes[spec.name];
+  if (!mfactory) throw new Error("Unknown mode: " + spec);
+  return mfactory(options, spec);
+};
+CodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min;
+CodeMirror.defineMode("null", function() {
   return {token: function(stream) {stream.skipToEnd();}};
-  });
-  CodeMirror.defineMIME("text/plain", "null");
-  CodeMirror.getMode = function (options, spec) {
-    if (typeof spec == "string" && mimeModes.hasOwnProperty(spec))
-      spec = mimeModes[spec];
-    if (typeof spec == "string")
-      var mname = spec, config = {};
-    else if (spec != null)
-      var mname = spec.name, config = spec;
-    var mfactory = modes[mname];
-    if (!mfactory) throw new Error("Unknown mode: " + spec);
-    return mfactory(options, config || {});
-  };
-}(this));
+});
+CodeMirror.defineMIME("text/plain", "null");
+
+CodeMirror.runMode = function (string, modespec, callback, options) {
+  var mode = CodeMirror.getMode({ indentUnit: 2 }, modespec);
+
+  if (callback.nodeType == 1) {
+    var tabSize = (options && options.tabSize) || 4;
+    var node = callback, col = 0;
+    node.innerHTML = "";
+    callback = function (text, style) {
+      if (text == "\n") {
+        node.appendChild(document.createElement("br"));
+        col = 0;
+        return;
+      }
+      var content = "";
+      // replace tabs
+      for (var pos = 0; ;) {
+        var idx = text.indexOf("\t", pos);
+        if (idx == -1) {
+          content += text.slice(pos);
+          col += text.length - pos;
+          break;
+        } else {
+          col += idx - pos;
+          content += text.slice(pos, idx);
+          var size = tabSize - col % tabSize;
+          col += size;
+          for (var i = 0; i < size; ++i) content += " ";
+          pos = idx + 1;
+        }
+      }
+
+      if (style) {
+        var sp = node.appendChild(document.createElement("span"));
+        sp.className = "cm-" + style.replace(/ +/g, " cm-");
+        sp.appendChild(document.createTextNode(content));
+      } else {
+        node.appendChild(document.createTextNode(content));
+      }
+    };
+  }
+
+  var lines = splitLines(string), state = (options && options.state) || CodeMirror.startState(mode);
+  for (var i = 0, e = lines.length; i < e; ++i) {
+    if (i) callback("\n");
+    var stream = new CodeMirror.StringStream(lines[i]);
+    while (!stream.eol()) {
+      var style = mode.token(stream, state);
+      callback(stream.current(), style, i, stream.start, state);
+      stream.start = stream.pos;
+    }
+  }
+};
+})();
+}(this))
diff --git a/Source/devtools/front_end/cm/htmlmixed.js b/Source/devtools/front_end/cm/htmlmixed.js
index ec0c21d..b59ef37 100644
--- a/Source/devtools/front_end/cm/htmlmixed.js
+++ b/Source/devtools/front_end/cm/htmlmixed.js
@@ -44,7 +44,7 @@
     if (close > -1) stream.backUp(cur.length - close);
     else if (m = cur.match(/<\/?$/)) {
       stream.backUp(cur.length);
-      if (!stream.match(pat, false)) stream.match(cur[0]);
+      if (!stream.match(pat, false)) stream.match(cur);
     }
     return style;
   }
diff --git a/Source/devtools/front_end/cm/javascript.js b/Source/devtools/front_end/cm/javascript.js
index fabe1c4..f27c063 100644
--- a/Source/devtools/front_end/cm/javascript.js
+++ b/Source/devtools/front_end/cm/javascript.js
@@ -2,6 +2,7 @@
 
 CodeMirror.defineMode("javascript", function(config, parserConfig) {
   var indentUnit = config.indentUnit;
+  var statementIndent = parserConfig.statementIndent;
   var jsonMode = parserConfig.json;
   var isTS = parserConfig.typescript;
 
@@ -20,7 +21,8 @@
       "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
       "in": operator, "typeof": operator, "instanceof": operator,
       "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom,
-      "this": kw("this")
+      "this": kw("this"), "module": kw("module"), "class": kw("class"), "super": kw("atom"),
+      "yield": C, "export": kw("export"), "import": kw("import"), "extends": C
     };
 
     // Extend the 'normal' keywords with the TypeScript language extensions
@@ -29,7 +31,6 @@
       var tsKeywords = {
         // object-like things
         "interface": kw("interface"),
-        "class": kw("class"),
         "extends": kw("extends"),
         "constructor": kw("constructor"),
 
@@ -39,8 +40,6 @@
         "protected": kw("protected"),
         "static": kw("static"),
 
-        "super": kw("super"),
-
         // types
         "string": type, "number": type, "bool": type, "any": type
       };
@@ -55,11 +54,6 @@
 
   var isOperatorChar = /[+\-*&%=<>!?|~^]/;
 
-  function chain(stream, state, f) {
-    state.tokenize = f;
-    return f(stream, state);
-  }
-
   function nextUntilUnescaped(stream, end) {
     var escaped = false, next;
     while ((next = stream.next()) != null) {
@@ -77,49 +71,51 @@
     type = tp; content = cont;
     return style;
   }
-
-  function jsTokenBase(stream, state) {
+  function tokenBase(stream, state) {
     var ch = stream.next();
-    if (ch == '"' || ch == "'")
-      return chain(stream, state, jsTokenString(ch));
-    else if (/[\[\]{}\(\),;\:\.]/.test(ch))
+    if (ch == '"' || ch == "'") {
+      state.tokenize = tokenString(ch);
+      return state.tokenize(stream, state);
+    } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) {
+      return ret("number", "number");
+    } else if (ch == "." && stream.match("..")) {
+      return ret("spread", "meta");
+    } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
       return ret(ch);
-    else if (ch == "0" && stream.eat(/x/i)) {
+    } else if (ch == "=" && stream.eat(">")) {
+      return ret("=>");
+    } else if (ch == "0" && stream.eat(/x/i)) {
       stream.eatWhile(/[\da-f]/i);
       return ret("number", "number");
-    }
-    else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) {
+    } else if (/\d/.test(ch)) {
       stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/);
       return ret("number", "number");
-    }
-    else if (ch == "/") {
+    } else if (ch == "/") {
       if (stream.eat("*")) {
-        return chain(stream, state, jsTokenComment);
-      }
-      else if (stream.eat("/")) {
+        state.tokenize = tokenComment;
+        return tokenComment(stream, state);
+      } else if (stream.eat("/")) {
         stream.skipToEnd();
         return ret("comment", "comment");
-      }
-      else if (state.lastType == "operator" || state.lastType == "keyword c" ||
-               /^[\[{}\(,;:]$/.test(state.lastType)) {
+      } else if (state.lastType == "operator" || state.lastType == "keyword c" ||
+               state.lastType == "sof" || /^[\[{}\(,;:]$/.test(state.lastType)) {
         nextUntilUnescaped(stream, "/");
         stream.eatWhile(/[gimy]/); // 'y' is "sticky" option in Mozilla
         return ret("regexp", "string-2");
-      }
-      else {
+      } else {
         stream.eatWhile(isOperatorChar);
         return ret("operator", null, stream.current());
       }
-    }
-    else if (ch == "#") {
+    } else if (ch == "`") {
+      state.tokenize = tokenQuasi;
+      return tokenQuasi(stream, state);
+    } else if (ch == "#") {
       stream.skipToEnd();
       return ret("error", "error");
-    }
-    else if (isOperatorChar.test(ch)) {
+    } else if (isOperatorChar.test(ch)) {
       stream.eatWhile(isOperatorChar);
       return ret("operator", null, stream.current());
-    }
-    else {
+    } else {
       stream.eatWhile(/[\w\$_]/);
       var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];
       return (known && state.lastType != ".") ? ret(known.type, known.style, word) :
@@ -127,19 +123,19 @@
     }
   }
 
-  function jsTokenString(quote) {
+  function tokenString(quote) {
     return function(stream, state) {
       if (!nextUntilUnescaped(stream, quote))
-        state.tokenize = jsTokenBase;
+        state.tokenize = tokenBase;
       return ret("string", "string");
     };
   }
 
-  function jsTokenComment(stream, state) {
+  function tokenComment(stream, state) {
     var maybeEnd = false, ch;
     while (ch = stream.next()) {
       if (ch == "/" && maybeEnd) {
-        state.tokenize = jsTokenBase;
+        state.tokenize = tokenBase;
         break;
       }
       maybeEnd = (ch == "*");
@@ -147,6 +143,50 @@
     return ret("comment", "comment");
   }
 
+  function tokenQuasi(stream, state) {
+    var escaped = false, next;
+    while ((next = stream.next()) != null) {
+      if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) {
+        state.tokenize = tokenBase;
+        break;
+      }
+      escaped = !escaped && next == "\\";
+    }
+    return ret("quasi", "string-2", stream.current());
+  }
+
+  var brackets = "([{}])";
+  // This is a crude lookahead trick to try and notice that we're
+  // parsing the argument patterns for a fat-arrow function before we
+  // actually hit the arrow token. It only works if the arrow is on
+  // the same line as the arguments and there's no strange noise
+  // (comments) in between. Fallback is to only notice when we hit the
+  // arrow, and not declare the arguments as locals for the arrow
+  // body.
+  function findFatArrow(stream, state) {
+    if (state.fatArrowAt) state.fatArrowAt = null;
+    var arrow = stream.string.indexOf("=>", stream.start);
+    if (arrow < 0) return;
+
+    var depth = 0, sawSomething = false;
+    for (var pos = arrow - 1; pos >= 0; --pos) {
+      var ch = stream.string.charAt(pos);
+      var bracket = brackets.indexOf(ch);
+      if (bracket >= 0 && bracket < 3) {
+        if (!depth) { ++pos; break; }
+        if (--depth == 0) break;
+      } else if (bracket >= 3 && bracket < 6) {
+        ++depth;
+      } else if (/[$\w]/.test(ch)) {
+        sawSomething = true;
+      } else if (sawSomething && !depth) {
+        ++pos;
+        break;
+      }
+    }
+    if (sawSomething && !depth) state.fatArrowAt = pos;
+  }
+
   // Parser
 
   var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true};
@@ -163,6 +203,10 @@
   function inScope(state, varname) {
     for (var v = state.localVars; v; v = v.next)
       if (v.name == varname) return true;
+    for (var cx = state.context; cx; cx = cx.prev) {
+      for (var v = cx.vars; v; v = v.next)
+        if (v.name == varname) return true;
+    }
   }
 
   function parseJS(state, style, type, content, stream) {
@@ -209,7 +253,8 @@
       state.localVars = {name: varname, next: state.localVars};
     } else {
       if (inList(state.globalVars)) return;
-      state.globalVars = {name: varname, next: state.globalVars};
+      if (parserConfig.globalVars)
+        state.globalVars = {name: varname, next: state.globalVars};
     }
   }
 
@@ -226,8 +271,9 @@
   }
   function pushlex(type, info) {
     var result = function() {
-      var state = cx.state;
-      state.lexical = new JSLexical(state.indented, cx.stream.column(), type, null, state.lexical, info);
+      var state = cx.state, indent = state.indented;
+      if (state.lexical.type == "stat") indent = state.lexical.indented;
+      state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);
     };
     result.lex = true;
     return result;
@@ -250,61 +296,100 @@
     };
   }
 
-  function statement(type) {
-    if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex);
+  function statement(type, value) {
+    if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex);
     if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex);
     if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
     if (type == "{") return cont(pushlex("}"), block, poplex);
     if (type == ";") return cont();
-    if (type == "if") return cont(pushlex("form"), expression, statement, poplex, maybeelse(cx.state.indented));
+    if (type == "if") return cont(pushlex("form"), expression, statement, poplex, maybeelse);
     if (type == "function") return cont(functiondef);
-    if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"),
-                                      poplex, statement, poplex);
+    if (type == "for") return cont(pushlex("form"), forspec, poplex, statement, poplex);
     if (type == "variable") return cont(pushlex("stat"), maybelabel);
     if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"),
-                                         block, poplex, poplex);
+                                      block, poplex, poplex);
     if (type == "case") return cont(expression, expect(":"));
     if (type == "default") return cont(expect(":"));
     if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"),
-                                        statement, poplex, popcontext);
+                                     statement, poplex, popcontext);
+    if (type == "module") return cont(pushlex("form"), pushcontext, afterModule, popcontext, poplex);
+    if (type == "class") return cont(pushlex("form"), className, objlit, poplex);
+    if (type == "export") return cont(pushlex("form"), afterExport, poplex);
+    if (type == "import") return cont(pushlex("form"), afterImport, poplex);
     return pass(pushlex("stat"), expression, expect(";"), poplex);
   }
   function expression(type) {
-    return expressionInner(type, maybeoperatorComma);
+    return expressionInner(type, false);
   }
   function expressionNoComma(type) {
-    return expressionInner(type, maybeoperatorNoComma);
+    return expressionInner(type, true);
   }
-  function expressionInner(type, maybeop) {
+  function expressionInner(type, noComma) {
+    if (cx.state.fatArrowAt == cx.stream.start) {
+      var body = noComma ? arrowBodyNoComma : arrowBody;
+      if (type == "(") return cont(pushcontext, commasep(pattern, ")"), expect("=>"), body, popcontext);
+      else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext);
+    }
+
+    var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;
     if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);
     if (type == "function") return cont(functiondef);
-    if (type == "keyword c") return cont(maybeexpression);
-    if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop);
-    if (type == "operator") return cont(expression);
-    if (type == "[") return cont(pushlex("]"), commasep(expressionNoComma, "]"), poplex, maybeop);
-    if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeop);
+    if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression);
+    if (type == "(") return cont(pushlex(")"), maybeexpression, comprehension, expect(")"), poplex, maybeop);
+    if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression);
+    if (type == "[") return cont(pushlex("]"), expressionNoComma, maybeArrayComprehension, poplex, maybeop);
+    if (type == "{") return cont(commasep(objprop, "}"), maybeop);
     return cont();
   }
   function maybeexpression(type) {
     if (type.match(/[;\}\)\],]/)) return pass();
     return pass(expression);
   }
+  function maybeexpressionNoComma(type) {
+    if (type.match(/[;\}\)\],]/)) return pass();
+    return pass(expressionNoComma);
+  }
 
   function maybeoperatorComma(type, value) {
-    if (type == ",") return pass();
-    return maybeoperatorNoComma(type, value, maybeoperatorComma);
+    if (type == ",") return cont(expression);
+    return maybeoperatorNoComma(type, value, false);
   }
-  function maybeoperatorNoComma(type, value, me) {
-    if (!me) me = maybeoperatorNoComma;
+  function maybeoperatorNoComma(type, value, noComma) {
+    var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;
+    var expr = noComma == false ? expression : expressionNoComma;
+    if (value == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);
     if (type == "operator") {
       if (/\+\+|--/.test(value)) return cont(me);
-      if (value == "?") return cont(expression, expect(":"), expression);
-      return cont(expression);
+      if (value == "?") return cont(expression, expect(":"), expr);
+      return cont(expr);
     }
+    if (type == "quasi") { cx.cc.push(me); return quasi(value); }
     if (type == ";") return;
-    if (type == "(") return cont(pushlex(")", "call"), commasep(expressionNoComma, ")"), poplex, me);
+    if (type == "(") return cont(commasep(expressionNoComma, ")", "call"), me);
     if (type == ".") return cont(property, me);
-    if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, me);
+    if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me);
+  }
+  function quasi(value) {
+    if (!value) debugger;
+    if (value.slice(value.length - 2) != "${") return cont();
+    return cont(expression, continueQuasi);
+  }
+  function continueQuasi(type) {
+    if (type == "}") {
+      cx.marked = "string-2";
+      cx.state.tokenize = tokenQuasi;
+      return cont();
+    }
+  }
+  function arrowBody(type) {
+    findFatArrow(cx.stream, cx.state);
+    if (type == "{") return pass(statement);
+    return pass(expression);
+  }
+  function arrowBodyNoComma(type) {
+    findFatArrow(cx.stream, cx.state);
+    if (type == "{") return pass(statement);
+    return pass(expressionNoComma);
   }
   function maybelabel(type) {
     if (type == ":") return cont(poplex, statement);
@@ -319,16 +404,21 @@
       if (value == "get" || value == "set") return cont(getterSetter);
     } else if (type == "number" || type == "string") {
       cx.marked = type + " property";
+    } else if (type == "[") {
+      return cont(expression, expect("]"), afterprop);
     }
-    if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expressionNoComma);
+    if (atomicTypes.hasOwnProperty(type)) return cont(afterprop);
   }
   function getterSetter(type) {
-    if (type == ":") return cont(expression);
-    if (type != "variable") return cont(expect(":"), expression);
+    if (type != "variable") return pass(afterprop);
     cx.marked = "property";
     return cont(functiondef);
   }
-  function commasep(what, end) {
+  function afterprop(type) {
+    if (type == ":") return cont(expressionNoComma);
+    if (type == "(") return pass(functiondef);
+  }
+  function commasep(what, end, info) {
     function proceed(type) {
       if (type == ",") {
         var lex = cx.state.lexical;
@@ -340,7 +430,8 @@
     }
     return function(type) {
       if (type == end) return cont();
-      else return pass(what, proceed);
+      if (info === false) return pass(what, proceed);
+      return pass(pushlex(end, info), what, proceed, poplex);
     };
   }
   function block(type) {
@@ -348,73 +439,121 @@
     return pass(statement, block);
   }
   function maybetype(type) {
-    if (type == ":") return cont(typedef);
-    return pass();
+    if (isTS && type == ":") return cont(typedef);
   }
   function typedef(type) {
     if (type == "variable"){cx.marked = "variable-3"; return cont();}
-    return pass();
   }
-  function vardef1(type, value) {
-    if (type == "variable") {
+  function vardef() {
+    return pass(pattern, maybetype, maybeAssign, vardefCont);
+  }
+  function pattern(type, value) {
+    if (type == "variable") { register(value); return cont(); }
+    if (type == "[") return cont(commasep(pattern, "]"));
+    if (type == "{") return cont(commasep(proppattern, "}"));
+  }
+  function proppattern(type, value) {
+    if (type == "variable" && !cx.stream.match(/^\s*:/, false)) {
       register(value);
-      return isTS ? cont(maybetype, vardef2) : cont(vardef2);
+      return cont(maybeAssign);
     }
-    return pass();
+    if (type == "variable") cx.marked = "property";
+    return cont(expect(":"), pattern, maybeAssign);
   }
-  function vardef2(type, value) {
-    if (value == "=") return cont(expressionNoComma, vardef2);
-    if (type == ",") return cont(vardef1);
+  function maybeAssign(_type, value) {
+    if (value == "=") return cont(expressionNoComma);
   }
-  function maybeelse(indent) {
-    return function(type, value) {
-      if (type == "keyword b" && value == "else") {
-        cx.state.lexical = new JSLexical(indent, 0, "form", null, cx.state.lexical);
-        return cont(statement, poplex);
-      }
-      return pass();
-    };
+  function vardefCont(type) {
+    if (type == ",") return cont(vardef);
+  }
+  function maybeelse(type, value) {
+    if (type == "keyword b" && value == "else") return cont(pushlex("form"), statement, poplex);
+  }
+  function forspec(type) {
+    if (type == "(") return cont(pushlex(")"), forspec1, expect(")"));
   }
   function forspec1(type) {
-    if (type == "var") return cont(vardef1, expect(";"), forspec2);
+    if (type == "var") return cont(vardef, expect(";"), forspec2);
     if (type == ";") return cont(forspec2);
-    if (type == "variable") return cont(formaybein);
+    if (type == "variable") return cont(formaybeinof);
     return pass(expression, expect(";"), forspec2);
   }
-  function formaybein(_type, value) {
-    if (value == "in") return cont(expression);
+  function formaybeinof(_type, value) {
+    if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
     return cont(maybeoperatorComma, forspec2);
   }
   function forspec2(type, value) {
     if (type == ";") return cont(forspec3);
-    if (value == "in") return cont(expression);
+    if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
     return pass(expression, expect(";"), forspec3);
   }
   function forspec3(type) {
     if (type != ")") cont(expression);
   }
   function functiondef(type, value) {
+    if (value == "*") {cx.marked = "keyword"; return cont(functiondef);}
     if (type == "variable") {register(value); return cont(functiondef);}
-    if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, statement, popcontext);
+    if (type == "(") return cont(pushcontext, commasep(funarg, ")"), statement, popcontext);
   }
-  function funarg(type, value) {
-    if (type == "variable") {register(value); return isTS ? cont(maybetype) : cont();}
+  function funarg(type) {
+    if (type == "spread") return cont(funarg);
+    return pass(pattern, maybetype);
+  }
+  function className(type, value) {
+    if (type == "variable") {register(value); return cont(classNameAfter);}
+  }
+  function classNameAfter(_type, value) {
+    if (value == "extends") return cont(expression);
+  }
+  function objlit(type) {
+    if (type == "{") return cont(commasep(objprop, "}"));
+  }
+  function afterModule(type, value) {
+    if (type == "string") return cont(statement);
+    if (type == "variable") { register(value); return cont(maybeFrom); }
+  }
+  function afterExport(_type, value) {
+    if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); }
+    if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); }
+    return pass(statement);
+  }
+  function afterImport(type) {
+    if (type == "string") return cont();
+    return pass(importSpec, maybeFrom);
+  }
+  function importSpec(type, value) {
+    if (type == "{") return cont(commasep(importSpec, "}"));
+    if (type == "variable") register(value);
+    return cont();
+  }
+  function maybeFrom(_type, value) {
+    if (value == "from") { cx.marked = "keyword"; return cont(expression); }
+  }
+  function maybeArrayComprehension(type) {
+    if (type == "for") return pass(comprehension);
+    if (type == ",") return cont(commasep(expressionNoComma, "]", false));
+    return pass(commasep(expressionNoComma, "]", false));
+  }
+  function comprehension(type) {
+    if (type == "for") return cont(forspec, comprehension);
+    if (type == "if") return cont(expression, comprehension);
   }
 
   // Interface
 
   return {
     startState: function(basecolumn) {
-      return {
-        tokenize: jsTokenBase,
-        lastType: null,
+      var state = {
+        tokenize: tokenBase,
+        lastType: "sof",
         cc: [],
         lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
         localVars: parserConfig.localVars,
-        globalVars: parserConfig.globalVars,
         context: parserConfig.localVars && {vars: parserConfig.localVars},
         indented: 0
       };
+      if (parserConfig.globalVars) state.globalVars = parserConfig.globalVars;
+      return state;
     },
 
     token: function(stream, state) {
@@ -422,8 +561,9 @@
         if (!state.lexical.hasOwnProperty("align"))
           state.lexical.align = false;
         state.indented = stream.indentation();
+        findFatArrow(stream, state);
       }
-      if (state.tokenize != jsTokenComment && stream.eatSpace()) return null;
+      if (state.tokenize != tokenComment && stream.eatSpace()) return null;
       var style = state.tokenize(stream, state);
       if (type == "comment") return style;
       state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type;
@@ -431,22 +571,26 @@
     },
 
     indent: function(state, textAfter) {
-      if (state.tokenize == jsTokenComment) return CodeMirror.Pass;
-      if (state.tokenize != jsTokenBase) return 0;
+      if (state.tokenize == tokenComment) return CodeMirror.Pass;
+      if (state.tokenize != tokenBase) return 0;
       var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;
-      if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev;
-      var type = lexical.type, closing = firstChar == type;
-      if (parserConfig.statementIndent != null) {
-        if (type == ")" && lexical.prev && lexical.prev.type == "stat") lexical = lexical.prev;
-        if (lexical.type == "stat") return lexical.indented + parserConfig.statementIndent;
+      // Kludge to prevent 'maybelse' from blocking lexical scope pops
+      for (var i = state.cc.length - 1; i >= 0; --i) {
+        var c = state.cc[i];
+        if (c == poplex) lexical = lexical.prev;
+        else if (c != maybeelse) break;
       }
+      if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev;
+      if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat")
+        lexical = lexical.prev;
+      var type = lexical.type, closing = firstChar == type;
 
-      if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? 4 : 0);
+      if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0);
       else if (type == "form" && firstChar == "{") return lexical.indented;
       else if (type == "form") return lexical.indented + indentUnit;
       else if (type == "stat")
-        return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? indentUnit : 0);
-      else if (lexical.info == "switch" && !closing)
+        return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? statementIndent || indentUnit : 0);
+      else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false)
         return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
       else if (lexical.align) return lexical.column + (closing ? 0 : 1);
       else return lexical.indented + (closing ? 0 : indentUnit);
@@ -456,7 +600,9 @@
     blockCommentStart: jsonMode ? null : "/*",
     blockCommentEnd: jsonMode ? null : "*/",
     lineComment: jsonMode ? null : "//",
+    fold: "brace",
 
+    helperType: jsonMode ? "json" : "javascript",
     jsonMode: jsonMode
   };
 });
diff --git a/Source/devtools/front_end/cm/matchbrackets.js b/Source/devtools/front_end/cm/matchbrackets.js
index 131fe83..9d9b388 100644
--- a/Source/devtools/front_end/cm/matchbrackets.js
+++ b/Source/devtools/front_end/cm/matchbrackets.js
@@ -8,6 +8,7 @@
   function findMatchingBracket(cm, where, strict) {
     var state = cm.state.matchBrackets;
     var maxScanLen = (state && state.maxScanLineLength) || 10000;
+    var maxScanLines = (state && state.maxScanLines) || 100;
 
     var cur = where || cm.getCursor(), line = cm.getLineHandle(cur.line), pos = cur.ch - 1;
     var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];
@@ -32,7 +33,7 @@
         }
       }
     }
-    for (var i = cur.line, found, e = forward ? Math.min(i + 100, cm.lineCount()) : Math.max(-1, i - 100); i != e; i+=d) {
+    for (var i = cur.line, found, e = forward ? Math.min(i + maxScanLines, cm.lineCount()) : Math.max(-1, i - maxScanLines); i != e; i+=d) {
       if (i == cur.line) found = scan(line, i, pos);
       else found = scan(cm.getLineHandle(i), i);
       if (found) break;
diff --git a/Source/devtools/front_end/cm/php.js b/Source/devtools/front_end/cm/php.js
index fa0db5b..3555b8b 100644
--- a/Source/devtools/front_end/cm/php.js
+++ b/Source/devtools/front_end/cm/php.js
@@ -18,10 +18,10 @@
                        "for foreach function global goto if implements interface instanceof namespace " +
                        "new or private protected public static switch throw trait try use var while xor " +
                        "die echo empty exit eval include include_once isset list require require_once return " +
-                       "print unset __halt_compiler self static parent"),
-    blockKeywords: keywords("catch do else elseif for foreach if switch try while"),
-    atoms: keywords("true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__"),
-    builtin: keywords("func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport echo print global static exit array empty eval isset unset die include require include_once require_once"),
+                       "print unset __halt_compiler self static parent yield insteadof finally"),
+    blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"),
+    atoms: keywords("true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__"),
+    builtin: keywords("func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once"),
     multiLineStrings: true,
     hooks: {
       "$": function(stream) {
diff --git a/Source/devtools/front_end/cm/python.js b/Source/devtools/front_end/cm/python.js
index b623972..802c2dd 100644
--- a/Source/devtools/front_end/cm/python.js
+++ b/Source/devtools/front_end/cm/python.js
@@ -36,6 +36,12 @@
     var py3 = {'builtins': ['ascii', 'bytes', 'exec', 'print'],
                'keywords': ['nonlocal', 'False', 'True', 'None']};
 
+    if(parserConf.extra_keywords != undefined){
+        commonkeywords = commonkeywords.concat(parserConf.extra_keywords);
+    }
+    if(parserConf.extra_builtins != undefined){
+        commonBuiltins = commonBuiltins.concat(parserConf.extra_builtins);
+    }
     if (!!parserConf.version && parseInt(parserConf.version, 10) === 3) {
         commonkeywords = commonkeywords.concat(py3.keywords);
         commonBuiltins = commonBuiltins.concat(py3.builtins);
@@ -145,6 +151,9 @@
         }
 
         if (stream.match(identifiers)) {
+            if (state.lastToken == 'def' || state.lastToken == 'class') {
+                return 'def';
+            }
             return 'variable';
         }
 
@@ -252,7 +261,7 @@
         // Handle '.' connected identifiers
         if (current === '.') {
             style = stream.match(identifiers, false) ? null : ERRORCLASS;
-            if (style === null && state.lastToken === 'meta') {
+            if (style === null && state.lastStyle === 'meta') {
                 // Apply 'meta' style to '.' connected identifiers when
                 // appropriate.
                 style = 'meta';
@@ -266,7 +275,7 @@
         }
 
         if ((style === 'variable' || style === 'builtin')
-            && state.lastToken === 'meta') {
+            && state.lastStyle === 'meta') {
             style = 'meta';
         }
 
@@ -307,6 +316,7 @@
             return {
               tokenize: tokenBase,
               scopes: [{offset:basecolumn || 0, type:'py'}],
+              lastStyle: null,
               lastToken: null,
               lambda: false,
               dedent: 0
@@ -316,12 +326,16 @@
         token: function(stream, state) {
             var style = tokenLexer(stream, state);
 
-            state.lastToken = style;
+            state.lastStyle = style;
 
-            if (stream.eol() && stream.lambda) {
-                state.lambda = false;
+            var current = stream.current();
+            if (current && style) {
+                state.lastToken = current;
             }
 
+            if (stream.eol() && state.lambda) {
+                state.lambda = false;
+            }
             return style;
         },
 
@@ -333,9 +347,22 @@
             return state.scopes[0].offset;
         },
 
-        lineComment: "#"
+        lineComment: "#",
+        fold: "indent"
     };
     return external;
 });
 
 CodeMirror.defineMIME("text/x-python", "python");
+
+(function() {
+  "use strict";
+  var words = function(str){return str.split(' ');};
+
+  CodeMirror.defineMIME("text/x-cython", {
+    name: "python",
+    extra_keywords: words("by cdef cimport cpdef ctypedef enum except"+
+                          "extern gil include nogil property public"+
+                          "readonly struct union DEF IF ELIF ELSE")
+  });
+})();
diff --git a/Source/devtools/front_end/cm/xml.js b/Source/devtools/front_end/cm/xml.js
index 53285c8..4f49e07 100644
--- a/Source/devtools/front_end/cm/xml.js
+++ b/Source/devtools/front_end/cm/xml.js
@@ -76,7 +76,7 @@
         tagName = "";
         var c;
         while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c;
-        if (!tagName) return "error";
+        if (!tagName) return "tag error";
         type = isClose ? "closeTag" : "openTag";
         state.tokenize = inTag;
         return "tag";
@@ -109,7 +109,9 @@
       type = "equals";
       return null;
     } else if (ch == "<") {
-      return "error";
+      state.tokenize = inText;
+      var next = state.tokenize(stream, state);
+      return next ? next + " error" : "error";
     } else if (/[\'\"]/.test(ch)) {
       state.tokenize = inAttribute(ch);
       state.stringStartCol = stream.column();
@@ -298,7 +300,9 @@
         }
       }
       state.startOfLine = false;
-      return setStyle || style;
+      if (setStyle)
+        style = setStyle == "error" ? style + " error" : setStyle;
+      return style;
     },
 
     indent: function(state, textAfter, fullLine) {
diff --git a/Source/devtools/front_end/cssNamedFlows.css b/Source/devtools/front_end/cssNamedFlows.css
deleted file mode 100644
index 62b530f..0000000
--- a/Source/devtools/front_end/cssNamedFlows.css
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above
- *    copyright notice, this list of conditions and the following
- *    disclaimer.
- * 2. 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.
- *
- * 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 HOLDER 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.
- */
-
-.css-named-flow-collections-view .split-view-sidebar {
-    overflow-x: hidden;
-}
-
-.css-named-flow-collections-view .tabbed-pane-header {
-    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(236, 236, 236)), to(rgb(217, 217, 217)));
-}
-
-.css-named-flow-collections-view .info {
-    font-style: italic;
-    font-size: 10px;
-    margin-top: -5px;
-    position: absolute;
-    top: 50%;
-    text-align: center;
-    width: 100%;
-}
-
-.css-named-flow-collections-view .split-view-sidebar .sidebar-content {
-    bottom: 0;
-    left: 0;
-    padding: 0;
-    position: absolute;
-    right: 0;
-    top: 23px;
-}
-
-.css-named-flow-collections-view .split-view-sidebar .selection {
-    margin-left: -12px;
-    z-index: 0;
-}
-
-.css-named-flow-collections-view .split-view-contents .title {
-    position: relative;
-}
-
-.css-named-flow-collections-view .split-view-sidebar .named-flow-overflow::before,
-.css-named-flow-collections-view .region-empty:before,
-.css-named-flow-collections-view .region-fit::before,
-.css-named-flow-collections-view .region-overset::before {
-    cursor: default;
-    float: left;
-    height: 10px;
-    margin-top: 1px;
-    opacity: 0.75;
-    position: relative;
-    vertical-align: middle;
-    z-index: 1;
-}
-
-.css-named-flow-collections-view .split-view-sidebar .named-flow-overflow::before {
-    content: url(Images/namedFlowOverflow.png);
-    margin: 2px 3px 0 -13px;
-}
-
-.css-named-flow-collections-view .region-empty::before {
-    content: url(Images/regionEmpty.png);
-}
-
-.css-named-flow-collections-view .region-fit::before {
-    content: url(Images/regionFit.png);
-}
-
-.css-named-flow-collections-view .region-overset::before {
-    content: url(Images/regionOverset.png);
-}
-
-.css-named-flow-collections-view .split-view-contents .named-flow-element {
-    margin: 0 0 0 -24px;
-}
diff --git a/Source/devtools/front_end/dataGrid.css b/Source/devtools/front_end/dataGrid.css
index 066bd39..f3ea722 100644
--- a/Source/devtools/front_end/dataGrid.css
+++ b/Source/devtools/front_end/dataGrid.css
@@ -22,7 +22,7 @@
 
 .data-grid .data-container {
     position: absolute;
-    top: 16px;
+    top: 17px;
     bottom: 0;
     left: 0;
     right: 0;
@@ -45,11 +45,12 @@
 
 .data-grid th {
     text-align: left;
-    background-image: url(Images/glossyHeader.png);
-    background-repeat: repeat-x;
-    border-left: 1px solid rgb(179, 179, 179);
-    border-bottom: 1px solid rgb(179, 179, 179);
-    height: 15px;
+    background-color: rgb(236, 236, 236);
+    border: 1px solid rgb(179, 179, 179);
+    border-top: none;
+    border-right: none;
+    height: 16px;
+    line-height: 16px;
     font-weight: normal;
     vertical-align: middle;
     padding: 0 4px;
@@ -83,8 +84,8 @@
     bottom: 0;
     height: 100%;
     border-top: 0 none transparent;
-    background-image: -webkit-gradient(linear, left top, left bottom, from(white), color-stop(0.5, white), color-stop(0.5, rgb(234, 243, 255)), to(rgb(234, 243, 255)));
-    background-size: 1px 32px;
+    background-image: linear-gradient(to bottom, white, white 50%, rgb(234, 243, 255) 50%, rgb(234, 243, 255));
+    background-size: 128px 32px;
     table-layout: fixed;
 }
 
@@ -103,7 +104,7 @@
 .data-grid td {
     vertical-align: top;
     height: 16px; /* Keep in sync with .data-grid table.data @ background-size */
-    line-height: 13px;
+    line-height: 14px;
     padding: 1px 4px;
     white-space: nowrap;
     overflow: hidden;
@@ -140,18 +141,7 @@
 }
 
 .data-grid th.sortable:active {
-    background-image: url(Images/glossyHeaderPressed.png);
-}
-.data-grid th.sort-ascending,
-.data-grid th.sort-descending {
-    border-left: 1px solid rgb(107, 140, 196);
-    border-bottom: 1px solid rgb(107, 140, 196);
-    background-image: url(Images/glossyHeaderSelected.png);
-    background-repeat: repeat-x;
-}
-
-.data-grid th.sortable.sort-ascending:active, .data-grid th.sortable.sort-descending:active {
-    background-image: url(Images/glossyHeaderSelectedPressed.png);
+    background-color: rgba(0, 0, 0, 0.15);
 }
 
 .data-grid th.sort-ascending > div::after,
@@ -160,7 +150,7 @@
     top: 1px;
     right: 0;
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     opacity: 0.5;
     width: 8px;
     height: 10px;
@@ -171,7 +161,7 @@
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .data-grid th.sort-ascending > div::after,
 .data-grid th.sort-descending > div::after {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -183,22 +173,19 @@
     background-position: -20px -96px;
 }
 
+.data-grid th:hover {
+    background-color: rgba(0, 0, 0, 0.1);
+}
+
 .data-grid button {
     line-height: 18px;
     color: inherit;
 }
 
-body.inactive .data-grid th.sort-ascending,
-body.inactive .data-grid th.sort-descending {
-    background-image: url(Images/glossyHeader.png);
-    border-left: 1px solid rgb(179, 179, 179);
-    border-bottom: 1px solid rgb(179, 179, 179);
-}
-
 .data-grid tr.parent td.disclosure::before {
     -webkit-user-select: none;
     -webkit-mask-image: url(Images/statusbarButtonGlyphs.png);
-    -webkit-mask-size: 320px 120px;
+    -webkit-mask-size: 320px 144px;
     float: left;
     width: 8px;
     margin-right: 2px;
@@ -215,7 +202,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .data-grid tr.parent td.disclosure::before {
-    -webkit-mask-image: url(Images/statusbarButtonGlyphs2x.png);
+    -webkit-mask-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -257,5 +244,4 @@
     bottom: 0;
     width: 5px;
     z-index: 500;
-    cursor: col-resize;
 }
diff --git a/Source/devtools/front_end/dialog.css b/Source/devtools/front_end/dialog.css
index a82792c..ff93919 100644
--- a/Source/devtools/front_end/dialog.css
+++ b/Source/devtools/front_end/dialog.css
@@ -10,7 +10,7 @@
     display: -webkit-flex;
     -webkit-flex-direction: column;
     
-    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#E9E9E9), to(#CFCFCF));
+    background-image: linear-gradient(to bottom, #E9E9E9, #CFCFCF);
 }
 
 .dialog-contents {
@@ -31,7 +31,7 @@
     color: rgb(6, 6, 6);
     border: 1px solid rgb(165, 165, 165);
     background-color: rgb(237, 237, 237);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)));
+    background-image: linear-gradient(to bottom, rgb(252, 252, 252), rgb(223, 223, 223));
     border-radius: 12px;
     -webkit-appearance: none;
 
@@ -41,6 +41,6 @@
 
 .go-to-line-dialog button:active {
     background-color: rgb(215, 215, 215);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 194)), to(rgb(239, 239, 239)));
+    background-image: linear-gradient(to bottom, rgb(194, 194, 194), rgb(239, 239, 239));
 }
 
diff --git a/Source/devtools/front_end/elementsPanel.css b/Source/devtools/front_end/elementsPanel.css
index 32eb6cd..dc44865 100644
--- a/Source/devtools/front_end/elementsPanel.css
+++ b/Source/devtools/front_end/elementsPanel.css
@@ -147,7 +147,6 @@
     padding: 3px;
     margin: 3px;
     min-width: 80px;
-    text-align: center;
     overflow: visible;
 }
 
@@ -205,7 +204,7 @@
     height: 16px;
 }
 
-.styles-section.read-only {
+.styles-section.read-only:not(.computed-style) {
     background-color: rgb(240, 240, 240);
 }
 
@@ -364,7 +363,7 @@
 .styles-section.matched-styles .properties li.parent .expand-element {
     -webkit-user-select: none;
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     margin-right: 2px;
     margin-left: -6px;
     opacity: 0.55;
@@ -375,7 +374,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .styles-section.matched-styles .properties li.parent .expand-element {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -428,6 +427,10 @@
     color: inherit;
 }
 
+.styles-section.computed-style .properties {
+    margin-top: 18px;
+}
+
 .styles-section.computed-style .properties .disabled {
     text-decoration: none;
     opacity: 0.5;
@@ -462,9 +465,9 @@
     border-spacing: 0;
 }
 
-.styles-element-state-pane input {
-    margin: 2px;
-    vertical-align: -2px;
+.styles-element-state-pane label {
+    display: flex;
+    margin: 1px;
 }
 
 .styles-selector {
@@ -475,7 +478,7 @@
     display: none;
 }
 
-.body.show-inherited .styles-section .properties .inherited {
+.styles-section.styles-show-inherited .properties .inherited {
     display: block;
 }
 
@@ -523,7 +526,7 @@
 .event-bars .event-bar .header::before {
     -webkit-user-select: none;
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     opacity: 0.5;
     content: "a";
     color: transparent;
@@ -536,7 +539,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .event-bars .event-bar .header::before {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -615,12 +618,26 @@
     border-bottom: none;
 }
 
+.styles-section.computed-style > .header > .sidebar-pane-subtitle {
+    top: 4px;
+    left: 8px;
+    -webkit-user-select: none;
+}
+
+.styles-section.computed-style > .header > .sidebar-pane-subtitle > input {
+    vertical-align: middle;
+}
+
 .sidebar-pane.composite .sidebar-pane-toolbar > .sidebar-pane-subtitle {
     left: 8px;
 }
 
-.sidebar-pane.composite .styles-section.read-only {
-    background-color: inherit;
+.sidebar-pane > .body > .split-view {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    right: 0;
 }
 
 .panel.elements .sidebar-pane-toolbar > select {
@@ -670,3 +687,7 @@
     width: 0;
     opacity: 0;
 }
+
+li.child-editing .styles-clipboard-only {
+    display: none;
+}
diff --git a/Source/devtools/front_end/externs.js b/Source/devtools/front_end/externs.js
index cfaaed4..6161457 100644
--- a/Source/devtools/front_end/externs.js
+++ b/Source/devtools/front_end/externs.js
@@ -31,10 +31,7 @@
 // WebKit Web Facing API
 
 /** @type {boolean} */
-Event.prototype.isMetaOrCtrlForTest = false;
-/** @param {...*} vararg */
-Event.prototype.initWebKitWheelEvent = function(vararg) {}
-Event.prototype.stopImmediatePropagation = function() {}
+Event.prototype.isMetaOrCtrlForTest;
 
 /**
  * @constructor
@@ -44,36 +41,16 @@
  */
 window.KeyboardEvent = function(eventType, properties) {}
 
-/** @param {?Element} element */
-window.getComputedStyle = function(element) {}
+/**
+ * @type {number}
+ */
+KeyboardEvent.DOM_KEY_LOCATION_NUMPAD;
+
 /** @param {*} message */
 function postMessage(message) {}
 
 /** @type {*} */
-window.testRunner = null;
-
-/**
- * @constructor
- */
-function WebKitMutation(callback)
-{
-    this.type = "";
-    /** @type {Node} */ this.target = null;
-    /** @type {!Array.<!Node>} */ this.addedNodes = [];
-    /** @type {!Array.<!Node>} */ this.removedNodes = [];
-}
-
-/**
- * @constructor
- * @param {function(!Array.<!WebKitMutation>)} callback
- */
-function WebKitMutationObserver(callback) {}
-/** 
- * @param {!Node} container
- * @param {!Object} options
- */
-WebKitMutationObserver.prototype.observe = function(container, options) {}
-WebKitMutationObserver.prototype.disconnect = function() {}
+window.testRunner ;
 
 /**
  * @param {string} eventName
@@ -196,13 +173,6 @@
  */
 Array.prototype.mergeOrdered = function(array, comparator) {}
 
-DOMApplicationCache.prototype.UNCACHED = 0;
-DOMApplicationCache.prototype.IDLE = 1;
-DOMApplicationCache.prototype.CHECKING = 2;
-DOMApplicationCache.prototype.DOWNLOADING = 3;
-DOMApplicationCache.prototype.UPDATEREADY = 4;
-DOMApplicationCache.prototype.OBSOLETE = 5;
-
 // File System API
 /**
  * @constructor
@@ -214,13 +184,6 @@
  */
 DOMFileSystem.prototype.root = null;
 
-/** @type {Node} */
-Range.prototype.startContainer;
-
-// Inspector Backend
-var InspectorBackend = {}
-InspectorBackend.runAfterPendingDispatches = function(message) {}
-
 /** @interface */
 function InspectorFrontendHostAPI() {}
 /** @param {!Function=} callback callback */
@@ -229,8 +192,20 @@
 InspectorFrontendHostAPI.prototype.append = function(url, content, callback) {}
 /** @param {!Function=} callback callback */
 InspectorFrontendHostAPI.prototype.indexPath = function(requestId, fileSystemPath, callback) {}
-/** @param {!Function=} callback callback */
-InspectorFrontendHostAPI.prototype.setWindowBounds = function(x, y, callback) {}
+/** @return {string} */
+InspectorFrontendHostAPI.prototype.getSelectionBackgroundColor = function() {}
+/** @return {string} */
+InspectorFrontendHostAPI.prototype.getSelectionForegroundColor = function() {}
+/** @return {boolean} */
+InspectorFrontendHost.isUnderTest = function() {}
+/**
+ * Requests inspected page to be placed atop of the inspector frontend
+ * with passed insets from the frontend sides, respecting minimum size passed.
+ * @param {{top: number, left: number, right: number, bottom: number}} insets
+ * @param {{width: number, height: number}} minSize
+ */
+InspectorFrontendHostAPI.prototype.setContentsResizingStrategy = function(insets, minSize) {}
+InspectorFrontendHostAPI.prototype.inspectElementCompleted = function() {}
 /** @param {!Function=} callback callback */
 InspectorFrontendHostAPI.prototype.moveWindowBy = function(x, y, callback) {}
 /** @param {!Function=} callback callback */
@@ -247,52 +222,28 @@
 InspectorFrontendHostAPI.prototype.stopIndexing = function(requestId, callback) {}
 
 InspectorFrontendHostAPI.prototype.bringToFront = function() {}
-InspectorFrontendHostAPI.prototype.close = function(url) {}
 InspectorFrontendHostAPI.prototype.closeWindow = function() {}
 InspectorFrontendHostAPI.prototype.copyText = function(text) {}
 InspectorFrontendHostAPI.prototype.inspectedURLChanged = function(url) {}
 InspectorFrontendHostAPI.prototype.isolatedFileSystem = function(fileSystemId, registeredName) {}
 InspectorFrontendHostAPI.prototype.upgradeDraggedFileSystemPermissions = function(DOMFileSystem) {}
-InspectorFrontendHostAPI.prototype.loaded = function() {}
-InspectorFrontendHostAPI.prototype.localizedStringsURL = function() {}
 InspectorFrontendHostAPI.prototype.platform = function() {}
 InspectorFrontendHostAPI.prototype.port = function() {}
 InspectorFrontendHostAPI.prototype.recordActionTaken = function(actionCode) {}
 InspectorFrontendHostAPI.prototype.recordPanelShown = function(panelCode) {}
 InspectorFrontendHostAPI.prototype.recordSettingChanged = function(settingCode) {}
-InspectorFrontendHostAPI.prototype.requestSetDockSide = function(dockSide) {}
 InspectorFrontendHostAPI.prototype.sendMessageToBackend = function(message) {}
 InspectorFrontendHostAPI.prototype.sendMessageToEmbedder = function(message) {}
 InspectorFrontendHostAPI.prototype.setInjectedScriptForOrigin = function(origin, script) {}
+InspectorFrontendHostAPI.prototype.setIsDocked = function(isDocked) {}
 InspectorFrontendHostAPI.prototype.setZoomFactor = function(zoom) {}
-InspectorFrontendHostAPI.prototype.supportsFileSystems = function() {}
+InspectorFrontendHostAPI.prototype.zoomFactor = function() {}
+InspectorFrontendHostAPI.prototype.zoomIn = function() {}
+InspectorFrontendHostAPI.prototype.zoomOut = function() {}
+InspectorFrontendHostAPI.prototype.resetZoom = function() {}
 /** @type {InspectorFrontendHostAPI} */
 var InspectorFrontendHost;
-
-/** @constructor */
-function SourceMapV3()
-{
-    /** @type {number} */ this.version;
-    /** @type {string} */ this.file;
-    /** @type {!Array.<string>} */ this.sources;
-    /** @type {!Array.<!SourceMapV3.Section>} */ this.sections;
-    /** @type {string} */ this.mappings;
-    /** @type {string} */ this.sourceRoot;
-}
-
-/** @constructor */
-SourceMapV3.Section = function()
-{
-    /** @type {SourceMapV3} */ this.map;
-    /** @type {SourceMapV3.Offset} */ this.offset;
-}
-
-/** @constructor */
-SourceMapV3.Offset = function()
-{
-    /** @type {number} */ this.line;
-    /** @type {number} */ this.column;
-}
+InspectorFrontendHost.embedderMessageAck = function(id, error) {}
 
 // FIXME: remove everything below.
 var FormatterWorker = {}
@@ -324,26 +275,10 @@
 
 WebInspector.queryParamsObject = {}
 
-/**
- * @param {!Element} element
- * @return {boolean}
- */
-WebInspector.showAnchorLocation = function(element) {}
-
 WebInspector.Events = {
-    InspectorLoaded: "InspectorLoaded",
-    InspectorClosing: "InspectorClosing"
+    InspectorLoaded: "InspectorLoaded"
 }
 
-/** @type {!WebInspector.SettingsController} */
-WebInspector.settingsController;
-
-
-/**
- * @return {number}
- */
-WebInspector.zoomFactor = function() {}
-
 /** Extensions API */
 
 /** @constructor */
@@ -367,9 +302,6 @@
 
 var extensionServer;
 
-/** @type {string} */
-Location.prototype.origin = "";
-
 /**
  * @constructor
  */
@@ -393,12 +325,6 @@
 }
 
 /**
- * @param {!ExtensionDescriptor} extensionInfo
- * @return {string}
- */
-function buildPlatformExtensionAPI(extensionInfo) {}
-
-/**
  * @type {string} 
  */
 WebInspector.inspectedPageDomain;
@@ -411,6 +337,16 @@
  */
 WebInspector.isInspectingDevice = function() {}
 
+/**
+ * @return {boolean}
+ */
+WebInspector.isWorkerFrontend = function() {}
+
+/**
+ * @return {boolean}
+ */
+WebInspector.isDedicatedWorkerFrontend = function() {}
+
 var InspectorTest = {}
 
 /* jsdifflib API */
@@ -578,15 +514,12 @@
 /** @type {Object.<string, !Object.<string, string>>} */
 CodeMirror.keyMap;
 
+/** @type {{scrollLeft: number, scrollTop: number}} */
+CodeMirror.doc;
+
 WebInspector.suggestReload = function() { }
 WebInspector.reload = function() { }
-
-WebInspector.settings.continuousPainting = /** type {WebInspector.Setting} */ { }
-WebInspector.settings.showDebugBorders = /** type {WebInspector.Setting} */ { }
-WebInspector.settings.showScrollBottleneckRects = /** type {WebInspector.Setting} */ { }
-WebInspector.settings.forceCompositingMode = /** type {WebInspector.Setting} */ { }
-WebInspector.settings.showFPSCounter = /** type {WebInspector.Setting} */ { }
-WebInspector.settings.showPaintRects = /** type {WebInspector.Setting} */ { }
+WebInspector._inspectedTabId;
 
 /** @type {boolean} */
 window.dispatchStandaloneTestRunnerMessages;
diff --git a/Source/devtools/front_end/filter.css b/Source/devtools/front_end/filter.css
index 05d31f9..5c8f790 100644
--- a/Source/devtools/front_end/filter.css
+++ b/Source/devtools/front_end/filter.css
@@ -30,7 +30,6 @@
 
 .filter-text-filter {
     display: flex;
-    margin-top: 1px;
     margin-left: 1px;
     margin-right: 1px;
     flex: 0 0 100px;
@@ -40,16 +39,20 @@
     flex: 0 0 155px;
 }
 
+.filter-text-filter label {
+    margin: auto 0;
+}
+
 .filter-bitset-filter {
-    line-height: 19px;
-    padding-right: 10px !important;
+    padding: 0 10px !important;
     overflow: hidden;
+    display: flex !important;
 }
 
 .filter-bitset-filter li {
     display: inline-block;
-    margin: 2px;
-    padding: 0px 6px;
+    margin: auto 2px;
+    padding: 4px 6px 3px 6px;
     background: transparent;
     text-shadow: rgba(255, 255, 255, 0.5) 0 1px 0;
     border-radius: 8px;
@@ -59,7 +62,7 @@
     background-color: #ccc;
     height: 16px;
     width: 1px;
-    vertical-align: middle;
+    margin: auto 2px;
     display: inline-block;
 }
 
@@ -70,10 +73,6 @@
     text-shadow: rgba(0, 0, 0, 0.4) 0 1px 0;
 }
 
-.filter-bitset-filter li.all {
-    margin: 1px 8px;
-}
-
 .filter-bitset-filter li:hover {
     background: rgba(0, 0, 0, 0.2);
 }
@@ -93,12 +92,17 @@
 }
 
 .filter-checkbox-filter {
-    line-height: 22px;
     padding-left: 4px;
     padding-right: 2px;
     white-space: nowrap;
     text-overflow: ellipsis;
     overflow: hidden;
+    display: flex;
+}
+
+.filter-checkbox-filter > label {
+    display: flex;
+    margin: auto 0;
 }
 
 .filter-text-invalid {
@@ -108,14 +112,14 @@
 .filter-checkbox-filter .checkbox-filter-checkbox {
     width: 10px;
     height: 10px;
-    margin: 0 3px 0 3px;
+    margin: auto 3px;
     padding: 0;
     border-radius: 2px;
     border: solid 1px;
     display: inline-block;
     overflow: visible;
     opacity: 0.8;
-    vertical-align: -1px;
+    flex-shrink: 0;
 }
 
 
@@ -129,7 +133,7 @@
 
 .filter-checkbox-filter .checkbox-filter-checkbox-checked {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     background-position: -129px -110px;
 }
 
diff --git a/Source/devtools/front_end/flameChart.css b/Source/devtools/front_end/flameChart.css
index bc35be6..3a490f0 100644
--- a/Source/devtools/front_end/flameChart.css
+++ b/Source/devtools/front_end/flameChart.css
@@ -7,17 +7,17 @@
 }
 
 .chart-container {
-    overflow: hidden;
-    position: absolute;
-    top: 80px;
-    width: 100%;
-    bottom: 0;
+    flex: auto;
 }
 
 #flame-chart-overview-grid .resources-dividers-label-bar {
     pointer-events: auto;
 }
 
+.flame-chart-overview-pane {
+    flex: 0 0 80px !important;
+}
+
 #flame-chart-overview-container {
     border-bottom: 1px solid rgba(0, 0, 0, 0.3);
 }
diff --git a/Source/devtools/front_end/heapProfiler.css b/Source/devtools/front_end/heapProfiler.css
index c0fba8a..a785ac2 100644
--- a/Source/devtools/front_end/heapProfiler.css
+++ b/Source/devtools/front_end/heapProfiler.css
@@ -63,16 +63,8 @@
     bottom: 0;
 }
 
-.heap-snapshot-view.visible {
-    display: block;
-}
-
-.heap-snapshot-view .view {
-    display: none;
-}
-
-.heap-snapshot-view .view.visible {
-    display: block;
+.heap-snapshot-view .data-grid {
+    border: none;
 }
 
 .heap-snapshot-view .data-grid tr:empty {
@@ -80,8 +72,8 @@
     visibility: hidden;
 }
 
-.heap-snapshot-view .data-grid {
-    border: none;
+.heap-snapshot-view .data-grid tr.selected span {
+    color: inherit;
 }
 
 .heap-snapshot-view .data-grid td.count-column {
@@ -148,95 +140,31 @@
     white-space: nowrap;
 }
 
-.heap-snapshot-view .console-formatted-id {
+.heap-snapshot-view tr:not(.selected) .console-formatted-id {
     color: grey;
 }
 
-.heap-snapshot-view .data-grid tr.selected * {
-    color: inherit;
-}
-
-.heap-snapshot-view .data-grid:focus tr.selected * {
-    color: white;
-}
-
 .heap-snapshot-view .delimiter {
     height: 24px;
     background-color: #d6dde5;
 }
 
 .heap-snapshot-view .data-grid {
-    position: absolute;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
+    flex: auto;
 }
 
-.heap-snapshot-view .views-container {
-    position: absolute;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 173px;
-}
-
-.reserve-80px-at-top {
-    top: 80px !important;
-}
-
-.heap-snapshot-view .views-container .view {
-    position: absolute;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-}
-
-.heap-snapshot-view .retaining-paths-view {
-    height: 150px;
-    position: absolute;
-    bottom: 0;
-    left: 0;
-    right: 0;
-}
-
-.heap-snapshot-view .class-view-grid {
-    top: 22px;
-}
-
-.heap-snapshot-view .class-view-toolbar {
-    height: 22px;
-    background-color: #DDD;
-    display: block;
-    position: absolute;
-    left: 0;
-    right: 0;
-    top: 0;
-}
-
-.heap-snapshot-view .class-view-toolbar input.class-name-filter {
-    width: 200px;
-    height: 18px;
-    font-size: 11px;
-    padding: 2px;
-    margin: 2px 10px;
-    background-color: white;
-    border: solid 1px #BBB;
+.heap-snapshot-view .heap-tracking-overview {
+    flex: 0 0 80px;
+    height: 80px;
 }
 
 .heap-snapshot-view .retainers-view-header {
-    background-image: url(Images/statusbarResizerVertical.png), -webkit-linear-gradient(rgb(253,253,253), rgb(230,230,230) 75%, rgb(230,230,230));
-    border-top: 1px solid rgb(202, 202, 202);
+    background-image: url(Images/statusbarResizerVertical.png);
+    background-color: rgb(236, 236, 236);
+    border-bottom: 1px solid rgb(179, 179, 179);
     background-repeat: no-repeat;
     background-position: right center, center;
-    cursor: row-resize;
-    height: 23px;
-    display: block;
-    position: absolute;
-    left: 0;
-    right: 0;
-    bottom: 150px;
+    height: 21px;
 }
 
 .heap-snapshot-view .retainers-view-header .title > span {
@@ -247,6 +175,10 @@
     margin-right: 8px;
 }
 
+.heap-snapshot-view .retainers-view-header * {
+    pointer-events: none;
+}
+
 .heap-snapshot-view tr:not(.selected) td.object-column span.highlight {
     background-color: rgb(255, 255, 200);
 }
@@ -255,10 +187,6 @@
     color: gray;
 }
 
-.heap-snapshot-help-status-bar-item .glyph {
-    -webkit-mask-position: -160px -2px;
-}
-
 table.heap-snapshot-help {
     border-spacing: 12px 2px;
 }
diff --git a/Source/devtools/front_end/helpScreen.css b/Source/devtools/front_end/helpScreen.css
index 925f063..1e797c6 100644
--- a/Source/devtools/front_end/helpScreen.css
+++ b/Source/devtools/front_end/helpScreen.css
@@ -1,5 +1,5 @@
 .help-window-outer {
-    position: absolute;
+    position: absolute !important;
     top: 0;
     left: 0;
     right: 0;
@@ -40,6 +40,7 @@
     overflow-x: hidden;
     margin: 8px;
     padding: 0 4px;
+    flex: auto;
 }
 
 .help-footnote {
@@ -58,18 +59,18 @@
 }
 
 .help-window-main .help-container-wrapper::-webkit-scrollbar-thumb:vertical {
-    background: -webkit-gradient(linear, left top, right top, from(rgb(128, 128, 128)), to(rgb(128, 128, 128)), color-stop(40%, rgb(96, 96, 96)));
+    background: linear-gradient(to right, rgb(128, 128, 128), rgb(96, 96, 96) 40%, rgb(128, 128, 128));
     border-radius: 5px;
     min-height: 20px;
 }
 
 .help-window-main .help-container-wrapper::-webkit-scrollbar-thumb:vertical:hover,
 .help-window-main .help-container-wrapper::-webkit-scrollbar-thumb:vertical:active {
-    background: -webkit-gradient(linear, left top, right top, from(rgb(176, 176, 176)), to(rgb(176, 176, 176)), color-stop(40%, rgb(144, 144, 144)));
+    background: linear-gradient(to right, rgb(176, 176, 176), rgb(144, 144, 144) 40%, rgb(176, 176, 176));
 }
 
 .help-window-main .help-container-wrapper::-webkit-scrollbar-track:vertical {
-    background: -webkit-gradient(linear, left top, right top, from(rgb(10, 10, 10)), to(rgb(32, 32, 32)), color-stop(25%, rgb(32, 32, 32)));
+    background: linear-gradient(to right, rgb(10, 10, 10), rgb(32, 32, 32) 25%, rgb(32, 32, 32));
     border-radius: 5px;
 }
 
@@ -105,6 +106,10 @@
     -webkit-column-width: 361px;
 }
 
+.help-no-columns {
+    -webkit-column-width: initial !important;
+}
+
 .help-block {
     display: block;
     padding-bottom: 9px;
@@ -192,6 +197,7 @@
 
 .settings-tab label {
     padding-right: 4px;
+    display: flex;
 }
 
 #general-tab-content .help-block fieldset legend {
@@ -224,22 +230,7 @@
 }
 
 .help-content input[type=checkbox] {
-    height: 13px;
-    width: 13px;
-    margin: 0 7px 0 0;
-    vertical-align: -2px;
-}
-
-body.platform-mac .help-content input[type=checkbox] {
-    vertical-align: -1px;
-}
-
-.help-content input[type=radio] {
-    vertical-align: -2px;
-}
-
-body.platform-mac .help-content input[type=radio] {
-    vertical-align: -1px;
+    margin-right: 7px;
 }
 
 .help-content select {
@@ -295,8 +286,7 @@
     border: none transparent;
     height: auto;
     width: 110px;
-    position: relative;
-    top: 14px;
+    margin-top: 14px;
     flex: auto;
 }
 
@@ -457,7 +447,7 @@
 }
 
 .settings-tab-text-button {
-    background-image: -webkit-linear-gradient(hsl(0, 0%, 93%), hsl(0, 0%, 93%) 38%, hsl(0, 0%, 87%));
+    background-image: linear-gradient(hsl(0, 0%, 93%), hsl(0, 0%, 93%) 38%, hsl(0, 0%, 87%));
     border: 1px solid hsla(0, 0%, 0%, 0.25);
     border-radius: 2px;
     box-shadow: 0 1px 0 hsla(0, 0%, 0%, 0.08), inset 0 1px 2px hsla(0, 100%, 100%, 0.75);
@@ -471,21 +461,21 @@
 }
 
 .settings-tab-text-button:disabled {
-    background-image: -webkit-linear-gradient(#f1f1f1, #f1f1f1 38%, #e6e6e6);
+    background-image: linear-gradient(#f1f1f1, #f1f1f1 38%, #e6e6e6);
     border-color: rgba(80, 80, 80, 0.2);
     box-shadow: 0 1px 0 rgba(80, 80, 80, 0.08), inset 0 1px 2px rgba(255, 255, 255, 0.75);
     color: #aaa;
 }
 
 .settings-tab-text-button:not(:disabled):hover {
-    background-image: -webkit-linear-gradient(hsl(0, 0%, 94%), hsl(0, 0%, 94%) 38%, hsl(0, 0%, 88%));
+    background-image: linear-gradient(hsl(0, 0%, 94%), hsl(0, 0%, 94%) 38%, hsl(0, 0%, 88%));
     border-color: hsla(0, 0%, 0%, 0.3);
     box-shadow: 0 1px 0 hsla(0, 0%, 0%, 0.12), inset 0 1px 2px hsla(0, 100%, 100%, 0.95);
     color: hsl(0, 0%, 0%);
 }
 
 .settings-tab-text-button:not(:disabled):active {
-    background-image: -webkit-linear-gradient(hsl(0, 0%, 91%), hsl(0, 0%, 91%) 38%, hsl(0, 0%, 84%));
+    background-image: linear-gradient(hsl(0, 0%, 91%), hsl(0, 0%, 91%) 38%, hsl(0, 0%, 84%));
     box-shadow: none;
     text-shadow: none;
 }
@@ -654,7 +644,6 @@
     flex: 1 1 auto;
     padding: 0 17px;
     overflow: auto;
-    margin-bottom: 10px;
 }
 
 .settings-dialog .block-header {
@@ -685,3 +674,7 @@
     opacity: 0.6;
     padding-left: 19px;
 }
+
+.edit-file-system-dialog .section {
+    min-width: 400px;
+}
diff --git a/Source/devtools/front_end/inspector.css b/Source/devtools/front_end/inspector.css
index 8d12b6f..f60ece2 100644
--- a/Source/devtools/front_end/inspector.css
+++ b/Source/devtools/front_end/inspector.css
@@ -32,6 +32,13 @@
     outline: auto 5px -webkit-focus-ring-color;
 }
 
+input[type="checkbox"] {
+    height: 13px;
+    width: 13px;
+    margin: auto 3px;
+    flex-shrink: 0;
+}
+
 .fill {
     position: absolute;
     top: 0;
@@ -40,14 +47,27 @@
     bottom: 0;
 }
 
+.view {
+    display: flex;
+    flex-direction: column;
+    position: relative;
+    flex: auto;
+}
+
 .hbox {
-    display: flex !important;
-    flex-direction: row;
+    display: flex;
+    flex-direction: row !important;
+    position: relative;
 }
 
 .vbox {
-    display: flex !important;
-    flex-direction: column;
+    display: flex;
+    flex-direction: column !important;
+    position: relative;
+}
+
+.flex-auto {
+    flex: auto;
 }
 
 .inline-block {
@@ -66,7 +86,7 @@
 }
 
 .toolbar-background {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(191, 191, 191)), to(rgb(151, 151, 151)));
+    background-image: linear-gradient(to bottom, rgb(191, 191, 191), rgb(151, 151, 151));
     padding: 1px 0 0 1px;
     border-bottom: 1px solid rgb(80, 80, 80);
     background-origin: padding-box;
@@ -112,56 +132,54 @@
 }
 
 body.inactive .toolbar-background {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(233, 233, 233)), to(rgb(207, 207, 207)));
+    background-image: linear-gradient(to bottom, rgb(233, 233, 233), rgb(207, 207, 207));
     border-bottom: 1px solid rgb(64%, 64%, 64%);
 }
 
 body.dock-to-bottom .toolbar-background {
     padding-top: 0;
-    border-top: 1px solid rgb(100, 100, 100);
+}
+
+body.dock-to-bottom .toolbar-background .tabbed-pane-header {
+    cursor: ns-resize;
+}
+
+body.dock-to-bottom .toolbar-background .tabbed-pane-header .tabbed-pane-header-tabs {
     cursor: default;
 }
 
-body.dock-to-bottom.platform-mac .toolbar-background {
-    border-top-color: white;
-}
-
-body.dock-to-bottom.inactive .toolbar-background {
-    border-top: 1px solid rgb(64%, 64%, 64%);
-}
-
 body.platform-windows .toolbar-background,
 body.platform-windows.inactive .toolbar-background {
     background-image: none;
 }
 
 body.undocked.platform-mac-leopard .toolbar-background {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(175, 175, 175)), to(rgb(151, 151, 151))) !important;
+    background-image: linear-gradient(to bottom, rgb(175, 175, 175), rgb(151, 151, 151)) !important;
     color: #333 !important;
 }
 
 body.undocked.platform-mac-leopard.inactive .toolbar-background {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(221, 221, 221)), to(rgb(207, 207, 207))) !important;
+    background-image: linear-gradient(to bottom, rgb(221, 221, 221), rgb(207, 207, 207)) !important;
     color: #555 !important;
 }
 
 body.undocked.platform-mac-snowleopard .toolbar-background {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(189, 189, 189)), to(rgb(167, 167, 167))) !important;
+    background-image: linear-gradient(to bottom, rgb(189, 189, 189), rgb(167, 167, 167)) !important;
     color: #333 !important;
 }
 
 body.undocked.platform-mac-snowleopard.inactive .toolbar-background {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(228, 228, 228)), to(rgb(216, 216, 216))) !important;
+    background-image: linear-gradient(to bottom, rgb(228, 228, 228), rgb(216, 216, 216)) !important;
     color: #555 !important;
 }
 
-body.undocked.platform-mac-mountain-lion .toolbar-background {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(208, 208, 208)), to(rgb(200, 200, 200))) !important;
+body.undocked.platform-mac .toolbar-background {
+    background-image: linear-gradient(to bottom, rgb(208, 208, 208), rgb(200, 200, 200)) !important;
     color: #333 !important;
 }
 
-body.undocked.platform-mac-mountain-lion.inactive .toolbar-background {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(238, 238, 238)), to(rgb(224, 224, 224))) !important;
+body.undocked.platform-mac.inactive .toolbar-background {
+    background-image: linear-gradient(to bottom, rgb(238, 238, 238), rgb(224, 224, 224)) !important;
     color: #555 !important;
 }
 
@@ -208,18 +226,18 @@
 }
 
 .scrollable-content::-webkit-scrollbar-thumb:vertical {
-    background: -webkit-gradient(linear, left top, right top, from(rgb(192, 192, 192)), to(rgb(192, 192, 192)), color-stop(40%, rgb(214, 214, 214)));
+    background: linear-gradient(to right, rgb(192, 192, 192), rgb(214, 214, 214) 40%, rgb(192, 192, 192));
     border-radius: 5px;
     min-height: 20px;
 }
 
 .scrollable-content::-webkit-scrollbar-thumb:vertical:hover,
 .scrollable-content::-webkit-scrollbar-thumb:vertical:active {
-    background: -webkit-gradient(linear, left top, right top, from(rgb(230, 230, 230)), to(rgb(230, 230, 230)), color-stop(40%, rgb(252, 252, 252)));
+    background: linear-gradient(to right, rgb(230, 230, 230), rgb(252, 252, 252) 40%, rgb(230, 230, 230));
 }
 
 .scrollable-content::-webkit-scrollbar-track:vertical {
-    background: -webkit-gradient(linear, left top, right top, from(rgb(128, 128, 128)), to(rgb(164, 164, 164)), color-stop(25%, rgb(164, 164, 164)));
+    background: linear-gradient(to right, rgb(128, 128, 128), rgb(164, 164, 164) 25%, rgb(164, 164, 164));
     border-radius: 5px;
 }
 
@@ -243,9 +261,13 @@
     padding: 0 5px 0 0;
 }
 
+.toolbar-search td > span {
+    display: flex;
+}
+
 .toolbar-search-navigation-controls {
     vertical-align: top;
-    background-image: -webkit-linear-gradient(rgb(228, 228, 228), rgb(206, 206, 206));
+    background-image: linear-gradient(rgb(228, 228, 228), rgb(206, 206, 206));
 }
 
 .toolbar-search-navigation {
@@ -263,27 +285,20 @@
 }
 
 .toolbar-search label {
-    vertical-align: bottom;
-}
-
-.toolbar-search input[type="checkbox"] {
-    position: relative;
-    margin-top: -1px;
-    margin-left: 15px;
-    top: 2px;
+    margin: auto 0;
 }
 
 .toolbar-search button {
     border: 1px solid rgb(163, 163, 163);
     border-radius: 8px;
     margin: 0;
-    background-image: -webkit-linear-gradient(rgb(241, 241, 241), rgb(220, 220, 220));
+    background-image: linear-gradient(rgb(241, 241, 241), rgb(220, 220, 220));
     width: 100%;
     height: 20px;
 }
 
 .toolbar-search button:active {
-    background-image: -webkit-linear-gradient(rgb(185, 185, 185), rgb(156, 156, 156));
+    background-image: linear-gradient(rgb(185, 185, 185), rgb(156, 156, 156));
 }
 
 .toolbar-search-control {
@@ -301,6 +316,7 @@
     height: 20px;
     border-radius: 2px;
     width: 100%;
+    margin: auto 0;
 }
 
 .toolbar-search-navigation.enabled:active {
@@ -313,7 +329,7 @@
 }
 
 .toolbar-search-navigation.toolbar-search-navigation-prev.enabled:active {
-    background-image: url(Images/searchPrev.png), -webkit-linear-gradient(rgb(168, 168, 168), rgb(116, 116, 116));
+    background-image: url(Images/searchPrev.png), linear-gradient(rgb(168, 168, 168), rgb(116, 116, 116));
 }
 
 .toolbar-search-navigation.toolbar-search-navigation-next {
@@ -322,7 +338,7 @@
 }
 
 .toolbar-search-navigation.toolbar-search-navigation-next.enabled:active {
-    background-image: url(Images/searchNext.png), -webkit-linear-gradient(rgb(168, 168, 168), rgb(116, 116, 116));
+    background-image: url(Images/searchNext.png), linear-gradient(rgb(168, 168, 168), rgb(116, 116, 116));
 }
 
 .search-results-matches {
@@ -337,43 +353,43 @@
 .close-button,
 .close-button-gray {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     display: inline-block;
 }
 
 .close-button {
     width: 14px;
     height: 14px;
-    background-position: -128px -216px;
+    background-position: -128px -96px;
 }
 
 .close-button-gray {
     width: 13px;
     height: 13px;
-    background-position: -175px -216px;
+    background-position: -175px -96px;
 }
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .close-button,
 .close-button-gray {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
 .close-button:hover {
-    background-position: -96px -216px;
+    background-position: -96px -96px;
 }
 
 .close-button:active {
-    background-position: -111px -216px;
+    background-position: -111px -96px;
 }
 
 .close-button-gray:hover {
-    background-position: -143px -216px;
+    background-position: -143px -96px;
 }
 
 .close-button-gray:active {
-    background-position: -160px -216px;
+    background-position: -160px -96px;
 }
 
 body.undocked .toolbar-item .close-button {
@@ -392,14 +408,16 @@
     position: relative;
 }
 
-.panel-status-bar label {
-    margin: 2px 20px 0 0;
+.panel-status-bar > div {
+    margin: auto 0;
 }
 
-.panel-status-bar label > input {
-    height: 13px;
-    width: 13px;
-    vertical-align: -2px;
+.panel-status-bar label {
+    margin: auto 0;
+    margin-right: 20px;
+    display: flex;
+    white-space: nowrap;
+    overflow: hidden;
 }
 
 .status-bar {
@@ -414,14 +432,12 @@
 }
 
 .status-bar > div {
-    display: inline-block;
-    vertical-align: top;
+    display: inline-flex;
     overflow: visible;
 }
 
 .status-bar-item {
     display: inline-block;
-    cursor: default;
     height: 22px;
     padding: 0;
     margin-left: -1px;
@@ -435,7 +451,10 @@
 .status-bar-text {
     padding-left: 5px;
     padding-right: 15px;
-    padding-top: 3px;
+    height: auto;
+    margin: auto 0;
+    white-space: nowrap;
+    overflow: hidden;
 }
 
 #drawer-view-anchor {
@@ -468,13 +487,13 @@
     background-color: rgba(0, 0, 0, 0.75);
     -webkit-mask-image: url(Images/statusbarButtonGlyphs.png);
     -webkit-mask-position: -288px -48px;
-    -webkit-mask-size: 320px 120px;
+    -webkit-mask-size: 320px 144px;
     z-index: 1;
 }
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .long-click-glyph {
-    -webkit-mask-image: url(Images/statusbarButtonGlyphs2x.png);
+    -webkit-mask-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -518,29 +537,42 @@
 }
 
 .status-bar-select-container {
-    display: inline-block;
+    display: inline-flex;
+    flex-shrink: 0;
 }
 
 .status-bar-select-arrow {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     opacity: 0.7;
-    width: 10px;
-    height: 10px;
-    background-position: -20px -96px;
+    width: 12px;
+    height: 12px;
+    background-position: -18px -96px;
     display: inline-block;
     pointer-events: none;
-    position: relative;
-    top: 3px;
-    left: -3px;
+    margin: auto 0;
 }
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .status-bar-select-arrow {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
+input.status-bar-item {
+    width: 200px;
+    height: 20px;
+    padding: 3px;
+    margin: 1px 3px;
+    background-color: white;
+    border: solid 1px rgb(236, 236, 236);
+}
+
+input.status-bar-item:focus,
+input.status-bar-item:hover {
+    border: solid 1px rgb(202, 202, 202);
+}
+
 select.status-bar-item {
     min-width: 48px;
     color: rgb(48, 48, 48);
@@ -551,16 +583,18 @@
     padding: 0 15px 0 5px;
     margin-right: -10px;
     position: relative;
-    line-height: 20px;
+    line-height: 22px;
 }
 
 .status-bar-item.checkbox {
-    margin: 2px 0 0 0;
+    margin: auto 0;
+    height: auto;
+    display: flex;
 }
 
 .status-bar-item > .glyph {
     -webkit-mask-image: url(Images/statusbarButtonGlyphs.png);
-    -webkit-mask-size: 320px 120px;
+    -webkit-mask-size: 320px 144px;
     opacity: 0.8;
 }
 
@@ -570,11 +604,11 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .status-bar-item > .glyph {
-    -webkit-mask-image: url(Images/statusbarButtonGlyphs2x.png);
+    -webkit-mask-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
-button.status-bar-item.dock-status-bar-item.toggled-undock .glyph {
+button.status-bar-item.dock-status-bar-item.toggled-undocked .glyph {
     -webkit-mask-position: 0 -48px;
 }
 
@@ -586,6 +620,10 @@
     -webkit-mask-position: -256px -48px;
 }
 
+button.status-bar-item.dock-status-bar-item.toggled-left .glyph {
+    -webkit-mask-position: -32px -120px;
+}
+
 body.undocked .alternate-status-bar-buttons-bar {
     margin-left: 1px;
 }
@@ -674,10 +712,18 @@
     -webkit-mask-position: -64px -24px;
 }
 
-.screencast-status-bar-item .glyph {
+.screencast-status-bar-item.toggled-left .glyph {
     -webkit-mask-position: -256px -96px;
 }
 
+.screencast-status-bar-item.toggled-top .glyph {
+    -webkit-mask-position: -288px -96px;
+}
+
+.screencast-status-bar-item.toggled-disabled .glyph {
+    -webkit-mask-position: 0px -120px;
+}
+
 .clear-status-bar-item .glyph {
     -webkit-mask-position: -64px 0;
 }
@@ -688,7 +734,7 @@
 .green-ball,
 .orange-ball {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     width: 10px;
     height: 10px;
     display: inline-block;
@@ -700,7 +746,7 @@
 .red-ball,
 .green-ball,
 .orange-ball {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -747,61 +793,14 @@
     margin-left: 6px;
 }
 
-.drawer {
-    display: none;
-    flex: 0 0 200px;
-    position: relative;
-    background-color: white;
-    z-index: 1;
-}
-
-#drawer-contents {
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    display: flex;
-}
-
 #drawer-contents > .tabbed-pane > .tabbed-pane-header {
     background-color: rgb(236, 236, 236);
-    cursor: ns-resize;
-    border-top: 1px solid rgb(124, 124, 124);
-    border-bottom: 1px solid rgb(203, 203, 203);
-}
-
-body.inactive #drawer-contents .tabbed-pane-header {
-    border-top: 1px solid rgb(64%, 64%, 64%);
 }
 
 #drawer-contents .tabbed-pane-header .tabbed-pane-header-tab {
     cursor: default;
 }
 
-.drawer-resizer {
-    position: absolute;
-    right: 0;
-    top: 8px;
-    content: url(Images/statusbarResizerVertical.png);
-    height: 8px;
-    pointer-events: none;
-}
-
-#drawer-footer {
-    position: absolute;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    font-size: 11px;
-    height: 23px;
-    background-color: rgb(236, 236, 236);
-}
-
-body.drawer-visible .drawer {
-    display: block;
-}
-
 body.platform-mac .monospace,
 body.platform-mac .source-code {
     font-size: 11px !important;
@@ -834,7 +833,8 @@
     background-color: rgb(236, 236, 236);
 }
 
-.console-status-bar {
+.console-status-bar,
+.console-filters-header {
     flex: 0 0 23px;
     overflow: hidden;
 }
@@ -902,7 +902,7 @@
     margin-top: -6px;
     -webkit-user-select: none;
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
 }
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
@@ -910,7 +910,7 @@
 .console-user-command::before,
 #console-prompt::before,
 .console-group-title::before {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -918,6 +918,10 @@
     top: 0;
 }
 
+.console-message .outline-disclosure .stacktrace-entry:hover {
+    background-color: rgba(0, 0, 0, 0.05);
+}
+
 .console-message .bubble {
     display: inline-block;
     height: 14px;
@@ -969,7 +973,7 @@
 .console-group-title::before {
     -webkit-user-select: none;
     -webkit-mask-image: url(Images/statusbarButtonGlyphs.png);
-    -webkit-mask-size: 320px 120px;
+    -webkit-mask-size: 320px 144px;
     float: left;
     width: 8px;
     content: "a";
@@ -981,7 +985,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .console-group-title::before {
-    -webkit-mask-image: url(Images/statusbarButtonGlyphs2x.png);
+    -webkit-mask-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -1031,7 +1035,7 @@
 .console-debug-level::before,
 .console-info-level::before {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     width: 10px;
     height: 10px;
 }
@@ -1041,7 +1045,7 @@
 .console-warning-level::before,
 .console-debug-level::before,
 .console-info-level::before {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -1071,11 +1075,17 @@
     color: rgb(0, 128, 255);
 }
 
+#console-messages .link {
+    text-decoration: underline;
+}
+
+#console-messages .link,
 #console-messages a {
     color: rgb(33%, 33%, 33%);
     cursor: pointer;
 }
 
+#console-messages .link:hover,
 #console-messages a:hover {
     color: rgb(15%, 15%, 15%);
 }
@@ -1151,7 +1161,7 @@
     position: relative;
     display: inline-block;
     vertical-align: top;
-    color: #222;
+    color: inherit;
 }
 
 .console-formatted-node:hover {
@@ -1368,7 +1378,7 @@
 .outline-disclosure li.parent::before {
     -webkit-user-select: none;
     -webkit-mask-image: url(Images/statusbarButtonGlyphs.png);
-    -webkit-mask-size: 320px 120px;
+    -webkit-mask-size: 320px 144px;
     content: "a";
     color: transparent;
     text-shadow: none;
@@ -1380,7 +1390,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .outline-disclosure li.parent::before {
-    -webkit-mask-image: url(Images/statusbarButtonGlyphs2x.png);
+    -webkit-mask-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -1409,24 +1419,20 @@
     white-space: nowrap;
 }
 
-.placard.grouped {
-    padding-left: 36px;
-}
-
 .placard:nth-of-type(2n) {
     background-color: rgb(234, 243, 255);
 }
 
 .placard.selected {
     border-top: 1px solid rgb(172, 172, 172);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(182, 182, 182)), to(rgb(162, 162, 162)));
+    background-image: linear-gradient(to bottom, rgb(182, 182, 182), rgb(162, 162, 162));
     background-origin: padding-box;
     background-clip: padding-box;
 }
 
 :focus .placard.selected {
     border-top: 1px solid rgb(70, 103, 215);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(92, 147, 213)), to(rgb(56, 121, 217)));
+    background-image: linear-gradient(to bottom, rgb(92, 147, 213), rgb(56, 121, 217));
 }
 
 .placard .title {
@@ -1457,6 +1463,17 @@
     color: inherit;
 }
 
+.placard-label {
+    text-align: center;
+}
+
+.placard-label .title,
+.placard-label .subtitle {
+    font-style: italic;
+    font-weight: bold;
+    color: #999;
+}
+
 .section {
     position: relative;
     margin-top: 1px;
@@ -1480,7 +1497,7 @@
 .section > .header::before {
     -webkit-user-select: none;
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     opacity: 0.5;
     content: "a";
     color: transparent;
@@ -1493,7 +1510,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .section > .header::before {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -1588,7 +1605,7 @@
 .properties-tree li.parent::before {
     -webkit-user-select: none;
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     opacity: 0.5;
     content: "a";
     width: 8px;
@@ -1608,7 +1625,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .properties-tree li.parent::before {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -1678,6 +1695,10 @@
     display: none !important;
 }
 
+.sidebar-tabbed-pane .watch-expressions {
+    margin-top: 17px;
+}
+
 .properties-tree.watch-expressions {
     padding-left: 0 !important;
 }
@@ -1729,11 +1750,6 @@
     display: none;
 }
 
-.sidebar-tabbed-pane .watch-expressions li:first-child .delete-button {
-    right: 55px;
-    top: 3px;
-}
-
 .section .properties li.hovered .delete-button {
     display: inline;
 }
@@ -1804,14 +1820,14 @@
     background-color: transparent;
     border: 1px solid rgb(165, 165, 165);
     background-color: rgb(237, 237, 237);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)));
+    background-image: linear-gradient(to bottom, rgb(252, 252, 252), rgb(223, 223, 223));
     border-radius: 12px;
     -webkit-appearance: none;
 }
 
 .pane-title-button:active {
     background-color: rgb(215, 215, 215);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 194)), to(rgb(239, 239, 239)));
+    background-image: linear-gradient(to bottom, rgb(194, 194, 194), rgb(239, 239, 239));
 }
 
 button.show-all-nodes {
@@ -1823,7 +1839,7 @@
     background-color: transparent;
     border: 1px solid rgb(165, 165, 165);
     background-color: rgb(237, 237, 237);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)));
+    background-image: linear-gradient(to bottom, rgb(252, 252, 252), rgb(223, 223, 223));
     border-radius: 12px;
     -webkit-appearance: none;
 }
@@ -1832,12 +1848,12 @@
     color: rgb(130, 130, 130);
     border-color: rgb(212, 212, 212);
     background-color: rgb(239, 239, 239);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(250, 250, 250)), to(rgb(235, 235, 235)));
+    background-image: linear-gradient(to bottom, rgb(250, 250, 250), rgb(235, 235, 235));
 }
 
 button.show-all-nodes:active {
     background-color: rgb(215, 215, 215);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 194)), to(rgb(239, 239, 239)));
+    background-image: linear-gradient(to bottom, rgb(194, 194, 194), rgb(239, 239, 239));
 }
 
 button.enable-toggle-status-bar-item .glyph {
@@ -1998,7 +2014,7 @@
     height: 10px;
     border: 0;
     -webkit-mask-image: url(Images/statusbarButtonGlyphs.png);
-    -webkit-mask-size: 320px 120px;
+    -webkit-mask-size: 320px 144px;
     -webkit-appearance: none;
     background-color: rgba(0, 0, 0, 0.75);
     position: relative;
@@ -2007,7 +2023,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .sidebar-tree-item .disclosure-button {
-    -webkit-mask-image: url(Images/statusbarButtonGlyphs2x.png);
+    -webkit-mask-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -2125,6 +2141,8 @@
 }
 
 .sidebar-tree-item .titles {
+    display: flex;
+    flex-direction: column;
     position: relative;
     top: 5px;
     line-height: 12px;
@@ -2134,6 +2152,10 @@
     white-space: nowrap;
 }
 
+.titles > .title-container {
+    display: flex;
+}
+
 .sidebar-tree-item .titles.no-subtitle {
     top: 10px;
 }
@@ -2396,7 +2418,7 @@
 body.platform-mac .soft-context-menu-item-mouse-over {
     border-top: 1px solid rgb(90, 131, 236);
     border-bottom: 1px solid rgb(18, 88, 233);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(100, 140, 243)), to(rgb(36, 101, 243)));
+    background-image: linear-gradient(to bottom, rgb(100, 140, 243), rgb(36, 101, 243));
 }
 
 .soft-context-menu-item-checkmark {
@@ -2425,6 +2447,7 @@
 .search-drawer-header {
     flex: none;
     padding: 4px;
+    display: flex;
 }
 
 .search-drawer-header input[type="text"].search-config-search {
@@ -2447,20 +2470,10 @@
 }
 
 .search-drawer-header label.search-config-label {
+    margin: auto 0;
     margin-left: 8px;
     color: #303030;
-}
-
-.search-drawer-header input[type="checkbox"].search-config-checkbox {
-    vertical-align: bottom;
-}
-
-body:not(.platform-mac) .search-drawer-header input[type="checkbox"].search-config-checkbox {
-    margin-bottom: 5px;
-}
-
-body.platform-mac .search-drawer-header input[type="checkbox"].search-config-checkbox {
-    margin-bottom: 4px;
+    display: flex;
 }
 
 #bottom-status-bar-container {
@@ -2516,7 +2529,7 @@
 #search-results-pane-file-based li.parent::before {
     -webkit-user-select: none;
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     opacity: 0.5;
     width: 8px;
     content: "a";
@@ -2527,7 +2540,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 #search-results-pane-file-based li.parent::before {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -2774,6 +2787,7 @@
 
 .inspector-view {
     overflow: hidden;
+    position: absolute !important;
 }
 
 .inspector-footer.status-bar {
@@ -2831,3 +2845,7 @@
 body.undocked .toolbar-close-button-item {
     display: none;
 }
+
+#inspector-split-view > .split-view-sidebar {
+    position: relative;
+}
diff --git a/Source/devtools/front_end/inspector.html b/Source/devtools/front_end/inspector.html
index 9b01cb1..0f625c7 100644
--- a/Source/devtools/front_end/inspector.html
+++ b/Source/devtools/front_end/inspector.html
@@ -37,18 +37,22 @@
     <link rel="stylesheet" type="text/css" href="inspectorSyntaxHighlight.css">
     <link rel="stylesheet" type="text/css" href="popover.css">
     <script type="text/javascript" src="utilities.js"></script>
+    <script type="text/javascript" src="modules.js"></script>
     <script type="text/javascript" src="jsdifflib.js"></script>
     <script type="text/javascript" src="DOMExtension.js"></script>
     <script type="text/javascript" src="treeoutline.js"></script>
     <script type="text/javascript" src="inspector.js"></script>
+    <script type="text/javascript" src="ModuleManager.js"></script>
+    <script type="text/javascript" src="Platform.js"></script>
     <script type="text/javascript" src="Geometry.js"></script>
     <script type="text/javascript" src="UIString.js"></script>
     <script type="text/javascript" src="InspectorBackend.js"></script>
     <script type="text/javascript" src="InspectorBackendCommands.js"></script>
-    <script type="text/javascript" src="ExtensionRegistryStub.js"></script>
     <script type="text/javascript" src="InspectorFrontendAPI.js"></script>
     <script type="text/javascript" src="Object.js"></script>
+    <script type="text/javascript" src="NotificationService.js"></script>
     <script type="text/javascript" src="Settings.js"></script>
+    <script type="text/javascript" src="SettingsUI.js"></script>
     <script type="text/javascript" src="View.js"></script>
     <script type="text/javascript" src="UIUtils.js"></script>
     <script type="text/javascript" src="HelpScreen.js"></script>
@@ -96,7 +100,6 @@
     <script type="text/javascript" src="IndexedDBModel.js"></script>
     <script type="text/javascript" src="Spectrum.js"></script>
     <script type="text/javascript" src="SidebarPane.js"></script>
-    <script type="text/javascript" src="ElementsTreeOutline.js"></script>
     <script type="text/javascript" src="DOMPresentationUtils.js"></script>
     <script type="text/javascript" src="SidebarTreeElement.js"></script>
     <script type="text/javascript" src="Section.js"></script>
@@ -108,24 +111,21 @@
     <script type="text/javascript" src="DOMBreakpointsSidebarPane.js"></script>
     <script type="text/javascript" src="Color.js"></script>
     <script type="text/javascript" src="CSSMetadata.js"></script>
+    <script type="text/javascript" src="SupportedCSSProperties.js"></script>
     <script type="text/javascript" src="StatusBarButton.js"></script>
     <script type="text/javascript" src="CompletionDictionary.js"></script>
+    <script type="text/javascript" src="InplaceEditor.js"></script>
     <script type="text/javascript" src="TextEditor.js"></script>
     <script type="text/javascript" src="SourceFrame.js"></script>
     <script type="text/javascript" src="ResourceView.js"></script>
     <script type="text/javascript" src="FontView.js"></script>
     <script type="text/javascript" src="ImageView.js"></script>
     <script type="text/javascript" src="SplitView.js"></script>
-    <script type="text/javascript" src="SidebarView.js"></script>
+    <script type="text/javascript" src="StackView.js"></script>
     <script type="text/javascript" src="ConsolePanel.js"></script>
-    <script type="text/javascript" src="ExtensionAPI.js"></script>
-    <script type="text/javascript" src="ExtensionAuditCategory.js"></script>
-    <script type="text/javascript" src="ExtensionServer.js"></script>
-    <script type="text/javascript" src="ExtensionView.js"></script>
-    <script type="text/javascript" src="ExtensionPanel.js"></script>
+    <script type="text/javascript" src="ExtensionServerProxy.js"></script>
     <script type="text/javascript" src="EmptyView.js"></script>
     <script type="text/javascript" src="ScriptFormatter.js"></script>
-    <script type="text/javascript" src="DOMSyntaxHighlighter.js"></script>
     <script type="text/javascript" src="TempFile.js"></script>
     <script type="text/javascript" src="TextRange.js"></script>
     <script type="text/javascript" src="TextUtils.js"></script>
@@ -168,6 +168,7 @@
     <script type="text/javascript" src="FilterBar.js"></script>
     <script type="text/javascript" src="InspectElementModeController.js"></script>
     <script type="text/javascript" src="WorkerManager.js"></script>
+    <script type="text/javascript" src="WorkerFrontendManager.js"></script>
     <script type="text/javascript" src="UserMetrics.js"></script>
     <script type="text/javascript" src="RuntimeModel.js"></script>
     <script type="text/javascript" src="HandlerRegistry.js"></script>
@@ -177,18 +178,15 @@
     <script type="text/javascript" src="ProgressIndicator.js"></script>
     <script type="text/javascript" src="StylesSourceMapping.js"></script>
     <script type="text/javascript" src="NetworkUISourceCodeProvider.js"></script>
-    <script type="text/javascript" src="ElementsPanelDescriptor.js"></script>
-    <script type="text/javascript" src="NetworkPanelDescriptor.js"></script>
-    <script type="text/javascript" src="ProfilesPanelDescriptor.js"></script>
-    <script type="text/javascript" src="SourcesPanelDescriptor.js"></script>
-    <script type="text/javascript" src="TimelinePanelDescriptor.js"></script>
-    <script type="text/javascript" src="LayersPanelDescriptor.js"></script>
+    <script type="text/javascript" src="CPUProfilerModel.js"></script>
     <script type="text/javascript" src="DockController.js"></script>
     <script type="text/javascript" src="TracingAgent.js"></script>
     <script type="text/javascript" src="ScreencastView.js"></script>
-    <script type="text/javascript" src="DevToolsExtensionAPI.js"></script>
     <script type="text/javascript" src="Tests.js"></script>
     <script type="text/javascript" src="FlameChart.js"></script>
+    <script type="text/javascript" src="PaintProfiler.js"></script>
+    <script type="text/javascript" src="HelpScreenUntilReload.js"></script>
+    <script type="text/javascript" src="ZoomManager.js"></script>
 </head>
 <body class="undocked" id="-blink-dev-tools"></body>
 </html>
diff --git a/Source/devtools/front_end/inspector.js b/Source/devtools/front_end/inspector.js
index 8e221b8..7e53dda 100644
--- a/Source/devtools/front_end/inspector.js
+++ b/Source/devtools/front_end/inspector.js
@@ -29,30 +29,17 @@
  */
 
 var WebInspector = {
-    _panelDescriptors: function()
+    _registerModules: function()
     {
-        this.panels = {};
-        WebInspector.inspectorView = new WebInspector.InspectorView();
-        WebInspector.inspectorView.show(document.body);
-
-        var elements = new WebInspector.ElementsPanelDescriptor();
-        var network = new WebInspector.NetworkPanelDescriptor();
-        var sources = new WebInspector.SourcesPanelDescriptor();
-        var timeline = new WebInspector.TimelinePanelDescriptor();
-        var profiles = new WebInspector.ProfilesPanelDescriptor();
-        var resources = new WebInspector.PanelDescriptor("resources", WebInspector.UIString("Resources"), "ResourcesPanel", "ResourcesPanel.js");
-        var audits = new WebInspector.PanelDescriptor("audits", WebInspector.UIString("Audits"), "AuditsPanel", "AuditsPanel.js");
-        var console = new WebInspector.PanelDescriptor("console", WebInspector.UIString("Console"), "ConsolePanel");
-
-        if (WebInspector.WorkerManager.isWorkerFrontend())
-            return [sources, timeline, profiles, console];
-
-        var panelDescriptors = [elements, network, sources, timeline, profiles, resources, audits, console];
-        if (WebInspector.experimentsSettings.layersPanel.isEnabled()) {
-            var layers = new WebInspector.LayersPanelDescriptor();
-            panelDescriptors.push(layers);
+        var configuration;
+        if (WebInspector.isWorkerFrontend()) {
+            configuration = ["sources", "timeline", "profiles", "console", "codemirror"];
+        } else {
+            configuration = ["elements", "network", "sources", "timeline", "profiles", "resources", "audits", "console", "codemirror", "extensions"];
+            if (WebInspector.experimentsSettings.layersPanel.isEnabled())
+                configuration.push("layers");
         }
-        return panelDescriptors;
+        WebInspector.moduleManager.registerModules(configuration);
     },
 
     _createGlobalStatusBarItems: function()
@@ -60,20 +47,15 @@
         if (this.inspectElementModeController)
             this.inspectorView.appendToLeftToolbar(this.inspectElementModeController.toggleSearchButton.element);
 
-        if (Capabilities.canScreencast) {
-            this._toggleScreencastButton = new WebInspector.StatusBarButton(WebInspector.UIString("Toggle screencast."), "screencast-status-bar-item");
-            this._toggleScreencastButton.addEventListener("click", this._toggleScreencastButtonClicked.bind(this), false);
-            this.inspectorView.appendToLeftToolbar(this._toggleScreencastButton.element);
-        }
-
         this.inspectorView.appendToRightToolbar(this.settingsController.statusBarItem);
-        if (WebInspector.queryParamsObject["can_dock"])
+        if (this.dockController.element)
             this.inspectorView.appendToRightToolbar(this.dockController.element);
 
-        var closeButtonToolbarItem = document.createElementWithClass("div", "toolbar-close-button-item");
-        var closeButtonElement = closeButtonToolbarItem.createChild("div", "close-button");
-        closeButtonElement.addEventListener("click", WebInspector.close.bind(WebInspector), true);
-        this.inspectorView.appendToRightToolbar(closeButtonToolbarItem);
+        if (Capabilities.canScreencast) {
+            var placeholder = document.createElement("div");
+            this._screencastView = new WebInspector.ScreencastView(placeholder);
+            this.inspectorView.appendToRightToolbar(placeholder);
+        }
     },
 
     /**
@@ -84,99 +66,94 @@
         return !!WebInspector.queryParamsObject["remoteFrontend"];
     },
 
-    _toggleScreencastButtonClicked: function()
+    /**
+     * @return {boolean}
+     */
+    isDedicatedWorkerFrontend: function()
     {
-        this._toggleScreencastButton.toggled = !this._toggleScreencastButton.toggled;
-        WebInspector.settings.screencastEnabled.set(this._toggleScreencastButton.toggled);
+        return !!WebInspector.queryParamsObject["dedicatedWorkerId"];
+    },
 
-        if (this._toggleScreencastButton.toggled) {
-            if (!this._screencastView) {
-                // Rebuild the UI upon first invocation.
-                this._screencastView = new WebInspector.ScreencastView();
-                this._screencastSplitView = new WebInspector.SplitView(true, WebInspector.settings.screencastSidebarWidth.name);
-                this._screencastSplitView.markAsRoot();
-                this._screencastSplitView.show(document.body);
+    _calculateWorkerInspectorTitle: function()
+    {
+        var expression = "location.href";
+        if (WebInspector.queryParamsObject["isSharedWorker"])
+            expression += " + (this.name ? ' (' + this.name + ')' : '')";
+        RuntimeAgent.evaluate.invoke({expression:expression, doNotPauseOnExceptionsAndMuteConsole:true, returnByValue: true}, evalCallback.bind(this));
 
-                this._screencastView.show(this._screencastSplitView.firstElement());
-
-                this.inspectorView.element.remove();
-                this.inspectorView.show(this._screencastSplitView.secondElement());
+        /**
+         * @param {?Protocol.Error} error
+         * @param {!RuntimeAgent.RemoteObject} result
+         * @param {boolean=} wasThrown
+         */
+        function evalCallback(error, result, wasThrown)
+        {
+            if (error || wasThrown) {
+                console.error(error);
+                return;
             }
-            this._screencastSplitView.showBoth();
-        } else {
-            this._screencastSplitView.showOnlySecond();
+            InspectorFrontendHost.inspectedURLChanged(result.value);
         }
     },
 
+    _initializeDedicatedWorkerFrontend: function(workerId)
+    {
+        function receiveMessage(event)
+        {
+            var message = event.data;
+            InspectorBackend.dispatch(message);
+        }
+        window.addEventListener("message", receiveMessage, true);
+
+
+        InspectorBackend.sendMessageObjectToBackend = function(message)
+        {
+            window.opener.postMessage({workerId: workerId, command: "sendMessageToBackend", message: message}, "*");
+        }
+    },
+
+    _loadCompletedForWorkers: function()
+    {
+        // Make sure script execution of dedicated worker is resumed and then paused
+        // on the first script statement in case we autoattached to it.
+        if (WebInspector.queryParamsObject["workerPaused"]) {
+            DebuggerAgent.pause();
+            RuntimeAgent.run(calculateTitle);
+        } else if (WebInspector.isWorkerFrontend())
+            calculateTitle();
+
+        function calculateTitle()
+        {
+            WebInspector._calculateWorkerInspectorTitle();
+        }
+    },
+
+    /**
+     * @return {boolean}
+     */
+    isWorkerFrontend: function()
+    {
+        return !!WebInspector.queryParamsObject["dedicatedWorkerId"] ||
+                !!WebInspector.queryParamsObject["isSharedWorker"];
+    },
 
     showConsole: function()
     {
-        if (this.consoleView.isShowing() && !WebInspector.inspectorView.drawer().isHiding())
+        if (this.consoleView.isShowing())
             return;
         this.inspectorView.showViewInDrawer("console");
     },
 
     _resetErrorAndWarningCounts: function()
     {
-        var errorWarningElement = document.getElementById("error-warning-count");
-        if (!errorWarningElement)
-            return;
-
-        errorWarningElement.classList.add("hidden");
+        WebInspector.inspectorView.setErrorAndWarningCounts(0, 0);
     },
 
     _updateErrorAndWarningCounts: function()
     {
         var errors = WebInspector.console.errors;
         var warnings = WebInspector.console.warnings;
-
-        if (!errors && !warnings) {
-            this._resetErrorAndWarningCounts();
-            return;
-        }
-
-        var errorWarningElement = document.getElementById("error-warning-count");
-        if (!errorWarningElement)
-            return;
-
-        errorWarningElement.classList.remove("hidden");
-        errorWarningElement.removeChildren();
-
-        if (errors) {
-            var errorImageElement = errorWarningElement.createChild("div", "error-icon-small");
-            var errorElement = errorWarningElement.createChild("span");
-            errorElement.id = "error-count";
-            errorElement.textContent = errors;
-        }
-
-        if (warnings) {
-            var warningsImageElement = errorWarningElement.createChild("div", "warning-icon-small");
-            var warningsElement = errorWarningElement.createChild("span");
-            warningsElement.id = "warning-count";
-            warningsElement.textContent = warnings;
-        }
-
-        if (errors) {
-            if (warnings) {
-                if (errors == 1) {
-                    if (warnings == 1)
-                        errorWarningElement.title = WebInspector.UIString("%d error, %d warning", errors, warnings);
-                    else
-                        errorWarningElement.title = WebInspector.UIString("%d error, %d warnings", errors, warnings);
-                } else if (warnings == 1)
-                    errorWarningElement.title = WebInspector.UIString("%d errors, %d warning", errors, warnings);
-                else
-                    errorWarningElement.title = WebInspector.UIString("%d errors, %d warnings", errors, warnings);
-            } else if (errors == 1)
-                errorWarningElement.title = WebInspector.UIString("%d error", errors);
-            else
-                errorWarningElement.title = WebInspector.UIString("%d errors", errors);
-        } else if (warnings == 1)
-            errorWarningElement.title = WebInspector.UIString("%d warning", warnings);
-        else if (warnings)
-            errorWarningElement.title = WebInspector.UIString("%d warnings", warnings);
-        else
-            errorWarningElement.title = null;
+        WebInspector.inspectorView.setErrorAndWarningCounts(errors, warnings);
     },
 
     get inspectedPageDomain()
@@ -192,42 +169,6 @@
             callback();
     },
 
-    _zoomIn: function()
-    {
-        this._zoomLevel = Math.min(this._zoomLevel + 1, WebInspector.Zoom.Table.length - WebInspector.Zoom.DefaultOffset - 1);
-        this._requestZoom();
-    },
-
-    _zoomOut: function()
-    {
-        this._zoomLevel = Math.max(this._zoomLevel - 1, -WebInspector.Zoom.DefaultOffset);
-        this._requestZoom();
-    },
-
-    _resetZoom: function()
-    {
-        this._zoomLevel = 0;
-        this._requestZoom();
-    },
-
-    /**
-     * @return {number}
-     */
-    zoomFactor: function()
-    {
-        // For backwards compatibility, zoomLevel takes integers (with 0 being default zoom).
-        var index = this._zoomLevel + WebInspector.Zoom.DefaultOffset;
-        index = Math.min(WebInspector.Zoom.Table.length - 1, index);
-        index = Math.max(0, index);
-        return WebInspector.Zoom.Table[index];
-    },
-
-    _requestZoom: function()
-    {
-        WebInspector.settings.zoomLevel.set(this._zoomLevel);
-        InspectorFrontendHost.setZoomFactor(this.zoomFactor());
-    },
-
     _debuggerPaused: function()
     {
         this.debuggerModel.removeEventListener(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
@@ -250,6 +191,18 @@
         var pair = params[i].split("=");
         WebInspector.queryParamsObject[pair[0]] = pair[1];
     }
+
+    // Patch settings from the URL param (for tests).
+    var settingsParam = WebInspector.queryParamsObject["settings"];
+    if (settingsParam) {
+        try {
+            var settings = JSON.parse(window.decodeURI(settingsParam));
+            for (var key in settings)
+                localStorage[key] = settings[key];
+        } catch(e) {
+            // Ignore malformed settings.
+        }
+    }
 })();}
 
 WebInspector.suggestReload = function()
@@ -261,19 +214,7 @@
 WebInspector.reload = function()
 {
     InspectorAgent.reset();
-
-    var queryParams = window.location.search;
-    var url = window.location.href;
-    url = url.substring(0, url.length - queryParams.length);
-    var queryParamsObject = {};
-    for (var name in WebInspector.queryParamsObject)
-        queryParamsObject[name] = WebInspector.queryParamsObject[name];
-    if (this.dockController)
-        queryParamsObject["dockSide"] = this.dockController.dockSide();
-    var names = Object.keys(queryParamsObject);
-    for (var i = 0; i < names.length; ++i)
-        url += (i ? "&" : "?") + names[i] + "=" + queryParamsObject[names[i]];
-    document.location = url;
+    window.location.reload();
 }
 
 WebInspector.loaded = function()
@@ -289,7 +230,7 @@
     InspectorBackend.loadFromJSONIfNeeded("../protocol.json");
     WebInspector.dockController = new WebInspector.DockController();
 
-    if (WebInspector.WorkerManager.isDedicatedWorkerFrontend()) {
+    if (WebInspector.isDedicatedWorkerFrontend()) {
         // Do not create socket for the worker front-end.
         WebInspector.doLoadedDone();
         return;
@@ -338,7 +279,9 @@
     if (WebInspector.queryParamsObject.toolbarColor && WebInspector.queryParamsObject.textColor)
         WebInspector.setToolbarColors(WebInspector.queryParamsObject.toolbarColor, WebInspector.queryParamsObject.textColor);
 
-    WebInspector.WorkerManager.loaded();
+    var workerId = WebInspector.queryParamsObject["dedicatedWorkerId"];
+    if (workerId)
+        this._initializeDedicatedWorkerFrontend(workerId);
 
     PageAgent.canScreencast(WebInspector._initializeCapability.bind(WebInspector, "canScreencast", null));
     WorkerAgent.canInspectWorkers(WebInspector._initializeCapability.bind(WebInspector, "canInspectWorkers", WebInspector._doLoadedDoneWithCapabilities.bind(WebInspector)));
@@ -354,6 +297,7 @@
     // set order of some sections explicitly
     WebInspector.shortcutsScreen.section(WebInspector.UIString("Console"));
     WebInspector.shortcutsScreen.section(WebInspector.UIString("Elements Panel"));
+    WebInspector.ShortcutsScreen.registerShortcuts();
 
     this.console = new WebInspector.ConsoleModel();
     this.console.addEventListener(WebInspector.ConsoleModel.Events.ConsoleCleared, this._resetErrorAndWarningCounts, this);
@@ -366,16 +310,13 @@
     this.networkLog = new WebInspector.NetworkLog();
     this.domAgent = new WebInspector.DOMAgent();
     this.domAgent.addEventListener(WebInspector.DOMAgent.Events.InspectNodeRequested, this._inspectNodeRequested, this);
+    this.workerManager = new WebInspector.WorkerManager(Capabilities.canInspectWorkers);
     this.runtimeModel = new WebInspector.RuntimeModel(this.resourceTreeModel);
 
-    var panelDescriptors = this._panelDescriptors();
+    this.zoomManager = new WebInspector.ZoomManager();
+
     this.advancedSearchController = new WebInspector.AdvancedSearchController();
-    for (var i = 0; i < panelDescriptors.length; ++i)
-        panelDescriptors[i].registerShortcuts();
-
-    WebInspector.CSSMetadata.requestCSSShorthandData();
-
-    this.consoleView = new WebInspector.ConsoleView(WebInspector.WorkerManager.isWorkerFrontend());
+    this.consoleView = new WebInspector.ConsoleView(WebInspector.isWorkerFrontend());
 
     InspectorBackend.registerInspectorDispatcher(this);
 
@@ -385,26 +326,24 @@
 
     this.cssModel = new WebInspector.CSSStyleModel(this.workspace);
     this.timelineManager = new WebInspector.TimelineManager();
-    this.profileManager = new WebInspector.ProfileManager();
     this.tracingAgent = new WebInspector.TracingAgent();
 
-    if (!WebInspector.WorkerManager.isWorkerFrontend())
+    if (!WebInspector.isWorkerFrontend()) {
         this.inspectElementModeController = new WebInspector.InspectElementModeController();
+        this.workerFrontendManager = new WebInspector.WorkerFrontendManager();
+    }
 
     this.settingsController = new WebInspector.SettingsController();
 
     this.domBreakpointsSidebarPane = new WebInspector.DOMBreakpointsSidebarPane();
 
-    this._zoomLevel = WebInspector.settings.zoomLevel.get();
-    if (this._zoomLevel)
-        this._requestZoom();
-
     var autoselectPanel = WebInspector.UIString("a panel chosen automatically");
     var openAnchorLocationSetting = WebInspector.settings.createSetting("openLinkHandler", autoselectPanel);
     this.openAnchorLocationRegistry = new WebInspector.HandlerRegistry(openAnchorLocationSetting);
     this.openAnchorLocationRegistry.registerHandler(autoselectPanel, function() { return false; });
+    WebInspector.Linkifier.setLinkHandler(new WebInspector.HandlerRegistry.LinkHandler());
 
-    this.workspaceController = new WebInspector.WorkspaceController(this.workspace);
+    new WebInspector.WorkspaceController(this.workspace);
 
     this.fileSystemWorkspaceProvider = new WebInspector.FileSystemWorkspaceProvider(this.isolatedFileSystemManager, this.workspace);
 
@@ -418,17 +357,20 @@
     this.overridesSupport = new WebInspector.OverridesSupport();
     this.overridesSupport.applyInitialOverrides();
 
-    new WebInspector.DebuggerScriptMapping(this.workspace, this.networkWorkspaceProvider);
+    new WebInspector.DebuggerScriptMapping(this.debuggerModel, this.workspace, this.networkWorkspaceProvider);
     this.liveEditSupport = new WebInspector.LiveEditSupport(this.workspace);
     new WebInspector.CSSStyleSheetMapping(this.cssModel, this.workspace, this.networkWorkspaceProvider);
     new WebInspector.PresentationConsoleMessageHelper(this.workspace);
 
-    this._createGlobalStatusBarItems();
+    // Create settings before loading modules.
+    WebInspector.settings.initializeBackendSettings();
 
-    WebInspector.startBatchUpdate();
-    for (var i = 0; i < panelDescriptors.length; ++i)
-        WebInspector.inspectorView.addPanel(panelDescriptors[i]);
-    WebInspector.endBatchUpdate();
+    this._registerModules();
+
+    this.panels = {};
+    WebInspector.inspectorView = new WebInspector.InspectorView();
+    WebInspector.inspectorView.show(document.body);
+    this._createGlobalStatusBarItems();
 
     this.addMainEventListeners(document);
 
@@ -438,41 +380,46 @@
     errorWarningCount.addEventListener("click", this.showConsole.bind(this), false);
     this._updateErrorAndWarningCounts();
 
-    this.extensionServer.initExtensions();
+    WebInspector.extensionServerProxy.setFrontendReady();
 
     this.console.enableAgent();
 
-    InspectorAgent.enable(WebInspector.inspectorView.showInitialPanel.bind(WebInspector.inspectorView));
     this.databaseModel = new WebInspector.DatabaseModel();
     this.domStorageModel = new WebInspector.DOMStorageModel();
+    this.cpuProfilerModel = new WebInspector.CPUProfilerModel();
 
-    ProfilerAgent.enable();
-    HeapProfilerAgent.enable();
-
-    WebInspector.settings.showPaintRects = WebInspector.settings.createBackendSetting("showPaintRects", false, PageAgent.setShowPaintRects.bind(PageAgent));
-    WebInspector.settings.showDebugBorders = WebInspector.settings.createBackendSetting("showDebugBorders", false, PageAgent.setShowDebugBorders.bind(PageAgent));
-    WebInspector.settings.continuousPainting = WebInspector.settings.createBackendSetting("continuousPainting", false, PageAgent.setContinuousPaintingEnabled.bind(PageAgent));
-    WebInspector.settings.showFPSCounter = WebInspector.settings.createBackendSetting("showFPSCounter", false, PageAgent.setShowFPSCounter.bind(PageAgent));
-    WebInspector.settings.showScrollBottleneckRects = WebInspector.settings.createBackendSetting("showScrollBottleneckRects", false, PageAgent.setShowScrollBottleneckRects.bind(PageAgent));
-
-    if (WebInspector.settings.showPaintRects.get() || WebInspector.settings.showDebugBorders.get() || WebInspector.settings.continuousPainting.get() ||
-            WebInspector.settings.showFPSCounter.get() || WebInspector.settings.showScrollBottleneckRects.get()) {
-        WebInspector.settings.showRenderingViewInDrawer.set(true);
-    }
-
-    WebInspector.settings.showMetricsRulers.addChangeListener(showRulersChanged);
-    function showRulersChanged()
+    InspectorAgent.enable(inspectorAgentEnableCallback.bind(this));
+    /**
+     * @this {WebInspector}
+     */
+    function inspectorAgentEnableCallback()
     {
-        PageAgent.setShowViewportSizeOnResize(true, WebInspector.settings.showMetricsRulers.get());
+        WebInspector.inspectorView.showInitialPanel();
+
+        if (WebInspector.overridesSupport.hasActiveOverrides()) {
+            if (!WebInspector.settings.showEmulationViewInDrawer.get())
+                WebInspector.settings.showEmulationViewInDrawer.set(true);
+            WebInspector.inspectorView.showViewInDrawer("emulation", true);
+        }
+
+        if (WebInspector.settings.showPaintRects.get() || WebInspector.settings.showDebugBorders.get() || WebInspector.settings.continuousPainting.get() ||
+                WebInspector.settings.showFPSCounter.get() || WebInspector.settings.showScrollBottleneckRects.get()) {
+            WebInspector.settings.showRenderingViewInDrawer.set(true);
+        }
+
+        WebInspector.settings.showMetricsRulers.addChangeListener(showRulersChanged);
+        function showRulersChanged()
+        {
+            PageAgent.setShowViewportSizeOnResize(true, WebInspector.settings.showMetricsRulers.get());
+        }
+        showRulersChanged();
+
+        if (Capabilities.canScreencast)
+            this._screencastView.initialize();
     }
-    showRulersChanged();
 
-    WebInspector.WorkerManager.loadCompleted();
+    this._loadCompletedForWorkers()
     InspectorFrontendAPI.loadCompleted();
-
-    if (Capabilities.canScreencast && WebInspector.settings.screencastEnabled.get())
-        this._toggleScreencastButtonClicked();
-
     WebInspector.notifications.dispatchEventToListeners(WebInspector.Events.InspectorLoaded);
 }
 
@@ -506,12 +453,8 @@
 
 WebInspector.windowResize = function(event)
 {
-    if (WebInspector.inspectorView)
-        WebInspector.inspectorView.onResize();
     if (WebInspector.settingsController)
         WebInspector.settingsController.resize();
-    if (WebInspector._screencastSplitView)
-        WebInspector._screencastSplitView.doResize();
 }
 
 WebInspector.close = function(event)
@@ -522,7 +465,7 @@
 WebInspector.documentClick = function(event)
 {
     var anchor = event.target.enclosingNodeOrSelfWithNodeName("a");
-    if (!anchor || (anchor.target === "_blank"))
+    if (!anchor || !anchor.href || (anchor.target === "_blank"))
         return;
 
     // Prevent the link from navigating, since we don't do any navigation by following links normally.
@@ -534,25 +477,24 @@
             return;
         if (WebInspector.openAnchorLocationRegistry.dispatch({ url: anchor.href, lineNumber: anchor.lineNumber}))
             return;
-        if (WebInspector.showAnchorLocation(anchor))
-            return;
 
-        const profileMatch = WebInspector.ProfilesPanelDescriptor.ProfileURLRegExp.exec(anchor.href);
-        if (profileMatch) {
-            WebInspector.showPanel("profiles").showProfile(profileMatch[1], profileMatch[2]);
+        var uiSourceCode = WebInspector.workspace.uiSourceCodeForURL(anchor.href);
+        if (uiSourceCode) {
+            WebInspector.Revealer.reveal(new WebInspector.UILocation(uiSourceCode, anchor.lineNumber || 0, anchor.columnNumber || 0));
             return;
         }
 
-        var parsedURL = anchor.href.asParsedURL();
-        if (parsedURL && parsedURL.scheme === "webkit-link-action") {
-            if (parsedURL.host === "show-panel") {
-                var panel = parsedURL.path.substring(1);
-                if (WebInspector.panel(panel))
-                    WebInspector.showPanel(panel);
-            }
+        var resource = WebInspector.resourceForURL(anchor.href);
+        if (resource) {
+            WebInspector.Revealer.reveal(resource);
             return;
         }
 
+        var request = WebInspector.networkLog.requestForURL(anchor.href);
+        if (request) {
+            WebInspector.Revealer.reveal(request);
+            return;
+        }
         InspectorFrontendHost.openInNewTab(anchor.href);
     }
 
@@ -595,11 +537,11 @@
     ];
     section.addRelatedKeys(keys, WebInspector.UIString("Go back/forward in panel history"));
 
-    var toggleConsoleLabel = WebInspector.UIString("Toggle console");
-    if (WebInspector.experimentsSettings.openConsoleWithCtrlTilde.isEnabled())
-        section.addKey(shortcut.makeDescriptor(shortcut.Keys.Esc), toggleConsoleLabel);
-    else
-        section.addKey(shortcut.makeDescriptor(shortcut.Keys.Tilde, shortcut.Modifiers.CtrlOrMeta), toggleConsoleLabel);
+    var toggleConsoleLabel = WebInspector.UIString("Show console");
+    section.addKey(shortcut.makeDescriptor(shortcut.Keys.Tilde, shortcut.Modifiers.Ctrl), toggleConsoleLabel);
+    var doNotOpenDrawerOnEsc = WebInspector.experimentsSettings.doNotOpenDrawerOnEsc.isEnabled();
+    var toggleDrawerLabel = doNotOpenDrawerOnEsc ? WebInspector.UIString("Hide drawer") : WebInspector.UIString("Toggle drawer");
+    section.addKey(shortcut.makeDescriptor(shortcut.Keys.Esc), toggleDrawerLabel);
     section.addKey(shortcut.makeDescriptor("f", shortcut.Modifiers.CtrlOrMeta), WebInspector.UIString("Search"));
 
     var advancedSearchShortcut = WebInspector.AdvancedSearchController.createShortcut();
@@ -629,15 +571,33 @@
     section.addAlternateKeys(keys, WebInspector.UIString("Show general settings"));
 }
 
-WebInspector.documentKeyDown = function(event)
+WebInspector.handleZoomEvent = function(event)
 {
-    if (WebInspector.currentFocusElement() && WebInspector.currentFocusElement().handleKeyEvent) {
-        WebInspector.currentFocusElement().handleKeyEvent(event);
-        if (event.handled) {
-            event.consume(true);
-            return;
+    switch (event.keyCode) {
+    case 107: // +
+    case 187: // +
+        InspectorFrontendHost.zoomIn();
+        return true;
+    case 109: // -
+    case 189: // -
+        InspectorFrontendHost.zoomOut();
+        return true;
+    case 48: // 0
+    case 96: // Numpad 0
+        // Zoom reset shortcut does not allow "Shift" when handled by the browser.
+        if (!event.shiftKey) {
+            InspectorFrontendHost.resetZoom();
+            return true;
         }
+        break;
     }
+    return false;
+};
+
+WebInspector.postDocumentKeyDown = function(event)
+{
+    if (event.handled)
+        return;
 
     if (WebInspector.inspectorView.currentPanel()) {
         WebInspector.inspectorView.currentPanel().handleShortcut(event);
@@ -682,65 +642,29 @@
     var isValidZoomShortcut = WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event) &&
         !event.altKey &&
         !InspectorFrontendHost.isStub;
-    switch (event.keyCode) {
-        case 107: // +
-        case 187: // +
-            if (isValidZoomShortcut) {
-                WebInspector._zoomIn();
-                event.consume(true);
-            }
-            break;
-        case 109: // -
-        case 189: // -
-            if (isValidZoomShortcut) {
-                WebInspector._zoomOut();
-                event.consume(true);
-            }
-            break;
-        case 48: // 0
-        case 96: // Numpad 0
-            // Zoom reset shortcut does not allow "Shift" when handled by the browser.
-            if (isValidZoomShortcut && !event.shiftKey) {
-                WebInspector._resetZoom();
-                event.consume(true);
-            }
-            break;
+    if (isValidZoomShortcut && WebInspector.handleZoomEvent(event)) {
+        event.consume(true);
+        return;
     }
 
-}
-
-WebInspector.postDocumentKeyDown = function(event)
-{
-    const helpKey = WebInspector.isMac() ? "U+003F" : "U+00BF"; // "?" for both platforms
-
-    if (event.keyIdentifier === "F1" ||
-        (event.keyIdentifier === helpKey && event.shiftKey && (!WebInspector.isBeingEdited(event.target) || event.metaKey))) {
+    if (event.keyCode === WebInspector.KeyboardShortcut.Keys.F1.code ||
+        (event.keyCode === WebInspector.KeyboardShortcut.Keys.QuestionMark.code && event.shiftKey && (!WebInspector.isBeingEdited(event.target) || event.metaKey))) {
         this.settingsController.showSettingsScreen(WebInspector.SettingsScreen.Tabs.General);
         event.consume(true);
         return;
     }
 
-    const Esc = "U+001B";
-
-    if (event.handled)
-        return;
-
-    var openConsoleWithCtrlTildeEnabled = WebInspector.experimentsSettings.openConsoleWithCtrlTilde.isEnabled();
+    var Esc = "U+001B";
+    var doNotOpenDrawerOnEsc = WebInspector.experimentsSettings.doNotOpenDrawerOnEsc.isEnabled();
     if (event.keyIdentifier === Esc) {
-        if (this.inspectorView.drawer().visible())
-            this.inspectorView.drawer().hide();
-        else if (!openConsoleWithCtrlTildeEnabled)
-            this.inspectorView.drawer().show();
+        if (this.inspectorView.drawerVisible())
+            this.inspectorView.closeDrawer();
+        else if (!doNotOpenDrawerOnEsc)
+            this.inspectorView.showDrawer();
     }
 
-    if (openConsoleWithCtrlTildeEnabled) {
-        if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Tilde.code && WebInspector.KeyboardShortcut.eventHasCtrlOrMeta(event)) {
-            if (this.inspectorView.drawer().visible())
-                this.inspectorView.drawer().hide();
-            else
-                this.showConsole();
-        }
-    }
+    if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Tilde.code && event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey)
+        this.showConsole();
 }
 
 WebInspector.documentCanCopy = function(event)
@@ -761,11 +685,17 @@
         event.preventDefault();
 }
 
+/**
+ * @param {string} panel
+ */
 WebInspector.showPanel = function(panel)
 {
     return WebInspector.inspectorView.showPanel(panel);
 }
 
+/**
+ * @param {string} panel
+ */
 WebInspector.panel = function(panel)
 {
     return WebInspector.inspectorView.panel(panel);
@@ -864,6 +794,7 @@
         function callback(nodeId)
         {
             WebInspector._updateFocusedNode(nodeId);
+            InspectorFrontendHost.inspectElementCompleted();
             object.release();
         }
         object.pushNodeToFrontend(callback);
@@ -895,11 +826,7 @@
         return;
     }
 
-    if (hints.databaseId)
-        WebInspector.showPanel("resources").selectDatabase(WebInspector.databaseModel.databaseForId(hints.databaseId));
-    else if (hints.domStorageId)
-        WebInspector.showPanel("resources").selectDOMStorage(WebInspector.domStorageModel.storageForId(hints.domStorageId));
-    else if (hints.copyToClipboard)
+    if (hints.copyToClipboard)
         InspectorFrontendHost.copyText(object.value);
     object.release();
 }
@@ -932,36 +859,6 @@
     WebInspector.showPanel("elements").revealAndSelectNode(nodeId);
 }
 
-WebInspector.showAnchorLocation = function(anchor)
-{
-    var preferredPanel = this.panels[anchor.preferredPanel];
-    if (preferredPanel && WebInspector._showAnchorLocationInPanel(anchor, preferredPanel))
-        return true;
-    if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("sources")))
-        return true;
-    if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("resources")))
-        return true;
-    if (WebInspector._showAnchorLocationInPanel(anchor, this.panel("network")))
-        return true;
-    return false;
-}
-
-WebInspector._showAnchorLocationInPanel = function(anchor, panel)
-{
-    if (!panel)
-        return false;
-
-    var result = panel.showAnchorLocation(anchor);
-    if (result) {
-        // FIXME: support webkit-html-external-link links here.
-        if (anchor.classList.contains("webkit-html-external-link")) {
-            anchor.classList.remove("webkit-html-external-link");
-            anchor.classList.add("webkit-html-resource-link");
-        }
-    }
-    return result;
-}
-
 WebInspector.evaluateInConsole = function(expression, showResultOnly)
 {
     this.showConsole();
@@ -970,52 +867,11 @@
 
 WebInspector.addMainEventListeners = function(doc)
 {
-    doc.addEventListener("keydown", this.documentKeyDown.bind(this), true);
     doc.addEventListener("keydown", this.postDocumentKeyDown.bind(this), false);
     doc.addEventListener("beforecopy", this.documentCanCopy.bind(this), true);
     doc.addEventListener("copy", this.documentCopy.bind(this), false);
     doc.addEventListener("contextmenu", this.contextMenuEventFired.bind(this), true);
-    doc.addEventListener("click", this.documentClick.bind(this), true);
-}
-
-WebInspector.Zoom = {
-    Table: [0.25, 0.33, 0.5, 0.66, 0.75, 0.9, 1, 1.1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4, 5],
-    DefaultOffset: 6
-}
-
-
-// Ex-DevTools.js content
-
-/**
- * @param {!ExtensionDescriptor} extensionInfo
- * @return {string}
- */
-function buildPlatformExtensionAPI(extensionInfo)
-{
-    return "var extensionInfo = " + JSON.stringify(extensionInfo) + ";" +
-       "var tabId = " + WebInspector._inspectedTabId + ";" +
-       platformExtensionAPI.toString();
-}
-
-WebInspector.setInspectedTabId = function(tabId)
-{
-    WebInspector._inspectedTabId = tabId;
-}
-
-/**
- * @return {string}
- */
-WebInspector.getSelectionBackgroundColor = function()
-{
-    return InspectorFrontendHost.getSelectionBackgroundColor();
-}
-
-/**
- * @return {string}
- */
-WebInspector.getSelectionForegroundColor = function()
-{
-    return InspectorFrontendHost.getSelectionForegroundColor();
+    doc.addEventListener("click", this.documentClick.bind(this), false);
 }
 
 window.DEBUG = true;
diff --git a/Source/devtools/front_end/inspectorCommon.css b/Source/devtools/front_end/inspectorCommon.css
index 421a555..cfc4ba9 100644
--- a/Source/devtools/front_end/inspectorCommon.css
+++ b/Source/devtools/front_end/inspectorCommon.css
@@ -32,14 +32,6 @@
   font-family: 'Segoe UI', Tahoma, sans-serif;
 }
 
-body.dock-to-right:not(.undocked) {
-    border-left: 1px solid rgb(80, 80, 80);
-}
-
-body.dock-to-right.inactive:not(.undocked) {
-    border-left: 1px solid rgb(64%, 64%, 64%);
-}
-
 * {
     box-sizing: border-box;
 }
@@ -108,10 +100,6 @@
     overflow: hidden;
 }
 
-.resize-enabled .resources-dividers-label-bar {
-    cursor: move;
-}
-
 .resources-divider {
     position: absolute;
     width: 1px;
@@ -208,6 +196,12 @@
     padding: 0;
 }
 
+.network-timing-table td.caution {
+    font-weight: bold;
+    color: rgb(255, 128, 0);
+    padding: 2px 0;
+}
+
 .network-timing-row {
     position: relative;
     height: 16px;
diff --git a/Source/devtools/front_end/inspectorSyntaxHighlight.css b/Source/devtools/front_end/inspectorSyntaxHighlight.css
index 7d904c0..e29896c 100644
--- a/Source/devtools/front_end/inspectorSyntaxHighlight.css
+++ b/Source/devtools/front_end/inspectorSyntaxHighlight.css
@@ -66,9 +66,14 @@
     color: brown;
 }
 
+.webkit-html-text-node {
+    unicode-bidi: -webkit-isolate;
+}
+
 .webkit-html-entity-value {
     /* This one is non-standard. */
     background-color: rgba(0, 0, 0, 0.15);
+    unicode-bidi: -webkit-isolate;
 }
 
 .webkit-html-doctype {
@@ -79,11 +84,13 @@
 .webkit-html-attribute-name {
     /* Keep this in sync with view-source.css (.webkit-html-attribute-name) */
     color: rgb(153, 69, 0);
+    unicode-bidi: -webkit-isolate;
 }
 
 .webkit-html-attribute-value {
     /* Keep this in sync with view-source.css (.webkit-html-attribute-value) */
     color: rgb(26, 26, 166);
+    unicode-bidi: -webkit-isolate;
 }
 
 .webkit-html-external-link,
@@ -92,6 +99,12 @@
     color: #00e;
 }
 
+.webkit-html-resource-link {
+    /* Required for consistency with view-source.css, since anchors may not have href attributes */
+    text-decoration: underline;
+    cursor: pointer;
+}
+
 .webkit-html-external-link {
     /* Keep this in sync with view-source.css (.webkit-html-external-link) */
     text-decoration: none;
diff --git a/Source/devtools/front_end/layersPanel.css b/Source/devtools/front_end/layersPanel.css
index 3420420..c558fb8 100644
--- a/Source/devtools/front_end/layersPanel.css
+++ b/Source/devtools/front_end/layersPanel.css
@@ -143,4 +143,22 @@
     font-weight: bold;
 }
 
+.paint-profiler-view canvas {
+    z-index: 200;
+    opacity: 0.8;
+    background-color: white;
+}
+
+.paint-profiler-view {
+    overflow: hidden;
+}
+
+.paint-profiler-view .overview-grid-dividers-background,
+.paint-profiler-view .overview-grid-window {
+    bottom: 0;
+    height: auto;
+}
+
+.paint-profiler-view .overview-grid-window-resizer {
+    z-index: 2000;
 }
diff --git a/Source/devtools/front_end/modules.js b/Source/devtools/front_end/modules.js
new file mode 100644
index 0000000..1fe1cde
--- /dev/null
+++ b/Source/devtools/front_end/modules.js
@@ -0,0 +1,262 @@
+/*
+ * Copyright (C) 2014 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:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS 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 GOOGLE INC.
+ * OR ITS 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.
+ */
+
+/**
+ * @type {!Array.<!WebInspector.ModuleManager.ModuleDescriptor>}
+ */
+var allDescriptors = [
+    {
+        name: "elements",
+        extensions: [
+            {
+                type: "@WebInspector.Panel",
+                name: "elements",
+                title: "Elements",
+                order: 0,
+                className: "WebInspector.ElementsPanel"
+            },
+            {
+                type: "@WebInspector.ContextMenu.Provider",
+                contextTypes: ["WebInspector.RemoteObject", "WebInspector.DOMNode"],
+                className: "WebInspector.ElementsPanel.ContextMenuProvider"
+            },
+            {
+                type: "@WebInspector.Drawer.ViewFactory",
+                name: "emulation",
+                title: "Emulation",
+                order: "10",
+                setting: "showEmulationViewInDrawer",
+                className: "WebInspector.ElementsPanel.OverridesViewFactory"
+            },
+            {
+                type: "@WebInspector.Drawer.ViewFactory",
+                name: "rendering",
+                title: "Rendering",
+                order: "11",
+                setting: "showRenderingViewInDrawer",
+                className: "WebInspector.ElementsPanel.RenderingViewFactory"
+            },
+            {
+                type: "@WebInspector.Renderer",
+                contextTypes: ["WebInspector.DOMNode"],
+                className: "WebInspector.ElementsTreeOutline.Renderer"
+            },
+            {
+                type: "@WebInspector.Revealer",
+                contextTypes: ["WebInspector.DOMNode"],
+                className: "WebInspector.ElementsPanel.DOMNodeRevealer"
+            }
+        ],
+        scripts: [ "ElementsPanel.js" ]
+    },
+    {
+        name: "network",
+        extensions: [
+            {
+                type: "@WebInspector.Panel",
+                name: "network",
+                title: "Network",
+                order: 1,
+                className: "WebInspector.NetworkPanel"
+            },
+            {
+                type: "@WebInspector.ContextMenu.Provider",
+                contextTypes: ["WebInspector.NetworkRequest", "WebInspector.Resource", "WebInspector.UISourceCode"],
+                className: "WebInspector.NetworkPanel.ContextMenuProvider"
+            },
+            {
+                type: "@WebInspector.Revealer",
+                contextTypes: ["WebInspector.NetworkRequest"],
+                className: "WebInspector.NetworkPanel.RequestRevealer"
+            }
+        ],
+        scripts: [ "NetworkPanel.js" ]
+    },
+    {
+        name: "codemirror",
+        extensions: [
+            {
+                type: "@WebInspector.InplaceEditor",
+                className: "WebInspector.CodeMirrorUtils"
+            },
+            {
+              type: "@WebInspector.TokenizerFactory",
+              className: "WebInspector.CodeMirrorUtils.TokenizerFactory"
+            },
+        ],
+        scripts: [ "CodeMirrorTextEditor.js" ]
+    },
+    {
+        name: "sources",
+        extensions: [
+            {
+                type: "@WebInspector.Panel",
+                name: "sources",
+                title: "Sources",
+                order: 2,
+                className: "WebInspector.SourcesPanel"
+            },
+            {
+                type: "@WebInspector.ContextMenu.Provider",
+                contextTypes: ["WebInspector.UISourceCode", "WebInspector.RemoteObject"],
+                className: "WebInspector.SourcesPanel.ContextMenuProvider"
+            },
+            {
+                type: "@WebInspector.SearchScope",
+                className: "WebInspector.SourcesSearchScope"
+            },
+            {
+                type: "@WebInspector.Drawer.ViewFactory",
+                name: "search",
+                title: "Search",
+                order: "1",
+                className: "WebInspector.AdvancedSearchController.ViewFactory"
+            },
+            {
+                type: "@WebInspector.Revealer",
+                contextTypes: ["WebInspector.UILocation"],
+                className: "WebInspector.SourcesPanel.UILocationRevealer"
+            }
+        ],
+        scripts: [ "SourcesPanel.js" ]
+    },
+    {
+        name: "timeline",
+        extensions: [
+            {
+                type: "@WebInspector.Panel",
+                name: "timeline",
+                title: "Timeline",
+                order: 3,
+                className: "WebInspector.TimelinePanel"
+            }
+        ],
+        scripts: [ "TimelinePanel.js" ]
+    },
+    {
+        name: "profiles",
+        extensions: [
+            {
+                type: "@WebInspector.Panel",
+                name: "profiles",
+                title: "Profiles",
+                order: 4,
+                className: "WebInspector.ProfilesPanel"
+            },
+            {
+                type: "@WebInspector.ContextMenu.Provider",
+                contextTypes: ["WebInspector.RemoteObject"],
+                className: "WebInspector.ProfilesPanel.ContextMenuProvider"
+            }
+        ],
+        scripts: [ "ProfilesPanel.js" ]
+    },
+    {
+        name: "resources",
+        extensions: [
+            {
+                type: "@WebInspector.Panel",
+                name: "resources",
+                title: "Resources",
+                order: 5,
+                className: "WebInspector.ResourcesPanel"
+            },
+            {
+                type: "@WebInspector.Revealer",
+                contextTypes: ["WebInspector.Resource"],
+                className: "WebInspector.ResourcesPanel.ResourceRevealer"
+            }
+        ],
+        scripts: [ "ResourcesPanel.js" ]
+    },
+    {
+        name: "audits",
+        extensions: [
+            {
+                type: "@WebInspector.Panel",
+                name: "audits",
+                title: "Audits",
+                order: 6,
+                className: "WebInspector.AuditsPanel"
+            }
+        ],
+        scripts: [ "AuditsPanel.js" ]
+    },
+    {
+        name: "console",
+        extensions: [
+            {
+                type: "@WebInspector.Panel",
+                name: "console",
+                title: "Console",
+                order: 20,
+                className: "WebInspector.ConsolePanel"
+            },
+            {
+                type: "@WebInspector.Drawer.ViewFactory",
+                name: "console",
+                title: "Console",
+                order: "0",
+                className: "WebInspector.ConsolePanel.ViewFactory"
+            }
+        ]
+    },
+    {
+        extensions: [
+            {
+                type: "@WebInspector.ExtensionServerAPI",
+                className: "WebInspector.ExtensionServer"
+            }
+        ],
+        name: "extensions",
+        scripts: [ "ExtensionServer.js" ]
+    },
+    {
+        name: "layers",
+        extensions: [
+            {
+                type: "@WebInspector.Panel",
+                name: "layers",
+                title: "Layers",
+                order: 7,
+                className: "WebInspector.LayersPanel"
+            }
+        ],
+        scripts: [ "LayersPanel.js" ]
+    },
+    {
+        name: "handler-registry",
+        extensions: [
+            {
+                type: "@WebInspector.ContextMenu.Provider",
+                contextTypes: ["WebInspector.UISourceCode", "WebInspector.Resource", "WebInspector.NetworkRequest", "Node"],
+                className: "WebInspector.HandlerRegistry.ContextMenuProvider"
+            }
+        ]
+    }
+];
diff --git a/Source/devtools/front_end/networkLogView.css b/Source/devtools/front_end/networkLogView.css
index c34afbc..8cfa70c 100644
--- a/Source/devtools/front_end/networkLogView.css
+++ b/Source/devtools/front_end/networkLogView.css
@@ -49,12 +49,7 @@
 }
 
 .network-log-grid.data-grid table.data {
-    background-size: 1px 82px;
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), color-stop(0.5, rgba(0, 0, 0, 0)), color-stop(0.5, rgba(0, 0, 0, 0.05)), to(rgba(0, 0, 0, 0.05)));
-}
-
-.network-log-grid.data-grid.small table.data {
-    background-size: 1px 42px;
+    background: transparent;
 }
 
 .network-log-grid.data-grid td {
@@ -85,7 +80,7 @@
 }
 
 .network-log-grid.data-grid .data-container {
-    top: 31px;
+    top: 33px;
 }
 
 .network-log-grid.data-grid.small .data-container {
@@ -108,6 +103,10 @@
     height: 41px;
 }
 
+.network-log-grid.data-grid tr.odd:not(.selected) {
+    background-color: #f3f3f3;
+}
+
 .network-log-grid.data-grid tr.offscreen > td > div {
     display: none;
 }
@@ -343,11 +342,16 @@
     top: 0;
     bottom: 0;
     margin: auto -7px;
-    border-width: 6px 7px;
-    height: 0;
+    height: 12px;
     min-width: 14px;
     opacity: 0.65;
-    -webkit-border-image: url(Images/timelinePillGray.png) 7 7 7 7;
+    border-width: 1px;
+    border-style: solid;
+    border-radius: 7px / 6px;
+    box-shadow: inset 0 1px 1px 0px rgba(255, 255, 255, 0.8);
+
+    border-color: hsl(0, 0%, 65%);
+    background: linear-gradient(0deg, hsl(0, 0%, 73%), hsl(0, 0%, 78%));
 }
 
 .network-graph-bar.waiting,
@@ -359,63 +363,94 @@
 
 
 .resource-cached .network-graph-bar {
-    -webkit-border-image: url(Images/timelineHollowPillGray.png) 7 7 7 7;
+    background: hsl(0, 0%, 90%);
+    box-shadow: inset 0 1px 1px 0px rgba(255, 255, 255, 0.8),
+                inset 0 0 0 2px hsl(0, 0%, 73%),
+                inset 0 1px 0 2px hsla(0, 0%, 76%, 0.85);
 }
 
 .network-type-document .network-graph-bar {
-    -webkit-border-image: url(Images/timelinePillBlue.png) 7 7 7 7;
+    border-color: hsl(215, 49%, 52%);
+    background: linear-gradient(0deg, hsl(215, 72%, 61%), hsl(215, 100%, 69%));
 }
 
 .network-type-document.resource-cached .network-graph-bar {
-    -webkit-border-image: url(Images/timelineHollowPillBlue.png) 7 7 7 7;
+    background: hsl(215, 99%, 86%);
+    box-shadow: inset 0 1px 1px 0px rgba(255, 255, 255, 0.8),
+                inset 0 0 0 2px hsl(215, 71%, 61%),
+                inset 0 1px 0 2px hsla(215, 58%, 65%, 0.85);
 }
 
 .network-type-stylesheet .network-graph-bar {
-    -webkit-border-image: url(Images/timelinePillGreen.png) 7 7 7 7;
+    border-color: hsl(99, 34%, 52%);
+    background: linear-gradient(0deg, hsl(100, 50%, 61%), hsl(90, 50%, 64%));
 }
 
 .network-type-stylesheet.resource-cached .network-graph-bar {
-    -webkit-border-image: url(Images/timelineHollowPillGreen.png) 7 7 7 7;
+    background: hsl(99, 100%, 86%);
+    box-shadow: inset 0 1px 1px 0px rgba(255, 255, 255, 0.8),
+                inset 0 0 0 2px hsl(99, 72%, 61%),
+                inset 0 1px 0 2px hsla(99, 59%, 65%, 0.85);
 }
 
 .network-type-image .network-graph-bar {
-    -webkit-border-image: url(Images/timelinePillPurple.png) 6 7 6 7;
+    border-color: hsl(272, 31%, 52%);
+    background: linear-gradient(0deg, hsl(272, 46%, 61%), hsl(272, 64%, 69%));
 }
 
 .network-type-image.resource-cached .network-graph-bar {
-    border-image: url(Images/timelineHollowPillPurple.png) 7 7 7 7;
+    background: hsl(272, 65%, 86%);
+    box-shadow: inset 0 1px 1px 0px rgba(255, 255, 255, 0.8),
+                inset 0 0 0 2px hsl(272, 47%, 61%),
+                inset 0 1px 0 2px hsla(273, 38%, 65%, 0.85);
 }
 
 .network-type-font .network-graph-bar {
-    -webkit-border-image: url(Images/timelinePillRed.png) 7 7 7 7;
+    border-color: hsl(8, 49%, 52%);
+    background: linear-gradient(0deg, hsl(8, 72%, 61%), hsl(8, 100%, 69%));
 }
 
 .network-type-font.resource-cached .network-graph-bar {
-    -webkit-border-image: url(Images/timelineHollowPillRed.png) 7 7 7 7;
+    background: hsl(8, 100%, 86%);
+    box-shadow: inset 0 1px 1px 0px rgba(255, 255, 255, 0.8),
+                inset 0 0 0 2px hsl(8, 72%, 61%),
+                inset 0 1px 0 2px hsla(8, 59%, 65%, 0.85);
 }
 
 .network-type-script .network-graph-bar {
-    -webkit-border-image: url(Images/timelinePillOrange.png) 7 7 7 7;
+    border-color: hsl(31, 49%, 52%);
+    background: linear-gradient(0deg, hsl(31, 72%, 61%), hsl(31, 100%, 69%));
 }
 
 .network-type-script.resource-cached .network-graph-bar {
-    -webkit-border-image: url(Images/timelineHollowPillOrange.png) 7 7 7 7;
+    background: hsl(31, 100%, 86%);
+    box-shadow: inset 0 1px 1px 0px rgba(255, 255, 255, 0.8),
+                inset 0 0 0 2px hsl(31, 78%, 61%),
+                inset 0 1px 0 2px hsla(31, 64%, 65%, 0.85);
 }
 
 .network-type-xhr .network-graph-bar {
-    -webkit-border-image: url(Images/timelinePillYellow.png) 7 7 7 7;
+    border-color: hsl(53, 49%, 52%);
+    background: linear-gradient(0deg, hsl(53, 72%, 61%), hsl(53, 100%, 69%));
 }
 
 .network-type-xhr.resource-cached .network-graph-bar {
-    -webkit-border-image: url(Images/timelineHollowPillYellow.png) 7 7 7 7;
+    background: hsl(53, 100%, 86%);
+    box-shadow: inset 0 1px 1px 0px rgba(255, 255, 255, 0.8),
+                inset 0 0 0 2px hsl(53, 72%, 61%),
+                inset 0 1px 0 2px hsla(54, 59%, 65%, 0.85);
 }
 
 .network-type-websocket .network-graph-bar {
-    -webkit-border-image: url(Images/timelinePillGray.png) 7 7 7 7;
+    border-color: hsl(0, 0%, 65%);
+    background: linear-gradient(0deg, hsl(0, 0%, 73%), hsl(0, 0%, 78%));
 }
 
 .network-type-websocket.resource-cached .network-graph-bar {
-   -webkit-border-image: url(Images/timelineHollowPillGray.png) 7 7 7 7;
+    background: hsl(0, 0%, 90%);
+    box-shadow: inset 0 1px 1px 0px rgba(255, 255, 255, 0.8),
+                inset 0 0 0 2px hsl(0, 0%, 73%),
+                inset 0 1px 0 2px hsla(0, 0%, 76%, 0.85);
 }
 
 .network-dim-cell {
diff --git a/Source/devtools/front_end/networkPanel.css b/Source/devtools/front_end/networkPanel.css
index e52a63b..cf7fa8f 100644
--- a/Source/devtools/front_end/networkPanel.css
+++ b/Source/devtools/front_end/networkPanel.css
@@ -51,6 +51,10 @@
     display: block;
 }
 
+.network.panel .panel-status-bar {
+    border-bottom: 1px solid rgb(179, 179, 179);
+}
+
 .network.panel .sidebar {
     position: absolute;
     top: 0;
@@ -85,12 +89,7 @@
 
 .network-item-view {
     display: none;
-    position: absolute;
     background: white;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
 }
 
 .network-item-view.visible {
@@ -192,10 +191,11 @@
 }
 
 .resource-cookies-view.visible {
-    display: block;
+    display: flex;
 }
 
 .resource-cookies-view .data-grid {
+    flex: auto;
     height: 100%;
 }
 
@@ -227,33 +227,33 @@
 
 .resource-timing-view .network-timing-bar.blocking,
 .resource-timing-view .network-timing-bar.proxy {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(242, 242, 194)), to(rgb(204, 204, 102)));
+    background-image: linear-gradient(to bottom, rgb(242, 242, 194), rgb(204, 204, 102));
     border-left: 1px solid rgb(204, 204, 102);
 }
 
 .resource-timing-view .network-timing-bar.dns {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 242, 194)), to(rgb(102, 204, 102)));
+    background-image: linear-gradient(to bottom, rgb(194, 242, 194), rgb(102, 204, 102));
     border-left: 1px solid rgb(102, 204, 102);
 }
 
 .resource-timing-view .network-timing-bar.connecting,
 .resource-timing-view .network-timing-bar.ssl {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 242, 242)), to(rgb(102, 204, 204)));
+    background-image: linear-gradient(to bottom, rgb(194, 242, 242), rgb(102, 204, 204));
     border-left: 1px solid rgb(102, 204, 204);
 }
 
 .resource-timing-view .network-timing-bar.sending {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 242)), to(rgb(102, 102, 204)));
+    background-image: linear-gradient(to bottom, rgb(194, 194, 242), rgb(102, 102, 204));
     border-left: 1px solid rgb(102, 102, 204);
 }
 
 .resource-timing-view .network-timing-bar.waiting {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(242, 194, 242)), to(rgb(204, 102, 204)));
+    background-image: linear-gradient(to bottom, rgb(242, 194, 242), rgb(204, 102, 204));
     border-left: 1px solid rgb(204, 102, 204);
 }
 
 .resource-timing-view .network-timing-bar.receiving {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(242, 194, 194)), to(rgb(204, 102, 102)));
+    background-image: linear-gradient(to bottom, rgb(242, 194, 194), rgb(204, 102, 102));
     border-left: 1px solid rgb(204, 102, 102);
 }
 
diff --git a/Source/devtools/front_end/overrides.css b/Source/devtools/front_end/overrides.css
index 993ad43..684cbba 100644
--- a/Source/devtools/front_end/overrides.css
+++ b/Source/devtools/front_end/overrides.css
@@ -30,7 +30,7 @@
 
 
 .overrides-view .tabbed-pane {
-    flex-direction: row;
+    flex-direction: row !important;
 }
 
 .overrides-view .tabbed-pane-header {
@@ -113,7 +113,7 @@
     overflow: hidden;
     white-space: nowrap;
     text-overflow: ellipsis;
-    padding-top: 3px;
+    margin-top: 10px;
 }
 
 .overrides-viewport {
@@ -132,9 +132,13 @@
     height: 20px;
 }
 
+.overrides-view label {
+    display: flex;
+    height: auto;
+}
+
 .overrides-viewport label {
-    display: block;
-    margin-bottom: 5px;
+    margin-bottom: 10px;
 }
 
 .overrides-viewport table {
@@ -161,10 +165,13 @@
 }
 
 .overrides-sensors > label {
-    display: block;
     margin-bottom: 10px;
 }
 
+.overrides-device, .overrides-viewport, .overrides-user-agent, .overrides-sensors {
+    flex: none !important;
+}
+
 .overrides-sensors input {
     text-align: right;
 }
@@ -216,7 +223,7 @@
 
 .overrides-view .overrides-footer::before {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     width: 10px;
     height: 10px;
     content: "";
diff --git a/Source/devtools/front_end/panelEnablerView.css b/Source/devtools/front_end/panelEnablerView.css
index 7274383..7e37cc8 100644
--- a/Source/devtools/front_end/panelEnablerView.css
+++ b/Source/devtools/front_end/panelEnablerView.css
@@ -90,7 +90,7 @@
     color: rgb(6, 6, 6);
     border: 1px solid rgb(165, 165, 165);
     background-color: rgb(237, 237, 237);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)));
+    background-image: linear-gradient(to bottom, rgb(252, 252, 252), rgb(223, 223, 223));
     border-radius: 12px;
     -webkit-appearance: none;
 }
@@ -100,19 +100,19 @@
     color: rgb(130, 130, 130);
     border-color: rgb(212, 212, 212);
     background-color: rgb(239, 239, 239);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(250, 250, 250)), to(rgb(235, 235, 235)));
+    background-image: linear-gradient(to bottom, rgb(250, 250, 250), rgb(235, 235, 235));
 }
 
 .panel-enabler-view button:active:not(.status-bar-item) {
     background-color: rgb(215, 215, 215);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 194)), to(rgb(239, 239, 239)));
+    background-image: linear-gradient(to bottom, rgb(194, 194, 194), rgb(239, 239, 239));
 }
 
 .panel-enabler-view input[type="radio"] {
     height: 17px;
     width: 17px;
     border: 1px solid rgb(165, 165, 165);
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)));
+    background-image: linear-gradient(to bottom, rgb(252, 252, 252), rgb(223, 223, 223));
     border-radius: 8px;
     -webkit-appearance: none;
     vertical-align: middle;
@@ -120,15 +120,15 @@
 }
 
 .panel-enabler-view input[type="radio"]:active:not(:disabled) {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 194)), to(rgb(239, 239, 239)));
+    background-image: linear-gradient(to bottom, rgb(194, 194, 194), rgb(239, 239, 239));
 }
 
 .panel-enabler-view input[type="radio"]:checked {
     background: url(Images/radioDot.png) center no-repeat,
-                -webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)));
+                linear-gradient(to bottom, rgb(252, 252, 252), rgb(223, 223, 223));
 }
 
 .panel-enabler-view input[type="radio"]:checked:active {
     background: url(Images/radioDot.png) center no-repeat,
-                -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 194)), to(rgb(239, 239, 239)));
+                linear-gradient(to bottom, rgb(194, 194, 194), rgb(239, 239, 239));
 }
diff --git a/Source/devtools/front_end/profilesPanel.css b/Source/devtools/front_end/profilesPanel.css
index 7ce4bac..fb38dda 100644
--- a/Source/devtools/front_end/profilesPanel.css
+++ b/Source/devtools/front_end/profilesPanel.css
@@ -34,6 +34,19 @@
     position: relative;
 }
 
+.profile-view .data-grid table.data {
+    background: white;
+}
+
+.profile-view .data-grid tr:not(.filler):hover td {
+    background-color: rgba(0, 0, 0, 0.1);
+}
+
+.profiles.panel .status-bar {
+    border-bottom: 1px solid rgb(202, 202, 202);
+    border-top: none;
+}
+
 .profiles-status-bar {
     background-color: rgb(236, 236, 236);
     flex: 0 0 23px;
@@ -49,6 +62,11 @@
     flex: auto;
 }
 
+.profiles-sidebar-tree-box > ol {
+    overflow: auto;
+    flex: auto;
+}
+
 .profile-sidebar-tree-item .icon {
     content: url(Images/profileIcon.png);
 }
@@ -61,7 +79,17 @@
     content: url(Images/profileGroupIcon.png);
 }
 
-.profile-view {
+.sidebar-tree-item .title-container > .save-link {
+    text-decoration: underline;
+    margin-left: auto;
+    display: none;
+}
+
+.sidebar-tree-item.selected .title-container > .save-link {
+    display: block;
+}
+
+.cpu-profile-view {
     display: none;
     overflow: hidden;
     position: absolute;
@@ -71,57 +99,57 @@
     bottom: 0;
 }
 
-.profile-view.visible {
-    display: block;
+.cpu-profile-view.visible {
+    display: flex;
 }
 
-.profile-view .data-grid {
+.cpu-profile-view .data-grid {
     border: none;
-    height: 100%;
+    flex: auto;
 }
 
-.profile-view .data-grid th.average-column {
+.cpu-profile-view .data-grid th.average-column {
     text-align: center;
 }
 
-.profile-view .data-grid td.average-column {
+.cpu-profile-view .data-grid td.average-column {
     text-align: right;
 }
 
-.profile-view .data-grid th.self-column {
+.cpu-profile-view .data-grid th.self-column {
     text-align: center;
 }
 
-.profile-view .data-grid td.self-column {
+.cpu-profile-view .data-grid td.self-column {
     text-align: right;
 }
 
-.profile-view .data-grid th.total-column {
+.cpu-profile-view .data-grid th.total-column {
     text-align: center;
 }
 
-.profile-view .data-grid td.total-column {
+.cpu-profile-view .data-grid td.total-column {
     text-align: right;
 }
 
-.profile-view .data-grid .calls-column {
+.cpu-profile-view .data-grid .calls-column {
     text-align: center;
 }
 
 .profile-node-file {
     float: right;
     color: gray;
-    margin-top: -1px;
 }
 
 .profile-warn-marker {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
-    background-position: -201px -105px;
-    padding-left: 14px;
+    background-size: 320px 144px;
+    background-position: -202px -107px;
     width: 10px;
     height: 10px;
     vertical-align: -1px;
+    margin-right: 2px;
+    display: inline-block;
 }
 
 .data-grid tr.selected .profile-node-file {
@@ -159,6 +187,11 @@
 
 .control-profiling {
     -webkit-align-self: flex-start;
+    margin-right: 50px;
+}
+
+.profile-launcher-view > .profile-launcher-view-content > .load-profile {
+    margin-left: 20px;
 }
 
 .profile-launcher-view-content h1 {
@@ -181,11 +214,6 @@
     margin-left: 22px;
 }
 
-.panel-enabler-view.profile-launcher-view button:not(.status-bar-item) {
-    color: rgb(6, 6, 6);
-    margin: 0 0 16px;
-}
-
 .profile-launcher-view-content button.running:not(.status-bar-item) {
     color: red;
 }
@@ -206,6 +234,7 @@
 .profile-canvas-decoration .warning-icon-small {
     margin-right: 4px;
 }
+
 .profile-canvas-decoration {
     color: red;
     margin: -14px 0 13px 22px;
@@ -215,3 +244,9 @@
 .profile-canvas-decoration button {
     margin: 0 0 0 10px !important;
 }
+
+.profile-entry-info {
+    position: absolute;
+    top: 20px;
+    left: 20px;
+}
diff --git a/Source/devtools/front_end/resourceView.css b/Source/devtools/front_end/resourceView.css
index 30fa31e..7c75a6c 100644
--- a/Source/devtools/front_end/resourceView.css
+++ b/Source/devtools/front_end/resourceView.css
@@ -29,16 +29,11 @@
 
 .resource-view {
     display: none;
-    position: absolute;
-    top: 0;
-    right: 0;
-    left: 0;
-    bottom: 0;
     overflow: auto;
 }
 
 .resource-view.visible {
-    display: block;
+    display: flex;
 }
 
 .resource-view.font {
diff --git a/Source/devtools/front_end/resourcesPanel.css b/Source/devtools/front_end/resourcesPanel.css
index 5ec05ce..6a9bcbe 100644
--- a/Source/devtools/front_end/resourcesPanel.css
+++ b/Source/devtools/front_end/resourcesPanel.css
@@ -34,6 +34,7 @@
 .resources.panel .sidebar {
     padding-left: 0;
     z-index: 10;
+    display: block;
 }
 
 .resources.panel .sidebar li {
@@ -47,18 +48,18 @@
 }
 
 .resources.panel .sidebar li.selected .selection {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(162, 177, 207)), to(rgb(120, 138, 177)));
+    background-image: linear-gradient(to bottom, rgb(162, 177, 207), rgb(120, 138, 177));
     border-top: 1px solid #979797;
     height: 18px;
 }
 
 .resources.panel .sidebar :focus li.selected .selection {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(92, 147, 213)), to(rgb(21, 83, 170)));
+    background-image: linear-gradient(to bottom, rgb(92, 147, 213), rgb(21, 83, 170));
     border-top: 1px solid rgb(68, 128, 200);
 }
 
 body.inactive .resources.panel .sidebar li.selected .selection {
-    background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(180, 180, 180)), to(rgb(138, 138, 138)));
+    background-image: linear-gradient(to bottom, rgb(180, 180, 180), rgb(138, 138, 138));
     border-top: 1px solid rgb(151, 151, 151);
 }
 
@@ -82,6 +83,7 @@
     bottom: 23px;
     left: 0;
     right: 0;
+    display: flex;
 }
 
 .resources-status-bar {
@@ -127,7 +129,7 @@
 }
 
 .storage-view.visible {
-    display: block;
+    display: flex;
 }
 
 .storage-view {
@@ -136,7 +138,7 @@
 
 .storage-view .data-grid:not(.inline) {
     border: none;
-    height: 100%;
+    flex: auto;
 }
 
 .storage-view .storage-table-error {
@@ -171,14 +173,14 @@
     margin-top: -7px;
     -webkit-user-select: none;
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
 }
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .database-user-query::before,
 .database-query-prompt::before,
 .database-query-result::before {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
diff --git a/Source/devtools/front_end/sidebarPane.css b/Source/devtools/front_end/sidebarPane.css
index 84d9aab..906ccf0 100644
--- a/Source/devtools/front_end/sidebarPane.css
+++ b/Source/devtools/front_end/sidebarPane.css
@@ -29,7 +29,6 @@
 
 .sidebar-pane {
     position: relative;
-    flex: auto;
 }
 
 .sidebar-pane > .body {
@@ -90,7 +89,7 @@
 
 .sidebar-pane-title::before {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     opacity: 0.5;
     float: left;
     width: 11px;
@@ -104,7 +103,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .sidebar-pane-title::before {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -169,12 +168,10 @@
     background-image: url(Images/paneRefreshButtons.png);
 }
 
-.sidebar-pane-toolbar > label > input {
-    vertical-align: -2px;
-}
-
 .sidebar-pane-toolbar > label.scripts-callstack-async {
+    margin: auto;
     margin-right: 5px;
+    display: flex;
 }
 
 .sidebar-pane-subtitle {
diff --git a/Source/devtools/front_end/sourcesPanel.css b/Source/devtools/front_end/sourcesPanel.css
index af8f122..d4a2dca 100644
--- a/Source/devtools/front_end/sourcesPanel.css
+++ b/Source/devtools/front_end/sourcesPanel.css
@@ -31,14 +31,10 @@
     -webkit-mask-position: -256px 0;
 }
 
-.scripts-pause-on-exceptions-status-bar-item.toggled-all .glyph {
+.scripts-pause-on-exceptions-status-bar-item.toggled-on .glyph {
     background-color: rgb(66, 129, 235);
 }
 
-.scripts-pause-on-exceptions-status-bar-item.toggled-uncaught .glyph {
-    background-color: purple;
-}
-
 .evaluate-snippet-status-bar-item .glyph {
     -webkit-mask-position: -64px -48px;
 }
@@ -47,12 +43,32 @@
     background-color: rgb(66, 129, 235);
 }
 
-#scripts-debug-toolbar {
-    position: relative;
-    margin-top: -1px;
-    height: 24px;
-    border-bottom: 1px solid rgb(202, 202, 202);
+.scripts-debug-toolbar {
+    position: absolute;
+    top: 0;
+    width: 100%;
     background-color: rgb(236, 236, 236);
+    overflow: hidden;
+}
+
+.scripts-debug-toolbar-drawer {
+    flex: 0 0 46px;
+    -webkit-transition: margin-top 0.1s ease-in-out;
+    margin-top: -23px;
+    line-height: 23px;
+    padding-top: 22px;
+    border-bottom: 1px solid rgb(202, 202, 202);
+    background-color: white;
+    overflow: hidden;
+}
+
+.scripts-debug-toolbar-drawer.expanded {
+    margin-top: 0;
+}
+
+.scripts-debug-toolbar-drawer > label {
+    display: flex;
+    padding-left: 3px;
 }
 
 #scripts-editor-toolbar {
@@ -126,15 +142,10 @@
 .script-view {
     display: none;
     overflow: hidden;
-    position: absolute;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    left: 0;
 }
 
 .script-view.visible {
-    display: block;
+    display: flex;
 }
 
 .dedicated-worker-item {
@@ -179,12 +190,6 @@
     right: 0;
 }
 
-div.sidebar-pane-stack#scripts-debug-sidebar-contents,
-#scripts-sidebar-stack-pane {
-    top: 23px;
-    overflow: auto;
-}
-
 .workers-list > li {
     overflow: hidden;
     text-overflow: ellipsis;
@@ -229,15 +234,18 @@
 
 .editor-container-unsaved-committed-changes-icon {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     background-position: -202px -107px;
 }
 
+.sources-status-bar {
+    display: flex;
+}
+
 .sources-status-bar div.resizer-widget {
     width: 18px;
     height: 16px;
     -webkit-transform: rotate(90deg);
-    cursor: ns-resize;
     top: 2px;
     right: 17px;
 }
@@ -248,3 +256,12 @@
     -webkit-transform: rotate(90deg);
     right: 0 !important;
 }
+
+.panel.sources .sidebar-pane-stack {
+    overflow: auto;
+}
+
+.threads-toolbar {
+    padding-left: 10px;
+    margin-top: -1px;
+}
diff --git a/Source/devtools/front_end/sourcesView.css b/Source/devtools/front_end/sourcesView.css
index 84a0200..413f26b 100644
--- a/Source/devtools/front_end/sourcesView.css
+++ b/Source/devtools/front_end/sourcesView.css
@@ -53,6 +53,11 @@
     height: 20px;
 }
 
+#sources-panel-sources-view .sources-status-bar .status-bar-item.status-bar-text {
+    margin: auto 0;
+    height: auto;
+}
+
 #sources-panel-sources-view .source-frame-cursor-position {
     -webkit-user-select: text;
 }
@@ -65,7 +70,7 @@
     background-color: rgb(66, 129, 235);
 }
 
-#sources-panel-sources-view .drag-mask
+#sources-panel-sources-view .drag-mask {
     background-color: transparent;
     z-index: 1000;
 }
diff --git a/Source/devtools/front_end/spectrum.css b/Source/devtools/front_end/spectrum.css
index e5aae8c..b9331fb 100644
--- a/Source/devtools/front_end/spectrum.css
+++ b/Source/devtools/front_end/spectrum.css
@@ -75,15 +75,15 @@
 }
 
 .spectrum-sat {
-    background-image: -webkit-linear-gradient(left, white, rgba(204, 154, 129, 0));
+    background-image: linear-gradient(to right, white, rgba(204, 154, 129, 0));
 }
 
 .spectrum-val {
-    background-image: -webkit-linear-gradient(bottom, black, rgba(204, 154, 129, 0));
+    background-image: linear-gradient(to top, black, rgba(204, 154, 129, 0));
 }
 
 .spectrum-hue {
-    background: -webkit-linear-gradient(bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
+    background: linear-gradient(to top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
 }
 
 .spectrum-dragger {
diff --git a/Source/devtools/front_end/splitView.css b/Source/devtools/front_end/splitView.css
index eef9641..136b44d 100644
--- a/Source/devtools/front_end/splitView.css
+++ b/Source/devtools/front_end/splitView.css
@@ -32,8 +32,9 @@
 
 .split-view-contents {
     overflow: auto;
-    cursor: default;
+    display: flex;
     position: relative;
+    flex-direction: column;
 }
 
 .split-view-sidebar {
@@ -76,6 +77,10 @@
     z-index: 1500;
 }
 
+.split-view.split-view-no-resizer > .split-view-resizer {
+    display: none;
+}
+
 .sidebar-overlay {
     position: absolute;
     top: 0;
diff --git a/Source/devtools/front_end/tabbedPane.css b/Source/devtools/front_end/tabbedPane.css
index 164e28f..1973cf3 100644
--- a/Source/devtools/front_end/tabbedPane.css
+++ b/Source/devtools/front_end/tabbedPane.css
@@ -30,6 +30,7 @@
  
 .tabbed-pane {
     flex: auto;
+    overflow: hidden;
 }
 
 .tabbed-pane-content {
@@ -37,6 +38,7 @@
     overflow: auto;
     flex: auto;
     display: flex;
+    flex-direction: column;
 }
 
 .tabbed-pane-content.has-no-tabs {
diff --git a/Source/devtools/front_end/test-runner.html b/Source/devtools/front_end/test-runner.html
deleted file mode 100644
index bdbe4bb..0000000
--- a/Source/devtools/front_end/test-runner.html
+++ /dev/null
@@ -1,366 +0,0 @@
-<html>
-<script src="jsdifflib.js"></script>
-<script src="utilities.js"></script>
-<script src="DOMExtension.js"></script>
-<script src="treeoutline.js"></script>
-
-<link rel="stylesheet" type="text/css" href="inspector.css">
-<style>
-:focus {
-    outline: none;
-}
-
-.failed {
-    color: red;
-}
-
-.timeout {
-    color: brown;
-}
-
-iframe {
-    width: 0;
-    height: 0;
-    opacity: 0;
-}
-
-</style>
-
-<script>
-
-var layoutTestsServer = "http://localhost:8002/";
-var scannerServer = "http://localhost:8002/";
-var remoteDebuggingServer = "http://localhost:9222/";
-
-var tests = [];
-var skipList = [
-    // HALT
-    "inspector/console/console-api-on-call-frame.html",
-
-    // FAILED
-    "inspector/console/console-dir-global.html",
-    "inspector/console/console-log-toString-object.html",
-    "inspector/console/console-uncaught-exception-in-eval.html",
-    "inspector/elements/edit-dom-actions.html",
-    "inspector/elements/highlight-node-scaled.html",
-    "inspector/elements/highlight-node-scroll.html",
-    "inspector/elements/highlight-node.html",
-    "inspector/elements/highlight-svg-root.html",
-    "inspector/network-status-non-http.html",
-    "inspector/storage-panel-dom-storage-update.html",
-    "inspector/styles/inject-stylesheet.html",
-    "inspector/styles/protocol-css-regions-commands.html",
-    "inspector/styles/region-style-crash.html",
-    "inspector/styles/styles-disable-then-enable-overriden-ua.html",
-    "inspector/styles/styles-url-linkify.html",
-    "inspector/styles/vendor-prefixes.html",
-    "inspector/timeline/timeline-event-dispatch.html",
-    "inspector/timeline/timeline-frames.html",
-    "inspector/timeline/timeline-network-resource.html",
-    "inspector/timeline/timeline-paint.html",
-    "inspector/timeline/timeline-receive-response-event.html",
-
-    // TIMEOUT
-    "inspector/profiler/cpu-profiler-profiling-without-inspector.html",
-    "inspector/profiler/heap-snapshot-inspect-dom-wrapper.html",
-    "inspector/timeline/timeline-network-received-data.html",
-];
-var treeOutline = null;
-
-function run(debug)
-{
-    if (window.runner && debug) {
-        window.runner.continueDebugging();
-        return;
-    }
-
-    if (window.testScannerIframe) 
-        document.body.removeChild(window.testScannerIframe);
-
-    if (window.runner)
-        window.runner.cleanup();
-
-    window.testScannerIframe = document.createElement("iframe");
-    window.testScannerIframe.src = scannerServer + "LayoutTests/http/tests/inspector/resources/test-scanner.html";
-    document.body.appendChild(window.testScannerIframe);
-    window.debug = debug;
-}
-
-function runTests()
-{
-    document.getElementById("outline").removeChildren();
-    treeOutline = new TreeOutline(document.getElementById("outline"));
-
-    document.getElementById("pass").textContent = 0;
-    document.getElementById("skip").textContent = 0;
-    document.getElementById("fail").textContent = 0;
-    document.getElementById("timeout").textContent = 0;
-    document.getElementById("remaining").textContent = tests.length;
-
-    runNextTest();
-}
-
-function interrupt()
-{
-    tests = [];
-}
-
-function runNextTest(lastResult)
-{
-    if (lastResult) {
-        var element = document.getElementById(lastResult);
-        element.textContent = parseInt(element.textContent) + 1;
-
-        element = document.getElementById("remaining");
-        element.textContent = parseInt(element.textContent) - 1;
-        if (window.debug) {
-            document.getElementById("debug").textContent = "Debug";
-            return;
-        }
-    }
-
-    var test;
-    var filter = document.getElementById("filter").value;
-    while (test = tests.shift()) {
-        if (!filter || test[0].match(filter)) {
-            new StandaloneTestRunner(layoutTestsServer + test[0], test[1], runNextTest.bind(null));
-            return;
-        }
-    }
-}
-
-function StandaloneTestRunner(testPath, expected, next)
-{
-    this._testPath = testPath;
-    this._next = next;
-    this._expected = expected;
-    this._pendingMessages = [];
-
-    this._treeElement = new TreeElement(testPath);
-    treeOutline.appendChild(this._treeElement);
-
-    for (var i = 0; !window.debug && i < skipList.length; ++i) {
-        if (testPath.indexOf(skipList[i]) !== -1) {
-            this._treeElement.title = testPath + ": SKIPPED";
-            this._next("skip");
-            return;
-        }
-    }
-    window.runner = this;
-    this._testPage = window.open("about:blank", "inspected", "width=800,height=600");
-
-    window.remoteDebuggingHandshake = this._remoteDebuggingHandshake.bind(this);
-    var script = document.createElement("script");
-    script.src = remoteDebuggingServer + "json?jsonp=remoteDebuggingHandshake";
-    document.head.appendChild(script);
-}
-
-StandaloneTestRunner.FrontendLocation = "inspector.html";
-
-StandaloneTestRunner.prototype = {
-    _remoteDebuggingHandshake: function(data)
-    {
-        for (var i = 0; i < data.length; ++i) {
-            if (data[i].url !== "about:blank")
-                continue;
-            this._debuggerURL = data[i].webSocketDebuggerUrl.replace("://", "=");
-            this._navigateTestPage();
-            break;
-        }
-    },
-
-    _navigateTestPage: function()
-    {
-        this._testPage.location.href = this._testPath;
-        var width = localStorage.getItem('inspectorWidth') || 600;
-        var height = localStorage.getItem('inspectorHeight') || 400;
-        var features = "width=" + Math.max(width , 600) + ",height=" + Math.max(height, 400);
-        this._inspectorWindowLoading = window.open(StandaloneTestRunner.FrontendLocation + "?" + this._debuggerURL, "inspector", features);
-        this._inspectorWindowLoading.dispatchStandaloneTestRunnerMessages = true;
-        
-        window.addEventListener('unload', this.cleanup.bind(this));
-
-        if (!window.debug)
-            this._watchDog = setTimeout(this._timeout.bind(this), 10000);
-    },
-
-    loadCompleted: function()
-    {
-        if (!window.debug) {
-            this._loadCompleted(this);
-            return;
-        }
-        document.getElementById("debug").textContent = "Continue";
-    },
-
-    continueDebugging: function()
-    {
-        this._loadCompleted();
-    },
-
-    _loadCompleted: function()
-    {
-        this._inspectorWindow = this._inspectorWindowLoading;
-        for (var i = 0; i < this._pendingMessages.length; ++i)
-            this._inspectorWindow.postMessage(this._pendingMessages[i], "*");
-        this._pendingMessages = [];
-    },
-
-    closeWebInspector: function()
-    {
-        if (!window.debug)
-            this._inspectorWindow.close();
-    },
-
-    notifyDone: function(actual)
-    {
-        if (this._done)
-            return;
-        this._done = true;
-
-        if (!window.debug) 
-            this.cleanup()
-
-        clearTimeout(this._watchDog);
-
-        this._treeElement.onselect = this.onTreeElementSelect.bind(this);
-
-        // TODO pavel  is the  RHS || condition wanted?
-        if (actual === this._expected || actual === this._expected + "\n") {
-            this._treeElement.title = this._testPath + ": SUCCESS";
-            this._next("pass");
-            return;
-        }
-
-        this._treeElement.title = this._testPath + ": FAILED";
-        this._treeElement.listItemElement.classList.add("failed");
-
-        var baseLines = difflib.stringAsLines(this._expected);
-        var newLines = difflib.stringAsLines(actual);
-        var sm = new difflib.SequenceMatcher(baseLines, newLines);
-        var opcodes = sm.get_opcodes();
-        var lastWasSeparator = false;
-
-        for (var idx = 0; idx < opcodes.length; idx++) {
-            var code = opcodes[idx];
-            var change = code[0];
-            var b = code[1];
-            var be = code[2];
-            var n = code[3];
-            var ne = code[4];
-            var rowCount = Math.max(be - b, ne - n);
-            var topRows = [];
-            var bottomRows = [];
-            for (var i = 0; i < rowCount; i++) {
-                if (change === "delete" || (change === "replace" && b < be)) {
-                    var lineNumber = b++;
-                    this._treeElement.appendChild(new TreeElement("- [" + lineNumber + "] " + baseLines[lineNumber]));
-                }
-
-                if (change === "insert" || (change === "replace" && n < ne)) {
-                    var lineNumber = n++;
-                    this._treeElement.appendChild(new TreeElement("+ [" + lineNumber + "] " + newLines[lineNumber]));
-                }
-
-                if (change === "equal") {
-                    b++;
-                    n++;
-                }
-            }
-        }
-
-        this._next("fail");
-    },
-
-    evaluateInWebInspector: function(callId, script)
-    {
-        if (this._inspectorWindow)
-            this._inspectorWindow.postMessage(["evaluateForTest", callId, script], "*");
-        else
-            this._pendingMessages.push(["evaluateForTest", callId, script]);
-    },
-
-    _timeout: function()
-    {
-        this._treeElement.title = this._testPath + ": TIMEOUT";
-        this._treeElement.listItemElement.classList.add("timeout");
-        this._done = true;
-        this.cleanup();
-        this._next("timeout");
-    },
-
-    cleanup: function ()
-    {
-        localStorage.setItem('inspectorWidth', this._inspectorWindowLoading.outerWidth);
-        localStorage.setItem('inspectorHeight', this._inspectorWindowLoading.outerHeight);
-        this._inspectorWindowLoading.close();
-        this._testPage.close();
-        delete window.runner;
-    },
-
-    onTreeElementSelect: function () 
-    {
-        var baseEndSentinel = '/inspector/';
-        var baseChars = this._testPath.indexOf(baseEndSentinel) + baseEndSentinel.length;
-        if (baseChars > 0) 
-            document.getElementById("filter").value = this._testPath.substr(baseChars);
-    },
-
-    display: function() { }
-}
-
-function onMessageFromTestPage(event)
-{
-    var signature = event.data;
-    var method = signature.shift();
-    if (method === "tests") {
-        tests = signature[0];
-        runTests();
-        return;
-    }
-
-    if (window.runner)
-        window.runner[method].apply(window.runner, signature);
-}
-
-function onload()
-{
-    var queryParamsObject = {};
-    var queryParams = window.location.search;
-    if (!queryParams)
-        return;
-    var params = queryParams.substring(1).split("&");
-    for (var i = 0; i < params.length; ++i) {
-        var pair = params[i].split("=");
-        queryParamsObject[pair[0]] = pair[1];
-    }
-    if ("filter" in queryParamsObject)
-        document.getElementById("filter").value = queryParamsObject["filter"];
-}
-
-window.addEventListener("message", onMessageFromTestPage, true);
-
-</script>
-<body onload="onload()">
-This is a standalone test suite for inspector front-end. Here is how you run it:
-<ul>
-<li>Check out WebKit source tree: git clone http://git.chromium.org/external/Webkit.git</li>
-<li>Run "Tools/Scripts/new-run-webkit-httpd --root=. --port=8002 --server=start"</li>
-<li>Run Chrome Canary (ToT Chromium) with following flags: "--remote-debugging-port=9222 --user-data-dir=testProfile http://localhost:8002/Source/devtools/front_end/test-runner.html"</li>
-</ul>
-
-<button onclick="run()">Run</button>
-<button id="debug" onclick="run(true)">Debug</button>
-<button onclick="interrupt()">Interrupt</button>
-Filter: <input id="filter" type="text" size="40"></input><small><i>Click on results to load filter</i></small><br>
-
-<span>Passed: <span id="pass">0</span></span>
-<span>Failed: <span id="fail">0</span></span>
-<span>Timeout: <span id="timeout">0</span></span>
-<span>Skipped: <span id="skip">0</span></span>
-<span>Remaining: <span id="remaining">0</span><br>
-
-<ol id="outline" style="font-size: 12px !important" class="source-code outline-disclosure"></ol>
-
-</body>
-</html>
diff --git a/Source/devtools/front_end/timelinePanel.css b/Source/devtools/front_end/timelinePanel.css
index 60b66f2..37778cd 100644
--- a/Source/devtools/front_end/timelinePanel.css
+++ b/Source/devtools/front_end/timelinePanel.css
@@ -61,7 +61,11 @@
     background-color: rgb(255, 255, 255);
 }
 
-.timeline-frame-overview #timeline-overview-grid {
+.timeline-frames-view .timeline-records-counter {
+    display: none;
+}
+
+.timeline-frames-view #timeline-overview-grid {
     display: none;
 }
 
@@ -69,10 +73,9 @@
     pointer-events: auto;
 }
 
-.timeline-frame-overview .overview-grid-window,
-.timeline-frame-overview .overview-grid-dividers-background,
-.timeline-frame-overview .overview-grid-window-resizer {
-    height: 15px;
+.timeline-frames-view .overview-grid-window,
+.timeline-frames-view .overview-grid-dividers-background {
+    height: 100%;
 }
 
 #timeline-overview-grid #resources-graphs {
@@ -89,10 +92,23 @@
     overflow-x: hidden;
 }
 
+.timeline-records-view {
+    overflow: hidden !important;
+}
+
 .timeline-details-split {
     flex: auto;
 }
 
+.timeline-view {
+    flex: auto;
+}
+
+.timeline-view-stack {
+    flex: auto;
+    display: flex;
+}
+
 #timeline-container .webkit-html-external-link,
 #timeline-container .webkit-html-resource-link {
     color: inherit;
@@ -139,7 +155,7 @@
     display: inline-block;
     -webkit-user-select: none;
     -webkit-mask-image: url(Images/statusbarButtonGlyphs.png);
-    -webkit-mask-size: 320px 120px;
+    -webkit-mask-size: 320px 144px;
     width: 10px;
     height: 10px;
     content: "";
@@ -151,7 +167,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .timeline-tree-item-expand-arrow {
-    -webkit-mask-image: url(Images/statusbarButtonGlyphs2x.png);
+    -webkit-mask-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -165,7 +181,7 @@
 
 .timeline-expandable-arrow {
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     opacity: 0.5;
     width: 10px;
     height: 10px;
@@ -176,7 +192,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .timeline-expandable-arrow {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -214,7 +230,7 @@
 .timeline-tree-item-warning {
     display: block;
     background-image: url(Images/statusbarButtonGlyphs.png);
-    background-size: 320px 120px;
+    background-size: 320px 144px;
     width: 10px;
     height: 10px;
     float: right;
@@ -229,7 +245,7 @@
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 .timeline-tree-item-warning {
-    background-image: url(Images/statusbarButtonGlyphs2x.png);
+    background-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -263,14 +279,17 @@
 }
 
 #timeline-overview-pane {
-    flex: auto;
+    flex: 0 0 80px;
     position: relative;
+    overflow: hidden;
 }
 
 #timeline-overview-container {
+    display: flex;
     flex: auto;
     position: relative;
     height: 80px;
+    overflow: hidden;
 }
 
 #timeline-overview-container canvas {
@@ -406,7 +425,7 @@
 }
 
 #timeline-overview-sidebar .sidebar-tree {
-    height: 100%;
+    flex: auto;
 }
 
 #timeline-overview-sidebar .sidebar-tree-item {
@@ -441,13 +460,13 @@
     height: 24px;
     margin: 0;
     -webkit-mask-image: url(Images/statusbarButtonGlyphs.png);
-    -webkit-mask-size: 320px 120px;
+    -webkit-mask-size: 320px 144px;
     background-color: black;
 }
 
 @media (-webkit-min-device-pixel-ratio: 1.5) {
 #timeline-overview-sidebar .icon {
-    -webkit-mask-image: url(Images/statusbarButtonGlyphs2x.png);
+    -webkit-mask-image: url(Images/statusbarButtonGlyphs_2x.png);
 }
 } /* media */
 
@@ -479,21 +498,28 @@
     bottom: 5px;
 }
 
-#memory-counters-graph {
-    top: 15px;
-    border-right: 1px solid rgb(196, 196, 196);
-}
-
 #memory-graphs-canvas-container {
     overflow: hidden;
+    flex: auto;
+    position: relative;
 }
 
-#memory-graphs-canvas-container.dom-counters .resources-dividers {
-    top: 15px;
+#memory-counters-graph {
+    flex: auto;
+}
+
+#memory-graphs-canvas-container .memory-counter-marker {
+    position: absolute;
+    border-radius: 3px;
+    width: 5px;
+    height: 5px;
+    margin-left: -3px;
+    margin-top: -2px;
 }
 
 #memory-graphs-container .split-view-contents-first {
     background-color: rgb(236, 236, 236);
+    overflow-y: hidden;
 }
 
 #memory-graphs-container .sidebar-tree-section {
@@ -505,9 +531,10 @@
     white-space: nowrap;
 }
 
-.memory-counter-sidebar-info .swatch{
+.memory-counter-sidebar-info .swatch {
     background-image: none;
-    border: 1px solid black;
+    border: 1px solid rgba(0,0,0,0.3);
+    opacity: 0.5;
 }
 
 .memory-counter-sidebar-info.bottom-border-visible {
@@ -523,8 +550,11 @@
 }
 
 #counter-values-bar {
+    flex: 0 0 18px;
     border-bottom: solid 1px lightgray;
-    cursor: ns-resize;
+    width: 100%;
+    overflow: hidden;
+    line-height: 18px;
 }
 
 .timeline .resources-event-divider {
@@ -572,7 +602,7 @@
     color: black;
     text-align: center;
     padding-top: 3px;
-    z-index: 350;
+    z-index: 220;
     pointer-events: auto;
 }
 
@@ -588,12 +618,13 @@
 .timeline-utilization-strips {
     height: 19px;
     padding: 1px 0;
+    justify-content: center;
 }
 
 .timeline-utilization-strip {
-    z-index: 350;
+    z-index: 250;
     overflow: hidden;
-    flex: auto;
+    flex: 0 1 12px;
     position: relative;
 }
 
@@ -653,15 +684,6 @@
     float: right;
 }
 
-.highlighted-timeline-record {
-    -webkit-animation: "timeline_record_highlight" 2s 0s;
-}
-
-@-webkit-keyframes timeline_record_highlight {
-    from {background-color: rgba(255, 255, 120, 1); }
-    to { background-color: rgba(255, 255, 120, 0); }
-}
-
 .timeline-filters-header {
     flex: 0 0 23px;
     overflow: hidden;
@@ -699,11 +721,12 @@
     flex: 0 0 19px;
     border-bottom: 1px solid rgb(202, 202, 202);
     background-color: rgb(236, 236, 236);
-    cursor: ns-resize;
     white-space: nowrap;
     display: flex;
     color: rgb(92, 110, 129);
     text-shadow: rgba(255, 255, 255, 0.75) 0 1px 0;
+    overflow: hidden;
+    text-overflow: ellipsis;
 }
 
 .timeline-details-view-body {
@@ -804,7 +827,7 @@
     flex: none;
     position: relative;
     margin: 8px 2px;
-    width: 160px;
+    width: 200px;
 }
 
 .timeline-aggregated-info-legend > div {
@@ -816,3 +839,11 @@
 .timeline-aggregated-info .pie-chart {
     margin-left: 20px;
 }
+
+.flame-chart-main-pane {
+    overflow: hidden;
+}
+
+.timeline-flamechart-view #timeline-overview-grid {
+    display: none;
+}
diff --git a/Source/devtools/front_end/treeoutline.js b/Source/devtools/front_end/treeoutline.js
index 822664c..67e3583 100644
--- a/Source/devtools/front_end/treeoutline.js
+++ b/Source/devtools/front_end/treeoutline.js
@@ -55,6 +55,7 @@
     this._treeElementsMap = new Map();
     /** @type {!Map.<!Object, boolean>} */
     this._expandedStateMap = new Map();
+    this.element = listNode;
 }
 
 TreeOutline.prototype.setFocusable = function(focusable)
diff --git a/Source/devtools/front_end/utilities.js b/Source/devtools/front_end/utilities.js
index 6ad96c6..068e50f 100644
--- a/Source/devtools/front_end/utilities.js
+++ b/Source/devtools/front_end/utilities.js
@@ -80,6 +80,29 @@
 }
 
 /**
+ * @return {number}
+ */
+String.prototype.lineCount = function()
+{
+    var lineEndings = this.lineEndings();
+    return lineEndings.length;
+}
+
+/**
+ * @return {string}
+ */
+String.prototype.lineAt = function(lineNumber)
+{
+    var lineEndings = this.lineEndings();
+    var lineStart = lineNumber > 0 ? lineEndings[lineNumber - 1] + 1 : 0;
+    var lineEnd = lineEndings[lineNumber];
+    var lineContent = this.substring(lineStart, lineEnd);
+    if (lineContent.length > 0 && lineContent.charAt(lineContent.length - 1) === "\r")
+        lineContent = lineContent.substring(0, lineContent.length - 1);
+    return lineContent;
+}
+
+/**
  * @param {string} chars
  * @return {string}
  */
@@ -232,6 +255,17 @@
 }
 
 /**
+ * @return {number}
+ */
+String.prototype.hashCode = function()
+{
+    var result = 0;
+    for (var i = 0; i < this.length; ++i)
+        result = result * 3 + this.charCodeAt(i);
+    return result;
+}
+
+/**
  * @param {string} a
  * @param {string} b
  * @return {number}
@@ -552,24 +586,28 @@
     /**
      * Return index of the leftmost element that is equal or greater
      * than the specimen object. If there's no such element (i.e. all
-     * elements are smaller than the specimen) returns array.length.
+     * elements are smaller than the specimen) returns right bound.
      * The function works for sorted array.
+     * When specified, |left| (inclusive) and |right| (exclusive) indices
+     * define the search window.
      *
      * @param {!T} object
      * @param {function(!T,!S):number=} comparator
+     * @param {number=} left
+     * @param {number=} right
      * @return {number}
      * @this {Array.<!S>}
      * @template T,S
      */
-    value: function(object, comparator)
+    value: function(object, comparator, left, right)
     {
         function defaultComparator(a, b)
         {
             return a < b ? -1 : (a > b ? 1 : 0);
         }
         comparator = comparator || defaultComparator;
-        var l = 0;
-        var r = this.length;
+        var l = left || 0;
+        var r = right !== undefined ? right : this.length;
         while (l < r) {
             var m = (l + r) >> 1;
             if (comparator(object, this[m]) > 0)
@@ -586,24 +624,28 @@
     /**
      * Return index of the leftmost element that is greater
      * than the specimen object. If there's no such element (i.e. all
-     * elements are smaller than the specimen) returns array.length.
+     * elements are smaller or equal to the specimen) returns right bound.
      * The function works for sorted array.
+     * When specified, |left| (inclusive) and |right| (exclusive) indices
+     * define the search window.
      *
      * @param {!T} object
      * @param {function(!T,!S):number=} comparator
+     * @param {number=} left
+     * @param {number=} right
      * @return {number}
      * @this {Array.<!S>}
      * @template T,S
      */
-    value: function(object, comparator)
+    value: function(object, comparator, left, right)
     {
         function defaultComparator(a, b)
         {
             return a < b ? -1 : (a > b ? 1 : 0);
         }
         comparator = comparator || defaultComparator;
-        var l = 0;
-        var r = this.length;
+        var l = left || 0;
+        var r = right !== undefined ? right : this.length;
         while (l < r) {
             var m = (l + r) >> 1;
             if (comparator(object, this[m]) >= 0)
@@ -675,29 +717,20 @@
     var result = [];
     var i = 0;
     var j = 0;
-    while (i < array1.length || j < array2.length) {
-        if (i === array1.length) {
-            result = result.concat(array2.slice(j));
-            j = array2.length;
-        } else if (j === array2.length) {
-            result = result.concat(array1.slice(i));
-            i = array1.length;
-        } else {
-            var compareValue = comparator(array1[i], array2[j])
-             if (compareValue < 0) {
-                 if (mergeNotIntersect)
-                    result.push(array1[i]);
-                 ++i;
-             } else if (compareValue > 0) {
-                 if (mergeNotIntersect)
-                     result.push(array2[j]);
-                 ++j;
-             } else {
-                 result.push(array1[i]);
-                 ++i;
-                 ++j;
-             }
-        }
+    while (i < array1.length && j < array2.length) {
+        var compareValue = comparator(array1[i], array2[j]);
+        if (mergeNotIntersect || !compareValue)
+            result.push(compareValue <= 0 ? array1[i] : array2[j]);
+        if (compareValue <= 0)
+            i++;
+        if (compareValue >= 0)
+            j++;
+    }
+    if (mergeNotIntersect) {
+        while (i < array1.length)
+            result.push(array1[i++]);
+        while (j < array2.length)
+            result.push(array2[j++]);
     }
     return result;
 }
@@ -831,11 +864,17 @@
 }
 
 String.standardFormatters = {
+    /**
+     * @return {number}
+     */
     d: function(substitution)
     {
         return !isNaN(substitution) ? substitution : 0;
     },
 
+    /**
+     * @return {number}
+     */
     f: function(substitution, token)
     {
         if (substitution && token.precision > -1)
@@ -843,6 +882,9 @@
         return !isNaN(substitution) ? substitution : (token.precision > -1 ? Number(0).toFixed(token.precision) : 0);
     },
 
+    /**
+     * @return {string}
+     */
     s: function(substitution)
     {
         return substitution;
@@ -1229,6 +1271,7 @@
 
     /**
      * @param {string} key
+     * @return {T|undefined}
      */
     remove: function(key)
     {
@@ -1274,6 +1317,7 @@
 
     /**
      * @param {string} key
+     * @return {T|undefined}
      */
     get: function(key)
     {
@@ -1319,9 +1363,9 @@
  * @param {function(?string)=} callback
  * @return {?string}
  */
-function loadXHR(url, async, callback) 
+function loadXHR(url, async, callback)
 {
-    function onReadyStateChanged() 
+    function onReadyStateChanged()
     {
         if (xhr.readyState !== XMLHttpRequest.DONE)
             return;
@@ -1331,7 +1375,7 @@
             return;
         }
 
-        callback(null); 
+        callback(null);
    }
 
     var xhr = new XMLHttpRequest();
@@ -1341,7 +1385,7 @@
     xhr.send(null);
 
     if (!async) {
-        if (xhr.status === 200) 
+        if (xhr.status === 200)
             return xhr.responseText;
         return null;
     }
@@ -1427,8 +1471,10 @@
     xhr.send(null);
     if (!xhr.responseText)
         throw "empty response arrived for script '" + scriptName + "'";
-    var sourceURL = WebInspector.ParsedURL.completeURL(window.location.href, scriptName); 
-    window.eval(xhr.responseText + "\n//# sourceURL=" + sourceURL);
+    var baseUrl = location.origin + location.pathname;
+    baseUrl = baseUrl.substring(0, baseUrl.lastIndexOf("/"));
+    var sourceURL = baseUrl + "/" + scriptName;
+    self.eval(xhr.responseText + "\n//# sourceURL=" + sourceURL);
 }
 
 var loadScript = importScript;
@@ -1479,3 +1525,10 @@
             this._outgoingCallback();
     }
 }
+
+/**
+ * @param {*} value
+ */
+function suppressUnused(value)
+{
+}
diff --git a/Source/devtools/generate_devtools_grd.target.darwin-arm.mk b/Source/devtools/generate_devtools_grd.target.darwin-arm.mk
index 25374f4..26e1db3 100644
--- a/Source/devtools/generate_devtools_grd.target.darwin-arm.mk
+++ b/Source/devtools/generate_devtools_grd.target.darwin-arm.mk
@@ -18,6 +18,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp)/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp)/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp)/concatenated_devtools_network_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp)/concatenated_devtools_extensions_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_scripts_js_gyp)/concatenated_devtools_scripts_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_timeline_js_gyp)/concatenated_devtools_timeline_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_profiles_js_gyp)/concatenated_devtools_profiles_js.stamp \
@@ -26,6 +27,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_layers_js_gyp)/concatenated_devtools_layers_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_heap_snapshot_worker_js_gyp)/concatenated_heap_snapshot_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_script_formatter_worker_js_gyp)/concatenated_script_formatter_worker_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp)/concatenated_temp_storage_shared_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_css_gyp)/concatenated_devtools_css.stamp
 
 ### Rules for action "generate_devtools_grd":
@@ -33,9 +35,9 @@
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/namedFlowOverflow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeader.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelectedPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/programCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionEmpty.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionFit.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionOverset.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinner.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_generate_devtools_grd_target_generate_devtools_grd ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/cssNamedFlows.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
 
 
 
diff --git a/Source/devtools/generate_devtools_grd.target.darwin-mips.mk b/Source/devtools/generate_devtools_grd.target.darwin-mips.mk
index 25374f4..26e1db3 100644
--- a/Source/devtools/generate_devtools_grd.target.darwin-mips.mk
+++ b/Source/devtools/generate_devtools_grd.target.darwin-mips.mk
@@ -18,6 +18,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp)/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp)/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp)/concatenated_devtools_network_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp)/concatenated_devtools_extensions_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_scripts_js_gyp)/concatenated_devtools_scripts_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_timeline_js_gyp)/concatenated_devtools_timeline_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_profiles_js_gyp)/concatenated_devtools_profiles_js.stamp \
@@ -26,6 +27,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_layers_js_gyp)/concatenated_devtools_layers_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_heap_snapshot_worker_js_gyp)/concatenated_heap_snapshot_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_script_formatter_worker_js_gyp)/concatenated_script_formatter_worker_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp)/concatenated_temp_storage_shared_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_css_gyp)/concatenated_devtools_css.stamp
 
 ### Rules for action "generate_devtools_grd":
@@ -33,9 +35,9 @@
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/namedFlowOverflow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeader.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelectedPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/programCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionEmpty.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionFit.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionOverset.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinner.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_generate_devtools_grd_target_generate_devtools_grd ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/cssNamedFlows.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
 
 
 
diff --git a/Source/devtools/generate_devtools_grd.target.darwin-x86.mk b/Source/devtools/generate_devtools_grd.target.darwin-x86.mk
index 25374f4..26e1db3 100644
--- a/Source/devtools/generate_devtools_grd.target.darwin-x86.mk
+++ b/Source/devtools/generate_devtools_grd.target.darwin-x86.mk
@@ -18,6 +18,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp)/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp)/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp)/concatenated_devtools_network_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp)/concatenated_devtools_extensions_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_scripts_js_gyp)/concatenated_devtools_scripts_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_timeline_js_gyp)/concatenated_devtools_timeline_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_profiles_js_gyp)/concatenated_devtools_profiles_js.stamp \
@@ -26,6 +27,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_layers_js_gyp)/concatenated_devtools_layers_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_heap_snapshot_worker_js_gyp)/concatenated_heap_snapshot_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_script_formatter_worker_js_gyp)/concatenated_script_formatter_worker_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp)/concatenated_temp_storage_shared_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_css_gyp)/concatenated_devtools_css.stamp
 
 ### Rules for action "generate_devtools_grd":
@@ -33,9 +35,9 @@
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/namedFlowOverflow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeader.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelectedPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/programCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionEmpty.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionFit.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionOverset.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinner.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_generate_devtools_grd_target_generate_devtools_grd ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/cssNamedFlows.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
 
 
 
diff --git a/Source/devtools/generate_devtools_grd.target.linux-arm.mk b/Source/devtools/generate_devtools_grd.target.linux-arm.mk
index 25374f4..26e1db3 100644
--- a/Source/devtools/generate_devtools_grd.target.linux-arm.mk
+++ b/Source/devtools/generate_devtools_grd.target.linux-arm.mk
@@ -18,6 +18,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp)/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp)/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp)/concatenated_devtools_network_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp)/concatenated_devtools_extensions_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_scripts_js_gyp)/concatenated_devtools_scripts_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_timeline_js_gyp)/concatenated_devtools_timeline_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_profiles_js_gyp)/concatenated_devtools_profiles_js.stamp \
@@ -26,6 +27,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_layers_js_gyp)/concatenated_devtools_layers_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_heap_snapshot_worker_js_gyp)/concatenated_heap_snapshot_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_script_formatter_worker_js_gyp)/concatenated_script_formatter_worker_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp)/concatenated_temp_storage_shared_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_css_gyp)/concatenated_devtools_css.stamp
 
 ### Rules for action "generate_devtools_grd":
@@ -33,9 +35,9 @@
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/namedFlowOverflow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeader.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelectedPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/programCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionEmpty.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionFit.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionOverset.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinner.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_generate_devtools_grd_target_generate_devtools_grd ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/cssNamedFlows.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
 
 
 
diff --git a/Source/devtools/generate_devtools_grd.target.linux-mips.mk b/Source/devtools/generate_devtools_grd.target.linux-mips.mk
index 25374f4..26e1db3 100644
--- a/Source/devtools/generate_devtools_grd.target.linux-mips.mk
+++ b/Source/devtools/generate_devtools_grd.target.linux-mips.mk
@@ -18,6 +18,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp)/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp)/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp)/concatenated_devtools_network_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp)/concatenated_devtools_extensions_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_scripts_js_gyp)/concatenated_devtools_scripts_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_timeline_js_gyp)/concatenated_devtools_timeline_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_profiles_js_gyp)/concatenated_devtools_profiles_js.stamp \
@@ -26,6 +27,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_layers_js_gyp)/concatenated_devtools_layers_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_heap_snapshot_worker_js_gyp)/concatenated_heap_snapshot_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_script_formatter_worker_js_gyp)/concatenated_script_formatter_worker_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp)/concatenated_temp_storage_shared_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_css_gyp)/concatenated_devtools_css.stamp
 
 ### Rules for action "generate_devtools_grd":
@@ -33,9 +35,9 @@
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/namedFlowOverflow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeader.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelectedPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/programCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionEmpty.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionFit.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionOverset.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinner.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_generate_devtools_grd_target_generate_devtools_grd ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/cssNamedFlows.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
 
 
 
diff --git a/Source/devtools/generate_devtools_grd.target.linux-x86.mk b/Source/devtools/generate_devtools_grd.target.linux-x86.mk
index 25374f4..26e1db3 100644
--- a/Source/devtools/generate_devtools_grd.target.linux-x86.mk
+++ b/Source/devtools/generate_devtools_grd.target.linux-x86.mk
@@ -18,6 +18,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp)/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp)/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp)/concatenated_devtools_network_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_extensions_js_gyp)/concatenated_devtools_extensions_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_scripts_js_gyp)/concatenated_devtools_scripts_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_timeline_js_gyp)/concatenated_devtools_timeline_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_profiles_js_gyp)/concatenated_devtools_profiles_js.stamp \
@@ -26,6 +27,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_layers_js_gyp)/concatenated_devtools_layers_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_heap_snapshot_worker_js_gyp)/concatenated_heap_snapshot_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_script_formatter_worker_js_gyp)/concatenated_script_formatter_worker_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_temp_storage_shared_worker_js_gyp)/concatenated_temp_storage_shared_worker_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_css_gyp)/concatenated_devtools_css.stamp
 
 ### Rules for action "generate_devtools_grd":
@@ -33,9 +35,9 @@
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cssNamedFlows.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional2_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditionalCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/namedFlowOverflow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeader.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/glossyHeaderSelectedPressed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/programCounterBorder.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionEmpty.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionFit.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/regionOverset.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinner.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelineHollowPillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillBlue.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGray.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillGreen.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillOrange.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillPurple.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillRed.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/timelinePillYellow.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_devtools_grd.py $(gyp_shared_intermediate_dir)/resources/inspector/devtools.html $(gyp_shared_intermediate_dir)/resources/inspector/inspector.js $(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js $(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js $(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js $(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js $(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js $(gyp_shared_intermediate_dir)/resources/inspector/inspector.css $(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/accelerometer.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/auditsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breadcrumbList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/breakpointsList.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/buildSystemOnly.js $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/cmdevtools.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/cm/codemirror.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/dataGrid.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/elementsPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filter.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/filteredItemSelectionDialog.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/flameChart.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/heapProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/helpScreen.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/indexedDBViews.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/inspectorCommon.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/navigatorView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkLogView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/networkPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/overrides.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/panelEnablerView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/profilesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourceView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/resourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/revisionHistory.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/screencastView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sidebarPane.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/sourcesView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/spectrum.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/splitView.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/textPrompt.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/timelinePanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/canvasProfiler.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/layersPanel.css $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/addIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/applicationCache.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/back.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpoint_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/breakpointConditional_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/checker.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/cookie.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/database.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/databaseTable.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/deleteIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/domain.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/forward.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/fileSystem.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/frame.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutLeft.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/graphLabelCalloutRight.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDB.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBObjectStore.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/indexedDBIndex.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/localStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/navigationControls_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneAddButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneElementStateButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneFilterButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneRefreshButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/paneSettingsButtons.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverArrows.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/popoverBackground.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileGroupIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/profileSmallIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/radioDot.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceCSSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceDocumentIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourceJSIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcePlainIconSmall.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/resourcesTimeGraphIcon.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchNext.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/searchPrev.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/sessionStorage.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/settingsListRemove_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerActiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactive.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/spinnerInactiveSelected.gif $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarButtonGlyphs_2x.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerHorizontal.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/statusbarResizerVertical.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbActiveVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/thumbHoverVert.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/toolbarItemSelected.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackHoriz.png $(LOCAL_PATH)/third_party/WebKit/Source/devtools/front_end/Images/trackVert.png $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: third_party_WebKit_Source_devtools_devtools_gyp_generate_devtools_grd_target_generate_devtools_grd ($@)"
-	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/cssNamedFlows.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/devtools; python scripts/generate_devtools_grd.py "$(gyp_shared_intermediate_dir)/resources/inspector/devtools.html" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ElementsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ExtensionServer.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ResourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/NetworkPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/SourcesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TimelinePanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ProfilesPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/AuditsPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/LayersPanel.js" "$(gyp_shared_intermediate_dir)/resources/inspector/CodeMirrorTextEditor.js" "$(gyp_shared_intermediate_dir)/resources/inspector/HeapSnapshotWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/ScriptFormatterWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/TempStorageSharedWorker.js" "$(gyp_shared_intermediate_dir)/resources/inspector/inspector.css" "$(gyp_shared_intermediate_dir)/resources/inspector/devtools_extension_api.js" front_end/accelerometer.css front_end/auditsPanel.css front_end/breadcrumbList.css front_end/breakpointsList.css front_end/buildSystemOnly.js front_end/cm/cmdevtools.css front_end/cm/codemirror.css front_end/dataGrid.css front_end/elementsPanel.css front_end/filter.css front_end/filteredItemSelectionDialog.css front_end/flameChart.css front_end/heapProfiler.css front_end/helpScreen.css front_end/indexedDBViews.css front_end/inspectorCommon.css front_end/navigatorView.css front_end/networkLogView.css front_end/networkPanel.css front_end/overrides.css front_end/panelEnablerView.css front_end/profilesPanel.css front_end/resourceView.css front_end/resourcesPanel.css front_end/revisionHistory.css front_end/screencastView.css front_end/sidebarPane.css front_end/sourcesPanel.css front_end/sourcesView.css front_end/spectrum.css front_end/splitView.css front_end/textPrompt.css front_end/timelinePanel.css front_end/canvasProfiler.css front_end/layersPanel.css --images front_end/Images --output "$(gyp_shared_intermediate_dir)/devtools/devtools_resources.grd"
 
 
 
diff --git a/Source/devtools/protocol.json b/Source/devtools/protocol.json
index c45a38d..2ca7bd5 100644
--- a/Source/devtools/protocol.json
+++ b/Source/devtools/protocol.json
@@ -51,27 +51,6 @@
     {
         "domain": "Memory",
         "hidden": true,
-        "types": [
-            {
-                "id": "MemoryBlock",
-                "type": "object",
-                "properties": [
-                    { "name": "size", "type": "number", "optional": true, "description": "Size of the block in bytes if available" },
-                    { "name": "name", "type": "string", "description": "Unique name used to identify the component that allocated this block" },
-                    { "name": "children", "type": "array", "optional": true, "items": { "$ref": "MemoryBlock" }}
-                ]
-            },
-            {
-                "id": "HeapSnapshotChunk",
-                "type": "object",
-                "properties": [
-                    { "name": "strings", "type": "array", "items": { "type": "string" }, "description": "An array of strings that were found since last update." },
-                    { "name": "nodes", "type": "array", "items": { "type": "integer" }, "description": "An array of nodes that were found since last update." },
-                    { "name": "edges", "type": "array", "items": { "type": "integer" }, "description": "An array of edges that were found since last update." },
-                    { "name": "baseToRealNodeId", "type": "array", "items": { "type": "integer" }, "description": "An array of integers for nodeId remapping. Even nodeId has to be mapped to the following odd nodeId." }
-                ]
-            }
-        ],
         "commands": [
             {
                 "name": "getDOMCounters",
@@ -81,14 +60,6 @@
                     { "name": "jsEventListeners", "type": "integer" }
                 ]
             }
-        ],
-        "events": [
-            {
-                "name": "addNativeSnapshotChunk",
-                "parameters": [
-                    { "name": "chunk", "$ref": "HeapSnapshotChunk", "description": "A chunk of the serialized the snapshot." }
-                ]
-            }
         ]
     },
     {
@@ -435,14 +406,16 @@
                 "name": "setGeolocationOverride",
                 "description": "Overrides the Geolocation Position or Error.",
                 "parameters": [
-                    { "name": "latitude", "type": "number", "optional": true, "description": "Mock longitude"},
-                    { "name": "longitude", "type": "number", "optional": true, "description": "Mock latitude"},
+                    { "name": "latitude", "type": "number", "optional": true, "description": "Mock latitude"},
+                    { "name": "longitude", "type": "number", "optional": true, "description": "Mock longitude"},
                     { "name": "accuracy", "type": "number", "optional": true, "description": "Mock accuracy"}
-                ]
+                ],
+                "redirect": "Geolocation"
             },
             {
                 "name": "clearGeolocationOverride",
-                "description": "Clears the overriden Geolocation Position and Error."
+                "description": "Clears the overriden Geolocation Position and Error.",
+                "redirect": "Geolocation"
             },
             {
                 "name": "setDeviceOrientationOverride",
@@ -452,11 +425,13 @@
                     { "name": "beta", "type": "number", "description": "Mock beta"},
                     { "name": "gamma", "type": "number", "description": "Mock gamma"}
                 ],
+                "redirect": "DeviceOrientation",
                 "hidden": true
             },
             {
                 "name": "clearDeviceOrientationOverride",
                 "description": "Clears the overridden Device Orientation.",
+                "redirect": "DeviceOrientation",
                 "hidden": true
             },
             {
@@ -1027,7 +1002,10 @@
                     { "name": "requestHeadersText", "type": "string", "optional": true, "description": "HTTP request headers text." },
                     { "name": "connectionReused", "type": "boolean", "description": "Specifies whether physical connection was actually reused for this request." },
                     { "name": "connectionId", "type": "number", "description": "Physical connection id that was actually used for this request." },
+                    { "name": "remoteIPAddress", "type": "string", "optional": true, "hidden": true, "description": "Remote IP address." },
+                    { "name": "remotePort", "type": "integer", "optional": true, "hidden": true, "description": "Remote port."},
                     { "name": "fromDiskCache", "type": "boolean", "optional": true, "description": "Specifies that the request was served from the disk cache." },
+                    { "name": "encodedDataLength", "type": "number", "optional": false, "description": "Total number of bytes received for this request so far." },
                     { "name": "timing", "$ref": "ResourceTiming", "optional": true, "description": "Timing information for the given request." }
                 ]
             },
@@ -1222,7 +1200,8 @@
                 "description": "Fired when HTTP request has finished loading.",
                 "parameters": [
                     { "name": "requestId", "$ref": "RequestId", "description": "Request identifier." },
-                    { "name": "timestamp", "$ref": "Timestamp", "description": "Timestamp." }
+                    { "name": "timestamp", "$ref": "Timestamp", "description": "Timestamp." },
+                    { "name": "encodedDataLength", "type": "number", "description": "Total number of bytes received for this request." }
                 ]
             },
             {
@@ -1443,9 +1422,9 @@
                 "type": "object",
                 "description": "Data entry.",
                 "properties": [
-                    { "name": "key", "$ref": "Runtime.RemoteObject", "description": "Key." },
-                    { "name": "primaryKey", "$ref": "Runtime.RemoteObject", "description": "Primary key." },
-                    { "name": "value", "$ref": "Runtime.RemoteObject", "description": "Value." }
+                    { "name": "key", "type": "string", "description": "JSON-stringified key object." },
+                    { "name": "primaryKey", "type": "string", "description": "JSON-stringified primary key object." },
+                    { "name": "value", "type": "string", "description": "JSON-stringified value object." }
                 ]
             },
             {
@@ -1856,7 +1835,8 @@
                     { "name": "contentDocument", "$ref": "Node", "optional": true, "description": "Content document for frame owner elements." },
                     { "name": "shadowRoots", "type": "array", "optional": true, "items": { "$ref": "Node" }, "description": "Shadow root list for given element host.", "hidden": true },
                     { "name": "templateContent", "$ref": "Node", "optional": true, "description": "Content document fragment for template elements.", "hidden": true },
-                    { "name": "pseudoElements", "type": "array", "items": { "$ref": "Node" }, "optional": true, "description": "Pseudo elements associated with this node.", "hidden": true }
+                    { "name": "pseudoElements", "type": "array", "items": { "$ref": "Node" }, "optional": true, "description": "Pseudo elements associated with this node.", "hidden": true },
+                    { "name": "importedDocument", "$ref": "Node", "optional": true, "description": "Import document for the HTMLImport links." }
                 ],
                 "description": "DOM interaction is implemented in terms of mirror objects that represent the actual DOM nodes. DOMNode is a base node mirror type."
             },
@@ -1870,7 +1850,7 @@
                     { "name": "isAttribute", "type": "boolean", "description": "<code>EventListener</code>'s isAttribute." },
                     { "name": "nodeId", "$ref": "NodeId", "description": "Target <code>DOMNode</code> id." },
                     { "name": "handlerBody", "type": "string", "description": "Event handler function body." },
-                    { "name": "location", "$ref": "Debugger.Location", "optional": true, "description": "Handler code location." },
+                    { "name": "location", "$ref": "Debugger.Location", "description": "Handler code location." },
                     { "name": "sourceName", "type": "string", "optional": true, "description": "Source script URL." },
                     { "name": "handler", "$ref": "Runtime.RemoteObject", "optional": true, "description": "Event handler function value." }
                 ],
@@ -2399,14 +2379,6 @@
                 ],
                 "description": "Called when a pseudo element is removed from an element.",
                 "hidden": true
-            },
-            {
-                "name": "pseudoStateChanged",
-                "parameters": [
-                    { "name": "nodeId", "$ref": "NodeId", "description": "Id of the element whose pseudo state has changed." }
-                ],
-                "description": "Called when an element's <code>:active</code>, <code>:focus</code>, or <code>:hover</code> pseudo state is changed.",
-                "hidden": true
             }
         ]
     },
@@ -2459,7 +2431,7 @@
                     { "name": "inlineStyle", "$ref": "CSSStyle", "optional": true, "description": "The ancestor node's inline style, if any, in the style inheritance chain." },
                     { "name": "matchedCSSRules", "type": "array", "items": { "$ref": "RuleMatch" }, "description": "Matches of CSS rules matching the ancestor node in the style inheritance chain." }
                 ],
-                "description": "CSS rule collection for a single pseudo style."
+                "description": "Inherited CSS rule collection from ancestor node."
             },
             {
                 "id": "RuleMatch",
@@ -2489,15 +2461,6 @@
                 "description": "Selector list data."
             },
             {
-                "id": "CSSStyleAttribute",
-                "type": "object",
-                "properties": [
-                    { "name": "name", "type": "string", "description": "DOM attribute name (e.g. \"width\")."},
-                    { "name": "style", "$ref": "CSSStyle", "description": "CSS style generated by the respective DOM attribute."}
-                ],
-                "description": "CSS style information for a DOM style attribute."
-            },
-            {
                 "id": "CSSStyleSheetHeader",
                 "type": "object",
                 "properties": [
@@ -2519,7 +2482,6 @@
                 "id": "CSSStyleSheetBody",
                 "type": "object",
                 "properties": [
-                    { "name": "styleSheetId", "$ref": "StyleSheetId", "description": "The stylesheet identifier."},
                     { "name": "rules", "type": "array", "items": { "$ref": "CSSRule" }, "description": "Stylesheet resource URL."},
                     { "name": "text", "type": "string", "optional": true, "description": "Stylesheet resource contents (if available)."}
                 ],
@@ -2558,14 +2520,6 @@
                 ]
             },
             {
-                "id": "CSSPropertyInfo",
-                "type": "object",
-                "properties": [
-                    { "name": "name", "type": "string", "description": "Property name." },
-                    { "name": "longhands", "type": "array", "optional": true, "items": { "type": "string" }, "description": "Longhand property names." }
-                ]
-            },
-            {
                 "id": "CSSComputedStyleProperty",
                 "type": "object",
                 "properties": [
@@ -2581,9 +2535,7 @@
                     { "name": "cssProperties", "type": "array", "items": { "$ref": "CSSProperty" }, "description": "CSS properties in the style." },
                     { "name": "shorthandEntries", "type": "array", "items": { "$ref": "ShorthandEntry" }, "description": "Computed values for all shorthands found in the style." },
                     { "name": "cssText", "type": "string", "optional": true, "description": "Style declaration text (if available)." },
-                    { "name": "range", "$ref": "SourceRange", "optional": true, "description": "Style declaration range in the enclosing stylesheet (if available)." },
-                    { "name": "width", "type": "string", "optional": true, "description": "The effective \"width\" property value from this style." },
-                    { "name": "height", "type": "string", "optional": true, "description": "The effective \"height\" property value from this style." }
+                    { "name": "range", "$ref": "SourceRange", "optional": true, "description": "Style declaration range in the enclosing stylesheet (if available)." }
                 ],
                 "description": "CSS style representation."
             },
@@ -2615,57 +2567,14 @@
                 "description": "CSS media query descriptor."
             },
             {
-                "id": "SelectorProfileEntry",
-                "type": "object",
-                "properties": [
-                    { "name": "selector", "type": "string", "description": "CSS selector of the corresponding rule." },
-                    { "name": "url", "type": "string", "description": "URL of the resource containing the corresponding rule." },
-                    { "name": "lineNumber", "type": "integer", "description": "Selector line number in the resource for the corresponding rule." },
-                    { "name": "time", "type": "number", "description": "Total time this rule handling contributed to the browser running time during profiling (in milliseconds)." },
-                    { "name": "hitCount", "type": "integer", "description": "Number of times this rule was considered a candidate for matching against DOM elements." },
-                    { "name": "matchCount", "type": "integer", "description": "Number of times this rule actually matched a DOM element." }
-                ],
-                "description": "CSS selector profile entry."
-            },
-            {
-                "id": "SelectorProfile",
-                "type": "object",
-                "properties": [
-                    { "name": "totalTime", "type": "number", "description": "Total processing time for all selectors in the profile (in milliseconds)." },
-                    { "name": "data", "type": "array", "items": { "$ref": "SelectorProfileEntry" }, "description": "CSS selector profile entries." }
-                ]
-            },
-            {
-                "id": "Region",
-                "type": "object",
-                "properties": [
-                    { "name": "regionOverset", "type": "string", "enum": ["overset", "fit", "empty"], "description": "The \"overset\" attribute of a Named Flow." },
-                    { "name": "nodeId", "$ref": "DOM.NodeId", "description": "The corresponding DOM node id." }
-                ],
-                "description": "This object represents a region that flows from a Named Flow.",
-                "hidden": true
-            },
-            {
-                "id": "NamedFlow",
-                "type": "object",
-                "properties": [
-                    { "name": "documentNodeId", "$ref": "DOM.NodeId", "description": "The document node id." },
-                    { "name": "name", "type": "string", "description": "Named Flow identifier." },
-                    { "name": "overset", "type": "boolean", "description": "The \"overset\" attribute of a Named Flow." },
-                    { "name": "content", "type": "array", "items": { "$ref": "DOM.NodeId" }, "description": "An array of nodes that flow into the Named Flow." },
-                    { "name": "regions", "type": "array", "items": { "$ref": "Region" }, "description": "An array of regions associated with the Named Flow." }
-                ],
-                "description": "This object represents a Named Flow.",
-                "hidden": true
-            },
-            {
                 "id": "PlatformFontUsage",
                 "type": "object",
                 "properties": [
                     { "name": "familyName", "type": "string", "description": "Font's family name reported by platform."},
                     { "name": "glyphCount", "type": "number", "description": "Amount of glyphs that were rendered with this font."}
                 ],
-                "description": "Information about amount of glyphs that were rendered with given font."
+                "description": "Information about amount of glyphs that were rendered with given font.",
+                "hidden": true
             }
         ],
         "commands": [
@@ -2726,13 +2635,6 @@
                 "hidden": true
             },
             {
-                "name": "getAllStyleSheets",
-                "returns": [
-                    { "name": "headers", "type": "array", "items": { "$ref": "CSSStyleSheetHeader" }, "description": "Descriptor entries for all available stylesheets." }
-                ],
-                "description": "Returns metainfo entries for all known stylesheets."
-            },
-            {
                 "name": "getStyleSheet",
                 "parameters": [
                     { "name": "styleSheetId", "$ref": "StyleSheetId" }
@@ -2761,17 +2663,6 @@
                 "description": "Sets the new stylesheet text, thereby invalidating all existing <code>CSSStyleId</code>'s and <code>CSSRuleId</code>'s contained by this stylesheet."
             },
             {
-                "name": "setStyleText",
-                "parameters": [
-                    { "name": "styleId", "$ref": "CSSStyleId" },
-                    { "name": "text", "type": "string" }
-                ],
-                "returns": [
-                    { "name": "style", "$ref": "CSSStyle", "description": "The resulting style after the text modification." }
-                ],
-                "description": "Updates the CSSStyleDeclaration text."
-            },
-            {
                 "name": "setPropertyText",
                 "parameters": [
                     { "name": "styleId", "$ref": "CSSStyleId" },
@@ -2785,18 +2676,6 @@
                 "description": "Sets the new <code>text</code> for a property in the respective style, at offset <code>propertyIndex</code>. If <code>overwrite</code> is <code>true</code>, a property at the given offset is overwritten, otherwise inserted. <code>text</code> entirely replaces the property <code>name: value</code>."
             },
             {
-                "name": "toggleProperty",
-                "parameters": [
-                    { "name": "styleId", "$ref": "CSSStyleId" },
-                    { "name": "propertyIndex", "type": "integer" },
-                    { "name": "disable", "type": "boolean" }
-                ],
-                "returns": [
-                    { "name": "style", "$ref": "CSSStyle", "description": "The resulting style after the property toggling." }
-                ],
-                "description": "Toggles the property in the respective style, at offset <code>propertyIndex</code>. The <code>disable</code> parameter denotes whether the property should be disabled (i.e. removed from the style declaration). If <code>disable == false</code>, the property gets put back into its original place in the style declaration."
-            },
-            {
                 "name": "setRuleSelector",
                 "parameters": [
                     { "name": "ruleId", "$ref": "CSSRuleId" },
@@ -2819,30 +2698,12 @@
                 "description": "Creates a new empty rule with the given <code>selector</code> in a special \"inspector\" stylesheet in the owner document of the context node."
             },
             {
-                "name": "getSupportedCSSProperties",
-                "returns": [
-                    { "name": "cssProperties", "type": "array", "items": { "$ref": "CSSPropertyInfo" }, "description": "Supported property metainfo." }
-                ],
-                "description": "Returns all supported CSS property names."
-            },
-            {
                 "name": "forcePseudoState",
                 "parameters": [
                     { "name": "nodeId", "$ref": "DOM.NodeId", "description": "The element id for which to force the pseudo state." },
                     { "name": "forcedPseudoClasses", "type": "array", "items": { "type": "string", "enum": ["active", "focus", "hover", "visited"] }, "description": "Element pseudo classes to force when computing the element's style." }
                 ],
                 "description": "Ensures that the given node will have specified pseudo-classes whenever its style is computed by the browser."
-            },
-            {
-                "name": "getNamedFlowCollection",
-                "parameters": [
-                    { "name": "documentNodeId", "$ref": "DOM.NodeId", "description": "The document node id for which to get the Named Flow Collection." }
-                ],
-                "returns": [
-                    { "name": "namedFlows", "type": "array", "items": { "$ref": "NamedFlow" }, "description": "An array containing the Named Flows in the document." }
-                ],
-                "description": "Returns the Named Flows from the document.",
-                "hidden": true
             }
         ],
         "events": [
@@ -2870,39 +2731,6 @@
                     { "name": "styleSheetId", "$ref": "StyleSheetId", "description": "Identifier of the removed stylesheet." }
                 ],
                 "description": "Fired whenever an active document stylesheet is removed."
-            },
-            {
-                "name": "namedFlowCreated",
-                "parameters": [
-                    { "name": "namedFlow", "$ref": "NamedFlow", "description": "The new Named Flow." }
-                ],
-                "description": "Fires when a Named Flow is created.",
-                "hidden": true
-            },
-            {
-                "name": "namedFlowRemoved",
-                "parameters": [
-                    { "name": "documentNodeId", "$ref": "DOM.NodeId", "description": "The document node id." },
-                    { "name": "flowName", "type": "string", "description": "Identifier of the removed Named Flow." }
-                ],
-                "description": "Fires when a Named Flow is removed: has no associated content nodes and regions.",
-                "hidden": true
-            },
-            {
-                "name": "regionLayoutUpdated",
-                "parameters": [
-                    { "name": "namedFlow", "$ref": "NamedFlow", "description": "The Named Flow whose layout may have changed." }
-                ],
-                "description": "Fires when a Named Flow's layout may have changed.",
-                "hidden": true
-            },
-            {
-                "name": "regionOversetChanged",
-                "parameters": [
-                    { "name": "namedFlow", "$ref": "NamedFlow", "description": "The Named Flow containing the regions whose regionOverset values changed." }
-                ],
-                "description": "Fires if any of the regionOverset values changed in a Named Flow's region chain.",
-                "hidden": true
             }
         ]
     },
@@ -2911,14 +2739,16 @@
         "description": "Timeline provides its clients with instrumentation records that are generated during the page runtime. Timeline instrumentation can be started and stopped using corresponding commands. While timeline is started, it is generating timeline event records.",
         "types": [
             {
-                "id": "DOMCounters",
+                "id": "Counters",
                 "type": "object",
                 "properties": [
-                    { "name": "documents", "type": "integer" },
-                    { "name": "nodes", "type": "integer" },
-                    { "name": "jsEventListeners", "type": "integer" }
+                    { "name": "documents", "type": "integer", "optional": true },
+                    { "name": "nodes", "type": "integer", "optional": true },
+                    { "name": "jsEventListeners", "type": "integer", "optional": true },
+                    { "name": "jsHeapSizeUsed", "type": "number", "optional": true, "description": "Currently used size of JS heap." },
+                    { "name": "gpuMemoryUsedKB", "type": "number", "optional": true, "description": "Current GPU memory usage in kilobytes." }
                 ],
-                "description": "Current values of DOM counters.",
+                "description": "Current values of counters.",
                 "hidden": true
             },
             {
@@ -2926,11 +2756,15 @@
                 "type": "object",
                 "properties": [
                     { "name": "type", "type": "string", "description": "Event type." },
-                    { "name": "thread", "type": "string", "optional": true, "description": "If present, identifies the thread that produced the event.", "hidden": true },
                     { "name": "data", "type": "object", "description": "Event data." },
+                    { "name": "startTime", "type": "number", "description": "Start time." },
+                    { "name": "endTime", "type": "number", "optional": true, "description": "End time." },
                     { "name": "children", "type": "array", "optional": true, "items": { "$ref": "TimelineEvent" }, "description": "Nested records." },
-                    { "name": "counters", "$ref": "DOMCounters", "optional": true, "hidden": true, "description": "Current values of DOM counters." },
-                    { "name": "usedHeapSize", "type": "integer", "optional": true, "hidden": true, "description": "Current size of JS heap." }
+                    { "name": "thread", "type": "string", "optional": true, "hidden": true, "description": "If present, identifies the thread that produced the event." },
+                    { "name": "counters", "$ref": "Counters", "optional": true, "hidden": true, "description": "Current values of counters." },
+                    { "name": "stackTrace", "$ref": "Console.StackTrace", "optional": true, "hidden": true, "description": "Stack trace." },
+                    { "name": "frameId", "type": "string", "optional": true, "hidden": true, "description": "Unique identifier of the frame within the page that the event relates to." },
+                    { "name": "usedHeapSizeDelta", "type": "integer", "optional": true, "hidden": true, "description": "JS heap size change." }
                 ],
                 "description": "Timeline record contains information about the recorded activity."
             }
@@ -2949,7 +2783,7 @@
                 "parameters": [
                     { "name": "maxCallStackDepth", "optional": true, "type": "integer", "description": "Samples JavaScript stack traces up to <code>maxCallStackDepth</code>, defaults to 5." },
                     { "name": "bufferEvents", "optional": true, "type": "boolean", "hidden": true, "description": "Whether instrumentation events should be buffered and returned upon <code>stop</code> call." },
-                    { "name": "includeDomCounters", "optional": true, "type": "boolean", "hidden": true, "description": "Whether DOM counters data should be included into timeline events." },
+                    { "name": "includeCounters", "optional": true, "type": "boolean", "hidden": true, "description": "Whether counters data should be included into timeline events." },
                     { "name": "includeGPUEvents", "optional": true, "type": "boolean", "hidden": true, "description": "Whether events from GPU process should be collected." }
                 ],
                 "description": "Starts capturing instrumentation events."
@@ -3486,15 +3320,6 @@
         "hidden": true,
         "types": [
             {
-                "id": "ProfileHeader",
-                "type": "object",
-                "description": "Profile header.",
-                "properties": [
-                    { "name": "title", "type": "string", "description": "Profile title." },
-                    { "name": "uid", "type": "integer", "description": "Unique identifier of the profile." }
-                ]
-            },
-            {
                 "id": "CPUProfileNode",
                 "type": "object",
                 "description": "CPU Profile node. Holds callsite information, execution statistics and child nodes.",
@@ -3521,11 +3346,6 @@
                     { "name": "endTime", "type": "number", "description": "Profiling end time in seconds." },
                     { "name": "samples", "optional": true, "type": "array", "items": { "type": "integer" }, "description": "Ids of samples top nodes." }
                 ]
-            },
-            {
-                "id": "HeapSnapshotObjectId",
-                "type": "string",
-                "description": "Heap snashot object id."
             }
         ],
         "commands": [
@@ -3548,37 +3368,29 @@
             {
                 "name": "stop",
                 "returns": [
-                    { "name": "header", "$ref": "ProfileHeader", "description": "The header of the recorded profile."}
+                    { "name": "profile", "$ref": "CPUProfile", "description": "Recorded profile." }
                 ]
-            },
-            {
-                "name": "getCPUProfile",
-                "parameters": [
-                    { "name": "uid", "type": "integer" }
-                ],
-                "returns": [
-                    { "name": "profile", "$ref": "CPUProfile" }
-                ]
-            },
-            {
-                "name": "removeProfile",
-                "parameters": [
-                    { "name": "uid", "type": "integer" }
-                ]
-            },
-            {
-                "name": "clearProfiles"
             }
         ],
         "events": [
             {
-                "name": "addProfileHeader",
+                "name": "consoleProfileStarted",
                 "parameters": [
-                    { "name": "header", "$ref": "ProfileHeader" }
-                ]
+                    { "name": "id", "type": "string" },
+                    { "name": "location", "$ref": "Debugger.Location", "description": "Location of console.profile()." },
+                    { "name": "title", "type": "string", "optional": true, "description": "Profile title passed as argument to console.profile()." }
+
+                ],
+                "description": "Sent when new profile recodring is started using console.profile() call."
             },
             {
-                "name": "resetProfiles"
+                "name": "consoleProfileFinished",
+                "parameters": [
+                    { "name": "id", "type": "string" },
+                    { "name": "location", "$ref": "Debugger.Location", "description": "Location of console.profileEnd()." },
+                    { "name": "profile", "$ref": "CPUProfile" },
+                    { "name": "title", "type": "string", "optional": true, "description": "Profile title passed as argunet to console.profile()." }
+                ]
             }
         ]
     },
@@ -3587,19 +3399,9 @@
         "hidden": true,
         "types": [
             {
-                "id": "ProfileHeader",
-                "type": "object",
-                "description": "Profile header.",
-                "properties": [
-                    { "name": "title", "type": "string", "description": "Profile title." },
-                    { "name": "uid", "type": "integer", "description": "Unique identifier of the profile." },
-                    { "name": "maxJSObjectId", "type": "integer", "optional": true, "description": "Last seen JS object Id." }
-                ]
-            },
-            {
                 "id": "HeapSnapshotObjectId",
                 "type": "string",
-                "description": "Heap snashot object id."
+                "description": "Heap snapshot object id."
             }
         ],
         "commands": [
@@ -3610,7 +3412,10 @@
                 "name": "disable"
             },
             {
-                "name": "startTrackingHeapObjects"
+                "name": "startTrackingHeapObjects",
+                "parameters": [
+                    { "name": "trackAllocations", "type": "boolean", "optional": true }
+                ]
             },
             {
                 "name": "stopTrackingHeapObjects",
@@ -3620,21 +3425,6 @@
 
             },
             {
-                "name": "getHeapSnapshot",
-                "parameters": [
-                    { "name": "uid", "type": "integer" }
-                ]
-            },
-            {
-                "name": "removeProfile",
-                "parameters": [
-                    { "name": "uid", "type": "integer" }
-                ]
-            },
-            {
-                "name": "clearProfiles"
-            },
-            {
                 "name": "takeHeapSnapshot",
                 "parameters": [
                     { "name": "reportProgress", "type": "boolean", "optional": true, "description": "If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken." }
@@ -3665,15 +3455,8 @@
         ],
         "events": [
             {
-                "name": "addProfileHeader",
-                "parameters": [
-                    { "name": "header", "$ref": "ProfileHeader" }
-                ]
-            },
-            {
                 "name": "addHeapSnapshotChunk",
                 "parameters": [
-                    { "name": "uid", "type": "integer" },
                     { "name": "chunk", "type": "string" }
                 ]
             },
@@ -3684,7 +3467,8 @@
                 "name": "reportHeapSnapshotProgress",
                 "parameters": [
                     { "name": "done", "type": "integer" },
-                    { "name": "total", "type": "integer" }
+                    { "name": "total", "type": "integer" },
+                    { "name": "finished", "type": "boolean", "optional": true }
                 ]
             },
             {
@@ -4139,7 +3923,7 @@
                     { "name": "minDuration", "type": "number", "optional": true, "description": "The minimum duration (in seconds) to replay the snapshot." }
                 ],
                 "returns": [
-                    { "name": "timings", "type": "array", "items": { "$ref": "PaintProfile" }, "description": "The array of paint profilers, one per run." }
+                    { "name": "timings", "type": "array", "items": { "$ref": "PaintProfile" }, "description": "The array of paint profiles, one per run." }
                 ]
             },
             {
@@ -4172,12 +3956,51 @@
         ]
     },
     {
+        "domain": "Geolocation",
+        "hidden": true,
+        "commands": [
+            {
+                "name": "setGeolocationOverride",
+                "description": "Overrides the Geolocation Position or Error.",
+                "parameters": [
+                    { "name": "latitude", "type": "number", "optional": true, "description": "Mock latitude"},
+                    { "name": "longitude", "type": "number", "optional": true, "description": "Mock longitude"},
+                    { "name": "accuracy", "type": "number", "optional": true, "description": "Mock accuracy"}
+                ]
+            },
+            {
+                "name": "clearGeolocationOverride",
+                "description": "Clears the overriden Geolocation Position and Error."
+            }
+        ]
+    },
+    {
+        "domain": "DeviceOrientation",
+        "hidden": true,
+        "commands": [
+            {
+                "name": "setDeviceOrientationOverride",
+                "description": "Overrides the Device Orientation.",
+                "parameters": [
+                    { "name": "alpha", "type": "number", "description": "Mock alpha"},
+                    { "name": "beta", "type": "number", "description": "Mock beta"},
+                    { "name": "gamma", "type": "number", "description": "Mock gamma"}
+                ]
+            },
+            {
+                "name": "clearDeviceOrientationOverride",
+                "description": "Clears the overridden Device Orientation."
+            }
+        ]
+    },
+    {
         "domain": "Tracing",
         "hidden": true,
         "commands": [
             {
                 "name": "start",
                 "description": "Start trace events collection.",
+                "async": true,
                 "parameters": [
                     { "name": "categories", "type": "string", "description": "Category/tag filter" },
                     { "name": "options", "type": "string", "description": "Tracing options" }
@@ -4203,5 +4026,44 @@
                 "handlers": ["browser", "frontend"]
             }
         ]
+    },
+    {
+        "domain": "Power",
+        "hidden": true,
+        "types": [
+            {
+                "id": "PowerEvent",
+                "type": "object",
+                "properties": [
+                    { "name": "type", "type": "string", "description": "Power Event Type." },
+                    { "name": "timestamp", "type": "number", "description": "Power Event Time, in milliseconds." },
+                    { "name": "value", "type": "number", "description": "Power Event Value." }
+                ],
+            "description": "PowerEvent item"
+            }
+        ],
+        "commands": [
+            {
+                "name": "start",
+                "description": "Start power events collection.",
+                "parameters": [],
+                "handlers": ["browser", "frontend"]
+            },
+            {
+                "name": "end",
+                "description": "Stop power events collection.",
+                "parameters": [],
+                "handlers": ["browser", "frontend"]
+            }
+        ],
+        "events": [
+            {
+                "name": "dataAvailable",
+                "parameters": [
+                    {"name": "value", "type": "array", "items": { "$ref": "PowerEvent" }, "description": "List of power events." }
+                ],
+                "handlers": ["browser", "frontend"]
+            }
+        ]
     }]
 }
diff --git a/Source/devtools/scripts/__init__.py b/Source/devtools/scripts/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Source/devtools/scripts/__init__.py
diff --git a/Source/devtools/scripts/compile_frontend.py b/Source/devtools/scripts/compile_frontend.py
index 14bcc14..dcf2fb9 100755
--- a/Source/devtools/scripts/compile_frontend.py
+++ b/Source/devtools/scripts/compile_frontend.py
@@ -35,375 +35,33 @@
 import subprocess
 import sys
 import tempfile
+try:
+    import json
+except ImportError:
+    import simplejson as json
 
 scripts_path = os.path.dirname(os.path.abspath(__file__))
 devtools_path = os.path.dirname(scripts_path)
 inspector_path = os.path.dirname(devtools_path) + "/core/inspector"
 devtools_frontend_path = devtools_path + "/front_end"
-protocol_externs_path = devtools_frontend_path + "/protocol_externs.js"
+protocol_externs_file = devtools_frontend_path + "/protocol_externs.js"
 webgl_rendering_context_idl_path = os.path.dirname(devtools_path) + "/core/html/canvas/WebGLRenderingContext.idl"
+closure_compiler_jar = scripts_path + "/closure/compiler.jar"
+closure_runner_jar = scripts_path + "/compiler-runner/closure-runner.jar"
+jsdoc_validator_jar = scripts_path + "/jsdoc-validator/jsdoc-validator.jar"
+java_exec = "java -Xms1024m -server -XX:+TieredCompilation"
 
-generate_protocol_externs.generate_protocol_externs(protocol_externs_path, devtools_path + "/protocol.json")
+generate_protocol_externs.generate_protocol_externs(protocol_externs_file, devtools_path + "/protocol.json")
 
 jsmodule_name_prefix = "jsmodule_"
-modules = [
-    {
-        "name": "common",
-        "dependencies": [],
-        "sources": [
-            "Color.js",
-            "DOMExtension.js",
-            "Object.js",
-            "ParsedURL.js",
-            "Progress.js",
-            "Settings.js",
-            "TextRange.js",
-            "UIString.js",
-            "UserMetrics.js",
-            "utilities.js",
-            "Geometry.js",
-        ]
-    },
-    {
-        "name": "sdk",
-        "dependencies": ["common"],
-        "sources": [
-            "ApplicationCacheModel.js",
-            "CompilerScriptMapping.js",
-            "ConsoleModel.js",
-            "ContentProvider.js",
-            "ContentProviderBasedProjectDelegate.js",
-            "ContentProviders.js",
-            "CookieParser.js",
-            "CSSFormatter.js",
-            "CSSMetadata.js",
-            "CSSStyleModel.js",
-            "CSSStyleSheetMapping.js",
-            "BreakpointManager.js",
-            "Database.js",
-            "DOMAgent.js",
-            "DOMStorage.js",
-            "DebuggerModel.js",
-            "DebuggerScriptMapping.js",
-            "FileManager.js",
-            "FileSystemMapping.js",
-            "FileSystemModel.js",
-            "FileSystemProjectDelegate.js",
-            "FileUtils.js",
-            "HAREntry.js",
-            "IndexedDBModel.js",
-            "InspectorBackend.js",
-            "IsolatedFileSystemManager.js",
-            "IsolatedFileSystem.js",
-            "JavaScriptFormatter.js",
-            "Linkifier.js",
-            "NetworkLog.js",
-            "NetworkUISourceCodeProvider.js",
-            "OverridesSupport.js",
-            "PresentationConsoleMessageHelper.js",
-            "RuntimeModel.js",
-            "SASSSourceMapping.js",
-            "Script.js",
-            "ScriptFormatter.js",
-            "ScriptFormatterWorker.js",
-            "ScriptSnippetModel.js",
-            "SimpleWorkspaceProvider.js",
-            "SnippetStorage.js",
-            "SourceMapping.js",
-            "StylesSourceMapping.js",
-            "TempFile.js",
-            "TimelineManager.js",
-            "RemoteObject.js",
-            "Resource.js",
-            "DefaultScriptMapping.js",
-            "ResourceScriptMapping.js",
-            "LiveEditSupport.js",
-            "ResourceTreeModel.js",
-            "ResourceType.js",
-            "ResourceUtils.js",
-            "SourceMap.js",
-            "TracingAgent.js",
-            "NetworkManager.js",
-            "NetworkRequest.js",
-            "UISourceCode.js",
-            "Workspace.js",
-            "WorkspaceController.js",
-        ]
-    },
-    {
-        "name": "ui",
-        "dependencies": ["common"],
-        "sources": [
-            "Checkbox.js",
-            "ContextMenu.js",
-            "CompletionDictionary.js",
-            "DOMSyntaxHighlighter.js",
-            "DataGrid.js",
-            "Dialog.js",
-            "DockController.js",
-            "Drawer.js",
-            "EmptyView.js",
-            "FilterBar.js",
-            "GoToLineDialog.js",
-            "HelpScreen.js",
-            "InspectorView.js",
-            "KeyboardShortcut.js",
-            "OverviewGrid.js",
-            "Panel.js",
-            "Placard.js",
-            "Popover.js",
-            "ProgressIndicator.js",
-            "PropertiesSection.js",
-            "SearchableView.js",
-            "Section.js",
-            "SidebarPane.js",
-            "SidebarTreeElement.js",
-            "ShortcutsScreen.js",
-            "ShowMoreDataGridNode.js",
-            "SidebarOverlay.js",
-            "SoftContextMenu.js",
-            "Spectrum.js",
-            "SplitView.js",
-            "SidebarView.js",
-            "StatusBarButton.js",
-            "SuggestBox.js",
-            "TabbedPane.js",
-            "TextEditor.js",
-            "TextPrompt.js",
-            "TextUtils.js",
-            "TimelineGrid.js",
-            "UIUtils.js",
-            "View.js",
-            "ViewportControl.js",
-            "treeoutline.js",
-        ]
-    },
-    {
-        "name": "components",
-        "dependencies": ["sdk", "ui"],
-        "sources": [
-            "AdvancedSearchController.js",
-            "HandlerRegistry.js",
-            "ConsoleMessage.js",
-            "CookiesTable.js",
-            "DOMBreakpointsSidebarPane.js",
-            "DOMPresentationUtils.js",
-            "ElementsTreeOutline.js",
-            "FontView.js",
-            "ImageView.js",
-            "NativeBreakpointsSidebarPane.js",
-            "InspectElementModeController.js",
-            "ObjectPopoverHelper.js",
-            "ObjectPropertiesSection.js",
-            "ScreencastView.js",
-            "SourceFrame.js",
-            "ResourceView.js",
-        ]
-    },
-    {
-        "name": "elements",
-        "dependencies": ["components"],
-        "sources": [
-            "CSSNamedFlowCollectionsView.js",
-            "CSSNamedFlowView.js",
-            "ElementsPanel.js",
-            "ElementsPanelDescriptor.js",
-            "EventListenersSidebarPane.js",
-            "MetricsSidebarPane.js",
-            "OverridesView.js",
-            "PlatformFontsSidebarPane.js",
-            "PropertiesSidebarPane.js",
-            "StylesSidebarPane.js",
-            "RenderingOptionsView.js",
-        ]
-    },
-    {
-        "name": "network",
-        "dependencies": ["components"],
-        "sources": [
-            "NetworkItemView.js",
-            "RequestCookiesView.js",
-            "RequestHeadersView.js",
-            "RequestHTMLView.js",
-            "RequestJSONView.js",
-            "RequestPreviewView.js",
-            "RequestResponseView.js",
-            "RequestTimingView.js",
-            "RequestView.js",
-            "ResourceWebSocketFrameView.js",
-            "NetworkPanel.js",
-            "NetworkPanelDescriptor.js",
-        ]
-    },
-    {
-        "name": "resources",
-        "dependencies": ["components"],
-        "sources": [
-            "ApplicationCacheItemsView.js",
-            "CookieItemsView.js",
-            "DatabaseQueryView.js",
-            "DatabaseTableView.js",
-            "DirectoryContentView.js",
-            "DOMStorageItemsView.js",
-            "FileContentView.js",
-            "FileSystemView.js",
-            "IndexedDBViews.js",
-            "ResourcesPanel.js",
-        ]
-    },
-    {
-        "name": "workers",
-        "dependencies": ["components"],
-        "sources": [
-            "WorkerManager.js",
-        ]
-    },
-    {
-        "name": "scripts",
-        "dependencies": ["components", "workers"],
-        "sources": [
-            "BreakpointsSidebarPane.js",
-            "CSSSourceFrame.js",
-            "CallStackSidebarPane.js",
-            "FilePathScoreFunction.js",
-            "FilteredItemSelectionDialog.js",
-            "JavaScriptSourceFrame.js",
-            "NavigatorOverlayController.js",
-            "NavigatorView.js",
-            "RevisionHistoryView.js",
-            "ScopeChainSidebarPane.js",
-            "SourcesNavigator.js",
-            "SourcesPanel.js",
-            "SourcesPanelDescriptor.js",
-            "SourcesSearchScope.js",
-            "StyleSheetOutlineDialog.js",
-            "TabbedEditorContainer.js",
-            "UISourceCodeFrame.js",
-            "WatchExpressionsSidebarPane.js",
-            "WorkersSidebarPane.js",
-        ]
-    },
-    {
-        "name": "console",
-        "dependencies": ["components"],
-        "sources": [
-            "ConsoleView.js",
-            "ConsolePanel.js",
-        ]
-    },
-    {
-        "name": "timeline",
-        "dependencies": ["components"],
-        "sources": [
-            "DOMCountersGraph.js",
-            "MemoryStatistics.js",
-            "PieChart.js",
-            "TimelineEventOverview.js",
-            "TimelineFrameOverview.js",
-            "TimelineMemoryOverview.js",
-            "TimelineModel.js",
-            "TimelineOverviewPane.js",
-            "TimelinePanel.js",
-            "TimelinePanelDescriptor.js",
-            "TimelinePresentationModel.js",
-            "TimelineFrameController.js"
-        ]
-    },
-    {
-        "name": "audits",
-        "dependencies": ["components"],
-        "sources": [
-            "AuditCategories.js",
-            "AuditController.js",
-            "AuditFormatters.js",
-            "AuditLauncherView.js",
-            "AuditResultView.js",
-            "AuditRules.js",
-            "AuditsPanel.js",
-        ]
-    },
-    {
-        "name": "codemirror",
-        "dependencies": ["components"],
-        "sources": [
-            "CodeMirrorTextEditor.js",
-            "CodeMirrorUtils.js",
-        ]
-    },
-    {
-        "name": "layers",
-        "dependencies": ["components"],
-        "sources": [
-            "LayerTreeModel.js",
-            "LayersPanel.js",
-            "LayersPanelDescriptor.js",
-            "LayerTree.js",
-            "Layers3DView.js",
-            "LayerDetailsView.js",
-        ]
-    },
-    {
-        "name": "extensions",
-        "dependencies": ["components"],
-        "sources": [
-            "ExtensionAPI.js",
-            "ExtensionAuditCategory.js",
-            "ExtensionPanel.js",
-            "ExtensionRegistryStub.js",
-            "ExtensionServer.js",
-            "ExtensionView.js",
-        ]
-    },
-    {
-        "name": "settings",
-        "dependencies": ["components", "extensions"],
-        "sources": [
-            "SettingsScreen.js",
-            "EditFileSystemDialog.js",
-        ]
-    },
-    {
-        "name": "tests",
-        "dependencies": ["components"],
-        "sources": [
-            "TestController.js",
-        ]
-    },
-    {
-        "name": "profiler",
-        "dependencies": ["components", "workers"],
-        "sources": [
-            "AllocationProfile.js",
-            "BottomUpProfileDataGridTree.js",
-            "CPUProfileView.js",
-            "FlameChart.js",
-            "HeapSnapshot.js",
-            "HeapSnapshotDataGrids.js",
-            "HeapSnapshotGridNodes.js",
-            "HeapSnapshotLoader.js",
-            "HeapSnapshotProxy.js",
-            "HeapSnapshotView.js",
-            "HeapSnapshotWorker.js",
-            "HeapSnapshotWorkerDispatcher.js",
-            "JSHeapSnapshot.js",
-            "ProfileDataGridTree.js",
-            "ProfilesPanel.js",
-            "ProfilesPanelDescriptor.js",
-            "ProfileLauncherView.js",
-            "TopDownProfileDataGridTree.js",
-            "CanvasProfileView.js",
-            "CanvasReplayStateView.js",
-        ]
-    },
-    {
-        "name": "host_stub",
-        "dependencies": ["components", "profiler", "timeline"],
-        "sources": [
-            "InspectorFrontendAPI.js",
-            "InspectorFrontendHostStub.js",
-        ]
-    }
-]
+js_modules_name = "frontend_modules.json"
+
+try:
+    with open(os.path.join(scripts_path, js_modules_name), "rt") as js_modules_file:
+        modules = json.loads(js_modules_file.read())
+except:
+    print "ERROR: Failed to read %s" % js_modules_name
+    raise
 
 # `importScript` function must not be used in any files
 # except module headers. Refer to devtools.gyp file for
@@ -419,6 +77,7 @@
     "AuditsPanel.js",
     "LayersPanel.js",
     "CodeMirrorTextEditor.js",
+    "ExtensionServer.js",
 ]
 
 type_checked_jsdoc_tags_list = ["param", "return", "type", "enum"]
@@ -426,12 +85,21 @@
 type_checked_jsdoc_tags_or = "|".join(type_checked_jsdoc_tags_list)
 
 # Basic regex for invalid JsDoc types: an object type name ([A-Z][A-Za-z0-9.]+[A-Za-z0-9]) not preceded by '!', '?', ':' (this, new), or '.' (object property).
-invalid_type_regex = re.compile(r"@(?:" + type_checked_jsdoc_tags_or + r")\s*\{.*(?<![!?:.A-Za-z0-9])([A-Z][A-Za-z0-9.]+[A-Za-z0-9]).*\}")
+invalid_type_regex = re.compile(r"@(?:" + type_checked_jsdoc_tags_or + r")\s*\{.*(?<![!?:.A-Za-z0-9])([A-Z][A-Za-z0-9.]+[A-Za-z0-9])[^/]*\}")
 
 invalid_type_designator_regex = re.compile(r"@(?:" + type_checked_jsdoc_tags_or + r")\s*.*([?!])=?\}")
 
+error_warning_regex = re.compile(r"(?:WARNING|ERROR)")
+
+errors_found = False
+
+
+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 file_name in allowed_import_statements_files:
@@ -441,9 +109,24 @@
             sourceFile.close()
             if "importScript(" in source:
                 print "ERROR: importScript function is allowed in module header files only (found in %s)" % file_name
+                errors_found = True
+    return errors_found
+
+
+def dump_all_checked_files():
+    files = {}
+    for module in modules:
+        for source in module["sources"]:
+            files[devtools_frontend_path + "/" + source] = True
+    return " ".join(files.keys())
+
+
+def verify_jsdoc_extra():
+    return subprocess.Popen("%s -jar %s %s" % (java_exec, jsdoc_validator_jar, dump_all_checked_files()), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
 
 
 def verify_jsdoc():
+    errors_found = False
     for module in modules:
         for file_name in module['sources']:
             lineIndex = 0
@@ -454,40 +137,86 @@
                     lineIndex += 1
                     if not line:
                         continue
-                    verify_jsdoc_line(full_file_name, lineIndex, line)
+                    if verify_jsdoc_line(full_file_name, lineIndex, line):
+                        errors_found = True
+    return errors_found
 
 
 def verify_jsdoc_line(fileName, lineIndex, line):
     def print_error(message, errorPosition):
         print "%s:%s: ERROR - %s\n%s\n%s\n" % (fileName, lineIndex, message, line, " " * errorPosition + "^")
 
+    errors_found = False
     match = re.search(invalid_type_regex, line)
     if match:
         print_error("Type '%s' nullability not marked explicitly with '?' (nullable) or '!' (non-nullable)" % match.group(1), match.start(1))
+        errors_found = True
 
     match = re.search(invalid_type_designator_regex, line)
     if (match):
         print_error("Type nullability indicator misplaced, should precede type", match.start(1))
+        errors_found = True
+    return errors_found
+
+
+def check_java_path():
+    proc = subprocess.Popen("which java", stdout=subprocess.PIPE, shell=True)
+    (javaPath, _) = proc.communicate()
+
+    if proc.returncode != 0:
+        print "Cannot find java ('which java' return code = %d, should be 0)" % proc.returncode
+        sys.exit(1)
+    print "Java executable: " + re.sub(r"\n$", "", javaPath)
+
+check_java_path()
 
 print "Verifying 'importScript' function usage..."
-verify_importScript_usage()
+errors_found |= verify_importScript_usage()
 
 print "Verifying JSDoc comments..."
-verify_jsdoc()
+errors_found |= verify_jsdoc()
+jsdocValidatorProc = verify_jsdoc_extra()
 
-proc = subprocess.Popen("which java", stdout=subprocess.PIPE, shell=True)
-(javaPath, _) = proc.communicate()
+modules_dir = tempfile.mkdtemp()
+common_closure_args = " --summary_detail_level 3 --compilation_level SIMPLE_OPTIMIZATIONS --warning_level VERBOSE --language_in ECMASCRIPT5 --accept_const_keyword --module_output_path_prefix %s/" % modules_dir
 
-if proc.returncode != 0:
-    print "Cannot find java ('which java' return code = %d, should be 0)" % proc.returncode
-    sys.exit(1)
+compiler_args_file = tempfile.NamedTemporaryFile(mode='wt', delete=False)
+closure_runner_command = "%s -jar %s --compiler-args-file %s" % (java_exec, closure_runner_jar, compiler_args_file.name)
 
-javaPath = re.sub(r"\n$", "", javaPath)
+spawned_compiler_command = "%s -jar %s %s \\\n" % (java_exec, closure_compiler_jar, common_closure_args)
 
 modules_by_name = {}
 for module in modules:
     modules_by_name[module["name"]] = module
 
+dependents_by_module_name = {}
+for module in modules:
+    name = module["name"]
+    for dep in module["dependencies"]:
+        list = dependents_by_module_name.get(dep)
+        if not list:
+            list = []
+            dependents_by_module_name[dep] = list
+        list.append(name)
+
+standalone_modules = []
+for module in modules:
+    if "standalone" in module:
+        standalone_modules.append(module)
+
+
+def verify_standalone_modules():
+    standalone_module_names = {}
+    for standalone_module in standalone_modules:
+        standalone_module_names[standalone_module["name"]] = True
+    for module in modules:
+        for dependency in module["dependencies"]:
+            if dependency in standalone_module_names:
+                print "ERROR: Standalone module %s cannot be in dependencies of %s" % (dependency, module["name"])
+                errors_found = True
+
+verify_standalone_modules()
+
 
 def dump_module(name, recursively, processed_modules):
     if name in processed_modules:
@@ -498,7 +227,7 @@
     if recursively:
         for dependency in module["dependencies"]:
             command += dump_module(dependency, recursively, processed_modules)
-    command += " \\\n    --module " + jsmodule_name_prefix + module["name"] + ":"
+    command += " --module " + jsmodule_name_prefix + module["name"] + ":"
     command += str(len(module["sources"]))
     firstDependency = True
     for dependency in module["dependencies"]:
@@ -509,89 +238,125 @@
         firstDependency = False
         command += jsmodule_name_prefix + dependency
     for script in module["sources"]:
-        command += " \\\n        --js " + devtools_frontend_path + "/" + script
+        command += " --js " + devtools_frontend_path + "/" + script
     return command
 
-modules_dir = tempfile.mkdtemp()
-compiler_command = "java -jar %s/closure/compiler.jar --summary_detail_level 3 --compilation_level SIMPLE_OPTIMIZATIONS \
-    --warning_level VERBOSE --language_in ECMASCRIPT5 --accept_const_keyword --module_output_path_prefix %s/ \\\n" % (scripts_path, modules_dir)
+print "Compiling frontend..."
 
-process_recursively = len(sys.argv) > 1
-if process_recursively:
-    module_name = sys.argv[1]
-    if module_name != "all":
-        modules = []
-        for i in range(1, len(sys.argv)):
-            modules.append(modules_by_name[sys.argv[i]])
-    for module in modules:
-        command = compiler_command
-        command += "    --externs " + devtools_frontend_path + "/externs.js" + " \\\n"
-        command += "    --externs " + protocol_externs_path
-        command += dump_module(module["name"], True, {})
-        print "Compiling \"" + module["name"] + "\"..."
-        os.system(command)
-else:
-    command = compiler_command
-    command += "    --externs " + devtools_frontend_path + "/externs.js" + " \\\n"
-    command += "    --externs " + protocol_externs_path
-    for module in modules:
-        command += dump_module(module["name"], False, {})
-    print "Compiling front_end (java executable: %s)..." % javaPath
-    frontEndCompileProc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+for module in modules:
+    closure_args = common_closure_args
+    closure_args += " --externs " + devtools_frontend_path + "/externs.js"
+    closure_args += " --externs " + protocol_externs_file
+    closure_args += dump_module(module["name"], True, {})
+    compiler_args_file.write("%s %s\n" % (module["name"], closure_args))
 
-    def unclosure_injected_script(sourceFileName, outFileName):
-        sourceFile = open(sourceFileName, "r")
-        source = sourceFile.read()
-        sourceFile.close()
+compiler_args_file.close()
+modular_compiler_proc = subprocess.Popen(closure_runner_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
 
-        def replace_function(matchobj):
-            return re.sub(r"@param", "param", matchobj.group(1) or "") + "\n//" + matchobj.group(2)
 
-        # Comment out the closure function and its jsdocs
-        source = re.sub(r"(/\*\*(?:[\s\n]*\*\s*@param[^\n]+\n)+\s*\*/\s*)?\n(\(function)", replace_function, source, count=1)
+def unclosure_injected_script(sourceFileName, outFileName):
+    sourceFile = open(sourceFileName, "r")
+    source = sourceFile.read()
+    sourceFile.close()
 
-        # Comment out its return statement
-        source = re.sub(r"\n(\s*return\s+[^;]+;\s*\n\}\)\s*)$", "\n/*\\1*/", source)
+    def replace_function(matchobj):
+        return re.sub(r"@param", "param", matchobj.group(1) or "") + "\n//" + matchobj.group(2)
 
-        outFileName = open(outFileName, "w")
-        outFileName.write(source)
-        outFileName.close()
+    # Comment out the closure function and its jsdocs
+    source = re.sub(r"(/\*\*(?:[\s\n]*\*\s*@param[^\n]+\n)+\s*\*/\s*)?\n(\(function)", replace_function, source, count=1)
 
-    injectedScriptSourceTmpFile = inspector_path + "/" + "InjectedScriptSourceTmp.js"
-    injectedScriptCanvasModuleSourceTmpFile = inspector_path + "/" + "InjectedScriptCanvasModuleSourceTmp.js"
+    # Comment out its return statement
+    source = re.sub(r"\n(\s*return\s+[^;]+;\s*\n\}\)\s*)$", "\n/*\\1*/", source)
 
-    unclosure_injected_script(inspector_path + "/" + "InjectedScriptSource.js", injectedScriptSourceTmpFile)
-    unclosure_injected_script(inspector_path + "/" + "InjectedScriptCanvasModuleSource.js", injectedScriptCanvasModuleSourceTmpFile)
+    outFileName = open(outFileName, "w")
+    outFileName.write(source)
+    outFileName.close()
 
-    print "Compiling InjectedScriptSource.js and InjectedScriptCanvasModuleSource.js..."
-    command = compiler_command
-    command += "    --externs " + inspector_path + "/" + "InjectedScriptExterns.js" + " \\\n"
-    command += "    --externs " + protocol_externs_path + " \\\n"
-    command += "    --module " + jsmodule_name_prefix + "injected_script" + ":1" + " \\\n"
-    command += "        --js " + injectedScriptSourceTmpFile + " \\\n"
-    command += "    --module " + jsmodule_name_prefix + "injected_canvas_script" + ":1:" + jsmodule_name_prefix + "injected_script" + " \\\n"
-    command += "        --js " + injectedScriptCanvasModuleSourceTmpFile + " \\\n"
-    command += "\n"
+injectedScriptSourceTmpFile = inspector_path + "/" + "InjectedScriptSourceTmp.js"
+injectedScriptCanvasModuleSourceTmpFile = inspector_path + "/" + "InjectedScriptCanvasModuleSourceTmp.js"
 
-    injectedScriptCompileProc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+unclosure_injected_script(inspector_path + "/" + "InjectedScriptSource.js", injectedScriptSourceTmpFile)
+unclosure_injected_script(inspector_path + "/" + "InjectedScriptCanvasModuleSource.js", injectedScriptCanvasModuleSourceTmpFile)
 
-    print "Checking generated code in InjectedScriptCanvasModuleSource.js..."
-    check_injected_webgl_calls_command = "%s/check_injected_webgl_calls_info.py %s %s/InjectedScriptCanvasModuleSource.js" % (scripts_path, webgl_rendering_context_idl_path, inspector_path)
-    canvasModuleCompileProc = subprocess.Popen(check_injected_webgl_calls_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+print "Compiling InjectedScriptSource.js and InjectedScriptCanvasModuleSource.js..."
+command = spawned_compiler_command
+command += "    --externs " + inspector_path + "/" + "InjectedScriptExterns.js" + " \\\n"
+command += "    --externs " + protocol_externs_file + " \\\n"
+command += "    --module " + jsmodule_name_prefix + "injected_script" + ":1" + " \\\n"
+command += "        --js " + injectedScriptSourceTmpFile + " \\\n"
+command += "    --module " + jsmodule_name_prefix + "injected_canvas_script" + ":1:" + jsmodule_name_prefix + "injected_script" + " \\\n"
+command += "        --js " + injectedScriptCanvasModuleSourceTmpFile + " \\\n"
+command += "\n"
 
-    print
+injectedScriptCompileProc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
 
-    (frontEndCompileOut, _) = frontEndCompileProc.communicate()
-    print "front_end compilation output:\n", frontEndCompileOut
+print "Checking generated code in InjectedScriptCanvasModuleSource.js..."
+check_injected_webgl_calls_command = "%s/check_injected_webgl_calls_info.py %s %s/InjectedScriptCanvasModuleSource.js" % (scripts_path, webgl_rendering_context_idl_path, inspector_path)
+canvasModuleCompileProc = subprocess.Popen(check_injected_webgl_calls_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
 
-    (injectedScriptCompileOut, _) = injectedScriptCompileProc.communicate()
-    print "InjectedScriptSource.js and InjectedScriptCanvasModuleSource.js compilation output:\n", injectedScriptCompileOut
+print
 
-    (canvasModuleCompileOut, _) = canvasModuleCompileProc.communicate()
-    print "InjectedScriptCanvasModuleSource.js generated code compilation output:\n", canvasModuleCompileOut
+(jsdocValidatorOut, _) = jsdocValidatorProc.communicate()
+if jsdocValidatorOut:
+    print ("JSDoc validator output:\n%s" % jsdocValidatorOut)
+    errors_found = True
 
-    os.system("rm " + injectedScriptSourceTmpFile)
-    os.system("rm " + injectedScriptCanvasModuleSourceTmpFile)
+(moduleCompileOut, _) = modular_compiler_proc.communicate()
+print "Modular compilation output:"
 
-shutil.rmtree(modules_dir)
-os.system("rm " + protocol_externs_path)
+start_module_regex = re.compile(r"^@@ START_MODULE:(.+) @@$")
+end_module_regex = re.compile(r"^@@ END_MODULE @@$")
+
+in_module = False
+skipped_modules = {}
+error_count = 0
+
+def skip_dependents(module_name):
+    for skipped_module in dependents_by_module_name.get(module_name, []):
+        skipped_modules[skipped_module] = True
+
+# pylint: disable=E1103
+for line in moduleCompileOut.splitlines():
+    if not in_module:
+        match = re.search(start_module_regex, line)
+        if not match:
+            continue
+        in_module = True
+        module_name = match.group(1)
+        skip_module = skipped_modules.get(module_name)
+        if skip_module:
+            skip_dependents(module_name)
+        module_output = ["Skipping module %s...\n" % module_name if skip_module else "Module %s:" % module_name]
+    else:
+        match = re.search(end_module_regex, line)
+        if not match:
+            if not skip_module:
+                module_output.append(line)
+                if hasErrors(line):
+                    error_count += 1
+                    skip_dependents(module_name)
+            continue
+
+        in_module = False
+        print os.linesep.join(module_output)
+
+if error_count:
+    print "Total Closure errors: %d\n" % error_count
+    errors_found = True
+
+(injectedScriptCompileOut, _) = injectedScriptCompileProc.communicate()
+print "InjectedScriptSource.js and InjectedScriptCanvasModuleSource.js compilation output:\n", injectedScriptCompileOut
+errors_found |= hasErrors(injectedScriptCompileOut)
+
+(canvasModuleCompileOut, _) = canvasModuleCompileProc.communicate()
+print "InjectedScriptCanvasModuleSource.js generated code check output:\n", canvasModuleCompileOut
+errors_found |= hasErrors(canvasModuleCompileOut)
+
+if errors_found:
+    print "ERRORS DETECTED"
+
+os.remove(injectedScriptSourceTmpFile)
+os.remove(injectedScriptCanvasModuleSourceTmpFile)
+os.remove(compiler_args_file.name)
+os.remove(protocol_externs_file)
+shutil.rmtree(modules_dir, True)
diff --git a/Source/devtools/scripts/compiler-runner/OWNERS b/Source/devtools/scripts/compiler-runner/OWNERS
new file mode 100644
index 0000000..be5c317
--- /dev/null
+++ b/Source/devtools/scripts/compiler-runner/OWNERS
@@ -0,0 +1 @@
+apavlov@chromium.org
diff --git a/Source/devtools/scripts/compiler-runner/build_compiler_runner_jar.py b/Source/devtools/scripts/compiler-runner/build_compiler_runner_jar.py
new file mode 100755
index 0000000..c0e8dac
--- /dev/null
+++ b/Source/devtools/scripts/compiler-runner/build_compiler_runner_jar.py
@@ -0,0 +1,73 @@
+#!/usr/bin/python
+
+import os
+import shutil
+import subprocess
+import sys
+import tempfile
+
+
+def rel_to_abs(rel_path):
+    return os.path.join(script_path, rel_path)
+
+
+java_bin_path = os.getenv('JAVA_HOME', '')
+if java_bin_path:
+    java_bin_path = os.path.join(java_bin_path, 'bin')
+
+main_class = 'org.chromium.devtools.compiler.Runner'
+jar_name = 'closure-runner.jar'
+src_dir = 'src'
+script_path = os.path.dirname(os.path.abspath(__file__))
+closure_jar_relpath = os.path.join('..', 'closure', 'compiler.jar')
+src_path = rel_to_abs(src_dir)
+
+
+def run_and_communicate(command, error_template):
+    proc = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
+    proc.communicate()
+    if proc.returncode:
+        print >> sys.stderr, error_template % proc.returncode
+        sys.exit(proc.returncode)
+
+
+def build_artifacts():
+    print 'Compiling...'
+    java_files = []
+    for root, dirs, files in sorted(os.walk(src_path)):
+        for file_name in files:
+            java_files.append(os.path.join(root, file_name))
+
+    bin_path = tempfile.mkdtemp()
+    manifest_file = tempfile.NamedTemporaryFile(mode='wt', delete=False)
+    try:
+        manifest_file.write('Class-Path: %s\n' % closure_jar_relpath)
+        manifest_file.close()
+        javac_path = os.path.join(java_bin_path, 'javac')
+        javac_command = '%s -d %s -cp %s %s' % (javac_path, bin_path, rel_to_abs(closure_jar_relpath), ' '.join(java_files))
+        run_and_communicate(javac_command, 'Error: javac returned %d')
+
+        print 'Building jar...'
+        artifact_path = rel_to_abs(jar_name)
+        jar_path = os.path.join(java_bin_path, 'jar')
+        jar_command = '%s cvfme %s %s %s -C %s .' % (jar_path, artifact_path, manifest_file.name, main_class, bin_path)
+        run_and_communicate(jar_command, 'Error: jar returned %d')
+    finally:
+        os.remove(manifest_file.name)
+        shutil.rmtree(bin_path, True)
+
+
+def help():
+    print 'usage: %s' % os.path.basename(__file__)
+    print 'Builds compiler-runner.jar from the %s directory contents' % src_dir
+
+
+def main():
+    if len(sys.argv) > 1:
+        help()
+        return
+    build_artifacts()
+    print 'Done.'
+
+if __name__ == '__main__':
+    main()
diff --git a/Source/devtools/scripts/compiler-runner/closure-runner.jar b/Source/devtools/scripts/compiler-runner/closure-runner.jar
new file mode 100644
index 0000000..66afaae
--- /dev/null
+++ b/Source/devtools/scripts/compiler-runner/closure-runner.jar
Binary files differ
diff --git a/Source/devtools/scripts/compiler-runner/src/org/chromium/devtools/compiler/Runner.java b/Source/devtools/scripts/compiler-runner/src/org/chromium/devtools/compiler/Runner.java
new file mode 100644
index 0000000..6c4995d
--- /dev/null
+++ b/Source/devtools/scripts/compiler-runner/src/org/chromium/devtools/compiler/Runner.java
@@ -0,0 +1,242 @@
+package org.chromium.devtools.compiler;
+
+import com.google.common.collect.Lists;
+import com.google.javascript.jscomp.CommandLineRunner;
+import com.google.javascript.jscomp.CompilerOptions;
+
+import org.kohsuke.args4j.CmdLineException;
+import org.kohsuke.args4j.CmdLineParser;
+import org.kohsuke.args4j.Option;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Prepares and executes several instances of the closure compiler.
+ */
+public class Runner {
+    protected final Flags flags = new Flags();
+    private final PrintStream err;
+    private boolean isConfigValid;
+
+    public Runner(String[] args, PrintStream err) {
+        this.err = err;
+        List<String> argList = processArgs(args);
+        CmdLineParser parser = new CmdLineParser(flags);
+        isConfigValid = true;
+        try {
+            parser.parseArgument(argList.toArray(new String[] {}));
+            if (flags.compilerArgsFile == null) {
+                isConfigValid = false;
+            }
+        } catch (CmdLineException e) {
+            err.println(e.getMessage());
+            isConfigValid = false;
+        }
+
+        if (!isConfigValid) {
+            parser.printUsage(err);
+        }
+    }
+
+    private List<String> processArgs(String[] args) {
+        Pattern argPattern = Pattern.compile("(--[a-zA-Z_]+)=(.*)");
+        Pattern quotesPattern = Pattern.compile("^['\"](.*)['\"]$");
+        List<String> processedArgs = Lists.newArrayList();
+
+        for (String arg : args) {
+            Matcher matcher = argPattern.matcher(arg);
+            if (matcher.matches()) {
+                processedArgs.add(matcher.group(1));
+
+                String value = matcher.group(2);
+                Matcher quotesMatcher = quotesPattern.matcher(value);
+                if (quotesMatcher.matches()) {
+                    processedArgs.add(quotesMatcher.group(1));
+                } else {
+                    processedArgs.add(value);
+                }
+            } else {
+                processedArgs.add(arg);
+            }
+        }
+
+        return processedArgs;
+    }
+
+    private boolean shouldRunCompiler() {
+        return isConfigValid;
+    }
+
+    protected void logError(String message, Exception e) {
+        err.println("ERROR: " + message);
+        if (e != null) {
+            e.printStackTrace(err);
+        }
+    }
+
+    private void run() {
+        List<CompilerInstanceDescriptor> descriptors = getDescriptors();
+        if (descriptors == null) {
+            return;
+        }
+        ExecutorService executor = Executors.newFixedThreadPool(
+                Math.min(descriptors.size(), Runtime.getRuntime().availableProcessors() / 2 + 1));
+        try {
+            runWithExecutor(descriptors, executor);
+        } finally {
+            executor.shutdown();
+        }
+    }
+
+    private void runWithExecutor(
+            List<CompilerInstanceDescriptor> descriptors, ExecutorService executor) {
+        List<Future<CompilerRunner>> futures = new ArrayList<>(descriptors.size());
+        for (CompilerInstanceDescriptor descriptor : descriptors) {
+            CompilerRunner task = new CompilerRunner(descriptor, new ByteArrayOutputStream(512));
+            futures.add(executor.submit(task));
+        }
+
+        for (Future<CompilerRunner> future : futures) {
+            try {
+                CompilerRunner task = future.get();
+                int result = task.result;
+                if (result != 0) {
+                    System.err.println("ERROR: Compiler returned " + result);
+                }
+                task.errStream.flush();
+                System.err.println("@@ START_MODULE:" + task.descriptor.moduleName + " @@");
+                System.err.println(task.errStream.toString("UTF-8"));
+                System.err.println("@@ END_MODULE @@");
+            } catch (Exception e) {
+                System.err.println("ERROR - " + e.getMessage());
+            }
+        }
+        System.exit(0);
+    }
+
+    private List<CompilerInstanceDescriptor> getDescriptors() {
+        List<CompilerInstanceDescriptor> result = new ArrayList<>();
+        try (BufferedReader reader = new BufferedReader(
+                new InputStreamReader(
+                        new FileInputStream(flags.compilerArgsFile), "UTF-8"))) {
+            int lineIndex = 0;
+            while (true) {
+                ++lineIndex;
+                String line = reader.readLine();
+                if (line == null) {
+                    break;
+                }
+                if (line.length() == 0) {
+                    continue;
+                }
+                String[] moduleAndArgs = line.split(" +", 2);
+                if (moduleAndArgs.length != 2) {
+                    logError(String.format(
+                            "Line %d does not contain module name and compiler arguments",
+                            lineIndex), null);
+                    continue;
+                }
+                result.add(new CompilerInstanceDescriptor(moduleAndArgs[0], moduleAndArgs[1]));
+            }
+        } catch (IOException e) {
+            logError("Failed to read compiler arguments file", e);
+            return null;
+        }
+
+        return result;
+    }
+
+    public static void main(String[] args) {
+        Runner runner = new Runner(args, System.err);
+        if (runner.shouldRunCompiler()) {
+            runner.run();
+        } else {
+            System.exit(-1);
+        }
+    }
+
+    private static class LocalCommandLineRunner extends CommandLineRunner {
+        protected LocalCommandLineRunner(String[] args, PrintStream out, PrintStream err) {
+            super(args, out, err);
+        }
+
+        @Override
+        protected CompilerOptions createOptions() {
+            CompilerOptions options = super.createOptions();
+            options.setIdeMode(true);
+            return options;
+        }
+
+        int execute() {
+            int result = 0;
+            int runs = 1;
+            try {
+                for (int i = 0; i < runs && result == 0; i++) {
+                    result = doRun();
+                }
+            } catch (Throwable t) {
+                t.printStackTrace();
+                result = -2;
+            }
+            return result;
+        }
+    }
+
+    private static class CompilerRunner implements Callable<CompilerRunner> {
+        private final CompilerInstanceDescriptor descriptor;
+        private final ByteArrayOutputStream errStream;
+        private int result;
+
+        public CompilerRunner(
+                CompilerInstanceDescriptor descriptor, ByteArrayOutputStream errStream) {
+            this.descriptor = descriptor;
+            this.errStream = errStream;
+        }
+
+        @Override
+        public CompilerRunner call() throws Exception {
+            PrintStream errPrintStream = new PrintStream(errStream, false, "UTF-8");
+            LocalCommandLineRunner runner =
+                    new LocalCommandLineRunner(prepareArgs(), System.out, errPrintStream);
+            if (!runner.shouldRunCompiler()) {
+                this.result = -1;
+            }
+            this.result = runner.execute();
+            return this;
+        }
+
+        private String[] prepareArgs() {
+            // FIXME: This does not support quoted arguments.
+            return descriptor.commandLine.split(" +");
+        }
+    }
+
+    private static class Flags {
+        @Option(name = "--compiler-args-file",
+                usage = "Full path to file containing compiler arguments (one line per instance)")
+        private String compilerArgsFile = null;
+    }
+
+    private static class CompilerInstanceDescriptor {
+        private final String moduleName;
+        private final String commandLine;
+
+        public CompilerInstanceDescriptor(String moduleName, String commandLine) {
+            this.moduleName = moduleName;
+            this.commandLine = commandLine;
+        }
+    }
+}
diff --git a/Source/devtools/scripts/convert_svg_images_to_png.py b/Source/devtools/scripts/convert_svg_images_to_png.py
new file mode 100755
index 0000000..52511f7
--- /dev/null
+++ b/Source/devtools/scripts/convert_svg_images_to_png.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python
+# Copyright (c) 2014 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.
+
+import devtools_file_hashes
+import hashlib
+import optimize_svg_file
+import os
+import os.path
+import re
+import subprocess
+import sys
+
+try:
+    import json
+except ImportError:
+    import simplejson as json
+
+
+def check_installed(app_name):
+    proc = subprocess.Popen("which %s" % app_name, stdout=subprocess.PIPE, shell=True)
+    proc.communicate()
+    if proc.returncode != 0:
+        print "This script needs \"%s\" to be installed." % app_name
+        sys.exit(1)
+
+
+def optimize_svg(svg_file_path):
+    errors = []
+    optimize_svg_file.optimize_svg(svg_file_path, errors)
+    if len(errors) != 0:
+        print "Failed to optimize '%s'" % (svg_file_path)
+        for error in errors:
+            print "ERROR: %s" % (error)
+        return True
+    return False
+
+check_installed("inkscape")
+
+scripts_path = os.path.dirname(os.path.abspath(__file__))
+devtools_path = os.path.dirname(scripts_path)
+devtools_frontend_path = devtools_path + "/front_end"
+images_path = devtools_frontend_path + "/Images"
+image_sources_path = images_path + "/src"
+hashes_file_name = "svg2png.hashes"
+hashes_file_path = image_sources_path + "/" + hashes_file_name
+
+file_names = os.listdir(image_sources_path)
+svg_file_paths = [image_sources_path + "/" + file_name for file_name in file_names if file_name.endswith(".svg")]
+
+svg_optimization_failures = [optimize_svg(svg_file_path) for svg_file_path in svg_file_paths]
+if any(svg_optimization_failures):
+    sys.exit(1)
+
+svg_file_paths_to_convert = devtools_file_hashes.files_with_invalid_hashes(hashes_file_path, svg_file_paths)
+svg_file_names = [re.sub(".svg$", "", re.sub(".*/", "", file_path)) for file_path in svg_file_paths_to_convert]
+
+
+def convert_svg_to_png(svg_file_name, png_file_name, dpi):
+    svg_full_path = image_sources_path + "/" + svg_file_name + ".svg"
+    png_full_path = images_path + "/" + png_file_name + ".png"
+    convert_command = "inkscape -f %s -e %s -d %s" % (svg_full_path, png_full_path, dpi)
+    proc = subprocess.Popen(convert_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+    return proc
+
+processes = {}
+for file_name in svg_file_names:
+    name = re.sub(".svg$", "", file_name)
+    name2x = name + "_2x"
+    processes[name] = convert_svg_to_png(name, name, 90)
+    processes[name2x] = convert_svg_to_png(name, name2x, 180)
+
+for file_name, proc in processes.items():
+    (convert_out, _) = proc.communicate()
+    print("Conversion of %s finished: %s" % (file_name, convert_out))
+
+devtools_file_hashes.update_file_hashes(hashes_file_path, svg_file_paths)
diff --git a/Source/devtools/scripts/devtools_file_hashes.py b/Source/devtools/scripts/devtools_file_hashes.py
new file mode 100644
index 0000000..6eaefcb
--- /dev/null
+++ b/Source/devtools/scripts/devtools_file_hashes.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+# Copyright (c) 2014 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.
+
+import hashlib
+import re
+
+try:
+    import json
+except ImportError:
+    import simplejson as json
+
+
+def save_hashes(hashes_file_path, hashes):
+    try:
+        with open(hashes_file_path, "wt") as hashes_file:
+            json.dump(hashes, hashes_file, indent=4, separators=(",", ": "))
+    except:
+        print "ERROR: Failed to write %s" % hashes_file_path
+        raise
+
+
+def load_hashes(hashes_file_path):
+    try:
+        with open(hashes_file_path, "r") as hashes_file:
+            hashes = json.load(hashes_file)
+    except:
+        return {}
+    return hashes
+
+
+def calculate_file_hash(file_path):
+    with open(file_path) as file:
+        data = file.read()
+        md5_hash = hashlib.md5(data).hexdigest()
+    return md5_hash
+
+
+def files_with_invalid_hashes(hash_file_path, file_paths):
+    hashes = load_hashes(hash_file_path)
+    result = []
+    for file_path in file_paths:
+        file_name = re.sub(".*/", "", file_path)
+        if calculate_file_hash(file_path) != hashes.get(file_name, ""):
+            result.append(file_path)
+    return result
+
+
+def update_file_hashes(hash_file_path, file_paths):
+    hashes = {}
+    for file_path in file_paths:
+        file_name = re.sub(".*/", "", file_path)
+        hashes[file_name] = calculate_file_hash(file_path)
+    save_hashes(hash_file_path, hashes)
diff --git a/Source/devtools/scripts/frontend_modules.json b/Source/devtools/scripts/frontend_modules.json
new file mode 100644
index 0000000..de491e4
--- /dev/null
+++ b/Source/devtools/scripts/frontend_modules.json
@@ -0,0 +1,436 @@
+[
+    {
+        "name": "common",
+        "dependencies": [],
+        "sources": [
+            "modules.js",
+            "Color.js",
+            "DOMExtension.js",
+            "Geometry.js",
+            "ModuleManager.js",
+            "Object.js",
+            "ParsedURL.js",
+            "Platform.js",
+            "Progress.js",
+            "Settings.js",
+            "TextRange.js",
+            "UIString.js",
+            "UserMetrics.js",
+            "utilities.js"
+        ]
+    },
+    {
+        "name": "sdk",
+        "dependencies": ["common"],
+        "sources": [
+            "ApplicationCacheModel.js",
+            "CompilerScriptMapping.js",
+            "ConsoleModel.js",
+            "ContentProvider.js",
+            "ContentProviderBasedProjectDelegate.js",
+            "ContentProviders.js",
+            "CookieParser.js",
+            "CPUProfilerModel.js",
+            "CSSMetadata.js",
+            "CSSStyleModel.js",
+            "CSSStyleSheetMapping.js",
+            "BreakpointManager.js",
+            "Database.js",
+            "DOMAgent.js",
+            "DOMStorage.js",
+            "DebuggerModel.js",
+            "DebuggerScriptMapping.js",
+            "FileManager.js",
+            "FileSystemMapping.js",
+            "FileSystemModel.js",
+            "FileSystemProjectDelegate.js",
+            "FileUtils.js",
+            "HAREntry.js",
+            "IndexedDBModel.js",
+            "InspectorBackend.js",
+            "IsolatedFileSystemManager.js",
+            "IsolatedFileSystem.js",
+            "Linkifier.js",
+            "NetworkLog.js",
+            "NetworkUISourceCodeProvider.js",
+            "NotificationService.js",
+            "OverridesSupport.js",
+            "PresentationConsoleMessageHelper.js",
+            "WorkerManager.js",
+            "RuntimeModel.js",
+            "SASSSourceMapping.js",
+            "Script.js",
+            "ScriptFormatter.js",
+            "ScriptSnippetModel.js",
+            "SimpleWorkspaceProvider.js",
+            "SnippetStorage.js",
+            "SourceMapping.js",
+            "StylesSourceMapping.js",
+            "TempFile.js",
+            "TimelineManager.js",
+            "RemoteObject.js",
+            "Resource.js",
+            "DefaultScriptMapping.js",
+            "ResourceScriptMapping.js",
+            "LiveEditSupport.js",
+            "ResourceTreeModel.js",
+            "ResourceType.js",
+            "ResourceUtils.js",
+            "SourceMap.js",
+            "TracingAgent.js",
+            "NetworkManager.js",
+            "NetworkRequest.js",
+            "UISourceCode.js",
+            "Workspace.js",
+            "WorkspaceController.js",
+            "PaintProfiler.js"
+        ]
+    },
+    {
+        "name": "ui",
+        "dependencies": ["common"],
+        "sources": [
+            "Checkbox.js",
+            "ContextMenu.js",
+            "CompletionDictionary.js",
+            "DataGrid.js",
+            "Dialog.js",
+            "DockController.js",
+            "Drawer.js",
+            "EmptyView.js",
+            "FilterBar.js",
+            "GoToLineDialog.js",
+            "HelpScreen.js",
+            "InplaceEditor.js",
+            "InspectorView.js",
+            "KeyboardShortcut.js",
+            "OverviewGrid.js",
+            "Panel.js",
+            "Placard.js",
+            "Popover.js",
+            "ProgressIndicator.js",
+            "PropertiesSection.js",
+            "SearchableView.js",
+            "Section.js",
+            "SettingsUI.js",
+            "SidebarOverlay.js",
+            "SidebarPane.js",
+            "SidebarTreeElement.js",
+            "ShortcutsScreen.js",
+            "ShowMoreDataGridNode.js",
+            "SoftContextMenu.js",
+            "Spectrum.js",
+            "SplitView.js",
+            "StackView.js",
+            "StatusBarButton.js",
+            "SuggestBox.js",
+            "TabbedPane.js",
+            "TextEditor.js",
+            "TextPrompt.js",
+            "TextUtils.js",
+            "TimelineGrid.js",
+            "UIUtils.js",
+            "View.js",
+            "ViewportControl.js",
+            "ZoomManager.js",
+            "treeoutline.js"
+        ]
+    },
+    {
+        "name": "codemirror",
+        "dependencies": ["common", "ui"],
+        "sources": [
+            "CodeMirrorTextEditor.js",
+            "CodeMirrorUtils.js"
+        ]
+    },
+    {
+        "name": "components",
+        "dependencies": ["sdk", "ui"],
+        "sources": [
+            "AdvancedSearchController.js",
+            "HandlerRegistry.js",
+            "ConsoleMessage.js",
+            "CookiesTable.js",
+            "DOMBreakpointsSidebarPane.js",
+            "DOMPresentationUtils.js",
+            "ExtensionServerProxy.js",
+            "FlameChart.js",
+            "HelpScreenUntilReload.js",
+            "NativeBreakpointsSidebarPane.js",
+            "InspectElementModeController.js",
+            "ObjectPopoverHelper.js",
+            "ObjectPropertiesSection.js",
+            "ScreencastView.js"
+        ]
+    },
+    {
+        "name": "source_frame",
+        "dependencies": ["components", "codemirror"],
+        "sources": [
+            "SourceFrame.js"
+        ]
+    },
+    {
+        "name": "resource_views",
+        "dependencies": ["source_frame"],
+        "sources": [
+            "FontView.js",
+            "ImageView.js",
+            "ResourceView.js"
+        ]
+    },
+    {
+        "name": "elements",
+        "dependencies": ["components", "codemirror"],
+        "sources": [
+            "DOMSyntaxHighlighter.js",
+            "ElementsPanel.js",
+            "ElementsTreeOutline.js",
+            "EventListenersSidebarPane.js",
+            "MetricsSidebarPane.js",
+            "OverridesView.js",
+            "PlatformFontsSidebarPane.js",
+            "PropertiesSidebarPane.js",
+            "StylesSidebarPane.js",
+            "RenderingOptionsView.js"
+        ]
+    },
+    {
+        "name": "network",
+        "dependencies": ["components", "resource_views"],
+        "sources": [
+            "NetworkItemView.js",
+            "RequestCookiesView.js",
+            "RequestHeadersView.js",
+            "RequestHTMLView.js",
+            "RequestJSONView.js",
+            "RequestPreviewView.js",
+            "RequestResponseView.js",
+            "RequestTimingView.js",
+            "RequestView.js",
+            "ResourceWebSocketFrameView.js",
+            "NetworkPanel.js"
+        ]
+    },
+    {
+        "name": "resources",
+        "dependencies": ["components", "resource_views"],
+        "sources": [
+            "ApplicationCacheItemsView.js",
+            "CookieItemsView.js",
+            "DatabaseQueryView.js",
+            "DatabaseTableView.js",
+            "DirectoryContentView.js",
+            "DOMStorageItemsView.js",
+            "FileContentView.js",
+            "FileSystemView.js",
+            "IndexedDBViews.js",
+            "ResourcesPanel.js"
+        ]
+    },
+    {
+        "name": "workers",
+        "dependencies": ["components"],
+        "sources": [
+            "WorkerFrontendManager.js"
+        ]
+    },
+    {
+        "name": "sources",
+        "dependencies": ["components", "source_frame", "workers"],
+        "sources": [
+            "BreakpointsSidebarPane.js",
+            "CSSSourceFrame.js",
+            "CallStackSidebarPane.js",
+            "EditingLocationHistoryManager.js",
+            "FilePathScoreFunction.js",
+            "FilteredItemSelectionDialog.js",
+            "JavaScriptSourceFrame.js",
+            "NavigatorView.js",
+            "RevisionHistoryView.js",
+            "ScopeChainSidebarPane.js",
+            "SimpleHistoryManager.js",
+            "SourcesNavigator.js",
+            "SourcesPanel.js",
+            "SourcesSearchScope.js",
+            "StyleSheetOutlineDialog.js",
+            "TabbedEditorContainer.js",
+            "UISourceCodeFrame.js",
+            "WatchExpressionsSidebarPane.js",
+            "WorkersSidebarPane.js",
+            "ThreadsToolbar.js"
+        ]
+    },
+    {
+        "name": "console",
+        "dependencies": ["components"],
+        "sources": [
+            "ConsoleView.js",
+            "ConsolePanel.js"
+        ]
+    },
+    {
+        "name": "timeline",
+        "dependencies": ["components"],
+        "sources": [
+            "CountersGraph.js",
+            "MemoryStatistics.js",
+            "PieChart.js",
+            "TimelineEventOverview.js",
+            "TimelineFrameModel.js",
+            "TimelineFrameOverview.js",
+            "TimelineMemoryOverview.js",
+            "TimelineModel.js",
+            "TimelineOverviewPane.js",
+            "TimelineFlameChart.js",
+            "TimelinePanel.js",
+            "TimelinePresentationModel.js",
+            "TimelineView.js"
+        ]
+    },
+    {
+        "name": "audits",
+        "dependencies": ["components"],
+        "sources": [
+            "AuditCategories.js",
+            "AuditCategory.js",
+            "AuditController.js",
+            "AuditFormatters.js",
+            "AuditLauncherView.js",
+            "AuditResultView.js",
+            "AuditRules.js",
+            "AuditsPanel.js"
+        ]
+    },
+    {
+        "name": "layers",
+        "dependencies": ["components"],
+        "sources": [
+            "LayerTreeModel.js",
+            "LayersPanel.js",
+            "LayerTree.js",
+            "Layers3DView.js",
+            "LayerDetailsView.js",
+            "PaintProfilerView.js"
+        ]
+    },
+    {
+        "name": "extensions",
+        "dependencies": ["components", "audits", "sources"],
+        "sources": [
+            "ExtensionAPI.js",
+            "ExtensionAuditCategory.js",
+            "ExtensionPanel.js",
+            "ExtensionRegistryStub.js",
+            "ExtensionServer.js",
+            "ExtensionView.js"
+        ]
+    },
+    {
+        "name": "settings",
+        "dependencies": ["components"],
+        "sources": [
+            "SettingsScreen.js",
+            "EditFileSystemDialog.js"
+        ]
+    },
+    {
+        "name": "tests",
+        "dependencies": ["components"],
+        "sources": [
+            "TestController.js"
+        ]
+    },
+    {
+        "name": "temp_storage_shared_worker",
+        "standalone": true,
+        "dependencies": [],
+        "sources": [
+            "TempStorageSharedWorker.js"
+        ]
+    },
+    {
+        "name": "profiler",
+        "dependencies": ["components"],
+        "sources": [
+            "BottomUpProfileDataGridTree.js",
+            "CPUProfileView.js",
+            "HeapSnapshotCommon.js",
+            "HeapSnapshotDataGrids.js",
+            "HeapSnapshotGridNodes.js",
+            "HeapSnapshotProxy.js",
+            "HeapSnapshotView.js",
+            "ProfileDataGridTree.js",
+            "ProfilesPanel.js",
+            "ProfileLauncherView.js",
+            "TopDownProfileDataGridTree.js",
+            "CanvasProfileView.js",
+            "CanvasReplayStateView.js"
+        ]
+    },
+    {
+        "name": "heap_snapshot_worker",
+        "standalone": true,
+        "dependencies": [],
+        "sources": [
+            "AllocationProfile.js",
+            "HeapSnapshot.js",
+            "HeapSnapshotCommon.js",
+            "HeapSnapshotLoader.js",
+            "HeapSnapshotWorker.js",
+            "HeapSnapshotWorkerDispatcher.js",
+            "JSHeapSnapshot.js",
+            "TextUtils.js",
+            "UIString.js",
+            "utilities.js"
+        ]
+    },
+    {
+        "name": "host_stub",
+        "dependencies": ["components", "profiler", "timeline"],
+        "sources": [
+            "InspectorFrontendAPI.js",
+            "InspectorFrontendHostStub.js"
+        ]
+    },
+    {
+        "name": "script_formatter_worker",
+        "standalone": true,
+        "dependencies": [],
+        "sources": [
+            "CSSFormatter.js",
+            "JavaScriptFormatter.js",
+            "ScriptFormatterWorker.js",
+            "utilities.js"
+        ]
+    },
+    {
+        "name": "front_end",
+        "standalone": true,
+        "dependencies": [
+            "common",
+            "sdk",
+            "ui",
+            "codemirror",
+            "components",
+            "source_frame",
+            "resource_views",
+            "elements",
+            "network",
+            "resources",
+            "workers",
+            "sources",
+            "console",
+            "timeline",
+            "audits",
+            "layers",
+            "extensions",
+            "settings",
+            "tests",
+            "profiler",
+            "host_stub"
+        ],
+        "sources": []
+    }
+]
diff --git a/Source/devtools/scripts/generate_protocol_externs.py b/Source/devtools/scripts/generate_protocol_externs.py
index 02dec7b..acc451b 100755
--- a/Source/devtools/scripts/generate_protocol_externs.py
+++ b/Source/devtools/scripts/generate_protocol_externs.py
@@ -92,6 +92,8 @@
 
     output_file.write(
 """
+var InspectorBackend = {}
+
 var Protocol = {};
 /** @typedef {string}*/
 Protocol.Error;
diff --git a/Source/devtools/scripts/generate_supported_css.py b/Source/devtools/scripts/generate_supported_css.py
new file mode 100755
index 0000000..2883c94
--- /dev/null
+++ b/Source/devtools/scripts/generate_supported_css.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+# Copyright (c) 2014 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.
+
+try:
+    import simplejson as json
+except ImportError:
+    import json
+
+import sys
+
+cssProperties = {}
+
+
+def filterCommentsAndEmptyLines(lines):
+    result = []
+    for line in lines:
+        if len(line.strip()) > 0 and line[:2] != "//":
+            result.append(line.strip())
+    return result
+
+
+def fillPropertiesFromFile(fileName):
+    with open(fileName, "r") as f:
+        lines = f.readlines()
+    lines = filterCommentsAndEmptyLines(lines)
+    for line in lines:
+        if not "alias_for" in line:
+            cssProperties[line] = []
+
+
+def fillCSSShorthandsFromFile(fileName):
+    with open(fileName, "r") as f:
+        lines = f.readlines()
+    lines = filterCommentsAndEmptyLines(lines)
+    for line in lines:
+        # Every line is:
+        #  <property-name>[ longhands=<longhand 1>;<longhand 2>;<longhand 3>,runtimeEnabledShorthand=<runtime flag name>]
+        # There might be a runtime flag declaration at the end of the list followed by a comma.
+        if "," in line:
+            line = line[:line.index(",")]
+        shorthand = line[:line.index(" ")]
+        longhands = line[line.index("=") + 1:].split(";")
+        cssProperties[shorthand] = longhands
+
+fillPropertiesFromFile(sys.argv[1])
+fillPropertiesFromFile(sys.argv[2])
+fillCSSShorthandsFromFile(sys.argv[3])
+
+# Reformat from map into list.
+reformat = []
+for name, longhands in cssProperties.items():
+    entry = {"name": name}
+    if len(longhands) > 0:
+        entry["longhands"] = longhands
+    reformat.append(entry)
+
+with open(sys.argv[4], "w") as f:
+    f.write("WebInspector.CSSMetadata.initializeWithSupportedProperties(%s);" % json.dumps(reformat))
diff --git a/Source/devtools/scripts/jsdoc-validator/OWNERS b/Source/devtools/scripts/jsdoc-validator/OWNERS
new file mode 100644
index 0000000..be5c317
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/OWNERS
@@ -0,0 +1 @@
+apavlov@chromium.org
diff --git a/Source/devtools/scripts/jsdoc-validator/PRESUBMIT.py b/Source/devtools/scripts/jsdoc-validator/PRESUBMIT.py
new file mode 100644
index 0000000..48f1841
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/PRESUBMIT.py
@@ -0,0 +1,55 @@
+# Copyright (C) 2013 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.
+
+"""DevTools JSDoc validator presubmit script
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details about the presubmit API built into gcl.
+"""
+
+import sys
+
+
+def _ValidateHashes(input_api, output_api):
+    sys.path.append(input_api.PresubmitLocalPath())
+    import build_jsdoc_validator_jar
+    hashes_modified = build_jsdoc_validator_jar.hashes_modified()
+    if not hashes_modified:
+        return []
+
+    results = '\n'.join(['%s (%s != %s)' % (name, expected, actual) for (name, expected, actual) in hashes_modified])
+    return [output_api.PresubmitError('DevTools frontend JSDoc validator Java code, "%s" and "%s" must always be updated together. Please rebuild.\nModifications found:\n%s' %
+            (build_jsdoc_validator_jar.jar_name, build_jsdoc_validator_jar.hashes_name, results))]
+
+
+def CheckChangeOnUpload(input_api, output_api):
+    return _ValidateHashes(input_api, output_api)
+
+
+def CheckChangeOnCommit(input_api, output_api):
+    return _ValidateHashes(input_api, output_api)
diff --git a/Source/devtools/scripts/jsdoc-validator/build_jsdoc_validator_jar.py b/Source/devtools/scripts/jsdoc-validator/build_jsdoc_validator_jar.py
new file mode 100755
index 0000000..ae8b811
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/build_jsdoc_validator_jar.py
@@ -0,0 +1,164 @@
+#!/usr/bin/python
+
+import hashlib
+import operator
+import os
+import shutil
+import stat
+import subprocess
+import sys
+import tempfile
+
+
+def rel_to_abs(rel_path):
+    return os.path.join(script_path, rel_path)
+
+
+java_bin_path = os.getenv('JAVA_HOME', '')
+if java_bin_path:
+    java_bin_path = os.path.join(java_bin_path, 'bin')
+
+main_class = 'org.chromium.devtools.jsdoc.JsDocValidator'
+jar_name = 'jsdoc-validator.jar'
+hashes_name = 'hashes'
+src_dir = 'src'
+script_path = os.path.dirname(os.path.abspath(__file__))
+closure_jar_relpath = os.path.join('..', 'closure', 'compiler.jar')
+src_path = rel_to_abs(src_dir)
+hashes_path = rel_to_abs(hashes_name)
+
+
+def get_file_hash(file, blocksize=65536):
+    sha = hashlib.sha256()
+    buf = file.read(blocksize)
+    while len(buf) > 0:
+        sha.update(buf)
+        buf = file.read(blocksize)
+    return sha.hexdigest()
+
+
+def traverse(hasher, path):
+    abs_path = rel_to_abs(path)
+    info = os.lstat(abs_path)
+    quoted_name = repr(path.replace('\\', '/'))
+    if stat.S_ISDIR(info.st_mode) and not os.path.basename(path).startswith('.'):
+        hasher.update('d ' + quoted_name + '\n')
+        for entry in sorted(os.listdir(abs_path)):
+            traverse(hasher, os.path.join(path, entry))
+    elif stat.S_ISREG(info.st_mode) and path.endswith('.java'):
+        hasher.update('r ' + quoted_name + ' ')
+        hasher.update(str(info.st_size) + ' ')
+        with open(abs_path, 'Ur') as file:
+            f_hash = get_file_hash(file)
+            hasher.update(f_hash + '\n')
+
+
+def get_src_dir_hash(dir):
+    sha = hashlib.sha256()
+    traverse(sha, dir)
+    return sha.hexdigest()
+
+
+def get_actual_hashes():
+    hashed_files = [(jar_name, True)]
+    hashes = {}
+    for (file_name, binary) in hashed_files:
+        try:
+            hash = get_file_hash(open(file_name, 'rb' if binary else 'r'))
+            hashes[file_name] = hash
+        except IOError:
+            hashes[file_name] = '0'
+    hashes[src_dir] = get_src_dir_hash(src_dir)
+    return hashes
+
+
+def get_expected_hashes():
+    try:
+        with open(hashes_path, 'r') as file:
+            return {file_name: hash for (file_name, hash) in [(name.strip(), hash.strip()) for (hash, name) in [line.split(' ', 1) for line in file]]}
+    except:
+        return None
+
+
+def run_and_communicate(command, error_template):
+    proc = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
+    proc.communicate()
+    if proc.returncode:
+        print >> sys.stderr, error_template % proc.returncode
+        sys.exit(proc.returncode)
+
+
+def build_artifacts():
+    print 'Compiling...'
+    java_files = []
+    for root, dirs, files in sorted(os.walk(src_path)):
+        for file_name in files:
+            java_files.append(os.path.join(root, file_name))
+
+    bin_path = tempfile.mkdtemp()
+    manifest_file = tempfile.NamedTemporaryFile(mode='wt', delete=False)
+    try:
+        manifest_file.write('Class-Path: %s\n' % closure_jar_relpath)
+        manifest_file.close()
+        javac_path = os.path.join(java_bin_path, 'javac')
+        javac_command = '%s -d %s -cp %s %s' % (javac_path, bin_path, rel_to_abs(closure_jar_relpath), ' '.join(java_files))
+        run_and_communicate(javac_command, 'Error: javac returned %d')
+
+        print 'Building jar...'
+        artifact_path = rel_to_abs(jar_name)
+        jar_path = os.path.join(java_bin_path, 'jar')
+        jar_command = '%s cvfme %s %s %s -C %s .' % (jar_path, artifact_path, manifest_file.name, main_class, bin_path)
+        run_and_communicate(jar_command, 'Error: jar returned %d')
+    finally:
+        os.remove(manifest_file.name)
+        shutil.rmtree(bin_path, True)
+
+
+def update_hashes():
+    print 'Updating hashes...'
+    with open(hashes_path, 'w') as file:
+        file.writelines(['%s %s\n' % (hash, name) for (name, hash) in get_actual_hashes().iteritems()])
+
+
+def hashes_modified():
+    expected_hashes = get_expected_hashes()
+    if not expected_hashes:
+        return [('<no expected hashes>', 1, 0)]
+    actual_hashes = get_actual_hashes()
+    results = []
+    for name, expected_hash in expected_hashes.iteritems():
+        actual_hash = actual_hashes.get(name)
+        if expected_hash != actual_hash:
+            results.append((name, expected_hash, actual_hash))
+    return results
+
+
+def help():
+    print 'usage: %s [option]' % os.path.basename(__file__)
+    print 'Options:'
+    print '--force-rebuild: Rebuild classes and jar even if there are no source file changes'
+    print '--no-rebuild: Do not rebuild jar, just update hashes'
+
+
+def main():
+    no_rebuild = False
+    force_rebuild = False
+
+    if len(sys.argv) > 1:
+        if sys.argv[1] == '--help':
+            help()
+            return
+        no_rebuild = sys.argv[1] == '--no-rebuild'
+        force_rebuild = sys.argv[1] == '--force-rebuild'
+
+    if not hashes_modified() and not force_rebuild:
+        print 'No modifications found, rebuild not required.'
+        return
+    if not no_rebuild:
+        build_artifacts()
+
+    update_hashes()
+    print 'Done.'
+
+if __name__ == '__main__':
+    main()
diff --git a/Source/devtools/scripts/jsdoc-validator/hashes b/Source/devtools/scripts/jsdoc-validator/hashes
new file mode 100644
index 0000000..015c75f
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/hashes
@@ -0,0 +1,2 @@
+b51df7e71432c882979acbc8fc9415bffce2fb12764d3c005fda586bf46cc3c6 src
+fbffbe77ed5e81469e2fa627898dfafba3590bd5e19bf18e7ec3183550b63d48 jsdoc-validator.jar
diff --git a/Source/devtools/scripts/jsdoc-validator/jsdoc-validator.jar b/Source/devtools/scripts/jsdoc-validator/jsdoc-validator.jar
new file mode 100644
index 0000000..926d7bf
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/jsdoc-validator.jar
Binary files differ
diff --git a/Source/devtools/scripts/jsdoc-validator/run_tests.py b/Source/devtools/scripts/jsdoc-validator/run_tests.py
new file mode 100755
index 0000000..c8a0112
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/run_tests.py
@@ -0,0 +1,74 @@
+#!/usr/bin/python
+
+import hashlib
+import operator
+import os
+import shutil
+import stat
+import subprocess
+import sys
+import tempfile
+
+
+def rel_to_abs(rel_path):
+    return os.path.join(script_path, rel_path)
+
+java_exec = 'java -Xms1024m -server -XX:+TieredCompilation'
+tests_dir = 'tests'
+jar_name = 'jsdoc-validator.jar'
+script_path = os.path.dirname(os.path.abspath(__file__))
+tests_path = rel_to_abs(tests_dir)
+validator_jar_file = rel_to_abs(jar_name)
+golden_file = os.path.join(tests_path, 'golden.dat')
+
+test_files = [os.path.join(tests_path, f) for f in os.listdir(tests_path) if f.endswith('.js') and os.path.isfile(os.path.join(tests_path, f))]
+
+validator_command = "%s -jar %s %s" % (java_exec, validator_jar_file, " ".join(sorted(test_files)))
+
+
+def run_and_communicate(command, error_template):
+    proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+    (out, _) = proc.communicate()
+    if proc.returncode:
+        print >> sys.stderr, error_template % proc.returncode
+        sys.exit(proc.returncode)
+    return out
+
+
+def help():
+    print 'usage: %s [option]' % os.path.basename(__file__)
+    print 'Options:'
+    print '--generate-golden: Re-generate golden file'
+    print '--dump: Dump the test results to stdout'
+
+
+def main():
+    need_golden = False
+    need_dump = False
+    if len(sys.argv) > 1:
+        if sys.argv[1] == '--generate-golden':
+            need_golden = True
+        elif sys.argv[1] == '--dump':
+            need_dump = True
+        else:
+            help()
+            return
+
+    result = run_and_communicate(validator_command, "Error running validator: %d")
+    if need_dump:
+        print result
+        return
+
+    if need_golden:
+        with open(golden_file, 'wt') as golden:
+            golden.write(result)
+    else:
+        with open(golden_file, 'rt') as golden:
+            golden_text = golden.read()
+            if golden_text == result:
+                print 'OK'
+            else:
+                print 'ERROR: Golden output mismatch'
+
+if __name__ == '__main__':
+    main()
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/DoDidNodeVisitor.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/DoDidNodeVisitor.java
new file mode 100644
index 0000000..4de6f97
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/DoDidNodeVisitor.java
@@ -0,0 +1,18 @@
+package org.chromium.devtools.jsdoc;
+
+import com.google.javascript.rhino.head.ast.AstNode;
+
+public interface DoDidNodeVisitor {
+    /**
+     * Pre-visit node. Visitable children (if any) of {@code node} will be visited afterwards.
+     * @param node
+     */
+    void doVisit(AstNode node);
+
+    /**
+     * Post-visit node. The method is invoked once all visitable children (if any) of {@code node}
+     * have been visited.
+     * @param node
+     */
+    void didVisit(AstNode node);
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/DoDidVisitorAdapter.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/DoDidVisitorAdapter.java
new file mode 100644
index 0000000..9be0dee
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/DoDidVisitorAdapter.java
@@ -0,0 +1,35 @@
+package org.chromium.devtools.jsdoc;
+
+import com.google.javascript.rhino.head.ast.AstNode;
+import com.google.javascript.rhino.head.ast.NodeVisitor;
+
+import java.util.ArrayDeque;
+import java.util.Deque;
+
+public abstract class DoDidVisitorAdapter implements DoDidNodeVisitor, NodeVisitor {
+
+    private final Deque<AstNode> nodeStack = new ArrayDeque<>();
+
+    @Override
+    public boolean visit(AstNode node) {
+        AstNode topNode = nodeStack.peek();
+        if (topNode != null && topNode != node.getParent()) {
+            do {
+                topNode = nodeStack.pop();
+                didVisit(topNode);
+            } while (topNode.getParent() != node.getParent());
+        }
+        nodeStack.push(node);
+        doVisit(node);
+        return true;
+    }
+
+    /**
+     * This method MUST be called after {@code foo.visit(doDidVisitorAdapter)} has finished.
+     */
+    public void flush() {
+        while (!nodeStack.isEmpty()) {
+            didVisit(nodeStack.remove());
+        }
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/FileCheckerCallable.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/FileCheckerCallable.java
new file mode 100644
index 0000000..a7cc8bb
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/FileCheckerCallable.java
@@ -0,0 +1,95 @@
+package org.chromium.devtools.jsdoc;
+
+import com.google.javascript.rhino.head.CompilerEnvirons;
+import com.google.javascript.rhino.head.IRFactory;
+import com.google.javascript.rhino.head.ast.AstNode;
+import com.google.javascript.rhino.head.ast.AstRoot;
+
+import org.chromium.devtools.jsdoc.checks.ContextTrackingValidationCheck;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.StringReader;
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+
+public class FileCheckerCallable implements Callable<ValidatorContext> {
+
+    private final String fileName;
+
+    public FileCheckerCallable(String fileName) {
+        this.fileName = fileName;
+    }
+
+    @Override
+    public ValidatorContext call() {
+        try {
+            ValidatorContext context = new ValidatorContext(readScriptText(), fileName);
+            AstRoot node = parseScript(context);
+            ValidationCheckDispatcher dispatcher = new ValidationCheckDispatcher(context);
+            dispatcher.registerCheck(new ContextTrackingValidationCheck());
+            node.visit(dispatcher);
+            dispatcher.flush();
+            return context;
+        } catch (FileNotFoundException e) {
+            logError("File not found: " + fileName);
+        } catch (IOException e) {
+            logError("Failed to read file " + fileName);
+        }
+        return null;
+    }
+
+    private ScriptText readScriptText() throws IOException {
+        byte[] encoded = Files.readAllBytes(FileSystems.getDefault().getPath(fileName));
+        String text = StandardCharsets.UTF_8.decode(ByteBuffer.wrap(encoded)).toString();
+        return new ScriptText(text);
+    }
+
+    private static AstRoot parseScript(ValidatorContext context) throws IOException {
+        CompilerEnvirons env = new CompilerEnvirons();
+        env.setRecoverFromErrors(true);
+        env.setGenerateDebugInfo(true);
+        env.setRecordingLocalJsDocComments(true);
+        env.setAllowSharpComments(true);
+        env.setRecordingComments(true);
+        IRFactory factory = new IRFactory(env);
+        return factory.parse(new StringReader(context.scriptText.text), context.scriptFileName, 1);
+    }
+
+    private static void logError(String message) {
+        System.err.println("ERROR: " + message);
+    }
+
+    private static class ValidationCheckDispatcher extends DoDidVisitorAdapter {
+        private final List<ValidationCheck> checks = new ArrayList<>(2);
+        private final ValidatorContext context;
+
+        public ValidationCheckDispatcher(ValidatorContext context) {
+            this.context = context;
+        }
+
+        public void registerCheck(ValidationCheck check) {
+            check.setContext(context);
+            checks.add(check);
+        }
+
+        @Override
+        public void doVisit(AstNode node) {
+            for (DoDidNodeVisitor visitor : checks) {
+                visitor.doVisit(node);
+            }
+        }
+
+        @Override
+        public void didVisit(AstNode node) {
+            for (ValidationCheck check : checks) {
+                check.didVisit(node);
+            }
+        }
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/JsDocValidator.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/JsDocValidator.java
new file mode 100644
index 0000000..548d8f4
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/JsDocValidator.java
@@ -0,0 +1,121 @@
+/**
+ * Validator for Closure-based JSDoc.
+ */
+
+package org.chromium.devtools.jsdoc;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+public class JsDocValidator {
+
+    private void run(String[] args) {
+        int threadCount = Math.min(args.length, Runtime.getRuntime().availableProcessors());
+        ExecutorService executor = Executors.newFixedThreadPool(threadCount);
+        try {
+            runWithExecutor(args, executor);
+        } finally {
+            executor.shutdown();
+        }
+    }
+
+    private void runWithExecutor(String[] args, ExecutorService executor) {
+        List<Future<ValidatorContext>> futures = new ArrayList<>(args.length);
+        for (String fileName : args) {
+            futures.add(executor.submit(new FileCheckerCallable(fileName)));
+        }
+
+        List<ValidatorContext> contexts = new ArrayList<>(args.length);
+        for (Future<ValidatorContext> future : futures) {
+            try {
+                ValidatorContext context = future.get();
+                if (context != null) {
+                    contexts.add(context);
+                }
+            } catch (InterruptedException | ExecutionException e) {
+                System.err.println("ERROR - " + e.getMessage());
+            }
+        }
+
+        int entryCount = 0;
+        for (ValidatorContext context : contexts) {
+            entryCount += context.getValidationResult().size();
+        }
+        List<LogEntry> entries = new ArrayList<>(entryCount);
+        for (ValidatorContext context : contexts) {
+            SortedSet<ValidatorContext.MessageRecord> records = context.getValidationResult();
+            for (ValidatorContext.MessageRecord record : records) {
+                entries.add(new LogEntry(context.scriptFileName, record));
+            }
+        }
+        Collections.sort(entries);
+        for (LogEntry entry : entries) {
+            System.err.println(entry.record.text);
+        }
+        if (!entries.isEmpty())
+            System.err.println("Total errors: " + entries.size());
+    }
+
+    public static void main(String[] args) {
+        new JsDocValidator().run(args);
+    }
+
+    private static class LogEntry implements Comparable<LogEntry> {
+        private final String fileName;
+        private final ValidatorContext.MessageRecord record;
+
+        LogEntry(String fileName, ValidatorContext.MessageRecord record) {
+            this.fileName = fileName;
+            this.record = record;
+        }
+
+        @Override
+        public int compareTo(LogEntry other) {
+            int result = fileName.compareTo(other.fileName);
+            if (result != 0) {
+                return result;
+            }
+            return Integer.compare(record.position, other.record.position);
+        }
+
+        @Override
+        public int hashCode() {
+            return 17 + fileName.hashCode() * 3 + this.record.hashCode() * 5;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            LogEntry other = (LogEntry) obj;
+            if (fileName != other.fileName
+                    && (fileName != null && !fileName.equals(other.fileName))) {
+                return false;
+            }
+
+            if (record == other.record) {
+                return true;
+            }
+            if (record != null) {
+                if (other.record == null) {
+                    return false;
+                }
+                return record.position == other.record.position;
+            }
+            return false;
+        }
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/ScriptText.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/ScriptText.java
new file mode 100644
index 0000000..2f53aa6
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/ScriptText.java
@@ -0,0 +1,34 @@
+package org.chromium.devtools.jsdoc;
+
+public class ScriptText {
+
+    public final String text;
+
+    public ScriptText(String text) {
+        this.text = text;
+    }
+
+    public int getColumn(int offset) {
+        int lineStart = findLineStart(offset);
+        return lineStart == -1 ? -1 : offset - lineStart;
+    }
+
+    public String getLineTextAt(int offset) {
+        int lineStart = findLineStart(offset);
+        if (lineStart == -1) {
+            return null;
+        }
+        int lineEnd = text.indexOf('\n', offset);
+        if (lineEnd == -1) {
+            lineEnd = text.length();
+        }
+        return text.substring(lineStart, lineEnd);
+    }
+
+    private int findLineStart(int offset) {
+        if (offset > text.length()) {
+            return -1;
+        }
+        return text.lastIndexOf('\n', offset) + 1;
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/ValidationCheck.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/ValidationCheck.java
new file mode 100644
index 0000000..2dfa1a9
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/ValidationCheck.java
@@ -0,0 +1,22 @@
+package org.chromium.devtools.jsdoc;
+
+import com.google.javascript.rhino.head.ast.AstNode;
+
+/**
+ * A base class for all JSDoc validation checks.
+ */
+public abstract class ValidationCheck implements DoDidNodeVisitor {
+
+    private ValidatorContext context;
+
+    protected String getNodeText(AstNode node) {
+        return context.getNodeText(node);
+    }
+
+    protected void setContext(ValidatorContext context) {
+        if (this.context != null) {
+            throw new RuntimeException("ValidatorContext already set");
+        }
+        this.context = context;
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/ValidatorContext.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/ValidatorContext.java
new file mode 100644
index 0000000..f29f301
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/ValidatorContext.java
@@ -0,0 +1,100 @@
+package org.chromium.devtools.jsdoc;
+
+import com.google.javascript.rhino.head.ast.AstNode;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+public class ValidatorContext {
+
+    private static final Comparator<MessageRecord> MESSAGE_RECORD_COMPARATOR =
+            new Comparator<MessageRecord>() {
+                @Override
+                public int compare(MessageRecord left, MessageRecord right) {
+                    return left.position - right.position;
+                }
+            };
+
+    public final ScriptText scriptText;
+    public final String scriptFileName;
+    private final SortedSet<MessageRecord> validationResult =
+            new TreeSet<>(MESSAGE_RECORD_COMPARATOR);
+
+    public ValidatorContext(ScriptText scriptText, String scriptFileName) {
+        this.scriptText = scriptText;
+        this.scriptFileName = scriptFileName;
+    }
+
+    public SortedSet<MessageRecord> getValidationResult() {
+        return Collections.unmodifiableSortedSet(validationResult);
+    }
+
+    public String getNodeText(AstNode node) {
+        if (node == null) {
+            return null;
+        }
+        return scriptText.text.substring(
+                node.getAbsolutePosition(), node.getAbsolutePosition() + node.getLength());
+    }
+
+    public SourcePosition getPosition(AstNode node, int offsetInNodeText) {
+        String nodeText = getNodeText(node);
+        if (offsetInNodeText >= nodeText.length())
+            return null;
+        int line = node.getLineno();
+        int column = scriptText.getColumn(node.getAbsolutePosition());
+        for (int i = 0; i < offsetInNodeText; ++i) {
+            char ch = nodeText.charAt(i);
+            if (ch == '\n') {
+                line += 1;
+                column = 0;
+                continue;
+            }
+            column += 1;
+        }
+        return new SourcePosition(line, column);
+    }
+
+    public void reportErrorInNode(AstNode node, int offsetInNodeText, String errorMessage) {
+        SourcePosition position = getPosition(node, offsetInNodeText);
+        if (position == null) {
+            // FIXME: Handle error?
+            return;
+        }
+        StringBuilder positionMarker = new StringBuilder(position.column + 1);
+        for (int i = position.column; i > 0; --i) {
+            positionMarker.append(' ');
+        }
+        positionMarker.append('^');
+        int errorAbsolutePosition = node.getAbsolutePosition() + offsetInNodeText;
+        String message = String.format("%s:%d: ERROR - %s%n%s%n%s%n",
+                scriptFileName,
+                position.line,
+                errorMessage,
+                scriptText.getLineTextAt(errorAbsolutePosition),
+                positionMarker.toString());
+        validationResult.add(new MessageRecord(errorAbsolutePosition, message));
+    }
+
+    public static class MessageRecord {
+        public final int position;
+        public final String text;
+
+        public MessageRecord(int position, String text) {
+            this.position = position;
+            this.text = text;
+        }
+    }
+
+    public static class SourcePosition {
+        public final int line;
+        public final int column;
+
+        public SourcePosition(int line, int column) {
+            this.line = line;
+            this.column = column;
+        }
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/AstUtil.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/AstUtil.java
new file mode 100644
index 0000000..e930753
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/AstUtil.java
@@ -0,0 +1,92 @@
+package org.chromium.devtools.jsdoc.checks;
+
+import com.google.javascript.rhino.head.Token;
+import com.google.javascript.rhino.head.ast.Assignment;
+import com.google.javascript.rhino.head.ast.AstNode;
+import com.google.javascript.rhino.head.ast.Comment;
+import com.google.javascript.rhino.head.ast.FunctionNode;
+import com.google.javascript.rhino.head.ast.ObjectProperty;
+
+public class AstUtil {
+
+    private static final String PROTOTYPE_SUFFIX = ".prototype";
+
+    static boolean hasParentOfType(AstNode node, int tokenType) {
+        AstNode parent = node.getParent();
+        if (parent == null) {
+            return false;
+        }
+        return parent.getType() == tokenType;
+    }
+
+    static AstNode getFunctionNameNode(FunctionNode functionNode) {
+        AstNode nameNode = functionNode.getFunctionName();
+        if (nameNode != null) {
+            return nameNode;
+        }
+
+        if (AstUtil.hasParentOfType(functionNode, Token.COLON)) {
+            return ((ObjectProperty) functionNode.getParent()).getLeft();
+        }
+
+        if (AstUtil.hasParentOfType(functionNode, Token.ASSIGN)) {
+            Assignment assignment = (Assignment) functionNode.getParent();
+            if (assignment.getRight() == functionNode) {
+                return assignment.getLeft();
+            }
+        }
+        return null;
+    }
+
+    static String getTypeNameFromPrototype(String value) {
+        return value.substring(0, value.length() - PROTOTYPE_SUFFIX.length());
+    }
+
+    static boolean isPrototypeName(String typeName) {
+        return typeName.endsWith(PROTOTYPE_SUFFIX);
+    }
+
+    static AstNode getAssignedTypeNameNode(Assignment assignment) {
+        AstNode typeNameNode = assignment.getLeft();
+        if (typeNameNode.getType() != Token.GETPROP && typeNameNode.getType() != Token.NAME) {
+            return null;
+        }
+        return typeNameNode;
+    }
+
+    static Comment getJsDocNode(AstNode node) {
+        if (node.getType() == Token.FUNCTION) {
+            return getJsDocNode((FunctionNode) node);
+        } else {
+            return node.getJsDocNode();
+        }
+    }
+
+    static Comment getJsDocNode(FunctionNode functionNode) {
+        Comment jsDocNode = functionNode.getJsDocNode();
+        if (jsDocNode != null) {
+            return jsDocNode;
+        }
+
+        // reader.onloadend = function() {...}
+        if (hasParentOfType(functionNode, Token.ASSIGN)) {
+            Assignment assignment = (Assignment) functionNode.getParent();
+            if (assignment.getRight() == functionNode) {
+                jsDocNode = assignment.getJsDocNode();
+                if (jsDocNode != null) {
+                    return jsDocNode;
+                }
+            }
+        }
+
+        if (hasParentOfType(functionNode, Token.COLON)) {
+            jsDocNode = ((ObjectProperty) functionNode.getParent()).getLeft().getJsDocNode();
+            if (jsDocNode != null) {
+                return jsDocNode;
+            }
+        }
+        return null;
+    }
+
+    private AstUtil() {}
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ContextTrackingChecker.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ContextTrackingChecker.java
new file mode 100644
index 0000000..2cd5614
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ContextTrackingChecker.java
@@ -0,0 +1,25 @@
+package org.chromium.devtools.jsdoc.checks;
+
+import com.google.javascript.rhino.head.ast.AstNode;
+
+import org.chromium.devtools.jsdoc.ValidatorContext;
+
+abstract class ContextTrackingChecker {
+    private ContextTrackingState state;
+
+    abstract void enterNode(AstNode node);
+
+    abstract void leaveNode(AstNode node);
+
+    void setState(ContextTrackingState state) {
+        this.state = state;
+    }
+
+    protected ContextTrackingState getState() {
+        return state;
+    }
+
+    protected ValidatorContext getContext() {
+        return state.getContext();
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ContextTrackingState.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ContextTrackingState.java
new file mode 100644
index 0000000..c98a882
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ContextTrackingState.java
@@ -0,0 +1,58 @@
+package org.chromium.devtools.jsdoc.checks;
+
+import com.google.javascript.rhino.head.ast.AstNode;
+
+import org.chromium.devtools.jsdoc.ValidatorContext;
+
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+
+public class ContextTrackingState {
+    private final ValidatorContext context;
+
+    ContextTrackingState(ValidatorContext context) {
+        this.context = context;
+    }
+
+    final Map<String, TypeRecord> typeRecordsByTypeName = new HashMap<>();
+    final Deque<TypeRecord> typeRecords = new LinkedList<>();
+    final Deque<FunctionRecord> functionRecords = new LinkedList<>();
+
+    TypeRecord getCurrentTypeRecord() {
+        return typeRecords.peekLast();
+    }
+
+    FunctionRecord getCurrentFunctionRecord() {
+        return functionRecords.peekLast();
+    }
+
+    ValidatorContext getContext() {
+        return context;
+    }
+
+    Map<String, TypeRecord> getTypeRecordsByTypeName() {
+        return typeRecordsByTypeName;
+    }
+
+    String getNodeText(AstNode node) {
+        return getContext().getNodeText(node);
+    }
+
+    void pushTypeRecord(TypeRecord record) {
+        typeRecords.addLast(record);
+    }
+
+    void popTypeRecord() {
+        typeRecords.removeLast();
+    }
+
+    void pushFunctionRecord(FunctionRecord record) {
+        functionRecords.addLast(record);
+    }
+
+    void popFunctionRecord() {
+        functionRecords.removeLast();
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ContextTrackingValidationCheck.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ContextTrackingValidationCheck.java
new file mode 100644
index 0000000..ce1c3c2
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ContextTrackingValidationCheck.java
@@ -0,0 +1,201 @@
+package org.chromium.devtools.jsdoc.checks;
+
+import com.google.javascript.rhino.head.Token;
+import com.google.javascript.rhino.head.ast.Assignment;
+import com.google.javascript.rhino.head.ast.AstNode;
+import com.google.javascript.rhino.head.ast.Comment;
+import com.google.javascript.rhino.head.ast.FunctionNode;
+
+import org.chromium.devtools.jsdoc.ValidationCheck;
+import org.chromium.devtools.jsdoc.ValidatorContext;
+import org.chromium.devtools.jsdoc.checks.TypeRecord.InheritanceEntry;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class ContextTrackingValidationCheck extends ValidationCheck {
+
+    private static final Pattern EXTENDS_PATTERN =
+            Pattern.compile("@extends\\s+\\{\\s*([^\\s}]+)\\s*\\}");
+    private static final Pattern RETURN_PATTERN =
+            Pattern.compile("@return\\s+\\{\\s*(.+)\\s*\\}");
+    private ContextTrackingState state;
+    private final List<ContextTrackingChecker> clients = new ArrayList<>(5);
+
+    @Override
+    protected void setContext(ValidatorContext context) {
+        super.setContext(context);
+        state = new ContextTrackingState(context);
+        registerClient(new ProtoFollowsExtendsChecker());
+        registerClient(new RequiredThisAnnotationChecker());
+        registerClient(new ReturnAnnotationChecker());
+    }
+
+    @Override
+    public void doVisit(AstNode node) {
+        switch (node.getType()) {
+        case Token.ASSIGN:
+            enterAssignNode((Assignment) node);
+            break;
+        case Token.FUNCTION:
+            enterFunctionNode((FunctionNode) node);
+            break;
+        default:
+            break;
+        }
+
+        enterNode(node);
+    }
+
+    @Override
+    public void didVisit(AstNode node) {
+        leaveNode(node);
+
+        switch (node.getType()) {
+        case Token.ASSIGN:
+            leaveAssignNode((Assignment) node);
+            break;
+        case Token.FUNCTION:
+            leaveFunctionNode((FunctionNode) node);
+            break;
+        default:
+            break;
+        }
+    }
+
+    public void registerClient(ContextTrackingChecker client) {
+        this.clients.add(client);
+        client.setState(state);
+    }
+
+    private void enterNode(AstNode node) {
+        for (ContextTrackingChecker client : clients) {
+            client.enterNode(node);
+        }
+    }
+
+    private void leaveNode(AstNode node) {
+        for (ContextTrackingChecker client : clients) {
+            client.leaveNode(node);
+        }
+    }
+
+    private void enterFunctionNode(FunctionNode node) {
+        Comment jsDocNode = getJsDocNode(node);
+        AstNode nameNode = AstUtil.getFunctionNameNode(node);
+
+        // It can be a type declaration: /** @constructor */ function MyType() {...}.
+        boolean isConstructor =
+                nameNode != null && rememberTypeRecordIfNeeded(getNodeText(nameNode), jsDocNode);
+        TypeRecord parentType = state.getCurrentFunctionRecord() == null
+                ? state.getCurrentTypeRecord()
+                : null;
+        state.pushFunctionRecord(new FunctionRecord(
+                node,
+                isConstructor,
+                getReturnType(jsDocNode),
+                parentType,
+                state.getCurrentFunctionRecord()));
+    }
+
+    @SuppressWarnings("unused")
+    private void leaveFunctionNode(FunctionNode node) {
+        state.functionRecords.removeLast();
+    }
+
+    private String getReturnType(Comment jsDocNode) {
+        if (jsDocNode == null) {
+            return null;
+        }
+        String jsDoc = getNodeText(jsDocNode);
+        Matcher m = RETURN_PATTERN.matcher(jsDoc);
+        if (!m.find()) {
+            return null;
+        }
+        return m.group(1);
+    }
+
+    private void enterAssignNode(Assignment assignment) {
+        String assignedTypeName = getAssignedTypeName(assignment);
+        if (assignedTypeName == null) {
+            return;
+        }
+        if (AstUtil.isPrototypeName(assignedTypeName)) {
+            // MyType.prototype = ...
+            String typeName = AstUtil.getTypeNameFromPrototype(assignedTypeName);
+            TypeRecord typeRecord = state.typeRecordsByTypeName.get(typeName);
+            // We should push anything here to maintain a valid current type record.
+            state.pushTypeRecord(typeRecord);
+            state.pushFunctionRecord(null);
+            return;
+        }
+
+        if (assignment.getRight().getType() == Token.FUNCTION) {
+            // MyType = function() {...}
+            rememberTypeRecordIfNeeded(assignedTypeName, getJsDocNode(assignment));
+        }
+
+    }
+
+    private void leaveAssignNode(Assignment assignment) {
+        String assignedTypeName = getAssignedTypeName(assignment);
+        if (assignedTypeName == null) {
+            return;
+        }
+        if (AstUtil.isPrototypeName(assignedTypeName)) {
+            // Remove the current type record when leaving prototype object.
+            state.typeRecords.removeLast();
+            state.functionRecords.removeLast();
+            return;
+        }
+    }
+
+    private String getAssignedTypeName(Assignment assignment) {
+        AstNode node = AstUtil.getAssignedTypeNameNode(assignment);
+        return getNodeText(node);
+    }
+
+    private boolean rememberTypeRecordIfNeeded(String typeName, Comment jsDocNode) {
+        String jsDoc = getNodeText(jsDocNode);
+        if (!isConstructor(jsDoc) && !isInterface(jsDoc)) {
+            return false;
+        }
+        TypeRecord record = new TypeRecord(
+                typeName,
+                isInterface(jsDoc),
+                getExtendsEntries(jsDocNode));
+        state.typeRecordsByTypeName.put(typeName, record);
+        return true;
+    }
+
+    private static boolean isInterface(String jsDoc) {
+        return jsDoc != null && jsDoc.contains("@interface");
+    }
+
+    private static boolean isConstructor(String jsDoc) {
+        return jsDoc != null && jsDoc.contains("@constructor");
+    }
+
+    private static Comment getJsDocNode(AstNode node) {
+        if (node.getType() == Token.FUNCTION) {
+            return AstUtil.getJsDocNode((FunctionNode) node);
+        }
+        return node.getJsDocNode();
+    }
+
+    private List<InheritanceEntry> getExtendsEntries(Comment jsDocNode) {
+        if (jsDocNode == null) {
+            return Collections.emptyList();
+        }
+        List<InheritanceEntry> result = new ArrayList<>(2);
+        Matcher matcher = EXTENDS_PATTERN.matcher(getNodeText(jsDocNode));
+        while (matcher.find()) {
+            result.add(new InheritanceEntry(matcher.group(1), jsDocNode, matcher.start(1)));
+        }
+
+        return result;
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/FunctionRecord.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/FunctionRecord.java
new file mode 100644
index 0000000..87ed2d1
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/FunctionRecord.java
@@ -0,0 +1,28 @@
+package org.chromium.devtools.jsdoc.checks;
+
+import com.google.javascript.rhino.head.ast.FunctionNode;
+
+public class FunctionRecord {
+    final FunctionNode functionNode;
+    final boolean isConstructor;
+    final String returnType;
+    final TypeRecord enclosingType;
+    final FunctionRecord enclosingFunctionRecord;
+
+    public FunctionRecord(FunctionNode functionNode, boolean isConstructor,
+            String returnType, TypeRecord parentType, FunctionRecord enclosingFunctionRecord) {
+        this.functionNode = functionNode;
+        this.isConstructor = isConstructor;
+        this.returnType = returnType;
+        this.enclosingType = parentType;
+        this.enclosingFunctionRecord = enclosingFunctionRecord;
+    }
+
+    public boolean isTopLevelFunction() {
+        return enclosingFunctionRecord == null;
+    }
+
+    public boolean hasReturnAnnotation() {
+        return returnType != null;
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ProtoFollowsExtendsChecker.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ProtoFollowsExtendsChecker.java
new file mode 100644
index 0000000..7a968c5
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ProtoFollowsExtendsChecker.java
@@ -0,0 +1,126 @@
+package org.chromium.devtools.jsdoc.checks;
+
+import com.google.javascript.rhino.head.Token;
+import com.google.javascript.rhino.head.ast.Assignment;
+import com.google.javascript.rhino.head.ast.AstNode;
+import com.google.javascript.rhino.head.ast.ObjectProperty;
+
+import org.chromium.devtools.jsdoc.checks.TypeRecord.InheritanceEntry;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public final class ProtoFollowsExtendsChecker extends ContextTrackingChecker {
+
+    private static final String PROTO_PROPERTY_NAME = "__proto__";
+    private final Set<TypeRecord> typesWithAssignedProto = new HashSet<>();
+
+    @Override
+    protected void enterNode(AstNode node) {
+        if (node.getType() == Token.COLON) {
+            handleColonNode((ObjectProperty) node);
+            return;
+        }
+        if (node.getType() == Token.ASSIGN) {
+            handleAssignment((Assignment) node);
+            return;
+        }
+    }
+
+    @Override
+    protected void leaveNode(AstNode node) {
+        if (node.getType() == Token.SCRIPT) {
+            checkFinished();
+        }
+    }
+
+    private void checkFinished() {
+        for (TypeRecord record : getState().getTypeRecordsByTypeName().values()) {
+            if (record.isInterface || typesWithAssignedProto.contains(record)) {
+                continue;
+            }
+            InheritanceEntry entry = record.getFirstExtendedType();
+            if (entry != null) {
+                getContext().reportErrorInNode(
+                        entry.jsDocNode, entry.offsetInJsDocText,
+                        String.format("No __proto__ assigned for type %s having @extends",
+                                record.typeName));
+            }
+        }
+    }
+
+    private void handleColonNode(ObjectProperty node) {
+        ContextTrackingState state = getState();
+        TypeRecord type = state.getCurrentTypeRecord();
+        if (type == null) {
+            return;
+        }
+        String propertyName = state.getNodeText(node.getLeft());
+        if (!PROTO_PROPERTY_NAME.equals(propertyName)) {
+            return;
+        }
+        TypeRecord currentType = state.getCurrentTypeRecord();
+        if (currentType == null) {
+            // FIXME: __proto__: Foo.prototype not in an object literal for Bar.prototype.
+            return;
+        }
+        typesWithAssignedProto.add(currentType);
+        String value = state.getNodeText(node.getRight());
+        if (!AstUtil.isPrototypeName(value)) {
+            state.getContext().reportErrorInNode(
+                    node.getRight(), 0, "__proto__ value is not a prototype");
+            return;
+        }
+        String superType = AstUtil.getTypeNameFromPrototype(value);
+        if (type.isInterface) {
+            state.getContext().reportErrorInNode(node.getLeft(), 0, String.format(
+                    "__proto__ defined for interface %s", type.typeName));
+            return;
+        } else {
+            if (type.extendedTypes.isEmpty()) {
+                state.getContext().reportErrorInNode(node.getRight(), 0, String.format(
+                        "No @extends annotation for %s extending %s", type.typeName, superType));
+                return;
+            }
+        }
+        // FIXME: Should we check that there is only one @extend-ed type
+        // for the non-interface |type|? Closure is supposed to do this anyway...
+        InheritanceEntry entry = type.getFirstExtendedType();
+        String extendedTypeName = entry.superTypeName;
+        if (!superType.equals(extendedTypeName)) {
+            state.getContext().reportErrorInNode(node.getRight(), 0, String.format(
+                    "Supertype does not match %s declared in @extends for %s (line %d)",
+                    extendedTypeName, type.typeName,
+                    state.getContext().getPosition(entry.jsDocNode, entry.offsetInJsDocText).line));
+        }
+    }
+
+    private void handleAssignment(Assignment assignment) {
+        String assignedTypeName =
+                getState().getNodeText(AstUtil.getAssignedTypeNameNode(assignment));
+        if (assignedTypeName == null) {
+            return;
+        }
+        if (!AstUtil.isPrototypeName(assignedTypeName)) {
+            return;
+        }
+        AstNode prototypeValueNode = assignment.getRight();
+
+        if (prototypeValueNode.getType() == Token.OBJECTLIT) {
+            return;
+        }
+
+        // Foo.prototype = notObjectLiteral
+        ContextTrackingState state = getState();
+        TypeRecord type = state.getCurrentTypeRecord();
+        if (type == null) {
+            // Assigning a prototype for unknown type. Leave it to the closure compiler.
+            return;
+        }
+        if (!type.extendedTypes.isEmpty()) {
+            state.getContext().reportErrorInNode(prototypeValueNode, 0, String.format(
+                    "@extends found for type %s but its prototype is not an object "
+                    + "containing __proto__", AstUtil.getTypeNameFromPrototype(assignedTypeName)));
+        }
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/RequiredThisAnnotationChecker.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/RequiredThisAnnotationChecker.java
new file mode 100644
index 0000000..02a39c0
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/RequiredThisAnnotationChecker.java
@@ -0,0 +1,52 @@
+package org.chromium.devtools.jsdoc.checks;
+
+import com.google.javascript.rhino.head.Token;
+import com.google.javascript.rhino.head.ast.AstNode;
+import com.google.javascript.rhino.head.ast.Comment;
+import com.google.javascript.rhino.head.ast.FunctionNode;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public final class RequiredThisAnnotationChecker extends ContextTrackingChecker {
+
+    private final Set<FunctionRecord> functionsRequiringThisAnnotation = new HashSet<>();
+
+    @Override
+    void enterNode(AstNode node) {
+        if (node.getType() == Token.THIS) {
+            FunctionRecord function = getState().getCurrentFunctionRecord();
+            if (function == null) {
+                return;
+            }
+            if (!function.isTopLevelFunction() && !function.isConstructor) {
+                functionsRequiringThisAnnotation.add(function);
+            }
+            return;
+        }
+    }
+
+    @Override
+    void leaveNode(AstNode node) {
+        if (node.getType() != Token.FUNCTION) {
+            return;
+        }
+
+        ContextTrackingState state = getState();
+        FunctionRecord record = state.getCurrentFunctionRecord();
+        if (!functionsRequiringThisAnnotation.contains(record)) {
+            return;
+        }
+        FunctionNode functionNode = (FunctionNode) node;
+        AstNode functionNameNode = AstUtil.getFunctionNameNode(functionNode);
+        if (functionNameNode != null && shouldAddThisAnnotation(functionNode)) {
+            state.getContext().reportErrorInNode(functionNameNode, 0,
+                    "@this annotation is required for functions referencing 'this'");
+        }
+    }
+
+    private boolean shouldAddThisAnnotation(FunctionNode node) {
+        Comment comment = AstUtil.getJsDocNode(node);
+        return comment == null || !getContext().getNodeText(comment).contains("@this");
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ReturnAnnotationChecker.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ReturnAnnotationChecker.java
new file mode 100644
index 0000000..3b8c300
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/ReturnAnnotationChecker.java
@@ -0,0 +1,145 @@
+package org.chromium.devtools.jsdoc.checks;
+
+import com.google.javascript.rhino.head.Token;
+import com.google.javascript.rhino.head.ast.AstNode;
+import com.google.javascript.rhino.head.ast.Comment;
+import com.google.javascript.rhino.head.ast.FunctionNode;
+import com.google.javascript.rhino.head.ast.ObjectProperty;
+import com.google.javascript.rhino.head.ast.ReturnStatement;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public final class ReturnAnnotationChecker extends ContextTrackingChecker {
+
+    private final Set<FunctionRecord> valueReturningFunctions = new HashSet<>();
+    private final Set<FunctionRecord> throwingFunctions = new HashSet<>();
+
+    @Override
+    public void enterNode(AstNode node) {
+        switch (node.getType()) {
+        case Token.RETURN:
+            handleReturn((ReturnStatement) node);
+            break;
+        case Token.THROW:
+            handleThrow();
+            break;
+        default:
+            break;
+        }
+    }
+
+    private void handleReturn(ReturnStatement node) {
+        if (node.getReturnValue() == null || AstUtil.hasParentOfType(node, Token.ASSIGN)) {
+            return;
+        }
+
+        FunctionRecord record = getState().getCurrentFunctionRecord();
+        if (record == null) {
+            return;
+        }
+        AstNode nameNode = getFunctionNameNode(record.functionNode);
+        if (nameNode == null) {
+            return;
+        }
+        valueReturningFunctions.add(record);
+    }
+
+    private void handleThrow() {
+        FunctionRecord record = getState().getCurrentFunctionRecord();
+        if (record == null) {
+            return;
+        }
+        AstNode nameNode = getFunctionNameNode(record.functionNode);
+        if (nameNode == null) {
+            return;
+        }
+        throwingFunctions.add(record);
+    }
+
+    @Override
+    public void leaveNode(AstNode node) {
+        if (node.getType() != Token.FUNCTION) {
+            return;
+        }
+
+        FunctionRecord record = getState().getCurrentFunctionRecord();
+        if (record != null) {
+            checkFunctionAnnotation(record);
+        }
+    }
+
+    @SuppressWarnings("unused")
+    private void checkFunctionAnnotation(FunctionRecord function) {
+        String functionName = getFunctionName(function.functionNode);
+        if (functionName == null) {
+            return;
+        }
+        boolean isApiFunction = !functionName.startsWith("_")
+                && (function.isTopLevelFunction()
+                        || (function.enclosingType != null
+                                && isPlainTopLevelFunction(function.enclosingFunctionRecord)));
+        Comment jsDocNode = AstUtil.getJsDocNode(function.functionNode);
+
+        boolean isReturningFunction = valueReturningFunctions.contains(function);
+        boolean isInterfaceFunction =
+                function.enclosingType != null && function.enclosingType.isInterface;
+        int invalidAnnotationIndex =
+                invalidReturnsAnnotationIndex(getState().getNodeText(jsDocNode));
+        if (invalidAnnotationIndex != -1) {
+            String suggestedResolution = (isReturningFunction || isInterfaceFunction)
+                    ? "should be @return instead"
+                    : "please remove, as function does not return value";
+            getContext().reportErrorInNode(jsDocNode, invalidAnnotationIndex,
+                    String.format("invalid @returns annotation found - %s", suggestedResolution));
+            return;
+        }
+        AstNode functionNameNode = getFunctionNameNode(function.functionNode);
+        if (functionNameNode == null) {
+            return;
+        }
+
+        if (isReturningFunction) {
+            if (!function.hasReturnAnnotation() && isApiFunction) {
+                getContext().reportErrorInNode(functionNameNode, 0,
+                        "@return annotation is required for API functions that return value");
+            }
+        } else {
+            // A @return-function that does not actually return anything and
+            // is intended to be overridden in subclasses must throw.
+            if (function.hasReturnAnnotation()
+                    && !isInterfaceFunction
+                    && !throwingFunctions.contains(function)) {
+                getContext().reportErrorInNode(functionNameNode, 0,
+                        "@return annotation found, yet function does not return value");
+            }
+        }
+    }
+
+    private static boolean isPlainTopLevelFunction(FunctionRecord record) {
+        return record != null && record.isTopLevelFunction()
+                && (record.enclosingType == null && !record.isConstructor);
+    }
+
+    private String getFunctionName(FunctionNode functionNode) {
+        AstNode nameNode = getFunctionNameNode(functionNode);
+        return nameNode == null ? null : getState().getNodeText(nameNode);
+    }
+
+    private static int invalidReturnsAnnotationIndex(String jsDoc) {
+        return jsDoc == null ? -1 : jsDoc.indexOf("@returns");
+    }
+
+    private static AstNode getFunctionNameNode(FunctionNode functionNode) {
+        AstNode nameNode = functionNode.getFunctionName();
+        if (nameNode != null) {
+            return nameNode;
+        }
+
+        if (AstUtil.hasParentOfType(functionNode, Token.COLON)) {
+            return ((ObjectProperty) functionNode.getParent()).getLeft();
+        }
+        // Do not require annotation for assignment-RHS functions.
+        return null;
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/TypeRecord.java b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/TypeRecord.java
new file mode 100644
index 0000000..861f73a
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/src/org/chromium/devtools/jsdoc/checks/TypeRecord.java
@@ -0,0 +1,34 @@
+package org.chromium.devtools.jsdoc.checks;
+
+import com.google.javascript.rhino.head.ast.Comment;
+
+import java.util.List;
+
+public class TypeRecord {
+    public final String typeName;
+    public final boolean isInterface;
+    public final List<InheritanceEntry> extendedTypes;
+
+    public TypeRecord(String typeName, boolean isInterface,
+            List<InheritanceEntry> extendedTypes) {
+        this.typeName = typeName;
+        this.isInterface = isInterface;
+        this.extendedTypes = extendedTypes;
+    }
+
+    public InheritanceEntry getFirstExtendedType() {
+        return this.extendedTypes.isEmpty() ? null : this.extendedTypes.get(0);
+    }
+
+    public static class InheritanceEntry {
+        public final String superTypeName;
+        public final Comment jsDocNode;
+        public final int offsetInJsDocText;
+
+        public InheritanceEntry(String superTypeName, Comment jsDocNode, int offsetInJsDocText) {
+            this.superTypeName = superTypeName;
+            this.offsetInJsDocText = offsetInJsDocText;
+            this.jsDocNode = jsDocNode;
+        }
+    }
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/tests/golden.dat b/Source/devtools/scripts/jsdoc-validator/tests/golden.dat
new file mode 100644
index 0000000..4bc1ad0
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/tests/golden.dat
@@ -0,0 +1,165 @@
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/proto.js:8: ERROR - No __proto__ assigned for type DerivedNoProto having @extends
+ * @extends {Base}
+             ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/proto.js:19: ERROR - __proto__ value is not a prototype
+    __proto__: Base
+               ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/proto.js:28: ERROR - __proto__ defined for interface InterfaceWithProto
+    __proto__: Base.prototype
+    ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/proto.js:37: ERROR - No @extends annotation for ProtoNoExtends extending Base
+    __proto__: Base.prototype
+               ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/proto.js:47: ERROR - Supertype does not match Base declared in @extends for ProtoNotSameAsExtends (line 42)
+    __proto__: Object.prototype
+               ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/proto.js:52: ERROR - No __proto__ assigned for type ProtoNotObjectLiteral having @extends
+ * @extends {Base}
+             ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/proto.js:56: ERROR - @extends found for type ProtoNotObjectLiteral but its prototype is not an object containing __proto__
+ProtoNotObjectLiteral.prototype = Object;
+                                  ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:1: ERROR - @return annotation is required for API functions that return value
+function badFuncNoAnnotation() {
+         ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:8: ERROR - @return annotation found, yet function does not return value
+function badFuncAnnotatedButNoReturn() // ERROR - no @return annotation.
+         ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:15: ERROR - @return annotation found, yet function does not return value
+function badFuncAnnotatedButNoReturnValue() // ERROR - no returned value.
+         ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:29: ERROR - invalid @returns annotation found - should be @return instead
+ * @returns {number}
+   ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:37: ERROR - invalid @returns annotation found - please remove, as function does not return value
+ * @returns {number}
+   ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:45: ERROR - invalid @returns annotation found - please remove, as function does not return value
+ * @returns {number}
+   ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:62: ERROR - @return annotation is required for API functions that return value
+    badApiMethodNoAnnotation: function() // ERROR - public method.
+    ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:91: ERROR - @return annotation found, yet function does not return value
+    badMethodDoesNotReturnValue: function() // ERROR - does not return value.
+    ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:99: ERROR - @return annotation found, yet function does not return value
+    badMethodDoesNotReturn: function() // ERROR - does not return.
+    ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:105: ERROR - invalid @returns annotation found - should be @return instead
+     * @returns {number}
+       ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:113: ERROR - invalid @returns annotation found - please remove, as function does not return value
+     * @returns {number}
+       ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:121: ERROR - invalid @returns annotation found - please remove, as function does not return value
+     * @returns {number}
+       ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:141: ERROR - @return annotation is required for API functions that return value
+    badApiMethodNoAnnotation: function() // ERROR - public method.
+    ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:162: ERROR - @return annotation found, yet function does not return value
+    badMethodDoesNotReturnValue: function() // ERROR - does not return value.
+    ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:170: ERROR - @return annotation found, yet function does not return value
+    badMethodDoesNotReturn: function() // ERROR - does not return.
+    ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:176: ERROR - invalid @returns annotation found - should be @return instead
+     * @returns {number}
+       ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:184: ERROR - invalid @returns annotation found - please remove, as function does not return value
+     * @returns {number}
+       ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:192: ERROR - invalid @returns annotation found - please remove, as function does not return value
+     * @returns {number}
+       ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:212: ERROR - invalid @returns annotation found - should be @return instead
+     * @returns {number}
+       ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:233: ERROR - @return annotation is required for API functions that return value
+    badApiMethodNoAnnotation: function() // ERROR - public method.
+    ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:254: ERROR - @return annotation found, yet function does not return value
+    badMethodDoesNotReturnValue: function() // ERROR - does not return value.
+    ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:262: ERROR - @return annotation found, yet function does not return value
+    badMethodDoesNotReturn: function() // ERROR - does not return.
+    ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:268: ERROR - invalid @returns annotation found - should be @return instead
+     * @returns {number}
+       ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:276: ERROR - invalid @returns annotation found - please remove, as function does not return value
+     * @returns {number}
+       ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/return.js:284: ERROR - invalid @returns annotation found - please remove, as function does not return value
+     * @returns {number}
+       ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/this.js:19: ERROR - @this annotation is required for functions referencing 'this'
+        function badInnerCallback() {
+                 ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/this.js:24: ERROR - @this annotation is required for functions referencing 'this'
+    function badCallbackInCtor() {
+             ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/this.js:54: ERROR - @this annotation is required for functions referencing 'this'
+        function badCallbackInMethod() {
+                 ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/this.js:73: ERROR - @this annotation is required for functions referencing 'this'
+        function badInnerCallback() {
+                 ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/this.js:78: ERROR - @this annotation is required for functions referencing 'this'
+    function badCallbackInCtor() {
+             ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/this.js:98: ERROR - @this annotation is required for functions referencing 'this'
+        function badCallbackInMethod() {
+                 ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/this.js:121: ERROR - @this annotation is required for functions referencing 'this'
+        function badInnerCallback() {
+                 ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/this.js:126: ERROR - @this annotation is required for functions referencing 'this'
+    function badCallbackInCtor() {
+             ^
+
+/usr/local/google/home/apavlov/dev/blink/src/third_party/WebKit/Source/devtools/scripts/jsdoc-validator/tests/this.js:146: ERROR - @this annotation is required for functions referencing 'this'
+        function badCallbackInMethod() {
+                 ^
+
+Total errors: 41
diff --git a/Source/devtools/scripts/jsdoc-validator/tests/proto.js b/Source/devtools/scripts/jsdoc-validator/tests/proto.js
new file mode 100644
index 0000000..f1abf0d
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/tests/proto.js
@@ -0,0 +1,56 @@
+/**
+ * @constructor
+ */
+Base = function() {}
+
+/**
+ * @constructor
+ * @extends {Base}
+ */
+DerivedNoProto = function() {}
+
+/**
+ * @constructor
+ * @extends {Base}
+ */
+DerivedBadProto = function() {}
+
+DerivedBadProto.prototype = {
+    __proto__: Base
+}
+
+/**
+ * @interface
+ */
+InterfaceWithProto = function() {}
+
+InterfaceWithProto.prototype = {
+    __proto__: Base.prototype
+}
+
+/**
+ * @constructor
+ */
+ProtoNoExtends = function() {}
+
+ProtoNoExtends.prototype = {
+    __proto__: Base.prototype
+}
+
+/**
+ * @constructor
+ * @extends {Base}
+ */
+ProtoNotSameAsExtends = function() {}
+
+ProtoNotSameAsExtends.prototype = {
+    __proto__: Object.prototype
+}
+
+/**
+ * @constructor
+ * @extends {Base}
+ */
+ProtoNotObjectLiteral = function() {}
+
+ProtoNotObjectLiteral.prototype = Object;
diff --git a/Source/devtools/scripts/jsdoc-validator/tests/return.js b/Source/devtools/scripts/jsdoc-validator/tests/return.js
new file mode 100644
index 0000000..3f91930
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/tests/return.js
@@ -0,0 +1,293 @@
+function badFuncNoAnnotation() {
+    return 1; // ERROR - no @return annotation.
+}
+
+/**
+ * @return {number}
+ */
+function badFuncAnnotatedButNoReturn() // ERROR - no @return annotation.
+{
+}
+
+/**
+ * @return {number}
+ */
+function badFuncAnnotatedButNoReturnValue() // ERROR - no returned value.
+{
+    return;
+}
+
+/**
+ * @return {number}
+ */
+function goodFunc() // OK - annotated @return.
+{
+    return 1;
+}
+
+/**
+ * @returns {number}
+ */
+function badReturnsShouldBeReturnFunc() // ERROR - @returns, should be @return.
+{
+    return 1;
+}
+
+/**
+ * @returns {number}
+ */
+function badReturnsShouldBeReturnNoValueFunc() // ERROR - @returns, should be @return.
+{
+    return;
+}
+
+/**
+ * @returns {number}
+ */
+function badReturnsShouldBeAbsentFunc() // ERROR - @returns, should be absent.
+{
+}
+
+/**
+ * @constructor
+ */
+function TypeOne() {
+    function callback() // OK - not a method.
+    {
+        return 1;
+    }
+}
+
+TypeOne.prototype = {
+    badApiMethodNoAnnotation: function() // ERROR - public method.
+    {
+        return 1;
+    },
+
+    _privateMethod: function() // OK - non-public method.
+    {
+        return 1;
+    },
+
+    methodTwo: function()
+    {
+        function callback() // OK - not a method.
+        {
+            return 1;
+        }
+    },
+
+    /**
+     * @return {number}
+     */
+    methodThatThrows: function() // OK - throws and should be overridden in subclasses.
+    {
+        throw "Not implemented";
+    },
+
+    /**
+     * @return {number}
+     */
+    badMethodDoesNotReturnValue: function() // ERROR - does not return value.
+    {
+        return;
+    },
+
+    /**
+     * @return {number}
+     */
+    badMethodDoesNotReturn: function() // ERROR - does not return.
+    {
+        var foo = 1;
+    },
+
+    /**
+     * @returns {number}
+     */
+    badMethodReturnsShouldBeReturn: function() // ERROR - @returns, should be @return
+    {
+        return 1;
+    },
+
+    /**
+     * @returns {number}
+     */
+    badMethodReturnsShouldBeAbsentToo: function() // ERROR - @returns, should be absent
+    {
+        return;
+    },
+
+    /**
+     * @returns {number}
+     */
+    badMethodReturnsShouldBeAbsent: function() // ERROR - @returns, should be absent
+    {
+        var foo = 1;
+    }
+}
+
+
+/**
+ * @constructor
+ */
+TypeTwo = function() {
+    function callback() // OK - not a method.
+    {
+        return 1;
+    }
+}
+
+TypeTwo.prototype = {
+    badApiMethodNoAnnotation: function() // ERROR - public method.
+    {
+        return 1;
+    },
+
+    _privateMethod: function() // OK - non-public method.
+    {
+        return 1;
+    },
+
+    methodTwo: function()
+    {
+        function callback() // OK - not a method.
+        {
+            return 1;
+        }
+    },
+
+    /**
+     * @return {number}
+     */
+    badMethodDoesNotReturnValue: function() // ERROR - does not return value.
+    {
+        return;
+    },
+
+    /**
+     * @return {number}
+     */
+    badMethodDoesNotReturn: function() // ERROR - does not return.
+    {
+        var foo = 1;
+    },
+
+    /**
+     * @returns {number}
+     */
+    badMethodReturnsShouldBeReturn: function() // ERROR - @returns, should be @return
+    {
+        return 1;
+    },
+
+    /**
+     * @returns {number}
+     */
+    badMethodReturnsShouldBeAbsentToo: function() // ERROR - @returns, should be absent
+    {
+        return;
+    },
+
+    /**
+     * @returns {number}
+     */
+    badMethodReturnsShouldBeAbsent: function() // ERROR - @returns, should be absent
+    {
+        var foo = 1;
+    }
+}
+
+/**
+ * @interface
+ */
+Interface = function() {}
+
+Interface.prototype = {
+    /**
+     * @return {number}
+     */
+    interfaceMethod: function() {}, // OK - interface method.
+
+    /**
+     * @returns {number}
+     */
+    badReturnsInterfaceMethod: function() {} // ERROR - @returns instead of return.
+}
+
+/**
+ * @return {!Object}
+ */
+function returnConstructedObject() {
+
+/**
+ * @constructor
+ */
+TypeThree = function() {
+    function callback() // OK - not a method.
+    {
+        return 1;
+    }
+}
+
+TypeThree.prototype = {
+    badApiMethodNoAnnotation: function() // ERROR - public method.
+    {
+        return 1;
+    },
+
+    _privateMethod: function() // OK - non-public method.
+    {
+        return 1;
+    },
+
+    methodTwo: function()
+    {
+        function callback() // OK - not a method.
+        {
+            return 1;
+        }
+    },
+
+    /**
+     * @return {number}
+     */
+    badMethodDoesNotReturnValue: function() // ERROR - does not return value.
+    {
+        return;
+    },
+
+    /**
+     * @return {number}
+     */
+    badMethodDoesNotReturn: function() // ERROR - does not return.
+    {
+        var foo = 1;
+    },
+
+    /**
+     * @returns {number}
+     */
+    badMethodReturnsShouldBeReturn: function() // ERROR - @returns, should be @return
+    {
+        return 1;
+    },
+
+    /**
+     * @returns {number}
+     */
+    badMethodReturnsShouldBeAbsentToo: function() // ERROR - @returns, should be absent
+    {
+        return;
+    },
+
+    /**
+     * @returns {number}
+     */
+    badMethodReturnsShouldBeAbsent: function() // ERROR - @returns, should be absent
+    {
+        var foo = 1;
+    }
+}
+
+return new TypeThree();
+}
diff --git a/Source/devtools/scripts/jsdoc-validator/tests/this.js b/Source/devtools/scripts/jsdoc-validator/tests/this.js
new file mode 100644
index 0000000..9d23f4a
--- /dev/null
+++ b/Source/devtools/scripts/jsdoc-validator/tests/this.js
@@ -0,0 +1,175 @@
+this.foo = this.foo + 1; // OK - outside of function.
+
+function f() {
+    this.foo = this.foo + 1; // OK - global |this|.
+}
+
+/**
+ * @constructor
+ */
+function TypeOne() {
+    this.foo = this.foo + 1; // OK - object field in ctor.
+
+    /**
+     * @this {TypeOne}
+     */
+    function callbackOne() {
+        this.foo = this.foo + 1; // OK - @this declared.
+
+        function badInnerCallback() {
+            this.foo = this.foo + 2; // ERROR - @this not declared.
+        }
+    }
+
+    function badCallbackInCtor() {
+        this.foo = this.foo + 1; // ERROR - @this not declared.
+    }
+}
+
+TypeOne.prototype = {
+    addListener: function(callback)
+    {
+        if (typeof callback !== "function")
+            throw "addListener: callback is not a function";
+        if (this._listeners.length === 0)
+            extensionServer.sendRequest({ command: commands.Subscribe, type: this._type });
+        this._listeners.push(callback);
+        extensionServer.registerHandler("notify-" + this._type, this._dispatch.bind(this));
+    },
+
+    funcOne: function() {
+        this.foo = this.foo + 1; // OK - in method.
+    },
+
+    funcTwo: function() {
+        /**
+         * @this {TypeOne}
+         */
+        function callback() {
+            this.foo = this.foo + 1; // OK - @this declared.
+        }
+    },
+
+    funcThree: function() {
+        function badCallbackInMethod() {
+            this.foo = this.foo + 1; // ERROR - @this not declared.
+        }
+    }
+}
+
+
+/**
+ * @constructor
+ */
+TypeTwo = function() {
+    this.bar = this.bar + 1; // OK - object field in ctor.
+
+    /**
+     * @this {TypeTwo}
+     */
+    function callbackOne() {
+        this.bar = this.bar + 1; // OK - @this declared.
+
+        function badInnerCallback() {
+            this.bar = this.bar + 2; // ERROR - @this not declared.
+        }
+    }
+
+    function badCallbackInCtor() {
+        this.bar = this.bar + 1; // ERROR - @this not declared.
+    }
+}
+
+TypeTwo.prototype = {
+    funcOne: function() {
+        this.bar = this.bar + 1; // OK - in method.
+    },
+
+    funcTwo: function() {
+        /**
+         * @this {TypeTwo}
+         */
+        function callback() {
+            this.bar = this.bar + 1; // OK - @this declared.
+        }
+    },
+
+    funcThree: function() {
+        function badCallbackInMethod() {
+            this.bar = this.bar + 1; // ERROR - @this not declared.
+        }
+    }
+}
+
+/**
+ * @return {!Object}
+ */
+function returnConstructedObject() {
+
+/**
+ * @constructor
+ */
+TypeThree = function() {
+    this.bar = this.bar + 1; // OK - object field in ctor.
+
+    /**
+     * @this {TypeThree}
+     */
+    function callbackOne() {
+        this.bar = this.bar + 1; // OK - @this declared.
+
+        function badInnerCallback() {
+            this.bar = this.bar + 2; // ERROR - @this not declared.
+        }
+    }
+
+    function badCallbackInCtor() {
+        this.bar = this.bar + 1; // ERROR - @this not declared.
+    }
+}
+
+TypeThree.prototype = {
+    funcOne: function() {
+        this.bar = this.bar + 1; // OK - in method.
+    },
+
+    funcTwo: function() {
+        /**
+         * @this {TypeThree}
+         */
+        function callback() {
+            this.bar = this.bar + 1; // OK - @this declared.
+        }
+    },
+
+    funcThree: function() {
+        function badCallbackInMethod() {
+            this.bar = this.bar + 1; // ERROR - @this not declared.
+        }
+    }
+}
+
+return new TypeThree();
+}
+
+var object = {
+    /**
+     * @this {MyType}
+     */
+    value: function()
+    {
+        this.foo = 1; // OK - @this annotated.
+    }
+};
+
+(function() {
+    var object = {
+        /**
+         * @this {MyType}
+         */
+        value: function()
+        {
+            this.foo = 1; // OK - @this annotated.
+        }
+    };
+})();
diff --git a/Source/devtools/scripts/optimize_png_images.py b/Source/devtools/scripts/optimize_png_images.py
new file mode 100755
index 0000000..e8c51a9
--- /dev/null
+++ b/Source/devtools/scripts/optimize_png_images.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+# Copyright (c) 2014 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.
+
+import devtools_file_hashes
+import glob
+import hashlib
+import os
+import os.path
+import re
+import subprocess
+
+try:
+    import json
+except ImportError:
+    import simplejson as json
+
+scripts_path = os.path.dirname(os.path.abspath(__file__))
+devtools_path = os.path.dirname(scripts_path)
+blink_source_path = os.path.dirname(devtools_path)
+blink_path = os.path.dirname(blink_source_path)
+chromium_src_path = os.path.dirname(os.path.dirname(blink_path))
+devtools_frontend_path = devtools_path + "/front_end"
+images_path = devtools_frontend_path + "/Images"
+image_sources_path = images_path + "/src"
+hashes_file_name = "optimize_png.hashes"
+hashes_file_path = image_sources_path + "/" + hashes_file_name
+
+file_names = os.listdir(image_sources_path)
+svg_file_paths = [image_sources_path + "/" + file_name for file_name in file_names if file_name.endswith(".svg")]
+svg_file_paths_to_optimize = devtools_file_hashes.files_with_invalid_hashes(hashes_file_path, svg_file_paths)
+svg_file_names = [re.sub(".svg$", "", re.sub(".*/", "", file_path)) for file_path in svg_file_paths_to_optimize]
+
+optimize_script_path = "tools/resources/optimize-png-files.sh"
+
+
+def optimize_png(file_name):
+    png_full_path = images_path + "/" + file_name + ".png"
+    optimize_command = "%s -o2 %s" % (optimize_script_path, png_full_path)
+    proc = subprocess.Popen(optimize_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True, cwd=chromium_src_path)
+    return proc
+
+processes = {}
+for file_name in svg_file_names:
+    name = re.sub(".svg$", "", file_name)
+    name2x = name + "_2x"
+    processes[name] = optimize_png(name)
+    processes[name2x] = optimize_png(name2x)
+
+for file_name, proc in processes.items():
+    (optimize_out, _) = proc.communicate()
+    print("Optimization of %s finished: %s" % (file_name, optimize_out))
+
+devtools_file_hashes.update_file_hashes(hashes_file_path, svg_file_paths)
diff --git a/Source/devtools/scripts/optimize_svg_file.py b/Source/devtools/scripts/optimize_svg_file.py
new file mode 100755
index 0000000..4394daa
--- /dev/null
+++ b/Source/devtools/scripts/optimize_svg_file.py
@@ -0,0 +1,348 @@
+#!/usr/bin/env python
+# Copyright (c) 2014 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.
+
+import re
+import string
+import sys
+import xml.dom.minidom
+
+
+def _optimize_number(value):
+    try:
+        if value[0] == "#" or value[0] == "n":
+            return value
+        numeric = round(float(value), 2)
+        short = int(numeric)
+        if short == numeric:
+            return str(short)
+        return str(numeric)
+    except:
+        return value
+
+
+def _optimize_value(value, default):
+    value = value.strip()
+    if value.endswith("px"):
+        value = value[:-2]
+    if value.endswith("pt"):
+        print "WARNING: 'pt' size units are undesirable."
+    if len(value) == 7 and value[0] == "#" and value[1] == value[2] and value[3] == value[4] and value[6] == value[6]:
+        value = "#" + value[1] + value[3] + value[5]
+    value = _optimize_number(value)
+    if value == default:
+        value = ""
+    return value
+
+
+def _optimize_values(node, defaults):
+    items = {}
+    if node.hasAttribute("style"):
+        for item in node.getAttribute("style").strip(";").split(";"):
+            [key, value] = item.split(":", 1)
+            key = key.strip()
+            if key not in defaults:
+                continue
+            items[key] = _optimize_value(value, defaults[key])
+
+    for key in defaults.keys():
+        if node.hasAttribute(key):
+            value = _optimize_value(node.getAttribute(key), defaults[key])
+            items[key] = value
+
+    if len([(key, value) for key, value in items.iteritems() if value != ""]) > 4:
+        style = []
+        for key, value in items.iteritems():
+            if node.hasAttribute(key):
+                node.removeAttribute(key)
+            if value != "":
+                style.append(key + ":" + value)
+        node.setAttribute("style", string.join(sorted(style), ";"))
+    else:
+        if node.hasAttribute("style"):
+            node.removeAttribute("style")
+        for key, value in items.iteritems():
+            if value == "":
+                if node.hasAttribute(key):
+                    node.removeAttribute(key)
+            else:
+                node.setAttribute(key, value)
+
+
+def _optimize_path(value):
+    path = []
+    commands = "mMzZlLhHvVcCsSqQtTaA"
+    last = 0
+    raw = " " + value + " "
+    for i in range(len(raw)):
+        if raw[i] in [" ", ","]:
+            if last < i:
+                path.append(raw[last:i])
+            # Consumed whitespace
+            last = i + 1
+        elif raw[i] == "-" and raw[i - 1] != "e" and raw[i - 1] != "e":
+            if last < i:
+                path.append(raw[last:i])
+            last = i
+        elif raw[i] in commands:
+            if last < i:
+                path.append(raw[last:i])
+            path.append(raw[i])
+            # Consumed command
+            last = i + 1
+    out = []
+    need_space = False
+    for item in path:
+        if item in commands:
+            need_space = False
+        else:
+            item = _optimize_number(item)
+            if need_space and item[0] != "-":
+                out.append(" ")
+            need_space = True
+        out.append(item)
+    return string.join(out, "")
+
+
+def _optimize_paths(dom):
+    for node in dom.getElementsByTagName("path"):
+        path = node.getAttribute("d")
+        node.setAttribute("d", _optimize_path(path))
+
+
+def _check_groups(dom, errors):
+    if len(dom.getElementsByTagName("g")) != 0:
+        errors.append("Groups are prohibited.")
+
+
+def _check_text(dom, errors):
+    if len(dom.getElementsByTagName("text")) != 0:
+        errors.append("Text elements prohibited.")
+
+
+def _check_transform(dom, errors):
+    if (any(path.hasAttribute("transform") for path in dom.getElementsByTagName("path")) or
+        any(rect.hasAttribute("transform") for rect in dom.getElementsByTagName("rect"))):
+        errors.append("Transforms are prohibited.")
+
+
+def _cleanup_dom_recursively(node, dtd):
+    junk = []
+    for child in node.childNodes:
+        if child.nodeName in dtd:
+            _cleanup_dom_recursively(child, dtd[child.nodeName])
+        else:
+            junk.append(child)
+
+    for child in junk:
+        node.removeChild(child)
+
+
+def _cleanup_dom(dom):
+    dtd = {
+        "svg": {
+            "sodipodi:namedview": {
+                "inkscape:grid": {}},
+            "defs": {
+                "linearGradient": {
+                    "stop": {}},
+                "radialGradient": {
+                    "stop": {}}},
+            "path": {},
+            "rect": {}}}
+    _cleanup_dom_recursively(dom, dtd)
+
+
+def _cleanup_sodipodi(dom):
+    for node in dom.getElementsByTagName("svg"):
+        for key in node.attributes.keys():
+            if key not in ["height", "version", "width", "xml:space", "xmlns", "xmlns:xlink", "xmlns:sodipodi", "xmlns:inkscape"]:
+                node.removeAttribute(key)
+
+    for node in dom.getElementsByTagName("sodipodi:namedview"):
+        for key in node.attributes.keys():
+            if key != "showgrid":
+                node.removeAttribute(key)
+
+    for nodeName in ["defs", "linearGradient", "path", "radialGradient", "rect", "stop", "svg"]:
+        for node in dom.getElementsByTagName(nodeName):
+            for key in node.attributes.keys():
+                if key.startswith("sodipodi:") or key.startswith("inkscape:"):
+                    node.removeAttribute(key)
+
+
+def _cleanup_ids(dom):
+    for nodeName in ["defs", "path", "rect", "sodipodi:namedview", "stop", "svg"]:
+        for node in dom.getElementsByTagName(nodeName):
+            if node.hasAttribute("id"):
+                node.removeAttribute("id")
+
+
+def _optimize_path_attributes(dom):
+    defaults = {
+        "fill": "#000",
+        "fill-opacity": "1",
+        "fill-rule": "nonzero",
+        "opacity": "1",
+        "stroke": "none",
+        "stroke-dasharray": "none",
+        "stroke-linecap": "butt",
+        "stroke-linejoin": "miter",
+        "stroke-miterlimit": "4",
+        "stroke-opacity": "1",
+        "stroke-width": "1"}
+    for nodeName in ["path", "rect"]:
+        for node in dom.getElementsByTagName(nodeName):
+            _optimize_values(node, defaults)
+
+
+def _optimize_stop_attributes(dom):
+    defaults = {
+        "stop-color": "#000",
+        "stop-opacity": "1"}
+    for node in dom.getElementsByTagName("stop"):
+        _optimize_values(node, defaults)
+
+
+def _cleanup_gradients(dom):
+    while True:
+        gradients = []
+        for nodeName in ["linearGradient", "radialGradient"]:
+            for node in dom.getElementsByTagName(nodeName):
+                name = node.getAttribute("id")
+                gradients.append({"node": node, "ref": "#" + name, "url": "url(#" + name + ")", "has_ref": False})
+        for nodeName in ["linearGradient", "path", "radialGradient", "rect"]:
+            for node in dom.getElementsByTagName(nodeName):
+                for key in node.attributes.keys():
+                    if key == "id":
+                        continue
+                    value = node.getAttribute(key)
+                    for gradient in gradients:
+                        if gradient["has_ref"] == False:
+                            if value == gradient["ref"] or value.find(gradient["url"]) != -1:
+                                gradient["has_ref"] = True
+        finished = True
+        for gradient in gradients:
+            if gradient["has_ref"] == False:
+                gradient["node"].parentNode.removeChild(gradient["node"])
+                finished = False
+        if finished:
+            break
+
+
+def _generate_name(num):
+    letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+    n = len(letters)
+    if num < n:
+        return letters[num]
+    return letters[num / n] + letters[num % n]
+
+
+def _optimize_gradient_ids(dom):
+    gradients = []
+    names = {}
+    for nodeName in ["linearGradient", "radialGradient"]:
+        for node in dom.getElementsByTagName(nodeName):
+            name = node.getAttribute("id")
+            gradients.append({"node": node, "name": name, "ref": "#" + name, "url": "url(#" + name + ")", "new_name": None})
+            names[name] = True
+    cntr = 0
+    for gradient in gradients:
+        if len(gradient["name"]) > 2:
+            while True:
+                new_name = _generate_name(cntr)
+                cntr = cntr + 1
+                if new_name not in names:
+                    gradient["new_name"] = new_name
+                    gradient["node"].setAttribute("id", new_name)
+                    break
+    if cntr == 0:
+        return
+    gradients = [gradient for gradient in gradients if gradient["new_name"] is not None]
+    for nodeName in ["linearGradient", "path", "radialGradient", "rect"]:
+        for node in dom.getElementsByTagName(nodeName):
+            for key in node.attributes.keys():
+                if key == "id":
+                    continue
+                value = node.getAttribute(key)
+                for gradient in gradients:
+                    if value == gradient["ref"]:
+                        node.setAttribute(key, "#" + gradient["new_name"])
+                    elif value.find(gradient["url"]) != -1:
+                        value = value.replace(gradient["url"], "url(#" + gradient["new_name"] + ")")
+                        node.setAttribute(key, value)
+
+
+def _build_xml(dom):
+    raw_xml = dom.toxml("utf-8")
+    # Turn to one-node-per-line
+    pretty_xml = re.sub("([^?])(/?>)(?!</)", "\\1\\n\\2", raw_xml)
+    return pretty_xml
+
+
+def optimize_svg(file, errors):
+    try:
+        dom = xml.dom.minidom.parse(file)
+    except:
+        errors.append("Can't parse XML.")
+        return
+
+    _check_groups(dom, errors)
+    _check_text(dom, errors)
+    _check_transform(dom, errors)
+    if len(errors) != 0:
+        return
+
+    _cleanup_dom(dom)
+    _cleanup_ids(dom)
+    _cleanup_sodipodi(dom)
+    _cleanup_gradients(dom)
+
+    _optimize_gradient_ids(dom)
+    _optimize_path_attributes(dom)
+    _optimize_stop_attributes(dom)
+    _optimize_paths(dom)
+    # TODO: Bake nested gradients
+    # TODO: Optimize gradientTransform
+
+    with open(file, "w") as text_file:
+        text_file.write(_build_xml(dom))
+
+
+if __name__ == '__main__':
+    if len(sys.argv) != 1:
+        print('usage: %s input_file' % sys.argv[0])
+        sys.exit(1)
+    errors = []
+    optimize_svg(sys.argv[1], errors)
+    for error in errors:
+        print "ERROR: %s" % (error)
+    if len(errors) != 0:
+        sys.exit(1)
+    else:
+        sys.exit(0)
diff --git a/Source/devtools/supported_css_properties.target.darwin-arm.mk b/Source/devtools/supported_css_properties.target.darwin-arm.mk
new file mode 100644
index 0000000..4bc6467
--- /dev/null
+++ b/Source/devtools/supported_css_properties.target.darwin-arm.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_supported_css_properties_gyp
+LOCAL_MODULE_STEM := supported_css_properties
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generateSupportedCSSProperties":
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_supported_css.py $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/SVGCSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSShorthands.in $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: Generating supported CSS properties for front end ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/blink; python scripts/generate_supported_css.py ../core/css/CSSPropertyNames.in ../core/css/SVGCSSPropertyNames.in ../core/css/CSSShorthands.in "$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+# Alias gyp target name.
+.PHONY: supported_css_properties
+supported_css_properties: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/supported_css_properties.target.darwin-mips.mk b/Source/devtools/supported_css_properties.target.darwin-mips.mk
new file mode 100644
index 0000000..4bc6467
--- /dev/null
+++ b/Source/devtools/supported_css_properties.target.darwin-mips.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_supported_css_properties_gyp
+LOCAL_MODULE_STEM := supported_css_properties
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generateSupportedCSSProperties":
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_supported_css.py $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/SVGCSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSShorthands.in $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: Generating supported CSS properties for front end ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/blink; python scripts/generate_supported_css.py ../core/css/CSSPropertyNames.in ../core/css/SVGCSSPropertyNames.in ../core/css/CSSShorthands.in "$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+# Alias gyp target name.
+.PHONY: supported_css_properties
+supported_css_properties: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/supported_css_properties.target.darwin-x86.mk b/Source/devtools/supported_css_properties.target.darwin-x86.mk
new file mode 100644
index 0000000..4bc6467
--- /dev/null
+++ b/Source/devtools/supported_css_properties.target.darwin-x86.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_supported_css_properties_gyp
+LOCAL_MODULE_STEM := supported_css_properties
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generateSupportedCSSProperties":
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_supported_css.py $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/SVGCSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSShorthands.in $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: Generating supported CSS properties for front end ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/blink; python scripts/generate_supported_css.py ../core/css/CSSPropertyNames.in ../core/css/SVGCSSPropertyNames.in ../core/css/CSSShorthands.in "$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+# Alias gyp target name.
+.PHONY: supported_css_properties
+supported_css_properties: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/supported_css_properties.target.linux-arm.mk b/Source/devtools/supported_css_properties.target.linux-arm.mk
new file mode 100644
index 0000000..4bc6467
--- /dev/null
+++ b/Source/devtools/supported_css_properties.target.linux-arm.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_supported_css_properties_gyp
+LOCAL_MODULE_STEM := supported_css_properties
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generateSupportedCSSProperties":
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_supported_css.py $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/SVGCSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSShorthands.in $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: Generating supported CSS properties for front end ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/blink; python scripts/generate_supported_css.py ../core/css/CSSPropertyNames.in ../core/css/SVGCSSPropertyNames.in ../core/css/CSSShorthands.in "$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+# Alias gyp target name.
+.PHONY: supported_css_properties
+supported_css_properties: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/supported_css_properties.target.linux-mips.mk b/Source/devtools/supported_css_properties.target.linux-mips.mk
new file mode 100644
index 0000000..4bc6467
--- /dev/null
+++ b/Source/devtools/supported_css_properties.target.linux-mips.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_supported_css_properties_gyp
+LOCAL_MODULE_STEM := supported_css_properties
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generateSupportedCSSProperties":
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_supported_css.py $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/SVGCSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSShorthands.in $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: Generating supported CSS properties for front end ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/blink; python scripts/generate_supported_css.py ../core/css/CSSPropertyNames.in ../core/css/SVGCSSPropertyNames.in ../core/css/CSSShorthands.in "$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+# Alias gyp target name.
+.PHONY: supported_css_properties
+supported_css_properties: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@
diff --git a/Source/devtools/supported_css_properties.target.linux-x86.mk b/Source/devtools/supported_css_properties.target.linux-x86.mk
new file mode 100644
index 0000000..4bc6467
--- /dev/null
+++ b/Source/devtools/supported_css_properties.target.linux-x86.mk
@@ -0,0 +1,50 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := third_party_WebKit_Source_devtools_supported_css_properties_gyp
+LOCAL_MODULE_STEM := supported_css_properties
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generateSupportedCSSProperties":
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js: $(LOCAL_PATH)/third_party/WebKit/Source/devtools/scripts/generate_supported_css.py $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/SVGCSSPropertyNames.in $(LOCAL_PATH)/third_party/WebKit/Source/core/css/CSSShorthands.in $(GYP_TARGET_DEPENDENCIES)
+	@echo "Gyp action: Generating supported CSS properties for front end ($@)"
+	$(hide)cd $(gyp_local_path)/third_party/WebKit/Source/devtools; mkdir -p $(gyp_shared_intermediate_dir)/blink; python scripts/generate_supported_css.py ../core/css/CSSPropertyNames.in ../core/css/SVGCSSPropertyNames.in ../core/css/CSSShorthands.in "$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js"
+
+
+
+GYP_GENERATED_OUTPUTS := \
+	$(gyp_shared_intermediate_dir)/blink/SupportedCSSProperties.js
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+# Alias gyp target name.
+.PHONY: supported_css_properties
+supported_css_properties: third_party_WebKit_Source_devtools_supported_css_properties_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	$(hide) echo "Gyp timestamp: $@"
+	$(hide) mkdir -p $(dir $@)
+	$(hide) touch $@