This CL adjusts entrypoints for Settings. 1) Adds a Settings Gear icon to the top-level toolbar 2) Moves Settings ... menu entry to More tools submenu https://i.imgur.com/9WS6EGy.png This CL also includes telemetry for Settings, so we can better evaluate how users are finding Settings, and which Settings tabs are most popular. 1) Record a User Action for opening Settings - Reveal Settings via Gear icon - Reveal Settings via Top Menu -> More tools -> Settings OR via Top Menu -> Shortcuts - Reveal Settings via Command menu Remark: The keyboard shortcut F1 / Shift+? to reveal Settings does not record an action here; keyboard shortcut telemetry for the settings.show action is already taken care of. 2) Report Panel Open action for each Settings tab - On reveal: should report exactly the panel opened once - On switch tabs: should report exactly the panel switched to once The corresponding Chrome CL to add the new enums is here. https://chromium-review.googlesource.com/c/chromium/src/+/2055359 In order to have the Settings screen record Panel Open actions reliably, a new TabInvoked event was added to TabbedPane which is triggered by all tab selections, both programmatic and user invoked. The existing TabSelected event only triggers on tab changes. Using TabSelected prevent the Settings screen from reporting panel open events when closed and re-opened to the same tab. One criteria for determining whether to report a panel open is that the tab is invoked by a user (userGesture) and not programmatically. For user invokable items in context menu and the Command menu, this userGesture argument is now set to `true` by default, as both must have been invoked by a user. Bug: 1050855 Change-Id: Id2e6e5f995bf2e6d419a3144eeec3e6af2bf208b Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2049183 Reviewed-by: Robert Paveza <Rob.Paveza@microsoft.com> Reviewed-by: Jack Lynch <jalyn@microsoft.com> Commit-Queue: Brian Cui <brcui@microsoft.com>
Chrome DevTools frontend
The client-side of the Chrome DevTools, including all JS & CSS to run the DevTools webapp.
Source code
The frontend is available on chromium.googlesource.com.
Design Guidelines
Please be aware that DevTools follows additional development guidelines.
Workflows
In order to make changes to DevTools frontend, build, run, test, and submit changes, several workflows exist. Having depot_tools set up is a common prerequisite.
Integrate standalone checkout into Chromium (strongly recommended)
This workflow will ensure that your local setup is equivalent to how Chromium infrastructure tests your change. It also allows you to develop DevTools independently of the version in your Chromium checkout. This means that you don't need to update Chromium often, in order to work on DevTools.
In chromium/src, run gclient sync to make sure you have installed all required submodules.
gclient sync
Then, disable gclient sync for DevTools frontend inside of Chromium by editing .gclient config. From chromium/src/, simply run
vim $(gclient root)/.gclient
In the custom_deps section, insert this line:
"src/third_party/devtools-frontend/src": None,
Then run
gclient sync -D
This removes the DevTools frontend dependency. We now create a symlink to refer to the standalone checkout (execute in chromium/src and make sure that third_party/devtools-frontend exists):
(Note that the folder names do NOT include the trailing slash)
ln -s path/to/standalone/devtools-frontend third_party/devtools-frontend/src
Running gclient sync in chromium/src/ will update dependencies for the Chromium checkout.
Running gclient sync in chromium/src/third_party/devtools-frontend/src will update dependencies for the standalone checkout.
Standalone workflow
As a standalone project, Chrome DevTools frontend can be checked out and built independently from Chromium. The main advantage is not having to check out and build Chromium. However, there is also no way to run layout tests in this workflow.
Checking out source
To check out the source for DevTools frontend only, follow these steps:
mkdir devtools
cd devtools
fetch devtools-frontend
Build
To build, follow these steps:
cd devtools-frontend
gn gen out/Default
autoninja -C out/Default
The resulting build artifacts can be found in out/Default/resources/inspector.
Update to latest
To update to latest tip of tree version:
git fetch origin
git checkout origin/master
gclient sync
Run in Chromium
These steps work with Chromium 79 or later. To run the production build, use
(Requires brew install coreutils on Mac.)
<path-to-chrome>/chrome --custom-devtools-frontend=file://$(realpath out/Default/resources/inspector)
To run the debug build (directly symlinked to the original unminified source files),
build both Chromium and DevTools frontend with the GN flag debug_devtools=true, and use
<path-to-chrome>/chrome --custom-devtools-frontend=file://$(realpath out/Default/resources/inspector/debug)
You can inspect DevTools with DevTools by undocking DevTools and then open the developers tools (F12 on Windows/Linux, Cmd+Option+I on Mac).
Test
Test are available by running scripts in scripts/test/.
Create a change
Usual steps for creating a change work out of the box.
Managing dependencies
- To sync dependencies from Chromium to DevTools frontend, use
scripts/deps/roll_deps.py. - To roll the HEAD commit of DevTools frontend into Chromium, use
scripts/deps/roll_to_chromium.py. - To update DevTools frontend's DEPS, use
roll-dep.
Chromium workflow (discouraged)
DevTools frontend can also be developed as part of the full Chromium checkout. This workflow can be used to make small patches to DevTools as a Chromium engineer. However, it is different to our infrastructure setup and how to execute general maintenance work.
Checking out source
Follow instructions to check out Chromium. DevTools frontend can be found under third_party/devtools-frontend/src/.
Build
Refer to instructions to build Chromium. To only build DevTools frontend, use devtools_frontend_resources as build target. The resulting build artifacts for DevTools frontend can be found in out/Default/resources/inspector.
Consider building with the GN flag debug_devtools=true to symlink to the original unminified source.
Run
Run Chrome with DevTools frontend bundled:
out/Default/chrome
Test
Test are available by running scripts in third_party/devtools-frontend/src/scripts/test/.
After building content shell, we can also run layout tests that are relevant for DevTools frontend:
autoninja -C out/Default content_shell
third_party/blink/tools/run_web_tests.py http/tests/devtools
Create a change
Usual steps for creating a change work out of the box, when executed in third_party/devtools-frontend/src/.
Testing
Please refer to the overview document. The current test status can be seen at the test waterfall.
Additional references
- DevTools documentation: devtools.chrome.com
- Debugging protocol docs and Chrome Debugging Protocol Viewer
- awesome-chrome-devtools: recommended tools and resources
- Contributing to DevTools: bit.ly/devtools-contribution-guide
- Contributing To Chrome DevTools Protocol: docs.google.com
- DevTools Design Review Guidelines: DESGN_GUIDELINES.MD
Merges and Cherry-Picks
Merge request/approval is handled by Chromium Release Managers. DevTools follows The Zen of Merge Requests. In exceptional cases please get in touch with hablich@chromium.org.
Step-by-step guide on how to merge:
- Request and receive approval to merge
- Backmerges are done to the chromium/xxxx (e.g. chromium/3979) branch respectively on the DevTools frontend repo
- Use Omahaproxy to find out what branch a major Chromium version has (column true_branch). Open the to-be-merged commit in Gerrit e.g. Example
- Click hamburger menu on the top right and select Cherry Pick
- Select branch to merge to e.g. chromium/3968
- Cherry Pick CL is created e.g. Example
- Get it reviewed if necessary
- Click hamburger menu on the cherry pick CL and select Submit
- Done
Useful Commands
git cl format --js
Formats all code using clang-format.
npm run check
Runs all static analysis checks on DevTools code.
Source mirrors
DevTools frontend repository is mirrored on GitHub.
DevTools frontend is also available on NPM as the chrome-devtools-frontend package. It's not currently available via CJS or ES2015 modules, so consuming this package in other tools may require some effort.
The version number of the npm package (e.g. 1.0.373466) refers to the Chromium commit position of latest frontend git commit. It's incremented with every Chromium commit, however the package is updated roughly daily.
Getting in touch
-
All devtools commits: View the log or follow @DevToolsCommits on Twitter
-
All open DevTools tickets on crbug.com
-
File a new DevTools ticket: new.crbug.com
-
Code reviews mailing list: devtools-reviews@chromium.org
-
@ChromeDevTools on Twitter
-
Chrome DevTools mailing list: groups.google.com/forum/google-chrome-developer-tools